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
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论或赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。
Alipay
Alipay
 
Copyright @ 2026 Aerosand
  • OpenFOAM 开发代码 :GPL v3
 
 
Loading...