controldict, fvscheme, fvsolutionの設定についてhirose/ockitatohoku/ref/04...controldict,...
TRANSCRIPT
controlDict, fvScheme, fvSolutionの設定について
一関高専・若嶋
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 1
調査報告
※ OpenFOAM 4.xについてのみ調査
OFのケースフォルダの基本構成
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 2
[waku@ensis10 pitzDaily]$ pwd/home/waku/OpenFOAM/tutorials/incompressible/pimpleFoam/pitzDaily[waku@ensis10 pitzDaily]$ tree -L 2 ..|-- 0 ・・・・・初期条件,境界条件フォルダ(t=0)| |-- U| |-- epsilon| |-- k| |-- nuTilda| |-- nut| `-- p|-- constant ・・・・・物性値,乱流モデル選択(laminar/RAS/LES),メッシュデータ,移動メッシュ設定等(***Dict/***Propeties)| |-- polyMesh| |-- transportProperties| `-- turbulenceProperties`-- system ・・・・・時間ステップなどの計算設定ファイル,離散化スキーム指定,ソルバー設定,各種コマンド設定等(***Dict)
|-- controlDict|-- blockMeshDict|-- fvSchemes`-- fvSolution
controlDict
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 3
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object controlDict;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleFoam;
startFrom latestTime;startTime 0;stopAt endTime;endTime 1;
deltaT 0.0001;
writeControl adjustableRunTime;writeInterval 0.001;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression off;
timeFormat general;timePrecision 6;
runTimeModifiable yes;adjustTimeStep yes;maxCo 5;
// ************************************************************************* //
Tutorial: pimpleFoam/pitzDailyを例題としています
Dictionaryファイルのヘッダー部(必須):FoamFile{~}
コピーして来た場合は注意
OFのソルバー名(pyFoamなどのスクリプトファイルで参照されることが多い)
計算開始時間,終了時間の設定
時間ステップ[s],指数表示可(1.0e-4)
注意: 各行のセミコロン;を忘れない!
計算結果の書き出しタイミング,形式(書式)など
時間の書式,精度(小数点)
時間ステップを計算中に変更できるか,クーラン数を超えないように自動的に調整するか
controlDict
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 4
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object controlDict;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleFoam;
startFrom latestTime;startTime 0;stopAt endTime;endTime 1;
deltaT 0.0001;
writeControl adjustableRunTime;writeInterval 0.001;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression off;
timeFormat general;timePrecision 6;
runTimeModifiable yes;adjustTimeStep yes;maxCo 5;
// ************************************************************************* //
startFrom どの時間ディレクトリから計算を開始するか
- firstTime 時間ディレクトリの内,一番早いものを使用- startTime “startTime”で指定された時間ディレクトリを使用
- latestTime時間ディレクトリの内,一番遅いものを使用(※ リスタートする時に良く使います)
startTime 計算をスタートする時間ディレクトリ
stopAt どの場合に計算をストップするかを指定- endTime “endTime”で指定した時間でストップ- writeNow 現在の時間でストップし,計算結果を書き出す
- noWriteNow現在の時間でストップし,計算結果は書き出さない
- nextWrite“writeControl”でスケジュールされた次のwriteのタイミングでストップ
endTime 計算をストップする時間を指定
controlDict
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 5
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object controlDict;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleFoam;
startFrom latestTime;startTime 0;stopAt endTime;endTime 1;
deltaT 0.0001;
writeControl adjustableRunTime;writeInterval 0.001;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression off;
timeFormat general;timePrecision 6;
runTimeModifiable yes;adjustTimeStep yes;maxCo 5;
// ************************************************************************* //
writeControl データ出力のタイミングの指定
- timeStep† 時間ステップ毎に毎回出力
- runTime “writeInterval”で指定した時間毎に出力
- adjustableRunTime“runTimeと同様だが,時間ステップの大きさが変化しても自動的に計算して出力してくれる”
- cpuTime計算におけるtimeではなくCPUtimeで,“writeInterval”で指定した時間毎に出力
- clockTime計算におけるtimeではなくWallClockで,“writeInterval”で指定した時間毎に出力
writeInterval “writeControl” で使用される時間間隔
purgeWrite
繰り返し出力のための整数値を指定.0:各時間ごとに出力(非定常計算)1:時間ディレクトリ1つにずっと出力し続ける(定常計算)2以上:例えば3と指定すると,3つめの時間フォルダに出力後は1つ目の時間フォルダに出力する.以下,繰り返す
writeFormat 解析データファイルの書式指定(ascii/binary)
- ascii アスキーフォーマット(”writePrecision”で精度指定)- binary バイナリフォーマット(データサイズ小)
writePrecision アスキーフォーマット時の小数点以下の精度(デフォルト6桁)
writeCompression 解析データの非圧縮/圧縮(gzip)を指定
- uncompressed 非圧縮
- compressed gzipで圧縮
controlDict
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 6
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object controlDict;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleFoam;
startFrom latestTime;startTime 0;stopAt endTime;endTime 1;
deltaT 0.0001;
writeControl adjustableRunTime;writeInterval 0.001;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression off;
timeFormat general;timePrecision 6;
runTimeModifiable yes;adjustTimeStep yes;maxCo 5;
// ************************************************************************* //
timeFormat 時間ディレクトリの数値フォーマット
- fixed “timePrecision”した精度で固定小数点表示(±m.dddddd)
- scientific “timePrecision”した精度で固定指数表示(±m.dddddde±xx)
- general 上記を自動で切り替え(±10-4以下で指数表示)
timePrecision 小数点以下の桁数(デフォルト6桁)
runTimeModifiable各時間ステップでcontrolDictを読み込むかどうかを指定
adjustTimeStepmaxCo(最大クーラン数)を超えないよ
うに時間ステップを自動調整するかどうかを指定
maxCo
Maximum Courant number※原則として1以下.simpleFoamなどの定常解法やpimpleFoamなどは1以上に設定しうる
controlDict(advanced): 実行時ライブラリのload
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 7
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object controlDict;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleFoam;
startFrom latestTime;startTime 0;stopAt endTime;endTime 1;
deltaT 0.0001;
writeControl adjustableRunTime;writeInterval 0.001;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression off;
timeFormat general;timePrecision 6;
runTimeModifiable yes;adjustTimeStep yes;maxCo 5;
libs ( “libgroovyBC.so” “libUSERLIB.so ) ;// ************************************************************************* //
• libs ( “ライブラリ1” “ライブラリ2” );などと記述して実行時にライブラリをロード可能
• swak4foamを導入した場合はここに記述する.libs ( “libgroovyBC.so” “libUSERLIB.so ) ;
• 自作ライブラリも可• libs(“libgroovyBC.so”);などとするとエラー
libs と (の間の空白 ( と “lib***.so”の空白 “lib***.so”と ) の空白 セミコロン;に注意
controlDict(advanced): Function Object
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 8
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object controlDict;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application pimpleFoam;startFrom latestTime;startTime 0;stopAt endTime;endTime 1;deltaT 0.0001;writeControl adjustableRunTime;writeInterval 0.001;purgeWrite 0;writeFormat ascii;writePrecision 6;writeCompression off;timeFormat general;timePrecision 6;runTimeModifiable yes;adjustTimeStep yes;maxCo 5;
libs ( “libgroovyBC.so” “libUSERLIB.so ) ;
functions {
ここに複数のFunction Objectを記述}// ************************************************************************* //
Ref. http://www.slideshare.net/fumiyanozaki96/openfoam-function-object
• controlDict内にfunctions{…}を記述すること
で以下のような計算を行い,出力することができます パッチを通過する流量計算 変数の最大・最小値(パッチ,セル) 変数の平均値 変数の特定点の抽出(probe)
力,トルク,抗力係数,揚力係数,トルク係数
断面データ,境界データ生成 など
controlDict(advanced): Function Object
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 9
functions {
}// ************************************************************************* //
Ref. http://www.slideshare.net/fumiyanozaki96/openfoam-function-object
outletFlux{
type faceSource; :
}
minMax{
type fieldMinMax; :
}
forces{
type forces; :
}
forceCoeffs{
type forceCoeffs; :
}
midZplane{
type surfaces; :
}
probePoint{
type probes; :
}
パッチを通る流量
最大値・最小値
力・トルク
各種係数
断面プロット
特定点をprobe
• 青字は,FunctionObject名で任意の名前可
• 赤字は,FunctionObejctのtypeで,希望する内容に合わせて選択する必要がある 個々のtypeの設定内容は,今回は時間の都合で省略
• それぞれの結果は,postProcessingフォルダに生成される
• どのようなtypeがあるかは(他にも多数あり),sourceを見ましょう OpenFOAM-4.x/src/postProcessing/functionObjects
例:
fvSchemes
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 10
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object fvSchemes;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes{
default Euler;}
gradSchemes{
default Gauss linear;grad(p) Gauss linear;grad(U) Gauss linear;
}
divSchemes{
default none;div(phi,U) bounded Gauss linearUpwind grad(U);div(phi,k) bounded Gauss upwind;div(phi,epsilon) bounded Gauss upwind;div(phi,R) bounded Gauss upwind;div(R) Gauss linear;div(phi,nuTilda) bounded Gauss upwind;div((nuEff*dev2(T(grad(U))))) Gauss linear;
}
laplacianSchemes{
default none;laplacian(nuEff,U) Gauss linear corrected;laplacian(rAUf,p) Gauss linear corrected;laplacian(DkEff,k) Gauss linear corrected;laplacian(DepsilonEff,epsilon) Gauss linear corrected;laplacian(DREff,R) Gauss linear corrected;laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;
}
interpolationSchemes{
default linear;interpolate(U) linear;
}
snGradSchemes{
default corrected;}
// ************************************************************************* //
①時間積分離散化スキームの選択
②セル中心の勾配の離散化スキーム選択
③セル中心の発散(対流項)の離散化スキームの選択
④セル中心のラブラシアン離散化スキームの選択
⑤セル界面の物理量補間スキームの選択
⑥セル界面の勾配スキームの選択
※各項目とも,default指定と個別指定の組み合わせ※セミコロン;を忘れずに!
See: http://www.openfoam.org/docs/user/fvSchemes.php
OFはセル中心有限体積法です
fvSchemes: ①ddtSchemes
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 11
ddtSchemes{
default Euler;}
Valid ddt schemes are :
8(CoEuler : オイラー法(1次精度前進差分)+LocalTimeStepping(Co数に応じて)CrankNicolson : クランクニコルソン法(2次精度前進差分), weight 0(Euler)~1(C-N)指定Euler : オイラー法(1次精度前進差分)SLTS : Stabilized Local Time-Steppingbackward : ギア法(2次精度後退差分)bounded : 勾配制限(bounded)divスキームを使うときに併用 “bounded Euler”localEuler : オイラー法(1次精度前進差分)+LocalTimeSteppingsteadyState : 定常計算(時間項なし))
d2dt2Schemes: の離散化(Eulerのみ)・・・・振動や電磁界解析の場合に利用2
2
t
fvSchemes: ②gradSchemes
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 12
gradSchemes{
default Gauss linear;grad(p) Gauss linear;grad(U) Gauss linear;
}
• スカラー量の勾配(gradient)計算のスキーム選択• 補間法”interpolationScheme”は,別に指定する
1. Gauss <interpolationScheme> : ガウス積分2. leastSquares : 最小自乗法(2次精度)3. fourth : 最小自乗法(4次精度)4. cellLimited <gradScheme> : Gauss/leastSquares/fourthのcellLimited版5. faceLimited <gradScheme> : Gauss/leastSquares/fourthのfaceLimited版
例: grad(p) cellLimited Gauss linear 1.0;
fvSchemes: ③divSchemes
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 13
• 対流項の計算スキーム選択(phiはmass flux=ρU)• Gauss <interpolationScheme> の形が基本で,頭にboundedをつけると制限付スキームになる• 補間スキームの選択肢・・・・60個!(Gauss Upwind とわざと間違えると出てきます.)
• 代表的なもの linear/limitedLinear (2次線形補間) sckewLinear (2次線形補間,メッシュのskewness補間) upwind (1次風上) linearUpwind (2次風上,制限付) QUICK (2次風上,制限付) MUSCL/Minmod/SuperBee/vanAlbada/vanLeer (TVDスキーム) SFCD/gamma (NVDスキーム)
divSchemes{
default none;div(phi,U) bounded Gauss linearUpwind grad(U);div(phi,k) bounded Gauss upwind;div(phi,epsilon) bounded Gauss upwind;div(phi,R) bounded Gauss upwind; ※ R = Reynolds stress tensordiv(R) Gauss linear;div(phi,nuTilda) bounded Gauss upwind; ※ nuTilda = kinematic turbulent viscositydiv((nuEff*dev(T(grad(U))))) Gauss linear;
}
速度Uなどのベクトルには,以下も指定できる(Vをつける)limitedLinearV, vanLeerV, GammaV, limitedCubicV, SFCDV
fvSchemes: ④laplacianSchemes
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 14
• いわゆる粘性項/拡散項の計算スキーム選択 ・・・・ laplacian(nuEff,U)=∇・(νeff∇U)• Gauss <interpolationScheme> <snGradScheme> の形で指定
• <interpolationScheme>・・・・選択肢 55個(linear/harmonic/reverseLinear/midpoint/….)• <snGradScheme>・・・・・・・・・選択肢7個
1. corrected :非直交性補正2. faceCorrected :セル境界での非直交性補正3. limited :勾配制限付の非直交性を考慮した修正 Gauss linear limited 1;4. linearFit : ?5. orthogonal : ?6. quadraticFit : ?7. uncorrected :非直交性補正なし
laplacianSchemes{
default none;laplacian(nuEff,U) Gauss linear corrected;laplacian(rAUf,p) Gauss linear corrected;laplacian(DkEff,k) Gauss linear corrected;laplacian(DepsilonEff,epsilon) Gauss linear corrected;laplacian(DREff,R) Gauss linear corrected;laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;
}
Gauss linear corrected;が一般的
fvSchemes: ⑤interpolationSchemes⑥snGradSchemes
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 15
• <interpolationScheme>・・・・選択肢 55個(linear/harmonic/reverseLinear/midpoint/….)• <snGradScheme>・・・・・・・・・選択肢7個
1. corrected :非直交性補正2. faceCorrected :セル境界での非直交性補正3. limited :勾配制限付の非直交性を考慮した修正 Gauss linear limited 1;4. linearFit : ?5. orthogonal : ?6. quadraticFit : ?7. uncorrected :非直交性補正なし
interpolationSchemes{
default linear;interpolate(U) linear;
}
snGradSchemes{
default corrected;}
snGrad: セル界面(face)での外向き法線ベクトル(大きさはface面積)
fvSchemes: ⑦fluxRequired(3.0以降は不要になった)
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 16
• fluxを計算する物理量リストを指定• 上記の場合,圧力場pを計算後,fluxを計算する.
• 一般的な計算では,p(pcorr)だけ指定すればよさそう.
fluxRequired{
default no;p ;
}
fvSolution
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 17
/*--------------------------------*- C++ -*----------------------------------*¥| ========= | || ¥¥ / F ield | OpenFOAM: The Open Source CFD Toolbox || ¥¥ / O peration | Version: 4.x || ¥¥ / A nd | Web: www.OpenFOAM.org || ¥¥/ M anipulation | |¥*---------------------------------------------------------------------------*/FoamFile{
version 2.0;format ascii;class dictionary;location "system";object fvSolution;
}// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
solvers{
p{
solver GAMG;tolerance 1e-7;relTol 0.01;smoother DICGaussSeidel;cacheAgglomeration true;nCellsInCoarsestLevel 10;agglomerator faceAreaPair;mergeLevels 1;
}
pFinal{
$p;relTol 0;
}
"(U|k|epsilon)"{
solver smoothSolver;smoother symGaussSeidel;tolerance 1e-05;relTol 0.1;
}
"(U|k|epsilon)Final"{
$U;relTol 0;
}}
PIMPLE{
nNonOrthogonalCorrectors 0;nCorrectors 2;
}
// ************************************************************************* //
①各方程式のソルバー設定圧力方程式
②圧力・速度カップリングの方式ごとの設定SIMPLE/PISO/PIMPLE/laplacian
※ pimpleFoam用の設定です※非圧縮の場合を想定しています.※セミコロン;を忘れずに!
p{…}の記述をそのままincludeする
U,k,epsilonについて(正規表現)
fvSolution: ①solvers
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 18
solvers{
p{
solver GAMG;tolerance 1e-7;relTol 0.01;smoother DICGaussSeidel;cacheAgglomeration true;nCellsInCoarsestLevel 10;agglomerator faceAreaPair;mergeLevels 1;
}
pFinal{
$p;relTol 0;
}
"(U|k|epsilon)"{
solver smoothSolver;smoother symGaussSeidel;tolerance 1e-05;relTol 0.1;
}
"(U|k|epsilon)Final"{
$U;relTol 0;
}}
solvers{物理変数1{
:}物理変数2{
:}:
}
“( )”でくくることで正規表現が使える“(U|k|epsilon)” ・・・・U,k,epsilonのいずれか“(U|k|epsilon)Final”・・・・Ufinal,kFinal,epsilonFinal
※ pとpFinal等の違いについてはpimpleアルゴリ
ズムにかかわる部分なので,別の機会に説明します.simple/piso/pimple(piso+simple)は,Ofの非圧
縮解析の基本となる圧力・速度カップリングアルゴリズムです.
p{….}と同じ設定を読み込む
fvSolution:②pimple等のアルゴリズム毎の設定,緩和係数など
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 19
PIMPLE{
nOuterCorr 1;nNonOrthogonalCorrectors 0;nCorrectors 2;
}PISO{
nNonOrthogonalCorrectors 0;nCorrectors 2;pRefCell 0;pRefValue 0;
}SIMPLE{
nNonOrthogonalCorrectors 0;pRefCell 0;pRefValue 0;
}potentialFlow{
nNonOrthogonalCorrectors 10;}relaxationFactors{
fields{
p 0.3;}equations{
U 0.7;k 0.7;omega 0.7;epsilon 0.7;T 0.7;
}}
solvers{物理変数1{
:}物理変数2{
:}:
}
“( )”でくくることで正規表現が使える“(U|k|epsilon)” ・・・・U,k,epsilonのいずれか“(U|k|epsilon)Final”・・・・Ufinal,kFinal,epsilonFinal
※ pとpFinal等の違いについてはpimpleアルゴリ
ズムにかかわる部分なので,別の機会に説明します.simple/piso/pimple(piso+simple)は,OFの非圧
縮解析の基本となる圧力・速度カップリングアルゴリズムです.他のアルゴリズム
の追加分
反復の緩和係数(記述しなければ1)
ソルバーに関係がないアルゴリズムに関しての記述があっても問題なし.“全部入り”を作っておくと楽ちんです.
圧力の境界条件は一般にノイマン条件となり,勾配のみが意味があることになり,値そのものは不定になることがある.その場合の計算の発散を防ぐため,特定セル番号の圧力(非圧縮計算上の仮想的な圧力)を0と設定している.
参考
• http://www.openfoam.org/docs/user/cases.php#x16-920004
• http://www.opencae.jp/wiki/OpenCAE-User-Group-archive
• http://www.cfd-online.com/Forums/openfoam/
2017/5/21 第3回OpenCAE初歩情報交換会@北東北 20