DEXCSランチャー v2.5 製作メモ / 3.7

3-7.中間まとめ



前節までの取り組みで、CfdOFのGUIを使って、DEXCSランチャーの一部(ソルバー実行と残渣グラフ表示)とDEXCSマクロの主要プログラムを起動できるようになったはずである。そこでDEXCSの標準チュートリアルケースを題材に、一連の動作確認を実施し、今後に必要な改善項目を取り纏めた。

(1) FreeCADモデル

モデルは任意のフォルダに収納しておく。

図18. 解析フォルダ

これをダブルクリックすれば、普通にCADモデルが表示される。

図19. DEXCS標準チュートリアル問題

(2) dexcsCfdOFワークベンチ

ワークベンチを切り替える

図20. dexcsCfdOFワークベンチ

ツールバーが現れるので、[CfdAnalysis]ボタンをクリック。

図21. CfdAnalysis解析コンテナ

コンボビューのモデルツリー下部に、[dexcsCfdAnalysis]と、その下に階層を下げて[CfdSolver]というコンテナが作成される。

ここで、一旦、「編集」→「設定」メニューを起動して、

図22. Default output directory の設定

Default output directory が、モデル収納フォルダになるようにしておく。他のフォルダでも実行は可能だが、これがDEXCS流。

(3)メッシュ作成コンテナ

設定を終わったら、前の画面に戻り、表示パーツ(のどれでも良い)を選択すると、

図23.メッシュ作成コンテナ

dexcsCfdOFツールバー中の[メッシュ作成]ボタンが有効になるので、これをクリック。

図24.メッシュ作成タスク画面

タスク画面が現れるが、最下段にBase element size として 0.27 の数字があり、これはDEXCS方式で計算した推奨パラメタである。

このモデルでは、このままでは適切なメッシュとならないので、一旦この画面は「閉じる」

図25.メッシュ作成コンテナ

モデルツリー上、最下段にBlock_meshというコンテナができているが、この名前は[メッシュ作成]ボタンを押した時に選択対象としたパーツによって変わってくる。今の所、気にしなくてよい。

(4)メッシュ細分化コンテナ

メッシュ作成[block_Mesh]コンテナを選択すると、[メッシュ細分化]ボタンが有効になるので、これをクリックすると、

図26.メッシュ細分化タスク画面

Mesh refinement のタスク画面が開くので、この画面を使って細分化の詳細を設定する。

図27.細分化対象パーツの選択(1/2)

細分化対象としたいパーツは、[select from list]ボタンをクリックすると、[Select Object]の選択リストが有効になるので、このリストの中から選択する。[Dexcs]を選択すると、少し待ち時間があって後、長大なFaceリストが現れる。これはDexcsを構成する全Faceを示しており、これを取得する為時間がかかっているのである。それぞれのFace…の名前の先頭にチェックボックスが表示されており、これの選択如何で、細分化対象をさらに詳細に設定することができるようになっているというのがCfdOF本来の使い方であるが、DEXCSではそういうことはしない。したがって、ここでFaceリストを表示させるのでなく、単に選択パーツを表示させたかったのであるが、その為の工夫が容易ではなさそうであったので、当面はCfdOF本来の選択表示方法を流用していくこととした。

図28.細分化対象パーツの選択(2/2)

ここで、[Select all]ボタンを押せば、全Faceにチェックマークが付くので、ここで[Done]ボタンを押す。そうすると、Dexcs:Face…というリスト表示が得られるので、選択はこれで完了である。

レイヤーを作成したい場合には[Boundary Layer]のチェックボックスにチェックを入れると、レイヤーの詳細設定メニューが現れるので、

図29.パッチ毎の細分化設定1

レイヤー数が2以上になるように変更すれが、これが有効になる。設定が完了したら[OK]ボタンをクリック。なお、以上の説明では、Dexcsの構成Faceを全選択したが、どれか一つのFaceを選択しただけであっても良い(下図)。CfdOF本来のメッシュ作成法ではDEXCSフォントのほんの一部分しか細分化されない事になるが、中身はDEXCS方式でメッシュ作成しており、このリスト中のパーツ名(Dexcs)を使っているにすぎないからである。

図30.パッチ毎の細分化設定2(略式)

Dexcsフォントに対する細分化が終わったら、改めて[Block_mesh]コンポーネントを選択して、ボタンをクリック。今度は、regionBoxに対する細分化設定を行う。こちらは内部領域の細分化であるので[internal Volume]にチェックする。

図31.領域内部の細分化設定

パーツの選択方法として、[Select from list]ボタンを押してリストから選択することはSurface(パッチ)の場合と同じであるが、inletやoutletを選択してもSolidではないので、選択欄にリストアップされない。間違い防止にはなっている。

[Relative element size:]の値は任意に変更して良いが、一応この値(0.3)でRefLevel=2相当になる。

(5)メッシュ作成

細分化設定が終わったら、改めて[Block_Mesh]のメッシュ作成コンテナをダブルクリックして、メッシュ作成のタスク画面を開き、[Write mesh case]ボタンを押す。設定に問題が無ければ、[Run mesher]ボタンが有効になるので、これをクリックしてメッシュ作成が実行される。[Paraview]ボタンでメッシュ確認、問題なければ[閉じる]ボタンをクリック。

Paraviewによる確認においては、起動画面において既にモデルがロードされた状態で表示される(図32)。

図32.Paraviewの起動画面

Decompose polyhedra のチェックボタンも非有効となっているので、メッシュ確認までの手間が省けている。

(6)計算実行

メッシュが完成したら、[CfdSolver]コンテナをダブルクリック。[Analysis control]タスク画面が開くので、[Write]ボタン→[Run]ボタンクリックにて計算が始まり、残渣プロットが表示される。

図33.計算実行状況

計算終了後のParaview確認においても、メッシュ確認の場合と同様、モデルがロードされた状態で起動する(Applyボタンを押さなくともよい)ので、手間が省けている。

(7)まとめ

  • dexcsCfdOF(CfdOFの名前を変更し不要機能を除外したもの)のGUIを使って、DEXCSマクロによるDEXCS式メッシュ作成を実現し、DEXCSランチャーの一部(ソルバー実行と残渣グラフ表示)を代替することができた。
  • 現状では、Default output directoryをケース変更の都度変更する必要があり、これはモデルの存在するディレクトリがデフォルトになるよう変更したい。→ 解決1
  • メッシュ作成コンテナを作成するのに、3Dパーツを選択する必要があり、選択したパーツによって、コンテナの名前が変わってしまう。→3Dパーツを選択せずとも、[CfdAnalysis]ボタンを押した時に、[CfdSolver]コンテナと同時に作成されるようにしたい。→ 解決2
  • メッシュ作成の際に生成される形状ファイルの名前が.stl, .fmsになってしまっている(meshDict中の名前もそうなっているので、メッシュ生成には支障ない)が、DEXCS標準(FreeCADモデル名と同じ)としたい。→ 解決3
  • 現行DEXCSマクロで設定出来ているパラメタセットと比べて、不足・問題になるものは以下の通り。
    • featureAngle
    • optimise_Layer
    • keepCellsIntersectingBoundary
    • stopAfterEdgeExtraction
    • 細分化方法の CellSize / RefLevel  切り替え
    • RefLevel をRelative element size より算出している点
  • 一方、現行DEXCSマクロで設定出来ていない以下の機能を組み込むことができた。
    • Refinement thickness
    • Max first cell height

解決1

CfdTools.py中、 def getDefaultPath()

def getDefaultOutputPath():
    prefs = getPreferencesLocation()
    output_path = FreeCAD.ParamGet(prefs).GetString("DefaultOutputPath", "")
    if not output_path:
        #output_path = tempfile.gettempdir()
        output_path = os.path.dirname(FreeCAD.ActiveDocument.FileName) 
    output_path = os.path.normpath(output_path)
    return output_path

ただし、モデルが変更になった時には、先のモデル情報が残ってしまうので、起動時にはその設定を読み込まないようにした。CfdPreferencePage.py中、 def __init__(self) セクション中、最後に以下の2行を追加した。

        prefs = CfdTools.getPreferencesLocation()
        FreeCAD.ParamGet(prefs).SetString("DefaultOutputPath", "")

通常はFreeCADモデルが存在するディレクトリがケースファイルとされる。何らかの事情によって、メッシュを特別なディレクトリに出力したい場合には、編集→設定により、出力先を変更できるが、この設定はその場限りで有効になるという使い方を想定している。

DEXCS方式では、ケースフォルダ中に隠しファイルを収納し、その有無と内容如何で出力先を変更しているので、その方式に変更する可能性は残してあるのと、dexcsCfdAnalysisコンテナの [Output Path]プロパティを直接編集して出力先を変更することができて、この場合はここに指定した出力先が優先されるという点もあるので、もう少しわかりやすくしたほうがよいかも。

また、出力先を変更した場合に、DEXCSランチャーのGridEditor等の起動ボタンが使えなくなる(ケース情報が伝わらない)点もあり、今後の課題となる。

解決2

[CfdAnalysis]ボタンを押した時に、コンテナが作成されるのは、CfdAnalysis.py 中の、def Activated(sel) セクションであるので、この中に、以下の2行を追加した。

        # Add mesh object when CfdAnalysis container is created
        FreeCADGui.addModule("CfdMesh")
        FreeCADGui.doCommand("analysis.addObject(CfdMesh.makeCfdMesh())")

但し、コンテナは作成されるものの、このままでは、これをダブルクリックして設定画面を開こうとすると、エラーになった。これはこのコンテナのプロパティを初期化する部分(CfdMesh.py 中の、def initProperties(self, obj):)において、メッシュ作成用の CaseName を以下のように

__caseName__ = ""
addObjectProperty(obj, 'CaseName', __caseName__, "App::PropertyString", "",
                          "Name of directory in which the mesh is created")

再変更する必要があった。これは、上記の解決1によって、解析ケース名を変更しているので、それに応じた対応ということである。

また、CfdMeshTools.py の、def getFilePaths(self,output_dir) において、else: 以下の最終行でCfdOFオリジナルのSTLファイルを作成するためのファイル名を作成しているが、このままだと参照エラー等生じてしまうので、ダミーのファイル名(geometry)を割り当てた。

        else:
            #self.temp_file_geo = os.path.join(self.constantDir, 'triSurface', self.part_obj.Name + '_Geometry.stl')
            self.temp_file_geo = 'geometry.stl'

解決3

stlファイルの名前を作成しているのは、 dexcsCfdMeshTools.py 中、def makeStlfile(…)

self.caseFilePath = CaseFilePath
self.fileStem = os.path.splitext(self.caseFilePath)[0]
self.fileStem = self.fileStem.split(MainControl.SLASH_STR)[-1]
self.stlFileName = CaseFilePath + MainControl.SLASH_STR + self.fileStem + '.stl'
self.fileName = CaseFilePath + MainControl.SLASH_STR + self.fileStem

としていた部分を、

modelName = os.path.splitext(os.path.basename(FreeCAD.ActiveDocument.FileName))[0]
self.stlFileName = CaseFilePath + modelName + '.stl'
self.fileName = CaseFilePath

と変更。

同様に、fmsファイルの名前は、def perform(…)において

self.fmsFileName = CaseFilePath + MainControl.SLASH_STR + self.fileStem + MainControl.DOT_FMS_STR

としていた部分を、

modelName = os.path.splitext(os.path.basename(FreeCAD.ActiveDocument.FileName))[0]
self.fmsFileName = CaseFilePath + modelName + ".fms"

と変更することにより実現できた。

前へ 目次 次へ

Share

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください