はじめに
interFoamでnotched disc in rotating flowの計算を試みた。
ESI版ではなんとinterIsoFoamにチュートリアルケースがあり、速度場の初期値はsetVelocityなるfunctionObjectで設定が可能である。よってこれを流用すればinterFoamでも計算ができる。
一方、Foundation版には上述の便利な機能がないため、0/UのinternalFieldにcodeStreamを適用することで速度場の初期値を設定することになる。
バージョン11でこのcodeStreamにエラーが発生した。原因の調査および対策を以下に記す。
発生状況
バージョン10でのcodeStream.Hでの例は次の通りである。
codeStream.H(v10)
internalField #codeStream
{
code
#{
const IOdictionary& d = static_cast<const IOdictionary&>(dict);
const fvMesh& mesh = refCast<const fvMesh>(d.db());
scalarField fld(mesh.nCells(), 12.34);
writeEntry(os, "", fld);
#};
//- Optional:
codeInclude
#{
#include "fvCFD.H"
#};
//- Optional:
codeOptions
#{
-I$(LIB_SRC)/finiteVolume/lnInclude
#};
};
これがバージョン11では「fvCFD.Hが存在しない」という理由でエラーになる。
対策
バージョン11のcodeStream.Hには次のような例が記されている。
codeStream.H(v11)
nternalField #codeStream
{
code
#{
const IOdictionary& d = static_cast<const IOdictionary&>(dict);
const fvMesh& mesh = refCast<const fvMesh>(d.db());
scalarField fld(mesh.nCells(), 12.34);
writeEntry(os, "", fld);
#};
//- Optional:
codeInclude
#{
#include "volFields.H"
#};
//- Optional:
codeOptions
#{
-I$(LIB_SRC)/finiteVolume/lnInclude
#};
};
インクルードするヘッダファイルがfvCFD.HからvolFields.Hに変更されている。
実際に、バージョン11ではインクルードするファイルをvolFields.Hと記述すれば問題なく動く。
おわりに
本当に一体なんでこんな変更をするのだろう...???