OpenFOAM v2412 リリースノート
ESI OpenCFD Release OpenFOAM® v2412
OpenCFDは、OpenFOAM® v2412の2024年12月リリースを発表いたします。 このリリースは、コードの多くの領域にわたってOpenFOAM-v2406の機能を拡張しています。 この新機能は、OpenCFDの顧客からのスポンサーによる開発、内部資金による開発、OpenFOAMコミュニティからの機能や変更の統合を表しています。
OpenFOAMはOpenCFDによってGPLライセンスの下で配布されています。 様々なLinuxや他のPOSIXシステムでのコンパイルに適したソースコードパッケージに加え、このリリースにはコンパイル済みのバイナリパッケージもあります。
- Ubuntu Linux: Ubuntu 用パッケージインストール (近日公開予定)
- openSUSE Linux: パッケージインストール (近日公開予定)
- Redhat Linux variants: パッケージインストール (近日公開予定)
- apptainer イメージ: dockerhub から入手可能 (近日公開予定)
Windowsユーザーには、コンパイル済みパッケージについて3つの選択肢がある(詳細):
- Linux用Windowsサブシステムの使用(Ubuntu、openSUSEなどがベース)
- クロスコンパイルによるネイティブ実行可能ファイル
- ドッカーのインストール
OpenFOAMのapptainerサポートは、事前に組み立てられたイメージではなく、記述ファイルによって提供されます:
- パッケージ/コンテナを確認する
Mac OSXユーザーには、ソースからコンパイルするか、コンパイル済みパッケージのDockerコンテナを使用するオプションがある(詳細はこちら)。
アップグレード
- ユーザー向けのヘルプは、ユーザー・アップグレード・ガイドに記載されています。
- 開発者向けのヘルプは、開発者向けアップグレードガイドに記載されています。
前処理
createPatchユーティリティの改良
createPatchユーティリティが拡張され、例えばcyclicACMIの作成時に重複した境界面を作成できるようになりました。 これは、外部生成メッシュ間のcyclicACMI接続を作成するために使用できます。
system/createPatchDictのサンプル:
// Patches to create.
patches
(
{
//- Master side patch
name central_inlet_couple;
patchInfo
{
type cyclicACMI;
nonOverlapPatch central_inlet_blockage;
neighbourPatch inlet_central_couple;
}
constructFrom patches;
patches (central_inlet);
}
{
//- Blockage
name central_inlet_blockage;
patchInfo
{
type wall;
}
constructFrom patches;
patches (central_inlet);
}
{
//- Slave side patch
name inlet_central_couple;
patchInfo
{
type cyclicACMI;
nonOverlapPatch inlet_central_blockage;
neighbourPatch central_inlet_couple;
}
constructFrom patches;
patches (inlet_couple);
}
{
//- Blockage
name inlet_central_blockage;
patchInfo
{
type wall;
}
constructFrom patches;
patches (inlet_couple);
}
);
注意:createPatchを実行する前に、作成するcyclicACMIパッチが存在してはならない。
チュートリアル
- $FOAM_TUTORIALS/mesh/createPatch/TJunctionSwitching_createPatch
ソースコード
- $FOAM_SRC/utilities/mesh/manipulation/createPatch
- $FOAM_SRC/utilities/mesh/manipulation/mergeMeshes
リクエストのマージ
- Merge request #702
snappyHexMeshの改良:スナップの前にレイヤーをバッファリングする。
スナップ前にメッシュにバッファレイヤーを追加できるようになり、スナップアルゴリズムをユーザーが選択できるようになりました。
snappyHexMeshDictの新しいトップレベル・エントリーを使用して、バッファー・レイヤーの追加とメッシュ・モーション機能の使用を選択できるようになりました:
// Type of mesh generation:
// - castellated (default)
// - castellatedBufferLayer
type castellatedBufferLayer;
バッファ層の追加はすべてのメッシュ化されたパッチに適用されます。オプションで、addBufferLayersキーワードを使用してサーフェスごとにオーバーライドできます:
refinementSurfaces
{
sphere
{
// Surface-wise min and max refinement level
level (1 1);
// Disable buffer layers
addBufferLayers false;
}
}
スナップ時に使用するメッシュ・モーション・ソルバの選択:
snapControls
{
..
solver displacementPointSmoothing;
displacementPointSmoothingCoeffs
{
// Use laplacian to untangle problem areas
pointSmoother laplacian;
nPointSmootherIter 10;
}
下の画像は、回転したボックスの外側に追加されたバッファー・セルの単層で、セルはセル・インデックスに従って色分けされている:
2つ目の例は、バッファレイヤーを追加することで、内側と外側の両方の領域を維持しながら、フェイスゾーンにスナップするのに役立つことを示しています。 ここでは、セルは非直交性に従って色付けされている:
バッファレイヤーは(まだ)フィーチャーのエッジを考慮していないことに注意してください。
チュートリアル
- $FOAM_TUTORIALS/mesh/snappyHexMesh/rotated_block Meshing the outside of a rotated cube.
- $FOAM_TUTORIALS/mesh/snappyHexMesh/sphere_multiRegion Meshing the inside and outside of a sphere.
ソースコード
- $FOAM_SRC/utilities/mesh/generation/snappyHexMesh
リクエストのマージ
- Merge request #715
境界条件
pointMeshの境界処理の改善
pointMeshはパッチのリスト(オプション)を持つようになった。 通常の動作は、pointMeshはボリュームの'poly'メッシュと同じパッチのセットを使い、'poly'パッチのポイントで操作します。
ポイントパッチ条件をpolyMesh/pointMesh/boundaryファイルで指定できるようになり、フィーチャーのエッジ、ポイント、内部ポイントにも制約を適用できるようになりました。
チュートリアルのmesh/blockMesh/sphere7は、これを使用して球状のブロックメッシュを立方体に戻す方法を示しています。
このチュートリアルでは、プラグインのポイントスムーサーを使う、新しいdisplacementPointSmoothingモーションソルバーの使用例も紹介します:
- laplacian : 近隣点の平均位置
- geometricElementTransform : 最も直交する形状に移動する。
注
- 点の移動中に点法線が更新されない
- ポイントモーションでは、周期的なパッチは現在正しく処理されていません。
- これらの追加pointPatchは以下によってサポートされる:
- moveDynamicMesh, subsetMesh
- decomposePar, reconstructPar, redistributePar
- some mesh motion solvers
チュートリアル
- $FOAM_TUTORIALS/mesh/blockMesh/pipe
- $FOAM_TUTORIALS/mesh/blockMesh/sphere7
- $FOAM_TUTORIALS/mesh/moveDynamicMesh/badMove
- $FOAM_TUTORIALS/mesh/moveDynamicMesh/bendJunction
- $FOAM_TUTORIALS/mesh/moveDynamicMesh/faceZoneBlock
ソースコード
- $FOAM_SRC/OpenFOAM/meshes/pointMesh/pointBoundaryMesh/pointBoundaryMesh.C
リクエストのマージ
- Merge request #715
新しいポイントパッチ機能
- topoSet に patchToPoint が追加されました : pointPatch のすべての点を選択します (patchToFace と faceToPoint を使って polyPatch の点を取得します)。
- 新しい点境界条件:edgeSlipとpointAttraction(新しいpointMesh境界条件のチュートリアルで使用されます。)
- symmetryPolyPatch : 平均方位を計算する際に、ゼロサイズの面を無視する。 これは、後の押し出しのために厚さゼロのレイヤーを追加できるようにするための便利な機能です。
数値
新しい融合離散化
新しい融合離散化手法は、中間補間ステップを回避し、面ベースの積分と融合する。 機能は通常の離散化と同等です:
- gradSchemes : fusedGauss
- divSchemes : fusedGauss
- laplacianSchemes : fusedGauss, fusedLeastSquares
これらの方式はメモリ操作を回避するため、パッチ数が多い場合や、GPUがCPUのデータにアクセスするなど、メモリアクセスが遅いノードに有利である。 logs-gauss'がデフォルトの動作、'logs-fused'がドロップイン置換融合スキームを示しています:
これは予備的な作業であり、明示的な操作しか考慮していないこと、また操作の順序が異なるために切り捨て誤差が異なることに注意されたい。
チュートリアル
- $FOAM_TUTORIALS/ncompressible/simpleFoam/pitzDaily_fused
ソースコード
- $FOAM_SRC/src/fusedDiscretisation
リクエストのマージ
- MR!712
新しいGAMGアグロメレーション・キャッシング
メッシュを動かすケースでは、時間ステップごとに(あるいは圧力補正ごとに)自動的に凝集を再構築します。 しかし、ほとんどのメッシュモーションのケースでは、GAMGアグロメレーションテーブルは、再作成が必要になる前に、いくつかの反復のために保持することができます。 ソリッドボディモーションの場合、凝集ロジックは行列係数にのみ依存するため、テーブルを更新する必要はありません。 キャッシュは新しい updateInterval エントリで有効になります。 これは、ソリッドボディシミュレーションでは非常に大きな数値になります。一般的なメッシュモーションでは、予想されるメッシュクーラント数に基づいて設定する必要があります。
p
{
solver GAMG;
..
cacheAgglomeration yes;
updateInterval 100000;
}
凝集に関する詳細なフィードバックを得るには、system/controlDictのデバッグ・スイッチを有効にしてください。
DebugSwitches
{
// Print agglomeration
GAMGAgglomeration 1;
}
faceAreaWeightの最適化
デフォルトの凝集法は、セルを結ぶ面重みの大きさに基づく「セル」の一対一の組み合わせを採用している。 現在、これは軸合わせされたメッシュ上の凝集境界のジッターを避けるために摂動された面面積ベクトルから派生した面重みを使用しています。
updateIntervalが1でない場合は、ガウシアンタイプの離散化との整合性を高めるために、スケーリングされていない、摂動されていない顔の面積の大きさを用いて重みが計算される。 例えば、simpleFoamを10回繰り返したincompressible/pisoFoam/SLES/motorBikeのチュートリアルでは、平均約10%のサイクル削減を示しました:
代数的凝集はupdateIntervalで実行できることに注意。
- それはcyclicA(C)MIを更新せず、粗いレベルでは古いステンシルを使用するため、補間に失敗する。
- それは、シミュレーション中に変化する行列係数に基づいているため、固体の運動中であっても一定ではない。
チュートリアル
- $FOAM_TUTORIALS/incompressible/pimpleFoam/RAS/propeller
ソースコード
- $FOAM_SRC/finiteVolume/fvMatrices/solvers/GAMGSymSolver/GAMGAgglomerations/faceAreaPairGAMGAgglomeration
リクエストのマージ
- Merge request #707
lduMatrix, lduAddressingの改善
スカラー行列クラス lduMatrix が拡張され、セルベースのアルゴリズムがより使いやすくなりました。 アドレス指定 lduAddressing には、下位アドレス指定を返す lowerCSRAddr アクセサが追加され、loSortAddressing を使った追加的なインダイレクトを避けることができます:
const labelUList& lduAddressing::lowerCSRAddr() const
これは、lowerAddr()アドレッシングからオンザフライで構築される。
さらに、この行列には、対応する lower() 係数の並べ替えを返す lowerCSR() アクセサが追加された:
const scalarField& lduMatrix::lowerCSR() const
アドレス指定が可能かどうかは、hasLowerCSR()関数で確認できる。
使用例は lduMatrix::Amul ルーチンの中にあります:
if (hasLowerCSR())
{
// Note: lowerCSR constructed from lower if available, upper otherwise
// so is handling symmetric()
const scalar* const __restrict__ lowercsrPtr = lowerCSR().begin();
for (label cell=0; cell<nCells; cell++)
{
scalar& val = ApsiPtr[cell];
val = diagPtr[cell]*psiPtr[cell];
// Add lower contributions
{
const label start = loStartPtr[cell];
const label end = loStartPtr[cell+1];
for (label i = start; i < end; i++)
{
const label nbrCell = lcsrPtr[i];
val += lowercsrPtr[i]*psiPtr[nbrCell];
}
}
// Add upper contributions
{
const label start = oStartPtr[cell];
const label end = oStartPtr[cell+1];
for (label i = start; i < end; i++)
{
const label nbrCell = uPtr[i];
val += upperPtr[i]*psiPtr[nbrCell];
}
}
}
}
ソースコード
- $FOAM_SRC/OpenFOAM/matrices/lduMatrix/lduAddressing/lduAddressing.H
- $FOAM_SRC/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrix.H
- $FOAM_SRC/OpenFOAM/matrices/lduMatrix/lduMatrix/lduMatrixATmul.C
壁との距離の改善
乱流壁関数などで使用されている壁面近傍距離フィールドが壁面に対して更新され、複数の壁面パッチに面を持つセルの挙動が変更されました。 最近接距離は、セル中心から局所的な壁面、または任意の局所的なエッジまたは点に接続された面までの最小距離として計算されます。
- これは並列一貫性がない
- これは一面しか見ない
より一貫した挙動を得るためには、正確な壁面距離法を採用すべきである。
以前の動作(OpenFOAM v2406 以前)は、etc/controlDict またはローカルの system/controlDict の useCombinedWallPatch 情報スイッチを無効にすることで得られます:
OptimisationSwitches
{
useCombinedWallPatch 0;
}
ソースコード
- $FOAM_SRC/meshTools/cellDist/cellDistFuncs.C
- $FOAM_SRC/finiteVolume/fvMesh/wallDist/nearWallDist/nearWallDist.C
- $FOAM_SRC/finiteVolume/fvMesh/wallDist/wallDistAddressing/wallDistAddressing.C
- $FOAM_SRC/meshTools/cellDist/patchWave/patchDataWave.C
- $FOAM_SRC/meshTools/cellDist/patchWave/patchWave.C
リクエストのマージ
- Merge request #700
問題
- Issue #3215
地域貢献: アドジョイント最適化の改善
OpenFOAM v2412では、アジョイント・ライブラリにいくつかの機能変更が加えられました。 トポロジー最適化の設計変数の初期値を0/alphaフィールドから読み込めるようになり、topoSet/setFieldsユーティリティで簡単に設定できるようになりました。 以前は、0/uniform/topOVarsを通してのみ可能でしたが、これは操作が難しくなっています。
ISQPの数学的最適化問題に追加され、実現可能性を保証するためにMMAに追加された項の乗数('c'と命名)は、関数1で与えられるようになり、最適化ループ全体で操作できるようになりました。 典型的な例としては、実現可能性よりも最適性を重視するために、最初の数サイクルの最適化では小さな値に設定し、徐々に大きくしていきます。
ISQPで近似ヘシアンの減衰を無効にするオプションを追加。 一般的なケースでは、これは避けるべきですが、いくつかのフリンジケースではアルゴリズムを加速させることができます。
チュートリアル
- $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/topologyOptimisation/monoFluidAero/laminar/1_Inlet_2_Outlet/porosityBased/R_10x-init
ソースコード
- $FOAM_SRC/optimisation/adjointOptimisation
リクエストのマージ
- Merge request #710
新ゾーンブレンド・スキーム
新しいzoneBlendedスキームにより、ユーザーはフェイスゾーンごとに差分スキームを適用できる。 スキームは辞書形式で設定される:
divSchemes
{
.
.
div(phi,U) Gauss zoneBlended
{
default defaultScheme;
faceZone1 scheme1;
faceZone2 scheme2;
...
faceZoneN schemeN;
}
.
.
}
デフォルトのエントリーは背景スキームを指定します。追加のスキームをフェイスゾーンごとに設定できます。例えば、スキーム1はフェイスゾーン1に適用され、スキーム2はフェイスゾーン2に適用されます。
ソースコード
- $FOAM_SRC/finiteVolume/interpolation/surfaceInterpolation/schemes/zoneBlended
ソルバーと物理モデル
地域貢献: SA-DDES乱流モデルの遮蔽機能の改善
DDES(Delayed Detached-Eddy Simulation)モデル[1]は、RANS/LESのハイブリッドアプローチであり、RANSによってすべての付着境界層をモデル化し、LESによって大きく分離した流れ領域をモデル化することを目的としています。 付着境界層内部でのLESモードの起動を防止するために、「遮蔽」機能と呼ばれる追加的なセーフガード機能が実装されています。 残念ながら,標準的な定式化[1]は,細かい格子上で崩壊することがあり,壁せん断応力の低下や,流れの早期剥離につながる可能性がある. これらの現象は、文献ではしばしば "モデル化された応力の枯渇 "や "グリッド誘起剥離 "と呼ばれています。 Deck & Renard [2]は最近、よりロバストな挙動を提供しながら、分離したせん断層でのLESへの迅速な切り替えを可能にする、改良された遮蔽関数を提案しました。 この定式化は、SA-DDESモデルの変形であるZDESモード2(2020)乱流モデル用に開発されました。 図は,後縁が分離した NACA4412 翼周りの流れに対 して,改良された遮蔽機能の利点を示しています. 吸込側のグリッドが流れ方向とスパン方向で強くリファインされているため,標準の遮蔽機能が後退し,流れの剥離が早期に発生している. 一方,改良された遮蔽関数は,吸込側の付着境界層領域全体で RANS モードを保持し,NASA コード CFL3D の参照 RANS とよく一致する.
以下の乱流モデリング機能がv2412リリースに含まれています:
- Improved shielding function formulation of Deck & Renard [2], implemented for SpalartAllmarasDDES, activated via the new option “shielding” (keyword “standard” selects the standard function [1], “ZDES2020” selects the improved formulation [2]).
- An additional option “usefP2” activates a more robust shielding mode for the Deck & Renard formulation (detailed in equation A.9 of [2]).
使用例
simulationType LES;
LES
{
LESModel SpalartAllmarasDDES;
SpalartAllmarasDDESCoeffs
{
// optional keywords for shielding function
shielding ZDES2020; // default: standard
usefP2 false; // default: false
}
delta maxDeltaxyz;
turbulence on;
printCoeffs on;
}
2]で示された定式化はSAベースのDDESに特化して導き出されたものであるため、改善された遮蔽関数はkOmegaSSTDDESモデルには実装されていないことに注意してください。
チュートリアル
- $FOAM_TUTORIALS/incompressible/pimpleFoam/LES/NACA4412
帰属
- The improved shielding function of Deck & Renard (2020) [2] was implemented by Upstream CFD GmbH and integrated into OpenFOAM in collaboration with ESI-UK Ltd with funding by Volkswagen AG.
参考文献
- [1] P. Spalart, S. Deck, M. Shur, K. Squires, M. Strelets, and A. Travin. A new version of detached-eddy simulation, resistant to ambiguous grid densities. Theoretical and Computational Fluid Dynamics, 20(3):181–195, 2006.
- [2] Deck, S., & Renard, N. (2020). Towards an enhanced protection of attached boundary layers in hybrid RANS/LES methods. Journal of Computational Physics, vol. 400, pp. 108970, 2020.
改良されたラグランジュ射出モデル:コーンノズル・インジェクション(coneNozzleInjection
このリリースでは、coneNozzleInjectionモデルに2つのマイナーな改良が加えられました:
- 粒子をディスク全体に角度間隔で均一に分布させる新しい射出方法;
- 粒子噴射にインジェクターの推定速度を含める。 静的インジェクタの入出力動作に変更はありませんが、移動インジェクタから噴射される粒子の速度にインジェクタの速度が含まれるようになりました。
最小限の使用例は以下の通り:
injectionModels
{
model1
{
type coneNozzleInjection;
...
// The new injection method: discSegments
injectionMethod discSegments;
nInjectors 10;
initialInjectorDir (1 0 0);
}
}
ソースコード
- $FOAM_SRC/lagrangian/intermediate/submodels/Kinematic/InjectionModel/ConeNozzleInjection/ConeNozzleInjection.H
リクエストのマージ
- Merge request #719
改良されたソリッドボディモーション機能:tabulated6DoFMotion
表6DoFMotionモデルに線形補間オプションが追加されました。 最小限の使用例を以下に示します:
solidBodyMotionFunction tabulated6DoFMotion;
interpolationScheme linear; // spline;
ソースコード
- $FOAM_SRC/meshTools/solidBodyMotionFunctions/tabulated6DoFMotion/tabulated6DoFMotion.H
新しい有限領域のフレームワーク: 膜分離モデル
有限面積ベースのフィルム曲率分離モデルが更新され、シャープエッジ用の新しいフィルム分離モデルが追加された。 これらの更新により、さまざまな幾何学的条件や流動条件下での膜分離予測の精度と柔軟性が向上しました。
主な変更点と追加点
- オーウェン-ライリーモデル:
- 既存のcurvatureSeparationモデルは、Owen & Ryley (1983)の研究に基づき、OwenRyleyModelとして再実装された。 このモデルは次のように仮定しています:
- フィルムが表面から剥がれると、すぐに細かい霧状の液滴になる。 その結果、液体が凝集塊として離脱するシナリオを正確に表現できない可能性がある。
- フィルムは一定の半径を持つ丸みを帯びたコーナーの周囲を流れるため、曲率が明確でない鋭角のコーナーでは適用が制限される可能性がある。
- 膜厚は1e-4 mより薄く、粘性効果と表面擾乱は無視される。
- 均一な膜速度と膜厚。
- 分離基準は明示的に定式化されるのではなく、モデルの仮定に基づいて推測される。
- 既存のcurvatureSeparationモデルは、Owen & Ryley (1983)の研究に基づき、OwenRyleyModelとして再実装された。 このモデルは次のように仮定しています:
- シャープエッジのための新しいフィルム分離モデル:
- 新しいモデルFriedrichModelを導入し、シャープエッジでの膜分離特性を計算し、完全膜分離と部分膜分離の両方のシナリオをカバーする。 このモデルは、Friedrichら(2008)とZhangら(2018)の研究に基づいている:
- Friedrichら(2008):
- 剥離点における制御体積内の力の平衡に根ざした剥離基準を開発。
- 最大膜厚を1e-4 mと仮定。
- 表面張力、重力、フィルムの慣性を考慮する。
- 早期破裂を予測することはできるが、比較的信頼できることが知られている。
- ANSYS Forte 18.2 に実装されている分離メソッドとして機能します。
- Zhangら(2018):
- 質量分率基準を導入することで、Friedrichらのモデルを強化した。 細胞内の膜全体が同時に剥離すると仮定するモデルとは異なり、Zhangらのアプローチは、これらの基準に基づいて膜の一部のみを剥離する。 これにより、フィルムが実際にどの程度剥離するかについて、より現実的な予測が可能になった。
- Friedrichら(2008):
- 新しいモデルFriedrichModelを導入し、シャープエッジでの膜分離特性を計算し、完全膜分離と部分膜分離の両方のシナリオをカバーする。 このモデルは、Friedrichら(2008)とZhangら(2018)の研究に基づいている:
包括的な直列および並列テストケースは、ロバストなコーナーおよび分離同定を確実にするために実施され、流れ方向に対して様々な形状や向きの鋭角エッジを持つケース、複数の空間分解能および並列化構成を含む。
その結果、ユーザーは、メッシュの複雑さや計算設定に関係なく、膜分離現象をシミュレーションする際の一貫性と信頼性の向上を期待することができます。
最小限の使用例は以下の通り:
injectionModels
{
filmSeparation
}
filmSeparationCoeffs
{
model OwenRyley;
definedPatchRadii 0;
minInvR1 0;
deltaByR1Min 0;
}
ソースコード
- $FOAM_SRC/regionFaModels/liquidFilm/subModels/kinematic/injectionModel/filmSeparation/filmSeparationModels
チュートリアル
- $FOAM_TUTORIALS/lagrangian/kinematicParcelFoam/pitzDailyWithSprinklers
リクエストのマージ
- Merge request #714
simpleFoamの改良:新しいdynamicMeshのサポート
simpleFoamはpimpleFoamと同様にdynamicFvMeshをサポートするようになりました。 constant/dynamicMeshDictがあればそれを読み込み、繰り返しごとにupdate()ルーチンを呼び出します。 これにより、例えば、動的なメッシュのリファインメント/アンリファインメントを用いた定常シミュレーションが可能になります。
詳細情報
- Issue #3269
後処理
新しいレポート作成
foamReport関数オブジェクトは、OpenFOAMの実行データを収集するためのテンプレートベースのテキスト置換システムを提供します。 ユーザーが提供するテンプレートファイルは、マークダウン(.md)、ウェブ(.html)、ラテックス(.tex)などのプレーンテキストファイルの形式をとることができます。 ダブルハンドル構文テンプレート:ENTRYを使用して提供された項目は置換されます(大文字と小文字は区別されません)。 OF_で始まる一般的な組み込みエントリのセットが提供されます。
- OF_HOST: ホストマシン名
- OF_CASE_NAME: ケース名
- OF_API: OpenFOAM APIレベル
- OF_DATE_START: ジョブ開始日
- OF_CASE_PATH: ケースへのファイルパス
- ...
組み込みキーとユーザー提供キーの完全なセットは、debugKeysエントリーを使用して書き込むことができる。 ユーザー定義の置換は辞書形式でリストされ、置換モデルには以下が含まれる:
- fileRegEx : ファイルからの正規表現
- functionObjectValue : 関数オブジェクトの結果を取り出す
- dictionaryValue : 辞書からの値 - ファイルベースまたはレジストリ検索から
- environmentVariable : キーワードを環境変数に置き換える
- userValue : キーワードをユーザが指定した文字列に置き換える:
マークダウン・テンプレートに基づく使用例:
foamReport1
{
// Mandatory entries (unmodifiable)
type foamReport;
libs (utilityFunctionObjects);
template "/myReportTemplate.md";
substitutions
{
divSchemes1
{
type dictionaryValue;
object fvSchemes;
entries
{
divSchemes "divSchemes";
}
}
fvSolution1
{
type dictionaryValue;
path "/fvSolution";
entries
{
solver_p "solvers/p/solver";
solver_p_tol "solvers/p/tolerance";
solver_p_reltol "solvers/p/relTol";
solver_U "solvers/U/solver";
solver_U_tol "solvers/U/tolerance";
solver_U_reltol "solvers/U/relTol";
}
}
controlDict1
{
type dictionaryValue;
path "/controlDict";
entries
{
initial_deltaT "deltaT";
}
}
continuityErrors
{
type functionObjectValue;
functionObject continuityError1;
entries
{
cont_error_local local;
cont_error_global global;
cont_error_cumulative cumulative;
}
}
}
// Optional entries (runtime modifiable)
// Inherited entries
...
}
マークダウン・ベースのテンプレート・ファイルの例:
# {{OF_EXECUTABLE}} : {{OF_CASE_NAME}} tutorial
- Case: : {{OF_CASE_PATH}}
- Submission: {{OF_CLOCK_START}} on {{OF_DATE_START}}
- Report time: {{OF_CLOCK_NOW}} on {{OF_DATE_NOW}}
---
## Run information
| Property | Value |
|----------------|--------------------|
| Host | {{OF_HOST}} |
| Processors | {{OF_NPROCS}} |
| Time steps | {{OF_TIME_INDEX}} |
| Initial deltaT | {{initial_deltaT}} |
| Current deltaT | {{OF_TIME_DELTAT}} |
| Execution time | {{executionTime}} |
---
## OpenFOAM information
| Property | Value |
|----------------|--------------------|
| Version | {{OF_VERSION}} |
| API | {{OF_API}} |
| Patch | {{OF_PATCH}} |
| Build | {{OF_BUILD}} |
| Architecture | {{OF_BUILD_ARCH}} |
---
## Mesh statistics
| Property | Value |
|-------------------|----------------------|
| Bounds | {{OF_MESH_BOUNDS_MIN}}{{OF_MESH_BOUNDS_MAX}} |
| Number of cells | {{OF_MESH_NCELLS}} |
| Number of faces | {{OF_MESH_NFACES}} |
| Number of points | {{OF_MESH_NPOINTS}} |
| Number of patches | {{OF_MESH_NPATCHES}} |
---
## Linear solvers
| Property | Value | tolerance(rel) | Tolerance(abs) |
|----------|----------------|------------------|---------------------|
| p | `{{solver_p}}` | {{solver_p_tol}} | {{solver_p_reltol}} |
| U | `{{solver_U}}` | {{solver_u_tol}} | {{solver_u_reltol}} |
---
## Numerical scehemes
The chosen divergence schemes comprised:
mmer547 (トーク)
{{divSchemes}}
mmer547 (トーク)
---
## Graphs
Residuals
![]({{OF_CASE_PATH}}/postProcessing/residualGraph1/{{OF_TIME}}/residualGraph1.svg)
---
## Results
Forces
![]({{OF_CASE_PATH}}/postProcessing/forceCoeffsGraph1/{{OF_TIME}}/forceCoeffsGraph1.svg)
---
ソースコード
- $FOAM_SRC/functionObjects/utilities/foamReport
チュートリアル
- $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike
リクエストのマージ
- Merge request #716
新しいグラフ生成
graphFunctionObjectは、ユーザーが関数オブジェクトの結果値のSVGグラフを生成することを可能にします。例えば、進化の残差や、力係数のような削減されたデータを表示します。
最小限の例を以下に示す:
// Generate the result values
solverInfo1
{
type solverInfo;
libs (utilityFunctionObjects);
fields (U p);
}
// Describe the graph
residualGraph
{
// Mandatory entries
libs (utilityFunctionObjects);
functions
{
//entry
//{
// // Mandatory entries
// object ;
// entry ;
//
// // Optional entries
// title ; // Default: take from dict name
// colour ; // labels in range 0-255 (255 0 0)
// dashes ; // (4 1 1)
//}
Ux
{
object solverInfo1;
entry Ux_initial;
}
Uy
{
object solverInfo1;
entry Uy_initial;
}
Uz
{
object solverInfo1;
entry Uz_initial;
}
p
{
object solverInfo1;
entry p_initial;
}
}
// Optional entries
//xMin ;
//xMax ;
//yMin ;
//yMax ;
//xlabel ; // "Iteration";
//ylabel ; // "log10(Initial residual)";
//width ;
//height ;
//strokeWidth ;
//logScaleX ;
//logScaleY ;
//drawGrid ;
// Inherited entries
//...
}
ソースコード
- $FOAM_SRC/functionObjects/utilities/graphFunctionObject
チュートリアル
- $FOAM_TUTORIALS/incompressible/simpleFoam/motorBike
新しい有限領域関数オブジェクト:surfaceCourantNumber
新しい有限面積関数オブジェクトsurfaceCourantNumberは、有限面積の面中心で表面のクーラント数フィールドを計算します。 これは、liquidFilmFoamソルバーで使用されているような、エッジ中心でクーラント数を計算するアプローチからの概念的な転換を意味します。 面中心でクーラント数を評価することにより、surfaceCourantNumberは、より局所的で、より正確な表面ベースの流れ解析の指標を提供することができます。
最小限の使用例は以下の通り:
surfaceCourantNumber1
{
// Mandatory entries
type surfaceCourantNumber;
libs (regionFaModels);
// Optional entries
area <word>;
result <word>;
phis <word>;
rho <word>;
// Inherited entries
...
}
ソースコード
- $FOAM_SRC/regionFaModels/functionObjects/surfaceCourantNumber/surfaceCourantNumber.H
チュートリアル
- $FOAM_TUTORIALS/finiteArea/liquidFilmFoam/cylinder
リクエストのマージ
- Merge request #706
ソルバー関数オブジェクトの改良 アウターループ収束チェック
ソルバー関数オブジェクト(scalarTransport、energyTransport、electricPotential)に外部ループの収束チェック機能が追加されました。 この改良により、収束が達成された時点で不要なループを排除することで、計算オーバーヘッドを削減し、解法プロセスを合理化することができます。 最小限の使用例を以下に示します:
scalarTransport1
{
// Optional entries
tolerance <scalar>;
...
}
ソースコード
- $FOAM_SRC/functionObjects/solvers/scalarTransport/scalarTransport.H
- $FOAM_SRC/functionObjects/solvers/energyTransport/energyTransport.H
- $FOAM_SRC/functionObjects/solvers/electricPotential/electricPotential.H
リクエストのマージ
- Merge request #699
パラレル
ノンブロッキング・エクスチェンジ(NBX)の改善
OpenFOAM-v2306では、実験的な「ノンブロッキング・コンセンサス交換」(NBX)オプションが導入されました。 8192コアに複数のcyclicAMIがあり、(etc/controlDictまたはローカルシステム/controlDictに)エントリがある場合です:
OptimisationSwitches
{
// Additional PstreamBuffers tuning parameters (experimental)
// 0 : (legacy PEX)
// * all-to-all for buffer sizes [legacy approach]
// * point-to-point for contents
// 1 : (hybrid PEX)
// * NBX for buffer sizes [new approach]
// * point-to-point for contents
pbufs.tuning 1;
}
以下の時間帯を提供:
NBX | Time (s) |
No | 28k |
Yes | 18k |
NBXは、「受信と消費」の順序が「送信の順序」と同じであることを保証していない。 これは、cyclicAMIのジオメトリなど、長いメッセージではより敏感であり、一意の「タグ」(デフォルトのPstream::msgType()ではない)を確保するように注意しなければならない。
ソースコード
- $FOAM_SRC/meshTools/AMIInterpolation/AMIInterpolation
リクエストのマージ
- Merge request #704
改良された有限領域フレームワーク
いくつかの有限領域フレームワークルーチンは、歪度や非直交性に関係なく、平面および非平面有限領域メッシュに影響を与え、並列処理時に一貫性のない挙動を示します。 これらの不整合は、主に内部エッジとプロセッサエッジに適用されるアルゴリズムの違いから生じています。 例えば、非平面有限面積メッシュのコーナーエッジが2つのプロセッサ間で共有されている場合、接線方向に微妙な正負の摂動が生じることがあります。 この摂動は時間の経過とともに伝播し、膜分離のような予期せぬ流れ挙動を引き起こす可能性があります。
入念にテストされた一連のコミットは、主に以下のコアルーチンに対処するために、並列一貫性を改善した:
makeLPN
makeWeights
makeDeltaCoeffs
makeCorrectionVectors
makeSkewCorrectionVectors
ソースコード
- $FOAM_SRC/finiteArea/faMesh/faMeshDemandDrivenData.C
- $FOAM_SRC/finiteArea/faMesh/faPatches/constraint/processor/processorFaPatch.C
リクエストのマージ
- Merge request #708
reconstructParMesh の改良
reconstructParMeshユーティリティは、有限面積('faMesh')メッシュを再構築することができ、有限面積メッシュが並列に生成される場合に便利です。 ソースコード
- $FOAM_UTILITIES/parallelProcessing/reconstructParMesh
リクエストのマージ
- Merge request #711
改良された分散トライサーフェス
distributedTriSurfaceMeshは、例えばsystem/snappyHexMeshDictのように、関連する辞書で分解方法を指定することで、他のシミュレーションとは異なる分解方法で実行できるようになりました:
box
{
file "box.obj";
type distributedTriSurfaceMesh;
// Override the decomposition method
numberOfSubdomains 8;
method hierarchical;
n (2 2 2);
}
を指定することで、三角形を複製せずに実行することもできます。
decomposeUsingBbs false;
これは過剰なメモリ使用を回避し、頂点ごとの法線を保存するので、滑らかな法線を持つように拡張できる。
この2つの変更により、単純なメッシュで非並列または並列を実行しても、同じ結果が得られるようになった。 下の図では、非平行メッシュを青い面で、平行メッシュを赤い線で表しています。
チュートリアル
- $FOAM_TUTORIALS/mesh/snappyHexMesh/distributedTriSurfaceMesh
ソースコード
- $FOAM_SRC/parallel/distributed/distributedTriSurfaceMesh/distributedTriSurfaceMesh.H
リクエストのマージ
- Merge request #720
ユーザビリティ
C++17に更新
現在進行中のGPU開発をサポートするため、C++の最低規格がC++14からC++17に引き上げられた。
- コミット: #44f7a726
- ソース: $WM_PROJECT_DIR/wmake/rules
新しいチュートリアルのデモンストレーション
ミッシングコーナー
これは様々なメッシュ・ユーティリティを紹介するシンプルなチュートリアルです:
- cellDecomposition関数四角形メッシュを作成するオブジェクト
- テットを多面体に変換するpolyDualMesh
- surfaceMeshExtractで追加のポイントパッチを作成する。
- moveDynamicMeshでメッシュを少し変形させる。 メッシュのモーフィングは、特徴制約を無視したラプラシアン点スムージングを使って行われるため、メッシュの品質を向上させるのに悪い働きをします。
ソースコード
- $FOAM_SRC/functionObjects/field/cellDecomposer
- $FOAM_UTILITIES/mesh/manipulation/polyDualMesh
チュートリアル
- $FOAM_TUTORIALS/mesh/polyDualMesh/missingCorner
ダム決壊
これはdamBreakチュートリアルの変形で、cyclicACMIを使ってフローをコントロールすることを紹介している。 このチュートリアルでは
- 追加の(cyclicACMI)バッフルが液体の流れを遮断する。
- 時刻0.5秒、閉塞部の下半分の面が開く
- これは、スケールファクターを使用して完全非結合(すなわち壁)から完全結合に変換するcyclicACMIによって行われる。
- スケールはconstant/polyMesh/boundaryのパッチ定義にあるコード化されたFunction1の項目を通して設定されます。
- 初期状態:閉塞(赤)
ソースコード
- $FOAM_SRC/OpenFOAM/primitives/functions/Function1/Coded
- $FOAM_SRC/meshTools/AMIInterpolation/patches/cyclicACMI/cyclicACMIPolyPatch
チュートリアル
- $FOAM_TUTORIALS/multiphase/interFoam/RAS/damBreakLeakage
コミュニティ
OpenFOAM v2412のリリースは、OpenFOAMのコアチーム以外からの貢献の努力を認め、OpenFOAMの開発を統一するために、より広いOpenFOAMコミュニティに参加してもらうための継続的な努力の上に成り立っています。
いくつかの開発は、メインのコードベースに直接統合されている。
- 地域貢献: アドジョイント最適化の改良 詳細
- 地域貢献: SA-DDES乱流モデルの遮蔽機能を改善 詳細...
もし、共同開発の可能性を模索し、あなたの開発したものを含めたいとお考えでしたら、ぜひご連絡ください。
乱流専門委員会リポジトリへの新しい投稿
乱流技術委員会リポジトリ傘下の以下の2つのリポジトリを公開いたします:
- gammaSST :3方程式遷移と乱流モデル。
- HelicitySpalartAllmaras : Liuらのヘリシティ補正を用いたSpalart-Allmaras乱流モデル。
ソースコード
- $FOAM_SRC/$WM_PROJECT_DIR/plugins/turbulence-community
帰属
- OpenCFDは、Jiří Fürst、Jeff Defoe、そして彼らの同僚たちの貴重な貢献と援助に感謝したい。
謝辞
謝辞
OpenFOAMに貢献してくれた以下の方々に感謝します。
特別感謝
- Johan Rønby Pedersen: マルチフェーズフレームワークの並列化に貢献
- マーカス・ノードランド:流体-多孔質界面のモデリングに関する技術的な議論に協力してくれている。
課題追跡への貢献
- ilyapopov (Ilya Popov) リポジトリ内の設定ファイルの迷子? GL#3192
- carlo.fiorina (carlo fiorina) v2406 で READ_IF_PRESENT の動作に一貫性がない GL#3193
- xpqiu (xpqiu) SPDP モードで実行するとソルバがクラッシュする GL#3194
- gng015 (gng) reconstructParMesh がバイナリでメッシュが大きすぎる場合,メッシュの再構築でスタックする GL#3196
- stefano.garbin (Stefano Garbin) OF2406 で CFMESH 実行ファイルが見つからない GL#3198
- duyquang.tdm.bd (Quang Nguyen) OpenFOAM-v2406 での ccmToFoam のクロスコンパイル時のエラー GL#3199
- ChrisSessler (Christian Sessler) multiComponentMixture と組み合わせた hConst がすべての参照エンタルピーに最初の種の Tref を使用する Href GL#3200
- ChennaK85 (Chennakesava Kadapa) sixDoFRigidBody の Newmark および Crank-Nicolson スキームの問題 GL#3202
- santiagomarquezd (Santiago Marquez Damian) 3 次元未満でテンソルの球面部分が間違って計算される GL#3203
- DL (David Ludlow) overPimpleDyMFoam と v2406 における kOmegaSST 分割の不具合 GL#3204
- bPaillard (Benoit Paillard) オーバーセットチュートリアルにおける圧力変動 GL#3207
- mzy (Zeyao Ma) icoReactingMultiphaseInterFoam V2206 で凝固問題を解くと固相が常に動いてしまう GL#3208
- zzphub (Zhipeng Zhang) 2306 の debian12 ソースビルドに失敗 GL#3210
- Charlfmare (Charl Mare) SwirlFanVelocity が新しい OF バージョンで動作しない GL#3211
- lizhisongsjtu (zhisong li) bug: solitary wave - McCowan and Grimshaw GL#3212
- daniel.jasinski (Daniel) buoyantSimpleFoam の圧力制御の欠落 GL#3213
- pferro (Paulin FERRO) solidificationMeltingSource がバグっぽい GL#3214
- rbonin (Rémi Bonin) precompiled OpenFOAM (v2406 / Windows 10) で表面膜を使用すると reactingParcelFoam がクラッシュする GL#3216
- takuya (takuya yamamoto) blockMeshDict の project 関数のチュートリアルの記述が正しくない GL#3217
- snaka (Shinji Nakagawa) foamMonitor が Gnuplot バージョン 6 の 'reread' コマンドの非推奨のためにグラフの更新に失敗する GL#3219
- ilyapopov (Ilya Popov) energyTransport が dynamicRefineFvMesh と組み合わせて動作しない GL#3221
- ntilton (Nils Tilton) fixedProfile 条件が最後のタイムステップからシミュレーションを再開しない GL#3223
- porori (takashi suzuki) diffusionGasEvaporation: 例題の使い方とチュートリアルが不適切 <= アントワーヌ方程式の定義が一般的でない(第2項の符号が逆). GL#3224
- raphalace (Raphael Aranha) SymmetryPlane と ABL シミュレーションの不具合 GL#3226
- porori (takashi suzuki) snappyHexMesh v2012 以降で、サーフェスがサイクリックタイプの境界に接続されている場合、サーフェスレイヤーを追加できない。 GL#3227
- Skolo (Robert) wallShearStress, yPlus の入力フィールドを指定できるようにした GL#3228
- flex99 (Felix Burger) メッシュとフィールドをインポートする際の vtkUnstructuredToFoam エラー GL#3230
- acassinelli (Andrea Cassinelli) v2406 が v2312 より最大 ~3% 遅くなった GL#3231
- croquemadame (Juan Salazar) 後処理のためにフォームファイルのサーフェスフォーマットをディスクから指定の場所に読み込むクラス (foamSurfaceReader) GL#3232
- gerlero (Gabriel Gerlero) CGAL 6 との互換性 GL#3234
- xuegy (Guanyang Xue) SolidificationMeltingSource の異なる液相線と固相線 GL#3235
- gerlero (Gabriel Gerlero) dl.openfoam.comがGitHub Actionsからのリクエストを拒否している GL#3236
- cthorenz (Carsten Thorenz) interFoam: 可変密度乱流モデル使用時のせん断応力計算が正しくない / 動作しない GL#3237
- mfikrikasim (Mohd Fikri Kasim) OpenFoam v2306 - SnappyHexMesh の問題 GL#3239
- hikassem (Hassan Kassem) ConeNozzleInjection が均一でない GL#3240
- jczhang07 (Junchao Zhang) "openfoam/etc/bashrc" が非常に遅い GL#3245
- jczhang07 (Junchao Zhang) Icx コンパイラで `pthread_create' への未定義参照のリンクエラー GL#3251
- djarecki (Dominic Jarecki) EASY FIX: アクティブ熱物理モデルに線形 EOS を含める GL#3252
- jczhang07 (Junchao Zhang) "petscFoam" を未定義のシンボルでロードできなかった GL#3253
- richardt (Richard Tribess) BUG: AMR および collisionModel pairCollision でラグランジアンソルバーを実行する際に storeGlobalPositions が呼び出されない GL#3256
- hungnguyenphd (Quoc Hung Nguyen) sphereDrag が非常に小さい粒子サイズで動作しない GL#3257
- rbonin (Rémi Bonin) 太陽計算機が 24 時間以上の実行時間で間違った太陽方向を提供する GL#3258
- jczhang07 (Junchao Zhang) '-fp-model precise は -fp-model=precise であるべき GL#3259
- porori (takashi suzuki) interCondensatingEvaporatingFoam with InterfaceHeatResistance モデルが蒸発による体積変化を適切に評価しない GL#3261
- licg1981 (CHENGGONG LI) foamInstallationTest が gcc/g++ のバージョンを読み込めない GL#3263
- lizhisongsjtu (zhisong li) of2206: vectorCodedSource が動作しない。 GL#3264
- cibanez (Cristóbal Ibáñez) dynamicMotionSolverFvMeshMAMI の再実装 GL#3265
- cthorenz (Carsten Thorenz) snappyHexMesh: レイヤー追加処理でパッチ形状が破壊されることがある GL#3270
- jczhang07 (Junchao Zhang) RPATH リンクの失敗 GL#3274
- janga (Jan Gärtner) v2406 における boundaryInternalField() のコンパイルエラー GL#3277
- johan_roenby (Johan Roenby) BUG: plicRDF が周期的なパッチを越えて正常に動作しない GL#3279
- haampie (Harmen Stoppels) stubs サブディレクトリへの rpath が見つからない GL#3283
- sreplogl (Scott Replogle) マスターの初期クローンは成功したが、無効なパスのためチェックアウトに失敗 GL#3284
- janga (Jan Gärtner) Parcels の origProcId の命名を統一する GL#3287
会社概要
OpenFOAMは、ESI-OpenCFDのコアチームによって制作されています。
- Andrew Heather
- Mattijs Janssens
- Mark Olesen
- Prashant Sonakar
- Pawan Ghildiyal
- Kutalmış Berçin
- Matej Forman
- Chiara Pesci
- Martin Lichtmes
- Jiri Polansky
- Ann Ronchetti
- Fred Mendonça
- Swapnil Salokhe
グローバルESIチームからの幅広いサポート
- ESI Group (GmbH)
- ESI Group (ESI Software (India) Private Limited)
- ESI Group (North America)
- ESI Group (Nihon ESI)
- ESI webteam
次からの寄付もある。
- Marian Fuchs: Upstream CFD GmbH
- Vaggelis Papoutsis: PCOpt/NTUA and FOSS GP
- The OpenFOAM Community