一、思路简单,实施复杂的处理步骤
算完算例后,用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');
简单的读取温度并求平均,作图表示
然后重复读取其他数据并作图,完成数据处理