いきなりOpenFOAM (27)

拡散問題の解析

拡散の計算手順

 今回から、少し複雑な計算に取り組んでゆきます。これまで多くの設定にXSimを利用して計算用ファイルを生成してきましたが、XSimで設定できない内容については、XSimとあらかじめ用意されている設定ファイルを編集しながら計算を行います。
 これから6回は、ガス濃度や汚染物質の広がり、換気効率などの拡散問題についてOpenFOAMで解析してみます。
 さて、多くの市販CFDソフトウェアは、流れや熱の計算と同時に拡散の計算が可能ですが、カスタマイズしていないOpenFOAMの場合は、燃焼などの一部機能を除いて、流れや熱とは別に拡散の計算を行います。手順としては、まず流れの計算を行い、その結果を用いて拡散の計算を行います。

Tutorialの利用

 OpenFOAMにはソルバーや機能別に多くのTutorialが用意されています。計算ファイルを一から作成するのは大変ですので、多くの場合、同様の解析対象のTutorialから解析ファイルを編集して自身の計算を行います。
 今回は例として、TutorialケースにあるScalarTransportFoamのpitzDailyを動作させ、ファイルの内容について説明します。

 始めに、Tutorialケースをコピーします。OpenFOAMのインストールフォルダで、FOAM_TUTORIALS→basic→ScalarTransportFoamと辿り、pitzDailyフォルダを任意の箇所にコピーします。
 次に、コピーしたpitzDailyフォルダを開き、解析を行ってみます。フォルダ内で端末を開いて、以下の順にコマンドを入力します(WSLでは端末内で目的のフォルダまで移動)。
blockMesh
scalarTransportFoam

 端末内にいくつかのメッセージと計算結果が表示されます。計算が完了し入力待ちとなったら、paraFoamと入力すると、ParaViewが起動します。図1に示すように、断面を作成し、表示サイクルを適当な時間に設定し、表示変数をTとすると、変数Tのコンターマップが得られます。(ちょっと分かりにくいですが、この計算で変数Tは温度ではなく、濃度になります) 図1は、全体がT=0の領域内に、左側からT=1の媒体が流入し、右側から流出する際の、流入開始から0.05秒後のTの分布を示したものです。scalarTransportFoamは非定常計算で、時刻0で流入口の濃度が設定した値になった後の濃度分布の時間変化を計算します。したがって、出力された結果を順に表示すると、流入した媒体が拡散する様子を見ることができます。

図1 T濃度分布

 このTutorialケースでは、流れは計算済で、拡散方程式のみを解いています。計算済の流れの情報は、0フォルダのUファイルに記載されています。

流れから解く場合はXSimを利用

 さて、Tutorialケースではすでに流れの計算結果が用意されていましたが、実際の解析では流れの結果も用意しなければいけません。ただ、流れの計算はこれまでと同様、XSimを利用して計算が可能です。Tutorialケースでは最初にblockMeshコマンドを実行しましたが、XSimでモデル作成をする場合はメッシュも同時に生成され、拡散計算でも同じメッシュを利用するため、メッシュ作成は不要です。図2にXSimと組み合わせた場合の具体的な手順を示します。

図2 XSimと組み合わせた場合の手順

 具体的な操作方法については次回以降、例題を用いて説明してゆきます。

ファイルの修正

 図2の手順では、最初通常通り流れの計算を行い、結果を含めたファイルをTutorialケースに移植して、その後拡散計算を行うという手順になります。その際、transportProperties、T、controlDictのファイル内容を編集する必要があるので、ここではその内容を説明します。

 図3にtransportPropertiesファイルの修正箇所を示します。transportPropertiesファイルは拡散係数を記述したファイルで、図の赤い楕円で囲まれた数値が拡散係数です。[]内の数値は、基本単位kg,m,s,K,mol,A,Cdの次元で、図ではmが2、sが-1なので、m2/sとなり、拡散係数の単位となっています。参考までに、空気中でのガス拡散の拡散係数は10-5 m2/sのオーダーです。

図3 transportPropertiesファイル修正箇所

 図4にTファイルの修正箇所を示します。Tファイルは拡散物質の濃度の初期条件と境界条件を記述したファイルです。図のdimensionsで、4番目が1となっていることから、温度Tを拡散物質濃度の代わりにしていることがわかります。internalFieldは初期条件で、0であることから計算開始時には領域内の濃度は0となります。boundaryFieldは境界条件で、inlet、outletなどは、メッシュデータの領域名と一致させる必要があります。具体的にはXSimで設定した領域名と同じにします。図では、領域inletでは濃度が1の流体が流入することを示しています。zeroGradientは勾配が0ということで、境界での値は近傍での値となります。壁や流出口の境界条件に用いられます。

図4 Tファイル修正箇所

 図5にcontrolDictファイルの修正箇所を示します。controlDictファイルは、解析終了時間、時間刻み、出力タイミングを設定します。図では、解析終了時間は0.1秒、時間刻みは0.0001秒、50サイクル毎に出力なので、0.005秒ごとの計算結果をParaViewで可視化できます。解析終了時間と出力タイミングは任意に設定できますが、時間刻みはクーラン条件に従う必要があります。

図5 controlDictファイル修正箇所

 クーラン条件とは、数値解析においては、情報が伝わる速さは対象の現象が伝わる速さよりも大きくなければならないという条件です。流体解析では、クーラン数=流速×時間刻み/空間刻み、で表されるクーラン数が1未満となるように、時間刻みを設定します。クーラン数はscalarTransportFoamを実行後、端末内に表示されます。端末のスクロールバーをスライドさせ、図6に示す画面にすると、赤い丸で囲まれた箇所にクーラン数が表示されています。この例の場合、クーラン数の平均は0.45と1未満ですが、最大値は1.97と1を超えています。なお、OpenFOAMや他の多くのCFDソフトが採用する陰解法では、厳密に1未満である必要はありませんが、あまり大きなクーラン数では陰解法であっても計算が安定しないため、極端に大きな値とならないように設定する必要があります。時間刻みがわからない場合は、短い解析終了時間で試しに計算して、表示されるクーラン数が1となるように時間刻みを調整します。

図6 scalarTransportFoam動作中の端末

 今回から拡散解析について紹介してゆきます。今回はその初回ということで、計算の手順やファイルの修正について、概要を説明しました。
 拡散というと少しわかりにくいかもしれませんが、空気中のガス濃度や水中の汚染物質、換気効率の評価など、身近な現象が多くあります。



 次回は簡単な例題として、ダクト内のガス拡散解析をしてみます。

おことわり
 本コンテンツの動作や表示はお使いのバージョンにより異なる場合があります。
 本コンテンツの動作ならびに設定項目等に関する個別の情報提供およびサポートはできかねますので、あらかじめご了承ください。
 本コンテンツは動作および結果の保証をするものではありません。ご利用に際してはご自身の判断でお使いいただきますよう、お願いいたします。