Help us understand the problem. What is going on with this article?

OpenFOAM8でcodedFixedValueを使ったケースにdecomposeParをするとcodeOptionsが反映されない問題への対処

対処方法

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
になります。これらのリストの中に、"codeOptions"を追加します。

codedFixedValueFvPatchFields.C
//
// 一部抜粋、codedMixedValue側も同様
//
template<>
const Foam::wordList
Foam::CodedBase<Foam::codedFixedValueFvPatchFieldBase>::codeKeys_ =
{
    "code",
    "codeInclude",
    "codeOptions", // ← これを追加
    "localCode"
};

2. finiteVolume ライブラリの再コンパイル

万が一、自分でコンパイルしたライブラリに問題が起こった場合には finiteVolume ライブラリに依存する全てのソルバー類が使えなくなったら嫌だなあと思います(そんなことはまず無いかもですが)。
OpenFOAMには、ソルバー等がライブラリを検索するときに、FOAM_LIBBIN よりも FOAM_USER_LIBBIN に置いてあるライブラリを優先して使用する仕組みが有るそうです(いつも参考にさせて頂いているサイトの記事)
自分で修正・コンパイルした finiteVolume ライブラリをそこに設置する様に設定します。次のファイルの末尾を次のように修正します。

/opt/openfoam8/src/finiteVolume/Make/options
LIB = $(FOAM_USER_LIBBIN)/libfiniteVolume

export WM_NCOMPPROCS=8 等、並列数を指定してから /opt/openfoam8/src/finiteVolume フォルダで wmake を実行します。
多分ファイルの書き込み権限に関するエラーが出るので、エラーメッセージから必要そうなディレクトリを予め作成したり、書き込み権限を与えておいたりしておくとビルドが通ります。

手順は以上です。これで安心して、位置と時間に依存する境界条件を codedFixedValue で設定して decomposePar して並列計算出来るようになります…… それでは皆様、良い CFD を。

Daiius
趣味と研究を兼ねてデジタル制御電源の開発をしています。 Windows GUIアプリケーション開発もします。 早い話が趣味が発散しています。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away