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