見出し画像

【OpenFOAM改訂版(1)】ミキシングエルボーのモデル作成(FreeCAD)。

先日からOpenFOAMのペンギン本と呼ばれる書籍の改訂版を読み始めました。

さらに、最近OpenFOAMの歩き方という実践編の内容や、DEXCSというOpenFOAMがインストールされた仮想環境の内容も届きまして、OpenFOAMがここに来て盛り上がっています。

これはOpenFOAMをもう一度学びなおそうというきっかけになるなと思い、GW初日から触り始めました。

あとはOpenFOAMのソースコードがC++であるため、同時にC++の基礎勉強もしようと思います。

※本記事はただの日記であり手順書ではありません_(._.)_

FreeCAD

ミキシングエルボーのモデル作成は3年前にもやったことがあり、自分用に資料を残していたのですんなり作成できました。

画像12

画像13

画像14


画像15

画像16

画像1

これで完成です。

あとは境界面に名前を付けてstlファイルで出力すればOKです。

面のみをstlファイルに変換

全ての面をstlファイルにして、全ての面の名前を変えて、最後に結合するという手順を踏まないといけないのですが、一括で行うためのマクロがないため手動で行いました。

↓こちらの記事に詳しく書かれているので問題なく進みました。

画像2

cat *.ast > model_mixing-elbow.stl

画像6

まとまったstlファイルの中身を確認します。

model_mixing-elbow.stl

画像9

FreeCADで設定した数値はmmを単位として作成したため、1/1000に変換する必要があります。

surfaceConvert -scale 0.001 model_mixing-elbow.stl model_mixing-elbow-m.stl

画像10

一括で変換するマクロを試す

先ほどは手動でstlファイルを作成しましたが、
●全ての面をstlファイルにする
●全ての面の名前を変える
●結合する
という手順は面の数が多くなると手動では行いきれないのでマクロを作成しておくと良いですね。

こちらにサンプルのスクリプトがあります。

import os
import Mesh
import MeshPart

# 現在のディレクトリ
print('現在のディレクトリ:',os.getcwd())

labels = []

doc = App.ActiveDocument
print(doc)

for obj in doc.Objects:
   if obj.Label[0:3] == 'bc:':
       mesh = doc.addObject("Mesh::Feature", "Mesh")
       print(mesh)
       # mefisto
       #mesh.Mesh = MeshPart.meshFromShape(Shape=obj.Shape, MaxLength=10)
       # standard
       mesh.Mesh = Mesh.Mesh(obj.Shape.tessellate(0.01))
       print(mesh.Mesh)

       label = obj.Label[3:]
       labels.append(label)
       Mesh.export([mesh], './' + label + '.ast')
       print(label)
       doc.removeObject(mesh.Name)
       
print(doc.Label)
print(labels, type(labels))

with open('./' + doc.Label + '.stl', 'w') as f:
   print('test')
   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')


マクロのスクリプトはPythonで書くことができるので、Pythonファイルをしかるべき場所に保存します。

画像3


画像4

実行します。

画像5

エラーが出てしましました。

画像7

パーミッションが問題だと言われています。
権限の問題?

画像8

ちなみに面の名前の頭に「bc:」と付けたものだけをstlとして出力するスクリプトになっています。

色々とprint文などでエラーの解読を試みます。

17:51:42  現在のディレクトリ: C:\Program Files\FreeCAD 0.19\bin
17:51:42  <Document object at 0000018CCE837080>
17:51:42  Mesh::Feature object at 0000018D1BB7ED60
17:51:42  Saving mesh failed: Export of STL mesh failed: ./inlet1.ast
17:51:42  inlet1
17:51:42  Mesh::Feature object at 0000018D1BB7ED60
17:51:42  Saving mesh failed: Export of STL mesh failed: ./inlet2.ast
17:51:42  inlet2
17:51:42  Mesh::Feature object at 0000018D1BB7F1F0
17:51:42  Saving mesh failed: Export of STL mesh failed: ./outlet2.ast
17:51:42  outlet2
17:51:42  Mesh::Feature object at 0000018D1BB7ED60
17:51:42  Saving mesh failed: Export of STL mesh failed: ./side.ast
17:51:42  side
17:51:42  model
17:51:42  ['inlet1', 'inlet2', 'outlet2', 'side'] <class 'list'>
17:51:42  Traceback (most recent call last):
 File "C:/Users/81801/AppData/Roaming/FreeCAD/Macro/export_stl.py", line 30, in <module>
   with open('./' + doc.Label + '.stl', 'w') as f:
<class 'PermissionError'>: [Errno 13] Permission denied: './model.stl'

所々「Saving mesh failed: Export of STL mesh failed:」が見られます。メッシュがエクスポートできていないと出ていないということでしょうか。
なぜメッシュがエクスポートされていないのかよくわからないので、ひとまずエラー改善は保留とします。

細かいところに気を取られていると時間がかかりそうなので、stlの一括処理は今回は諦めて手動で作成したミキシングエルボーのモデルを使って流体解析をしようと思います。

画像11

次回、snappyHexMeshを使ってメッシュ生成を行います。
その後、定常解析(乱流モデル)で解析してみましょう!

疑問

ところで、paraviewの面の名前を表示する「Patch Names」ってどこいったのかな('_')

画像17

ボタンがなくなっているなと思って、調べてどうにか設定できた気がするけど忘れてしまった・・・・

Twitter➡@t_kun_kamakiri
Instagram➡kamakiri1225
ブログ➡宇宙に入ったカマキリ(物理ブログ)
ココナラ➡物理の質問サポートサービス
コミュニティ➡製造業ブロガー



この記事が気に入ったらサポートをしてみませんか?