ofsp2026 07_firstApp
Created time
Mar 28, 2026 05:18 AM
type
Post
status
Published
date
Mar 28, 2026
slug
ofsp2026 07_firstApp
summary
tags
ofsp2026
OpenFOAM
category
post
icon
password
Place
Last edited time
Mar 28, 2026 09:12 AM
Important
访问 https://aerosand.cc 以获取最近更新。
0. 前言
之前讨论了编译原理、动态库的链接和 OpenFOAM 常见的类,现在我们使用 OpenFOAM ,完成一个较为完整的开发流程。
本文主要讨论
理解 OpenFOAM 标准应用的文件架构
认识使用脚本
认识应用开发测试流程
调用其他位置的开发库
编译运行 firstApp 项目
1. fvCFD.H
在实际开发中,除了之前提到了 vector 和 tensor 等,我们还需要用到更多的和 FVM 相关的类来离散求解偏微分方程。OpenFOAM 提供
fvCFD.H ,其中包含了大部分和 FVM 相关的头文件,包括 tensor 类等。使用 fvCFD.H 可以大大减少主源码要写的头文件数量。终端输入命令,查找
fvCFD.H 文件终端输出如下
显然
fvCFD.H 在 finiteVolume 库里,所以需要另外在 Make/options 中包含、链接。Tip
OpenFOAM 库是低层库,已配置为自动依赖。而 finiteVolume 库属于高层库,依赖于众多低层库,需要手动配置。
我们可以将上篇代码中的原生头文件替换成
fvCFD.H ,并配置相关的 Make 文件。2. 项目
我们使用 OpenFOAM 提供的方式创建求解器应用基础模板,并在此基础上进行开发。
终端输入命令,建立本文项目
2.1. 源代码
下面将讨论源代码。
2.2. 测试算例
对于不同的求解器,可以拷贝一个对应的原生算例用于测试求解器的开发。对于本项目来说,测试算例仅仅用于通过求解器语法检查。
终端输入命令,拷贝测试算例
2.3. 脚本文件
使用脚本可以方便用户开发测试。以本项目为例,我们新建脚本如下
终端输入命令,新建脚本
脚本 caserun 主要是负责应用编译成功后,测试算例的运行,可以写入如下内容
脚本 caseclean 主要是负责清理应用到到编译前状态,如果应用要修改,那么测试算例也要还原到运行前的状态,可以写入如下内容
2.4. 说明文件
为了方便后续阅读、开发和使用,我们还应该准备说明文件。
终端输入命令,新建说明文件
说明文件内容如下
建议遵循 About-Bio-Caution-Deploy-Event 的 A-B-C-D-E 原则书写说明文件,尽量表述清楚必要信息。
3. 文件结构
可以看到该项目的文件结构如下
终端输入命令
4. 测试
终端输入命令,运行脚本
如果运行提醒
Permission denied,那就需要给脚本权限虽然我们还没有给求解器写入任何开发代码,但是 OpenFOAM 提供的求解器基础模板在测试算例存在的情况下,仍然可以运行。
终端输出信息有两段
第一段是划分网格的输出日志
第二段是求解器运行的输出日志
5. 原生主源码
代码
ofsp_07_firstApp.C 为6. 使用开发库
在该项目中,我们有选择的使用上一篇讨论所开发的 Aerosand 库中的某个类。
6.1. 主源码
代码
ofsp_07_firstApp.C 修改为6.2. 项目 Make
项目
Make/files 为Caution
注意,这里需要链接的是上一篇讨论建立的开发库。
项目
Make/options 为我们再次解释其写法
- 前缀 EXE 表示这是可执行文件的配置(前缀 LIB 表示是库文件的配置)
- 后缀 INC 表示包含路径
- 使用
I标志指定头文件搜索路径 - 通常指向 OpenFOAM 模块的
lnInclude目录(链接包含目录) - 可以包含系统头文件路径或第三方库头文件路径
- 后缀 LIBS 表示库链接(直接链接无需链接任何库,可以留空不写)
- 使用
l标志指定需要链接的库 - 库名称不需要前缀
lib和后缀.so(如lfiniteVolume对应libfiniteVolume.so) - 使用
L标志指定库搜索路径
- 路径可以采用多种写法
$(LIB_SRC)通常由 OpenFOAM 环境变量和 相对路径组合而成- 常见写为
I$(FOAM_SRC)/finiteVolume/lnInclude也可以 - 绝对地址
I/usr/lib/openfoam/openfoam2306/src/finiteVolume/lnInclude - 相对地址
I../ofsp_07_tensor/Aerosand/lnInclude
7. 编译运行
因为上一篇讨论的 Aerosand 库已经编译成功,这里不用再次编译,直接调用即可。
Tip
输入时可以常用 Tab 键进行快速补全。
终端输出如下(仅摘取有主要变化的片段)
8. 小结
本文完成讨论
理解 OpenFOAM 标准应用的文件架构
认识使用脚本
认识应用开发测试流程
调用其他位置的开发库
编译运行 firstApp 项目
支持我们
Tip
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论或赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。

Copyright @ 2026 Aerosand
- 课程(文本、图片等):CC BY-NC-SA 4.0
- OpenFOAM 开发代码 :GPL v3
- 其他代码:MIT License
Loading...