PFC6.0 实用技巧——abaqus网格转换为PFC流体网格
没人点赞这个博客就关啦!T_T
博客介绍
- PFC高版本自带cfd模块,可以通过对应命令实现流固耦合计算。
- 在进行计算之前,需要提前设置CFD网络,根据帮助手册,可通过fish语言逐个定义或预先生成网格文件再导入模型,分别有两个文件,一个用来定义节点,一个用来定义单元,网格文件的格式如下图。
单元文件格式
12 12
1 0.00000E+00 1.00000E+00 0.00000E+00
2 1.00000E+00 1.00000E+00 0.00000E+00
3 0.00000E+00 1.00000E+00 1.00000E+00
4 0.00000E+00 0.00000E+00 0.00000E+00
5 0.00000E+00 0.00000E+00 1.00000E+00
6 1.00000E+00 0.00000E+00 0.00000E+00
7 1.00000E+00 1.00000E+00 1.00000E+00
8 1.00000E+00 0.00000E+00 1.00000E+00
9 0.00000E+00 1.00000E+00 2.00000E+00
10 1.00000E+00 1.00000E+00 2.00000E+00
11 0.00000E+00 0.00000E+00 2.00000E+00
12 1.00000E+00 0.00000E+00 2.00000E+00
节点文件格式
2 2
8
1 8 7 2 6 5 3 1 4 1.004E-3 1.428E-4 9.98230E+02 1.18E-4
0
8
2 12 10 7 8 11 9 3 5 1.004E-3 1.428E-4 9.98230E+02 1.18E-4
0
- 虽然现有些提供的快速划分流体网格的小程序,但只能划分四四方方的立方体网格,对于一些稍微复杂的网格处理起来不太实用,abaqus具备强大的建模能力,本程序是在abaqus中建立模型,导出inp文件,然后利用matlab对其格式进行调整,导出为PFC可用的流体文件。
- 先看看效果啦
代码
[count=1]
[time_record=mech.time.total]
[time_next=time_record]
[baocunpinlv=0.00004]
将数据导入matlab中,去除nan字符
filename = ('Job-1.txt');
datatable = readmatrix (filename);
%datatable=datatable(all(~isnan(datatable),2),:);%去除所有的含NAN行
datatable=datatable(any(~isnan(datatable),2),:);%去除所有的全为NAN行
将找到节点和单元数据的分割点,并补齐数据
start_point=find(datatable(:,1)==1);
out_point=nan(1,9);
out_point(1,1:2)=[start_point(2)-1,start_point(2)-1];
out_point=[out_point;datatable(1:start_point(2)-1,:)];
out_elment1=(datatable(start_point(2):end,:));
n_n_n=size(out_point(2,~isnan(out_point(2,:))),2);
out_point=out_point(:,1:n_n_n);
按PFC数据结构要求调整数据结构
wuyong=[1.004E-3 1.428E-4 9.98230E+02 1.18E-4];
out_elment=nan(1,13);
nan0=nan(1,13);
nan8=nan(1,13);
nan0(1,1)=0;
nan8(1,1)=8;
out_elment(1,1:2)=[size(out_elment1,1),size(out_elment1,1)];
jj=1;
for jj=1:size(out_elment1,1)
out_elment=[out_elment;nan8];
aaa=[out_elment1(jj,1:9),1.004E-3,1.428E-4,9.98230E+02,1.18E-4];
out_elment=[out_elment;aaa];
out_elment=[out_elment;nan0];
jj=jj+1;
end
写入节点文件
mid_1=out_point(1,:);
mid_1=mid_1(~isnan(mid_1));
writematrix(mid_1,'Node.dat','delimiter',' ')
for i=2:size(out_point,1)
a=out_point(i,:);
a=a(~isnan(a));
writematrix(a,'Node.dat','delimiter',' ','WriteMode','append')
end
写入单元文件
mid_1=out_elment(1,:);
mid_2=mid_1(~isnan(mid_1));
writematrix(mid_2,'Elem.dat','delimiter',' ')
for i=2:size(out_elment,1)
b=out_elment(i,:);
b=b(~isnan(b));
writematrix(b,'Elem.dat','delimiter',' ','WriteMode','append')
end
结果
运行代码后得到上述两个文件,放到PFC文件中即可使用了。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
最后贴上所有代码
clc
clear all
filename = ('Job-1.txt');
datatable = readmatrix (filename);
%datatable=datatable(all(~isnan(datatable),2),:);%去除所有的含NAN行
datatable=datatable(any(~isnan(datatable),2),:);%去除所有的全为NAN行
start_point=find(datatable(:,1)==1);
out_point=nan(1,9);
out_point(1,1:2)=[start_point(2)-1,start_point(2)-1];
out_point=[out_point;datatable(1:start_point(2)-1,:)];
out_elment1=(datatable(start_point(2):end,:));
n_n_n=size(out_point(2,~isnan(out_point(2,:))),2);
out_point=out_point(:,1:n_n_n);
%element out
wuyong=[1.004E-3 1.428E-4 9.98230E+02 1.18E-4];
out_elment=nan(1,13);
nan0=nan(1,13);
nan8=nan(1,13);
nan0(1,1)=0;
nan8(1,1)=8;
out_elment(1,1:2)=[size(out_elment1,1),size(out_elment1,1)];
jj=1;
for jj=1:size(out_elment1,1)
out_elment=[out_elment;nan8];
aaa=[out_elment1(jj,1:9),1.004E-3,1.428E-4,9.98230E+02,1.18E-4];
out_elment=[out_elment;aaa];
out_elment=[out_elment;nan0];
jj=jj+1;
end
%写入node
mid_1=out_point(1,:);
mid_1=mid_1(~isnan(mid_1));
writematrix(mid_1,'Node.dat','delimiter',' ')
for i=2:size(out_point,1)
a=out_point(i,:);
a=a(~isnan(a));
writematrix(a,'Node.dat','delimiter',' ','WriteMode','append')
end
mid_1=out_elment(1,:);
mid_2=mid_1(~isnan(mid_1));
writematrix(mid_2,'Elem.dat','delimiter',' ')
for i=2:size(out_elment,1)
b=out_elment(i,:);
b=b(~isnan(b));
writematrix(b,'Elem.dat','delimiter',' ','WriteMode','append')
end
向各位大神、致敬!!!
整理不易,如果您觉得文章有用的话,别忘了动动小手点个赞哦!!!