logo desc

Во FlowVision 3.11.01 появился новый коннектор для связи с Abaqus: CSE коннектор. Данный коннектор значительно расширяет круг решаемых задач и дает ряд преимуществ, таких как:

  • Более гибкая настройка совместного расчета;
  • Упрощенный запуск на кластере;
  • Включение дополнительных программ в совместный расчет;
  • Взаимодействие с новыми версиями SIMULIA Abaqus.

Реализуются данные преимущества за счет модуля Abaqus, осуществляющего все взаимосвязи между программами: Abaqus CSE Director. Но данный коннектор обладает и своими недостатками:

  • Требуется генерация конфигурационного файла;
  • Сложный запуск, с которым не работает MPM-Агент в текущей версии FV.

Проблема с генерацией конфигурационного файла была решена. FlowVision генерирует файл по запросу пользователя, опираясь на данные, полученые в проекте.

Запуск с использованием MPM-Агента имеет свои проблемы:

  • Необходимость запускать дополнительную программу;
  • Команды, передаваемые Abaqus: отдельный запуск Abaqus CSE Director и отдельный запуск проекта на расчет.

Для решения данных проблем и осуществления запуска с помощью MPM-Агента можно воспользоваться скриптом, принимающим данные команды от MPM-Агента, обрабатывающим их и передающим их дальше для запуска Abaqus.

Скрипт запускает расчеты как для коннектора Direct Coupling, так и для коннектора Co-simulation Engine за счет парсинга inp-файла.

Скрипт для Windows OS и Linux OS приложены к данной статье.

Инструкция по установке на Windows OS

  1. Необходимо поместить скрипт ABQ.bat в директорию с командами, запускающими Abaqus. Например, C:\SIMULIA\Commands;
  2. Открыть скрипт ABQ.bat любым текстовым редактором и настроить переменную ABQ – абсолютный путь к команде, запускающей Abaqus;
            ABQ.bat
  3. Настроить MPM-Агент, выбрав скрипт в окне;
           Configurator settings
  4. Запустить MPM-Агент и пользоваться.

Важное замечание при работе со скриптом на Windows:

Все параметры, указываемые в графе Внешние связи -> Abaqus CSE/ Abaqus Direct Coupling -> Управление расчетом, должны быть взяты в кавычки, как показано на примере ниже.

Инструкция по установке на Linux OS

  1. Необходимо поместить скрипт ABQ.sh в директорию с командами, запускающими Abaqus. Например, /var/DassaultSystemes/SIMULIA/Commands;
  2. Открыть скрипт ABQ.sh любым текстовым редактором и настроить переменную ABQ – абсолютный путь к команде, запускающей Abaqus;
           ABQ.sh
  3. Для скрипта выполнить команду chmod +x
           chmod +x
  4. Настроить MPM-Агент, указав абсолютный путь до скрипта ABQ.sh в файле MpmAgent.cfg;
           MpmAgent.cfg settings
  5. Запустить MPM-Агент и пользоваться.

 

Скрипты:

ABQ.bat


@echo off

set ABQ="C:\SIMULIA\Commands\abq2019.bat"
setlocal EnableDelayedExpansion
set JOB=0
set ASK_DELETE=0
set PORT=0
set OTHER=0
set n=0
set i=0

 

rem Array with variables creating
for %%a in (%*) do (
set ARR[!n!]=%%a
set /A n+=1
)

rem JOB, OLDJOB, PORT filling
:LOOP
if %i% lss %n% (
if "!ARR[%i%]!" equ "job" (
goto JOB
) else if "!ARR[%i%]!" equ "ask_delete" (
goto ASK_DELETE
) else if "!ARR[%i%]!" equ "port" (
goto PORT
) else (
goto OTHER1
)
:JOB
set /a i=%i%+1
set JOB=!ARR[%i%]!
goto LOOP
:ASK_DELETE
set /a i=%i%+1
set ASK_DELETE=!ARR[%i%]!
goto LOOP
:PORT
set /a i=%i%+1
set PORT=!ARR[%i%]!
goto LOOP
:OTHER1
set /a i=%i%+1
goto LOOP
)

set i=0
:LOOP2
if %i% lss %n% (
if "!ARR[%i%]!" equ "job" (
goto END2
) else if "!ARR[%i%]!" equ "ask_delete" (
goto END2
) else if "!ARR[%i%]!" equ "port" (
goto END2
) else if "!ARR[%i%]!" equ "%JOB%" (
goto END2
) else if "!ARR[%i%]!" equ "%ASK_DELETE%" (
goto END2
) else if "!ARR[%i%]!" equ "%PORT%" (
goto END2
) else (
goto OTHER2
)
:OTHER2
set OTHER=!ARR[%i%]!
:END2
set /a i=%i%+1
goto LOOP2
)

findstr "MULTIPHYSICS" %JOB%.inp >nul
if errorlevel 1 (goto DC) else (goto CSE)

if "%OTHER%" equ "" (
set OTHER=""
)

:CSE
echo call %ABQ% cse config=%JOB% listenerport=%PORT%
echo %ABQ% job=%JOB% %OTHER:~1,-1% ask_delete=%ASK_DELETE% csedirector=localhost:%PORT%
call %ABQ% cse config=%JOB% listenerport=%PORT%
%ABQ% job=%JOB% %OTHER:~1,-1% ask_delete=%ASK_DELETE% csedirector=localhost:%PORT%
goto exit

 

:DC
echo %ABQ% job=%JOB% %OTHER:~1,-1% ask_delete=%ASK_DELETE% port=%PORT%
%ABQ% job=%JOB% %OTHER:~1,-1% ask_delete=%ASK_DELETE% port=%PORT%
goto exit

:exit


 

 ABQ.sh


 #!/bin/sh

## set me up!!!
ABQ=/var/DassaultSystemes/SIMULIA/Commands/abq2019

 

line=$*
var=($line)
echo $line
IFS=' ' read -a myarray <<< "$line"

 

i="0"
while [ $i -lt ${#var[@]} ]; do
if echo ${myarray[$i]} | grep -q ^"job=";then
JOB=${myarray[$i]:4}
elif echo ${myarray[$i]} | grep -q ^"oldjob=";then
OLDJOB=${myarray[$i]:7}
elif echo ${myarray[$i]} | grep -q "port=";then
PORT=${myarray[$i]:5}
else
OTHER=$OTHER" "${myarray[$i]}
fi
i=$[$i+1]
done

if grep ^"*CO-SIMULATION, PROGRAM=MULTIPHYSICS" $JOB.inp || grep ^"*CO-SIMULATION, PROGRAM=multiphysics" $JOB.inp || grep ^"*CO-SIMULATION, PROGRAM=Multiphysics" $JOB.inp; then
$ABQ cse -config $JOB -listenerport $PORT
$ABQ -job $JOB -oldjob $OLDJOB -csedirector localhost:$PORT $OTHER
elif grep ^"*CO-SIMULATION, PROGRAM=DIRECT" $JOB.inp || grep ^"*CO-SIMULATION, PROGRAM=direct" $JOB.inp || grep ^"*CO-SIMULATION, PROGRAM=Direct" $JOB.inp; then
$ABQ -job $JOB -oldjob $OLDJOB -port $PORT $OTHER
fi

 

sleep 5

tail -f $JOB.log