第10回OpenFOAM勉強会for beginner
ソルバー改良事例発表

id:oga̲shin
小縣信也ogata shinya

2011.4.24

第10回OpenFOAM勉強会for beginner

発表内容

・事例②

laplacianFoamの改良
温度依存熱伝導率の設定

・事例③

laplacianFoamの改良
多種材料対応＋温度依存熱伝導率の設定

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoam改良②

温度依存性熱伝導率を設定できるようにlaplacianFoamを改良

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamのソースのコピーapp
cd solvers/basic/ls
laplacianFoam potentialFoam scalarTransportFoam
cp -r laplacianFoam $FOAM̲RUN/laplacianFoamDepT

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepTの構成ファイル

ファイル名の変更
laplaciaFoam.C→laplacianFoamDepT.C

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepT.C
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++){
DT=A1*T*T+A2*T+A3;
solve(fvm::ddt(T) - fvm::laplacian(DT, T));}sloveの手前に1行追加。熱伝導方程式を解く前にDTを計算することになる。
熱伝導率(拡散率)は、以下の二次式に従うと考えている。

2y = ax + bx + c
2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepT/createFields.H
dimensionedScalar A1(transportProperties.lookup("A1"));dimensionedScalar A2(transportProperties.lookup("A2"));
dimensionedScalar A3(transportProperties.lookup("A3"));

Info<< "Reading diﬀusivity DT\n" << endl;
volScalarField DT(IOobject("DT",
runTime.timeName(),mesh,
IOobject::NO̲READ,IOobject::AUTO̲WRITE),
A1*T*T+A2*T+A3);

まず、A1,A2,A3の係数を読む。
A1,A2,A3は、transPropertiesで定義。

volScalarField Tをコピーし、volScalarField DTに変更

DTは、毎ステップ計算をおこなう
ので、 “NO̲READ””
AUTO̲WRITE”。
初期値の設定。
[確認]Dimensionが同じであれば、どんな値でもいい？
2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepT/Make/ﬁleslaplacianFoamDepT.C
EXE = $(FOAM̲USER̲APPBIN)/laplacianFoamDepT

2011.4.24

第10回OpenFOAM勉強会for beginnerwmakecd laplacianFoamDepT
wmake

以下通りになれば成功！
laplacianFoamDepT -help
Usage: laplacianFoamDepT [-parallel] [-case dir] [help] [-doc] [-srcDoc]

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepT用ケースディレクトリの作成①boxディレクトリをコピーし、box̲DepTディレクトリを作成。
②0.orgの中のTをコピーし、DTファイルを作成。

cp -r box box̲DepT
cd box̲DepT/0.org
cp -r T DT2011.4.24

第10回OpenFOAM勉強会for beginnerconstant/transProperties

FoamFile{version2.0;
formatascii;
class
dictionary;location "constant";
objecttransportProperties;}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
DT
A1
A2
A3

DT [ 0 2 -1 0 0 0 0 ] 4e-05;
A1 [ 0 2 -1 -2 0 0 0 ] 1e-08;
A2 [ 0 2 -1 -1 0 0 0 ] -3e-05;
A3 [ 0 2 -1 0 0 0 0 ] 0.0245;// ************************************************************************* //2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepT 計算実行&結果
laplacianFoamDepT
paraFoamDTT

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoam改良③

多種材料に対応+温度依存性熱伝導率を設定できるようにlaplacianFoamを改良

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianDepTMulti.cfor (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++){
DT=A1*T*T+A2*T+A3;
solve(fvm::ddt(T) - fvm::laplacian(DT, T));}

ソルバー部分はlaplacianDepTと同じ

2011.4.24

第10回OpenFOAM勉強会for beginnerlaplacianFoamDepTMulti/createFields.H
Info<< "Reading diﬀusivity coeﬃcient A1\n" << endl;
volScalarField A1(IOobject("A1",
runTime.timeName(),mesh,
IOobject::MUST̲READ,IOobject::AUTO̲WRITE),mesh);

まず、A1,A2,A3の係数を読む。
A1,A2,A3は、0フォルダの中のファイルで定義。

〜A2、A3についても、同様に記述〜

Info<< "Reading diﬀusivity DT\n" << endl;
volScalarField DT(IOobject("DT",
runTime.timeName(),mesh,IOobject::NO̲READ,IOobject::AUTO̲WRITE),
A1*T*T+A2*T+A3);

初期値の設定。
2011.4.24

第10回OpenFOAM勉強会for beginner

box̲depT̲multi/0

A1、A2、A3の初期値ファイルを0フォルダに作成
2011.4.24

第10回OpenFOAM勉強会for beginnersystem/setFieldsDict
defaultFieldValues(volScalarFieldValue A1 1e-08
volScalarFieldValue A2 -3e-05
volScalarFieldValue A3 0.0245);
regions(boxToCell{box (0.3 0.3 0.3) (0.7 0.7 0.7);
ﬁeldValues(volScalarFieldValue A1 2e-08
volScalarFieldValue A2 -3e-05volScalarFieldValue A3 0.1);

初期値

係数を割り当てる場所の指定割り当てる係数の指定});2011.4.24

第10回OpenFOAM勉強会for beginner