737
回編集
527行目: | 527行目: | ||
volScalarField(..., dimensionedScalar(somedims, one{})) | volScalarField(..., dimensionedScalar(somedims, one{})) | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== patterns === | |||
これはOpenFOAMのコーディングパターン集の最初のスタートです。 | |||
コーディングパターンとは、頻繁に遭遇するイディオムのことで、理由がすぐには明らかではない場合や、特定のアプローチを使うことにメリットがある場合を指します。 | |||
有志の方からのコンテンツを取り入れることができるのは嬉しいですね! | |||
今のところ、特に構成はありませんが、将来的にはコンテンツを追加していくことで改善していきたいと考えています。 | |||
== 前処理 == | == 前処理 == | ||
=== blockMesh ユーティリティの改善 === | |||
blockMesh は、より高速なトポロジカルマージを使用するようになり、高アスペクト比メッシュでよりよく機能するようになりました。ポイントベースのマージが望ましい場合は、コマンドラインで指定された blockMeshDict または blockMesh -merge-points に mergeType points; を追加することができます。 | |||
新しいblockMesh -write-vtkオプションはblockTopology.vtuファイル(VTK、ASCII、XML)を生成し、ParaViewでロードして検査することができます。これにより、追加のプラグインを必要とせずに、どのバージョンのParaViewでもblockMesh構造を直接検査できるシンプルで堅牢な方法が提供されます。 | |||
=== blockMeshを使用した重複バッフルの生成 === | |||
このリリースでは、blockMesh ユーティリティを拡張し、重複バッフルを生成する機能を提供します。これらは、面領域が体積保存に従うように操作された重複した面です。例えば、cyclicACMIパッチでは、壁のビヘイビアを提供するパッチと多対多の連成ビヘイビアを提供するパッチがあります。 | |||
blockMeshDict はこれらの重複バッフルを直接指定できるようになりました。 | |||
<syntaxhighlight> | |||
ACMI1_couple | |||
{ | |||
type cyclicACMI; | |||
neighbourPatch ACMI2_couple; | |||
nonOverlapPatch ACMI1_blockage; | |||
faces | |||
( | |||
(2 6 5 1) | |||
); | |||
} | |||
ACMI1_blockage | |||
{ | |||
type wall; | |||
faces | |||
( | |||
(2 6 5 1) | |||
); | |||
} | |||
ACMI2_couple | |||
{ | |||
type cyclicACMI; | |||
neighbourPatch ACMI1_couple; | |||
nonOverlapPatch ACMI2_blockage; | |||
faces | |||
( | |||
(8 12 15 11) | |||
); | |||
} | |||
ACMI2_blockage | |||
{ | |||
type wall; | |||
faces | |||
( | |||
(8 12 15 11) | |||
); | |||
} | |||
</syntaxhighlight> | |||
これにより、1つは結合挙動(ACMI1_couple, ACMI2_couple)で、もう1つは壁挙動(ACMI1_blockage, ACMI2_blockage)で重複したバッフルが生成されます。メッシュ生成時に警告が出力されます。 | |||
<syntaxhighlight> | |||
Trying to specify a boundary face on the face on cell | |||
which already belongs to some other patch | |||
</syntaxhighlight> | |||
というのも、1つは16角形(6面)の形状に7面(2面は重複)を指定しているからです。 | |||
このトポロジーを生成する「古い」メソッドでは、createBafflesを別のcreateBafflesDictで使用しています。 | |||
注意。 | |||
不本意ながら blockMesh が重複した境界面を定義した場合、これは以前の致命的なエラーではなく警告となります。重複した内部面を定義すると、以前と同様に致命的なエラーが発生します。 | |||
新しい blockMesh メソッドを使用すると、パッチの順序が少し変わるかもしれません (パッチエンプティが最後になりました)。これにより、セルの中心やセルの体積などの幾何学的なプリミティブ計算では、わずかに異なる切り捨てエラーが発生し、結果にわずかに影響を与える可能性があります。これは浮動小数点値を使用するすべてのアルゴリズムの一般的な問題であり、blockMesh メソッドは実際にはより一貫したパッチの順序を使用しており、パッチエンプティが最後になるはずです。 | |||
ソースコード | |||
FOAM_SRC/OpenFOAM/meshes/polyMesh/polyMeshFromShapeMesh.C | |||
チュートリアル | |||
$FOAM_UTILITIES/incompressible/pimpleFoam/RAS/oscillatingInletACMI2D | |||
=== 新ランプ機能1 === | |||
このリリースには、Function1修飾子としてシンプルなステップ関数が含まれています。これは、オフからオンへの移行にステップ変更が必要な場合に便利であり、継続時間の規定もあります。例としては、WindshieldCondensationチュートリアルで、入口速度場を制御するために使用されています。 | |||
<syntaxhighlight> | |||
// Heater on at 60s | |||
inlet | |||
{ | |||
type uniformNormalFixedValue; | |||
uniformValue constant -2; | |||
ramp | |||
{ | |||
type step; | |||
start 60; | |||
duration 1000; | |||
} | |||
} | |||
</syntaxhighlight> | |||
これは、60秒でオンになる通常のインレット速度を指定します。 | |||
古いバージョンでは、これは比較的シャープな遷移を持つ表として指定することができましたが、この方法では目立ちにくく、値や時間点を調整する際に入力エラーが発生しやすくなります。 | |||
ソースコード | |||
$FOAM_SRC/OpenFOAM/primitives/関数/Function1/step | |||
チュートリアル | |||
FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/windshieldCondensation | |||
=== Function1の新表現版 === | |||
Function1型は、OpenFOAM-v1912で追加された式のインフラストラクチャを使用して、ユーザー定義の式を含むように拡張されました。これらの式では、評価引数は擬似関数 arg()として参照され、例えば、WindshieldCondensationチュートリアルでは入口温度を制御するために使用されます。 | |||
<syntaxhighlight> | |||
// Heater on at 60s | |||
inlet | |||
{ | |||
type uniformFixedValue; | |||
uniformValue | |||
{ | |||
type expression; | |||
// arg() is time here | |||
expression #{ (arg() < 60) ? 273 : 308 #}; | |||
} | |||
} | |||
</syntaxhighlight> | |||
これは、60秒での入口温度の単純なステップ変化を指定しています。 | |||
ソースコード | |||
$FOAM_SRC/OpenFOAM/expressions/Function1 | |||
チュートリアル | |||
FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/windshieldCondensation | |||
=== PatchFunction1の新しい表現バージョン === | |||
PatchFunction1のランタイム入力選択には、空間的にも時間的にも変化する値に対してユーザーが定義した式を可能にする式バージョンが含まれるように拡張されました。空間的な変化には、通常、顔の中心位置のためのpos()関数が含まれます。 | |||
<syntaxhighlight> | |||
inlet | |||
{ | |||
type uniformFixedValue; | |||
uniformValue | |||
{ | |||
type expression; | |||
// arg() and time() can be used synonymous here | |||
expression #{ time() <= 1 ? 1 : 0 #}; | |||
} | |||
} | |||
</syntaxhighlight> | |||
ソースコード | |||
$FOAM_SRC/finiteVolume/expressions/PatchFunction1 | |||
チュートリアル | |||
$FOAM_TUTORIALS/multiphase/MPPICInterFoam/twoPhasePachuka | |||
=== 新しいコード化されたPatchFunction1 === | |||
PatchFunction1のランタイム入力選択は、コード化されたバージョンを含むように拡張されており、例えば、0/Uフィールド定義のicoFoamの蓋駆動チュートリアルでは、コード化されたバージョンが含まれています。 | |||
<syntaxhighlight> | |||
type uniformFixedValue; | |||
uniformValue | |||
{ | |||
type coded; | |||
// Explictly supply name of generated PatchFunction1. Only needed | |||
// if entryname ('uniformValue') would clash with existing | |||
// runtime selection tables. | |||
name myExpression; | |||
code | |||
#{ | |||
const polyPatch& pp = this->patch(); | |||
const fvMesh& fvm = dynamic_cast<const fvMesh&> | |||
( | |||
pp.boundaryMesh().mesh() | |||
); | |||
const fvPatch& fvp = fvm.boundary()[pp.index()]; | |||
// Get face centroids | |||
tmp<vectorField> tfld(tmp<vectorField>::New(fvp.Cf())); | |||
// Zero out y,z | |||
tfld.ref().replace(vector::Y, Zero); | |||
tfld.ref().replace(vector::Z, Zero); | |||
return tfld; | |||
#}; | |||
} | |||
</syntaxhighlight> | |||
これは、面の中心に応じてx成分が設定されるベロシティを提供します。 | |||
ソースコード | |||
$FOAM_SRC/meshTools/PatchFunction1/CodedField | |||
チュートリアル | |||
$foam_tutorials/multiphase/icoReactingMultiPhaseInterFoam/poolEvaporationのmultiphase/icoReactingMultiPhaseInterFoam/poolEvaporation | |||
=== snappyHexMesh: ギャップの絞り込み制御を無効にするようにしました。 === | |||
snappyHexMeshには、小さな隙間を自動的に絞り込むオプションがあります。このバージョンでは、同じ曲面からのギャップに対して、オプションでこのオプションを無効にすることができます。これは、例を見ていただくとわかりやすいと思います。 | |||
<syntaxhighlight> | |||
refinementRegions | |||
{ | |||
refinezone | |||
{ | |||
mode inside; | |||
levels ((0.0 0)); // Dummy entry | |||
gapLevel (4 0 10); // Guarantee 4 cells in all gaps | |||
gapMode outside; // If the gap is on the outside of the surface | |||
gapSelf false; // Disable any refinement from same surface | |||
} | |||
} | |||
</syntaxhighlight> | |||
snappyHexMeshDict辞書の上記のエントリは、次のことを確実にします。 | |||
ギャップ内に少なくとも4層のセルがあること | |||
ここで,ギャップは任意の場所にあり,法線を外側に向けた2つの反対側の面があります: gapMode outside. | |||
であり、サーフェスが異なる場合は gapSelf false となります。 | |||
ジオメトリは球体(緑)と(不要な)ギャップ(ピンク)のある「正方形」です。self」ギャップ検出を無効にすると、メッシュは(洗練のみ、スナップなし)になります。 | |||
これは、ギャップリファインメントのためにギャップを介してブリードするデフォルトの方法と比較してください。 | |||
ソースコード | |||
$FOAM_SRC/mesh/snappyHexMesh/meshRefinement/meshRefinementGapRefine.C | |||
詳細情報 | |||
1463号を参照 | |||
== 数値演算 == | == 数値演算 == | ||
=== 改良された任意メッシュインターフェース (AMI) === | |||
== 見出し文 == | |||