matlab更改abaqus的inp文件

参考了大佬的abaqus-python-matlab交互调用的案例
https://blog.csdn.net/Galaxy_Robot/article/details/109252936
matlab实际上只是用命令行来运行python程序
过程大概是
1 matlab写入需要更改的数据
2 python调取需要更改的数据,并且插入在需要修改的inp文件中
3 matlab中利用system()运行
(修改inp文件后,abaqus运行出错,看了dat文件后才知道原来修改荷载的数据有格式要求,一行写8个数据(4对)或者2个数据(1对),所以在写入需要更改数据时要注意格式要求)
我这个例子需要输入三组信号,按照 (时间 力)*4写入
matlab写入数据部分

for i=2:4
    signal=zeros(2,1000);
    signal(1,:)=dout(:,1);
    signal(2,:)=dout(:,i);
    tname=num2str(i-1);
    Nn=strcat('F:\inp\','NewData',tname,'.txt'); %文件保存路径和inp文件放在一起
    fid=fopen(Nn,'w');
    fprintf(fid,...
    '%6.4f,              %6.4f,              %6.4f,              %6.4f,              %6.4f,              %6.4f,              %6.4f,              %6.4f\r\n',signal);
    fclose(fid);
end

主要修改调用的matlab函数

function modify(Path,InpFile,NewData)
%modify.m
cd(Path)
if (NewData=='NewData1.txt')
    ReqFile=[Path,'\modify1.txt'];
    fid=fopen(ReqFile,'wt');
    %把需要修改的inp文件和新数据文件的文件名、路径写入modify.txt
    fprintf(fid,'%s,%s.inp,%s',Path,InpFile,NewData);
    fclose(fid);
    system('abaqus cae noGUI=inpmodify1.py');%调用python脚本修改inp数据
elseif (NewData=='NewData2.txt')
    ReqFile=[Path,'\modify2.txt'];
    fid=fopen(ReqFile,'wt');
    %把需要修改的inp文件和新数据文件的文件名、路径写入modify.txt
    fprintf(fid,'%s,%s.inp,%s',Path,InpFile,NewData);
    fclose(fid);
    system('abaqus cae noGUI=inpmodify2.py'); %每个py程序识别行不同,替换行数不同
else
    ReqFile=[Path,'\modify3.txt'];
    fid=fopen(ReqFile,'wt');
    %把需要修改的inp文件和新数据文件的文件名、路径写入modify.txt
    fprintf(fid,'%s,%s.inp,%s',Path,InpFile,NewData);
    fclose(fid);
    system('abaqus cae noGUI=inpmodify3.py');
end

end

python读取更改数据并且插入部分,因为数据总共有250行,先在newdata需要插入的地方空出250行

#给txt插入空格
fid=open('F:/inp/Job-3.inp',"r")
lines=fid.readlines()
fid.close()
startstr="*Amplitude, name=Amp-3\n"
index=lines.index(startstr)+1
lines1 = lines.insert(index, '\n'*249)#空249行因为本来有一行空余
fid=open('F:/inp/Job-3.inp',"w")
fid.writelines(lines)
fid.close()在这里插入代码片

下面是主要的更改数据部分的python代码,主要参考前面大佬,删除了一些我用不到的地方

#coding=utf-8
#inpmodify.py
# 本脚本的功能是修改ABAQUS inp文件
import time
#读取inp文件的路径及文件名
f=open('modify1.txt','r')
req=f.readline()
f.close()
req=req.split(',')
InpFile=req[0]+'/'+req[1]
NewData=req[0]+'/'+req[2]
#读取inp文件内容
fid=open(InpFile,"r")
lines=fid.readlines()
fid.close()
#找出原来的数据行
startstr="*Amplitude, name=Amp-1\n"
startIndex=lines.index(startstr)+1
#数据替换
endIndex=startIndex+250
fid=open(NewData,"r")
newInp=fid.readlines()
fid.close()
print("%s"%newInp)
#替换原来的数据行
i=0
for Index in range(startIndex,endIndex):
    lines[Index]=newInp[i]
    i=i+1
#写入新数据
fid=open(InpFile,"w")
fid.writelines(lines)
fid.close()

最后matlab运行部分就很简单了,调用之前的函数就可以了

modify('input文件路径','Job-3','NewData1.txt');
  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值