岩土工程颗粒流软件PFC6.0实用技巧——将abaqus网格转换成PFC流体网格

本文介绍了如何使用abaqus创建模型并导出网格,然后通过matlab处理网格文件,将其转换为PFC6.0可用的流体网格格式。该方法适用于处理复杂形状的网格,提供了一种从abaqus到PFC的实用转换技巧。
摘要由CSDN通过智能技术生成

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

向各位大神、致敬!!!

整理不易,如果您觉得文章有用的话,别忘了动动小手点个赞哦!!!

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是要早起的钻钻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值