interPhaseChangeFoamにおけるエラーについて

793 views
Skip to first unread message

ryutaitaro

unread,
Dec 5, 2011, 3:40:00 AM12/5/11
to OpenFOAM
OpenFOAM初心者のryutaitaroです。

interPhaseChangeFoamを用いて計算を行っています。
何とか計算はできていたのですが、実験結果とズレがあったので精度を上げてみようと思い
、メッシュを細かくしたところ下記のようなエラーが出てきて計算が止まってしまいます。


#0 Foam::error::printStack(Foam::Ostream&) in "/opt/openfoam201/
platforms/linux64GccDPOpt/lib/libOpenFOAM.so"
#1 Foam::sigFpe::sigHandler(int) in "/opt/openfoam201/platforms/
linux64GccDPOpt/lib/libOpenFOAM.so"
#2 in "/lib/libc.so.6"
#3 Foam::inv(Foam::Field<Foam::SymmTensor<double> >&,
Foam::UList<Foam::SymmTensor<double> > const&) in "/opt/openfoam201/
platforms/linux64GccDPOpt/lib/libOpenFOAM.so"
#4
in "/opt/openfoam201/platforms/linux64GccDPOpt/bin/
interPhaseChangeFoam"
#5
in "/opt/openfoam201/platforms/linux64GccDPOpt/bin/
interPhaseChangeFoam"
#6
in "/opt/openfoam201/platforms/linux64GccDPOpt/bin/
interPhaseChangeFoam"
#7
in "/opt/openfoam201/platforms/linux64GccDPOpt/bin/
interPhaseChangeFoam"
#8 __libc_start_main in "/lib/libc.so.6"
#9
in "/opt/openfoam201/platforms/linux64GccDPOpt/bin/
interPhaseChangeFoam"
Floating point exception

乱流モデルはk-εを用いています。また細かいメッシュでsimpleFoamで計算したところ計算を行うことができました。
さらにソルバーにコメント文を打っていったところ下記のInfo<< "\np-47\n" << endl;まで表示されるのを確認しました。


<<pEqn.H>>
{
volScalarField rAU(1.0/UEqn.A());
surfaceScalarField rAUf(fvc::interpolate(rAU));

U = rAU*UEqn.H();

surfaceScalarField phiU
(
"phiU",
(fvc::interpolate(U) & mesh.Sf())
+ fvc::ddtPhiCorr(rAU, rho, U, phi)
);

adjustPhi(phiU, U, p_rgh);

phi = phiU +
(
fvc::interpolate(interface.sigmaK())*fvc::snGrad(alpha1)
- ghf*fvc::snGrad(rho)
)*rAUf*mesh.magSf();

Pair<tmp<volScalarField> > vDotP = twoPhaseProperties->vDotP();
const volScalarField& vDotcP = vDotP[0]();
const volScalarField& vDotvP = vDotP[1]();
Info<< "\np-25\n" << endl;
for (int nonOrth=0; nonOrth<=pimple.nNonOrthCorr(); nonOrth++)
{
fvScalarMatrix p_rghEqn
(
fvc::div(phi) - fvm::laplacian(rAUf, p_rgh)
- (vDotvP - vDotcP)*(pSat - rho*gh) + fvm::Sp(vDotvP -
vDotcP, p_rgh)
);

p_rghEqn.setReference(pRefCell, pRefValue);
Info<< "\np-35\n" << endl;
p_rghEqn.solve
(
mesh.solver(p_rgh.select(pimple.finalInnerIter(corr,
nonOrth)))
);

if (nonOrth == pimple.nNonOrthCorr())
{ Info<< "\np-42\n" << endl;
phi += p_rghEqn.flux();
}
}
Info<< "\np-47\n" << endl;
U += rAU*fvc::reconstruct((phi - phiU)/rAUf);
Info<< "\np-48\n" << endl;
U.correctBoundaryConditions();
Info<< "\np-49\n" << endl;
#include "continuityErrs.H"

p == p_rgh + rho*gh;

if (p_rgh.needReference())
{
p += dimensionedScalar
(
"p",
p.dimensions(),
pRefValue - getRefCellValue(p, pRefCell)
);
p_rgh = p - rho*gh;
}
}


自分でも調べてみたのですが、PISOのループ計算のところでおかしいことが起きているということ以外わかりませんでした。何が起きているのかわかる方
はいっらしゃらないでしょうか?ご教授頂ければ幸いです。

nakagawa

unread,
Dec 5, 2011, 6:08:08 PM12/5/11
to OpenFOAM
nakagawaです。
詳細わからないので,的外れかもしれませんが,返信します。

メッシュを細かくして計算できなくなる原因として,時間刻みが大きすぎることが考えられます。
メッシュにあわせて,deltaTも小さくしましたか?

計算過程で表示されるクーラン数(平均とMax)はどの程度になっているのでしょうか。

参考になると良いのですが。

中川慎二

ryutaitaro

unread,
Dec 5, 2011, 7:48:11 PM12/5/11
to OpenFOAM
nakagawa様
返信ありがとうございます。

deltaTも小さくしました。
deltaTが大きすぎたり小さすぎたりしているのかもしれないと思い、何度か変更してみましたがダメでした。
計算途中で表示されるクーラン数の平均と最大は
mean: 0.0132833 max: 0.999884(deltaT=1e-5)
mean: 0.000357286 max: 0.0268942(deltaT=1e-7)
程度です。

エラーの場合に示すべき事柄がよくわかっていなくて、申し訳ないです。
ほかに示したほうがよい物などは何かありますでしょうか?

松成宏樹

> > はいっらしゃらないでしょうか?ご教授頂ければ幸いです。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

nakagawa

unread,
Dec 7, 2011, 7:34:02 AM12/7/11
to OpenFOAM
ryutaitaro様

deltaTは確認ずみだったのですね。

計算が発散しているのではないでしょうか。
対処療法としては,発散の原因となっている場所(セル)を特定して,セルの品質を上げることが考えられます。

私はinterFoamを使っており,interPhaseChangeFoamは未使用です。
私が発散に遭遇したときは,次の様に対処します。

発散する時刻付近で,結果を細かく出力させる。
→発散直前の時刻で,圧力or速度or alphaのContourを表示する。(最大値に近い値の面)
→発散の原因となる異常値が発生した場所を特定する。
→その辺りのセルで,セル形状にひずみがないか,セルサイズが急変していないか等をチェックする。
→セルを作り直す。 → 計算 → 発散 → 場所特定 → セル修正 → 計算 → ・・・・・・

checkMeshユーティリティを使って,品質の低いセルを探す方法もあります。
http://groups.google.com/group/openfoam/browse_thread/thread/cf33aeb179b7cacc


他に良い方法をご存じの方,ぜひ,フォローをお願いいたします。

幸運をお祈りします・・・

eto kimi

unread,
Dec 7, 2011, 12:53:39 PM12/7/11
to open...@googlegroups.com
Motoe と申します。OpenFOAM初心者です。

差し出がましいようですが、
もし乱流モデル関係で計算が破綻しているのならば、
メッシュを細かくしすぎたのが原因ということも考えられるそうです。
詳しい理由に関しましては、webで公開されている、
東北大学名誉教授 大宮司久明先生著
「数値流体大全」の18章辺りに記述がありました。
ご参考になれば幸いです。

乱筆失礼致しました。


2011年12月5日17:40 ryutaitaro <hi.mat...@gmail.com>:

> --
> このメールは Google グループのグループ「OpenFOAM」の登録者に送られています。
> このグループに投稿するには、open...@googlegroups.com にメールを送信してください。
> このグループから退会するには、openfoam+u...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/openfoam?hl=ja からこのグループにアクセスしてください。
>

ryutaitaro

unread,
Dec 8, 2011, 3:41:53 AM12/8/11
to OpenFOAM
nakagawa様
何度もご教授くださってありがとうございます。

checkMeshという機能は知りませんでした。
checkMeshを行ったところFailed 1 mesh checksと表示されたのでどこかメッシュがおかしいようです。
しかし具体的にどの部分がおかしいのかエラー文章から読み取ることができませんでした。
また実験結果とのズレがあるのでメッシュを細かくしてみたのですが、そのズレはどうやら標準k-εモデルを
用いたことが原因であったようです。余談ですが、単独翼などの周りの流れ場については標準k-εでは予測
精度が落ちてしまうようでした。
そのため荒い方のメッシュを用いて標準k-εではなくRNGk-εを用いて計算を行って行こうと思います。

どうもありがとうございました。またよろしくお願いします。

松成宏樹


On 12月7日, 午後9:34, nakagawa <snakagawa....@gmail.com> wrote:
> ryutaitaro様
>
> deltaTは確認ずみだったのですね。
>
> 計算が発散しているのではないでしょうか。
> 対処療法としては,発散の原因となっている場所(セル)を特定して,セルの品質を上げることが考えられます。
>
> 私はinterFoamを使っており,interPhaseChangeFoamは未使用です。
> 私が発散に遭遇したときは,次の様に対処します。
>
> 発散する時刻付近で,結果を細かく出力させる。
> →発散直前の時刻で,圧力or速度or alphaのContourを表示する。(最大値に近い値の面)
> →発散の原因となる異常値が発生した場所を特定する。
> →その辺りのセルで,セル形状にひずみがないか,セルサイズが急変していないか等をチェックする。
> →セルを作り直す。 → 計算 → 発散 → 場所特定 → セル修正 → 計算 → ・・・・・・
>

> checkMeshユーティリティを使って,品質の低いセルを探す方法もあります。http://groups.google.com/group/openfoam/browse_thread/thread/cf33aeb1...

> > > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

ryutaitaro

unread,
Dec 8, 2011, 3:53:34 AM12/8/11
to OpenFOAM
Motoe様
返信どうもありがとうございます。

メッシュを細かくすれば精度が向上するものとばかり思っていたのですが、
そうでない場合もあるのですね。存じませんでした。
メッシュがこまかすぎるのか悪いのかはわかりませんが、どちらにせよある程度
の精度を荒いメッシュで保てそうなので荒いメッシュで計算していこうと思います。
またこのような大変参考になる文献を教えて頂いて感謝しております。
ありがとうございました。

Motoe様、nakagawa様とても勉強になりました。
お礼を申し上げます。どうもお世話になりました。

松成宏樹


On 12月8日, 午前2:53, eto kimi <rae28...@gmail.com> wrote:
> Motoe と申します。OpenFOAM初心者です。
>
> 差し出がましいようですが、
> もし乱流モデル関係で計算が破綻しているのならば、
> メッシュを細かくしすぎたのが原因ということも考えられるそうです。
> 詳しい理由に関しましては、webで公開されている、
> 東北大学名誉教授 大宮司久明先生著
> 「数値流体大全」の18章辺りに記述がありました。
> ご参考になれば幸いです。
>
> 乱筆失礼致しました。
>

> 2011年12月5日17:40 ryutaitaro <hi.matsun...@gmail.com>:

> > 詳細については、http://groups.google.com/group/openfoam?hl=jaからこのグループにアクセスしてください。- 引用テキストを表示しない -
>
> - 引用テキストを表示 -

Reply all
Reply to author
Forward
0 new messages