OpenFoam – simpleFucntionObject(patchMassFlow) – FoamX化

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を使えるようにしたモジュールを、置いておきます。⇒
cavitationFoam のアプリケーションソースのあるフォルダー中に、解凍したFoamXフォルダー以下を置けば使えるようになるはずです。
どなたか、あと1歩の工夫を考えて下さい。
Share

コメントする

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

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