ofsp2024-01 输入输出

ofsp2024-01 输入输出
Created time
Jul 10, 2025 11:00 AM
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Jul 10, 2025 11:36 AM
😀
前言: Preface:
 
参考:
感谢原作者们的无私引路和宝贵工作。
前置: OpenFOAM开发编程基础00 基本实现和开发 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
这里需要重申 OpenFOAM 初学者的 C++ 学习的个人建议:目前阶段,需要系统学习 C++,需要对 C++ 有基本和完整的认知,暂时不需要深入学习 C++,暂时不需要学习编程算法,不需要等到学完再开始 OpenFOAM。需要不断学习 C++,需要慢慢深入学习 C++,需要在不断的实践中积累 C++ 经验。
在做计算或者其他交互工作的时候,信息流的写入写出是不可避免的。比如从文件中读取计算参数、读取材料性质,又或者是向文件写入计算后的物理场。
所以,在了解应用的基本实现和开发后,我们讨论一下应用的输出输出方法。
本文依然基于 ubuntu22.04 系统,OpenFOAM 2306 版本(和 2212 版本,2206 版本几乎没有什么差别,不用担心)。此系列以后不再赘述。
建立本文的项目文件夹并进入

C++ 实现

C++ 通过输入输出流来实现从文件中读取或者向文件中写入。

文件流

在初学的时候我们就知道 C++ 提供 iostream 标准库,包含 cincout 方法,用于从标准输入中读取信息流,或者从标准输出中写入信息流。除此之外,C++ 还提供 fstream 标准库,用于外部文件和信息流之间的交互。
  • ofstream 表示输出文件流,用于创建文件并向文件写入信息
  • ifstream 表示输入文件流,用于从文件读取信息
  • fstream 表示通用文件流,同时具有写入写出的方法

项目实现

通过 vscode 的 C/C++ Project Generater01_IO/ 路径下新建项目 01_01_IO/
主源码 src/main.cpp 如下所示
为了保证文件读取正常,我们需要提供相应的 input.dat 文件,放在项目根目录下即可。文件内容如下
终端编译并运行此项目
运行结果如下
我们找到输出结果(除了编译语句,还有其他信息提醒有未使用变量,我们确实没有使用,不用在意,以后不再赘述),
同时发现项目根目录下生成了 output.dat 文件,打开看到其中内容为
该项目满足我们的要求。

OpenFOAM 实现

OpenFOAM 的应用一般需要从 case 中读取字典、从边界条件库中读取边界数据,向 case 中输出计算结果等等。
OpenFOAM 是怎么实现从文件夹读取和写入的呢?OpenFOAM 的读取和写入更加高级,按关键词进行索引查找的方法直接封装在了相关的类中,直接使用方法即可,暂时不用深究到实现的代码层面。

应用准备

文件结构如下

脚本和说明

新建脚本
_appmake.sh 脚本主要负责应用的编译,暂时写入如下内容
_appclean.sh 脚本主要负责应用的清理,暂时写如下内容
_caserun.sh 脚本主要是负责应用编译成功后,调试算例的运行,暂时写入如下内容
_caseclean.sh 脚本主要是负责清理应用到到编译前状态,如果应用要修改,那么测试算例也要还原到运行前的状态,所以暂时写入如下内容
README.md 写入需要说明的内容。
以后除非有特别情况,不再赘述脚本和说明

主源码

主源码如下

字典文件

提供字典文件 debug_case/constant/customProperties,该字典没有读取写入操作,只需要写上正确的文件头,内容留空处理。
字典文件 debug_case/constant/myProperties ,内容如下

编译运行

终端运行
以后不再赘述简单的执行命令
终端显示结果如下
另外算例文件夹下有了一个新建文件夹 debug_case/processing/,路径下的 myOutPut.dat 内容如下

小结

我们同样从最一般的 C++ 基础情况切入,了解了基于文件流的输入输出,也讨论了 OpenFOAM 设计的文件流输入输出方法,以后会不断地使用文件流输入输出。
 
 
 
💡
欢迎留言讨论,反馈建议和意见,赞助打赏。 Feel free to leave comments, feedback, suggestions, opinions, and donations..
Alipay
Alipay
 
 
上一篇
ofsp2024-02 主函数参数列表类初步
下一篇
ofsp2024-00 基本实现和开发
Loading...