OpenFOAM v1912 リリースノート

提供:オープンCAEWiki OpenCAE Wiki
2023年9月9日 (土) 21:39時点におけるMmer547 (トーク | 投稿記録)による版 (ページの作成:「OpenCFDは、OpenFOAM® v1912の2019年12月リリースを発表いたします。このリリースは、コードの多くの領域にわたってOpenFOAM-v1906の機能を拡張しています。新機能は、OpenCFDのお客様がスポンサーとなった開発、内部資金による開発、OpenFOAMコミュニティからの機能や変更の統合を表しています。 OpenFOAMは、OpenCFDによってGPLライセンスの下で配布されていま…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

OpenCFDは、OpenFOAM® v1912の2019年12月リリースを発表いたします。このリリースは、コードの多くの領域にわたってOpenFOAM-v1906の機能を拡張しています。新機能は、OpenCFDのお客様がスポンサーとなった開発、内部資金による開発、OpenFOAMコミュニティからの機能や変更の統合を表しています。

OpenFOAMは、OpenCFDによってGPLライセンスの下で配布されています:

  • Linuxシステム上でコンパイル可能なソースコード
  • Linuxシステム用のコンパイル済みバイナリのインストール
  • Mac OS Xシステム用のコンパイル済みバイナリのインストール
  • MS Windows インストーラ
  • Bash on Ubuntu on Windows (MS Windows 10用)

コードを入手するには、ダウンロード手順を参照してください。

開発用リポジトリは一般に公開されています。これらのメインリポジトリはバグフィックスや新機能で定期的に更新され、最近のメンテナンスでサイズが800MB以上からmasterブランチの200MB程度に大幅に縮小されました。

Upgrading

  • ユーザー向けのヘルプは、ユーザーアップグレードガイドに記載されています。
  • 開発者向けのヘルプは、開発者向けアップグレードガイドで提供されています。
  • また、典型的なイディオムの理解を深めるために、コーディングパターンに関する文書も作成しました。私たちは喜んでコンテンツを取り込みます!

Pre-processing

新しい式の構文

OpenFOAM-v1912は、swak4Foam(Bernhard Gschaider)によって開拓されたアイデアを使用した式を実装しています。これは、swak4Foam(Bernard Gschaider)によって開発されたアイデアを使用しています。この追加は、辞書構文、文字列評価、境界条件、セットフィールドなど、OpenFOAMのさまざまな部分に浸透しており、今後の発展が期待されます。

例えば、式は、正規文字列展開に数学的評価を埋め込むことを可能にします:

#include "<system>/sampling${{ round(${flowRate:-5} * 100) }}";

その中核となるのが、このエクスプレッション機能である:

  • SQLiteプロジェクトのLemon Parser Generator - https://www.sqlite.org/lemon.html を参照。
  • Ragelステートマシン・コンパイラ - http://www.colm.net/open-source/ragel/ を参照。

Source code

$FOAM_SRC/OpenFOAM/include/m4

$FOAM_SRC/src/OpenFOAM/expressions

$FOAM_SRC/src/finiteVolume/expressions

辞書のインライン表現

辞書入力に関する大きな変更点は、式の追加に関連する新しい#evalディレクティブである。多くの場合、#evalは#calcを直接置き換えることができ、速度を大幅に向上させることができる。比較として、以下の10回の評価では、#calcでは16秒かかったのに対し、#evalでは0.02秒しかかからなかった。

この機能は辞書の見方を変えるだろう。

kgh     700;
split   0.4;
inlet1

{
   type            flowRateInletVelocity;
   massFlowRate    constant #eval{ $split * $kgh / 3600 };
}

inlet2
{
   type            flowRateInletVelocity;
   massFlowRate    constant #eval{ (1-$split) * $kgh / 3600 };

}

さらなる例は、v1912ユーザーアップグレードガイドに記載されています。

Source code

$FOAM_SRC/OpenFOAM/db/dictionary/functionEntries/evalEntry

Tutorial

これまで#calcを使用していたチュートリアルはすべて#evalを使用するようになりました。

新しい式ベースの setFields ユーティリティ

この式は、setExprFieldsとsetExprBoundaryFieldsという新しいユーティリティをサポートしており、似たような名前のswak4Foamのファンキーなユーティリティと同じような役割を果たします。

setExprFieldsは、フィールドの設定に図形と選択を使う代わりに、条件と式の組み合わせを使う。条件が有効な場合にのみ、式の結果が適用される。例えば、以下のようにすると、定義されたゾーン内の温度が調整される:

expressions

(

   T
   {
       field       T;
       dimensions  [0 0 0 1 0 0 0];
       constants
       {
           centre (0.21 0 0.01);
       }
       variables
       (
           "radius = 0.1"
       );
       condition
       #{
           // Within the radius
           (mag(pos() - $[(vector)constants.centre]) < radius)
           // but only +ve y!
         && bool(pos((pos() - $[(vector)constants.centre]).y()))
       #};
       expression
       #{
           300
         + 200 * (1 - mag(pos() - $[(vector)constants.centre]) / radius)
       #};
   }

);

setExprBoundaryFieldsユーティリティは、バウンダリ・フィールド・エントリをカスタムで変更するための同様の目的を果たす。

Tutorials

$FOAM_TUTORIALS/compressible/rhoPimpleFoam/RAS/TJunctionAverage

PDRFoam用の新しいセットフィールド・ユーティリティ

新しいPDRsetFieldsユーティリティはPDRFoamソルバーで使用する閉塞のテンソル抵抗を計算します。ジオメトリはPDRsetFieldsDictファイルを使ってプリミティブ形状の形で入力されます:

// Data dictionary for PDRsetFields

// Replace by the relevant names

obsFileDir      "<case>/geometry";

obsFileNames    (obstaclesDict);

// legacyObsSpec   true;

//

// obsFileNames    (position.obs base.obs);

障害物は、obsFileNamesエントリーの下にリストされた個別のファイルで提供される。以下のような様々なタイプの障害物がサポートされている:

  • cylinder
  • diagonal beam
  • cuboid
  • grating
  • louvre
  • patch

以下に障害物の例を示す:

Source code
$FOAM_UTILITIES//utilities/preProcessing/PDRsetFields
Tutorial
$FOAM_UTILITIES/combustion/PDRFoam/pipeLattice

checkMeshから出力される壁の距離

checkMesh ユーティリティのオプション -writeAllFields が拡張され、壁距離をフィールド wallDistance として書き込むようになりました。これは、system/fvSchemes辞書で壁距離法が選択されていることを必要とします:

wallDist
{
   method meshWave;
}

wallDistanceは壁パッチのSMALL(1e-15)に設定され、paraFoamなどで後処理することができます:

Source code
$FOAM_UTILITIES/mesh/manipulation/checkMesh

snappyHexMesh : 細いギャップを自動的に閉じる

複雑な形状のメッシュを作成する際、ユーザがメッシュを必要としない薄いギャップがあるかもしれません。このリリースではsnappyHexMeshは面毎、面領域毎にメッシュするギャップの最小サイズを指定するblockLevelを指定することができます。この指定されたサイズより小さいギャップ内のセルは削除されます(その結果、ギャップ内のセルはなくなります)。

この拡張機能は以下の構文で有効になる:

refinementSurfaces
{
   "gap.*"
   {
       // Surface-wise min and max refinement level
       level       (2 2);

       // From cell level 2 onwards start checking
       // for opposite surfaces
       blockLevel  2;
   }
}

blockLevel 設定は以下を決定する。

  • ギャップ検知にサーフェスが全く使用されていないかどうか。
  • 理想的なギャップの大きさ:2 * cellize; ここで、cellize は初期セルサイズから blockLevel を何倍かにリファインして決定される。

全てのサーフェス精密化snappyHexMeshの後、シェル/ボリュームの精密化の前に、全てのセルについて最も近い2つのサーフェスを決定します。もしセルが

  • 2つの面の間、または同じ面の切り離された領域
  • であり、対向点間の距離はギャップサイズより小さい。

の場合、セルは削除される。

チュートリアルのopposite_wallsは、薄いギャップを形成する2つの表面を持つ単純なブロックです。

Tutorial
$FOAM_TUTORIALS/mesh/snappyHexMesh/opposite˙walls

数値

新しい随伴形状最適化

アジョイント・ライブラリは、自動化された形状最適化ループを可能にする新機能で強化されている。

これは、OpenFOAMのガバナンス・フレームワークの下、OpenFOAM-v1906でリリースされたアジョイント最適化ツールの続編です。

体積Bスプラインに基づくパラメータ化スキームが導入され、その制御点は最適化ループにおける設計変数として機能する(下記参照)。ボリューメトリックBスプラインボックスの制御点は、直交座標または円筒座標で定義できます。

ループ全体(流体方程式とアジョイント方程式の解法,感度導関数の計算,設計変数とメッシュの更新)は,adjointOptimisationFoam ソルバー内で実行されます.設計変数を更新するために,BFGS のような一般的な準ニュートン法や,SQP や拘束射影のような拘束を扱える方法など,多くの方法が実装されています.

Source code
$FOAM_SOLVERS/incompressible/adjointOptimisationFoam $FOAM_SRC/optimisation/adjointOptimisation/adjoint
Examples
$FOAM_TUTORIALS/incompressible/adjointOptimisationFoam
Attribution
このソフトウェアはPCOpt/NTUAとFOSS GPによって開発され、以下の人々からの貢献があった。
  • Dr Evangelos Papoutsis-Kiachagias,
  • Konstantinos Gkaragounis,
  • Professor Kyriakos Giannakoglou,
  • Dr Andrew Heather
References
  • E.M. Papoutsis-Kiachagias, N. Magoulas, J. Mueller, C. Othmer, K.C. Giannakoglou: ’Noise Reduction in Car Aerodynamics using a Surrogate Objective Function and the Continuous Adjoint Method with Wall Functions’, Computers & Fluids, 122:223-232, 2015
  • E. M. Papoutsis-Kiachagias, V. G. Asouti, K. C. Giannakoglou, K. Gkagkas, S. Shimokawa, E. Itakura: Multi-point aerodynamic shape optimization of cars based on continuous adjoint, Structural and Multidisciplinary Optimization, 59(2):675694, 2019
Integration
コードはOpenCFDとNTUAが共同で統合した。

新しい重み付き磁束補間スキーム

新しいweightedFlux補間スキームは、重み付けされたフラックスを用いる線形スキームである。

次のような一般的なフラックスの場合:

の面値を必要とするガウスの定理を用いて勾配を計算する。 これは次のように計算される:

どこ:

  • φi is the cell value
  • φfis the face value
  • σi is the diffusivity coefficient

不連続の場合、線形補間は正しくないフラックスを生成する。weightedFlux補間スキームは、Tの調和補間と組み合わせて以下のように使用される。

laplacianSchemes
{
   laplacian(DT,T) Gauss harmonic corrected;
}

gradSchemes
{
   grad(T)     Gauss weightedFlux sigma;
}

上記の例では、以下のように滑らかな温度と熱流束のプロファイルが得られる:

Source code
$FOAM_SRC/finiteVolume/interpolation/surfaceInterpolation/schemes/weightedFlux
Tutorial
$FOAM_TUTORIALS/verificationAndValidation/schemes/weigthedFluxExample
Attribution
このスキームはノルベルト・ウェーバーの寄稿によるものである。
References
  • Weber, N.; Beckstein, P.; Galindo, V.; Starace, M.; Weier, T.: Electro-vortex flow simulation using coupled meshes, Computers and Fluids 168(2018) 101-109
  • For more details see the Issue tracker

混合精度モードでのジオメトリ処理の改善

OpenFOAM-v1906で導入された混合精度モード(SPDP)により、倍精度で実行する場合に比べ、大幅なスピードアップとメモリ要件の削減が可能になります。

混合精度モードでは、線形ソルバーだけが倍精度で動作する。他の機能はすべて単精度で実行されます。これにより、例えばcheckMeshを使用した場合、完全に有効なクローズドセルがオープンセルとして表示される可能性があります。単精度(SP)で実行すると、以下のようなレポートが表示されます:

***Boundary openness (3.77976e-07 3.97566e-06 -2.26237e-08) possible hole in boundary description.

このバージョンでは、倍精度計算が次のように拡張されています。

  • 面の中心と面積、セルの中心と体積の計算。実際の結果はまだ単精度で保存されていることに注意してください。
  • ほとんどのcheckMeshの合計、例えばオープンセルの上。
  • すべてのフィールドベースの合計(sum)。

これらの変更はSPDPモードにのみ影響することに注意。前の例では、次のように報告されている:

境界の開き (-6.31099e-11 -3.99859e-11 -3.747e-10) OK.

Source code
$FOAM_SRC/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshCellCentresAndVols.C $FOAM_SRC/src/OpenFOAM/meshes/primitiveMesh/primitiveMeshFaceCentresAndAreas.C

ソルバーと物理モデル

新しいインターフェイス追跡ダイナミック・メッシュ

このリリースには、foam-extendプロジェクトのムービングメッシュインターフェーストラッキングライブラリが統合されています。OpenFOAM v1912への移植は、Zeljko Tukovic (FMENA, Zagreb)がOpenCFD Ltd.と共同で行いました。

基本的な機能は、interfaceTrackingFvMeshクラスによって実装されています。自由表面における運動学的および動的条件は、速度と圧力のカスタム境界条件によって課されます。界面追跡計算は、標準的なpimpleFoamソルバーを使用して実行されます。

下の例は、汚染され、擾乱を受けた液滴の濃度と形状の変化を示している。

Source code
$FOAM_SRC/dynamicFaMesh/interfaceTrackingFvMesh
Tutorial
$FOAM_TUTORIALS/incompressible/pimpleFoam/laminar/contactAngleCavity $FOAM_TUTORIALS/incompressible/pimpleFoam/laminar/contaminatedDroplet2D
References
Z. Tukovic and H. Jasak. A moving mesh finite volume interface tracking method for surface tension dominated interfacial fluid flow. Computers & fluids. 55 (2012) 70-84.
Attribution
Code written and contributed by Zeljko Tukovic

新しい6自由度(DoF)機能

新しいlinearSpringDamper拘束モデル

6自由度ライブラリには、新しいlinearSpringDamperモデルが含まれています。

これはスプリングダンパーシステムで、アンカーとrefAttachmentPt間の距離がrestLengthを超えたときに「ソフトな」ロープ拘束として機能する。

ロープがたるんでいるときは、体に力はかからない。dynamicMeshDictでの指定は以下の通り:

restraints
{
   chain
   {
       sixDoFRigidBodyMotionRestraint  linearSpringDamper;
       refAttachmentPt     (3.7 4.2 4.5);
       anchor              table
       (
           (0         (3.7 4.2 6.5))
           (2         (4.7 4.2 6.5))
           (6         (5.7 4.2 4.5))
           (8         (6.7 4.2 4.5))
       );
       psi                 1;
       wn                  8.28;
       numberOfChains      4;
       restLength          2;
   }
}

どこだ?

  • refAttachmentPtはソリッドオブジェクトへのアタッチメントポイントです。
  • anchorはロープのアンカーで、Function1の時間依存の項目として指定される。
  • psiは減衰比。
  • wnは、システムの減衰していない固有振動数である。
  • numberOfChainsは、ボディに取り付けられているチェーンの数。
  • restLength はロープの残りの長さ。

システムの減衰と剛性は次のように計算される:

注:psiとwnは、柔らかいロープの挙動をモデル化するために、過減衰系に対して設定されるべきである。

Source code
$FOAM_SRC/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion/restraints/linearSpringDamper
新しいソフト・ウォール・サスペンション

新しいソフトウォールモデルは、壁法線方向のアンカーとrefAttachmentPt間の距離が負になったときに「ソフト」な壁として機能するダンパー-線形-バネ拘束です。

ロープがたるんでいるときは、体に力はかからない。dynamicMeshDictでの指定は以下の通り:

restraints
{
   upperWall
   {
       type                    softWall;
       body                    floatingObject;
       anchor                  (0.5 0.5 0.7);
       refAttachmentPt         (0.5 0.5 0.58);
       wallNormal              (0 0 -1);
       psi                     2.0;
       C                       0.01;
   }
}

どこ:

  • refAttachmentPtは、ソリッドオブジェクトへのアタッチメントポイントです。
  • アンカーはロープの錨である。
  • psiは減衰比
  • wallNormal は壁の法線方向
  • Cはモデル定数

システムの減衰と剛性は次のように計算される:

Source code
$FOAM_SRC/rigidBodyDynamics/restraints/softWall
オーバーセットされたダイナミックメッシュのための新しいマルチモーション機能

オーバーセット・ダイナミック・メッシュが複数のモーション・タイプを扱えるようになりました。これにより、ユーザーは異なるモーション・ソルバーのアクションで異なるオブジェクトを動かすことができます。

一例を挙げよう:

  • $FOAM_TUTORIALS/multiphase/overInterDyMFoam/floatingBodyWithSpring

dynamicMeshDict辞書の中で、dynamicOversetFvMeshは2つのモーション・ソルバーを持っています:

  • 新しいdrivenLinearMotionを使ったsolidBody(下記参照)
  • sixDoFRigidBodyMotion

チュートリアルでは、2つのモーション・ソルバーが異なるセルセットに適用される。

cubeという名前のソルバーは、モーション・ソルバーsixDoFRigidBodyMotionを使用するfloatingObjectです。新しいキーワードCofGvelocityは、drivenLinearMotionソルバーで使用するオブジェクトの重心速度を書き込む。

新しいdrivenLinearMotionモーションソルバは剛体タイプで、エントリーCofGvelocityに従って点を移動します。このチュートリアルでは、オーバーセット計算の背景メッシュに対応するc0セルセットに適用します。

drivenLinearMotionは、オーバーセット計算の "inset "領域で、与えられたオブジェクトに "追従する "背景メッシュを設定することができます。これは、オブジェクトの予想される変位が大きい場合にメッシュサイズを小さくするのに役立ちます。

Tutorial
$FOAM_TUTORIALS/multiphase/overInterDyMFoam/floatingBodyWithSpring

新しい平行放射モデル

fvDOM用の新しい平行太陽ビームモデル

fvDOM放射モデルに、太陽外部負荷からの外部ビームのサポートが追加されました。この効果はfvDOMモデルの光線に追加され、radiationProperties辞書の新しい項目useExternalBeamをtrueに設定することで有効になります。

fvDOMの光線立体角は、角度離散化に従って最適な光線方向と一致するように回転される。

線源のエネルギー・スペクトルを得るには、以下のエントリーを使用する:

spectralDistribution (2 1)

注:spectralDistributionのバンド数は、吸収率モデルのバンド数と一致する必要があります。つまり、boundaryRadiationPropertiesのmultiBandAbsorptionです:

type       opaqueDiffusive;
wallAbsorptionEmissionModel
{
   type            multiBandAbsorption;
   absorptivity    (0.3 0.7);
   emissivity      (0.3 0.7);
};

輻射境界条件の例では、不透明な拡散壁と、2つのバンドを用いたマルチバンド吸収モデルを指定しています。

コリメートモデルは、solarLoad放射モデルと併用しないでください。

コリメートモデルは、太陽計算機を使用して太陽の方向とエネルギー束を導きます。標準モデルは、solarLoad放射モデルと同様に使用できます。

Source code
$FOAM_SRC/thermophysicalModels/radiation/radiationModels/fvDOM
新しいマルチバンドゾーン吸収発光モデル

新しいmultiBandZoneAbsorptionEmissionモデルは、領域内の不均一な吸収率および放射率フィールドの使用を可能にします。例えば、2つのバンドモデルの場合:

multiBandZoneAbsorptionEmissionCoeffs
{
   absorptivity  (0.01 0.01);
   emissivity    (0.01 0.01);
   zones
   {
       absorptivity  ("trees" (20 20));
       emissivity    ("trees" (20 20));
   }
}

この例では、背景メッシュに(0.01 0.01)、樹木というゾーンに(20 20)の吸収率を設定している。

Source code
$FOAM_SRC/thermophysicalModels/radiation/submodels/absorptionEmissionModel/absorptionEmissionModel/multiBandZoneAbsorptionEmission
Tutorial
$FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/solarBeamWithTrees

新しい多相乱流安定化

乱流の運動エネルギーは、非圧縮VOFソルバーにおいて、表面波下のほぼポテンシャル流領域において、位相界面および水柱全体で過剰に予測される。

この挙動は、乱流運動エネルギー方程式と乱流粘性場に補正を適用する新しいmultiphaseStabilizedTurbulence fvOptionを使用して補正されます。

を使って指定する:

multiphaseStabilizedTurbulence1
{
   type            multiphaseStabilizedTurbulence;
   active          yes;
   multiphaseStabilizedTurbulenceCoeffs

   {
       // Optional coefficients
       lambda2         0.1;   // A value of 0 sets the nut correction to 0
       Cmu             0.09;  // from k-epsilon model
       C               1.51;  // model coefficient from k-omega model
       alpha           1.36;  // 1/Prt
   }
}
Source code
$FOAM_SRC/fvOptions/sources/derived/multiphaseStabilizedTurbulence
References
  • Devolder, B., Rauwoens, P., and Troch, P. (2017). Application of a buoyancy-modified k-w SST turbulence model to simulate wave run-up around a monopile subjected to regular waves using OpenFOAM. Coastal Engineering, 125, 81-94.
  • Larsen, B.E. and Fuhrman, D.R. (2018). On the over-production of turbulence beneath surface waves in Reynolds-averaged Navier-Stokes models J. Fluid Mech, 853, 419-460
Attribution
  • OpenCFDによる実装
  • Turbulence Technical Committee、およびBjarke Eltard-LarsenとDavid Fuhrman(デンマーク工科大学)による有益な議論とコードテストに感謝する。

新しいk-epsilon-phit-f乱流モデル

Laurenceら, 2005)の研究に基づき、kEpsilonPhitFと名付けられた楕円緩和関数を用いた新しい3輸送方程式線形渦粘性RANS乱流クロージャーモデルが実装されました。

kEpsilonPhitFは、(Durbin, 1995)のv2-f手法に由来するkEpsilonベースのモデルである。v2-f手法の主な利点は、渦粘性モデルの最小限の定式化を維持しながら、線形渦粘性モデルとレイノルズ応力方程式モデルの中間を提供することであると報告されています。このことは、壁面距離や低レイノルズ数型の修正を行うことなく、壁面に向かって壁面法線速度スケールが放物線状に減衰することをシミュレーションに依存せずに再現できることに現れています。

しかし、v2-fモデルの大半は、特に壁境界において、v2場とf場の連成の定式化により、分離解法アルゴリズムでは数値的に厳しいことが判明した。

この欠点にもかかわらず、v2-fモデルは、さまざまな非平衡/非局所効果を示す流れ、強い圧力勾配、分離、衝突を伴う流れ、熱伝達を含む乱流場への変動圧力の影響など、幅広い一般的な流れの特性をうまく再現することが確認されている。

LienとKalitzin, 2001)によるv2-fモデル(すなわちOpenFOAMのv2fモデル)は、分離計算を可能にするためにオリジナルのv2-fモデルを再定義したものであるが、モデルの忠実度に関する多くの欠点が文献に報告されている。

v2-f手法の欠点を克服するために、v2-f手法は(Hanjali et al., 2004)と(Laurence et al., 2005)によって再評価され、同時に、スケールを等価な無次元形式に変換することによって、すなわち数値的な剛性を低減することによって再評価された。これらの変種は、オリジナルのv2-fモデルの理論的なモデルの忠実性を保持しながら、数値的なロバスト性と格子異常に対する鈍感性を提供すると考えられた。

kEpsilonPhitFモデルはベータ段階であることにご注意ください。今後、モデルの内部的な変更が行われる可能性もありますし、行われない可能性もあります。さらに、OpenFOAMで利用可能なv2fモデルは、kEpsilonPhitFまたは他のv2-fモデルのバリエーションに取って代わられる予定です。

kEpsilonPhitFモデルの実装は,平滑壁平面流路流(),ゼロ圧力勾配乱流平板,2次元後向きステップ,流路内2次元丘の正準流によって検証された.

例として、3つの検証プロットを以下に示す:

モデル方程式、実装、使用法に関するより詳細な情報は、(拡張コードガイドのkEpsilonPhitFセクション)にあります。

Source code
$FOAM_SRC/TurbulenceModels/turbulenceModels/RAS/kEpsilonPhitF
Tutorial
$FOAM_TUTORIALS/incompressible/simpleFoam/RAS/bump2D
Attribution
OpenCFD は、有益な議論と有益な示唆を与えてくれた Mirza Popovac 博士 (オーストリア工科大学) に感謝したい。

雪崩モデリング・モジュールの更新

冬が近づくにつれ、雪崩モデリング・モジュールでは、RAMMSモデル(Christen et al, 2010)の実装やMedinaモデルの安定性の改善など、巻き込みモデルの更新が行われた。

Source code
https://develop.openfoam.com/Development/openfoammodules/avalanche
Attribution
The avalanche code is developed by Matti Rauter

液体の新しい状態方程式

液体と固体のための逆多項式状態方程式rPolynomialはopenfoam.orgから統合され、以下の形式を持つ:

新しいオプションは、thermophysicalProperties辞書で次のように指定される:

thermoType
{
   type            heRhoThermo;
   mixture         pureMixture;
   transport       const;
   thermo          hConst;
   equationOfState rPolynomial; // new entry
   specie          specie;
   energy          sensibleInternalEnergy;
}

mixture
{
   specie
   {
       molWeight   18.0;
   }

   equationOfState
   {
       // Coefficients for the reciprocal polynomial equation of state
       C (0.001278 -2.1055e-06 3.9689e-09 4.3772e-13 -2.0225e-16);
   }

   thermodynamics
   {
       Cp          4195;
       Hf          0;
   }

   transport
   {
       mu          3.645e-4;
       Pr          2.289;
   }
}
Source code
$FOAM_SRC/src/thermophysicalModels/specie/equationOfState/rPolynomial
Tutorial
$FOAM_TUTORIALS/multiphase/compressibleInterFoam/laminar/depthCharge3D/constant/thermophysicalProperties.water
Attribution
モデルはopenfoam.orgから統合された。

境界条件

ニューウェーブ・モデル

このリリースでは、OpenFOAM v1812で導入されたwaveMaker条件を拡張し、パドルの数を選択して3次元波を生成します。3次元フラップ波生成の例を以下に示します。

Source code
$FOAM_SRC/waveModels/derivedPointPatchFields/waveMaker
Examples
$FOAM_TUTORIALS/multiphase/interFoam/laminar/waves/waveMakerMultiPaddleFlap $FOAM_TUTORIALS/multiphase/interFoam/laminar/waves/waveMakerMultiPaddlePiston
Attribution
これらの拡張機能はEnvironmental Hydraulics Institute IHCantabriaから提供されたもので、コミットd0c5662172を参照: ガブリエル・バラハス
Integration
このコードは OpenCFD によって統合されました - マージリクエスト 317 を参照してください。

新しい式に基づく境界条件

式が境界条件を満たす場所: exprFixedValue境界条件とexprMixed境界条件

これらの境界条件は、値、勾配、分数を式としてサポートする。例えば

outlet1
{
   type            exprFixedValue;
   value           $internalField;
   valueExpr       "0.5*(pInlet + pOutlet2)";
   variables
   (
       "pInletinlet = weightAverage(p)"
       "pOutlet2outlet2 = p"
   );
}
Tutorials
$FOAM_TUTORIALS/compressible/rhoPimpleFoam/RAS/TJunctionAverage

新しいスケール境界条件ラッパー

これは、任意の(固定値)境界条件に、時間または空間で変化するスケーリングを追加するためのラッパーです。uniformFixedValueのすべての機能が追加されています。下の例では、patch エントリを使用して指定された標準的な fixedValue 境界条件を変更し、scale エントリに従ってスケールを適用します。

<patchName>
{
   type            scaledFixedValue;
   scale table
   (
       (    0   0)
       (  1.0 1.0)
       (100.0 1.0)
   );

   patch
   {
       type            fixedValue;
       value           uniform (15 0 0);
   }
}

スケールの項目はPatchFunction1であり、以下のような複数のオプションがある:

  • constant
  • csvFile
  • mappedFile
  • polynomial
  • sampled
  • scale
  • sine
  • square
  • table
  • tableFile
  • uniformValue
Source code
$FOAM_SRC/finiteVolume/fields/fvPatchFields/derived/scaledFixedValue

後処理

パーティクルの後処理の改善

クラウドパッチ相互作用モデル

オプションでwriteToFileエントリーを使用して、パッチ相互作用の統計情報、例えば、くっついたり、逃げたりした粒子の数と質量をファイルに書き込みます。例として、localInteraction粒子パッチ相互作用モデルを使用する場合、新しいエントリーを次のように追加することができます:

localInteractionCoeffs
{
   patches

   (
       "(walls|cyc.*)"
       {
           type        rebound;
       }

       "inlet|outlet"
       {
           type escape;
       }
   );

   // New optional entry
   writeToFile     yes;
}
クラウド機能オブジェクト

空の場合、またはエントリーが指定されていない場合は、すべてのフィールドが書き込まれます(後方互換性を維持するため)。

patchPostProcessing1
{
   type            patchPostProcessing;
   // Optional new entry
   fields          (position "U.*" d T nParticle);
   maxStoredParcels 20;
   patches
   (
       cycLeft_half0
       cycLeft_half1
   );
}
Tutorial
$FOAM_TUTORIALS/lagrangian/reactingParcelFoam/filter

新しい双方向パーティクル・ストリームライン

StreamLinesとwallBoundedStreamLines関数オブジェクトが拡張され、シードポイントからの双方向トラッキングが可能になりました。さらに、wallBoundedStreamlines関数オブジェクトが境界面ごとに複数のトラックをサポートするようになりました。

この新機能は、(以前のリリースのtrackForwardフラグの代わりに)新しいdirectionキーワードで有効にすることができる:

U               U;
direction       bidirectional; // or forward/backward
fields         (U p);

次の画像は、2組のファンクションオブジェクトが必要だった以前の動作を示している:

Source code
$FOAM_SRC/functionObjects/field/streamLine

サーフェス関数オブジェクトへの新しい距離

新しいsurfaceDistance関数オブジェクトは、指定されたジオメトリまでの距離を示すフィールド(volScalarField)を生成します。これは、メッシュの解像度が不十分で隙間にメッシュが入らないなどのメッシュの問題を検出するために使用できます。

  • サーフェスの指定は、snappyHexMeshおよびfoamyHexMeshと互換性のあるジオメトリ・エントリを介して行われます。
  • 特定のサーフェスに限定せず、あらゆるサーフェスで最も近いサーフェスを見つける。
  • デフォルトでは、すべてのセル・センターについて最も近いセルも見つける。これはオプションのdoCells booleanフラグをオフにすることで抑制できる。
  • 境界上の値は、面の中心からの距離になります。

system/surfaceDistance辞書のサンプル:

surfaceDistance
{
   // Where to load it from
   libs            (fieldFunctionObjects);
   type            surfaceDistance;
   geometry
   {
       motorBike.obj
       {
           type triSurfaceMesh;
       }
   }
}

これは、例えばpostProcessで使用できる:

postProcess -func surfaceDistance
Source code
$FOAM_SRC/functionObjects/field/surfaceDistance

Parallel

Updated file modification skew

When running a parallel case on multiple nodes the processor directories are usually accessed using a network filing system, e.g. NFS. This might have a non-trivial amount of latency to see changes to e.g. dictionaries. For this purpose there is in etc/controlDict

fileModificationSkew 10;

which is the number of seconds of file-modification-time difference before a dictionary is seen as having been changed. The second use is in dynamically compiled code, e.g. through the #codeStream dictionary entry or coded functionObject. Here it is the amount of time waiting for the resulting library in the dynamicCode/ sub-dictionary to become available. However, in some cases the file server might have a large delay so this fileModificationSkew has to be set to the maximum expected value.

In this release the behaviour has been changed in that there is an additional control

maxFileModificationPolls 100;

which is the maximum number of times the code checks after waiting fileModificationSkew seconds. With this behaviour the fileModificationSkew can now be set to a much lower value (minimum 1).

This above problem is only relevant for NFS mounted disks and multi-node runs. Single-node runs will have a consistent view of the files for all cores so if the master has finished compiling the code the slaves will see the same code.

For distributed runs, e.g. using different roots for different cores - see the $FOAM_TUTORIALS/IO/fileHandler tutorial. Here the code needs to be compiled on all cores anyway so there should be no synchronisation problem.

Updated ADIOS2 function object

The adiosWrite function object has been rewritten to use the ADIOS2 library for parallel IO and is now available as a regular OpenFOAM module

The implementation supports checkpointing and restart read more...

More tests at scale are required and will be conducted as part of the activities of the HPC Technical Committee

Portability

New binary file compatibility

OpenFOAM-v1912 now handles binary reading of different precision or label sizes to support workflows with mixed compilations of OpenFOAM.

One such workflow could be the following:

  • Meshing with snappyHexMesh in double precision.
  • Single precision for aerodynamics (for reduced memory bandwidth)
  • Further calculation with chemistry (double precision)

This is now possible with binary formatted OpenFOAM files, provided that they contain the necessary size information in their header. For example,

FoamFile

{

   version     2.0;

   format      binary;

   arch        "LSB;label=32;scalar=64";

   class       vectorField;

   object      points;

}

Binary files generated with OpenFOAM-v1612 and later will already contain this information and can be used.

Note that when narrowing the data range e.g. 64-bit label width to 32-bit label width, any range overflows will be truncated.