参考了大佬的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');