5-2-5. FreeCADマクロの使い方
3-4. cfMesh で説明したように、DEXCS-OFでは、FreeCADマクロを使って、cfMesh(cartessianMesh)用の設定ファイルの作成からメッシュ作成・確認まで実行できるようになっている。
本節では、DEXCS-OFに同梱してあるメッシュ作成用のチュートリアルケースを使って、このFreeCADマクロの使い方について説明する。
まずは、チュートリアルケースを確認しよう(図5-2-5-1)。
3つのフォルダが収納されており、
FreeCADマクロは、DEXCS2014でリリースして以来、毎年少しずつ更新されてきているもので、1.はリリース当初からのマクロの基本的な使い方と動作原理の説明用で、2.はDEXCS2019より更新された追加機能を中心とした説明用、3.はマクロだけでは取扱いの出来ないパラメタ設定の方法について説明用のケースである。
チュートリアルケース1:backStep
まずは、1.backStepを使って、マクロの基本的な使い方と動作原理を説明する。
backSrepフォルダを展開すると、backStepSimple.FCStdというFreeCADファイルと、kansaiというフォルダがあって、kansaiというフォルダを展開すると、その中にbackstep.fcstdというFreeCADが存在する。また、0, constant, system フォルダがあるので、このkansaiフォルダは、OpenFOAMのケースファイルであることも判るであろう。
このケースファイルは、OpenCAE勉強会@関西の講習会資料より借用させていただいたもので、解析内容の概要を以下に示す。また、詳細はスライドシェア資料として公開されているので、そちらも参考にされたい。
2つのFreeCADモデルが収納されているが、その違いは下図に示すように、
壁面を、単一名(walls)の壁としているか、面ごとに異なる名前で区別しているかの違いがあるだけで、マクロの使い方の例題としては、まずは簡単なモデルをとりあげて説明する。
まずは、マクロを動かしてみよう。DEXCSツールバーの①アイコン「cfMesh用設定ファイルを作成します」をクリック(図5-2-5-7)。
「FreeCADモデル(.fcstd)によるcfMeshパラメタ]画面が現れるので、取り敢えずデフォルトの状態(何も変更しない)で②「Export」ボタンをクリックしよう。続いて確認ダイヤログが現れるので、③「Yes」④「OK」ボタンをクリックする。
引き続き、メッシュ作成、メッシュ確認と進むが、このあたりの操作方法は、5-1. DEXCSランチャーの使い方で既に説明しているので、手順のイメージ図を掲載しておくにとどめる(図5-2-5-8, 9)。
以下、本例題を使って作成されたファイルの内容を具体的に調べる事によって、マクロの処理内容の実体を理解して頂きたい。
ここで、改めて図5-2-5-2.で確認したファイルマネージャー画面に戻っていただきたい。実行前に比べると、多くのファイルが増えているはずである。ここまで3つのステップ実行ボタン(Export, MakeMesh, ViewMesh)があったが、それぞれのステップ毎に、どのファイルが作成されてきたのかを整理してみよう。因みに、ステップ毎の変化をちゃんと自身で確認したい場合にはAllcleanというファイルをダブルクリックすると、初期状態に戻る(注記1)ので、再度やり直してもらいたい。
まずは、最初の「Export」である。
3-4.cfMeshで説明したように、cfMeshを作成するには、③fms形式の形状定義ファイルと、④meshDictファイルが必要であった。実は、これらの作成以前に、①OpenFOAMのケースフォルダ要件のチェックと、fms形式の形状定義ファイル作成の前段階として、②stlファイルを作成しているという事である。
本例の場合、マクロ実行前のFreeCADモデル(backstepSimple.FCStd)の収納ディレクトリ(backStep)は、単なるフォルダでしかない。この後のステップ(メッシュ作成。確認)を実行する為には、OpenFOAMのケースフォルダであることが必要になる。DEXCS2018以前では、ケースフォルダ中にFreeCADモデルが存在する事を前提にExport実行しており、DEXCS2019でもその基本は変わっていない。しかし、本例のように、ケースフォルダでなかった場合には、DEXCSランチャーのデフォルトパラメタセット(/opt/DEXCS/template/dexcs)をそのままコピーして、とにかく先へ進めるようにしたというのが実情である(注記2)。
fms形式ファイル作成の前段階としてstlファイルを作成している(注記3)のは、cfMeshのモジュールとして、stl形式からfms形式へのファイルコンバータを使えるからである。つまり、使用法(Usage)として(注記4)、
Usage: surfaceFeatureEdges [OPTIONS] <input surface file> <output surface file> Options: -angle feature angle (degrees) -case Specify case directory to use (instead of the cwd)
とある通り、surfaceFeatureEdges というコマンドが使える。
<input surface file>にstl形式を指定して、<output surface file>にfms形式を指定すれば変換が行われる。ここでオプションの -angle feature angle というのは、隣り合う面の交接角度を見て、その値が設定値以上であれば、交接線をfeature(特徴線、輪郭線)として付加出力する事を意味している。つまり、fms形式は、stlデータだけでなく、featureデータも含有したファイル形式ということである。
本例では、単純な形状を取り扱っており、具体的なファイル内容も確認しやすくなっているので、実際に確認してみよう。ファイルマネージャー上でファイルをダブルクリックすれば、テキストエディタが立ち上がって内容を確認できる。以下に、内容を確認する際の留意点を書き記しておいた。
次にmeshDict ファイルであるが、これもテキストファイルなので、内容を確認することが出来る。本例では約270行もの内容があって、初めて見る人には何処に何が記述されているのか理解が困難かもしれない。行数が長いのは、基本的にcfMesh作成用のパラメタがほとんど全て内包されているからで、ほとんどはデフォルトもしくは、特別に使う場合にのみ有意義なパラメタはコメントアウト行(行頭に//の有る行)になっている。ケースファイル情報とFreeCADデータに基づいて作成したGUI画面の表示パラメタとその変更箇所だけが、meshDictの該当部分を変更する仕組みとなっている。
本例の場合は、単純にデフォルトのままExportしたので、変更箇所はごくわずかであった。具体的な変更箇所を、図5-2-5-11,12 に示しておく。
②がFreeCADデータのファイル名に由来している点や、⑥で画面上の名前が反映されている点は容易に推察されよう。また③〜⑤は、画面上のセル欄で何も記述されていないので、meshDictの文法上必要なパラメタブロックだけは定義されているが、パラメタの中味は空ということである。
①maxCellSizeはメッシュ作成の際に、基本となるセルサイズの事で、0.583という中途半端な数字になっているのは、モデルのサイズを読み取って、図5-2-5-13.に示す方法で計算しているからである(注記5)。もちろんこの数字はGUI画面上で変更可能になっており、変更すればその値が反映される。
以下、このマクロ画面で設定可能な基本パラメタ
- maxCellSize
- featureAngle
- boundaryLayer
- 個別CellSize(RefLevel)
について、具体的に値を変更して、メッシュがどう変化するかを調べてみよう。
maxCellSize
maxCellSizeを①「0.2」に変更した例を、図5-2-5-14.に示す。
②Exportから、③MakeMeshe④ViewMeshの操作方法は、5-1. DEXCSランチャーの使い方で既に説明しているので割愛し、結果はメッシュの主要外観図だけを掲載した(以下のケーススタディでも同様)。
ほぼ狙い通りの寸法で一様にメッシュが細分化されている。また全てのセルサイズの寸法が等しくなってはいない点も読み取れよう。
featureAngle
引き続きfeatureAngleを①「95」(単位はdeg)に変更したものが、図5-2-5-15.である。
featureAngleというのは、隣り合う面の交接角度を見て、その値が設定値以上であれば、交接線をfeature(特徴線、輪郭線)とするものであった。本例ではwallsというパッチが、外周壁全体を表す一枚もので、基本90で折れ曲がった面になっていた。featureAngleがデフォルトの「30」であった時はこの折れ曲がり部をfeature(特徴線、輪郭線)と認識されていたが、「95」とすることで認識されなくなり、角部が丸まってしまったということである。
boundaryLayer
引き続き、featureAngleを、「90」より小さい値に(本例では「85」)に戻し、wallsのBoundaryLayerチェックボックスのチェックマークを付した状態(マウスクリックで状態が入れ替わる)で作成したのが、図5-2-5-16.である。
レイヤーの詳細を分り易くする為、流入口からみた正面図を図5-2-5-17.の中央図に示しておいた。
ここで、レイヤー指定をしなかった場合(左図)と、他のレイヤーオプション(nLayers=9)で作成した右図を見比べる事によって、以下の点ご理解頂けよう。
- レイヤーは壁面に隣接したセルを、nLayer指定数に層分割して作成される。
- Ratioは、隣接層との厚さの比率
特に、第1項がcfMeshの特徴点で、OpenFOAM標準のsnappyHexMeshと大きく異なっている。複雑な形状に対してsnappyHexMeshではレイヤーの欠損が生じる事が多いのに対して、cfMeshでまず生じないのは、この作成原理に由来するものと考えられる。
なお、本例では、壁面に隣接したセル全体を指定Ratioになるように分割しているが、レイヤーの壁面第1層の厚みを指定することも可能である(後述)。
個別CellSize(RefLevel)
引き続き、①maxCellSizeを「0.5」、wallsのCellSizeを「0.1」に変更した例を図2-5-2-18.に示す。
この例題の狙いは、walls近辺のメッシュを細分化するものであった。その際に、maxCellSizeも変更した。流路の中央断面(サイズは 2 x 3)におけるメッシュ図を眺めれば断面中心あたりのセルサイズが凡そmaxCellSize(=0.5)になっていることは読み取れよう。一方、壁面(walls)におけるサイズはその半分の半分、そのまた半分で0.0625という事になる。「0.1」を指定しても「0.0625」になってしまうのは、細分化の原理が二分木法によるものであるので致し方ない。あくまでmaxCellSizeを基準として、1/2のべき乗サイズしか取り得ないということである。
それならば、個別にはCellSizeでなく、細分化レベルを指定した方が良いのでないか?という考え方もあろう(注記6)。そうしたい場合には個別パラメタの設定方法として、CellSizeでなく、RefLevelを選択しよう(図5-2-5-18)。
そうすると、①のように、変化して、RefLevel(refinement level, 細分化レベル)「3」という数字に変わる。すなわち、1/2の3乘、1/8のサイズということである。ここで再度、CellSizeオプションに切り替えると、今度は「0.0625」となって、0.1を指定したが、0.0625になってしまうという事が判る。0.0625よりも、むしろ0.125の方が良ければ、RefLevel=2とすれば良いし、あくまで0.1に拘るのであれば、maxCellSizeを0.4なり0.8に変更する、という使い方をして頂きたい。
なおDEXCS2019より更新された追加機能を中心とした説明は、2.heatSink以降ですると記したが、上述のRefLevelオプションはDEXCS2019での追加機能である。またもう一点(Editボタン)、本チュートリアルケースを題材にも説明しておく。
先に、「レイヤーの壁面第1層の厚みを指定することも可能」と記した方法である。基本的にmeshDictファイルを手修正する事になるが、エディターの起動が容易になった(図5-2-5-19)。
これも既に記したように、meshDictファイルは、「メッシュ作成用のパラメタがほとんど全て内包されており、ほとんどはデフォルトもしくは、特別に使う場合にのみ有意義なパラメタはコメントアウト行(行頭に//の有る行)になっている」。本例の(レイヤーの壁面第1層の厚みを指定したい)場合、82行目の、
が該当する。この行頭の//を削除すれば、というパラメタが有効になる。但し、0.5という数字は、ケースに適切な値を設定せよ、ということで、以下に変更例を掲載しておく。
右側の変更例は、左側の変更を実施した後、レイヤーの数を、マクロ画面を使わないで、meshDictファイルを直接変更したもので、こういう使い方も出来るという例である。
かようにマクロ画面によらないで、慣れてくればmeshDictファイルの直接編集で作業を済ます機会も増えてこよう。ただここで留意して頂きたいのは、パラメタの名前がかなり長いものとなっており、一文字でもミススペルがあると、有効でなくなる。メッシュ作成時に、エラーメッセージが出るでもなく、無視されるだけの事もあるという点である。特にセミコロンや括弧などの構文の区切りを誤って消したりすると、たいへんな事になるのでこのあたりは注意されたい。
以上、本チュートリアルでは、壁面を、単一名(walls)の壁として取り扱った。単一のパッチであった為、feature angle の設定如何でメッシュが異なったものになった。一方、レイヤー設定に際しては、全周面で同一レイヤーになっていた。
単一名でなく、個別に面の名前を変えれば上述の問題はなくなる。本チュートリアルの原本資料では、図5-2-5-4.の右側のモデル(backstep.fcstd)を使っていたので、これを使った作成例も以下に掲載しておく(図5-2-5-21.)。
因みに、この出来上がり例は、件の講習会資料で説明されているもの(Helyx-OS / snappyHexMesh にて作成)とほぼ同一のメッシュ規模になっている。
さらに、本例は講習会資料で説明されている流れ解析用のパラメタセットも同梱してあるので、マクロ画面を終了して、DEXCSランチャーからただちに計算実行できるようになっている(図5-2-5-22.)。
件の講習会資料では、Helyx-OSを使った解析手順の説明書になっているが、本方法の手順が格段に少なく済んでいる事を理解いただけるものと思う。
チュートリアルケース2:heatSink
まずは、同梱したFreeCADモデルを確認されたい(図5-2-5-23.)。
これは、電子機器冷却用のヒートシンクを長方形のダクト中に配して、ヒートシンク下面に発熱体、ダクトには冷却風を流して、ヒートシンクの冷却性能試験(熱抵抗、圧力損失の測定)を想定したものである。
ヒートシンクは実際に市販されているもので、形状のCADデータも公開されている(https://www.micforg.co.jp/jp/c_t19.html)。
ヒートシンクのダクト試験の方法も公開されており、ダクト形状はこれに準じて作成したものである。
ヒートシンクの冷却性能試験(熱抵抗、圧力損失の測定)を想定したものと記したが、OpenFOAMでかような場合は、chtMultiRegion系のソルバーを使って、個体側の伝熱計算と、流体側の熱流動計算を連成して解く事になる。その際、OpenFOAMの標準チュートリアルではメッシュを個体部分と流体部分を併せて作成し、メッシュが出来た後で、個体側と流体側とにメッシュを分割する。
つまりメッシュ作成法としてマルチリージョンに対応した作成方法が必要になる訳であり、通常のメッシュ作成ソフトなり、OpenFOAMのsnappyHexMeshではこれに対応できているが、残念ながらcfMeshでは未対応である(注記7)。
しかしながら、ソルバーの計算原理を考えれば、個体側と流体側とで個別に作成しても何ら問題はない(注記8)。わざわざ同時作成して、その後で分割する必要が無いとも言えるのである。本例ではこの方法で個別にメッシュ作成する。
但し、チュートリアル例題として実施するには、図2-2-5-23.のモデルをそのまま使ったのでは、メッシュ規模が大きくなりすぎて取扱難い。解析領域全体も1/3カットモデルも同梱してあるので、そちらを使うことにする(図5-2-5-25.)。
コンボビューの「モデル」タグ、コンポーネント毎のツリー表示画面で、個別にコンポーネントを選択して、スペースキーを押すと3D画面上での表示/非表示が切り替わるので、図5-2-5-25.の表示状態になったら、②「ファイル保存」しておこう。
因みにこのモデルは流体領域をモデル化したものである。まずは以下の要領でメッシュ作成してみよう。
メッシュ細分化パラメタ変更箇所の要点としては、フィンの厚みが0.23なので、フィン周りを解像できるべく、「0.1」とし、maxCellSizeも「0.8」としたので、RefLevel=3相当が、この値でそのまま適用される値とした。
メッシュ確認例を図5-2-5-27.に示すが、意図したサイズ通りのメッシュになっていることが見てとれる。
因みにこの断面カット表示は、mesh.pvsmという作業状態を保存したファイルが同梱してあるので、これを使えば比較的簡単に作成できる(図5-2-5-30.)。
ボタン操作がやや煩雑で紛らわしいが、要は同梱の③mesh.pvsmを開いて、この作業対象が、⑦heatsink.OpenFOAM にするという事である。
以上で、流体領域のメッシュ作成は問題なく出来そうであると確認できた。本来であれば、作成したメッシュをchtMultiRegionケースの流体領域に収納する所であるが、本チュートリアルではそこまではやらない。
引き続き、固体領域のメッシュを作成してみよう。まずはFreeCADモデル(図5-2-5-31.)であるが、これはヒートシンクのカットモデル(T19-48-cut)だけを表示状態にすれば良い。
メッシュ作成の方案としては、とりあえず流体領域で使ったパラメタをそのまま流用するのが無難であろうとして、実施したのが以下の結果である。
残念ながら、フィンの一部が再現されただけで、残りは欠損してしまった。これは、フィンの厚み0.23に対して、セルサイズ0.1というのが、解像限界ギリギリの微妙な設定になっていたという事を意味する。
単純にセルサイズを小さくするのが一つの解決策である事は間違いないが、これではメッシュサイズが大きくなってしまう事を避けられない、後のステップを考えれば、メッシュ数は極力抑えたい。かような場合に、keepCellsIntersectingBoundary のオプションパラメタを試していただきたい(図5-2-5-33.)。
①keepCellsIntersectingBoundary のオプションを有効にするだけで、フィンのメッシュが再現できるようになった。
このパラメタの意味は、マニュアルによれば、
keepCellsIntersectingBoundary is a global option which ensures that all cells in the template which are
intersected by the boundary remain part of the template.By default, all meshing workflows keep only cells inthe template which are completely inside the geometry.
となっているが、あまりピンと来ない。そこで筆者の解釈を模式的に説明したのが図5-2-5-34.になる。
つまり、本例でベースメッシュ(マニュアルではtemplate)サイズが0.1であり、形状定義面の幅が0.23であるので、形状定義面の中に完全に2セル分包含される場合とそうでない場合が生じる。完全に2セル分包含されれば内部メッシュは作成されるが、そうでない場合にはkeepCellsIntersectingBoundaryオプションで制御でき、デフォルト(=0)では作成しなくて、オプション指定(=1)とすれば作成してくれるという事である。
念の為、流体領域のメッシュ作成において、このオプションを指定した場合の結果を以下に示しておこう(図5-2-5-35.)。
本例では、空隙となるべき固体領域までメッシュが出来てしまう事がわかる。したがって、このオプションはケースバイケースで使い分けるしかない事をご理解いただけよう。
なお、このマクロ画面で設定するオプションはグローバルオプションで、モデル全体に適用されるものである。一方、モデルのパーツ毎に本オプションを設定することも可能である(注記9)。
また、このオプションが不適切で、結果的にメッシュの作成すべき箇所とすべきでない箇所が混在してしまう場合があり、そういう場合のメッシュ作成には異常に長時間かかってしまう事がある。
かような場合に使って頂きたいオプションがstopAfterEdgeExtraction である(図5-2-36.)。
これはベースメッシュから形状データに基づいて、メッシュを作成すべきでない箇所を取り除いた段階で計算を停止する。この段階でメッシュ状態を確認し、所望の状態になっていなければ、メッシュ分割方策をやり直す必要があると、いち早く判断し、無駄な計算時間を費やさないで済むという事である。
ちなみに、このメッシュ作成の中途段階で停止する方法としては、これ以外の段階で止めることも可能である(注記10)が、もっとも役に立ちそうなオプションだけをマクロ画面で指定するように止めた。
チュートリアルケース3:sphere
最後のチュートリアルケースは、球の周りの流れ解析で、5-1-2.〜5-1-3.においてDEXCS標準チュートリアルにおいて解析対象を球に変更したが、抗力係数の実測値との乖離が大きかったので、この改良を試みた際に使用したモデルとケースファイルを同梱した。まずは、解析モデルとケースファイルを確認されたい(図5-2-5-37.)。
解析モデルは、5-1-2.にて作成したものと比べると、球の大きさは同じであるが(図5-2-5-38.)、球に対する風洞の相対的な寸法を大きくとってある事と、球の周りでメッシュを細分化する領域を2段階に設けている点が改善の為の考慮点であった(図5-2-5-39.)。
このモデルを使って、図5-2-39.に示すようにメッシュの出力先を都度指定することで、simpleというケースフォルダにて定常計算(simpleFoam)、pimpleというケースフォルダにて非定常計算(pimpleFoam)が出来るようになっている。
その他の同梱ファイルとして、Allclean はケースを初期化するスクリプト(ダブルクリックで実行可能)、mesh.pvsm はメッシュ断面確認用の作業状態を保存したファイル(使用方法はを図5-2-5-30.参照)、sphere.odsは、実測値の回帰曲線と計算された抗力係数をグラフ上でプロット比較できるようにした表計算シートである。
まずは、図5-2-5-40.の設定例にてメッシュ作成⇒確認してみよう。
ここで注目して頂きたいのは、球の周りのレイヤー層である。指定した通りの3層が形成されてはいるものの、円周を時計板に見立てて、1〜2時の方向や、10〜11時の方向といった、ベースメッシュの対角方向におけるレイヤー層が一様な厚みでなくノコギリ屋根状、台形になってしまっている。
実は、cfMeshのデフォルト設定ではこうなるが、これを改善するオプションが存在する。それが、optimizeLayerオプションであり、DEXCS2019からは、これをマクロ画面上で指定できるようにしてある。これを使えば上述の問題はなくなる。
オプションの有無によるメッシュの違いを比較したのが図5-2-5-41.である。
比較は、上下で比較してもらいたい。横方向の3列はメッシュ分割の基本パラメタ(レイヤー数、セルサイズ)を変えている。
問題は、このオプションを付加すれば解が改善されるものとは限らない、むしろ悪化する場合もあるという事である。レイヤー層だけに着目すればメッシュが改善されたとは云えるのであるが、最外層やその外側セルとの関係において接続性が悪化する場合があり得るという事である。
DEXCS-OFに同梱したスライドショー資料(図5-1.参照)「DEXCSにおける推奨メッシュ生成法」のpp.108〜113には、これらのメッシュを使った具体的な計算結果例について掲載してあるのでご確認いただくと共に、より高精度なメッシュ作成方案にも挑戦して頂きたい。
注記1
Allcleanファイルが存在するフォルダがトップにある表示状態で実施する必要あり(下図参照)。
注記2
本来であれば、パラメタセットをデフォルトにするか、特定のケースファイルからコピーするかの、選択メニューとしたかった。
注記3
FreeCADモデルからstl形式を出力するにはいくつかの方法がある(5-2-4.FreeCADの基本/インポート・エクスポートを参照)が、ここではDEXCSツールバーの、(STLファイル作成マクロ)と同じやり方であり、この内容は、図5-2-5-3.で紹介したオープンCAE勉強会@関西の講習会資料中、講習に使うpythonマクロを参考に改変させていただいたものである。
注記4
OF専用端末で、
surfaceFeatureEdges -help
とコマンド入力すれば良い。
注記5
maxCellサイズとして、3辺の和を一定にするよりも、3辺の積を一定にした方が良いのではないかというご意見を頂いた、ご尤もなので次期ヴァージョンでは変更する予定。
注記6
デフォルトがCellSize指定になっているのは、全く新規に作成する場合、対象オブジェクトのサイズは分かるので、そのサイズに対して1/10とか、1/100という具体的なサイズ指定が直感的に判りやすいと考えたからである。
注記7
cfMeshの商用版(CF-MESH+)では、Ver.以降、マルチリージョン対応可能となった。
注記8
界面を構成する節点が同一面内にあれば良い。厳密に同一であるかどうかの判断は難しいが、ある程度の誤差は許容される。経験的にはcfMeshで個別作成したメッシュは問題ないが、snappyHexMeshで個別作成したモデルでは問題が生じる場合があった。
注記9
本マクロ画面でなく「Edit」ボタンを押して、meshDictを直接編集して頂く必要がある(下図参照)。
注記10
これも「Edit」ボタンを押して、meshDictを直接編集する(下図参照)。267〜274行目に他の段階で止めるパラメタが記入してあるので、276行頭のコメント(//)を外して、デフォルトのedgeExtraction部分を、所望のパラメタ名に変更すれば良い(下図参照)。