TreeFoamをマルチリージョン問題で使う方法

DEXCS2012 for OpenFOAM をリリースして以来、同梱のTreeFOAMが好評ですが、単領域問題でしか使えないのが残念…という声も聞くようになりました。

しかし、マルチリージョン問題では使い方にコツが必要というだけで、TreeFoamを使って効率的にケースファイル編集をすることは可能です。ここにその要領を取りまとめておくので参考にして下さい。

なお、ここでは、OpenFOAMのマルチリージョン問題の典型例として、

heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeater

のチュートリアルケースを例に解説します。

OpenFOAMでは、マルチリージョンのケースであっても、形式的にはOpenFOAMのフォルダ構成

範囲を選択_387

になっており、TreeFOAM上で、解析ケースとして設定すれば、実行ボタンやparaFoamの可視化ボタンは使用可能です。

 

範囲を選択_389

つまり、

  1. ケースを選択し、解析ファイルに設定
  2. OF端末を開いて、Allrun を実行
  3. parFoamで可視化
  4. 計算結果の初期化
  5. 計算の実行
  6. plotWatcherの起動

といったあたりは、通常のチュートリアルケースを実行するのと同じです。

しかし、Field、Properties、Dict(system)の編集といったあたり、ケースファイルを勉強するのにもっとも必要になりそうなメニューで、所望のファイルを選択してくれません。ちなみに、gridEditorを起動しても…

範囲を選択_386

となってしまうので、マルチリージョン問題では使えない(?)という声になっているということです。

こうなってしまう理由は簡単なことで、マルチリージョン問題では、時間フォルダやconstant, system のデータは、各フォルダ下、領域ごとのサブフォルダ下に収納される構造になっているからです。

範囲を選択_390

ならば、領域ごとのケースファイルを用意して、それぞれのケースファイルが参照するデータと、このマルチリージョン問題で取り扱うデータとの間を整合させてやれば、各個別の領域ごとに、データ編集が可能になるんでは、というアイデアです。

つまり、たとえば以下のスクリプトを実行すると、

#!/bin/sh
for i in heater leftSolid rightSolid bottomAir topAir
do
if [ -d $i ]; then
echo $i “exists…”
else
mkdir $i
cd $i
ln -s ../0/$i/ 0
ln -s ../constant/$i/ constant
ln -s ../system/$i/ system
cd system
if [ -f controlDict ]; then
echo “$i/system/controlDict exists…”
else
ln -s ../../system/controlDict controlDict
fi
if [ -f decomposeParDict ]; then
echo “$i/system/decomposeParDict exists…”
else
ln -s ../../system/decomposeParDict decomposeParDict
fi
cd ../..
fi
done

それぞれの単領域ごとにケースフォルダを作り、マルチリージョン問題用に作成された時間フォルダや、constant, sysytem フォルダに対するシンボリックリンクを作成してくれることになります。

次にフォルダの再読み込みボタン①を押すと…

範囲を選択_391

マルチリージョンのケースファイル(multiRegionHeater)の下に、単領域ごとのケースフォルダ(heater leftSolid rightSolid bottomAir topAir)が認識されるようになる。

そうすると、これらの単領域ごとに、gridEditorを起動したり、Properties、Dict(system)の編集が可能になるということです。個別の編集が終わったら、マルチリージョンのケースで初期化や計算実行という手順は同じです。

あと、並列計算は、単領域ごとに領域分割し、計算はマルチリージョンを解析ケースとして起動する、という手順です。

 

以上、お試しあれ。