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

編集の要約なし
 
1,155行目: 1,155行目:


* <code>MR!579</code>
* <code>MR!579</code>
= v2212: 境界条件の追加と更新 =
== 新しい吸着条件 ==
新しい sorptionWallFunction 壁面境界条件は、乱流および層流のスカラー/濃度勾配を指定するために採用することができます。
この境界条件の最小限の例を以下に示す。
<code><patchName>
{
    // Mandatory entries
    type            sorptionWallFunction;
    Sc              <scalar>;
    Sct            <scalar>;
    kAbs            <PatchFunction1<scalar>>;
    // Optional entries
    laminar        <bool>;
    D              <scalar>;
    kName          <word>;
    nuName          <word>;
    // Inherited entries
    Cmu            <scalar>;
    kappa          <scalar>;
    E              <scalar>;
    blending        <word>;
        // Blending options
        // Stepwise (discontinuous) (Foat (2021) - (Eq. 5.3)​)
        // Exponential (smooth) (Foat et al. (2022) - (Eqs. 1-6)​)
        // Binomial (smooth)​
        // Tanh (smooth)​
        // Max (discontinuous)
    ...
}</code>
Source code
* $FOAM_SRC/thermoTools/derivedFvPatchFields/wallFunctions/sorptionWallFunction
References
* 指数関数的なブレンドの標準モデル。
** Foat, T., Drodge, J., Charleson, A., Whatmore, B., Pownall, S., Glover, P., ... & Marr, A. (2022). Predicting vapour transport from semi-volatile organic compounds concealed within permeable packaging. International Journal of Heat and Mass Transfer, 183, 122012. DOI:10.1016/j.ijheatmasstransfer.2021.122012
* ステップワイズブレンディングの標準モデル。
** Foat, T. (2021). Modelling vapour transport in indoor environments for improved detection of explosives using dogs. Doctoral dissertation. University of Southampton. URI:<nowiki>http://eprints.soton.ac.uk/id/eprint/456709</nowiki>
Merge request
* MR!559
= v2212:ポストプロセッシングの新機能と改良点 =
== 新型EnSightメッシュリーダー ==
EnSight Gold メッシュのインポートが ascii およびバイナリ フォーマットでサポートされるようになりました(ファイルの拡張子は '.geo')。インポータは、foamToEnsight コンバータでサポートされているすべてのセル形状を受け入れることができます。サポートされているキーワードは次のとおりです。
* extents
* node id 'given', 'ignore', 'assign'
* node_ids
* element id 'given', 'ignore', 'assign'
* element_ids
* part
* coordinates
* tetra4
* pyramid5
* penta6
* hexa8
* nfaced
* tria3
* quad4
* nsided
ただし、以下のものはサポート対象外です。
* 2D (finite-area) meshes
* block structured meshes
* quadratic elements, e.g. twenty node hexahedron
* faceZones
* baffles
インポーターはすべての部品を読み込み、すべてのセル(tetra3、hexa8 など)を結合し、外側の面を決定します。すべての点は幾何テスト(下記参照)を使ってマージされ、インポーターはすべての面(tria3など)を使って外側の面をパッチします。パッチ名は元の部品名と同じで、不正な単語記号はアンダースコア('_')に置き換えられます。残った外側の面は defaultFaces パッチに追加され、タイプは空になります。
=== オプション ===
* mergeTol: 異なるパーツのポイント間の対応を得るためのオプションのマージ許容値。デフォルトは、すべての点のバウンディングボックスの1e-10です。0を指定すると、点のマージは一切行われません(したがって、パッチングも行われません)。
* scale: 座標に対するオプションのスケーリング。デフォルトはスケーリングなし。スケーリングは、例えば[mm]から[m]への単位変換に便利です。
* keepHandedness: デフォルトでは、メッシュリーダーは負の体積を持つ(非多面体の)セルを反転させます。これは、'zero or negative pyramid volume' という形式の警告メッセージを表示します。このフラグはこのチェックを無効にし、通常の頂点番号付けを使用します。
Source code
* $FOAM_UTILITIES/mesh/conversion/ensightToFoam
== EnSight出力の改善 ==
ファイル名や変数名の取り扱いをより一貫したものに
* 不正で読みにくい名前を避けるため、例えば出力フィールド名PaSR<psiReactionThermo>:QdotはPaSR_psiReactionThermo_Qdotとしてサニタイズされるようになりました。
EnSightの出力を書き込む際に、アトミックファイルオペレーションを使用するようになりました。
* 出力は、すべての書き込みが完了した後、単一の操作としてディスクにコミットされるようになりました。失敗の場合、不完全なファイルや部分的なファイルを避けることができますが、一般的な場合、シミュレーションによって生成されたままのEnSight出力をロードする際の問題も避けることができます。
並列処理性能の向上
* EnSight書き込みルーチンが、1000以上のランクなど、より大きなプロセッサーカウントでのパフォーマンスを向上させるために作り直されました。この変更はスパース性に大きく関係しているため、プロセッサ数が少ない場合には、改善はあまり顕著ではありません。次のグラフは、4096コアで動作する60Mセルのケースで、130フィールドを書き込む場合の性能比較を示しています。
== ensightWrite、vtkWrite関数オブジェクトを改良しました。 ==
ensightWriteとvtkWrite関数オブジェクトがフィールドとパッチの除外をサポートするようになりました。これにより、特に可視化する必要のない外壁、入口/出口などのパッチがブロックされ、foamToEnsightおよびfoamToVTKスタンドアロンアプリケーションと機能がより一致するようになりました。
== サーフェスライターの改善 ==
=== New options ===
* boundaryData writerの出力にFace領域正規値を含めることができるようになり、抽出したデータの後処理を追加でサポートします。
* すべてのサンプリングされたサーフェスは、任意のデカルト座標変換もサポートするようになりました(例)。
<code>formatOptions
{
    vtk
    {
        scale 1000;  // m -> mm
        transform
        {
            // origin  (0 0 0);
            rotationCentre  (1 0 0);
            rotation axisAngle;
            axis    (0 0 1);
            angle  -45;
        }
    }
}</code>
この例で示すように、rotationCentreを指定して、サーフェスをインプレースで回転させることも可能です。この追加トランスフォームにより、通常異なる座標系位置で記述されるコンポーネントサブアセンブリにシミュレーションデータをマッピングすることができます。rotationCentreはtransformPointsやsurfaceTransformPointsの「-centre」オプションと同様に動作し、点の位置から指定量を削除して回転を適用し、最後に新しく回転した点の位置に指定量を追加し直します。
=== Improved parallel performance ===
マージされたフィールドのプロセス間通信は、MPIスケジュール通信を使用するようになりましたが、ユーザーが選択することが可能です。サーフェスマージ情報はフィールドマージに再利用され、毎回サイズを収集するためのMPIコールが追加されるのを回避できます。これらの変更は、表面サンプリングが非常に頻繁に、例えば、毎反復、大きなコアカウントで実行されない限り、顕著ではありません。
== ノイズユーティリティの改善 ==
ノイズユーティリティによって生成されたテキストファイルは、以前の「グラフ」形式から、表面積平均値のヘッダーなど、追加のケース情報を含むより説明的なテキスト形式へと更新されました。
<code># f [Hz] vs P(f) [Pa]                                                           
# Lower frequency: 2.50000000e+01                                               
# Upper frequency: 5.00000000e+01                                               
# Window model  : Hanning                                                       
# Window number : 7                                                             
# Window samples: 128                                                           
# Window overlap %: 5.00000000e+01                                             
# dBRef        : 2.00000000e-05                                               
# Area average  : true                                                         
# Area sum      : 8.99999982e-02                                               
# Number of faces: 400                                                         
# f                P(f)
...</code>
Tutorial
* $FOAM_TUTORIALS/incompressible/pimpleFoam/LES/vortexShed
Merge request
* MR!562
== 新しい乱流解像度品質評価 ==
陰解法LES/DESのグリッド独立性の検討とグリッド適応は、空間分解能とサブグリッドスケールモデリングの固有の結合のため、非自明で難解である。
LES/DES計算のメッシュ要件を評価できるように、新しいresolutionIndex関数オブジェクトは、以下のサブモデルを提供し、単一メッシュの解像度インデックスを提供します。
* 乱流運動エネルギー変数を用いたPope(2000)の指標。
* を用いたCelikら(2005)、Celikら(2009)の指標を使用。
** 実効コルモゴロフ長尺と
** vv
以下に最小限の例を示す。
<code>resolutionIndex1
{
    // Mandatory entries
    type            resolutionIndex;
    libs            (fieldFunctionObjects);
    model          <word>;
    // Conditional entries
        // Option-1: when model == PopeIndex
        // Option-2: when model == CelikNuIndex
        // Option-3: when model == CelikEtaIndex
    // Inherited entries
    ...
}</code>
下図は、Smagorinskyベースのラージ・エディ・シミュレーションと、粗解像度および微解像度における解像度-インデックス・フィールドを示したものである。
Source code
* $FOAM_SRC/functionObjects/field/resolutionIndex
References
* Pope, S. B. (2000). Turbulent flows. Cambridge, UK: Cambridge Univ. Press
* Celik, I. B., Cehreli Z. N., Yavuz I. (2005). Index of resolution quality for large eddy simulations. Journal of Fluids Engineering. 127:949–958.
* Celik, I., Klein, M., & Janicka, J. (2009). Assessment measures for engineering LES applications. Journal of fluids engineering, 131(3)
Attribution
OpenCFD would like to acknowledge and thank Prof. Ismail Celik for his contributions, elaborate suggestions and help, and critical recommendations.
Merge request
* MR!569
== ヒストグラム生成の改良 ==
ヒストグラム関数オブジェクトがリファクタリングされ、2つの新しいサブモデルを含むように拡張されました。
* equalBinWidth: データを同じ幅のビンにグループ化する(以前の動作)
* unequalBinWidth: データを不均等な幅のビンにグループ化します。
以前のタイムステップごとのファイルに基づく出力は、単一のファイルに置き換えられました。
<code>histogram1
{
    type                    histogram;
    // Option-1
    model                  equalBinWidth;
    // Option-2
    model                  unequalBinWidth;
    ...</code>
Source code
* $FOAM_SRC/functionObjects/field/histogram
Tutorial
* $FOAM_TUTORIALS/incompressible/pisoFoam/RAS/cavity
Merge request
* MR!563
== 熱伝達率向上機能オブジェクト ==
HeatTransferCoeff関数オブジェクトがリファクタリングされ、新しいサブモデルであるfaceZoneReferenceTemperatureが導入されました。このサブモデルは、指定されたフェイスゾーンの面積平均温度を参照温度として、熱伝達率を評価します。以下に最小限の使用例を示します。
<code>heatTransferCoeff1
{
    // Inherited entries
    ...
    // Mandatory entries
    htcModel            faceZoneReferenceTemperature;
    referenceFaceZone  <word>;
    // Optional entries
    referenceRegion    <word>;</code>
Source code
* $FOAM_SRC/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/faceZoneReferenceTemperature
Merge request
* MR!561
== fvOption出力の改善 ==
以下のfvOptionsがファイルへの書き込みをサポートするようになりました。
* velocityDampingConstraint
* limitTemperature
* limitVelocity
書き込みは、以下のような新しいwriteToFileオプションで制御します。
<code>limitVelocity1
{
    type                    limitVelocity;
    ...
    // writeFile entries
    writeToFile            true;</code>
各オプションで生成される出力ファイルの構造を示す例を以下に示す。
velocityDampingConstraint:
<code><case>/postProcessing/<dictionary_name>/<nowiki><time>/velocityDampingConstraint.dat</nowiki>
# UMax          : 10
# Time              nDamped_[count]    nDamped_[%]</code>
limitTemperature:
<code><case>/postProcessing/<dictionary_name>/<nowiki><time>/limitTemperature.dat</nowiki>
# Tmin          : 280
# Tmax          : 310
# Time              nDampedCellsMin_[count] nDampedCellsMin_[%] nDampedCellsMax_[count] nDampedCellsMax_[%]</code>
limitVelocity:
<code><case>/postProcessing/<dictionary_name>/<nowiki><time>/limitVelocity.dat</nowiki>
# UMax          : 10
# Time            nDampedCells_[count]    nDampedCells_[%]    nDampedFaces_[count]    nDampedFaces_[%]</code>
Source code
* $FOAM_SRC/fvOptions/corrections/limitVelocity
* $FOAM_SRC/fvOptions/corrections/limitTemperature
* $FOAM_SRC/fvOptions/constraints/derived/velocityDampingConstraint
Merge request
* MR!577
== turbulenceFields関数オブジェクトの改良 ==
turbulenceFields 関数オブジェクトは、乱流モデルで作成および/または使用される、以下のフィールドへのアクセスを提供します。
* k: 乱流運動エネルギー
* epsilon: 乱流運動エネルギー散逸率
* ω:比誘電率
* nuTilda: 修正乱流粘性率 (Spalart-Allmaras turbulence model)
* mut, nut: 乱流粘性(動的、運動論的)。
* muEff, nuEff: 有効乱流粘性率(動的、運動論的).
* alphat: 乱流熱拡散率
* αEff: 有効乱流熱拡散率
* R: レイノルズ応力テンソル
* DevRhoReff, DevReff: 有効レイノルズ応力の偏差部分 (圧縮性、非圧縮性)
* L: 積分長/混合長販売
* I: 乱流強度
* LESRegion: DESモデルLES地域表示フィールド
* fd: DESモデル遮蔽機能
ここで、LESregionとfdオプションが最新リリースに追加されました。vortexShedのケースからの使用例を以下に示します。
<code>turbulenceFields1
{
    type            turbulenceFields;
    libs            (fieldFunctionObjects);
    writeControl    writeTime;
    fields          (fd LESRegion);
}</code>
Tutorials
* $FOAM_TUTORIALS/incompressible/pimpleFoam/LES/vortexShed/system/controlDict
Source code
* $FOAM_SRC/functionObjects/field/turbulenceFields
= v2212:並列動作の改善 =
== GAMGアグロメレーションのための新しいマルチマスタープロセッサのサポート ==
GAMG線形ソルバーは、masterCoarsestプロセッサ・アグロメレーター・メソッドを使用した、最も粗いレベルでのプロセッサ・アグロメレーションをサポートしています。これにより、通信がなくなり、暗黙性が高まりますが、最粗レベルのサイズが大きくなるため、コア数が多い場合には性能が低下します。
=== 複数のマスタープロセッサーに対応するmasterCoarsestを拡張。 ===
次の表は、マスター・プロセッサの数を変化させたときのタイミング結果です。ここでは、1728プロセッサを担当するマスター1台からスタートし、36プロセッサを担当するマスターを48台まで増やした場合の結果を示しています。
{| class="wikitable"
!Coarsest level procs
!run1 (s)
!run2 (s)
|-
|1 (1728)
|193
|219
|-
|2 (864)
|141
|156
|-
|-
|4 (432)
|167
|126
|-
|-
|8 (216)
|135
|114
|-
|-
|16 (108)
|140
|126
|-
|-
|48 (36)
|247
| -
|}
Run 2では、複数のマスタープロセッサーを使用した場合に、強い効果が得られることが示されました。結果は、クラスタ構成や、ローカル計算と通信/明示のコストバランスに敏感であることに注意してください。
上記のテストは、複雑な辞書スクリプトを使用して、手動でプロセッサをアグロメレートして実行されていました。v2212では、これは新しいnMastersまたはnProcessorsPerMasterキーワードを使用して、masterCoarsestプロセッサのアグロメレーションに統合されました。
<code>{
    solver          GAMG;
    ..
    processorAgglomerator  masterCoarsest;
    nCellsInCoarsestLevel  1;
    nMasters                2;
}</code>
system/controlDictのデバッグスイッチで
<code>DebugSwitches
{
    // Print number of processors per master
    masterCoarsest      1;
    // Print agglomeration
    GAMGAgglomeration  1;
}</code>
17台のプロセッサに分割した簡単なケースで、プロセッサアグロメレーションを使用した場合の効果を見ることができます。
<code>masterCoarsest : agglomerating
    master  procs
    0      9 (1 2 3 4 5 6 7 8)
    9      8 (10 11 12 13 14 15 16)
GAMGAgglomeration:
    local agglomerator    : faceAreaPair
    processor agglomerator : masterCoarsest
                              nCells      nFaces/nCells        nInterfaces    nIntFaces/nCells    profile
    Level  nProcs        avg    max        avg    max        avg    max        avg    max        avg
    -----  ------        ---    ---        ---    ---        ---    ---        ---    ---        ---
        0      17        719    725      1.922  1.926      3.529      5      0.1093  0.1335  1.797e+04
        1      17        359    362      1.966  2.109      3.529      5      0.1864  0.2632        7291
        2      17        176    181      2.352  2.769      3.529      5      0.272  0.436        2810
        3      17          86      90      2.344  2.593      3.529      5      0.4415  0.7738      930.4
        4      17          42      44      2.291  2.442      3.529      5      0.6747    1.22      320.9
        5      17          20      22      2.094  2.286      3.529      5      0.967  1.895      98.41
        6      17          9      11      1.741      2      3.529      5        1.35  2.444          29
        7      17          4      5      1.149    1.6      3.529      5      2.082    3.5          6
        8      2          15      18      1.585  1.615          1      1      0.5962  0.6923          40
        9      2          8      9      1.417    1.5          1      1      0.7083    0.75          15</code>
Tutorials
* $FOAM_TUTORIALS/compressible/rhoSimpleFoam/squareBendLiq (use of masterCoarsest)
Source code
* $FOAM_SRC/OpenFOAM/matrices/lduMatrix/solvers/GAMG/GAMGProcAgglomerations/masterCoarsestGAMGProcAgglomeration
== 有限領域メッシュ作成の改良 ==
makeFaMeshユーティリティによる有限面積メッシュの並列作成がより堅牢になりました。変更点は以下の通りです。
* 等価な有限領域マッピングを作成する前に、ボリューム faceProcAddressing の存在を確認すること。
* 分散ファイルルートによるフィールドの分解をサポート。
= v2212:使い勝手を改善しました。 =
== makeとコンパイルの改善 ==
ビルドシステムには、以下のような複数のメンテナンスアップデートが適用されています。
* 生産終了アーキテクチャのメイクルール削除
* 富士通ARMのfast-mathとunsafe-mathの最適化の削除、および
* wmake -debug の追加制御
openmpのコンパイルサポートを改善しました。
また、WM_COMPILE_CONTROL変数に対応するエントリーを追加することで、openmpの使用をグローバルに有効/無効にすることができるようになりました。
<code>WM_COMPILE_CONTROL="+openmp" # with openmp enabled
WM_COMPILE_CONTROL="~openmp" # with openmp disabled</code>
両方指定した場合は、~openmp の無効化が優先されます。単発で使用する場合は、対応する wmake オプションで代用できます。
<code>wmake -openmp # with openmp enabled
wmake -no-openmp # with openmp disabled</code>
これは、openmp サポートの有無にかかわらず、コンパイル時に役立ちます。
ccacheのラッピングに対応
ccache コンパイラ・キャッシュを使用すると、再コンパイルを高速化することができます。WM_COMPILE_CONTROL に追加することで、簡単に選択することができます。
<code>WM_COMPILE_CONTROL="+ccache"</code>
同じメカニズムで、コードインスツルメンテーションを追加することもできる。この場合、長い形式は WM_COMPILE_CONTROL で指定される。
<code>WM_COMPILE_CONTROL="ccache='/path/my-tooling --option'"</code>
wmakeの追加コントロール
コントロールの全リストは、以下を使用して入手できます。
<code>wmake -help-full</code>
特に注目すべきは、完全なデバッグチェックによるコンパイル(例:アウトオブバウンド、最適化なし
<code>wmake -debug-O0</code>
これらのオプションは、例えば12コアを使用してコンパイルする場合など、通常のオプションと組み合わせることができます。
<code>wmake -debug-O0 -j 12</code>