ofsp2026 05_vector
Created time
Mar 28, 2026 05:15 AM
type
Post
status
Published
date
Mar 28, 2026
slug
ofsp2026 05_vector
summary
tags
ofsp2026
OpenFOAM
category
post
icon
password
Place
Last edited time
Mar 28, 2026 09:12 AM
Important
访问 https://aerosand.cc 以获取最近更新。
0. 前言
上一篇浏览了几个常见的基础类,本文尝试讨论 vector 类的部分细节,帮助读者熟悉开发流程、工具使用、编译原理。
本文主要讨论
练习源码的查阅
讨论 vector 类的部分代码实现
理解原生库的使用
编译运行 vector 项目
1. Vector 类
终端输入命令,本地查找
终端输入命令,打开该类的文件夹
该类的文件结构如下
阅读
Vector.H 的代码描述可知,该类是 3D Vector 的模板类,继承自 VectorSpace 类并添加封装了 3 分量的构造、分量元素的接口函数、点积和叉积的等方法。具体到
Vector.H 的代码,简单方法在代码中直接实现,复杂方法则大量使用内联函数(inline function)以提高代码性能。OpenFOAM 特别提供 VectorI.H 文件来写内联函数的实现。进入
Vector/int 文件夹,查看 Vector/ints/labelVector.H 代码进入
Vector/floats 文件夹,查看 Vector/floats/vector.H 代码可以看到,代表不同数据类型的文件夹
/bools , /complex , /floats ,/ints ,/lists 都是 Vector 模板类对不同基本数据类型的 typedef ,也就是类型别名。Warning
暂不深究代码的所有细节
2. 源码讨论
2.1. 声明
查阅
Vector/Vector.H 代码,我们分段讨论Tip
API 的代码页可以点击跳转到不同的头文件、类、函数等。
2.2. 内联
很多方法的定义在内联文件中
查阅
Vector/VectorI.H 代码Warning
上面这些代码讨论主要是为了帮助读者熟悉 C++ 语言在 OpenFOAM 中的使用,克服对 C++ 语言的陌生和恐惧,便于读者理解后续实践的代码。暂时不需要花费更多时间去阅读更多 OpenFOAM 的源代码,也不需要深究代码细节,后续会在
ofsc 系列讨论代码。3. 项目构建
终端输入命令,建立本文项目
继续使用终端命令或者使用 vscode 界面创建其他文件,最终文件结构如下
4. 开发库
4.1. 库源码
代码
Aerosand.H 为代码
Aerosand.C 为4.2. 库 Make
库
Make/files 为开发库没有其他依赖,库
Make/options 为空4.3. 库编译
终端输入命令,进行库的编译
5. 主项目
5.1. 主源码
代码
ofsp_05_vector.C 为5.2. 项目 Make
项目
Make/files 为因为我们包含了
vector.H ,路径为 $FOAM_SRC/OpenFOAM/primitives/Vector/floats/vector.H。由 Make 文件的位置能判断,该文件属于 OpenFOAM 库,路径为 $FOAM_SRC/OpenFOAM。归属关系如下。原则上,我们应该在项目
Make/options 中包含 OpenFOAM 库。实际上,OpenFOAM 的构建系统(wmake)已经自动处理原生必备库的依赖关系。我们只需要添加第三方库、自己开发的库、某些可选模块的库即可。Important
$FOAM_SRC/OpenFOAM 库已经自动依赖,其中类的使用均无需用户再次链接。项目
Make/options 为6. 编译运行
终端输入命令,编译运行该项目
运行结果如下
7. 小结
本文完成讨论
练习源码的查阅
讨论 vector 类的部分代码实现
理解原生库的使用
编译运行 vector 项目
支持我们
Tip
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论或赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。

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