OpenFOAM12でカスタムソルバを作る方法の確認

この記事は[オープンCAE Advent Calendar 2024](https://qiita.com/advent-calendar/2024/opencae)の一日目の記事です。

# はじめに

しばらくFoudation版のOpenFOAMを触っていないうちにソースコードの記法が大きく変わった。カスタムソルバを作る方法について、何か変化があったか手順を確認した。

# ユーザーアプリケーションフォルダの作成

これは以前と変わらないので、下記コマンドでフォルダを作って、移動する。
ソースコードのMake下にあるfilesを見るとわかるが、FOAM_LIBBINに作るようになっているので、それに合わせてFOAM_USER_LIBBINを作る。

```
mkdir -p $FOAM_USER_LIBBIN
cd $FOAM_USER_LIBBIN
```

# ソースコードのコピー

OpenFOAM11からソルバーがModular Solversに変わった。ソルバは$FOAM_MODULESにあるので、今回はテストがてら非圧縮流体解析用のincompressibleFluidをコピーする。コピーしたのちに名称を変更する。

```
cp -r $FOAM_MODULES/incompressibleFluid ./
mv -f ./incompressibleFluid ./myIncompressibleFluid
cd myIncompressibleFluid
```

ソースコードからOpenFOAMをコンパイルしているとlnIncludeフォルダができているため、消しておく。

```
rm -rf lnInclude
```

# ソースコードの修正

同じ名前だと元から存在するソルバと重複するためソースコードの名前を修正する。

```
mv incompressibleFluid.C myIncompressibleFluid.C
mv incompressibleFluid.H myIncompressibleFluid.H
```

ファイルの中で指定されているincompressibleFluidをファイル名やソルバ名に合わせて書き換える。また、filesのLIBをFOAM_USER_LIBBINに書き換える。
いくつかのファイルは同じ行内に変換対象があるので2回実行している。

```
sed -i -e 's/incompressibleFluid/myIncompressibleFluid/' ./*.C
sed -i -e 's/incompressibleFluid/myIncompressibleFluid/' ./myIncompressibleFluid.C
sed -i -e 's/incompressibleFluid/myIncompressibleFluid/' ./*.H
sed -i -e 's/incompressibleFluid/myIncompressibleFluid/' ./myIncompressibleFluid.H
sed -i -e 's/incompressibleFluid/myIncompressibleFluid/' ./Make/*
sed -i -e 's/FOAM_LIBBIN/FOAM_USER_LIBBIN/' ./Make/files
```

# コンパイル

コンパイルはwmakeで実行する。

```
wmake
```

$FOAM_USER_LIBBIN下のLIBフォルダにlibmyIncompressibleFluid.soができていることを確認する。

# テスト

pitzDailyのケースでチェックを行う。controlDictの

```
mkdir $FOAM_RUN
run
cp -r $FOAM_TUTORIALS/incompressibleFluid/pitzDaily ./
cd pitzDaily
sed -i -e 's/incompressibleFluid/myIncompres
sibleFluid/' system/controlDict
./Allrun
```

実行結果のログを見ると、myIncompressibleFluidを使用していることがわかる。

```
/*---------------------------------------------------------------------------*\
  =========                 |
  \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
   \\    /   O peration     | Website:  https://openfoam.org
    \\  /    A nd           | Version:  12
     \\/     M anipulation  |
\*---------------------------------------------------------------------------*/
Build  : 12
Exec   : foamRun
Date   : Dec 01 2024
Time   : 21:29:32
Host   : "mmer547-copilot"
PID    : 182510
I/O    : uncollated
Case   : /home/opencae/OpenFOAM/opencae-12/run/pitzDaily
nProcs : 1
sigFpe : Floating point exception trapping - not supported on this platform
fileModificationChecking : Monitoring run-time modified files using timeStampMaster (fileModificationSkew 10)
allowSystemOperations : Allowing user-supplied system call operations

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
Create time

Create mesh for time = 0

Selecting solver myIncompressibleFluid
Selecting viscosity model constant
Selecting turbulence model type RAS
Selecting RAS turbulence model kEpsilon
　・
　・
　・
```

# まとめ

Foundation版のOpenFOAMを使って、カスタムソルバを作る手順を確認した。
名前は変わっているが手順自体は大きく変わっていない。ただし、カスタムソルバは実行方法の変更とともにFOAM_USER_APPBINでなく、FOAM_USER_LIBBINで管理するなど、構成は変わっているので、過去の資料を参考にするときは、いろいろと確認しながらカスタマイズする必要がありそうだということが分かった。