「OpenFOAM v2212 リリースノート」の版間の差分

編集の要約なし
23行目: 23行目:
Mac OSXユーザーは、ソースからコンパイルするか、コンパイル済みのパッケージのDockerコンテナを使用するかのオプションがあります(詳細)。
Mac OSXユーザーは、ソースからコンパイルするか、コンパイル済みのパッケージのDockerコンテナを使用するかのオプションがあります(詳細)。


== v2212 User Upgrade Guide ==
= v2212 User Upgrade Guide =


=== 行動の変化 ===
== 行動の変化 ==


==== timeActivatedFileUpdate(タイムアクティベートファイルアップデート ====
=== timeActivatedFileUpdate(タイムアクティベートファイルアップデート ===
timeActivatedFileUpdate では、ファイルが見つからない場合、Critical エラー (FatalIOError) として扱われるようになりました。以前は単純なエラー (FatalError) として扱われ、functionObject をロードするときのみ Warning にダウングレードされ、設定エラーに気づかないことを意味しました。
timeActivatedFileUpdate では、ファイルが見つからない場合、Critical エラー (FatalIOError) として扱われるようになりました。以前は単純なエラー (FatalError) として扱われ、functionObject をロードするときのみ Warning にダウングレードされ、設定エラーに気づかないことを意味しました。


==== Spalart-Allmaras DESモデル ====
=== Spalart-Allmaras DESモデル ===
SpalartAllmarasベースのDESモデルでは、以前アクティブであったft2項はデフォルトで非アクティブになりました。その活性化は、新しいオプションのft2項(デフォルトではfalse)を使って管理することができます。
SpalartAllmarasベースのDESモデルでは、以前アクティブであったft2項はデフォルトで非アクティブになりました。その活性化は、新しいオプションのft2項(デフォルトではfalse)を使って管理することができます。


=== Input Dictionaries ===
== Input Dictionaries ==


==== 力、力係数 ====
=== 力、力係数 ===
binModels、forceの優先順位をより一貫して取り扱うようにしました。ディクショナリーがオーバースペックな場合、CofR ショートカットよりも高い優先順位を coordinateSystem エントリーに与えるようにしました。
binModels、forceの優先順位をより一貫して取り扱うようにしました。ディクショナリーがオーバースペックな場合、CofR ショートカットよりも高い優先順位を coordinateSystem エントリーに与えるようにしました。


==== 合理化改善 ====
=== 合理化改善 ===
流線形の取り扱いの一部がさらに改良されました(例:補間におけるx/y/zの代わりにバリセントリック座標)。その過程で、入力要件が緩和されました。
流線形の取り扱いの一部がさらに改良されました(例:補間におけるx/y/zの代わりにバリセントリック座標)。その過程で、入力要件が緩和されました。


44行目: 44行目:
* U(速度)フィールドはサンプリングされたフィールドに名前を付ける必要がありません。
* U(速度)フィールドはサンプリングされたフィールドに名前を付ける必要がありません。


==== 座標系の扱いを改善 ====
=== 座標系の扱いを改善 ===
座標系定義がサブディクショナリースコープ内に組み込まれている場合、原点キーワードはオプションになりました。例えば
座標系定義がサブディクショナリースコープ内に組み込まれている場合、原点キーワードはオプションになりました。例えば
  <code>dict1
  <code>dict1
77行目: 77行目:
  }</code>
  }</code>


==== ヒストグラムの非推奨項目 ====
=== ヒストグラムの非推奨項目 ===
setFormat と formatOptions の項目は,ヒストグラム関数オブジェクトから静かに非推奨とされました.
setFormat と formatOptions の項目は,ヒストグラム関数オブジェクトから静かに非推奨とされました.


=== ユーティリティの推移 ===
== ユーティリティの推移 ==


==== transformPointsとsurfaceTransformPointsのオプション名を更新しました。 ====
=== transformPointsとsurfaceTransformPointsのオプション名を更新しました。 ===
新しいオプション -auto-centre と -centre は、それぞれ -auto-origin と -origin を置き換えます(古いオプションも互換性のあるエイリアスとしてまだ受け入れられます)。centerre に変更することで、座標系 origin() との意味の混同を避けることができます。
新しいオプション -auto-centre と -centre は、それぞれ -auto-origin と -origin を置き換えます(古いオプションも互換性のあるエイリアスとしてまだ受け入れられます)。centerre に変更することで、座標系 origin() との意味の混同を避けることができます。


==== <code>effectivenessHeatExchangerSource</code> ====
=== <code>effectivenessHeatExchangerSource</code> ===
The <code>effectivenessHeatExchangerSource</code> fvOption has been renamed to <code>heatExchangerSource</code>. Its previous behaviour can be recovered by using the <code>heatExchangerSource</code> with the submodel of <code>effectivenessTable</code>.
The <code>effectivenessHeatExchangerSource</code> fvOption has been renamed to <code>heatExchangerSource</code>. Its previous behaviour can be recovered by using the <code>heatExchangerSource</code> with the submodel of <code>effectivenessTable</code>.


==== <code>histogram</code> ====
=== <code>histogram</code> ===
ヒストグラム関数オブジェクトがリファクタリングされました.以前の動作は,equalBinWidthのサブモデルでヒストグラムを使用することで回復できます.また,タイムステップごとの出力ファイルが1つの出力ファイルに置き換えられました.
ヒストグラム関数オブジェクトがリファクタリングされました.以前の動作は,equalBinWidthのサブモデルでヒストグラムを使用することで回復できます.また,タイムステップごとの出力ファイルが1つの出力ファイルに置き換えられました.


== v2212 Developer Upgrade Guide ==
= v2212 Developer Upgrade Guide =


=== 潜在的な破壊的変化 ===
== 潜在的な破壊的変化 ==


==== ツリーデータ項目 ====
=== ツリーデータ項目 ===
Octree 処理への更新の一部として、様々な treeData アイテムは、データの完全または部分的なサブセットを一貫して処理するようになりました。この結果、直接アクセスメソッドである cellLabels(), faceLabels(), edgeLabel() を使用するコードは、おそらく破損します。
Octree 処理への更新の一部として、様々な treeData アイテムは、データの完全または部分的なサブセットを一貫して処理するようになりました。この結果、直接アクセスメソッドである cellLabels(), faceLabels(), edgeLabel() を使用するコードは、おそらく破損します。


101行目: 101行目:
* 元のインデックスへの参照を安全に解除するには objectIndex(label) を、元のオブジェクトへの参照を解除するには operator[](label) を使用します。treeDataEdge では、幾何学的データを取得するために line(label) 便利なヘルパーがしばしば好まれます。
* 元のインデックスへの参照を安全に解除するには objectIndex(label) を、元のオブジェクトへの参照を解除するには operator[](label) を使用します。treeDataEdge では、幾何学的データを取得するために line(label) 便利なヘルパーがしばしば好まれます。


==== オプションの辞書 readEntry ====
=== オプションの辞書 readEntry ===
いくつかの特殊なケースでは、辞書のreadEntryをオプションにすると便利なことがある。たとえば
いくつかの特殊なケースでは、辞書のreadEntryをオプションにすると便利なことがある。たとえば
  <code>dict.readEntry("key", keyType::LITERAL, false);
  <code>dict.readEntry("key", keyType::LITERAL, false);
111行目: 111行目:
デフォルト以外のオプションを持つreadEntryが稀であることから、この変更によって既存のユーザーコーディングが大きく崩れることはないと思われます。
デフォルト以外のオプションを持つreadEntryが稀であることから、この変更によって既存のユーザーコーディングが大きく崩れることはないと思われます。


==== ISstreamへのストリームリネームの制限 ====
=== ISstreamへのストリームリネームの制限 ===


* non-constアクセスは、以前はトップレベル(IOstream)で宣言されていたため、ファイルを開いた後にOFstream::name()などを変更することが可能で、開いた基礎ファイルと矛盾が生じることがありました。  名前の変更をISstream(およびITstreamのカウンターパート)に制限するようにしました。既存の有効なコードには影響を与えません。
* non-constアクセスは、以前はトップレベル(IOstream)で宣言されていたため、ファイルを開いた後にOFstream::name()などを変更することが可能で、開いた基礎ファイルと矛盾が生じることがありました。  名前の変更をISstream(およびITstreamのカウンターパート)に制限するようにしました。既存の有効なコードには影響を与えません。
130行目: 130行目:
* <code>newFileAtStartTime(const word&)</code> : same with <code>createFile(const word&)</code>
* <code>newFileAtStartTime(const word&)</code> : same with <code>createFile(const word&)</code>


=== ベースクラス/コンテナの改良 ===
== ベースクラス/コンテナの改良 ==


==== General ====
=== General ===
メソッド名をより親しみやすいSTLメソッド名に揃える最初の取り組みです。これにより、名前の親しみやすさが増し、異なるC++コードベース間で移植する際に役立つことがあります。
メソッド名をより親しみやすいSTLメソッド名に揃える最初の取り組みです。これにより、名前の親しみやすさが増し、異なるC++コードベース間で移植する際に役立つことがあります。


142行目: 142行目:
** front(), back(), push_front(), push_back(), pop_front() methods
** front(), back(), push_front(), push_back(), pop_front() methods


==== Foam::string and Foam::fileName ====
=== Foam::string and Foam::fileName ===
C++23 std::string に追加されるのと同じメソッドに相当する、新しい string::contains() コンビニエンスメソッドを追加しました。例えば
C++23 std::string に追加されるのと同じメソッドに相当する、新しい string::contains() コンビニエンスメソッドを追加しました。例えば
  <code>if (keyword.contains('/')) ...
  <code>if (keyword.contains('/')) ...
151行目: 151行目:
* stem(), replace_name(), replace_ext(), remove_ext() etc
* stem(), replace_name(), replace_ext(), remove_ext() etc


==== PtrList ====
=== PtrList ===
PtrList::get(label) と PtrList::set(label) メソッドは内部境界チェックを含むようになり,境界外へのアクセスに対しては nullptr を返すようになりました.この追加チェックは些細なオーバーヘッドですが、HashPtrTable や autoPtr などと対称的な get() のフェイルセーフな振る舞いを提供し、UPtrList、PtrList、PtrDynList の set(label) メソッドを整列させることができるようになりました。
PtrList::get(label) と PtrList::set(label) メソッドは内部境界チェックを含むようになり,境界外へのアクセスに対しては nullptr を返すようになりました.この追加チェックは些細なオーバーヘッドですが、HashPtrTable や autoPtr などと対称的な get() のフェイルセーフな振る舞いを提供し、UPtrList、PtrList、PtrDynList の set(label) メソッドを整列させることができるようになりました。


==== HashPtrTable ====
=== HashPtrTable ===
HashPtrTable のセットメソッドが refPtr/tmp をサポートするようになり、さらに柔軟性が増しました。
HashPtrTable のセットメソッドが refPtr/tmp をサポートするようになり、さらに柔軟性が増しました。


==== FixedList ====
=== FixedList ===
テンプレート化された get<unsigned>() メソッドが追加され、FixedList のコンパイル時のインデックス付けが高速になりました(インデックスが無効な場合はコンパイラエラーが発生します)。これにより、noexceptアクセスが可能になり、他の様々な用途(例えば、triFace、triPoints、...)に伝播することができるようになった。
テンプレート化された get<unsigned>() メソッドが追加され、FixedList のコンパイル時のインデックス付けが高速になりました(インデックスが無効な場合はコンパイラエラーが発生します)。これにより、noexceptアクセスが可能になり、他の様々な用途(例えば、triFace、triPoints、...)に伝播することができるようになった。


166行目: 166行目:
* 新しい MinMax::operator&=() は、2つの最小-最大範囲の和を実行します。この演算子は、intersects()クエリと名前が似ていて紛らわしい、未使用のintersect()メソッドを置き換えるものです。
* 新しい MinMax::operator&=() は、2つの最小-最大範囲の和を実行します。この演算子は、intersects()クエリと名前が似ていて紛らわしい、未使用のintersect()メソッドを置き換えるものです。


=== IOstreams ===
== IOstreams ==


==== OFstreamのアトミックファイル作成に対応 ====
=== OFstreamのアトミックファイル作成に対応 ===
IOstreamOption::ATOMIC 列挙は、OFstream を構築する際のディスパッチタグとして使用することができます。この形式では、書き込みのための中間ファイルが作成されます。ストリームが閉じられるときだけ、この中間ファイルは実際の出力名に移動/リネームされます。これにより、ファイルの書き込み中にシミュレーションがクラッシュした場合でも、部分的なファイル(破損したファイル)を避けることができ、安全です。名前の最後を~tmp~とすることで、OpenFOAM内でバックアップファイルとして扱われ、再起動時にはロードされないようになります。
IOstreamOption::ATOMIC 列挙は、OFstream を構築する際のディスパッチタグとして使用することができます。この形式では、書き込みのための中間ファイルが作成されます。ストリームが閉じられるときだけ、この中間ファイルは実際の出力名に移動/リネームされます。これにより、ファイルの書き込み中にシミュレーションがクラッシュした場合でも、部分的なファイル(破損したファイル)を避けることができ、安全です。名前の最後を~tmp~とすることで、OpenFOAM内でバックアップファイルとして扱われ、再起動時にはロードされないようになります。


==== 列挙された追記・非追記オープンファイル ====
=== 列挙された追記・非追記オープンファイル ===


* IOstreamOption::APPEND と IOstreamOption::NON_APPEND の列挙を使用すると、boolean パラメータよりも明確である。既存のユーザーコーディングに影響を与えることはないだろう。
* IOstreamOption::APPEND と IOstreamOption::NON_APPEND の列挙を使用すると、boolean パラメータよりも明確である。既存のユーザーコーディングに影響を与えることはないだろう。


==== 簡略化されたストリームコンストラクタ ====
=== 簡略化されたストリームコンストラクタ ===


* IOstreamOption の導入 (OpenFOAM-v1806 で追加) により、トップレベルストリーム (例: IFstream, OFstream) が内部 IOstream の「バージョン」 (例: version: 2.0) についての追加情報を必要とするケースがなくなったため、これらのコンストラクタ形式が削除されました。 これにより、指定したフォーマット/圧縮/付加の組み合わせでファイルを開くことができ、バージョンの指定に煩わされることがなくなります。
* IOstreamOption の導入 (OpenFOAM-v1806 で追加) により、トップレベルストリーム (例: IFstream, OFstream) が内部 IOstream の「バージョン」 (例: version: 2.0) についての追加情報を必要とするケースがなくなったため、これらのコンストラクタ形式が削除されました。 これにより、指定したフォーマット/圧縮/付加の組み合わせでファイルを開くことができ、バージョンの指定に煩わされることがなくなります。


=== IOobjectOption, IOobject ===
== IOobjectOption, IOobject ==
IOobjectの作成は、通常、次のような内容です。
IOobjectの作成は、通常、次のような内容です。
  <code>IOobject io
  <code>IOobject io
209行目: 209行目:
  );</code>
  );</code>


==== IOobjectOption ====
=== IOobjectOption ===
IOobjectOption クラスは、objectRegistry などに依存しない軽量な処理のために、読み取り/書き込み、ストレージフラグをカプセル化しています。また、辞書の読み込みのための読み込み制御情報を提供するために使用することができ、さらなるサブ依存を導入することはありません。
IOobjectOption クラスは、objectRegistry などに依存しない軽量な処理のために、読み取り/書き込み、ストレージフラグをカプセル化しています。また、辞書の読み込みのための読み込み制御情報を提供するために使用することができ、さらなるサブ依存を導入することはありません。


231行目: 231行目:
     }</code>
     }</code>


==== きめ細かな辞書の読み込みを可能にするIObjectOption ====
=== きめ細かな辞書の読み込みを可能にするIObjectOption ===
以前は、辞書エントリーの読み取りを高度に制御するための 'mandatory' (bool) がありましたが、呼び出し側のコードでは追加のコードコメントがないと意味が不明でした。
以前は、辞書エントリーの読み取りを高度に制御するための 'mandatory' (bool) がありましたが、呼び出し側のコードでは追加のコードコメントがないと意味が不明でした。


238行目: 238行目:
これはマイナーなブレークダウンです(使用頻度が低く、高度な使用法のみ)
これはマイナーなブレークダウンです(使用頻度が低く、高度な使用法のみ)


=== ジオメトリ処理の改善・最適化 ===
== ジオメトリ処理の改善・最適化 ==
このバージョンでは、幾何学的な実体を扱う際に便利なメソッドが多数追加されています。
このバージョンでは、幾何学的な実体を扱う際に便利なメソッドが多数追加されています。


==== General ====
=== General ===


* ヘッダ定義の統一やパススルー方式の増加により、四面体や三角形の取り扱いを簡素化しました。
* ヘッダ定義の統一やパススルー方式の増加により、四面体や三角形の取り扱いを簡素化しました。
247行目: 247行目:
* 三角形に、よく使われる計算のための静的な center() と areaNormal() および unitNormal() メソッドが追加されました。
* 三角形に、よく使われる計算のための静的な center() と areaNormal() および unitNormal() メソッドが追加されました。


==== box() ====
=== box() ===
meshShapes (cell,edge,face,triangle,...) に、Pair<point> を返す低レベルの bound box() メソッドを追加しました。これらの抽出された幾何学的限界は、boundBoxに依存することなく使用することができます。
meshShapes (cell,edge,face,triangle,...) に、Pair<point> を返す低レベルの bound box() メソッドを追加しました。これらの抽出された幾何学的限界は、boundBoxに依存することなく使用することができます。


==== mesh cellBb() ====
=== mesh cellBb() ===
primitiveMesh cellBb()メソッドを追加しました。これは、最も安価な計算を使用して、指定されたメッシュセルのバウンドボックスを返します。
primitiveMesh cellBb()メソッドを追加しました。これは、最も安価な計算を使用して、指定されたメッシュセルのバウンドボックスを返します。


256行目: 256行目:
* またはセル面を歩く:セルボックス()メソッドを介して、需要駆動型のセルポイントなどを作成しないようにします。
* またはセル面を歩く:セルボックス()メソッドを介して、需要駆動型のセルポイントなどを作成しないようにします。


==== patch sphere(facei) ====
=== patch sphere(facei) ===
PrimitivePatchに、与えられたパッチ面を囲む外接球(原点+半径の2乗)を返すsphere(facei)メソッドを追加しました。
PrimitivePatchに、与えられたパッチ面を囲む外接球(原点+半径の2乗)を返すsphere(facei)メソッドを追加しました。


==== ベクター方式の追加 ====
=== ベクター方式の追加 ===
ジオメトリを扱う場合、点の比較は非常に頻繁に発生します。これらは Foam::vector 内の直接メソッドとしてバンドルされるようになりました。
ジオメトリを扱う場合、点の比較は非常に頻繁に発生します。これらは Foam::vector 内の直接メソッドとしてバンドルされるようになりました。


274行目: 274行目:
新しい vector::less_xyz() vector::less_yzx() および vector::less_zxy() 比較メソッドは、辞書式ソートに便利です。
新しい vector::less_xyz() vector::less_yzx() および vector::less_zxy() 比較メソッドは、辞書式ソートに便利です。


==== boundBox()、treeBoundBox()の処理。 ====
=== boundBox()、treeBoundBox()の処理。 ===
boundBox()、treeBoundBox()クラスを若干整理し、以下のように一部拡張しました。
boundBox()、treeBoundBox()クラスを若干整理し、以下のように一部拡張しました。


284行目: 284行目:
* boundBox::addは、プリミティブメッシュ形状から抽出されたエッジや「ボックス」を追加するときに、点のペアを使用します。
* boundBox::addは、プリミティブメッシュ形状から抽出されたエッジや「ボックス」を追加するときに、点のペアを使用します。


=== オクツリーの改良 ===
== オクツリーの改良 ==
ループ内でのメモリ効率を上げるため、結果を外部記憶するオクツリー findBox(), findSphere() を追加しました。単純なテストでは、octree overlaps() を使用することができます。これは、findBox(), findSphere() と同様に動作しますが、いずれかの形状が重なり合った場合、早期に終了します。
ループ内でのメモリ効率を上げるため、結果を外部記憶するオクツリー findBox(), findSphere() を追加しました。単純なテストでは、octree overlaps() を使用することができます。これは、findBox(), findSphere() と同様に動作しますが、いずれかの形状が重なり合った場合、早期に終了します。


==== treeDataの改良 ====
=== treeDataの改良 ===
サブセットとインターフェースの全体的な整合性を向上させるための変更。
サブセットとインターフェースの全体的な整合性を向上させるための変更。


298行目: 298行目:




=== MPI(Pstream)メソッドの更新 ===
== MPI(Pstream)メソッドの更新 ==
このリリースでは、より多くのケースでネイティブMPIルーチンが使用されるようにコードの調整が行われていますが、一部のPstream(MPI)メソッドを簡素化するための変更も含まれています。
このリリースでは、より多くのケースでネイティブMPIルーチンが使用されるようにコードの調整が行われていますが、一部のPstream(MPI)メソッドを簡素化するための変更も含まれています。


319行目: 319行目:
|}
|}


==== ダイレクトMPIおよび/またはリダクション ====
=== ダイレクトMPIおよび/またはリダクション ===
 
MPI_LAND および MPI_LOR intrinsics のダイレクトラッパーとして UPstream::reduceAnd および UPstream::reduceOr が追加されました。これらは、論理演算のための特別な目的の returnReduce で再利用されます。<blockquote>MPI bool オペレーションを使用すると、ベンダー/ハードウェアによる MPI の最適化が可能になります。</blockquote>returnReduceAnd(bool) と returnReduceOr(bool) をそれぞれ andOp<bool>() と orOp<bool>() 演算子を持つ returnReduce のインライン・ラッパーとして使用すると、より簡単に扱える式が得られます。また、パラメータをブール値に一義的にキャストできるという利点もあります。
MPI_LAND および MPI_LOR intrinsics のダイレクトラッパーとして UPstream::reduceAnd および UPstream::reduceOr が追加されました。これらは、論理演算のための特別な目的の returnReduce で再利用されます。<blockquote>MPI bool オペレーションを使用すると、ベンダー/ハードウェアによる MPI の最適化が可能になります。</blockquote>returnReduceAnd(bool) と returnReduceOr(bool) をそれぞれ andOp<bool>() と orOp<bool>() 演算子を持つ returnReduce のインライン・ラッパーとして使用すると、より簡単に扱える式が得られます。また、パラメータをブール値に一義的にキャストできるという利点もあります。


336行目: 337行目:
</syntaxhighlight>
</syntaxhighlight>


==== globalIndexの修正 ====
=== globalIndexの修正 ===
リーディングディスパッチタグを使用し(他のC++の規約との類似性を高める)、マスターデータを別々に書き込むことができるgather/writeに便利なgatherNonLocalタグを含めます。
リーディングディスパッチタグを使用し(他のC++の規約との類似性を高める)、マスターデータを別々に書き込むことができるgather/writeに便利なgatherNonLocalタグを含めます。


343行目: 344行目:
* PatchTools::gatherAndMerge にオプションのパラメーターとして pointMergeMap が追加されました。この情報は常に必要というわけではありません。例えば、gatherAndMergeを使用して面を結合するだけで、ポイントフィールドを使用しない場合です。
* PatchTools::gatherAndMerge にオプションのパラメーターとして pointMergeMap が追加されました。この情報は常に必要というわけではありません。例えば、gatherAndMergeを使用して面を結合するだけで、ポイントフィールドを使用しない場合です。


=== メッシュ/パッチへのアクセス方法を改善しました。 ===
== メッシュ/パッチへのアクセス方法を改善しました。 ==
メッシュとフィールドコンポーネントのアドレスには、細かいですが様々な便利な変更があります。
メッシュとフィールドコンポーネントのアドレスには、細かいですが様々な便利な変更があります。


==== FieldFieldへのインデックス作成 ====
=== FieldFieldへのインデックス作成 ===
FieldFieldへのタプル(ペア)インデックスをサポートします。(patchi, elemi) のペアを使用して、FieldField の要素にアクセスできるようになりました。
FieldFieldへのタプル(ペア)インデックスをサポートします。(patchi, elemi) のペアを使用して、FieldField の要素にアクセスできるようになりました。


==== faPatch/fvPatch patchField, lookupPatchField の呼び出しを簡素化。 ====
=== faPatch/fvPatch patchField, lookupPatchField の呼び出しを簡素化。 ===
2番目の(unsed)テンプレートパラメータは完全にオプションになりました。以前は古いコンパイラ(2008年以前)では必要でした。
2番目の(unsed)テンプレートパラメータは完全にオプションになりました。以前は古いコンパイラ(2008年以前)では必要でした。


==== 拡張polyBoundaryMeshパッチ/フェースクエリ ====
=== 拡張polyBoundaryMeshパッチ/フェースクエリ ===
whichPatchFace() メソッドは (patchi, patchFacei) タプルを返し、 whichPatch() は whichPatchFace() の簡略化されたラッパーになりました。
whichPatchFace() メソッドは (patchi, patchFacei) タプルを返し、 whichPatch() は whichPatchFace() の簡略化されたラッパーになりました。


新しいgroupNames()メソッドは、ゾーンと同様のパッチベースの機能を提供します。
新しいgroupNames()メソッドは、ゾーンと同様のパッチベースの機能を提供します。


==== 拡張された有限領域メッシュ/面クエリ ====
=== 拡張された有限領域メッシュ/面クエリ ===
有限面積から体積メッシュへの対応のためのブックキーピングを改善する。
有限面積から体積メッシュへの対応のためのブックキーピングを改善する。


366行目: 367行目:
また、ボリュームからエリアへのマッパー機能を拡張し、より柔軟で一貫性のあるものにしました。
また、ボリュームからエリアへのマッパー機能を拡張し、より柔軟で一貫性のあるものにしました。


==== GeometricFieldのフィールド変更 ====
=== GeometricFieldのフィールド変更 ===
GeometricField::internalFieldRef() は boundaryFieldRef() や primitiveFieldRef() と同じように書き込みができるようになりました。名前付けは internalField() を補完するものです。
GeometricField::internalFieldRef() は boundaryFieldRef() や primitiveFieldRef() と同じように書き込みができるようになりました。名前付けは internalField() を補完するものです。


意味は GeometricField::ref() メソッドと同じですが、より明示的な名前がついており、例えば tmp::ref() と混同される可能性は低くなっています。
意味は GeometricField::ref() メソッドと同じですが、より明示的な名前がついており、例えば tmp::ref() と混同される可能性は低くなっています。


=== 座標系 ===
== 座標系 ==
座標系に対する基本的な変更はありませんが、coordinateSystem辞書検索に対する取り扱いが単純化されました。coordinateSystems::NewIfPresent()メソッドは、オプショナルな項目の取り扱いを非常に単純化しています。たとえば
座標系に対する基本的な変更はありませんが、coordinateSystem辞書検索に対する取り扱いが単純化されました。coordinateSystems::NewIfPresent()メソッドは、オプショナルな項目の取り扱いを非常に単純化しています。たとえば
  <code>coordSysPtr_ = coordinateSystem::NewIfPresent(mesh, dict);</code>
  <code>coordSysPtr_ = coordinateSystem::NewIfPresent(mesh, dict);</code>
390行目: 391行目:
}
}
</syntaxhighlight>
</syntaxhighlight>
= v2212: プリプロセッシングの新機能と改良点 =
== checkMeshの改良 ==
checkMesh ユーティリティが含まれるようになりました。
* プロセッサの境界を越えたパッチとフェイスゾーンの多様性チェック
* pointZone, faceZone, cellZone の重複を報告する。
=== パラレルコンシステントマニホールドレポート ===
allTopology スイッチは、パッチと faceZone のトポロジーを報告します(例:)。
<code>Checking patch topology for multiply connected surfaces...
    Patch              Faces    Points  Surface topology
    fixedWalls          80      160      ok (non-closed singly connected)
    frontAndBack        800      882      ok (non-closed singly connected)</code>
以前のバージョンでは、このチェックは並列に無効化されていました。v2212では、エッジの接続はプロセッサの境界を越えてチェックされます。
<code>Checking patch topology for multiply connected surfaces...
    Patch              Faces    Points  Surface topology
    fixedWalls          80      164      ok (non-closed singly connected)
    frontAndBack        800      924      ok (non-closed singly connected)</code>
そのことに注意してください。
* 点接続性チェックの「多重接続(共有点)」は、「まだ」並列一貫していない。
* ポイント数は全ポイントの合計を表し、重複を補正するものではありません。
=== オーバーラップゾーン ===
allTopology スイッチは、一部のユーティリティによってのみサポートされているため、オーバーラップするゾーンを報告するようになりました。checkMeshの出力例は次のとおりです。
<code>Checking topology...
    Boundary definition OK.
--> FOAM Warning :
    From virtual bool Foam::zone::checkDefinition(Foam::label, bool) const
    in file meshes/polyMesh/zones/zone/zone.C at line 199
    Zone c0 contains duplicate index label 0</code>
Source code
* $FOAM_UTILITIES/mesh/manipulation/checkMesh
== changeDictionaryユーティリティの改良 ==
changeDictionary ユーティリティは、照合されたプロセッサ・ディレクトリに対して並列に操作できるようになりました (例)。
<code>mpirun -np 2 changeDictionary -parallel -fileHandler collated</code>
このため、ケースを再分解することなく、境界条件の設定をわずかに変更するなどの場合に非常に便利です。
See:
* Issue #2533
Source code
* $FOAM_APP/utilities/preProcessing/changeDictionary
== 曲率に基づく新しいSnappyHexMeshのリファインメント ==
TOP
現在、SnappyHexMeshのリファインメントは隣接するセル間の光線の交点に基づき行われます。フィーチャーは交点での交差角度とローカル法線を解釈することで特定されます。これはresolveFeatureAngleパラメータで決定されます。
=== サーフェスベースのリファインメント ===
曲率ベースのリファインメントは、実際の(三角形分割された)サーフェスを問い合わせるために拡張されました。下図では、典型的なサーフェスが、測定された曲率(青、白、赤のスケール)と45度の特徴角(緑)で色分けされて表示されています。
曲率は、surfaceFeatureExtractアプリケーションの入力辞書にエントリを含めることによって書き込むことができる。
<code>// Output surface curvature
curvature true;
// Write closeness/curvature/proximity fields as VTK for postprocessing
writeVTK            yes;</code>
これは入力ジオメトリと曲率フィールドを含む.vtpファイルを書き込みます。snappyHexMeshのアルゴリズムはサーフェス上の各三角形に必要なリファインメントレベルを事前に計算し、キャスタレーション中にリファインメントのトリガーとしてその情報を使用します。この動作はresolveFeatureAngleパラメータと新しいオプションのcurvatureLevelパラメータで制御されます。
<code>// Additional refinement for regions of high curvature. Expressed
// (bit similar to gapLevel) as:
// - number of cells per radius of curvature. (usually a few is
//  good enough)
// - starting cell level? Not used at the moment.
// - maximum cell level. This can be smaller or larger than the
//  max 'surface' level
// - minimum curvature radius to ignore (expressed as a cell level).
//  This can be used to avoid detecting small sharp surface
//  features. Set to -1 to ignore.
//
curvatureLevel (10 0 10 -1);</code>
手順が構成されています。
* 曲率を計算する
* resolveFeatureAngle よりも鋭い角度を持つエッジ上のポイントをマークしない(これらはフィーチャーエッジスナップで解決されます)。
* 曲率と指定したセル数/半径を、必要な精細度に変換する。
* 指定された最大絞り込みレベルまでクリップする
* サーフェスに保存し、後続のリファインメントで使用されるようにする。
上に示したサーフェスのメッシュの例(1つの初期セルから開始)。
これは、表面の(緩やかな)湾曲がさらなるリファインを引き起こす、前面の正しい動作を示しています。しかし、表面の反対側では、鋭角(約20度)に起因する不要なリファインメントが明らかである。ここでは、「最小曲率半径」が有効であると考えられるが、適切な値を決定することは自明でない。
=== 追加テスト ===
曲率精密化を特定の領域に限定することは有益な場合があります。1つの方法は、例えばsurfaceSubsetやsubTriSurfaceMeshサーフェイスを使用して、サーフェイスの一部を抽出することです。もう一つはsnappyHexMeshの中のlimitRegions機能を使うことです。
<code>limitRegions
{
    box_limit    // geometry defining region without explicit refinement
    {
        // Don't refine at all inside 'box_limit'
        mode        inside;
        levels      ((10000 0));
    }
}</code>
チュートリアル mesh/snappyHexMesh/block_with_curvature では、曲率細分化をボックスの外側に限定するために使用されています(黒い線で表示)。
2:1制約による絞り込みの「にじみ」に注意。
== setFieldsの改良 ==
setFields ユーティリティが拡張され、有限領域がサポートされるようになりました。入力の例です。
<code>defaultFieldValues
(
    areaScalarFieldValue h 0.00014
);
regions
(
    clipPlaneToFace
    {
        point  (0 0 0);
        normal (1 0 0);
        fieldValues
        (
            areaScalarFieldValue h 0.00015
        );
    }
);</code>
必要であれば、コマンドラインオプションで一時的に処理を抑制することも可能です。
<code>setFields -no-finite-area</code>
Tutorial
* $FOAM_TUTORIALS/finiteArea/liquidFilmFoam/cylinder
== 新しいクリッププレーンのトポセット ==
clipPlaneトポセットclipPlaneToCell、clipPlaneToFace、clipPlaneToPointは、領域を選択するのに便利な手段です。例えば
<code>clipPlaneToFace
{
    point  (0 0 0);
    normal (1 0 0);
}</code>
は、半無限バウンディングボックスを定義するよりも簡単です(以前は唯一の可能性でした)。
<code>boxToFace
{
    min  (0  -1e6 -1e6);
    max  (1e6 1e6 1e6);
}</code>
Tutorial
* $FOAM_TUTORIALS/finiteArea/liquidFilmFoam/cylinder