FreeCAD による OpenFOAM 用モデルの作成2017年12月24日 | ||||||||||||||||||||||
はじめにFreeCAD で OpenFOAM 用モデルを作成する。 使用バージョンFreeCAD 0.15 Linux 版、OpenFOAM v1706 インストールUbuntu の場合、以下のように実行すればよい。 $ sudo add-apt-repository ppa:freecad-maintainers/freecad-stable $ sudo apt-get update $ apt-get install freecad 実行。 $ freecad FreeCAD 入門![]() FreeCAD の起動FreeCAD がインストールされていれば、デスクトップメニューからアイコンを選択するか、端末で "freecad" と打ち込むことで FreeCAD を起動できる。 新規FreeCAD を起動したら、メニュー [ファイル]-[新規] で新規ドキュメントを作成する。 ワークベンチFreeCAD は "ワークベンチ" と呼ばれるモジュールを切り替えて使う。ワークベンチの切り替えはメニューの [表示]-[ワークベンチ] で行うか、以下のリストで行う。 ![]() よく使われるものは "Part"、"Draft"、"Part Design" などである。 ここでは説明を簡単にするために、主要なワークベンチを有効にする "Complete" を選択する。 マウスによる画面操作3D 表示画面のマウス操作にはいくつかのスタイルがあり、右クリックで出るポップアップメニューの "ナビゲーションスタイル" で切り替える。ここでは 2 つ挙げる。 Inventor navigation
CAD navigation
視点の操作
オブジェクトの作成・削除ソリッドの作成![]() ボタンを押したらすぐにソリッドが作られる。寸法などはツリーで編集する。 線などの作成![]() パラメタを問い合わせてくるので、マウスで指定する。 ![]() 画面左上に問い合わせ内容が表示される。正確な数値の指定が必要な場合は、キーボードで指定できる (Enter で先に進む)。 オブジェクトの削除オブジェクトの削除は、オブジェクトを選択してポップアップメニュー "削除" か、Del キーを押す。 オブジェクトのプロパティの編集オブジェクトのプロパティの編集は "コンボビュー" で行う。 ![]() 画面かツリーでオブジェクトを選択すると、そのプロパティが表示される。"データ" タブでオブジェクトの寸法や位置を参照できる。"Placement" でオブジェクトの位置や向きを設定できる。また、たとえば円柱の場合、"Height" 高さや "Radius" 半径を設定できる。 オブジェクトの移動![]() 移動は視点の向きをベースにして行われる。 並行移動 (左のアイコン) では、始点と終点を指定する。 回転 (右のアイコン) では、回転中心と回転開始角度、回転終了角度を指定する。 面の掃引によるソリッドの作成![]() 面を引き伸ばしたり (Extrude) 回転させたり (Revolve) してボリュームを作成できる。 ブーリアン演算![]() 複数のオブジェクトを選択して、ブーリアン演算を行える。 アップグレード・ダウングレード![]() 複数のオブジェクトをまとめ上げたり (アップグレード、上向き矢印)、バラバラにしたり (ダウングレード、下向き矢印) できる。ダウングレードでソリッドを面に分解したりできる。 オブジェクトの表示・非表示オブジェクトを選択して Space で表示・非表示を切り替えられる。 作成するモデル![]() ミキシングエルボー 左下の入り口を in1、右下の入り口を in2 とする。右上を出口 out とする。 モデルの作成基本方針
円柱 (Cylinder) のアイコンをクリックして、円柱を作る。円柱が見えるように "1" を押す。オブジェクトを選択して、"コンボビュー" の "データ" タブのプロパティで Height = 30、Radius = 5 とする。円柱が画面いっぱいになるので、ポップアップメニュー (画面右クリック) で "Fit all" する。オブジェクトのプロパティ "Placement" で Y 軸回りに 90°回転させる (Axis を (0, 1, 0) とし、Angle を 90°とする)。 ![]() 円柱を作るアイコン ![]() "3" を押して円だけが見えるようにする。円のアイコンをクリックする。円の中心と半径を聞かれるので、それぞれ (30, 0, 0)、5 を指定する。 ![]() 円を作るアイコン "1" を押す。回転 (Revolve) アイコンをクリックする。円 "Circle" を選択し、角度 90°、回転軸中心 (30, 0, 15)、回転軸は Axis の "ユーザー定義..." で (0, -1, 0) と設定する。 ![]() 回転アイコン ![]() 円柱を作る。プロパティで高さ 30、半径 5、位置 (45, 0, 15) を設定する (位置は Position で設定)。 ![]() 円柱を作る。プロパティで高さ 15、半径 2.5、位置 (0, 0, -10) を設定する。その円柱を選択した状態で回転 (Rotate) アイコンをクリックし、原点中心で左に 45°傾ける (視点は "1" を押した状態、(0, 0, 0)、0°、45°を指定する)。平行移動アイコンをクリックし、(50, 0, 15) だけ移動する ((0, 0, 0)、(50, 0, 15) を指定する。Relative のチェックははずす)。さらに回転アイコンをクリックし、(30, 0, 15) を中心に時計回りに 45°回転させる ((30, 0, 15)、0°、-45°を指定する)。 ![]() 平行移動・回転アイコン ![]() オブジェクトをすべて選んで Union アイコンをクリックする。 ![]() Union アイコン メニュー [ファイル]-[名前を付けて保存] でデータを "mixing_elbow" という名前で保存する。 境界の設定境界条件設定用に境界を指定したい。snappyHexMesh の利用を想定すると、完成した形状をダウングレードアイコンで面に分解し、境界ごとにまとめ (Union)、メニュー [メッシュ]-[図形からメッシュを作成する] でそれぞれの面からメッシュを作成し、それらを STL 形式で出力すればよい。 ![]() ダウングレードアイコン STL ファイルの出力は、出力したいオブジェクトを選び、メニュー [ファイル]-[エクスポート...] で名前に ".ast" という拡張子を付けて保存する (".ast" は ASCII STL の拡張子)。それぞれファイルを開き、境界の名前を付ける。
solid in1
...
endsolid in1
名前を付けたらファイルを 1 つにまとめる。 $ cat *.ast > mixing_elbow.stl 境界がたくさんある場合、これを手動で実行するのは大変な作業になるので、自動化する。 export_stl.py
import os
import Mesh
import MeshPart
labels = []
doc = App.ActiveDocument
for obj in doc.Objects:
if obj.Label[0:3] == 'bc:':
mesh = doc.addObject("Mesh::Feature", "Mesh")
# mefisto
#mesh.Mesh = MeshPart.meshFromShape(Shape=obj.Shape, MaxLength=10)
# standard
mesh.Mesh = Mesh.Mesh(obj.Shape.tessellate(0.01))
label = obj.Label[3:]
labels.append(label)
Mesh.export([mesh], './' + label + '.ast')
doc.removeObject(mesh.Name)
with open('./' + doc.Label + '.stl', 'w') as f:
for label in labels:
with open('./' + label + '.ast', 'r') as fi:
for line in fi:
if line[:5] == 'solid':
line = 'solid ' + label + '\n'
elif line[:8] == 'endsolid':
line = 'endsolid ' + label + '\n'
f.write(line)
for label in labels:
os.remove('./' + label + '.ast')
これを、たとえば "~/.FreeCAD/macro" などに置き、メニュー [マクロ]-[マクロ...] (あるいは [ツール]-[マクロ...]) の "マクロのコピー先" にパスを設定すれば、上記スクリプトが実行可能になる。 境界ごとに "コンボビュー" の "データ" タブの "Label" で "bc:" という文字列を頭に付けた名前を設定しておけば、上記のマクロを実行することでそれらだけが STL ファイルとしてカレントディレクトリに出力される。境界名はそれぞれの名前から "bc:" を取ったものになる。 ParaView で形状を確認する。 ![]() スケールの変換STL ファイルのスケール (単位) の変換を行うには、OpenFOAM のユーティリティ surfaceConvert を使う。たとえば mm から m に変換する場合は次のようにする。 $ surfaceConvert -scale 0.001 mixing_elbow-mm.stl mixing_elbow.stl | ||||||||||||||||||||||
| PENGUINITIS | ||||||||||||||||||||||