0

我试图在 ABAQUS 中进行参数研究。我在 abaqus 中使用 GUI 创建了一个 *.inp 文件(主文件),然后编写了一个 matlab 代码来使用主文件创建一个新的 *.inp 文件。可以在此处找到主 *.inp 文件,并且需要运行代码。在新的 *.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

提前致谢。

注意这里给出了一个包含错误信息的示例 *.dat 文件。

4

1 回答 1

0

您正在使用 fgets 来获取输入文件的每一行。来自 matlab 帮助:

fgets:从文件中读取行,保留换行符

然后,您使用打印每一行

fprintf(wfile,'%s\n', data);

这会在文件中每个数据行的末尾创建两个换行符。文件中的第二个问题是您在格式说明符中使用了 \r\n。在 matlab(与 C 不同)中,这将为您提供两个换行符。例如

>> fprintf('Hello\rWorld\nFoo\r\nBar\n')
Hello
World
Foo

Bar
>> 

我建议将来使用您可以使用的更简单的格式来测试这种方法。还有一个

*preprint

该选项允许您将输入文件的内容回显到 dat 文件中。这会创建大 dat 文件,但对调试很有用。

于 2015-05-18T20:16:55.987 回答