MATLAB读取OpenFOAM的二进制文件

news/2024/11/30 15:31:32/

OpenFOAM的文件格式

在这里插入图片描述
上面是OpenFOAM二进制文件的格式,我们可以看出,前面21行都是无关的说明文件,22开始时除了一个括号之外,其它的都是数据。

读取数据

读取数据的思路非常简单,忽略不需要的,读取需要的。
接下来我们将使用到四个函数,fopen(),fgetl(),fread(),fclose()

1、打开文件

fidU = fopen(Ufatch,'r');%Upatch为文件的路径

2、忽略不需要的注释

%%忽略头文件
for n = 1:21[~] = fgetl(fidU);
end
[~] = fread(fidU,1,'char');

注意这里首先忽略了21行,然后忽略了一个字节,也就是那个括弧

3、读取我们需要的数据

%%读取数据
U_mag = fread(fidU,3*nx*ny*nz,'double');

4、关闭文件

最后的最后,一定要记得关闭文件,不然程序可能会崩

fclose(fidU);

注意上面的3nxny*nz是数据的大小,nx,ny,nz是每个方向的网格数,由于速度有三个分量,所以这里乘以3。‘double’代表我们读取的是双精度的文件,告诉程序每个分量是多少个字节(这里好像是16个?忘了,不重要,知道是double就行)。前面的括弧就是只有一个字节。
这里我们就成功从二进制文件中读取到了数据!是不是非常简单。

我的代码

最后附上一个我个人写的读取数据的函数,该函数有四个输入参数,路径(fpatch),以及各个方向的网格数(gridNumY,gridNumX,gridNumZ)
返回参数是速度和温度矩阵。

%%read data
function [U,V,W,T] = readBinaryFile(fpatch,nx,ny,nz)
%---读取OpenFOAM-8二进制文件U,T
%---nx,ny,nz为网格数,fpatch为文件所在路径
Ufatch = strcat(fpatch,'U');
Tfatch = strcat(fpatch,'T');
fidU = fopen(Ufatch,'r');
fidT = fopen(Tfatch,'r');
%---读取速度数据
%%忽略头文件
for n = 1:21[~] = fgetl(fidU);
end
[~] = fread(fidU,1,'char');
%%读取数据
U_mag = fread(fidU,3*nx*ny*nz,'double');
un = 1:3:3*nx*ny*nz;vn = 2:3:3*nx*ny*nz;wn = 3:3:3*nx*ny*nz;
if nz==1U = reshape(U_mag(un),nx,ny);V = reshape(U_mag(vn),nx,ny);W = reshape(U_mag(wn),nx,ny);
elseif nz>1U = reshape(U_mag(un),nx,ny,nz);V = reshape(U_mag(vn),nx,ny,nz);W = reshape(U_mag(wn),nx,ny,nz);
end
fclose(fidU);
%---读取温度数据
%%忽略头文件
for n = 1:21[~] = fgetl(fidT);
end
[~] = fread(fidT,1,'char');
%%读取数据
T = fread(fidT,nx*ny*nz,'double');
if nz==1T = reshape(T,nx,ny);
elseif nz>1T = reshape(T,nx,ny,nz);
end
fclose(fidT);
end

http://www.ppmy.cn/news/440940.html

相关文章

《离散数学》:特殊的图

〇、前言 这一节会重点讨论一下一些特殊的图,这些图会解决一些特殊的问题。 一、欧拉图 给定无向连通图 G,若存在一条路经过 G 中每边一次且仅一次,则该路为欧拉路。若存在一条回路经过 G 中每边一次且仅一次,则该回路称为欧拉…

华为 android 菜单键,没有返回和菜单键!华为P10的Home键简单说明

虽然华为顺应了民意,将指纹识别从后面移到了前面。但在我看来,目前华为P10的Home键解决方案还存在两个需要完善的地方。 1、Home键不能按压。可能是受了苹果手机一开始的惯性思维,我们普遍认为目前的手机需要一个可以按下去的机械按键。虽然在…

android手机华为p10,华为P10的手机系统是什么

华为P10的手机系统是什么 华为P10的手机系统是基于Android 7.0的EMUI 5.1系统。 华为P10内置3200mAh电池,支持SuperCharge低压快充,更有15层安全保护机制,理论上充电5分钟就能看一部约90分钟的电影。电池寿命方面,华为P10再一次充…

第五十八回: Form系列组件的验证与提交功能

文章目录 概念介绍使用方法Form WidgetFormField WidgetTextFormField 示例代码 我们在上一章回中介绍了"如何在Buttton中同时显示文字和图标"相关的内容,本章回中将介绍Form Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里…

【大学计算机技术】第七章 测试2

文章目录 选择题 选择题 数字通信系统中,一个信道允许的最大数据传输速率称为该信道的带宽。 A. 正确 B. 错误 正确答案: A 同轴电缆只能用于传输电视信号,不能用于传输数字信号。 A. 正确 B. 错误 正确答案: B 双绞线既可以传输…

【前端知识】React基础巩固(四)

React基础巩固(四) 组件化 数据依赖 数据在哪里定义? 参与数据流(参与界面更新的数据:当数据变更时,需要更新组件渲染内容)定义在当前对象的state中。通过在构造函数中this.state {定义数据}。当数据发生变化时&a…

怎样取消苹果手机x的静音设置_iPhoneX拍照总有声音怎么办?拨动静音键即可关闭拍照声!...

2018-4-8 15:07 我们知道,国行iPhoneX拍照默认是有声音的,完成拍照一瞬间会发出发发出咔的拍照音。不过,我们有时候在夜间或者安静环境下,想要静音拍照,那么该怎么做呢。下面小编详细介绍下iPhoneX相机声音关闭方法&am…

苹果怎么延迟三秒拍照 iphone手机如何开启拍照计时器

当我们外出游玩看到好看的景色时,都喜欢拿出自己的苹果手机进行拍照,但有时我们想延迟拍照该怎么设置呢?下面小编带来苹果手机延迟拍照设置方法 当我们外出游玩看到好看的景色时,都喜欢拿出自己的苹果手机进行拍照,但有…