737
回編集
(→数値演算) |
|||
1,028行目: | 1,028行目: | ||
ガバナンスの下で開発:Mark Olesen、Simone Bna、Stefano Zampiniが参加するHPC技術委員会によって作成されました。 | ガバナンスの下で開発:Mark Olesen、Simone Bna、Stefano Zampiniが参加するHPC技術委員会によって作成されました。 | ||
== ソルバーと物理モデル == | |||
=== サーマルバッフルの改良 === | |||
compressible::thermalBaffle温度境界条件は、流体領域に隣接する熱を意識した固体領域(バッフル)を作成するために使用されます。これは、固体内のエネルギー方程式を解き、流体に結合するために必要なすべての情報を提供します。 | |||
以前のバージョンでは、thermalBaffleModel は外部流体パッチでは使用できませんでした。今回のリリースでは、任意の伝達熱ソルバーを使用して共役熱伝達(CHT)ケースを作成し、パッチから押し出すことができるようになりました。 | |||
条件は、温度、Tフィールド境界で指定され、要求されます。 | |||
固体のthermoTypeモデル | |||
固体混合型 | |||
ほうしゃせんモデル | |||
メッシュ押出しモデル | |||
以下の図は、主な流体領域と固体領域を示している。ここで、固体領域は、流体のトップパッチから押し出された。 | |||
<syntaxhighlight> | |||
type compressible::thermalBaffle; | |||
// Solid baffle region name | |||
region baffle3DRegion; | |||
Tnbr T; | |||
kappaMethod fluidThermo; | |||
// Is this baffle internal | |||
internal true; | |||
// Solid thermo | |||
thermoType | |||
{ | |||
type heSolidThermo; | |||
mixture pureMixture; | |||
transport constIso; | |||
thermo hConst; | |||
equationOfState rhoConst; | |||
specie specie; | |||
energy sensibleEnthalpy; | |||
} | |||
// Solid mixture | |||
mixture | |||
{ | |||
specie | |||
{ | |||
molWeight 20; | |||
} | |||
transport | |||
{ | |||
kappa 0.01; | |||
} | |||
thermodynamics | |||
{ | |||
Hf 0; | |||
Cp 15; | |||
} | |||
equationOfState | |||
{ | |||
rho 80; | |||
} | |||
} | |||
// Radiation Model | |||
radiation | |||
{ | |||
radiationModel opaqueSolid; | |||
absorptionEmissionModel none; | |||
scatterModel none; | |||
} | |||
// Extrude model | |||
extrudeModel linearNormal; | |||
nLayers 50; | |||
expansionRatio 1; | |||
columnCells false; | |||
linearNormalCoeffs | |||
{ | |||
thickness 0.1; | |||
} | |||
</syntaxhighlight> | |||
このパッチから押し出されるバッフルが流体領域の内部か外部かを制御する新しいキーワード項目 internal に注意してください。internal オプションが false の場合は、bottom という名前のカップリングソリッド/T が必要ですが、これも compressible::thermalBaffle 型でなければなりません。 | |||
ソースコード | |||
$FOAM_SRC/regionModels/thermalBaffleModels/derivedFvPatchFields/thermalBaffle | |||
チュートリアル | |||
フォーム_TUTORIALS/熱伝達/buoyantSimpleFoam/roomWithThickCeiling | |||
=== 粒子注入境界のハンドリングの改善 === | |||
致命的なエラーを発生させるのではなく、ドメイン外に位置する粒子注入を単に無視するかどうかを柔軟に指定できるようになりました。これは、例えば、ドメインジオメトリが計算セットアップに完全に対応していない場合に、粒子の位置を初期化するために実験データセットを使用する場合などに便利です。 | |||
このオプションは、粒子注入モデルを指定する際に含まれます。 | |||
<syntaxhighlight> | |||
model1 | |||
{ | |||
type reactingMultiphaseLookupTableInjection; | |||
... | |||
// New entry to allow out of bounds | |||
ignoreOutOfBounds yes; | |||
} | |||
</syntaxhighlight> | |||
この機能を有効にすると、範囲外として識別された注入位置の数がソルバーのログに報告されます。 | |||
ソースコード | |||
$FOAM_SRC/lagrangian/intermediate/submodels/Kinematic/InjectionModel/InjectionModel | |||
== 新しいウェーバー数雲関数オブジェクト == | |||
新しいWeberNumberクラウド関数オブジェクトは、シミュレーションの書き込み時間に粒子のウェーバー数を計算し、ディスクに書き込みます。このフィールドは、<time>/lagrangian/<cloudName>/Weの'標準'クラウドフィールドとして書き込まれ、ParaViewなどを使用した後処理のために利用可能です。 | |||
クラウド関数オブジェクトは、定数/<cloudName>Properties<i>ファイルで次のように指定します。 | |||
<syntaxhighlight> | |||
cloudFunctions | |||
{ | |||
WeberNumber1 | |||
{ | |||
type WeberNumber; | |||
} | |||
... | |||
} | |||
</syntaxhighlight> | |||
次の例は、aachenBombチュートリアルの場合で、粒子の色がウェーバー数とキャリアのベオシティマグニチュードによって決定されています。 | |||
ソースコード | |||
$FOAM_SRC/lagrangian/intermediate/submodels/CloudFunctionObjects/WeberNumber | |||
チュートリアル | |||
foam_tutorials/lagrangian/sprayFoam/aachenBomb | |||
=== 改良されたCurle関数オブジェクト === | |||
OpenFOAM v1706でリリースされたCurle関数オブジェクトは、近距離音場項を含むようになり、ユーザー定義のリストまたはサーフェスに基づいて点のセットの音圧を計算するようにリファクタリングされました。 | |||
点モードを使用する場合、エントリにはオブザーバーの位置のリストが含まれます。 | |||
<syntaxhighlight> | |||
CurlePoints | |||
{ | |||
type Curle; | |||
libs (fieldFunctionObjects); | |||
... | |||
patches (surface1 surface2); | |||
c0 330; | |||
input points; | |||
observerPositions | |||
( | |||
(0 0 0) | |||
(1 0 0) | |||
... | |||
(x y z) | |||
); | |||
} | |||
</syntaxhighlight> | |||
サーフェスモードでは、入力サーフェスの面の中心がオブザーバーの位置を表します。出力はサーフェスフォーマットまたはプレーンテキストファイルに書き戻すことができます。 | |||
<syntaxhighlight> | |||
CurleSurface | |||
{ | |||
type Curle; | |||
libs ("libfieldFunctionObjects.so"); | |||
... | |||
patches (surface1 surface2); | |||
c0 330; | |||
input surface; | |||
surface "inputSurface.obj" | |||
// Output - either points or surface | |||
output points; | |||
//output surface; | |||
//surfaceType ensight; | |||
} | |||
</syntaxhighlight> | |||
下の画像はvortexShedチュートリアルケースの例で、左側には表面形状が白で表示されています(速度マグニチュード予測を重ねて表示)。 | |||
点と表面の両方の出力は、ノイズユーティリティによってサポートされており、例えば、ここでは約0.1Hzであることが示されているように、渦の放出周波数を強調するために使用することができます。 | |||
Source code | |||
$FOAM_SRC/functionObjects/field/Curle | |||
Tutorial | |||
$FOAM_TUTORIALS/incompressible/pimpleFoam/LES/vortexShed | |||
=== 改良された多相位相変化モデリング === | |||
相変化非圧縮性ソルバーinterCondensatingEvaporatingFoamとicoReactingMultiphaseInterFoamが改良されました。 | |||
新しいinterfaceHeatResistance相変化モデル | |||
温度方程式の半暗黙の処理 | |||
インタフェース面積密度のための isoCutCell メソッドの使用 | |||
ダイナミックメッシュの使用 | |||
新しいinterfaceHeatResistance相変化モデルでは、拡散ソース分布法を使用しています(参考文献参照)。 | |||
相変化ソースは、質量移動率を滑らかにするために、シャープな界面に広がっています。質量移動率は次のように計算される。 | |||
ここで | |||
Aiは界面面積密度 | |||
ツァット飽和温度 | |||
L潜熱 | |||
このモデルでは、等値面の位置はエントリisoAlphaによって制御することができます。 | |||
さらに、特にソルバー icoReactingMultiphaseInterFoamでは、新しいオプションが利用可能になりました。 | |||
相変化モデルにより柔軟性を持たせるために、相変化による体積変化を含めるか無視するかの新しいオプションが利用可能になりました(includeVolChange) | |||
ソルバーicoReactingMultiphaseInterFoamでは、質量交換モデルkineticGasEvaporationがより強固なものになりました。 | |||
これらのモデルの使い方は、以下のリンク先で見ることができます。 | |||
ソースコード | |||
$FOAM_SOLVERS/multiphase/icoReactingMultiphaseInterFoam | |||
$FOAM_SOLVERS/multiphase/interCondensatingEvaporatingFoam | |||
チュートリアル | |||
foam_tutorials/multiphase/icoReactingMultiPhaseInterFoam/poolEvaporationのmultiphase/icoReactingMultiPhaseInterFoam/poolEvaporation | |||
$FOAM_TUTORIALS/verificationAndValidation/icoReactingMultingMultifaseInterFoam/stefanProblem | |||
$FOAM_TUTORIALS/verificationAndValidation/interCondensatingEvaporatingFoam/stefanProblem | |||
参考文献 | |||
Hardt, S., Wondra, F.(2008). ソースタームの連続体場表現に基づく界面流の蒸発モデル Journal of Computational Physics 227 (2008), 5871-5895 | |||
帰属 | |||
interfaceHeatResistanceの実装はHenning Scheufler氏の貢献です。 | |||
=== 新しい改良された isoAdvector ベースのモデリング === | |||
このバージョンでは、isoAdvectorメソッドが更新され、新しいサブモデルとメソッドが追加されました。 | |||
新しい再構成法: isoAlpha, plicRDF, gradAlpha | |||
interIsoFoamソルバーの圧縮可能な定式化、compressibleInterIsoFoam | |||
適応的なメッシュ精密化のための改良されたアルファ補間スキーム | |||
sampledSurfacesに基づくピースワイズ線形インターフェース構築(PLIC)のための後処理関数 | |||
最も重要な更新は、新しく開発された再構築スキームに関するものです(参考文献参照)。 | |||
再構成法isoAlphaは非構造格子ではうまく機能しないことがわかりました。新しく開発された手法であるplicRDFは、非構造格子上での法線方位計算を改善し、非構造格子が存在する場合にはより良い選択が可能となりました。 | |||
新しいトップレベルソルバーcompressibleInterIsoFoamは、圧縮性のある流れを扱うように設計されています。このソルバーと非圧縮性ソルバーは、Automated Mesh refinement (AMR)と連動します。 | |||
'''使用方法''' | |||
再構成スキームは、isoAdvector スキームを用いてアドベクタされた変数の fvSolution に以下のように指定されています。 | |||
<syntaxhighlight> | |||
"alpha.water.*" | |||
{ | |||
nAlphaCorr 1; | |||
nAlphaSubCycles 1; | |||
cAlpha 1; | |||
reconstructionScheme plicRDF; | |||
vof2IsoTol 1e-8; | |||
surfCellTol 1e-6; | |||
nAlphaBounds 3; | |||
snapTol 1e-12; | |||
clip true; | |||
} | |||
</syntaxhighlight> | |||
以下の動画は、isoAdvector法を用いた新しい圧縮可能なInterIsoFoamとMULESを用いた圧縮可能なInterFoamについて、deepthCharge3Dの場合に得られた結果を比較したものです。 | |||
ソースコード | |||
$FOAM_SOLVERS/multiphase/compressibleInterFoam | |||
チュートリアル | |||
$FOAM_TUTORIALS/multiphase/interIsoFoam/damBreakWithObstacle | |||
$FOAM_TUTORIALS/multiphase/compressibleInterIsoFoam/laminar/depthCharge3 | |||
参考文献 | |||
Henning Scheufler と Johan Roenby. "一般的なメッシュ上の体積分率データからの正確で効率的な表面再構成" Journal of Computational Physics (2019), doi: 10.1016/j.jcp.2019.01.009. | |||
帰属 | |||
この実装は、Henning Scheufler(DLR)とJohan Roenby(DHI)によって実施されました。 | |||
統合 | |||
統合はOpenCFD Ltdが著者からの寄稿を受けて実施した。 | |||
=== 新しいパイプライン型共役グラジエントソルバー === | |||
共役勾配(CG)ソルバーを並列に実行する場合、すべてのプロセッサが同じ探索方向を使用する必要があります。これにはグローバルリダクション (MPI_Allreduce) が必要です。多数のコアでは、これがスケーリングのボトルネックになるかもしれません。 | |||
この問題を回避するために、2つの新しい線形ソルバーが導入されました。 | |||
スカラの3つのグローバルリダクションを3つのスカラに対して1つのリダクションに置き換える(オーバーヘッドを減らす) | |||
これらのグローバルな削減は、'ハロスワップ' (隣接するプロセッサとの通信のみ) とのオーバーラップを可能にします。 | |||
多数のコアでは、これがスケーリングの助けになるかもしれません。この方法の欠点は、以下の点です。 | |||
演算数の増加 | |||
必要なメモリを増やす | |||
'''Pipelined Preconditioned Conjugate Gradient solver (PPCG)''' | |||
新しいソルバーの最初のものは、既存のPCGソルバーをパイプラインフレームワークに再構築したものです。切り捨て誤差の違いを除けば、既存のPCGソルバーと全く同じ動作をします。単純なケースでは、残差と反復回数は同じでなければなりません。 | |||
'''パイプライン化された前提条件付き共役残基ソルバー(PPCR)''' | |||
これは、前提条件付き変数の消去方向をベースにしたPPCGソルバーを修正したものです。これは、最初の反復でわずかに良い残差の振る舞いを示しますが、通信の重複が少なくなります。詳細については、上記の参考文献を参照してください。このソルバーは、例えば非圧縮性/pisoFoam/LES/motorBikeチュートリアルのように、緩い許容範囲でGAMGソルバーの最も粗いレベルを解くために使用すると面白いでしょう。 | |||
<syntaxhighlight> | |||
pFinal | |||
{ | |||
$p; | |||
relTol 0; | |||
// Explicit specify solver for coarse-level correction to override | |||
// solution tolerance | |||
coarsestLevelCorr | |||
{ | |||
solver PPCR; | |||
preconditioner DIC; | |||
relTol 0.05; | |||
} | |||
} | |||
</syntaxhighlight> | |||
純粋に一番粗いレベルの解を見ている(一番粗いレベルを解くのに必要なスイープ数の全体)。 | |||
== | PPCRソルバーは掃引回数が少なくて済みますが、時折トップレベルのGAMGサイクルをより多く必要とするため、粗いレベルのソルバーの呼び出し回数が多くなります。全体的な統計量。 | ||
注意事項。 | |||
シミュレーションは一度しか実行されていないため、タイミングは代表的なものではありません。 | |||
シミュレーションは同じノードの8コアで実行され、インターコネクトは使用されませんでした。 | |||
シミュレーションの統計量は比較されませんでしたが、ソルバーの選択以外はケースの設定に変更はありませんでした。 | |||
ソースコード | |||
$FOAM_SRC/OpenFOAM/マトリックス/lduMatrix/ソルバー/PPCG/PPCG.C | |||
$FOAM_SRC/OpenFOAM/マトリックス/lduMatrix/ソルバー/PPCG/PPCR.C | |||
参考文献 | |||
Ghysels, P., and Vanroose, W. (2014). 前提条件付き共役勾配アルゴリズムにおけるグローバル同期遅延の隠蔽. 並列コンピューティング, 40(7), 224-238. | |||
=== パーティクルを除去するための新しい雲関数オブジェクト === | |||
新しいremoveParcelsクラウド関数オブジェクトでは、事前に定義されたフェースゾーンに到達したパーティクルを削除することができます。これは、パーティクルが関心を持たなくなり、ドメイン境界を抜けるまで追跡されたり、他の方法で排除されたりして貴重なリソースを消費する場合に有益です。例えば、雨のシミュレーションでは、エアフィルターに到達したパーティクルだけが関心を持つことになります。 | |||
removeParcelsオブジェクトは以下のように指定できます。 | |||
<syntaxhighlight> | |||
cloudFunctions | |||
{ | |||
removeParcels1 | |||
{ | |||
type removeParcels; | |||
log yes; | |||
resetOnWrite no; | |||
resetOnStart no; | |||
faceZones (cycLeftcycRight); | |||
} | |||
} | |||
</syntaxhighlight> | |||
アクティブにすると、オブジェクトは、面ゾーンごとに除去された小包の数と質量をレポートします。 | |||
<syntaxhighlight> | |||
removeParcels1 output: | |||
faceZonecycLeft: removed 994 parcels with mass 0.009817407917 | |||
faceZonecycRight: removed 0 parcels with mass 0 | |||
</syntaxhighlight> | |||
ファイルにも同じ情報が保存されています。 | |||
postProcessing/lagrangian/<cloudName>/<objectName>/0/removeParcels<faceZoneName>.dat | |||
ソースコード | |||
$FOAM_SRC/lagrangian/intermediate/submodels/CloudFunctionObjects/RemoveParcels | |||
=== 大型構造物の一括点移動を改善 === | |||
このリリースでは、OpenFOAMによる構造物の外部結合を拡張しています。塊点法は、CFDメッシュよりもはるかに、はるかに粗く、流体領域よりもはるかに遅い動きを持つFEAモデルで、大規模な構造物の流体-構造-相互作用を扱うために考案されました。このため、与えられたジオメトリ | |||
は、その「リギング」によって定義されますが、これは、ポイントの塊と接続性の観点から定義されたモーションコントローラです。これらは、動きの「骨格」と考えることができます。 | |||
モーションコントローラは、補間の影響を定義するためにメッシュパッチに関連付けられています。 | |||
リギング上の塊点を移動させると、パッチ点が移動し、これがメッシュモーションソルバーの境界条件に使用されます。注:リギングの変位とブリッジの変位はともに誇張されたスケールで表示されています。 | |||
ソースコード | |||
$FOAM_APP/applications/utilities/postProcessing/lumped | |||
$FOAM_SRC/lumpedPointMotion | |||
チュートリアル | |||
$FOAM_TUTORIALS/incompressible/lumpedPointMotion/bridge | |||
$FOAM_TUTORIALS/incompressible/lumpedPointMotion/building | |||
=== 雪崩と泥のスライドツールを新しく更新しました。 === | |||
このリリースには、雪崩コミュニティサブモジュールの多くの更新が含まれています。 | |||
新しい物理モデル(ソルバー)faParkerFukushimaFoam(Parker et al. 1986; doi.org/10.1017/S0022112086001404に基づく)濁流のシミュレーション(Kate Heeremaとの共同研究、itn-slate.euの支援を受けています。 | |||
地理空間データフォーマットの統合が改善されたことで、QGISなどの地理情報システムでの簡単なケース設定、地理参照結果、後処理が可能になりました。) | |||
有限領域フィールドに地理空間ベクトルデータ(ESRI(R)シェイプファイル)と地理空間ラスタデータ(ESRI(R)ガー ド)を直接インポートするための改良されたユーティリティ releaseAreaMapping | |||
地理空間の地形/地形データからジオメトリ(STLファイル)を生成するための新しいユーティリティgridToSTL | |||
新機能オブジェクト shapefile有限領域フィールドを地理空間ベクトルデータとしてエクスポートするための書き込み(ESRI(R)シェイプファイル | |||
新機能オブジェクト gridfile有限領域のフィールドを地理空間ラスタデータとしてエクスポートするための書き込み(ESRI(R)ガード) | |||
ソースコード | |||
$WM_PROJECT_DIR/modules/avalanche | |||
帰属 | |||
Matthias Rauter, ノルウェー地質研究所 | |||
== 境界条件 == | == 境界条件 == |