surfaceSubset コマンド

surfaceSubsetは、表面形状ファイルの特定の部分を抽出し、別ファイルに書き込むユーティリティです。

これにより、形状を分割して扱うことができます。
例として、bullet.stlを分割してみます。
以下のコマンドを実行することで、分割することができます。
※surfaceSubsetDictの設定方法は、下記を参照してください。

surfaceSubsetDictとstlが同じディレクトリにある場合、そのディレクトリから実行できます。

 $ surfaceSubset surfaceSubsetDict bullet.stl bullet-subset.stl  

違うディレクトリにある場合は、このように実行します。(ケーストップからの指定の場合)

 $ surfaceSubset system/surfaceSubsetDict constant/triSurface/bullet.stl bullet-subset.stl  

ここでは、surfaceSubsetDictでX軸方向に半分に分割するように指定しています。
その結果として、図11は分割前の形状、図12は分割後のメッシュとなります。
このコマンドには三角形メッシュを分割する機能はないので、荒いメッシュの部分が残っています。

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

surfaceSubsetコマンドを実行するには、3つの引数が必要となります。
1つ目は、抽出する形状を定義するDictファイルを指定します。
2つ目は、元となる形状ファイルを指定します。
3つ目は、出力先のファイル名となります。

 $ surfaceSubset <surfaceSubsetDict> <surfaceFile> <output surfaceFile> 

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

-case <dir>:ケースディレクトリを指定します。デフォルトでは現在いるディレクトリです。
-dict <file>:ディクショナリファイルを指定します。
-noFunctionObjects:functionObjects を実行しないようにします。
-srcDoc:ブラウザを用いてソースコードを表示します。
-doc:ブラウザを用いてドキュメントを表示します。
-help:ヘルプを表示します。

surfaceSubsetDict ファイル

surfaceSubsetを実行するには、surfaceSubsetDictファイルが必要となります。
surfaceSubsetDictファイルは /applications/utilities/surface/surfaceSubset/surfaceSubsetDict にあります。
例として、内容は以下のようになります。

// Select triangles by label※ラベルによって、抽出する形状を指定
faces #include  “badFaces”;

// Select triangles using given points (local point numbering)※点によって、抽出する形状を指定(local pointの番号で指定)
localPoints ( );

// Select triangles using given edges※エッジによって、抽出する形状を指定
edges ();

// Select triangles (with face centre) inside box※直方体の内部に三角形の中心があるメッシュを抽出
zone
(
(0  -10000  125)
(10000  10000  10000)
);

// Select triangles (with face centre) inside or outside of another surface.
※他の形状と比較して、三角形の中心が内側もしくは外側にあるかどうかで抽出
// (always selects triangles that are ‘on’ other surface)※(表面上にある三角形は常に抽出されます)
surface
{
name  “sphere.stl”;
outside   yes;
}

// Select triangles on plane※平面によって、抽出する形状を指定
plane
{
  planeType embeddedPoints;
  embeddedPointsDict
  {
    //point1 (-937.259845440205 160.865349115986 240.738791238078);
    //point2 (-934.767379895778 9.63875523747379 14.412359671298);
    //point3 (44.4744688899417 121.852927962709 182.352485273106);
    point1 (-957.895294591874 242.865936478961 162.286611511875);
    point2 (-961.43140327772 4.53895551562943 3.04159982093444);
    point3 (91.2414146173805 72.1504381996692 48.2181961945329);
  }

  // Distance from plane※平面からの距離
  distance  0.1;
  // Normal difference to plane※平面との差
  cosAngle  0.99;
}
// Extend selection with edge neighbours※隣り合ったメッシュを追加で抽出するかどうか
addFaceNeighbours  no;
// Invert selection※反転するかどうか
invertSelection  false;

以下、主要な設定についての説明です。

facesでは、形状ファイル内のラベル名で抽出する形状を指定します。
localPointsでは、点データの番号で抽出する形状を指定します。
edgesでは、エッジによって、抽出する形状を指定します。
zoneでは、対角の2点で指定された直方体によって、三角形の中心が直方体の内部にある部分を抽出します。
surfaceでは、別の形状と比較して、その形状より内部、もしくは外部にある部分を抽出します。
  nameで、比較対象の形状ファイルを指定します。
  outsideは外側を抽出するかどうかを指定します。
    noにした場合は、内側が抽出されます。
planeでは、平面によって、抽出する形状を指定します。
  planeTypeでは、平面の指定の仕方を決めます。
  embeddedPointsDictでは、どの埋め込みポイントを使うかを指定します。
  distanceでは、指定した平面からどのくらいの距離まで範囲に入れるかを指定します。
  cosAngleでは、平面との差を指定します。
addFaceNeighboursでは、抽出した部分に隣接するメッシュを抽出するかどうかを指定します。
InvertSelectionでは、選択部分を反転するかどうかを指定します。 

上記の内容を踏まえ修正や不要部分を削除した、
今回実行するのに使ったsurfaceSubsetDictファイルは以下のようになっています。

// Select triangles by label
faces  ();

// Select triangles using given points (local point numbering)
localPoints  ( );

// Select triangles using given edges
edges ();

// Select triangles (with face centre) inside box
zone
(
  (-0.005  –0.005  –0.005)
  (0.000  0.005  0.015)
);
// Extend selection with edge neighbours
addFaceNeighbours  no;

// Invert selection
invertSelection  false;

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