以下のようにして cavitatingFoam 内で mu を計算するように改造すれば良い
のではないでしょうか?
$(FOAM_SOLVERS)/multiphase/cavitatingFoam/createFields.H:
末尾等(gammaの定義後ならどこでも良いと思います)に以下を加える.
volScalarField mu
(
IOobject
(
"mu",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::NO_WRITE
),
gamma*muv + (1.0 - gamma)*mul
);
$(FOAM_SOLVERS)/multiphase/cavitatingFoam/gammaPsi.H:
gammaを計算している行の後に以下を加える.
mu = gamma*muv + (1.0 - gamma)*mul;
これでとりあえず値は出ると思います.
ただし,これで正しい抗力が計算できるかはわかりません;;
私もOpenFOAMを触るまではC++はほとんどやったことがなかったので,未だに
OpenFOAMのアプリケーションを作成する際は手探り状態です^^;.
でも,念のため今回のカスタマイズの思考手順を書いておきます.
少しでも参考になれば幸いです.
1. simpleFunctionObjectsのソースでpatchForceに関するソースを探す.
→ patch/patchForceFunctionObject/patchForceFunctionObject.C
2. muの値を参照している部分を見る.
→const volScalarField &mu=obr_.lookupObject<volScalarField>("mu");
→muはvolScalarFieldのClassであり,"mu"という名前のObjectとして定義さ
れていなければならない.
3. cavitatingFoam/UEqn.H内でmufを計算している部分を見る.
→surfaceScalarField muf("muf", gammaf*muv + (1.0 - gammaf)*mul);
→mufはsurfaceScalarField であり,gammaf,muv,mulより算出される.
→muv,mulはreadTransportProperties.Hで読まれるdimensionedScalar.
4. gammafの計算はどこ?
→UEqn.H: surfaceScalarField gammaf = fvc::interpolate(gamma);
→gammafはgammaを界面で補間したもの.
5. gammaの計算はどこ?
→gammaPsi.H: gamma = max(min((rho - rholSat)/(rhovSat - rholSat),scalar(1)), scalar(0));
→gammaが更新されるのはここだけなので,これ以降にmuを更新すれば良い.
6. gammaの定義はどこ?
→createFields.H: volScalarField gamma
→これ以降にmuの定義をすれば良い.
7. muの定義
→ファイルから読む必要はないので,IOobject::NO_READ
→結果を書き出す必要はないので,IOobject::NO_WRITE
8. muの初期値
→ファイルから読まないので,次元込みの初期値を与えないといけない.
→mufがgammaf*muv + (1.0 - gammaf)*mulだから,
とりあえずgamma*muv + (1.0 - gamma)*mulが妥当.
9. muの更新
→5.で見たようにgammaPsi.Hにおけるgammaの更新後に,muを更新すれば良い.
→初期値の与え方と同様に,以下の式で更新すれば良い.
→mu=gamma*muv + (1.0 - gamma)*mul;