## 1、求解器 ### 1.1 複製源碼 本案例以icoFoam為例,複製【openFOAM/OpenFOAM-9/applications/solvers/incompressible/icoFoam】文件夾至run文件夾下(我的是【openFOAM/mtl-9/run/solvers/inco ...
1、求解器
1.1 複製源碼
本案例以icoFoam為例,複製【openFOAM/OpenFOAM-9/applications/solvers/incompressible/icoFoam】文件夾至run文件夾下(我的是【openFOAM/mtl-9/run/solvers/incompressible】)
1.2 修改名稱
將文件夾重新命名為【myIconFoam】
修改該目錄下的文件名稱,為了便於分辨是自己的求解器,在源代碼里輸出一些內容
1.3 修改files
修改【Make/files】
註意:這裡路徑要改為【$(FOAM_USER_APPBIN)】,與之前【FOAM_USER_APPBIN】區別
1.4 編譯
輸入【wmake】
編譯成功之後開始使用
2、使用
複製一份cavity案例
blockMesh劃分網格
myIcoFoam求解
3、進階
本案例修改icoFoam求解器,添加溫度項。
\[\frac{\partial T}{\partial t} + \bigtriangledown \cdot (UT)-{\bigtriangledown }^2(D_{T}T)=0 \]3.1 修改源文件
添加以下代碼,及上述方程
fvScalarMatrix TEqn
(
fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T)
);
TEqn.solve();
3.2 修改場文件
新增以下有關溫度項的代碼
IOdictionary myProperties // 新增一個myProperties項
(
IOobject
(
"myProperties",
runTime.system(), // 存儲在system文件夾下
mesh,
IOobject::MUST_READ_IF_MODIFIED,
IOobject::NO_WRITE
)
);
dimensionedScalar DT // 定義一個變數DT,從myProperties中獲取
(
"DT",
myProperties.lookup("DT")
);
Info<< "Reading field T\n" << endl;
volScalarField T // 定義一個變數T
(
IOobject
(
"T",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
3.3 編譯
修改完成之後,【wmake】編譯
3.4 使用
3.4.1 初始條件
複製p文件至T,改變名稱、單位、初始值和邊界條件
3.4.2 自定義屬性
複製constant里的文件【transportProperties】文件至system,修改名稱myProperties
3.4.3 新增離散格式
新增div(phi,T)的離散格式
3.4.4 新增求解項
3.4.5 求解
劃分網格:blockMesh
求解:myIcoFoam
完成