在使用动态模态分解DMD,本征正交分解POD分析流体机械三维流场的时候,将120个CFX的非定常模拟结果.trn文件在CFDPOST里转换为.cgns文件,再放入TECPLOT里导出带有X,Y,Z坐标及其上速度共六个变量的.dat文件作为快照,再放入MATLAB中运行DMD/POD代码。得到其模态能量分布及速度模态云图(.dat)
但模态云图出现错误,其中一块地方与其他地方速度有明显错误,查找后发现所有模态云图里的Z方向上的速度并未被处理,直接是最后一个流场快照上的Z方向速度,DMD/POD原理是将X,Y,Z方向上的速度整合成一个矩阵后进行奇异值分解(SVD),但我这个模态云图上的X,Y方向上的速度都已分解,唯独Z方向上速度没有
附其中一个快照数据截图(左)以及错误模态数据截图(右)和DMD代码
filename='.\';
n_snapshots =120;
n0=2262;
nodenum=2461200;
elementnum=2332734;
for j=1:n_snapshots
j
fid = fopen([num2str(n0+1*(j-1)),'.dat'],'r');
for l=1:24
thead{l} = fgetl(fid);
end
% data = fscanf(fid,'%lf %lf %lf %lf',[4,inf]);
x = fscanf(fid,'%lf',[1,nodenum]); % x coordinate
y = fscanf(fid,'%lf',[1,nodenum]); % y coordinate
z = fscanf(fid,'%lf',[1,nodenum]); % z coordinate
U(j,:) = fscanf(fid,'%lf',[1,elementnum]); % u velocity
V(j,:) = fscanf(fid,'%lf',[1,elementnum]); % v velocity
W(j,:) = fscanf(fid,'%lf',[1,elementnum]); % w velocity
ic=0;
while ~feof(fid)
ic=ic+1;
dataconectivity{ic}= fgetl(fid);
end
fclose(fid);
end
UV=[U,V,W];
GridNum = size(U,2);
% UV=UV-mean(UV,1);
[phi,mu,lamda,diags,x0]=DMD(UV','dt',0.00000909091*1);
[f,P]=DMD_spectrum(phi,mu,'plotit',1);
[Pm,ind]=sort(P,'descend');
fm=f(ind);
figure;plot(lamda,'o');hold on;plot(cos(0:2*pi/1000:2*pi),sin(0:2*pi/1000:2*pi),'r')
phisort=phi(:,ind);
mkdir('dmdmode');
for im=1:5
fid2=fopen(['dmdmode\',num2str(im),'thmode.dat'],'w');
for j=1:length(thead)
fprintf(fid2,'%s\n',thead{j});
end
fprintf(fid2,'%f %f %f %f %f\n',x);
fprintf(fid2,'%f %f %f %f %f\n',y);
fprintf(fid2,'%f %f %f %f %f\n',z);
fprintf(fid2,'%f %f %f %f %f\n ',phisort(1:GridNum,im));
fprintf(fid2,'%f %f %f %f %f\n',phisort((GridNum+1):2*GridNum,im));
fprintf(fid2,'%f %f %f %f %f\n',phisort((2*GridNum+1):3*GridNum,im));
for j=1:length(dataconectivity)
fprintf(fid2,'%s\n',dataconectivity{j});
end
fclose(fid2);
end