DEXCS十徳ナイフの使用例(かなり複雑ですが・・・)

先日の、オープンCAE学会の合同勉強会にて話題のあった、chtMultiRegionFoam(固体と流体の熱連成解析)にて求めた固体の温度分布を使ってsolidDisplcementFoamにて固体の熱応力計算をようという試みにて、chtMultiRegionFoamは固体を複数の領域に分割して計算するので、これらを一つのメッシュにまとめる方法がわからない・・・という発表者の疑問に対して、「mergeMeshすればいいじゃん」と簡単にコメントしてしまいました。 ⇒勉強会を記録した動画の30分過ぎあたり

その後、実際に自分でもやってみたんですが、コマンドの使い方が少々違ってはいたものの確かにmergeMeshでメッシュは結合できる。しかし、計算した温度をマッピング(mapField)したり、複数の固体領域を結合(stitchMesh)したりの作業も必要。しかもこれら作業のひとつひとつを端末画面からいちいちキーボード入力しながらやっていたのでは大変な手間がかかってしまうことも判明。勉強会ではひとつの領域だけでこれらの作業イメージを紹介していましたが・・・

DEXCS十徳ナイフを使えばかなり手間が軽減されることも判ったのですが、それでも順番を間違えたりすると、意図したようになってはなってくれませんでした。そこでここにやり方を取りまとめておくこととしました。 ⇒ 十徳ナイフの(かなり高度な)使用例としても使えそうな例題になりました。

DEXCS十徳ナイフ起動画面

  • https://ocse2.com/wp-content/uploads/2011/12/000.png
  • ここでcaseボタンを押して、任意の名前(以下の場合デスクトップ上にmulti1)のフォルダを作成する。
  • OpenFOAMのケースフォルダとして認識できない・・・などのエラーメッセージが表示されるが、この時点では問題ない。

テンプレートケースの選択・変更

  • https://ocse2.com/wp-content/uploads/2011/12/001.png

にて実行ボタンを押すと、caseフォルダの選択画面が現れるので、

  • https://ocse2.com/wp-content/uploads/2011/12/002.png

tutorials/heatTransfer/chtMultiRegionFoam/multiRegionHeater

を選択する。その後、ダイヤログがいくつか出てくるが、

  • https://ocse2.com/wp-content/uploads/2011/12/004.png

において、「はい」を押して、メッシュデータも変更しておく。

ファイルマネージャの画面では、以下のようになるはず。

  • https://ocse2.com/wp-content/uploads/2011/12/006.png

端末画面から、Allrunコマンドを入力し、計算を走らせる

  • https://ocse2.com/wp-content/uploads/2011/12/007.png
  • 端末は十徳ナイフでcaseフォルダを選択した時に立ち上がった端末を使用すれば、ディレクトリ移動などせずに、コマンド一発で済む
  • 計算は10分程度で終わる(はず)

固体部分のメッシュをマージする

計算が終了したら、以下のコマンドを入力する。

mergeMeshes -masterRegion heater -addRegion leftSolid . .
mergeMeshes -masterRegion heater -addRegion rightSolid . .

これにて固体部分(heater, leftSolid, rightSolid)のメッシュがマージされたことになる。

  • https://ocse2.com/wp-content/uploads/2011/12/008.png

時刻フォルダ100.002 の下に出来たpolyMeshフォルダが固体部分(heater + leftSolid + rightSolid)をマージしたメッシュファイルになっている。但し、領域間の境界にはパッチが残ったままなので、このままでは計算できないので、stitchMeshコマンドを使って領域を結合する必要があるが、その前に各領域の温度データをマッピングする。

熱応力計算用に新たにcaseフォルダ(solid)を作成

テンプレートケースの選択・変更

  • https://ocse2.com/wp-content/uploads/2011/12/009.png

実行ボタンを押して・・・

  • https://ocse2.com/wp-content/uploads/2011/12/010.png
tutorials/stressAnalysis/solidDisplacementFoam/plateHole

を選択する。 なおこの場合、メッシュデータの変更は、してもしなくても、どちらでも良い。

引き続き、

メッシュデータの選択・変更

  • https://ocse2.com/wp-content/uploads/2011/12/011.png

実行ボタンを押して、先にmergeMeshコマンドにて作成したメッシュを選択する

  • https://ocse2.com/wp-content/uploads/2011/12/012.png

チュートリアルケースからコピーしたモデルと上のメッシュは当然境界の名前が異なっているので、まずは・・・

patch名の一括整合

  • https://ocse2.com/wp-content/uploads/2011/12/013.png

しかし、実行ボタンを押すと、何やらエラーメッセージが出てくる。

  • https://ocse2.com/wp-content/uploads/2011/12/014.png
  • Error in /usr/local/bin/pyFoamCreateBoundaryPatches.py : PyFoam FATAL ERROR on line 971 of file /usr/local/lib/python2.6/dist-packages/PyFoam/ThirdParty/ply/yacc.py: Can not parse binary files. It is not implemented
  • binaryファイルがなんたら書いてあって、実はこんなエラーは初体験。原因探しにかなりアレコレやりましたが、なんのこともなく、境界条件(boundary)に該当部分がありました。

初期条件の一括参照・変更

  • https://ocse2.com/wp-content/uploads/2011/12/015.png

実行ボタンを押すと、以下でてくる

  • https://ocse2.com/wp-content/uploads/2011/12/016.png

boundary 11行目に binaryの記述があるので、これをasciiに変更して保存。

再度、patch名の一括変更

今度は成功する(はず)

再度、初期条件の一括参照・変更

このままでも先へ進めないこともないが、初期条件データを入れておかないと、後でマッピングする際にエラーになるので、

  • 変更前(T)
  • https://ocse2.com/wp-content/uploads/2011/12/017.png
  • 変更後(T)
  • https://ocse2.com/wp-content/uploads/2011/12/018.png
  • 変更後(D)
  • https://ocse2.com/wp-content/uploads/2011/12/019.png

フィールドデータのマッピング

まずは、mapFieldDict を用意せねばならないが、普通はすぐ出てくるところには置いていないであろう。ゼロから作るのも大変です。こういう時にDEXCS十徳ナイフの「検索」メニューが役立ちます。

  • https://ocse2.com/wp-content/uploads/2011/12/020.png

mapFieldをキーワードにして検索すると、いくつか出てきました。

  • https://ocse2.com/wp-content/uploads/2011/12/021.png

適当に選んでダブルクリックして開きます。

  • https://ocse2.com/wp-content/uploads/2011/12/022.png

これを別名で保存して、caseフォルダ(solid)の下、systemフォルダに収納してやれば良いのです。

  • https://ocse2.com/wp-content/uploads/2011/12/023.png

あとは必要事項を書きこむ。具体的には、cuttingPatchesのセクションに使用しているpatchの名前をすべて記入しておくだけです。このpatchの名前もいちいちキーボード入力していたらミスタイプもあり得るので、マルチタブで開いている隣のboudaryファイルからコピペするのが簡単でしょう。

  • https://ocse2.com/wp-content/uploads/2011/12/024.png

固体部分の温度データをマッピング

mapFieldDictが準備できたら、以下のコマンドを入力する。

mapFields -sourceRegion heater -sourceTime 100 ../multi1
mapFields -sourceRegion leftSolid -sourceTime 100 ../multi1
mapFields -sourceRegion rightSolid -sourceTime 100 ../multi1

これで、固体部分の温度データをすべてマッピングできたことになる。

stichMeshコマンドで3つの領域を結合する

stitchMesh -perfect heater_to_rightSolid rightSolid_to_heater -overwrite
stitchMesh -perfect heater_to_leftSolid leftSolid_to_heater -overwrite

constデータの一括参照・変更

  • https://ocse2.com/wp-content/uploads/2011/12/025.png

mechanicalProperties

  • https://ocse2.com/wp-content/uploads/2011/12/026.png

24行目: planeStress

yes ⇒ no に変更

hermalProperties

  • https://ocse2.com/wp-content/uploads/2011/12/027.png

24行目: thermalStress

no ⇒ yes に変更

いよいよソルバーの実行

  • https://ocse2.com/wp-content/uploads/2011/12/028.png

そうは簡単に進まない・・・

  • https://ocse2.com/wp-content/uploads/2011/12/029.png
    --> FOAM FATAL IO ERROR:
    Unknown patchField type directMappedWall for patch type directMappedWall

    directMappedWall という境界条件は使えないということのようですが、これはmapFieldを実行した時に自動的につけられた境界条件タイプでしかありません・

初期条件の一括参照・変更

  • https://ocse2.com/wp-content/uploads/2011/12/030.png
  • そういえば、境界条件は名前を整合させただけで、まだ何も具体的な値を設定していなかった・・・・
  • 変更前---D(変位)
  • https://ocse2.com/wp-content/uploads/2011/12/031.png
  • 変更後
  • https://ocse2.com/wp-content/uploads/2011/12/033.png
  • min* の部分はすべて変位拘束(5箇所)
    type      fixedValue;
    value    uniform(0 0 0);
  • それ以外の部分(10箇所)は、
    type      zeroGradient;
    value    uniform(0 0 0);

    に変更

再度、ソルバーの実行

  • https://ocse2.com/wp-content/uploads/2011/12/034.png

T(温度)についても同じ変更が必要

  • https://ocse2.com/wp-content/uploads/2011/12/035.png

directMappedWall ⇒ fixedValue に変更(10箇所)

再々度、ソルバーの実行

  • https://ocse2.com/wp-content/uploads/2011/12/036.png
--> FOAM FATAL IO ERROR:
keyword ddt(T) is undefined in dictionary "/home/dexcs/Desktop/solid/system/fvSchemes::ddtSchemes"

systemデータの一括参照・変更

  • https://ocse2.com/wp-content/uploads/2011/12/037.png
  • 変更前(fvSchemes)
  • https://ocse2.com/wp-content/uploads/2011/12/038.png
  • 変更後
  • https://ocse2.com/wp-content/uploads/2011/12/039.png

再々々度、ソルバーの実行

  • https://ocse2.com/wp-content/uploads/2011/12/040.png
  • ようやく計算が動いた!

最後にparaView可視化

  • https://ocse2.com/wp-content/uploads/2011/12/041.png

T(温度)分布

  • https://ocse2.com/wp-content/uploads/2011/12/042.png

D(変位)

  • https://ocse2.com/wp-content/uploads/2011/12/043.png

sigmaEq(相当応力)

  • https://ocse2.com/wp-content/uploads/2011/12/044.png
  • WarpByVector(Scale Factor 500)にて、変形モード表示しています
Share

コメントする

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

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