openfoam数据文件处理

一、思路简单,实施复杂的处理步骤

算完算例后,用paraview后处理软件打开,在其中选择要获得的数据所在的计算域显示,然后选取想要的数据,依次选择各时间步,按File-Save Data导出csv表格形式的数据,Field Association选Cells能少一点用不到的信息。这样每个时间步每个计算域要导出的数据都有一个对应的文件,时间步和要导出数据的计算域多了,就会产生很多csv文件,然后打开csv文件,在每个csv文件中求平均,把数据复制到Origin表格制表。有大量重复操作,很容易出错,不推荐这样做。

二、使用matlab读取数据

openfoam数据文件以变量名命名,且没有后缀,但是可以按txt文件处理。文件特征是有表头和表尾,只有中间的数据需要读取。

以下是示例数据文件:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.1                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       volScalarField;
    location    "500";
    object      T;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 0 0 1 0 0 0];

internalField   nonuniform List<scalar> 
6
(
360.0002
360.3627
360.3629
360.363
360.3631
360.3631
)
;

boundaryField
{
    cbpRight
    {
        type            fixedValue;
        value           uniform 360;
    }
}


// ************************************************************************* //

中间的数据经过处理,数量被极大的缩减,是需要被读取的数据,边界条件也被简化。

这是数字字母交叉的文件,纯数字文件读取使用的load()不适用。根据网上资料,使用textread()处理:

fid = fopen('E:\转移\Text', 'r');
TData = textscan(fid, '%f', 'HeaderLines', 22, 'CollectOutput', 1);  
T = TData{1};
fclose(fid);
Tmean = mean(T);

textscan可以加的参数:

delimiter是指出分隔符,读数据的时候会自动跳过分隔符。

headerlines指明了跳过几行,这里headerlines告诉textscan跳过一开始的22行,22可以替换为任意要跳过的行数。

format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等。

collectoutput告诉textscan输出元胞数组类型的数据。

读取出需要的数据,并对其求平均。

三、使用matlab批量处理数据

读取数据可行,接下来需要设计一个循环,让matlab自动读取并处理openfoam数据。

Time = [1 5 10 15 20];
Tmean = zeros(length(Time),1);
for i = 1:length(Time)
    eval(['T = fopen(''E:\B\',num2str(Time(i)),'\T'', ''r'');'])
    T1 = textscan(T, '%f', 'HeaderLines', 22, 'CollectOutput', 1); 
    T2 = T1{1};
    fclose(T);
    Tmean(i) = mean(T2);
end
plot(Time,Tmean,'blueo');

简单的读取温度并求平均,作图表示

然后重复读取其他数据并作图,完成数据处理

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值