オープンCAE勉強会@関西(2022年12月3日)overPimpleDyMFoamによる竹とんぼシミュレーション

 

 9月に開催されたオープンCAEシンポジウムではFMU4FOAMを用いた竹とんぼシミュレーションについて発表しました。
OpenFOAMで空力シミュレーションとOpenModelicaの竹とんぼの剛体運動シミュレーションを連成しましたが、OpenFOAMで竹とんぼの移動計算は行いませんでした。何人かにoversetを使えばOpenFOAMでも剛体移動ができるのにと言われました。
 そんなことがあって、oversetを用いて竹とんぼシミュレーションをやってみたいと思いました。
 oversetについてはかなり前にESI版に公開されており今更というところもありますが、私自身は初めて取り組みtutorialや多くの方の資料を調べ、OpenModelicaの連成の前にoversetを用いたOpenFOAMのみの竹とんぼシミュレーションをやってみました。
 公開資料のほとんどが2次元問題であり、3次元での取り扱いはあまりなかったことや実際やってみて疑問に思ったことがいくつかあったため皆様と情報共有したいと思います。

 oversetは2つのメッシュを作製してそれらをマージして利用します。ここでは、600mm角の立方体領域c0と竹とんぼを含む円筒領域c1の2つのメッシュを作製し、c1をmovingZoneとして回転数500rad/sで回転します。
 ケースファイルの雛形はtutorials/incompressible/overPimpleDyMFoamのものを参考にしています。OpenFOAMのバージョンはOpenFoam-v2112です。ソルバーはoverPimpleDyMFoam、乱流モデルは使用せずlaminarを使っています。動粘性係数は空気のもので1e-5m2/sです。メッシュ移動についてはdynamicOversetFvMeshのmultiBodySolidMotionSolverのrotatingMotionを使用しています。

 

 meshはblockMeshとsnappyHexMeshで作りました。竹とんぼ、backgroundMesh、そしてmovingZoneのメッシュを示します。総セル数は69065です。

 解析の手順について説明します。Caseファイルの構成はは0.orig、constant、overSetMesh、systemの4つのディレクトリとAllrun、Allrun.pre、Allcleanの3つのスクリプトファイルです。overSetMeshディレクトリはoverSetMeshをつくるためのディレクトリです。
 まず初めにoverSet領域のメッシュを作製します。blockMeshとsnappyHexMeshでメッシュを作製し、oversetの境界にcreatePatchesでpatchを作製します。
 次に、backgroundメッシュをblockMeshで作製します。
 そして、overSetメッシュとbackgroundメッシュをmergeMeshesでマージします。
 マージしたメッシュについてoverSet領域(c1)とその以外のbackground領域(c0)の2つの領域のセルを分離したセルセットを作製します。そして、dynamicFvMeshで使うためoverSet領域のセルセットc1をmovingZoneとしてセルゾーンに設定します。これらの一連の操作はtopoSetで実行します。
 分離した2つのセルセットについてsetFieldsでzoneIDをつけます。c0=0、c1=1です。
そして解析実行するという流れです。

 

 一連の操作を実施するAllrunとAllrun.preのスクリプトを示します。Allrunでは初めにAllrun.preを実施して先に説明した手続きを行います。その後、並列計算をするためにdecomposeParで領域分割し、並列計算実行、計算終了後にreconstructParでメッシュ再構築します。

 

 今回、特に気になった設定について説明します。taketonboのメッシュを作るをつくるために使ったsnappyHexMeshDictです。通常、snappyHexMeshではrefinementSurfacesにpatch設定ができます。ところが、overset形式のpatchを指定するとsnapしないのです。しかたなく、snappyHexMesh実行後に改めてoversetのpatch設定はcreatePatchで行っています。何かやる方法があるのでしょうか?

/overSetMesh/snappyHexMeshDict

  

 次に不思議に思ったのは、oversetのpatchの名前です。oversetという名前は使えないようです。ほかのpatch、例えばwallなどは名前としてwallが使えるのにoversetは変える必要があるようです。

createPatchDict

topoSetDictです。

toposetDict

 

 oversetの計算のキーポイントのひとつがoversetInterpolationです。oversetではoversetのpatchを含むセルの値をbackgroundMeshのセルの値と補間して接続します。補間方法は4つのオプションがあります。設定方法が適切でないと発散します。

fvSchemes

 4つのオプションを試してみました。発散しなかったのはcellVolumeWeightとinverseDistanceです。inverseDistanceもsearchBoxやsearchBoxDivisionsの設定によって発散しました。ExecutionTimeはinverseDistanceの方が短く、cellVolumeWeightの半分でした。cellVolumeWeightは発散しなかったのですが、アニメーションにもあるように圧力が竹とんぼの翼の中心位置で過大に大きく計算結果はあやしいものとなりました。
 ところでinverseDistanceの計算理論ですが、赤のoverSetMeshのセル中心とbackgroundMeshのセル中心の距離の逆数を重みとして、各セルの物理値と重みの積を合計したものをoverSetMeshの物理値として補間しています。

oversetInterpolationのオプションの実施結果
inverseDistance理論
cellVolumeWeight
inverseDistance

 oversetのやり方がわかったので、次は、FMU4FOAMをつかってOpenFOAMとOpenModelicaの連成した竹とんぼの飛行シミュレーションに再度、取り組む予定です。

補足資料

constant/dynamicFvMeshDict
overSetMesh/system/blockMeshDict
overSetMesh/system/surfaceFeatureExtractDict
system/blockMeshDict
system/setFieldsDict
system/controlDict
system/fvSolutions
0.orig/epsilon 0.orig/k
0.orig/nut
0.orig/p 0.orig/pointDisplacement
0.orig/U 0.orig/zoneID

Follow me!

オープンCAE勉強会@関西(2022年12月3日)overPimpleDyMFoamによる竹とんぼシミュレーション” に対して1件のコメントがあります。

コメントは受け付けていません。