我正在尝试在ABAQUS进行参数研究。我在abaqus中使用GUI创建了一个* .inp文件(master),然后编写了一个matlab代码,使用master创建一个新的* .inp文件。可以找到Master * .inp文件here,并且需要运行代码。 在新的* .inp文件中,除了我为参数研究更改的一些特定行外,所有内容都与主文件相同,代码如下所示。我很好地获取文件,但问题是ABAQUS无法读取文件并提供错误消息。通过目视检查,我没有发现任何故障。我猜matlab正在用ABAQUS无法解释的其他格式编写* .inp文件。
clc;
%Number of lines to be copied
total_lines=4538; %total number of lines
lines_b4_RP1=4406; % lines before reference point 1
%creating new files
for A=0
for R=[20 30 40 50 100 200 300 400 500]
fileroot = sprintf('P_SHS_120X120X1_NLA_I15_A%dR%d.inp', A,R);
main_inp=fopen('P_SHS_120X120X1_NLA_I15_A0R10.inp','r'); %inputting the main inp file to be copied
wfile=fopen(fileroot,'w+'); %wfile= writing the new file
for i=1:total_lines
data=fgets(main_inp);
if i<lines_b4_RP1
fprintf(wfile,'%s\n', data);
elseif i==lines_b4_RP1
formatline1=('%s\n');
txtline='*Node';
fprintf(wfile, formatline1 ,txtline);
elseif i==(lines_b4_RP1+1)
formatline2=('%d%s%d%s%d%s%d\r\n');
comma=',';
refpt1=1;
xcoord1=R*cosd(A);
ycoord1=R*sind(A);
zcoord1=-20;
fprintf(wfile, formatline2, refpt1,comma,xcoord1,comma,ycoord1,comma,zcoord1);
elseif i==(lines_b4_RP1+2)
fprintf(wfile, formatline1 ,txtline);
elseif i==(lines_b4_RP1+3)
refpt2=2;
xcoord2=R*cosd(A);
ycoord2=R*sind(A);
zcoord2=420;
fprintf(wfile, formatline2 ,refpt2,comma,xcoord2,comma,ycoord2,comma,zcoord2);
elseif i>(lines_b4_RP1+3)
fprintf(wfile,'%s\n', data);
else break;
end
end
fclose(main_inp);
fclose(wfile);
end
end
提前致谢。
N.B。包含错误消息的示例* .dat文件被赋予here。
答案 0 :(得分:0)
您正在使用fgets获取输入文件的每一行。来自matlab的帮助:
fgets:从文件中读取行,保留换行符
然后使用
打印每一行fprintf(wfile,'%s\n', data);
这会在文件中每个数据行的末尾创建两个换行符。您文件中的第二个问题是您在格式说明符中使用\ r \ n。在matlab中(与C不同),这将为您提供两个换行符。 e.g。
>> fprintf('Hello\rWorld\nFoo\r\nBar\n')
Hello
World
Foo
Bar
>>
我建议将来使用更简单的格式来测试这种方法。还有一个
*preprint
选项,允许您将输入文件的内容回显到dat文件中。这会创建大型dat文件,但它对调试很有用。