OpenFOAM Sharing Programming 开发编程基础02 命令行参数

OpenFOAM Sharing Programming 开发编程基础02 命令行参数
Created time
Jul 10, 2025 09:58 AM
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Jul 10, 2025 10:09 AM
😀
前言: Preface:
 
参考:
感谢原作者们的无私引路和宝贵工作。
前置:
OpenFOAM 的很多应用都可以通过命令行来制定参数运行。虽然用户有时候会觉得有些陌生,但是用好命令行可以高效灵活的处理各种问题。
另外,新同学很难不注意到求解器总是有几个固定的头文件,包括 setRootCase.HcreateTime.HcreateMesh.H 。网络上找到的代码解析常常只有一句注释介绍功能,也许无法消除困惑感。
本文同样会从 C++ 开始,简单介绍命令行参数,然后进一步讨论 setRootCase.H 头文件。

OpenFOAM 的命令行

参考:OpenFOAM Documentation - Command line
OpenFOAM 命令行基础的使用格式如下
比如典型的命令行使用如下
使用 -help 选项可以查看更多的命令行选项,例如终端输入 blockMesh -help ,终端会输出如下内容
一般,数据处理和后处理的时候也会大量使用命令行。
例如,使用
具体的使用技巧暂不展开,以后会专门讨论。
我们先简单回顾一下C++中命令行参数的使用。

C++ 实现

项目准备

建立项目文件夹并进入
使用 vscode 的 C++/C Project Generator 打开此项目。

主函数参数

我们在初学 C++ 的时候,主函数的参数一般留空,即有如下形式
当进一步深入 C++ 开发时,了解到主函数的更一般写法为
  • argcargument count 的缩写,保存程序运行时传递给主函数的参数个数
  • argvargument vector 的缩写,保存程序运行时传递给主函数的具体参数的字符型指针,每个指针都指向一个具体的参数。
    • argv[0] 指向程序运行时的全路径名称
    • argv[1] 指向程序运行时命令行中执行程序名后第一个字符串
    • argv[2] 指向程序运行时命令行中执行程序名后第二个字符串
    • 其他以此类推
参考 【C++】main函数的参数 argc 和 argv - 知乎

主源码

主源码 src/main.cpp 如下所示
终端直接编译运行
运行结果如下
如果运行时增加参数,例如
运行结果如下
通过运行结果可以看到,argc 当然就是参数的总个数,argv[0]则是也就是应用名称本身,其他参数按顺序类推。
比如,对于以下命令行
其中,argc 等于 3,而 argv[0]blockMeshargv[1]-caseargv[2]debug_case
总结来说,命令行中的每一个参数其实都可以在程序中通过主函数参数被调用,以便参加程序运行和计算。

OpenFOAM 实现

基于主函数命令行参数的了解,下面讨论 OpenFOAM 中的主函数参数等内容。

项目准备

文件结构如下
以后非特别情况不再赘述简单的文件结构。

脚本和说明

新建脚本
脚本和说明文档的内容略。

setRootCase.H

我们看一下主源码中的头文件 setRootCase.H
代码具体为
代码讨论
  • 构造参数列表的对象 args (所以此 H 文件需要放在所有和命令行参数相关的代码之后)
  • 该 H 文件检查了该应用的参数是否正确
  • 如果参数列表检查不通过,则报错退出
构造的类型 argList 类是一个非常基础的类,具有很多的成员数据和成员方法。我们大概挑几处代码作为切入点简单了解一下 argList 类。
打开类的声明 argList.H ,内容如下
关于 checkRootCase() 成员函数的实现,需要去看同目录下的类的定义,即 argList.C 文件,摘取部分内容如下
方法的实现较为复杂,对于现阶段来说,没有必要过于深入基础类代码。目前阶段只需要做到心里有数、看到不那么陌生即可。
在上一篇文章的讨论中,也可以深入看一下 OpenFOAM 的 IOdictionary 类,终端使用命 find $FOAM_SRC -iname IOdictionary.H,可以找到对应的构造函数原型。也可以查找到 IOobject.H 中的构造函数原型。目前阶段,读者不宜深挖代码。
更深入的代码讨论参见 ofsc(openfoam sharing coding) 系列。

主源码

我们一起写一个可以使用命令行参数的项目。

帮助信息

编译后查看帮助信息
终端输出
可以看到其中有我们自定义的帮助信息,如下

应用参数

应用参数(arguments)在执行应用命令时是强制需要的,下一节的应用选项(option)是可选的。
给主源码增加应用参数如下
终端运行是必须要提供相应类型的参数
编译后运行
结果为
所以应用参数有什么用出呢?
当我们拿到应用参数,这些应用参数就可以进一步参与到主程序的计算中。

应用选项

应用选项在运行时可写可不写。
主源码如下
编译运行应用
运行结果为
如果运行应用如下
运行结果为
应用选项 -dict 也有默认值,可以尝试省略并运行应用。
通过使用不同的应用选项,看到各行源代码的效果。

小结

从 C++ 基础出发, 简单讨论了主函数运行时的帮助、参数和选项。虽然上面的开发都是仅停留在表面做做样子,但目的也是使读者对 OpenFOAM 中运行应用的命令行方法有了一些了解,以后也可以在此基础上深入。更深入的开发见后续讨论。
本文基本搞明白了 OpenFOAM 求解器中必备的 setRootCase.H 到底是什么,那么 createTime.H 头文件到底是什么呢?
 
 
 
💡
欢迎留言讨论,反馈建议和意见。 Feel free to leave comments, feedback, suggestions, and opinions.
Alipay
Alipay
 
上一篇
网站访问加速建议
下一篇
OpenFOAM Sharing Programming 开发编程基础00 基本实现和开发
Loading...