水中における単一気泡の解析について

1,461 views
Skip to first unread message

srv

unread,
Sep 30, 2010, 8:46:58 AM9/30/10
to OpenFOAM
数値解析並びにOpenFoam初心者のsrvと申します。

interFoamを用いて単一気泡の解析にとりくんでいるのですが、解析がうまくいきません。

ベースとしているのはチュートリアルにある、interFoamのdamBreakで、計算領域とsetFieldだけを変えて計算しています。

モデルは上部解放した正方領域の箱の底辺中央に半球型の気泡を置いています。(2Dなので半円ですが)

上部解放は元のベースを変えず atmosphere として境界設定されています。その他は壁条件です。



結果として、気泡の上昇は確認できるのですが、気泡が左右に流れてしまいます。(左右対称なのでまっすぐ上昇すべきだと考えています。)

さらに問題なのは気液界面で、初期の状態で上部にはうっすらと界面が見えるのですが、気泡上昇が始まると界面が波打って下がってきます。

気泡による浮力のみの対流ではありえないような波打ちをしています。


そもそもinterFoamではこの解析は厳しいのでしょうか?
それとも境界条件でしょうか?(周期境界を入れたいのですがこれもわかりません・・・)


画像なしでわかりにくいですが、OpenFoamで気液二相の解析をしている方など、少しの情報でよいので解決策をご教授いただきたいです。よろしくお
願いします。

ohb...@amber.plala.or.jp

unread,
Sep 30, 2010, 3:51:27 PM9/30/10
to OpenFOAM
おはようございます。

まず、dumBreakのメッシュをそのまま使われたとすれば、4mx4mの大きな領域の計算となります。
流体は水と空気、重力加速度は9.8m/s^2になっています。
つまり、密度1000倍の大変激しい現象です。

単一気泡上昇の様なマイルドな界面現象を計算する場合には、もっと小さい領域の計算(メッシュ
サイズを小さくする)か、重力加速度か密度差を小さくした方が良いと思います。

また、初期の界面分布のノイズも計算に影響します。setFieldでは円形領域を設定できなかった
様な気がしますが、なめらかな領域が定義できているのでしょうか?
初期分布をParaviewで確認してみると良いでしょう。

funkySetFieldというユーティリティを使うと簡単に複雑なフィールド定義ができます。
http://openfoamwiki.net/index.php/Contrib_funkySetFields#Basic_command_line_usage

以上、ご参考まで。

Masashi Imano

unread,
Sep 30, 2010, 10:09:17 PM9/30/10
to open...@googlegroups.com
srvさん

今野です。

解析結果をParaview(ParaFoam)でAnimationにして、youtubeにアップロードしてもらう
と状況が良くわかり、回答もしやすいと思います。

Ref.
http://groups.google.com/group/openfoam/browse_thread/thread/b19c23b1a271712b/3066f17599e00ca8?hl=ja&lnk=gst&q=interFOam+youtube#3066f17599e00ca8

また、可能ならば主要な計算入力ファイル(blockMeshDictやsetFieldsDictとか)を書いてもらえると
さらに回答がしやすいと思います。

Message has been deleted

srv

unread,
Oct 1, 2010, 1:53:14 PM10/1/10
to OpenFOAM
早速のご返信ありがとうございます。

情報が足りずすみません、単一気泡の解析では0.05m×0.05mの領域で計算しています。
後ほど主要な計算設定ファイルを投稿したいと思います。よろしくお願いします。

>単一気泡上昇の様なマイルドな界面現象を計算する場合には、もっと小さい領域の計算(メッシュ
>サイズを小さくする)か、重力加速度か密度差を小さくした方が良いと思います。

専門的な意見ありがとうございます。たしかに水と空気のような密度差が大きい場合には、厳密に現象を取り扱うのが難しいというのが感覚的にわかる気が

ます。
重力加速度を小さくするというのは、浮力の影響が小さい場合の挙動を見てみる、という解釈で正しかったでしょうか?
今回の計算では、浮力による対流が気泡の動きに大きな影響を与えていたと思うので、是非実践してみたいと思います。

setFieldsの円形領域ですが、球を置く設定を見つけ、適用しました。
これが滑らかであったかは、自分でも判断できないのでfunkySetFieldを使って比較してみたいと思います。
funkySetFieldなのですが、いままでこのユーティリティの存在を知りませんでした。
このような情報は自分にとって、とても有意義でありがたかったです。早速いろいろなケースに適用していきたいと思います。

引き続きこの問題にトライしていきます。またわからないことがでてきましたらこのフォーラムにお願いすると思います。
そのときはぜひまたお願いします。
この度は、丁寧で専門的なご回答ありがとうございました。

srv

unread,
Oct 4, 2010, 4:03:18 AM10/4/10
to OpenFOAM
お世話になっております。srvです。

今回の現象をyoutubeにアップロードしてみました。
http://www.youtube.com/watch?v=8FgaqJx8Wqo

いまだに界面が下がってくるという現象が理解できません。

設定ファイルのミスも考えられるので、もし変な所がありましたらご指摘いただきたいです。



境界条件  上から速度、ボイド率、圧力

/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
location "0";
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

dimensions [0 1 -1 0 0 0 0];

internalField uniform (0 0 0);

boundaryField
{
leftWall
{
type fixedValue;
value uniform (0 0 0);
}
rightWall
{
type fixedValue;
value uniform (0 0 0);
}
lowerWall
{
type fixedValue;
value uniform (0 0 0);
}


atmosphere
{
type pressureInletOutletVelocity;
value uniform (0 0 0);
// type zeroGradient;
}


defaultFaces
{
type empty;
}
}


//
************************************************************************* //

/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
location "0";
object alpha1;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

dimensions [0 0 0 0 0 0 0];

internalField uniform 1;


boundaryField
{
leftWall
{
type zeroGradient;
}
rightWall
{
type zeroGradient;
}
lowerWall
{
type zeroGradient;
}
atmosphere
{
type inletOutlet;
inletValue uniform 0;
value uniform 0;
}
defaultFaces
{
type empty;
}
}


//
************************************************************************* //

/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p_rgh;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

dimensions [1 -1 -2 0 0 0 0];

internalField uniform 0;

boundaryField
{
leftWall
{
type buoyantPressure;
value uniform 0;
}

rightWall
{
type buoyantPressure;
value uniform 0;
}

lowerWall
{
type buoyantPressure;
value uniform 0;
}

atmosphere
{
type totalPressure;
p0 uniform 0;
U U;
phi phi;
rho rho;
psi none;
gamma 1;
value uniform 0;
}

defaultFaces
{
type empty;
}
}

//
************************************************************************* //




メッシュファイル
/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

convertToMeters 0.05;

vertices
(
(0 0 0)
(1 0 0)
(1 1 0)
(0 1 0)
(0 0 0.1)
(1 0 0.1)
(1 1 0.1)
(0 1 0.1)
);

blocks
(
hex (0 1 2 3 4 5 6 7) (100 100 1) simpleGrading (1 1 1)
);

edges
(
);

patches
(
/* wall fixedWall
(
(3 7 6 2)
(0 4 7 3)
(2 6 5 1)
(0 1 5 4)
)
empty frontAndBack
(
(0 3 2 1)
(4 5 6 7)
)
*/
wall leftWall
(
(0 4 7 3)
)
wall rightWall
(
(2 6 5 1)
)
wall lowerWall
(
(0 1 5 4)
)
patch atmosphere
(
(3 2 6 7)
)
);

mergePatchPairs
(
);

//
************************************************************************* //


boundaryファイル

/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class polyBoundaryMesh;
location "constant/polyMesh";
object boundary;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

5
(
leftWall
{
type wall;
nFaces 100;
startFace 19800;
}
rightWall
{
type wall;
nFaces 100;
startFace 19900;
}
lowerWall
{
type wall;
nFaces 100;
startFace 20000;
}
atmosphere
{
type patch;
nFaces 100;
startFace 20100;
}
defaultFaces
{
type empty;
nFaces 20000;
startFace 20200;
}
)

//
************************************************************************* //


controlDict

/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

application interFoam;

startFrom startTime;

startTime 0;

stopAt endTime;

endTime 0.6;

deltaT 0.0001;

writeControl adjustableRunTime;

writeInterval 0.01;

purgeWrite 0;

writeFormat ascii;

writePrecision 6;

writeCompression uncompressed;

timeFormat general;

timePrecision 6;

runTimeModifiable yes;

adjustTimeStep yes;

maxCo 0.5;
maxAlphaCo 0.5;

maxDeltaT 1;


//
************************************************************************* //



setFields

/*--------------------------------*- C++ -
*----------------------------------*\
| =========
| |
| \\ / F ield | OpenFOAM: The Open Source CFD
Toolbox |
| \\ / O peration | Version:
1.7.0 |
| \\ / A nd | Web: www.OpenFOAM.com
|
| \\/ M anipulation
| |
\*---------------------------------------------------------------------------
*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object setFieldsDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* * * //

defaultFieldValues
(
volScalarFieldValue alpha1 1
);

regions
(
sphereToCell
{
centre (0.025 0 0.00);
radius 0.004;
fieldValues
(
volScalarFieldValue alpha1 0
);
}
);


//
************************************************************************* //


nakagawa

unread,
Oct 4, 2010, 5:48:34 AM10/4/10
to OpenFOAM
興味深い動画の投稿,ありがとうございます。

 上面の境界条件で,alpha1のinletValueが0となっているため,
流入してくる流体が空気になるのではないでしょうか?
 これを1にすれば,とりあえず,界面がさがることはないのでは?
(境界値も1にする必要あるかもしれません。)
この設定では,atmosphereでなくなってしまいますが。

 速度ベクトルを見ないとはっきりしませんが,計算初期に,
中央部から水が流出しているのではないでしょうか。その時,
上面端部から,空気が入ってくるために界面が下がるのかと
想像しています。

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

IMANO Masashi

unread,
Oct 4, 2010, 5:52:45 AM10/4/10
to open...@googlegroups.com

今野です。

interFoamで用いているVOF法は良く知らないのですが、atmosphere境界は
大気のための境界条件なのにそこに水が接しているのが問題ではないでしょう
か?

実際、setFieldsしないで気泡が無い状態で走らせても、上部から空気が入っ
てきてしまいます。

そこで、上の1/5に空気を入れるようにsetFieldsDictを修正すると液面が勝手
に波立つことは無くなりました。

ただ、気泡が床面に接していると、中々上に上ってこなかったので、気泡の初
期位置を、床面から少し上にしてみたのが、以下の動画です。

a rising bubble in water
http://www.youtube.com/watch?v=BdAW4hOOyRU

この結果が妥当かはわかりませんが、以下に設定ファイルを圧縮して置いてお
きました。

bubbleInWater.tar.bz2
https://docs.google.com/leaf?id=0B-wTBBEFhObnNWM0MWM4ZDItYzBkNy00ODkwLThkZmQtMzQ2MzBkYzJhNmJm&hl=ja

以下のようにして走らせください。

tar jxpf bubbleInWater.tar.bz2
cd bubbleInWater
./Allrun

なお、

./Allclean

で初期化します。

ohb...@amber.plala.or.jp

unread,
Oct 4, 2010, 7:08:42 AM10/4/10
to OpenFOAM
こんばんは。横から失礼します。
StarCDなどの汎用コードを利用してVOFで計算した経験から、
液相上部の空気相は僅かな水面変動で激しく暴れるため、
十分大きな体積を確保した方が良いという知見を得ました。

本来計算と関係のない空気相の速度が暴れるために水面
に影響を受けない様に空気相領域を広く(粗いメッシュで)
とり、水面を安定化した方が良いと思います。

外しているかも知れません。ご参考まで。

srv

unread,
Oct 6, 2010, 5:09:30 AM10/6/10
to OpenFOAM
nakagawa様

inletValue,Valueともに1にして計算してみたところ、おっしゃるとおり界面が下がってくる現象が消えました!
ただ、上部に気体がとどまる(壁には接しない)という解析結果になりました。
後々には境界条件を変更して、気泡が上部を抜けていくような解析をしていきたいです。

中央部から水が流出しているという予想ですが、なるほどと思いました。
私はうまくいかない理由として、ただ境界条件がおかしいとだけ考えていたのでこれからはもう少し深く考えていこうと思います。

大変参考になりました!
ありがとうございました。

srv

unread,
Oct 6, 2010, 7:28:36 AM10/6/10
to OpenFOAM
今野様

お世話になっております。
動画拝見しました。

さすが!と思いました。それと同時に自分の力不足を痛感しました。
かなり実際の現象に近いように見えます。
ohbuchiさんのアドバイスも参考に計算領域を拡大し、自分でも再計算して妥当性を検討していきたいと思います。

お忙しい中、計算に加え動画のアップロード並びに設定ファイルの公開をしていただきありがとうございました。
多くの時間を浪費されたと思います。

私も今野さんのようにすぐに問題解決できるほどOpenFoamを使いこなしてみたいです。
そのために頑張っていきますので今後ともよろしくお願いします。

本当にありがとうございました。

srv

unread,
Oct 6, 2010, 7:40:20 AM10/6/10
to OpenFOAM
ohbuchi 様

お世話になっております。

大変参考になるアドバイスありがとうございます。
空気層を大きくとるということは自分一人では永遠に気付かなかったかもしれません。

今野さんの計算結果をベースにohbuchiさんのアドバイスを加え計算してみようと思います。

良い結果ができましたら、またyoutubeにアップロードしようと思います。

本当に感謝しています。今後ともよろしくお願いします。
Reply all
Reply to author
Forward
0 new messages