OpenFOAMのサブヴァージョンですが、[[simpleFunctionObject:]]というのがあって、表面パッチを指定して、物体力とか、通過する流量だとかを、積分してくれるモジュールがある。これは使える!というので、なんとか、FoamXからパラメタ設定など出来るようにしたいということです。
+一つの機能だけを使用したい場合は簡単~
標準モジュールのどこかに、probe function を設定する方法があったので、そのやり方(controlDict.cfg 中に、以下の function 部分を追加)
を真似るだけ。
controlDict
{
type dictionary;
description “Control dictionary”;
helpURL “controlDict.html”;
dictionaryPath “system”;
entries
{
functions
{
type list;
optional 1;
types
{
include “$FOAMX_CONFIG/types/functionObjects/probe.cfg”;
}
elementType probe;
}
}
}
この、functionsの部分を、以下のように変更
functions
{
type list;
optional 1;
types
{
include “massFlow.cfg”;
}
elementType massFlow;
massFlow.cfgの中味は、
massFlow
{
type compound;
entries
{
name
{
type word;
description “Name of massFlow”;
}
dict
{
type dictionary;
entries
{
type
{
type word;
default patchMassFlow;
editable 0;
}
functionObjectLibs
{
type list;
elementType string;
default (“libsimpleFunctionObjects.so”);
}
verbose
{
type word;
default true;
}
patches
{
type list;
description “List of patches to be sampled”;
elementType word;
}
factor
{
type scalar;
default 1.0;
}
}
}
}
}
にてOK。少々長いが、probe.cfgのソースを参考にすれば、そんなに難しくない。
+問題は、probe と、massFlow の2つを同時にオブジェクトとして編集できるようにする方法です~
こういうGUIで、編集入力も出来るようになったんですが。。。~
system/controlDict 中の、該当部分は、以下のようになりました。
functions
{
probe
{
type probes;
functionObjectLibs
(
“libsampling.so”
);
probeLocations
(
);
fields
(
);
};
massFlow
{
type patchMassFlow;
functionObjectLibs
(
“libsimpleFunctionObjects.so”
);
verbose true;
patches
(
);
};
}
ちゃんと出来ているんじゃないか!と思いたいのですが、実は、、、このままソルバーを実行しようとすると、この部分で文法がおかしい!というエラーになって、正常に実行できません。~
正常に動かすには、以下のようになってなくちゃなりません。
functions
(
probe
{
type probes;
functionObjectLibs
(
“libsampling.so”
);
probeLocations
(
);
fields
(
);
}
massFlow
{
type patchMassFlow;
functionObjectLibs
(
“libsimpleFunctionObjects.so”
);
verbose true;
patches
(
);
}
);
よーく、見比べてみると、カッコにも2種類あって、またカッコを閉じた後に、セミコロンをつけるかつけないかという、微妙な違いがあって、こういう表記をきっちり同じにしてやらないといかんのですが、思うようになってくれません。
++ちなみに、上のGUIは、controlDict.cfg 中、functionsの部分を、次のように書き換えます。ミソは、type がlistでなく、dictionaryになっていることです。また、各アイテムは、entryというタグで併列表示されるようになります。
functions
{
typedictionary;
entries
{
include “probe.cfg”;
include “massFlow.cfg”;
}
}
/
あと、includeされる、表示本体(たとえば、probe.cfg)も、
probe
{
type compound;
entries
{
// name
// {
// type word;
// description “Name of probe”;
// }
dict
{
type dictionary;
entries
以下省略
と、nameの部分はコメントアウトしておきます。
+暫定処置~
せっかく上の方法で、FoamX上で、functionパラメタを編集できるようになったのですが、いざ実行ボタンを押して、計算が動いてくれないことにはどうにもなりません。テキストエディタで、system/controlDict中の、カッコ表記を手直しするというのも一つの代替案ではありますが、、、今回は諦めて、listを複数並べるやり方~
としました。ここで、functionsの名前の後ろに数字をつけて区別してあります。~
こうしておけば、一応、パラメタの編集は、FoamX上で出来て、実行してもエラーにはなりません。ただ有効になるのは、functionsだけです。それ以外のfunctionを有効にするには、テキストエディタで、system/controlDictを、以下のように変更するだけ、というかそういう手間は必要ですが、一応これにて所望の機能は実現できるというわけ。
注意事項としては、上記変更して、保存すると、FoamXがこれを感知して、
と、再読み込みの確認ダイヤログが出てくるが、ここで No を選択するということでしょうか。Yesを選択すると、Javaエラーが出て、無視して、実行も出来ますが、少々厄介です。
+最後に~
cavitatingFoam で、上記機能を組み込んだFoamXを使えるようにしたモジュールを、置いておきます。⇒
[[FoamXモジュール:]]~
cavitationFoam のアプリケーションソースのあるフォルダー中に、解凍したFoamXフォルダー以下を置けば使えるようになるはずです。
どなたか、あと1歩の工夫を考えて下さい。