createPatch コマンド

createPatchコマンドとは、パッチやフェイスセットから境界面を作成するユーティリティです。

これにより、複数のパッチをまとめて境界面の名前や境界条件を設定することができます。
以下はチュートリアルの tutorials/incompressible/icoFoam/cavity/cavity において実行した例です。
具体的には、blockMeshDict内のboundary内の設定を削除したあとに、以下のコマンドを実行します。

 $ blockMesh  
 $ autoPatch 90 -overwrite 

blockMeshコマンドにより、計算領域全体の六面体メッシュを作成します。
autoPatchコマンドにより、計算領域の外側の面をパッチとして抽出します。
引数の90は面を区別するための角度になります。
これにより、図14,15のようなパッチ群が作成されます。

その後、以下のコマンドにより境界面を作成することができます。

 $ createPatch -overwrite  

これにより、図16,17のようにパッチが統合され、境界面が作成されます。
比較するとわかるように、
  パッチauto0, auto1, auto2  —>  fixedWalls
  パッチauto3         —>  movingWall
  パッチauto4, auto5      —>  frontAndBack
にそれぞれまとめられているのがわかります。
またtypeも設定されているので、このままソルバーにより解析を行うことができます。

コマンドラインオプション

createPatchコマンドを使用するには、system/createPatchDictファイルが必要となります。
このファイルがあるケースディレクトリ内で以下のコマンドを実行することで、境界面を作成することができます。

 $ createPatch 

オプションとしては、以下があります。

-case <dir>:ケースディレクトリを指定します。デフォルトでは現在いるディレクトリです。
-decomposeParDict <file>:特定の場所からdecomposeParDictファイルを読み込む場合に使用します。
-dict <file>:ディクショナリファイルを指定します。デフォルトではsystem/createPatchDictです。
-noFunctionObjects:functionObjects を実行しないようにします。
-overwrite:すでにあるファイルに上書きして設定を反映させます。
-parallel:並列で実行します。
-region <name>:別のメッシュ領域を指定します。
-roots <(dir1 .. dirN)>:複数のケースを処理する場合にディレクトリを指定します。
-writeObj:マッチング処理を示すobjファイルを作成します。
-srcDoc:ブラウザを用いてソースコードを表示します。
-doc:ブラウザを用いてドキュメントを表示します。
-help:ヘルプを表示します。

surfaceSubsetDict ファイル

createPatchを実行するには、createPatchDictファイルが必要となります。
createPatchDictファイルは /applications/utilities/mesh/manipulation/createPatch にあります。
以下の内容は、実行するのに用いた設定です。

matchTolerance 1E-3; //許容される誤差(オプション)
// Do a synchronisation of coupled points after creation of any patches.
// Note: this does not work with points that are on multiple coupled patches
// with transformations (i.e. cyclics).
//パッチ作成後に点の位置を調節するかどうか
//cyclicのように複数のパッチにまたがる場合は機能しない
pointSync true;

// Patches to create. //パッチを作成する
patches 
(
  {
    // Name of new patch //作成するパッチ名
    name movingWall; 
 
    // Dictionary to construct new patch from
    patchInfo
    {
      type wall;  //タイプを指定
      //type cyclic;
      //neighbourPatch n_patch;  //cyclicの場合は隣のパッチを指定
      //transform rotational;  //どのようにパッチ同士をあわせるか
      //rotationAxis (1 0 0);  //テンソルで指定
      //rotationCentre (0 0 0);
      //transform translational;
      //separationVector (1 0 0);
    }
 
    // How to construct: either from ‘patches’ or ‘set’
    //パッチ作成元をpatchesかsetを選択する
    constructFrom patches; 
    // If constructFrom = patches : names of patches. Wildcards allowed.
    //patchesの場合はパッチ名(ワイルドカード使用可)
    patches (auto3); 
      //setの場合はfaceSetの名前を指定
      //set s0;
  }
  {
    name fixedWalls;
    patchInfo
    {
      type wall;
    }
    constructFrom patches;
    patches (auto0 auto1 auto2);
  }
  {
    name frontAndBack;
    patchInfo
    {
      type empty;
    }
    constructFrom patches;
    patches (auto4 auto5);
  }
);

それぞれの項目について説明します。

・matchToleranceは、許容誤差を指定します。
・pointSyncは、パッチを作成した際に点の位置を調節するかどうかを指定します。
  これは、単一のパッチ内でのみ機能するもので、パッチのtypeにcyclicを指定した場合は、
  複数パッチにまたがるので調節は行われません。
・patchesは、リスト内に作成するパッチを指定します。
  それぞれのパッチは、ブロックで分けて記述します。
・nameには、パッチの名前を指定します。
・patchInfoには、パッチの詳しい情報を設定します。
・typeでは、パッチのタイプを指定します。
  patch, wall, cyclicなどが指定出来ます。
  cyclicを指定した場合には、どのパッチと接続するかを指定する必要があります。
・constructFromでは、パッチの作成元を指定します。
  パッチから作成する場合はpatches、フェイスセットから作成する場合はsetを指定します。
・patchesやsetでそれぞれの作成元を指定します。
  patchesの場合はワイルドカードを使って指定をすることができます。 

※このオプションはOpenFOAM V1612で動作を確認しています。お使いのバージョンによりましては、本ユーティリティならびにオプションが使えない場合がございます。