OpenFOAM【laplacianFOAMの改造】
laplacianFOAMの改造に取り組みました。目的は有効熱拡散係数のDTを温度の関数にすること。
やったこと
- createField.Hを修正する。
34 dimensionedScalar A 35 ( 36 transportProperties.lookup("A") 37 ); 38 39 volScalarField DT 40 ( 41 IOobject 42 ( 43 "DT", 44 runTime.timeName(), 45 mesh, 46 IOobject::NO_READ, 47 IOobject::AUTO_WRITE 48 ), 49 3*A*T // <-この辺が温度を変数にしたかった部分。 50 );
- メインプログラムを修正する
53 while (simple.loop(runTime)) 54 { 55 Info<< "Time = " << runTime.timeName() << nl << endl; 56 57 while (simple.correctNonOrthogonal()) 58 { 59 // ↓ここを追加 60 DT = 3*A*T; 61 fvScalarMatrix TEqn 62 ( 63 fvm::ddt(T) - fvm::laplacian(DT, T) 64 == 65 fvOptions(T) 66 ); 67 68 fvOptions.constrain(TEqn); 69 TEqn.solve(); 70 fvOptions.correct(T); 71 } 72 73 #include "write.H" 74 75 Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s" 76 << " ClockTime = " << runTime.elapsedClockTime() << " s" 77 << nl << endl; 78 }
- transportPropertiesも修正
18 DT DT [0 2 -1 0 0 0 0] 4e-05; 19 A A [0 2 -1 -1 0 0 0] 4e-08;
注意しよう
- 特に設定変更せず、メインプログラムにDT=3.*Tみたいな計算は全然ダメ。
- DTをvolSclarFieldにしてDT=3.Tみたいにすると、コンパイルはできるが、実行時エラー。演算ができないみたい。
- transPropertiesの中で、DTを忘れずに定義する(単位が重要)
メモ書き
参考にしました
http://www.opencae.or.jp/wp-content/uploads/2015/06/9th_ogata.pdf