OpenFOAM v2212 リリースノート

提供:オープンCAEWiki OpenCAE Wiki
ナビゲーションに移動 検索に移動

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

OpenFOAMは、OpenCFDによってGPLライセンスの下で配布されています。様々なLinuxや他のPOSIXシステムでのコンパイルに適したソースコードパッケージに加え、このリリースでは、コンパイル済みのバイナリパッケージも多数用意されています。

Ubuntu Linux: Ubuntu 22.04 (LTS), 20.04 (LTS), 18.04 (LTS), 22.10 用のパッケージインストール。

openSUSE Linux: Leap15.4、Leap15.3用パッケージインストール。

Redhat Linux variants: CentOS/Rocky 8, 7 および Fedora 37, 36, 35, ...用のパッケージインストール。

Windowsユーザは、プリコンパイルされたパッケージについて、3つのオプションがあります(詳細)。

Windows Subsystem for Linux(Ubuntu、openSUSEなどベース)を使用する。

クロスコンパイルされたネイティブな実行ファイル

dockerによるインストール

OpenFOAMのコンテナサポートは、プリ・アセンブルされたイメージではなく、記述ファイルによって提供されます。

パッケージング/コンテナ参照

Mac OSXユーザーは、ソースからコンパイルするか、コンパイル済みのパッケージのDockerコンテナを使用するかのオプションがあります(詳細)。

v2212 User Upgrade Guide

行動の変化

timeActivatedFileUpdate(タイムアクティベートファイルアップデート

timeActivatedFileUpdate では、ファイルが見つからない場合、Critical エラー (FatalIOError) として扱われるようになりました。以前は単純なエラー (FatalError) として扱われ、functionObject をロードするときのみ Warning にダウングレードされ、設定エラーに気づかないことを意味しました。

Spalart-Allmaras DESモデル

SpalartAllmarasベースのDESモデルでは、以前アクティブであったft2項はデフォルトで非アクティブになりました。その活性化は、新しいオプションのft2項(デフォルトではfalse)を使って管理することができます。

Input Dictionaries

力、力係数

binModels、forceの優先順位をより一貫して取り扱うようにしました。ディクショナリーがオーバースペックな場合、CofR ショートカットよりも高い優先順位を coordinateSystem エントリーに与えるようにしました。

合理化改善

流線形の取り扱いの一部がさらに改良されました(例:補間におけるx/y/zの代わりにバリセントリック座標)。その過程で、入力要件が緩和されました。

  • デフォルトのトラッキング方向は'forward'です。
  • U(速度)フィールドはサンプリングされたフィールドに名前を付ける必要がありません。

座標系の扱いを改善

座標系定義がサブディクショナリースコープ内に組み込まれている場合、原点キーワードはオプションになりました。例えば

dict1
{
    coordinateSystem
    {
        origin (0 0 0);  // now optional here
        rotation ...;
    }
}

しかし、サブディク トなしで構築された場合は、必須であることに変わりはない。例えば

dict2
{
    origin (0 0 0);   // still mandatory
    e1  (1 0 0);
    e3  (0 0 1);
}

この変更により、transform サブディクショナリはより自然に記述できるようになりました。

formatOptions
{
   vtk
   {
       scale 1000;  // m -> mm
       transform
       {
           rotationCentre  (1 0 0);
           rotation axisAngle;
           axis    (0 0 1);
           angle   -45;
       }
   }
}

ヒストグラムの非推奨項目

setFormat と formatOptions の項目は,ヒストグラム関数オブジェクトから静かに非推奨とされました.

ユーティリティの推移

transformPointsとsurfaceTransformPointsのオプション名を更新しました。

新しいオプション -auto-centre と -centre は、それぞれ -auto-origin と -origin を置き換えます(古いオプションも互換性のあるエイリアスとしてまだ受け入れられます)。centerre に変更することで、座標系 origin() との意味の混同を避けることができます。

effectivenessHeatExchangerSource

The effectivenessHeatExchangerSource fvOption has been renamed to heatExchangerSource. Its previous behaviour can be recovered by using the heatExchangerSource with the submodel of effectivenessTable.

histogram

ヒストグラム関数オブジェクトがリファクタリングされました.以前の動作は,equalBinWidthのサブモデルでヒストグラムを使用することで回復できます.また,タイムステップごとの出力ファイルが1つの出力ファイルに置き換えられました.

v2212 Developer Upgrade Guide

潜在的な破壊的変化

ツリーデータ項目

Octree 処理への更新の一部として、様々な treeData アイテムは、データの完全または部分的なサブセットを一貫して処理するようになりました。この結果、直接アクセスメソッドである cellLabels(), faceLabels(), edgeLabel() を使用するコードは、おそらく破損します。

  • 要素をサブセットせずに treeData xxxLabels() メソッドを使用することは常に安全ではありませんでした。しかし、様々なクラス (treeDataCell, treeDataEdge, etc) が自動的に ID ルックアップを提供するため、この問題は明らかではありませんでした。
  • 元のインデックスへの参照を安全に解除するには objectIndex(label) を、元のオブジェクトへの参照を解除するには operator[](label) を使用します。treeDataEdge では、幾何学的データを取得するために line(label) 便利なヘルパーがしばしば好まれます。

オプションの辞書 readEntry

いくつかの特殊なケースでは、辞書のreadEntryをオプションにすると便利なことがある。たとえば

dict.readEntry("key", keyType::LITERAL, false);

// Same as
dict.readIfPresent("key", keyType::LITERAL);

しかし、boolean引数はしばしば管理が混乱し、その意味を思い出すためにドキュメントを参照する必要があります。時には、(true|false|maybe) という非二項対立の論理を扱いたいこともあります。これを管理するために、軽量な IOobjectOption というオプションの束が導入され、IOobject からもアクセスできるようになりました。これにより、以前の readEntry は次のように変形します。

dict.readEntry("key", keyType::LITERAL, IOobject::READ_IF_PRESENT);

デフォルト以外のオプションを持つreadEntryが稀であることから、この変更によって既存のユーザーコーディングが大きく崩れることはないと思われます。

ISstreamへのストリームリネームの制限

  • non-constアクセスは、以前はトップレベル(IOstream)で宣言されていたため、ファイルを開いた後にOFstream::name()などを変更することが可能で、開いた基礎ファイルと矛盾が生じることがありました。 名前の変更をISstream(およびITstreamのカウンターパート)に制限するようにしました。既存の有効なコードには影響を与えません。

非推奨のメソッド

PtrList::operator()(label)

PtrList::operator()(label) メソッドは対応するリストアイテムへの const ポインタを返します。これは,コーディングの意図をより明確に表現する他のアクセスメソッドでも同様に行うことができます.

  • get(label) : 一意性ptrと同じネーミング
  • set(label) : 伝統的なチェックの名前ですが、視覚的に2パラメータ版と混同されることがあります。
  • test(label) : bitSet, boolList, labelHashSet に準じた命名。

writeFile

createFile メソッドは、以下の理由で非推奨となっています。

  • newFileAtTime(const word&, scalar) : same with createFile(const word&, scalar)
  • newFileAtStartTime(const word&) : same with createFile(const word&)

ベースクラス/コンテナの改良

General

メソッド名をより親しみやすいSTLメソッド名に揃える最初の取り組みです。これにより、名前の親しみやすさが増し、異なるC++コードベース間で移植する際に役立つことがあります。

  • std::vector との類似性を調整したリストコンテナ
    • front(), back() methods
    • push_back() method for containers that already had append().
    • pop_back() method
  • LinkedList コンテナ。std::list との類似性を調整。
    • front(), back(), push_front(), push_back(), pop_front() methods

Foam::string and Foam::fileName

C++23 std::string に追加されるのと同じメソッドに相当する、新しい string::contains() コンビニエンスメソッドを追加しました。例えば

if (keyword.contains('/')) ...

if (keyword.find('/') != std::string::npos) ...

いくつかのfileNameメソッドが追加され、std::filesystem::pathとの類似性が調整されました。

  • stem(), replace_name(), replace_ext(), remove_ext() etc

PtrList

PtrList::get(label) と PtrList::set(label) メソッドは内部境界チェックを含むようになり,境界外へのアクセスに対しては nullptr を返すようになりました.この追加チェックは些細なオーバーヘッドですが、HashPtrTable や autoPtr などと対称的な get() のフェイルセーフな振る舞いを提供し、UPtrList、PtrList、PtrDynList の set(label) メソッドを整列させることができるようになりました。

HashPtrTable

HashPtrTable のセットメソッドが refPtr/tmp をサポートするようになり、さらに柔軟性が増しました。

FixedList

テンプレート化された get<unsigned>() メソッドが追加され、FixedList のコンパイル時のインデックス付けが高速になりました(インデックスが無効な場合はコンパイラエラーが発生します)。これにより、noexceptアクセスが可能になり、他の様々な用途(例えば、triFace、triPoints、...)に伝播することができるようになった。

MinMax

  • MinMax コンテナで、シングルまたはダブル・パラメータを取る reset() メソッドがサポートされるようになりました。これは、フル・リセットの後に add() を実行するよりも便利です (そして、わずかに効率的です)。
  • オーバーラップ(overlaps)と同様に動作するが、両端の排他的チェックを行うMinMax intersects()クエリを追加しました。
  • 新しい MinMax::operator&=() は、2つの最小-最大範囲の和を実行します。この演算子は、intersects()クエリと名前が似ていて紛らわしい、未使用のintersect()メソッドを置き換えるものです。

IOstreams

OFstreamのアトミックファイル作成に対応

IOstreamOption::ATOMIC 列挙は、OFstream を構築する際のディスパッチタグとして使用することができます。この形式では、書き込みのための中間ファイルが作成されます。ストリームが閉じられるときだけ、この中間ファイルは実際の出力名に移動/リネームされます。これにより、ファイルの書き込み中にシミュレーションがクラッシュした場合でも、部分的なファイル(破損したファイル)を避けることができ、安全です。名前の最後を~tmp~とすることで、OpenFOAM内でバックアップファイルとして扱われ、再起動時にはロードされないようになります。

列挙された追記・非追記オープンファイル

  • IOstreamOption::APPEND と IOstreamOption::NON_APPEND の列挙を使用すると、boolean パラメータよりも明確である。既存のユーザーコーディングに影響を与えることはないだろう。

簡略化されたストリームコンストラクタ

  • IOstreamOption の導入 (OpenFOAM-v1806 で追加) により、トップレベルストリーム (例: IFstream, OFstream) が内部 IOstream の「バージョン」 (例: version: 2.0) についての追加情報を必要とするケースがなくなったため、これらのコンストラクタ形式が削除されました。 これにより、指定したフォーマット/圧縮/付加の組み合わせでファイルを開くことができ、バージョンの指定に煩わされることがなくなります。

IOobjectOption, IOobject

IOobjectの作成は、通常、次のような内容です。

IOobject io
(
    "foo",
    runTime.timeName(),
    mesh,
    IOobject::MUST_READ,
    IOobject::NO_WRITE,
    false  // do not register
);

末尾の "do not register "コメントは、呼び出しパラメータが実際には自己文書化されていないことを示しています。典型的なオプションは IOobjectOption のセットで列挙されるようになった。register/no-register が適切に列挙されるようになったので、このような呼び出しができるようになった。

IOobject io
(
    "foo",
    runTime.timeName(),
    mesh,
    IOobject::MUST_READ,
    IOobject::NO_WRITE,
    IOobject::NO_REGISTER
);

また、様々なオプションは、明示的または暗黙的にバンドルすることができる。

IOobject io
(
    "foo",
    runTime.timeName(),
    mesh,
    { IOobject::MUST_READ, IOobject::NO_REGISTER }
);

IOobjectOption

IOobjectOption クラスは、objectRegistry などに依存しない軽量な処理のために、読み取り/書き込み、ストレージフラグをカプセル化しています。また、辞書の読み込みのための読み込み制御情報を提供するために使用することができ、さらなるサブ依存を導入することはありません。

  • isReadRequired() と isReadOptional() のために IOobjectOption (または IOobject) クエリを追加しました。これらは MUST_READ, MUST_READ_IF_MODIFIED, READ_IF_PRESENT のテストをカプセル化し、利便性と散らかりにくさを実現しています。例えば
    if (isReadRequired() || (isReadOptional() && headerOk()))
    {
        ...
    }

むしろ長く、繰り返される形。

    if
    (
        (
            readOpt() == IOobject::MUST_READ
         || readOpt() == IOobject::MUST_READ_IF_MODIFIED
        )
     || (readOpt() == IOobject::READ_IF_PRESENT && headerOk())
    )
    {
        ...
    }

きめ細かな辞書の読み込みを可能にするIObjectOption

以前は、辞書エントリーの読み取りを高度に制御するための 'mandatory' (bool) がありましたが、呼び出し側のコードでは追加のコードコメントがないと意味が不明でした。

IOobjectOption::readOption を代わりに使用することで、さらなるオプション (たとえば NO_READ) が可能になり、true/false の bool フラグよりもコード内の目的がより明確になります。

これはマイナーなブレークダウンです(使用頻度が低く、高度な使用法のみ)

ジオメトリ処理の改善・最適化

このバージョンでは、幾何学的な実体を扱う際に便利なメソッドが多数追加されています。

General

  • ヘッダ定義の統一やパススルー方式の増加により、四面体や三角形の取り扱いを簡素化しました。
  • triFace / triangle などの一貫したメンバアクセス。頂点/点に a(), b(), c() のようにアクセスできる。
  • 三角形に、よく使われる計算のための静的な center() と areaNormal() および unitNormal() メソッドが追加されました。

box()

meshShapes (cell,edge,face,triangle,...) に、Pair<point> を返す低レベルの bound box() メソッドを追加しました。これらの抽出された幾何学的限界は、boundBoxに依存することなく使用することができます。

mesh cellBb()

primitiveMesh cellBb()メソッドを追加しました。これは、最も安価な計算を使用して、指定されたメッシュセルのバウンドボックスを返します。

  • は、すでに利用可能であれば、cellPoints を使用する。これは、最小/最大比較の回数が最も少ないからである。
  • またはセル面を歩く:セルボックス()メソッドを介して、需要駆動型のセルポイントなどを作成しないようにします。

patch sphere(facei)

PrimitivePatchに、与えられたパッチ面を囲む外接球(原点+半径の2乗)を返すsphere(facei)メソッドを追加しました。

ベクター方式の追加

ジオメトリを扱う場合、点の比較は非常に頻繁に発生します。これらは Foam::vector 内の直接メソッドとしてバンドルされるようになりました。

  • mag() : ベクトルの長さ (L2-ノルム)を指定します。
  • magSqr() : ベクトルの長さ(L2-norm)の二乗。
  • dist(const vector&) : 別のベクトルからの L2 ノルムの距離
  • distSqr(const vector&) : 別のベクトルからの L2 ノルムの距離の二乗を返します。

これらの方法は、より簡潔で、中間的な変数を避けることができます。例えば

if (a.distSqr(b) < tol) ...

// vs.
if (magSqr(b - a) < tol) ...

新しい vector::less_xyz() vector::less_yzx() および vector::less_zxy() 比較メソッドは、辞書式ソートに便利です。

boundBox()、treeBoundBox()の処理。

boundBox()、treeBoundBox()クラスを若干整理し、以下のように一部拡張しました。

  • 追加の構築およびリセット・メソッド。
  • null() 静的メソッド : invertedBoxへのconst参照として(適切なキャストで)。
  • grow() メソッド : ボックスを絶対量だけ拡張します。
  • inflate(random) : treeBoundBox::extend のインプレース版。
  • boundBox::hexCorners(), boundBox::hexFaces() : hexCell に対応する点/面を明確に指定するためのものです。
  • boundBox::addは、プリミティブメッシュ形状から抽出されたエッジや「ボックス」を追加するときに、点のペアを使用します。

オクツリーの改良

ループ内でのメモリ効率を上げるため、結果を外部記憶するオクツリー findBox(), findSphere() を追加しました。単純なテストでは、octree overlaps() を使用することができます。これは、findBox(), findSphere() と同様に動作しますが、いずれかの形状が重なり合った場合、早期に終了します。

treeDataの改良

サブセットとインターフェースの全体的な整合性を向上させるための変更。

  • サブセット/非サブセットのバージョンを確実に堅牢に処理するために、統一された内部ゲッターを持つサブセット/非サブセット・コレクションの使用を拡張してください。
  • 演算子と objectIndex(label) で、サブセットの有無にかかわらず、基礎となる項目、つまり元のインデックスに標準的にアクセスできるようになります。
  • centres()とcenter(label)は、代表的な点群情報である。
  • nDim() はオブジェクトの次元数 (0: 点、1: 線、など) を返す。これらは、それぞれの形状がどの程度「太い」のか、また bounds(labelList) が何らかの有用な情報を提供するかどうかを判断するために使用される。
  • bounds(labelList) は、特定のアイテムに必要な完全なバウンドボックスを返します。例えば、様々な3Dセルに対する全体的な境界。
  • 静的ヘルパー : boxes() と bounds()


MPI(Pstream)メソッドの更新

このリリースでは、より多くのケースでネイティブMPIルーチンが使用されるようにコードの調整が行われていますが、一部のPstream(MPI)メソッドを簡素化するための変更も含まれています。

  • ルーチンの呼び出しを簡素化するために、いくつかの UPstream メソッドに内部 parRun ガードを追加しました。
  • MPIリダクションのネーミングをより一貫したものにしました。
ユニファイドネーム 旧名称
combineReduce combineAllGather
listCombineReduce listCombineAllGather
mapCombineReduce mapCombineAllGather

ダイレクトMPIおよび/またはリダクション

MPI_LAND および MPI_LOR intrinsics のダイレクトラッパーとして UPstream::reduceAnd および UPstream::reduceOr が追加されました。これらは、論理演算のための特別な目的の returnReduce で再利用されます。

MPI bool オペレーションを使用すると、ベンダー/ハードウェアによる MPI の最適化が可能になります。

returnReduceAnd(bool) と returnReduceOr(bool) をそれぞれ andOp<bool>() と orOp<bool>() 演算子を持つ returnReduce のインライン・ラッパーとして使用すると、より簡単に扱える式が得られます。また、パラメータをブール値に一義的にキャストできるという利点もあります。

これらの新しいコールの例をいくつか紹介します。

  • 任意のランクに存在するかどうかをテストする。
    if (returnReduceOr(list.size()) { ... }
    if (returnReduceOr(!list.empty()) { ... }
  • すべてのランクで非存在をテストする。
    if (returnReduceAnd(list.empty()) { ... }
    if (!returnReduceOr(list.size()) { ... }

globalIndexの修正

リーディングディスパッチタグを使用し(他のC++の規約との類似性を高める)、マスターデータを別々に書き込むことができるgather/writeに便利なgatherNonLocalタグを含めます。

  • clear()メソッドを追加し、NULL構築状態にリセットするようにした。
  • PatchTools::gatherAndMergeは、出力パラメータとしてglobalIndexの回収をサポートします。これは、後続のフィールドマージ操作での再利用を可能にします。
  • PatchTools::gatherAndMerge にオプションのパラメーターとして pointMergeMap が追加されました。この情報は常に必要というわけではありません。例えば、gatherAndMergeを使用して面を結合するだけで、ポイントフィールドを使用しない場合です。

メッシュ/パッチへのアクセス方法を改善しました。

メッシュとフィールドコンポーネントのアドレスには、細かいですが様々な便利な変更があります。

FieldFieldへのインデックス作成

FieldFieldへのタプル(ペア)インデックスをサポートします。(patchi, elemi) のペアを使用して、FieldField の要素にアクセスできるようになりました。

faPatch/fvPatch patchField, lookupPatchField の呼び出しを簡素化。

2番目の(unsed)テンプレートパラメータは完全にオプションになりました。以前は古いコンパイラ(2008年以前)では必要でした。

拡張polyBoundaryMeshパッチ/フェースクエリ

whichPatchFace() メソッドは (patchi, patchFacei) タプルを返し、 whichPatch() は whichPatchFace() の簡略化されたラッパーになりました。

新しいgroupNames()メソッドは、ゾーンと同様のパッチベースの機能を提供します。

拡張された有限領域メッシュ/面クエリ

有限面積から体積メッシュへの対応のためのブックキーピングを改善する。

  • whichPolyPatches() = areaMeshに関連するポリパッチ。 これは、パッチ固有のコンテンツを事前に計算(およびキャッシュ)する際に役立ちます。
  • whichPatchFaces() = faceLabelsのそれぞれに対応するポリパッチ/パッチフェース。 これにより、より便利な検索が可能になり、リストはエリアメッシュ上にキャッシュされるため、whichPatch() などの呼び出し回数が減ります。
  • whichFace() = 与えられたメッシュ面に対応する領域面

また、ボリュームからエリアへのマッパー機能を拡張し、より柔軟で一貫性のあるものにしました。

GeometricFieldのフィールド変更

GeometricField::internalFieldRef() は boundaryFieldRef() や primitiveFieldRef() と同じように書き込みができるようになりました。名前付けは internalField() を補完するものです。

意味は GeometricField::ref() メソッドと同じですが、より明示的な名前がついており、例えば tmp::ref() と混同される可能性は低くなっています。

座標系

座標系に対する基本的な変更はありませんが、coordinateSystem辞書検索に対する取り扱いが単純化されました。coordinateSystems::NewIfPresent()メソッドは、オプショナルな項目の取り扱いを非常に単純化しています。たとえば

coordSysPtr_ = coordinateSystem::NewIfPresent(mesh, dict);

旧来の長いフォームの代わりに

if (dict.found(coordinateSystem::typeName, keyType::LITERAL))
{
    coordSysPtr_ =
        coordinateSystem::New
        (
            mesh_,
            dict,
            coordinateSystem::typeName
        );
}
else
{
    coordSysPtr_.reset();
}

v2212: プリプロセッシングの新機能と改良点

checkMeshの改良

checkMesh ユーティリティが含まれるようになりました。

  • プロセッサの境界を越えたパッチとフェイスゾーンの多様性チェック
  • pointZone, faceZone, cellZone の重複を報告する。

パラレルコンシステントマニホールドレポート

allTopology スイッチは、パッチと faceZone のトポロジーを報告します(例:)。

Checking patch topology for multiply connected surfaces...
    Patch               Faces    Points   Surface topology
    fixedWalls          80       160      ok (non-closed singly connected)
    frontAndBack        800      882      ok (non-closed singly connected)

以前のバージョンでは、このチェックは並列に無効化されていました。v2212では、エッジの接続はプロセッサの境界を越えてチェックされます。

Checking patch topology for multiply connected surfaces...
    Patch               Faces    Points   Surface topology
    fixedWalls          80       164      ok (non-closed singly connected)
    frontAndBack        800      924      ok (non-closed singly connected)

そのことに注意してください。

  • 点接続性チェックの「多重接続(共有点)」は、「まだ」並列一貫していない。
  • ポイント数は全ポイントの合計を表し、重複を補正するものではありません。

オーバーラップゾーン

allTopology スイッチは、一部のユーティリティによってのみサポートされているため、オーバーラップするゾーンを報告するようになりました。checkMeshの出力例は次のとおりです。

Checking topology...
    Boundary definition OK.
--> FOAM Warning :
    From virtual bool Foam::zone::checkDefinition(Foam::label, bool) const
    in file meshes/polyMesh/zones/zone/zone.C at line 199
    Zone c0 contains duplicate index label 0

Source code

  • $FOAM_UTILITIES/mesh/manipulation/checkMesh

changeDictionaryユーティリティの改良

changeDictionary ユーティリティは、照合されたプロセッサ・ディレクトリに対して並列に操作できるようになりました (例)。

mpirun -np 2 changeDictionary -parallel -fileHandler collated

このため、ケースを再分解することなく、境界条件の設定をわずかに変更するなどの場合に非常に便利です。

See:

  • Issue #2533

Source code

  • $FOAM_APP/utilities/preProcessing/changeDictionary

曲率に基づく新しいSnappyHexMeshのリファインメント

TOP

現在、SnappyHexMeshのリファインメントは隣接するセル間の光線の交点に基づき行われます。フィーチャーは交点での交差角度とローカル法線を解釈することで特定されます。これはresolveFeatureAngleパラメータで決定されます。

サーフェスベースのリファインメント

曲率ベースのリファインメントは、実際の(三角形分割された)サーフェスを問い合わせるために拡張されました。下図では、典型的なサーフェスが、測定された曲率(青、白、赤のスケール)と45度の特徴角(緑)で色分けされて表示されています。

曲率は、surfaceFeatureExtractアプリケーションの入力辞書にエントリを含めることによって書き込むことができる。

// Output surface curvature
curvature true;

// Write closeness/curvature/proximity fields as VTK for postprocessing
writeVTK            yes;

これは入力ジオメトリと曲率フィールドを含む.vtpファイルを書き込みます。snappyHexMeshのアルゴリズムはサーフェス上の各三角形に必要なリファインメントレベルを事前に計算し、キャスタレーション中にリファインメントのトリガーとしてその情報を使用します。この動作はresolveFeatureAngleパラメータと新しいオプションのcurvatureLevelパラメータで制御されます。

// Additional refinement for regions of high curvature. Expressed
// (bit similar to gapLevel) as:
// - number of cells per radius of curvature. (usually a few is
//   good enough)
// - starting cell level? Not used at the moment.
// - maximum cell level. This can be smaller or larger than the
//   max 'surface' level
// - minimum curvature radius to ignore (expressed as a cell level).
//   This can be used to avoid detecting small sharp surface
//   features. Set to -1 to ignore.
//
curvatureLevel (10 0 10 -1);

手順が構成されています。

  • 曲率を計算する
  • resolveFeatureAngle よりも鋭い角度を持つエッジ上のポイントをマークしない(これらはフィーチャーエッジスナップで解決されます)。
  • 曲率と指定したセル数/半径を、必要な精細度に変換する。
  • 指定された最大絞り込みレベルまでクリップする
  • サーフェスに保存し、後続のリファインメントで使用されるようにする。

上に示したサーフェスのメッシュの例(1つの初期セルから開始)。

これは、表面の(緩やかな)湾曲がさらなるリファインを引き起こす、前面の正しい動作を示しています。しかし、表面の反対側では、鋭角(約20度)に起因する不要なリファインメントが明らかである。ここでは、「最小曲率半径」が有効であると考えられるが、適切な値を決定することは自明でない。

追加テスト

曲率精密化を特定の領域に限定することは有益な場合があります。1つの方法は、例えばsurfaceSubsetやsubTriSurfaceMeshサーフェイスを使用して、サーフェイスの一部を抽出することです。もう一つはsnappyHexMeshの中のlimitRegions機能を使うことです。

limitRegions
{
    box_limit    // geometry defining region without explicit refinement
    {
        // Don't refine at all inside 'box_limit'
        mode        inside;
        levels      ((10000 0));
    }
}

チュートリアル mesh/snappyHexMesh/block_with_curvature では、曲率細分化をボックスの外側に限定するために使用されています(黒い線で表示)。

2:1制約による絞り込みの「にじみ」に注意。

setFieldsの改良

setFields ユーティリティが拡張され、有限領域がサポートされるようになりました。入力の例です。

defaultFieldValues
(
    areaScalarFieldValue h 0.00014
);

regions
(
    clipPlaneToFace
    {
        point  (0 0 0);
        normal (1 0 0);

        fieldValues
        (
            areaScalarFieldValue h 0.00015
        );
    }
);

必要であれば、コマンドラインオプションで一時的に処理を抑制することも可能です。

setFields -no-finite-area

Tutorial

  • $FOAM_TUTORIALS/finiteArea/liquidFilmFoam/cylinder

新しいクリッププレーンのトポセット

clipPlaneトポセットclipPlaneToCell、clipPlaneToFace、clipPlaneToPointは、領域を選択するのに便利な手段です。例えば

clipPlaneToFace
{
    point  (0 0 0);
    normal (1 0 0);
}

は、半無限バウンディングボックスを定義するよりも簡単です(以前は唯一の可能性でした)。

boxToFace
{
    min  (0  -1e6 -1e6);
    max  (1e6 1e6 1e6);
}

Tutorial

  • $FOAM_TUTORIALS/finiteArea/liquidFilmFoam/cylinder

v2212:数値計算の新機能と改良

オーバーセットメッシュの改善

オーバーセットの枠組みが拡張されました。

  1. は、オーバーセットされたパッチが背景領域の外まで広がるようにします。
  2. 背景領域のホールセルから離れたフリンジ面を許容する;および
  3. 質量保存を改善するためのオプションを追加する。

ドメイン外のオーバーセットパッチ

他のすべてのメッシュの外側に存在するセルは、ドナーセル候補が見つからないため、補間を使用することができません。これらのセルは、通常の計算セルと同様に局所的にセルを解く、新しいポーラスセルタイプを使用して処理することができます。これらのセルは通常、壁のパッチに近いため、圧力-速度系の安定性を維持するために、通常は何らかのダンピングが必要です。これは、例えば、速度を減衰させるfvOptionを使用して適用することができ、新しいcellType selectionMode項目は多孔質セルを識別することができます。

limitU
{
    type            velocityDampingConstraint;
    active          true;
    selectionMode   cellType;
    UMax            0;
    C               1;
}

inverseDistance、trackingInverseDistance、volumeWeightの各セルステンシルを用いたテストでは、ダンピング定数Cが「1」でうまく機能する傾向があることが示されました。

なお、この方法は、背景メッシュの上に2つのインセットメッシュを重ねることはサポートしていません。

背景領域のホールセルから離れたフリンジ面を許可する

オーバーセット法は、流れが高い勾配を示す領域から補間されたセルが離れている場合に有効です。以前のバージョンでは、幾何学的に不明瞭なセル(穴のタイプ)は補間されたセルで囲まれていました。このリリースでは、system/fvSchemes辞書のoversetInterpolationセクションを使用して、補間セルを障害物からさらに遠ざけることができます。

oversetInterpolation
{
    method              inverseDistance;
    ..
    holeLayers          4;
    useLayer            2;
}

holeLayers の項目には、ホールセルから「歩く」セルの層数を指定し、useLayer には補間セルを配置する層数を指定します。例えば、上記の例では、4層からなる歩行を行い、層2を使用して補間を配置します。


実行時、ソルバーは各メッシュのレイヤー体積の平均比率を報告する、例.

Number of layers : 4
Average volumetric ratio : 4(0.9581398507 0.9624422346 0.966612743 0.97065     73485)
Number of holes cells : 4(202 203 204 205)
Using layer : 2

残圧について期待される改善点の代表的なものは以下の通りです。

オーバーセット質量保存を改善するためのオプション

以前の実験的キーワードは、オーバーセットベースのソルバーアプリケーション、すなわちmassFluxInterpolation、ddtCorr、およびcorrectPhiから削除されました。質量保存は、fvSolutionファイルの新しいoversetAdjustPhiキーワードによって制御されるフラックス補正を追加することで改善されました。

PIMPLE
{
    momentumPredictor   no;
    nOuterCorrectors    1;
    nCorrectors         3;
    nNonOrthogonalCorrectors 0;

    oversetAdjustPhi    true;
}

このフラグは、内側のPIMPLEループのフリンジ面を横切るフラックスを調整します。次の画像は、$FOAM_TUTORIALS/multiphase/overInterDyMFoam/simpleRotorの場合の質量保存への影響を示しており、最初のものは補正なしで、2番目は補正ありで計算されています。

フラックス/質量保存の第二のオプションは、パッチフィールド上で指定される暗黙の補正である。

free
{
    type            overset;
    value           uniform 300;
    fluxCorrection  true;
}

線形ソルバー内のフラックス制約を使用してフラックス補正を実装しています。これは、すべてのフリンジ面において、すべての行列-フィールドの乗算に対して保存制約を強制します。これは,事前調整された共役勾配系で事前調整された変数に適用されるため,効果が限定される可能性があることに注意してください.overLaplacianDyMFoamチュートリアルbasic/overLaplacianDyMFoam/1DheatTransferMassConservationでは、fluxCorrectionを有効にするとオーバーセットパッチの性能が改善されます。

Source code

  • $FOAM_SRC/overset

Tutorials

Outside cells:

  • $FOAM_TUTORIALS/multiphase/overInterDyMFoam/twoSquaresOutDomain
  • $FOAM_TUTORIALS/incompressible/overPimpleDyMFoam/rotatingSquare

Fringe faces:

  • $FOAM_TUTORIALS/incompressible/overPimpleDyMFoam/simpleRotor
  • $FOAM_TUTORIALS/multiphase/overInterDyMFoam/floatingBody
  • $FOAM_TUTORIALS/multiphase/overInterDyMFoam/rigidBodyHull

Mass conservation (explicit):

  • $FOAM_TUTORIALS/multiphase/overInterDyMFoam/simpleRotor

Mass conservation (implicit):

  • $FOAM_TUTORIALS/basic/overLaplacianDyMFoam/1DheatTransferMassConservation

新しい随伴目的関数

アドジョイントベースの最適化で使用する5つの新しい目的関数が追加され、主に内部フロー最適化問題をターゲットにしています。以下に、それぞれの簡単な説明と例を示します。これ以降の図はすべて、速度の大きさを表しています。

flowRate

与えられたパッチのセットを通過する体積流量を計算し、最小化/最大化する。ダクトの上部を通る流量を最大にする(左から右へ流れる)アプリケーションを以下に示します。

Tutorial: $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/fork-uneven/flowRate

Source code: $FOAM_SRC/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveFlowRate

flowRatePartition

入口流量を所定の割合で出口パッチに分配するために使用される。2つのアウトレットにインレット流量を均等に分配することを目的としたアプリケーションを以下に示す。

Tutorial: $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/fork-uneven/flowRatePartition

Source code: $FOAM_SRC/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveFlowRatePartition

uniformityPatch

所定の(出口)パッチ(ここでは下部の出口パッチ)で計算される速度分散を最小にすることで、流れの均一性を高めることができます。

Tutorial: $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/fork-uneven/uniformityPatch

Source code: $FOAM_SRC/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveUniformityPatch

uniformityCellZone

所定のセルゾーン内の流速のばらつきを抑え、流れの均一性を向上させます。

この場合、ターゲットとなるセルゾーンの境界は黒くハイライトされている。

Tutorial: $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/laminar/opt/unconstrained/uniformityCellZone

Source code: $FOAM_SRC/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectiveUniformityCellZone

powerDissipation

与えられたcellZone内で発生する流体電力の損失を計算し、最小化する。セルゾーンがフロードメイン全体をカバーする場合、この目的は体積流量で重み付けされた総圧力損失(すなわちPtLosses目的関数)と等価である。

ターゲットセルゾーンの境界は黒くハイライトされている。

Tutorial: $FOAM_TUTORIALS/incompressible/adjointOptimisationFoam/shapeOptimisation/sbend/turbulent/SA/opt/powerDissipation

Source code: $FOAM_SRC/optimisation/adjointOptimisation/adjoint/objectives/incompressible/objectivePowerDissipation

Attribution

  • The software was developed by PCOpt/NTUA and FOSS GP
  • Integration in collaboration with OpenCFD on MR!578

新しい並列一貫したジオメトリ方式

新しいパラレルジオメトリ計算手法は、他のジオメトリ計算手法のラッパーとして適用することが可能です。

geometry
{
    type            parallel;
    // Optional underlying geometry calculation. Default is 'basic'.
    geometry
    {
        type            highAspectRatio;
    }
}

オーナーサイドの面形状を隣接する面、つまり面中心、法線(ネゲート)に適用し、影響を受けるセルのセルベースの形状を再計算することで動作します。

これは特に単精度の場合に有効で、例えばグローバル変換を計算する際に問題となる、結合パッチが採用する異なる計算順序に起因する切り捨て誤差を除去することができます。

 --> FOAM FATAL ERROR: (openfoam-2206)
 bad size -653174757

     From void Foam::List<T>::doResize(Foam::label) [with T = Foam::vectorTensorTransform; Foam::label = int]
     in file lnInclude/List.C at line 84.


 #0  Foam::error::printStack(Foam::Ostream&)
 #1  Foam::error::simpleExit(int, bool) at ??:?
 #2  Foam::error::exiting(int, bool)
 #3  Foam::List<Foam::vectorTensorTransform>::doResize(int)
 #4  Foam::globalIndexAndTransform::determineTransformPermutations() at ??:?

なお、並列方式は点の位置を変更しないので、セルクローズなどの他の計算された形状に影響を与える可能性があります。

Source code

  • $FOAM_SRC/finiteVolume/fvMesh/fvGeometryScheme/parallel

新有限面積最小二乗法によるエッジ補間法

Finite Areaのための線形ベースのエッジ補間スキームは、表面勾配と発散の計算で高い誤差をもたらす可能性があります。新しい最小二乗法スキームは、Pesci (2019; p.29-30, 45-50) の研究に基づいています - Finite Volume フレームワークの pointLinear スキームに類似していることを示します。テストでは、新しいスキームが解析解に関して表面勾配とダイバージェンスの結果を改善できることを示した。

解析解に関してガウス線形とガウス最小二乗を比較すると(Pesci, 2019; 図4.2)、予測精度のレベルが向上していることがわかる。

Source code

  • $FOAM_SRC/finiteArea/interpolation/edgeInterpolation/schemes/leastSquares

References

  • Pesci, C. (2019). Computational analysis of fluid interfaces influenced by soluble surfactant. Darmstadt, Technische Universität. PhD thesis.

Merge request

  • MR!575

MappedFileの改善

代替のサーフェスフォーマット

外部データソースと結合する際に使用される MappedFile 関数が拡張され、別の表面読み取り形式をサポートするようになりました。これにより、例えばサンプリングしたEnSightデータをマッピングに再利用することができ、抽出データ、可視化データ、入力データを1つのソースにまとめることができる利点があります。

フィールドフィルタリング

MappedFileは、入力データにマルチスウィープメディアンフィルタリングを追加できるようになりました。これは、粗いメッシュにサンプリングする際に、高い空間周波数を除去するために使用することができます。例えば、探索半径5mmの線形、面積加重フィルタを適用する場合。

filterRadius    5e-3;
filterSweeps    40;

入力フィールド値は、指定された掃引回数で平均化されたフィルタリングが行われます。このフィルタリングにより、サンプリングされた値を汚染する高い空間周波数が取り除かれる。フィルタの効果は次のように見られる。

左はオリジナルの生入力データ、右は同じものをMappedFile内でフィルタリングし、高周波成分を除去した後の画像である。

Source code

  • $FOAM_SRC/meshTools/PatchFunction1/MappedFile

Merge request

  • MR!568

Tutorial

  • $FOAM_TUTORIALS/compressible/acousticFoam/obliqueAirJet

フィールドフィルタリングのプレビュー

新しい smoothSurfaceData ユーティリティは、MappedFile で使用する前に、さまざまなフィルター半径やスイープの効果を簡単にテストするための手段です。

改良型DEShybridスキーム

Travinら[3]の研究に基づくDEShybridスキームは、細かいメッシュの渦度支配領域ではより低い散逸スキームを、回転しない領域や粗いメッシュではよりロバストなスキームを、解に応じてブレンドすることを可能にします。このオリジナルスキームを新しいグレー領域拡張 DES モデルで使用したところ,誤動作することが判明しました.より散逸的なスキームは、重要な初期せん断層領域で作動し、モデルの改良を打ち消すものでした[1]。

DEShybridスキームのアップデートがv2212リリースに含まれており、グレーエリア領域での低散逸挙動を保証し、その他の点ではオリジナルのスキームと同様の挙動を示します。

Tutorial

Settings for the new DEShybrid scheme can be found in the new tutorial based on the 2D hump case of Greenblatt et al. [2].

  • $FOAM_TUTORIALS/incompressible/pimpleFoam/LES/wallMountedHump

Source code

  • $FOAM_SRC/TurbulenceModels/schemes/DEShybrid

Attribution

  • 更新されたDEShybridスキームは、Upstream CFD GmbHによって実装され、Volkswagen AGの資金提供によりOpenCFD Ltdと共同でOpenFOAMに統合されました。
  • Merge request MR!560

References

  1. Fuchs, M., Mockett, C., Sesterhenn, J., and Thiele, F. (2015). Assessment of novel DES approach with enhanced SGS modelling for prediction of separated flow over a delta wing. 22nd AIAA Computational Fluid Dynamics Conference, Dallas / Texas, AIAA-2015-3433.
  2. Greenblatt, D., Paschal, K. B., Yao, C.-S., Harris, J., Schaeffler, N. W., and Washburn, A. E. (2006). Experimental Investigation of Separation Control Part 1: Baseline and Steady Suction. AIAA Journal, Vol. 44, No. 12, pp. 2820-2830, 2006.
  3. Travin, A.K., Shur, M.L., Strelets, M.K., and Spalart, P.R. (2004). Physical and numerical upgrades in the detached-eddy simulation of complex turbulent flows. Advances in LES of complex flows, pp. 239–254, 2004.

v2212: 新規および更新されたソルバーと物理学

ビューファクタ放射モデリングの改善

放射線ビューファクタ生成アプリケーションであるviewFactorsGenが複数回アップデートされました。

  • この方法は、2つの面が「遠い」場合は二重面積積分(2AI)、面が「近い」場合は二重線形積分(2LI)の組み合わせに基づいている。面間の距離は、平均面積と面中心間の距離の比として計算されます。
  • OpenFOAMの標準的な反復線形ソルバーをデフォルトで使用し、シングル・プロセッサーでの従来の直接解法を使用する。
  • CGALサポートでコンパイルした場合、より高速なレイ・インターセクション・ルーチンを適用することができます。

辞書入力

viewFactorsDict辞書の追加入力は、以下の通りです。

// GaussQuad integral error tolerance (default: 0.01)
// Used to decide when to increase order of integration.
GaussQuadTol              0.1;

// Relative distance (default: 8)
// For distTol : use 2AI
distTol                   8;

// Constant model use for common edges for 2LI (default : 0.22)
// Approx for integral value of duplicate edges.
alpha                     0.22;

// Interval tolerance (default : 1e-2)
// Used for ray shooting from face centre to face centre plus intTol to avoid the ray
// hitting the same face where it was originated.
intTol                    1e-2;

反復法ソルバーと直接法ソルバーの使用は、radiationProperties辞書のuseDirectSolver項目(オプション)で指定します。

{
    smoothing          false;  // Use for closed surfaces where sum(Fij) = 1
    constantEmissivity true;
    nBands             1;
    useDirectSolver    false;     // Use direct solver or standard iterative solver ("qr", "qRFinal" in fvSolution)
}

この新しいバージョンでは、顔の凝集(したがって faceAgglomeration アプリケーション)は必要ありません。

Tutorials

  • $FOAM_TUTORIALS/heatTransfer/chtMultiRegionSimpleFoam/multiRegionHeaterRadiation
  • $FOAM_TUTORIALS/heatTransfer/chtMultiRegionFoam/externalSolarLoad

Source code

  • $FOAM_SRC/thermophysicalModels/radiation/radiationModels/viewFactor (view factor evaluation)
  • $FOAM_UTILITIES/preProcessing/viewFactorsGen (view factor generation)

DES乱流モデルの改良

DES(Detached-Eddyシミュレーション)は、定常(RANS)モデルよりも精度が高く、LES(Large-Eddy Simulation)よりも低コストであるため、乱流モデリング手法としてますます一般的になりつつある手法です。しかし、「グレーゾーン」と呼ばれる欠点があり、初期せん断層で分解された乱流の発達が遅れ、ここでの予測精度が低下しています。

新しいグレー領域拡張DESバージョンは,局所的に渦粘性を低下させることで,初期シア層でのRANS-LES遷移を加速させます.乱流が完全に発達すると、通常のサブグリッドスケールの挙動が戻ってきます。次の図は,2次元の壁面設置型ハンプの下流で再循環する流れに ついて,グレーゾーン効果を示したものです.グレーゾーンを強化したモデルでは、分解された乱流のレベルが大幅に向上し、実験との一致も良くなっています。


v2212では、以下の乱流モデリング機能が搭載されています。

  • Grey-area enhanced -DDES formulation [1][3], SpalartAllmarasDDES and kOmegaSSTDDES with activated option useSigma, which is applicable to both Spalart-Allmaras and Menter SST-based DDES formulation;
  • Vorticity-adaptive filter definition, [4][5], DeltaOmegaTildeDelta, which is recommended for use in conjunction with the -DDES model; and
  • Shear-layer adaptive filter definition, [5], SLADelta, which achieves a similar effect to the combination of -DDES and .

Example usage:

simulationType LES;

LES
{
    LESModel        SpalartAllmarasDDES;
    SpalartAllmarasDDESCoeffs
    {
        useSigma        true;                    // <-- new entry
    }

    //delta           SLADelta;
    delta           DeltaOmegaTilde;
    DeltaOmegaTildeCoeffs
    {}

    ...
}

これらの手法と合わせて、アップデート版のDEShybridスキームを使用することが推奨されます。

Tutorial

  • $FOAM_TUTORIALS/incompressible/pimpleFoam/LES/wallMountedHump

Attribution

  • グレー領域拡張DESモデルコンポーネントは,Upstream CFD GmbHによって実装され,Volkswagen AGの資金援助を受けてOpenCFD Ltdと共同でOpenFOAMに統合されました.
  • Merge request MR!560

References

  1. Fuchs, M., Mockett, C., Sesterhenn, J., and Thiele, F. (2020). The grey-area enhanced sigma-DDES approach: Formulation review and application to complex test cases. In: Progress in Hybrid RANS-LES Modelling, Notes on Numerical Fluid Mechanics and Multidisciplinary Design 143, pp. 119-130, Springer, 2020.
  2. Greenblatt, D., Paschal, K. B., Yao, C.-S., Harris, J., Schaeffler, N. W., & Washburn, A. E. (2006). Experimental Investigation of Separation Control Part 1: Baseline and Steady Suction. AIAA Journal, Vol. 44, No. 12, pp. 2820-2830, 2006.
  3. Mockett, C., & Fuchs, M. (2017). Application of Alternative SGS Forms for Grey Area Mitigation. In Go4Hybrid, volume 134 of Notes on Numerical Fluid Mechanics and Multidisciplinary Design, Springer, 2017.
  4. Mockett, C., Fuchs, M., Garbaruk, A.V., Shur, M.L., Spalart, P.R., Strelets, M.K., Thiele, F., & Travin, A.K. (2016). Two non-zonal approaches to accelerate RANS to LES transition of free shear layers in DES. In: Progress in Hybrid RANS-LES Modelling, Notes on Numerical Fluid Mechanics and Multidisciplinary Design 130, pp. 187-201, Springer, 2015.
  5. Shur, M. L., Spalart, P. R., Strelets, M. K., & Travin, A. K. (2015). An enhanced version of DES with rapid transition from RANS to LES in separated flows. Flow, Turbulence and Combustion, 95, 709–737, 2015.

熱交換器のモデリングを改善

領域間熱伝達fvOption、effectivenessHeatExchangerSourceがheatExchangerSourceに名称変更され、新たに2つのサブモデルを指定できるように拡張されました。

  • effectivenessTable:先のeffectivenessHeatExchangerSourceの動作、および
  • referenceTemperature: 熱交換を計算するために、基準温度(スカラーまたは2次元補間テーブルから計算)を使用するモデルです。

最小限の使用例を以下に示します。

heatExchangerSource1
{
    type                    heatExchangerSource;

    // Option-1
    model                   effectivenessTable;

    // Option-2
    model                   referenceTemperature;

Source code

  • $FOAM_SRC/fvOptions/sources/derived/heatExchangerSource

Merge request

  • MR!557

新ゾーンベースの熱物性

多領域のケースは、組み立てや運用が難しい場合があります。新しいpureZoneMixtureモデルは、熱物性の選択によってのみ領域が異なるセットアップを簡素化するために使用することができます。この場合、ユーザーは単一のメッシュ領域を使用し、セルゾーンごとに熱物性を選択することができるため、プリポスト処理を簡略化し、実行時間を短縮できる可能性があります。

ゾーン間カップリングは、内部面を使用して暗黙的に、または境界条件を使用して明示的に処理されます。内部面のカップリングは柔軟性に欠け、シェル伝導のような抵抗や放射のようなソースを追加することはできません。内部フェースでは、不連続な特性の影響は、例えば、調和補間によって処理されるかもしれません。

Zonal mixture

これはすべてのセルゾーンに対して混合物の設定を取る。固体領域の典型的な constant/<region>/thermophysicalProperties は次のようなものである。

thermoType
{
    type            heSolidThermo;
    mixture         pureZoneMixture;
    transport       constIso;
    thermo          hConst;
    equationOfState rhoConst;
    specie          specie;
    energy          sensibleEnthalpy;
}

mixture
{
    leftSolid
    {
        specie
        {
            molWeight   50;
        }

        transport
        {
            kappa   80;
        }

        thermodynamics
        {
            Hf      0;
            Cp      450;
        }

        equationOfState
        {
            rho     8000;
        }
    }
    rightSolid
    {
        //- Start off from properties of cellZone leftSolid
        ${leftSolid}

        //- Selectively overwrite properties
        equationOfState
        {
            rho     2800;
        }
    }
}

備考

  • noneという名前の「特別な」cellZoneは、ゾーンされていないすべてのセルにマッチします。
  • pureZoneMixtureは、pureMixture、すなわち非反応の単一成分混合物を使用することを条件に、流体領域に適用することができる。
  • 混合物の特性だけが変化することがあります。
  • 同じ領域に流体と固体を存在させることはできません。
  • pureZoneMixtureは、セルゾーンが同じ混合物特性を持つ場合、pureMixtureと全く同じ結果を得ることができます。

Source code

  • $FOAM_SRC/thermophysicalModels/basic/mixtures/pureZoneMixture

Merge request

  • MR!586

ラグランジュの出力制御の改善

ラグランジュモデルが /constant/*CloudProperties ファイルなどのログに書き込む情報量を減らすために、新しいオプションの logFrequency エントリがクラウドソリューション入力辞書に追加されました(例)。

solution
{
    active          true;
    coupled         false;
    transient       yes;
    cellValueSourceCorrection off;
    maxCo           0.3;

    logFrequency    3; // <--- NEW ENTRY

    ...
}

この値は、ラグランジュ位相統計量を報告する間に実行されるキャリア位相時間ステップの数を制御します。

Solving2-D cloud reactingCloud1
Cloud: reactingCloud1
    Current number of parcels       = 994
    Current mass in system          = 0.009735873844
    Linear momentum                 = (0.0001652067978 0.0001039875528 0)
   |Linear momentum|                = 0.0001952093676
    Linear kinetic energy           = 0.0001660812145
    Average particle per parcel     = 19.21387643
    Injector model1:
      - parcels added               = 994
      - mass introduced             = 0.01
    Parcel fate: system (number, mass)
      - escape                      = 0, 0
    Parcel fate: patch (walls|cyc.*) (number, mass)
      - escape                      = 0, 0
      - stick                       = 0, 0
    Parcel fate: patch (inlet|outlet) (number, mass)
      - escape                      = 0, 0
      - stick                       = 0, 0
    Temperature min/max             = 275.039299, 275.4193813
    Mass transfer phase change      = 0.000264126156
    Mass transfer devolatilisation  = 0
    Mass transfer surface reaction  = 0

後方互換性を維持するため、デフォルトでは 1 に設定されている。

有限面積の改善 faOptions

サーマルシェルなどで使用される有限面積オプションが、複数のパッチを正しく処理するようになりました。

  • $FOAM_TUTORIALS/heatTransfer/buoyantPimpleFoam/hotRoomWithThermalShell

externalHeatFluxSourceがFunction1仕様に対応しました。

  • $FOAM_TUTORIALS/lagrangian/reactingParcelFoam/splashPanelFilm

有限面積フィルム接触角力の向上

有限領域 perturbedTemperatureDependentContactAngleForce は dynamicContactAngle に名称変更され、拡張されました。

  • 確率的摂動を用いたフィルム速度依存の接触角力計算;および
  • 膜厚が限界膜厚を超えると、接触線移動の動きに逆らう力が加わり、ヒステリシスが発生すること。

このモデルの最小限の例を以下に示します。

dynamicContactAngleForceCoeffs
{
    // Mandatory entries
    distribution    <subDict>;

    // Optional entries
    hCrit           <scalar>;  // Critical film height

    // Conditional entries

        // Option-1
        Utheta           <Function1<scalar>>;  // Contact angle vs film speed

        // Option-2
        Ttheta           <Function1<scalar>>;  // Contact angle vs film temperature

    // Inherited entries
    ...
}

下図は、リブレットパネルフローのケースで、左から順に、臨界膜高さ、接触角対膜速度のエントリーを使用した場合の効果を示しています。新しい実装では、右図のようにリブレットが合体する結果となりました。

Source code

  • $FOAM_SRC/regionFaModels/liquidFilm/subModels/kinematic/force/contactAngleForce/dynamicContactAngleForce

References

  • Meredith, K. V., Heather, A., De Vries, J., & Xin, Y. (2011). A numerical model for partially-wetted flow of thin liquid films. Computational Methods in Multiphase Flow VI, 70, 239.
  • Novák, M., Devaradja, R., Papper, J., & Černý, M. (2020). Efficient CFD methods for assessment of water management. In 20. Internationales Stuttgarter Symposium (pp. 151-170). Springer Vieweg, Wiesbaden.

Merge request

  • MR!584

新有限領域膜垂れ流しモデル

Brun膜の滴下モデルは、有限体積膜ライブラリから有限面積ライブラリに移行されました。インジェクションモデルの U/<filmPatch> velocityFilmShell 定義で適用されています、例.

injectionModels
(
    // curvatureSeparation
    BrunDrippingInjection
);

BrunDrippingInjectionCoeffs
{
    deltaStable     1e-3;
}

Source code

  • $FOAM_SRC/regionFaModels/liquidFilm/subModels/kinematic/injectionModel/BrunDrippingInjection

Merge request

  • MR!580

新有限領域膜高さ制限

limitHeight有限領域オプション(faOption)は、フィルムの最大高さをユーザーが指定した値に制限するために、明示的な補正を適用します。 使用例

limitHeight1
{
    type        limitHeight;
    region      velocityFilmShell;
    h           hf_film;
    selectionMode all;
    max         0.001;
}

Source code

  • $FOAM_SRC/faOptions/corrections/limitHeight

Merge request

  • MR!580

新液体フィルム条件付き飛散

ラグランジュ表面膜モデルは、ラグランジュ区画を有限面積および有限体積の膜モデルに転送する役割を担っています。ユーザは新しい parcelTypes エントリを持ち、表面膜と相互作用する区画タイプ ID のリストを記述します。このエントリを省略すると、すべてのパーセルが参加します。

surfaceFilmModel kinematicSurfaceFilm;

kinematicSurfaceFilmCoeffs
{
    interactionType absorb;

    // Optional list of participating parcel IDs
    parcelTypes     (10);
}

インジェクターごとに区画タイプを設定するには、インジェクターモデルを指定する際にinjectorIDエントリーを使用します。

injectionModels
{
    model1
    {
        type            <injectionModelType>;

        // Optional injector ID
        // - if ommitted, parcels use '-1'
        injectorID      10;

        ...
    }
}

Source code

  • $FOAM_SRC/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm

Merge request

  • MR!581

新しい固体反応速度モデル

新しい solidIsothermalReactionRate モデルは、solidArrheniusReactionRate モデルと並んで、固体の等温反応速度を提供します。このモデルの最小限の例を以下に示します。

{
    // Mandatory entries
    C       <scalar>;  // Model constant
    Cp      <scalar>;  // Specific heat of solid material (assumed constant)
    Tpc     <scalar>;  // Phase change temperature
    Elat    <scalar>;  // Latent heat of phase change

    // Elat, the latent energy is defined in the present
    // implementation as a negative value (using the convention
    // endothermic process has negative enthalpy.)
}

Source code

  • $FOAM_SRC/thermophysicalModels/solidSpecie/reaction/reactionRate/solidIsothermalReactionRate

References

  • W.H. Lee, A pressure iteration scheme for two-phase flow modeling, T.N. Veziroglu (Ed.), Multiphase Transport Fundamentals, Reactor Safety, Applications, vol. 1, Hemisphere Publishing, Washington, DC (1980).
  • Kharangate, C. R., & Mudawar, I. (2017). Review of computational studies on boiling and condensation. International Journal of Heat and Mass Transfer, 108, 1164-1196.

Merge request

  • MR!579

v2212: 境界条件の追加と更新

新しい吸着条件

新しい sorptionWallFunction 壁面境界条件は、乱流および層流のスカラー/濃度勾配を指定するために採用することができます。

この境界条件の最小限の例を以下に示す。

<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)
    ...
}

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:http://eprints.soton.ac.uk/id/eprint/456709

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領域正規値を含めることができるようになり、抽出したデータの後処理を追加でサポートします。
  • すべてのサンプリングされたサーフェスは、任意のデカルト座標変換もサポートするようになりました(例)。
formatOptions
{
    vtk
    {
        scale 1000;  // m -> mm
        transform
        {
            // origin  (0 0 0);
            rotationCentre  (1 0 0);
            rotation axisAngle;
            axis    (0 0 1);
            angle   -45;
        }
    }
}

この例で示すように、rotationCentreを指定して、サーフェスをインプレースで回転させることも可能です。この追加トランスフォームにより、通常異なる座標系位置で記述されるコンポーネントサブアセンブリにシミュレーションデータをマッピングすることができます。rotationCentreはtransformPointsやsurfaceTransformPointsの「-centre」オプションと同様に動作し、点の位置から指定量を削除して回転を適用し、最後に新しく回転した点の位置に指定量を追加し直します。

Improved parallel performance

マージされたフィールドのプロセス間通信は、MPIスケジュール通信を使用するようになりましたが、ユーザーが選択することが可能です。サーフェスマージ情報はフィールドマージに再利用され、毎回サイズを収集するためのMPIコールが追加されるのを回避できます。これらの変更は、表面サンプリングが非常に頻繁に、例えば、毎反復、大きなコアカウントで実行されない限り、顕著ではありません。

ノイズユーティリティの改善

ノイズユーティリティによって生成されたテキストファイルは、以前の「グラフ」形式から、表面積平均値のヘッダーなど、追加のケース情報を含むより説明的なテキスト形式へと更新されました。

# 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)
...

Tutorial

  • $FOAM_TUTORIALS/incompressible/pimpleFoam/LES/vortexShed

Merge request

  • MR!562

新しい乱流解像度品質評価

陰解法LES/DESのグリッド独立性の検討とグリッド適応は、空間分解能とサブグリッドスケールモデリングの固有の結合のため、非自明で難解である。

LES/DES計算のメッシュ要件を評価できるように、新しいresolutionIndex関数オブジェクトは、以下のサブモデルを提供し、単一メッシュの解像度インデックスを提供します。

  • 乱流運動エネルギー変数を用いたPope(2000)の指標。
  • を用いたCelikら(2005)、Celikら(2009)の指標を使用。
    • 実効コルモゴロフ長尺と
    • vv

以下に最小限の例を示す。

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
    ...
}

下図は、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: データを不均等な幅のビンにグループ化します。

以前のタイムステップごとのファイルに基づく出力は、単一のファイルに置き換えられました。

histogram1
{
    type                    histogram;

    // Option-1
    model                   equalBinWidth;

    // Option-2
    model                   unequalBinWidth;

    ...

Source code

  • $FOAM_SRC/functionObjects/field/histogram

Tutorial

  • $FOAM_TUTORIALS/incompressible/pisoFoam/RAS/cavity

Merge request

  • MR!563

熱伝達率向上機能オブジェクト

HeatTransferCoeff関数オブジェクトがリファクタリングされ、新しいサブモデルであるfaceZoneReferenceTemperatureが導入されました。このサブモデルは、指定されたフェイスゾーンの面積平均温度を参照温度として、熱伝達率を評価します。以下に最小限の使用例を示します。

heatTransferCoeff1
{
    // Inherited entries
    ...

    // Mandatory entries
    htcModel            faceZoneReferenceTemperature;
    referenceFaceZone   <word>;

    // Optional entries
    referenceRegion     <word>;

Source code

  • $FOAM_SRC/functionObjects/field/heatTransferCoeff/heatTransferCoeffModels/faceZoneReferenceTemperature

Merge request

  • MR!561

fvOption出力の改善

以下のfvOptionsがファイルへの書き込みをサポートするようになりました。

  • velocityDampingConstraint
  • limitTemperature
  • limitVelocity

書き込みは、以下のような新しいwriteToFileオプションで制御します。

limitVelocity1
{
    type                    limitVelocity;
    ...

    // writeFile entries
    writeToFile             true;

各オプションで生成される出力ファイルの構造を示す例を以下に示す。

velocityDampingConstraint:

<case>/postProcessing/<dictionary_name>/<time>/velocityDampingConstraint.dat

# UMax          : 10
# Time              nDamped_[count]     nDamped_[%]

limitTemperature:

<case>/postProcessing/<dictionary_name>/<time>/limitTemperature.dat

# Tmin          : 280
# Tmax          : 310
# Time              nDampedCellsMin_[count] nDampedCellsMin_[%] nDampedCellsMax_[count] nDampedCellsMax_[%]

limitVelocity:

<case>/postProcessing/<dictionary_name>/<time>/limitVelocity.dat

# UMax          : 10
# Time             nDampedCells_[count]    nDampedCells_[%]    nDampedFaces_[count]    nDampedFaces_[%]

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のケースからの使用例を以下に示します。

turbulenceFields1
{
    type            turbulenceFields;
    libs            (fieldFunctionObjects);
    writeControl    writeTime;
    fields          (fd LESRegion);
}

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台まで増やした場合の結果を示しています。

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プロセッサのアグロメレーションに統合されました。

{
    solver          GAMG;
    ..
    processorAgglomerator   masterCoarsest;
    nCellsInCoarsestLevel   1;
    nMasters                2;
}

system/controlDictのデバッグスイッチで

DebugSwitches
{
    // Print number of processors per master
    masterCoarsest      1;
    // Print agglomeration
    GAMGAgglomeration   1;
}

17台のプロセッサに分割した簡単なケースで、プロセッサアグロメレーションを使用した場合の効果を見ることができます。

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

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の使用をグローバルに有効/無効にすることができるようになりました。

WM_COMPILE_CONTROL="+openmp" # with openmp enabled

WM_COMPILE_CONTROL="~openmp" # with openmp disabled

両方指定した場合は、~openmp の無効化が優先されます。単発で使用する場合は、対応する wmake オプションで代用できます。

wmake -openmp # with openmp enabled

wmake -no-openmp # with openmp disabled

これは、openmp サポートの有無にかかわらず、コンパイル時に役立ちます。

ccacheのラッピングに対応

ccache コンパイラ・キャッシュを使用すると、再コンパイルを高速化することができます。WM_COMPILE_CONTROL に追加することで、簡単に選択することができます。

WM_COMPILE_CONTROL="+ccache"

同じメカニズムで、コードインスツルメンテーションを追加することもできる。この場合、長い形式は WM_COMPILE_CONTROL で指定される。

WM_COMPILE_CONTROL="ccache='/path/my-tooling --option'"

wmakeの追加コントロール

コントロールの全リストは、以下を使用して入手できます。

wmake -help-full

特に注目すべきは、完全なデバッグチェックによるコンパイル(例:アウトオブバウンド、最適化なし

wmake -debug-O0

これらのオプションは、例えば12コアを使用してコンパイルする場合など、通常のオプションと組み合わせることができます。

wmake -debug-O0 -j 12