5月23日の記事の続きです。

結局、InterFoamに温度場を加える改造ではなく、熱輸送と浮力駆動流れbuoyantBoussinesqPimpleFoam(浮力を伴う非圧縮性乱流用非定常ソルバ)を利用して、円筒表面に温度差がありz軸周りに回転している円筒内の空気の風速、温度、発生物質の拡散を解くことにしました。

そのために、buoyantBoussinesqPimpleFoamに発生物質の拡散を解く改造を行いました。
改造内容は異なりますが、改造に際しては「実践ソルバー改良① scalarTransportFoamの改良事例 柴田貴裕」を参考にしました。

また、境界条件を時間によって変更するために、swak4Foam(funkySetFields, groovyBC)を利用しました。インストールに関しては、
swak4Foam(funkySetFields, groovyBC)のインストール勉強会@関西幹事 冨原 大介 ~関数による境界条件の設定~
を参考にしました。

swak4Foamのインストールでは大変苦労しました。Ubuntu14.04 LTSの場合、パッケージを利用したインストールではbison3.xがインストールされます。swak4Foamのインストールではbison2.7.1以下が必要です。Ubuntuのパッケージサイトを利用したり、コマンドラインから古いバージョンbison2.7.1を指定しても完全にはインストールできませんでした。結局、ソースコードからコンパイルしてインストールする方法で、swak4Foamのコンパイルとインストールに辿り着きました(コンパイルに数十分かかりました)。

現在、groovyBCを利用して、温度と発生物質の境界条件に、時間で変化する関数を設定しています。

今後は、設定値などを再確認し、求める計算精度が達成できているかどうかを確認していきます。

20150608-1.png
OpenFoamで作成した半径3.2km、長さ30kmのIsland Threeの熱流体解析モデル(画像はparaViewのスナップショット)

20150608-2.png
Island Three内部表面の温度、赤いところが居住区域、青いところが窓、奥の青い円は太陽とは逆側の壁


Island Threeの画像へのリンク
 
5月16日の記事の続きです。

私が計算したい円筒表面温度に差がある円筒内の回転流体を解析するためには、interFoamにさらに
・温度場の計算
・温度による密度変化に起因する浮力の計算
を入れる必要があります。

まずは、下記の情報を参考にinterFoamに温度場を加えたinterTempFoamを作成しました。

OpenFOAMのカスタマイズ・ソースコード改造入門(interFoam への温度場計算追加)
関連する情報は次のサイトにも http://eddy.pu-toyama.ac.jp/OpenFOAM/

OpenFoamの混相流solver interFoamのパラメータによる解の変化

自分で作成したものは、まだコンパイルが上手くいきません。海外のOpenFoam掲示板で調べて解決策が見つかりましたが、まだ納得できていないので、開発をとりあえず保留しています。
代わりに、上記1つ目のサイトでダウンロードできるソースコードをコンパイルして利用しようとしましたが、上手くコンパイルできません。
OpenFOAM 2.3.x では、interFoamのライブラリに変更があり、incompressibleTwoPhaseMixture を使わず、immiscibleIncompressibleTwoPhaseMixture が新設され使われているためのようです。
海外のOpenFoam掲示板で調べて解決策(問題箇所をコメントアウトする)を見つけコンパイル成功。ただし、この方法はもう少し検証が必要である。

まずは、普通のinterFoamの計算と比較するために、interTempFoamの温度場の初期値を均一に設定して計算をする。

20150523-2.png
t=5sの状態
water, airの温度初期設定T=300Kで計算開始すると最初からwater,とairの境界で300K以上の領域が発生する。(ソースコードの元サイトにも書かれているように、Tの方程式の離散化について検討する必要があるようです)

またOpenFOAMのgoogleグループの投稿「温度場を導入したinterFoamの異常」には
・時間刻みを小さくすると多少改善される。
・速度場が大きいと温度場が破綻しやすい。
・容器に半分水を張ったような全く動きのない系でも最大温度を超える。(これについてはなぜか界面でわずかに速度場があることも疑問である。)
と書いてありました。これを参考にもう少し検討をしてみます。



 

5月1日の記事の続きです。(5月16日に記事を掲載したあと、回転させても水面が上がらない原因が判明したので、モデルと記事の内容を修正)

tutorials/multiphase/InterFoam/laminar/mixerVessel2Dをもとに、
5月1日に紹介した例題にあるように設定を変更する。(OpenFOAMがv2.1からv2.2になり、チュートリアルの構成が変更になりtutorials/multiphase/MRFInterFoam/mixerVessel2Dは存在しない)
このままではエラーが発生するので、少し調べました。

例えば、回転条件の設定の部分
constantのMRFZOneファイルがfvOptionに変更、記述方法も多少変更になりました。

実行はtutorials/multiphase/interFoam/laminar/MixerVessel2Dに付属のAllrunとMakeMeshを修正して作成し、ソルバーinterFoamを利用して実行

意図したとおりに計算できず、参考にした設定ファイルを再確認
constant/g z方向に-9.81設定
constant/polyMesh/blockMeshDictPipe-8.m
円管の長さ 5->2
長さの変換係数  ConvertToMetre 0.1 -> 1 に変更

constant/transportProperties
水の動粘性係数 1e-06に変更(元ファイルには1e-04とあり、OpenFormの日本語マニュアルには1e06とあり(タイプミス))
水と空気の粘性率sigma0.07に設定

実行可能であることを確認。

次にRASモデルを利用し、層流計算から乱流計算に変更
tutorials/multiphase/InterFoam/ras/damBreakから乱流計算のファイル
RASproperties をコピー
k をコピーし、wallsの設定を他のファイルと同じように変更

turbulenceProperties で SimulationType RASModel;に変更
エラーが出たので
fvSolusionの中の
PIMPLEに
pRefCell 0;
pRefValue 0;
の設定追加


OpenFOAMチュートリアルドキュメント作成プロジェクト ふうに基本情報をまとめました。

multiphaseInterFoam:3D回転円管の混相流

基本情報

SolvermultiphaseInterFoam
CasemixerVessel2D(/tutorials/multiphase/multiphaseInterFoam/laminar/mixerVessel2D)をもとにmixerVessel3Dを作成
Version 2.3.1
Kerword 非定常,混相流, VOF, MRF, 層流 or 乱流
変数 alpha[], U[m/s], p_rgh[kg/m/s^2] を各相(air, mercury, oil, water)毎に計算
定数constant/g
     g=0 [m/s^2]
constant/transportProperties にて、各相の nu, rho を定義
    nu.water=1e-6, nu.oil=1e-6, nu.mercury=1.125e-7,nu.air=1.48e-5 [m^2/s]
    rho.water=1000,rho.oil=500, rho.mercury=13529, rho.air=1 [kg/m^3]
constant/fvOption にて、回転条件を設定
    origin (0 0 0);    //  回転中心
    axis (0 0 1);        // 回転軸
    omega constant 10.5; // 回転角速度 rad/s
基礎方程式
 コメント・メッシュは、Moguraさんの円管メッシュ作成m4スクリプトを使って作成している。半径0.5m、高さ2mの円筒、円管の長手方向をz軸に設定
・setFieldDictによって初期水面の高さを1mに設定している。
・topoSetによって回転領域を定義している。
・Ver 2.3.0 までは、MRFMultipahseInterFoam というMRF計算専用のソルバーを使う必要があったが、Ver 2.3.1 からは、通常のmultiphaseInterFoamソルバーにて、constant/fvOption を使って計算できるようになった。
・下記例題では、高さ1mまでwaterを充填してz軸周りに回転する計算を実施 


ここまでの結果が以下になります。 
paraViewのスクリーンショットコピー機能で画像を保存しました。

20150519-1.png
200s後のalpha.waterの状態(赤い部分が水)


20150519-2.png
200s後の(-0.5, 0, 1)-(0.5, 0, 1)のラインの水の相比率

相比率(この場合水と空気)の変化から、回転軸から離れた壁面では1mの高さには水があり(水の比率が1に近い)、中心付近では水面が下がり1mの高さではほとんど水がない(水の比率が0に近い)様子がわかります。



回転角速度21rad/sの最初の10sのアニメーション

次はこのモデルを利用して、円筒容器内で回転する水の振動現象と履歴現象,ながれ30(2011)455-458の現象を再現してみようと思います。

さらにその次は、温度場計算モデルを加え、円筒容器表面の温度差による熱対流をモデル化する予定です。

スペースコロニー・アイランド3の大気循環解析までには、まだまだモデル設定や計算方法について勉強が必要です。





 
最近は、自分でPCを組み立てたり、UNIXサーバを構築したりすることから遠ざかっていましたが、今年のGWを利用してLinuxの計算環境を構築しています。

数値流体計算用にOpenFoamをWindows上でしばらく利用していましたが、ネット上に情報量が多くあるLinuxに移行しようと以下のPCをアマゾンで購入し、Windows7とUbuntuのデュアルブートにしました。

ASUS BT6130-B010A

このPCすでにパテーションが3つ利用済みで、Ubuntuインストールに必要なあと2つのパテーションが作成できません。
1 Windows7 loader
2 Windows7リカバリー
3 Windows7
4 NTFS

そのためUbuntuをDVDから起動しても、Windows7とUbuntuの併存インストールのメニューが出ません。
参考文献:http://satomablog.blog.fc2.com/blog-entry-6.html

「日経BPパソコンベストムック必ずできる!これからはじめるLinux」付属のDVDを利用してUbuntu 14.04 LTS(64bit版)をインストールする。

調べてみると、/dev/sda4を拡張パテーションにして、その中に2つのパテーションを作成し、1つをUbuntu、1つをswap領域にしてすると、インストールできることが書いてありました。
Ubuntu用に50GB,swap用に4GBを作成しました。

ネット上のページには書いてありませんでしたが、インストール用のパテーションを確保した後でインストールを開始すると、デュアルブートのインストールメニューが出てきました。
Windowsとの領域の割り当ての設定もその段階でできます。

http://www.openfoam.org/download/ubuntu.php の指示に従いOpenFoam Version 2.3.1をインストールし、無事完了しました。

チュートリアルにある
incompressible/icoFoam/cavity
multiphase/MRFMultiphaseInterFoam/mixerVessel2D
を実行してみました。
まずは、
回転円筒容器内の水面挙動(その1)
回転円筒容器内の水面挙動(その2)
と同じものをGW中に作成するのが最初のステップです。

(2015年4月24日)



 

| Home |