対処方法
OpenFOAM8 の finiteVolume ライブラリ部分のソースと設定を一部を修正し、コンパイルします。
全体を再コンパイルする訳ではなのでそんなに時間は掛かりません(Core i7 の 8 並列で 5 分くらい)。
原因について → Github に Issue が上がっていました
こちらです。
この記事のタイトルにある問題の原因をズバリ書いてくれています。
OpenFOAM は dictionary 形式の設定ファイルに対して、そのエントリが文法的には正しいけれども不要なものであると判断した場合には無視するという挙動をする様です。
codedFixedValue
及び codedMixedValue
の設定に使う dictionary の、必要とされうるエントリのリスト的なものが設定されている部分が有ります。どうやらそこに"codeOptions"
が抜けていることが原因とのこと。
対処方法の詳細
1. ソースの修正
問題のソースは、
/opt/openfoam8/src/finiteVolume/fields/fvPatchFields/derived/codedFixedValue/codedFixedValueFvPatchFields.C
及び、
/opt/openfoam8/src/finiteVolume/fields/fvPatchFields/derived/codedMixedValue/codedMixedValueFvPatchFields.C
になります。
2021/02/06 追記
これらは大本のソースコードなので、編集用にコピーしてきます。
修正したいファイルは一部なのですが、関連するライブラリをまるごと(Makeフォルダがあるディレクトリまで遡って)コピーします。
この場合は、finiteVolume ライブラリをコンパイルすることになります。
cp -r /opt/openfoam8/src/finiteVolume (お好きなディレクトリ)
コピーした方のソースコード内に含まれるリスト中に、"codeOptions"
を追加します。
//
// 一部抜粋、codedMixedValue側も同様
//
template<>
const Foam::wordList
Foam::CodedBase<Foam::codedFixedValueFvPatchFieldBase>::codeKeys_ =
{
"code",
"codeInclude",
"codeOptions", // ← これを追加
"localCode"
};
2. finiteVolume ライブラリの再コンパイル
万が一、自分でコンパイルしたライブラリに問題が起こった場合には finiteVolume ライブラリに依存する全てのソルバー類が使えなくなったら嫌だなあと思います(そんなことはまず無いかもですが)。
OpenFOAMには、ソルバー等がライブラリを検索するときに、FOAM_LIBBIN
よりも FOAM_USER_LIBBIN
に置いてあるライブラリを優先して使用する仕組みが有るそうです(いつも参考にさせて頂いているサイトの記事)。
自分で修正・コンパイルした finiteVolume ライブラリをそこに設置する様に設定します。次のファイルの末尾を次のように修正します。
LIB = $(FOAM_USER_LIBBIN)/libfiniteVolume
export WM_NCOMPPROCS=8
等、並列数を指定してから /opt/openfoam8/src/finiteVolume フォルダで wmake
を実行します。
多分ファイルの書き込み権限に関するエラーが出るので、エラーメッセージから必要そうなディレクトリを予め作成したり、書き込み権限を与えておいたりしておくとビルドが通ります。
手順は以上です。これで安心して、位置と時間に依存する境界条件を codedFixedValue で設定して decomposePar して並列計算出来るようになります…… それでは皆様、良い CFD を。