OpenFOAM

【OpenFOAM】任意の断面での流量計算(cellZone)

こんにちは(@t_kun_kamakiri

今回はOpenFOAMで以下のような配管内の水の流れを解析し、境界と任意の断面での流量を計算します。

しかし、c1~c5の断面での流量を出力するにはどうしたらいいのかなと思って自分なりに試してみた内容を書いています。

本記事の内容

OpenFOAMで任意の断面での流量を計算する。

【使用環境】
OpenFOAM-v2012(WSL2)

カマキリ

もっといい方法があったらコメントで教えてください_(._.)_

流量を出力する方針

流量を計算する方法はパッと考えると以下の方法があるでしょう。

  1. 流量計測したい断面にあらかじめ面かセル領域を用意しておく
  2. cellZoneSetを使ってfunction objectを使う
  3. codedFunctionObjectという機能で直接コードを埋め込む

①の方法はあらかじめ計算する前に用意する必要があると考えて今回は試しませんでした。
今回は解析計算が終わった後でも出力できる方法として②と③を試したのでご紹介します。

②が本記事の内容

とはいえ、任意の断面での流量を直接出力するのはわからなかったので任意の領域を通過する平均流速を求めて面積を掛けて流量Q=vAQ=vAとする方針にしました
※任意の面を通過する流量とすると、入ってきて出ていく量の合計を計算するのことになって結局0になってしまいました。なので、いったん平均流速を求めて面積を掛けて流量を求めればいいやと思った次第です。

②cellZoneSetを使ってfunction objectを使う

まずは指定した領域を作るためにcellZoneをtopoSetで作ります。
以下のピンクの領域ですね。

例えば以下のようなコマンドでtopoSetが使われているチュートリアルを探して適当にコピーします。

以下のように候補が出てきます。

適当にコピーします。

topoSetの作り方はこちらの公式サイトを参考にします。

system/topoSetDict

領域の作り方は1つではありません。
今回は以下の2つを使った方法を示していますが、どちらを使っても良いです。

  • boxToCell; //範囲の指定方法 boxToCellは六面体により指定
  • cylinderToCell; //始点終点と半径から円柱領域を指定

では、topoSetを実行します。

constant/polyMesh/setに以下のようにファイルができます。

例えば「c1」を見ると、

1216個のセルがあるということでしょうか。
この数字は次のcodedFunctionObjectでも出てきますのでちょっと記憶の片隅に残しておきましょう。

topoSetで作ったcellZoneはParaViewで確認することができます。

次にcontrolDictのfunction objectに以下を追加します。

cellZoneによる領域の物理量は平均流速以外にも以下の量を出力することができます。

実行すればcellZoneでの平均流速と平均圧力が出力されます。

計算が終わった後にcontrolDictのfunction objectだけを実行したい場合は、

とします。

例えばc1に対しては、

postProcessing/volFieldValue1/0/volFieldValue.dat

流速が「-6.84017444e-06 -5.02236067e-06 1.00543984e-01」なので断面積を掛けると流量$Q=0.000126284$になりますね。

理論値との誤差は0.54%です。

その他にもc2~c5も同様に平均流速がpostProcessingに出力されています。

関連記事もどうぞ

COMMENT

目次へ