icoFoam 求解器名称
|-createFields.H 场变量的声明和初始化
—————————————————————————————————————————————
Info<< "Reading transportProperties\n" << endl; //屏幕提示读入参数控制文件,等价于 C++中std::cout
//声明属性字典类对象,该对象由 constant 文件夹下的“transportProperties”初始化创建。
IOdictionary transportProperties
(
IOobject
//其实IOobject,顾名思义就是输入输出对象,它完成的是一个桥梁的作用,即连接要构造的类及硬盘中的相应文件。这可以通过其成员函数objectStream()了解到,当完成了“搭桥”之后,便可通过这一成员函数返回硬盘文件对应的输入流,从而从输入流中读入将要构造的类的相关信息//
(
"transportProperties", // 文件名称
runTime.constant(), // 文件位置,case/constant
mesh, // 网格对象
IOobject::MUST_READ_IF_MODIFIED, //如果更改,必须读入
IOobject::NO_WRITE // 不对该文件进行写操作
)
);
//字典查询黏性,以便初始化带有单位的标量
dimensionedScalar nu
(
transportProperties.lookup("nu")
);
//屏幕提示创建压力场
Info<< "Reading field p\n" << endl;
//创建压力场
volScalarField p //声明一个带单位的标量场,网格中心存储变量。
(
IOobject // IOobject主要从事输入输出控制
(
"p", // 压力场初始文件名称
runTime.timeName(), // 文件位置,由case中的system/controlDict中的startTime控制
//
在OpenFOAM中,icoFoam是一个用于模拟无粘或低粘流动的求解器,常用于处理不可压缩流体的问题。在这个学习笔记中,我们将深入理解icoFoam的【createFields.H】文件中涉及的关键概念和技术。
`IOdictionary`是OpenFOAM中的一个重要类,它用于处理配置文件,例如`transportProperties`。`IOdictionary`通过`IOobject`类与硬盘上的文件建立联系,允许读取和写入特定的数据。在示例中,`transportProperties`字典读取了`constant`文件夹下的`transportProperties`文件,该文件定义了流体的物理性质,如黏度(nu)。`lookup("nu")`方法则用于获取黏度值,这是一个具有物理单位的标量。
接着,我们看到了`volScalarField p`的声明,它是压力场。`volScalarField`是OpenFOAM中用于表示在整个计算域内存储的标量场的类。`p`的压力场由`IOobject`控制,文件名为`p`,存储位置基于当前时间(由`runTime.timeName()`决定),这在处理非稳态问题时非常关键,因为它会随着模拟时间的变化而变化。`MUST_READ`表示必须读取此文件,而`AUTO_WRITE`意味着OpenFOAM会根据`controlDict`中的设置自动写入数据。
然后,`volVectorField U`声明了速度场,它是一个体向量场,同样使用`IOobject`进行管理和输入输出。`U`的定义方式与`p`类似,但代表的是流动的速度分量,也是在每个网格中心存储的。
`createPhi.H`包含的`surfaceField phi`涉及到界面流率,它被存储在体之间(volume)的交界面上。这种类型的场对于处理自由表面流动或者多相流问题至关重要,因为它能够追踪不同相之间的界面。
icoFoam求解器在启动时会读取必要的参数,如黏性(nu)和压力、速度场的初始条件。这些场都是基于网格的对象,它们的输入输出由`IOobject`管理,并且会随着模拟时间的推进动态更新。了解这些基本概念对于理解和使用icoFoam进行流体模拟至关重要。在实际应用中,用户还需要熟悉如何编写和修改相应的控制文件,如`controlDict`,以定制模拟的具体设置。
1