搜索
淳化网 淳化论坛 情感文学 Matlab挪用Abaqus进行相干计较以及处置总结_原创
查看: 334|回复: 2
go

Matlab挪用Abaqus进行相干计较以及处置总结_原创

Rank: 7Rank: 7Rank: 7

贴图大师勋章 最佳原创勋章 最具人气勋章

发表于 2014-4-26 23:38 |显示全部帖子
摘要: Matlab挪用Abaqus进行仿真计较主要有两个方式:一、Matllab挪用inp文件进行计较Matlab调二、采纳Python剧本挪用下面就分别来进行总结:一、Matllab挪用inp文件进行计较主要思绪:采纳 !abaqus job =**.inp 挪用abaqus (必要设置装备摆设情况变量)采纳
正文:
Matlab调用Abaqus进行仿真计算主要有两个方法:
1、Matllab调用inp文件进行计算Matlab调
2、采用Python脚本调用
下面就分别来进行总结:
1、Matllab调用inp文件进行计算
主要思路:
采用 !abaqus job =**.inp 调用abaqus (需要配置环境变量)
采用 fopen把.dat的文件打开,在采用字符匹配的命令找到需要提前的计算结果
采用 fwrite修改inp文件,保存好,重新提交运算。
这里有一些代码:
datname = 'parmeter22.inp';
fid = fopen(datname,'w');
fprintf(fid,'*PARAMETER');
fprintf(fid,temp);
fprintf(fid,'W= 10.0');
fprintf(fid,'L= 20.0');
fprintf(fid,'B= 0.1');
fprintf(fid,'sig= 0.4E3');
fprintf(fid,'P= sig*W*B');
fprintf(fid,'aa= a-0.2');
fprintf(fid,'N1=int(a*10/2+1)');
fprintf(fid,'N2=int(10000+N1)');
fprintf(fid,'N3=int(a*10/2)');
fprintf(fid,'N4=int(10000+N3)');
fprintf(fid,'N5=int(a*10/2+2)');
fclose(fid); % 写输入文件
!abaqus job=example user=uel % 调用,如果没有子程序,user就不要了
%%%%%%%%%%%%%%%下面是提取结果时可能要用到的一些命令
inputfilename = 'example.dat';
fid = fopen(inputfilename,'r'); %打开计算结果文件
strfind()%查找结果
ABAQUS中inp文件的非编程性质,导致了变量参数值修改的费时费工,于是,采用matlab文件读与写的形式,来相关参数的修改,采用批处置提交算计。
下列是matlab完成文本读与写的代码:
%
% 读入ABAQUS的inp文件LB_Q110.inp,修正其中参数,并
% 生成修正参数后的合用于批处置所用文件
%
clear all
% 挪用尺寸参数函数parameter()
[x]=parameter();
nfile=length(x(:,1));
% 指定要生成的文件名
Sbl='LB_Q110-';
Se='.inp';
nn=1:nfile;
for i=1:nfile
%
diameter=x(:,1);
thickness=x(:,2);
fid_inl=fopen('LB_Q110.inp','r');
%
if(-1==fid_inl),error(['can''t open fileB_Q110.inp']),end
%
Sm=num2str(nn(i));
S_lb=strcat(Sbl,Sm); %生成LB_Q110-XX文件名,此中XX为数字1到nfile
Soutl=strcat(Sbl,Sm,Se); %天生LB_Q110-XX.inp文件名
%
fid_outl=fopen(Soutl,'w'); %天生输入文件LB_Q110-XX.inp
%
%读取LB_Q110.inp中的第一行,
nfile=1;
Str1=fgetl(fid_inl);
%写入到LB_Q110-XX.inp
fprintf(fid_outl,'%s\r',Strl);
%读取LB_Q110-XX.inp文件每一行,修改参数
while ~feof(fid_inl) %果断可否为文件尾
%
nline=nline+1;
Sn=fgetl(fid_inl); %读取第nline
%判断修正第2、3与第4行
if nline==2
datestr=strcat('54yiwei,',date,',CS,CN');
fprintf(fid_outl,'%s\r',datestr);
elseif nline==3
fprintf(fid_outl,'diameter=%5.2f\r',diameter);
elseif nline==4
fprintf(fid_outl,'thickness=%5.2f\r',thickness);
else
fprintf(fid_outl,'%s\r',Sn);
end
if(nline>300),break;end
end
fclose(fid_inl);
fclose(fid_outl);
end
2、采用Python脚本调用
参考链接:
http://blog.163.com/zpfzcjndx@126/blog/static/6354568120121130115815288/
MATLAB采用的命令式是system(['abaqus cae ','script','=Main.py']),其中Main.py是PYTHON脚本,包含向ABAQUS发送的命令信息,比如建立一个正方形,Main.py内容如下,运行后的效果如图所示。千万不要以为下面的PYTHON脚本很复杂,我只是简单的从.jnl文件中COPY过来,对于一些重复性特别强的工作复杂问题(比如参数优化),可以稍微修改脚本即可,这些问题在随后的博文中一定会写到的。from part import *
from material import *
from section import *
from assembly import *
from step import *
from interaction import *
from load import *
from mesh import *
from optimization import *
from job import *
from sketch import *
from visualization import *
from connectorBehavior import *
mdb.models['Model-1'].ConstrainedSketch(name='__profile__', sheetSize=200.0)
mdb.models['Model-1'].sketches['__profile__'].rectangle(point1=(0.0, 0.0),
point2=(30.0, 30.0))
mdb.models['Model-1'].Part(dimensionality=THREE_D, name='Part-1', type=
DISCRETE_RIGID_SURFACE)
mdb.models['Model-1'].parts['Part-1'].BaseSolidExtrude(depth=20.0, sketch=
mdb.models['Model-1'].sketches['__profile__'])
del mdb.models['Model-1'].sketches['__profile__']

Rank: 3

发表于 2014-4-27 00:19 |显示全部帖子
先顶,再慢慢看

Rank: 6Rank: 6

发表于 2014-4-27 00:33 |显示全部帖子

淳化网 http://www.cntdjw.com 版权所有 未经许可 不得转载或镜像 sitemap 本站联系方式email: Robinluoshuji%yahoo.com (请将邮件地址中的"%"换成"@")

业务合作、不良信息投诉和举报,以及新注册会员审核,均可通过email与我们联系。