0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

openFOAMソルバーの改造_scalarTransportFoam編

Posted at

なんでソルバー改造?

現在openFOAMを趣味で使っており、interFoamのチュートリアルの改造で遊んでます。
しかし、チュートリアルだけをいじってるとこんな感情が浮かんできます。
「呪文多すぎてなにが起きてんのか分かんねぇ・・・」と。

「・・・チュートリアルの中身、もっといえばソルバーの中身はどうなって動いてるんだろう??」と。

ということで、もうソルバー改造に手を出せば色々分かるのでは!!?? と血迷った結果がこの記事の執筆背景になります。

この記事の目指すところ

とはいえ、いきなりinterFoamとかいうVOF法(気液・液液界面を表現できる計算手法)の塊に手を突っ込むのはヤバそう。そこで、最も単純(そう)なソルバーを使用することにしました。そのソルバーが scalarTransportFoam です。

※これ以降、scalarTransportFoamの改造を解説しているオープンCAE学会Shibata Takahiro氏の動画を参考にしています。

scalarTransportFoamソルバーに対して、以下二点の変更を行ってみます。

  • 移流拡散方程式を改良して、スカラー量の湧き出し点を作る
  • 新しいソルバー用のチュートリアルケースを作成する。

このソルバーはスカラー量の移流拡散方程式を解くだけっぽいのですが、改造を行っていくなかで把握出来たこのソルバーの変数設定方法や、主要なソルバー部分以外の変更必要箇所なども記載していきます。

開発環境

ソルバー改造時の開発環境は以下の通りです。

  • OS : Ubuntu 20.04LTS
  • openFOAM : openFOAM-v2112(ESI版)

大まかなソルバー改造手順

  1. ソルバーがあるディレクトリに移動

    $ cd $FOAM_SOLVERS
    
  2. basicディレクトリに移動

    $ cd basic/
    
  3. scalarTransprtFoamフォルダを新しいソルバー名(例:scalarTransprtFoam2)にしてコピー・保存

    $ sudo cp -r scalarTransportFoam scalarTransportFoam2
    ~~~ 
    
  4. scalarTransportFoam2ディレクトリ内のファイル名や、ファイルの内容を新しいソルバー名に合わせる

ディレクトリ構造は以下の通りで、fileの内容とscalarTransportFoam.Cのファイル名を書き換える。
scalarTransportFoam
├── Make
│   ├── files ←内容を以下のように書き換える
│   └── options
├── createFields.H
└── scalarTransportFoam.C ←ファイル名をscalarTransportFoam2.Cに書き換える

//scalarTransportFoam.C

EXE =$(FOAM_APPBIN)/scalarTransportFoam

scalarTransportFoam2.C

EXE = $(FOAM_APPBIN)/scalarTransportFoam2

5.createField.HとscalarTransportFoam2.Cを所望の形に修正
後に詳細を記載する。

6.コンパイルを行う

$ wmake

※ファイル編集の権限がなかった場合、以下を実行する。

sudo chown -R ユーザー名 ~openFoamまでのPATH

scalarTransportFoam2.Cの変更点

このファイルでは以下のような移流拡散方程式を定義しています。

\frac{dT}{dt} + \nabla\cdot(\phi T) - \nabla^2(D_T T) = S
\\
T:スカラー量\\
\phi: 速度ベクトル\\
S: スカラー量のソース

もともとのscalarTransportFoam.CファイルではSの項が単純に表記されていないため、以下の部分をこのように書き換える。

while (simple.correctNonOrthogonal())
        {
            fvScalarMatrix TEqn
            (
                fvm::ddt(T)
              + fvm::div(phi, T)
              - fvm::laplacian(DT, T)
             == S



            );

            TEqn.relax();
            
            TEqn.solve();
            
        }

これによって、スカラー量の湧き出しが計算できるようになりました。

createField.Hの変更点

scalarTransportFoam2.CでSという新たな変数を作ってしまったので、このファイルで定義する必要があります。
ファイル中にはTやUを設定している箇所がありますので、Tに関するコードをコピーして以下のように変換・貼り付けます。

Info<< "Reading field S\n" << endl;

volScalarField S 
(
    IOobject
    (
        "S",
        runTime.timeName(),
        mesh,
        IOobject::MUST_READ,
        IOobject::AUTO_WRITE
    ),
    mesh
);


変更は以上です。

チュートリアルケースの修正

明日修正

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?