( \
runTime.timeName(), mesh,
IOobject::MUST_READ, IOobject::AUTO_WRITE ), mesh );
这样,创建了新的vol标量场T,从文件T中读入。 对于T的创建具体解释如下: a)创建了标量场T
b)T通过读(IOobject::MUST_READ)在runTime.timeName()目录下名称为“T”的文件创建,在开始计算时,runTime.timeName()是contorlDict中设定的startTime值决定的。 c)T将自动写入(IOobject::AUTO_WRITE)计算结果到runTime.timeName()目录中,runTime.timeName()随迭代是变化的,写入控制由contorlDict中设定。
d)T是定义在mesh对象上的,这意味着T在内部cell上有值internalField,在边界上还需要边界条件,这与polyMesh/boundary中要一致。 2)在求解器中加入新的求解方程
下一步回到myicoFoam.C加入新的微分方程,由于温度场依赖于速度场,可放在PISO循环后面。
# include \ U -= rUA*fvc::grad(p);
U.correctBoundaryConditions(); // Add the temperature equation fvScalarMatrix Teqn 温度是标量方程 (
fvm::ddt(T)
+ fvm::div(phi, T) 要用到界面流量 - fvm::laplacian(DT, T) 扩散项
);
TEqn.solve(); 求解 3)编译 wmake
4)在算例中加入新方程的初始和边界条件 4.1拷贝一个cavity算例到mycavity
4.2修改transportProperties字典文件,设定DT cd constant
修改transportProperties文件,前面已提到DT要从该字典文件读入。设定DT=0.002m2/s DT DT [0 2 -1 0 0 0 0] 0.002; 4.3修改T文件,设定初始值和边界 cd 0 进入0目录 拷贝一个T文件 cp p T 修改T文件为 FoamFile {
version 2.0; format ascii; class volScalarField; object T; }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // dimensions [0 0 0 1 0 0 0];
internalField uniform 300; 初始内部点为300℃ movingWall {
type fixedValue;
value uniform 350.; 边界为350℃ }
fixedWalls {
type fixedValue;
value uniform 300.; 边界为300℃ 5)修改离散格式和代数求解器求解控制文件 A进入system目录
由于温度方程有非稳态项,对流项,扩散项,分别要在ddt,div,laplacian中设置 打开fvSchemes文件,添加 divSchemes {
default none;
div(phi,U) Gauss upwind; div(phi,T) Gauss upwind; }
laplacianSchemes {
default none;
laplacian(nu,U) Gauss linear corrected; laplacian(DT,T) Gauss linear corrected; laplacian((1|A(U)),p) Gauss linear corrected; }
在fvSolution中设置代数求解器选项 T PBiCG {
preconditioner DILU; tolerance 1e-06; relTol 0; };
注意T方程形成的矩阵是非对称的,不要用PCG和DIC
6)运行
myicoFoam . mycavity
七.OpenFOAM程序开发――求解器的详细分析1 进入icoFoam目录 可以看到
createFields.H icoFoam.C icoFoam.dep Make/ Make/为wmake编译所需的文件
IcoFoam.C为主程序文件,它包含createFields.H 编辑icoFoam.C
可以看到icoFoam.C首先引入的头文件为fvCFD.H。 所以你可以看到,在编译选项options中 EXE_INC = \\
-I$(LIB_SRC)/finiteVolume/lnInclude //fvCFD.H的存放目录 EXE_LIBS = \\
-lfiniteVolume //需要链接的库 找到fvCFD.H,编辑,可以看出这些是主程序必须的类库 #ifndef fvCFD_H #define fvCFD_H #include \
#include \ 时间类 #include \ 网格类 #include \ fvc类 #include \ fvMatrix类 #include \ fvm类 #include \
#include \#include \#include \#include \
#include \#include \#include \#ifndef namespaceFoam #define namespaceFoam using namespace Foam; #endif #endif
再看看icoFoam的程序体,了解一下求解程序的结构
#include \ ――――――――――――――――(头文件) 通常位于main函数前,是程序所需的类的定义 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // int main(int argc, char *argv[]) {
―――――――――――――――(包含文件) # include \ # include \# include \
―――――――――――包含文件通常是程序片断,如创建时间、创建网格等 ―――――――――――――――(求解器代码)―――――― # include \
需要根据应用,单独写的代码,如\和Main,以及Ueqn,pEqn等 ――――――――――――――――――――――――――――――――――――― # include \
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // 。。。。。 }
八.OpenFOAM程序开发――求解器的详细分析2 a.场变量的定义
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库OpenFOAM常用类的一些总结(4)在线全文阅读。
相关推荐: