Файл Abaqus *.inp, созданный с помощью Matlab

Я пытался провести параметрические исследования в ABAQUS. Я создал файл *.inp (мастер) с помощью графического интерфейса в abaqus, затем написал код Matlab для создания нового файла *.inp с использованием мастера. Мастер-файл *.inp можно найти здесь. Он потребуется для запуска кода. . В новом файле *.inp все было так же, как и в мастере, за исключением нескольких конкретных строк, которые я изменяю для параметрических исследований, код приведен ниже. Я получаю файлы хорошо, но проблема в том, что ABAQUS не может прочитать файл и выдает сообщения об ошибках. При визуальном осмотре недостатков не нашел. Я предполагаю, что Matlab записывает файл *.inp в каком-то другом формате, который ABAQUS не может интерпретировать.

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 с сообщением об ошибке приведен здесь.


person Anwar Saadat    schedule 17.05.2015    source источник
comment
Пожалуйста, поместите сообщение об ошибке от Abaqus на свой вопрос.   -  person hgazibara    schedule 17.05.2015
comment
Образец файла сообщения (*.dat) добавлен в вопрос.   -  person Anwar Saadat    schedule 17.05.2015


Ответы (1)


Вы используете fgets для получения каждой строки входного файла. Из справки по матлабу:

fgets: читать строку из файла, сохраняя символы новой строки

Затем вы печатаете каждую строку, используя

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

Это создает две новые строки в конце каждой строки данных в файле. Вторая проблема в вашем файле заключается в том, что вы используете \r\n в спецификаторе формата. В Matlab (в отличие от C) это даст вам две новые строки. например

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

Bar
>> 

Я бы предложил в будущем протестировать этот подход с гораздо более простым форматом, который вы можете использовать. Также есть

*preprint

опция, которая позволяет вам отображать содержимое входного файла обратно в файл dat. Это создает большие файлы данных, но это полезно для отладки.

person will    schedule 18.05.2015
comment
Дорогой Уилл, Спасибо за все ваши предложения. У меня есть еще одно представление об ошибке, что я читаю и печатаю все строки, используя «% s», но сам файл представляет собой комбинацию строки, десятичного числа и числа с плавающей запятой. - person Anwar Saadat; 19.05.2015
comment
fgets считывает каждую строку как строку, поэтому я не вижу проблемы в %s? Также, если это ответило на ваш вопрос, пожалуйста, проголосуйте за него. Я думаю, вам следует протестировать свой код Matlab с более простым входным файлом abaqus. - person will; 19.05.2015