Created time
Jul 10, 2025 11:10 AM
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Jul 10, 2025 11:14 AM
前言:
Preface:
参考:感谢原作者们的无私引路和宝贵工作。
前置: OpenFOAM开发编程基础05 场的基本操作 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
OpenFOAM 中,当某一些类实现某个特定的功能,可以把它们开发成库。
对“类”“库”链接有疑问的,请参考 OpenFOAM开发编程基础00 基本实现和开发 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
我们将上篇讨论中的压力场、速度场的伪计算开发成独立的库,然后在应用中调用它,当然开发库也可以被任何应用调用。
建立本文的项目文件夹并进入
应用准备
在应用文件夹中新建开发库
脚本和说明
略。
文件结构
整个应用的文件结构如下
开发库
头文件
头文件
/userApp/computeVelocityPressure/computeVelocityPressure.H
,内容如下- 各个函数的原型
- 为什么开发库的头文件要包含
fvCFD.H
?读者可以尝试注释掉这行,重新编译,并阅读报错信息。这样可以加深对fvCFD.H
文件内容的理解。
源代码
源文件
/userApp/computeVelocityPressure/computeVelocityPressure.C
,我们采用更“OpenFOAM”风格的实现方式,内容如下注意和 OpenFOAM开发编程基础05 场的基本操作 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn) 比较各个函数的实现
也许会有同学对比数据类型有困惑,比如 scalar 类型和 volScalarField 类型。简单理解就是,scalar 只是一个值,而 volScalarField 是一组数据,包含了计算域内所有离散点的 scalar 值,相当于是一个矩阵,也就是表示了一个“场”。
库 Make
/userApp/computeVelocityPressure/Make/files
内容如下- 注意
LIB
关键字的变化
/userApp/computeVelocityPressure/Make/options
- 该库,强调是这个库,在编译的时候,不会使用到其他更多的库,所以
options
中有这些基础库就够了,不需要修改
编译
终端使用命令
- 这个库也是独立的,可以被其他任何应用调用,只要写对调用路径
createFields.H
创建场
/userApp/createFields.H
,内容上和上一篇讨论的场文件相同主源码
主源码
/userApp/06_01_devLib.C
,内容如下应用 Make
/userApp/Make/files
/userApp/Make/options
- 注意开发库的处理,既要“包含”,也要“链接”。
编译运行
运行结果如下
我们也可以通过
paraview
打开查看计算结果。小结
研究中涉及到的通用方法可以抽象成开发库,但是初学者不能追求把方法都写成开发库,具体问题应当具体对待。通过本篇讨论,最主要的还是熟悉代码架构和代码语法。
此外,编程中注意单位统一,注意数据类型统一。
欢迎留言讨论,反馈建议和意见,赞助打赏。
Feel free to leave comments, feedback, suggestions, opinions, and donations..

Loading...