OpenFOAM【物性の温度依存性の設定2】

自作の物性の追加します。

前準備(方針の確認)

まずはリンクの構成を理解するところから。

$FOAM_SRC/thermophysicalModels/solidSpecie/transport

ここに物性。一例として、exponentialSolidTransport.Hのリンク先を確認。

OpenFOAM: API Guide: src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H File Reference

$FOAM_SRC/thermophysicalModels/solidThermo/solidThermo/solidThermos.C

ここが物性を呼んでいることを確認します。solidThermos.Cを読むと

makeSolidThermo
(
    solidThermo,
    heSolidThermo,
    pureMixture,
    exponentialSolidTransport,
    sensibleEnthalpy,
    hPowerThermo,
    rhoConst,
    specie
);

と書いてあるので、ここに自作の物性を追加すればよいと理解します。すなわち

  • $FOAM_SRC/thermophysicalModels/solidSpecie/transport 以下に自製の物性のフォルダ・ソースコードを追加
  • $FOAM_SRC/thermophysicalModels/solidThermo/solidThermo/solidThermos.C を修正

同一環境をローカルに降ろして、ソースを修正できる環境を作る

ソースコードをローカルにコピーします。一応、開発用フォルダ(dev-src)を作成。

$ mkdir dev-src
$ cd dev-src
$ cp -r $FOAM_SRC/thermophysicalModels/solidSpecie .
$ cp -r $FOAM_SRC/thermophysicalModels/solidThermo .

git管理を開始しておくと吉です。

solidSpecie/Make/filesの中を修正します。これを。

LIB = $(FOAM_LIBBIN)/libsolidSpecie

こう

LIB = $(FOAM_USER_LIBBIN)/libsolidSpecie

/solidSpecieのフォルダ内(Makeフォルダが配置されている階層)でコンパイルします。

$ wmake libso

念のため、コンパイルされているかを確認

$ ls $FOAM_USER_LIBBIN

続いて、solidThermo内。ローカルのsolidSpecieを参照できるようにします。これを

EXE_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I$(LIB_SRC)/thermophysicalModels/solidSpecie/lnInclude \

こう

EXE_INC = \
    -I$(LIB_SRC)/finiteVolume/lnInclude \
    -I../solidSpecie/lnInclude \

コンパイルには同じようにwmake libsoを使います。

プログラムの修正(準備)

$ cd solidSpecie/transport/
$ cp -r exponential/ usr

exponentialSolidTransportをもとに自製の物性プログラムを作成します。

$ sed -e "s/exponentialSolidTransport/usrSolidTransport/g" exponentialSolidTransport.C > usrSolidTransport.C
$ sed -e "s/exponentialSolidTransport/usrSolidTransport/g" exponentialSolidTransport.H > usrSolidTransport.H
$ sed -e "s/exponentialSolidTransport/usrSolidTransport/g" exponentialSolidTransportI.H > usrSolidTransportI.H

solidThermos.Cの内部を修正して、自製のusrSolidTransportを呼べるようにします。修正箇所は

#include "usrSolidTransport.H"

ヘッダファイルの追加

makeSolidThermo
(
    solidThermo,
    heSolidThermo,
    pureMixture,
    usrSolidTransport,
    sensibleEnthalpy,
    hPowerThermo,
    rhoConst,
    specie
);

usrSolidTransportを呼べるように。

修正したらコンパイルしなおします。(念のため)wcleanからのコンパイル

$ wclean
$ wmake libso

プログラムの修正(中身)

usrSolidTransport.H

        static word typeName()
        {
            return "usr<" + Thermo::typeName() + '>';
        }

thermophysicalPropertiesを読み込むときに、"usr"のキーワードで読み込むことができるようになります。

コンパイルは、solidThermoディレクトリでwmake libsoたたけばできます(wcleanはいらない)。solidSpacie以下のディレクトリの変更も反映できます(なので、solidThermoディレクトリに居座ってコンパイルすればよい )

プログラムの修正(詳細)

変数a0を追加してみます。exponentialSolidTransport中のn0を編集する形で追加していきます。

usrSolidTransport.H, usrSolidTransportI.H, usrSolidTransport.Cの3ソースファイル中で、n0を探す⇒コピー⇒a0に編集を機械的に繰り返していくことで追加できます。

この段階で一度コンパイルしてみます。実行すると、変数a0が足りないと怒られるので、thermophysicalPropertiesを修正しておきます。

実行できることを確認した後は本格的に修正。熱物性計算の本体はusrSolidTransportI.H中の以下なので、この辺を修正していきます。

template<class Thermo>
inline Foam::scalar Foam::usrSolidTransport<Thermo>::kappa
(
    const scalar p, const scalar T
) const
{
    return (kappa0_*pow(T/Tref_, n0_));
}


template<class Thermo>
inline Foam::vector Foam::usrSolidTransport<Thermo>::Kappa
(
    const scalar p, const scalar T
) const
{
    const scalar kappa(kappa0_*pow(T/Tref_, n0_));
    return vector(kappa, kappa, kappa);
}

実行

OpenFOAMの実行プログラムは$FOAM_USER_LIBBIN中のライブラリを優先的に参照するようです。ですので、上記手順でソースコードを修正した場合、すでにコンパイル済みの実行ファイルでも修正部分が反映されます。

参考にしました

PENGUINITIS - 輸送特性の追加

PENGUINITIS - OpenFOAM による開発パターン