Отредактируйте входной файл Abaqus и запустите его из Matlab

Мне нужно выполнить 50 симуляций Abaqus, каждая симуляция анализирует определенное свойство материала, и каждая отличается изменением одного параметра. Итак, идея состоит в том, чтобы написать скрипт Matlab, который:

  1. открывает файл .inp
  2. редактирует интересующий параметр материала
  3. печатает его в новый файл, который будет новым файлом .inp
  4. запускает его для выполнения имитации

Это то, что я сделал до сих пор в очень упрощенной версии:

f= fopen('PRD8_30s.inp'); 

c = textscan(f,'%s %s %s %s %s ','delimiter',','); 

fclose(f) ; 
S = [c{1}]; 
A = {'5e-08'} ;

S(12496) = A ; 

fid = fopen('file.inp','w') ;
fprintf(fid,'%s \n',S{:} );

fclose(fid) ; 

PRD_8_30s.inp

Я вручную выяснил положение интересующего параметра (A на 12 496, следовательно, под линией *Viscoelastic). Код на самом деле изменяет нужный мне параметр, но есть серьезные проблемы: он печатает новый файл с дополнительными строками по отношению к исходному .inp (12552 против 8737) и печатает не весь .inp, а только первый столбец.

Как я могу отредактировать .inp, изменив параметр и получив новый .inp с отредактированным параметром, который можно использовать для запуска новой симуляции?

Заранее спасибо за вашу помощь!


person Dipok    schedule 09.09.2019    source источник


Ответы (1)


Если размер вашего входного файла не превышает нескольких Гб, может помочь следующее.

  1. создайте шаблон ввода и отметьте параметр, который вы хотите изменить, например, para_xxxx

  2. Используйте следующий скрипт:

    text=fileread('template.inp');
    newtext=replace(text,'para_xxxx',newParameter);
    fid=fopen('newcase.inp','w');
    fprintf(fid,newtext);
    fclose(fid);

Имя файла «newcase.inp» должно обновляться каждый раз в цикле.

person Kai03    schedule 26.09.2019