Created time
Jul 10, 2025 11:01 AM
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Jul 10, 2025 11:45 AM
前言:
Preface:
参考:感谢原作者们的无私引路和宝贵工作。
前置: OpenFOAM开发编程基础01 输入输出 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
OpenFOAM 初学者很难不注意到求解器总是有几个固定的头文件,包括
setRootCase.H
,createTime.H
和 createMesh.H
。网络上找到的代码解析常常只有一句注释介绍功能,也许无法消除困惑感。本文同样从 C++ 开始,简单介绍主函数参数,在此基础上讨论
setRootCase.H
头文件。建立本文的项目文件夹并进入
C++ 实现
主函数参数
我们在初学 C++ 的时候,主函数的参数列表一般留空,即有如下形式
当进一步深入 C++ 开发时,了解到主函数的更一般写法为
argc
即argument count
的缩写,保存程序运行时传递给主函数的参数个数
argv
即argument vector
的缩写,保存程序运行时传递给主函数的具体参数的字符型指针,每个指针都指向一个具体的参数。argv[0]
指向程序运行时的全路径名称argv[1]
指向程序运行时命令行中执行程序名后第一个字符串argv[2]
指向程序运行时命令行中执行程序名后第二个字符串- 其他以此类推
项目实现
新建项目
02_arg/02_01_args/
主源码
src/main.cpp
如下所示终端直接编译运行
运行结果如下
如果运行时增加参数,例如
运行结果如下
基于主函数参数列表的了解,下面讨论 OpenFOAM 中的主函数参数等内容。
OpenFOAM 实现
应用准备
文件结构如下
以后非特别情况不再赘述文件结构。
脚本和说明
新建脚本
脚本内容和说明文档略。
setRootCase.H
先看一下主源码中的头文件
setRootCase.H
代码具体为
代码讨论
- 该 H 文件检查了该应用的参数是否正确
- 构造参数列表的对象
args
(所以此 H 文件需要放在所有的参数代码等后面)
- 如果参数列表检查不通过,则报错退出
argList
类是一个非常基础的类,具有很多的成员数据和成员方法。我们大概挑几处代码作为切入点简单了解一下 argList
类。打开
argList.H
,内容如下方法的实现较为复杂,对于现阶段来说,基础类没有必要去深入讨论代码的实现部分,目前只需要做到心里有数、看到不那么陌生即可。
在上一篇文章的讨论中,也可以深入看一下 OpenFOAM 的 IOdictionary 类,终端使用命 find $FOAM_SRC -iname IOdictionary.H,可以找到对应的构造函数原型。也可以查找到 IOobject.H 中的构造函数原型。
主源码
帮助信息
编译后查看帮助信息
终端输出
可以看到我们自定义的帮助信息。
应用参数
应用参数(arguments)在执行应用命令时是强制需要的,下一节的应用选项(option)是可选的。
给主源码增加应用参数如下
终端运行是必须要提供相应类型的参数
编译后运行
结果为
应用选项
应用选项在运行时可写可不写。
主源码如下
编译运行应用
运行结果为
如果运行应用如下
运行结果为
应用选项
-dict
也有默认值,可以尝试省略并运行应用。通过使用不同的应用选项,看到各行源代码的效果。
小结
从 C++ 基础出发, 简单讨论了主函数运行时的帮助、参数和选项。虽然上面的开发都是仅停留在表面做做样子,但目的也是使读者对 OpenFOAM 中运行应用的命令行方法有了一些了解,以后也可以在此基础上深入。更深入的开发见后续讨论。
本文基本搞明白了 OpenFOAM 求解器中必备的
setRootCase.H
到底是什么,那么 createTime.H
头文件到底是什么呢?欢迎留言讨论,反馈建议和意见,赞助打赏。
Feel free to leave comments, feedback, suggestions, opinions, and donations.

Loading...