Во 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
- Необходимо поместить скрипт ABQ.bat в директорию с командами, запускающими Abaqus. Например, C:\SIMULIA\Commands;
- Открыть скрипт ABQ.bat любым текстовым редактором и настроить переменную ABQ – абсолютный путь к команде, запускающей Abaqus;
- Настроить MPM-Агент, выбрав скрипт в окне;
- Запустить MPM-Агент и пользоваться.
Важное замечание при работе со скриптом на Windows:
Все параметры, указываемые в графе Внешние связи -> Abaqus CSE/ Abaqus Direct Coupling -> Управление расчетом, должны быть взяты в кавычки, как показано на примере ниже.
Инструкция по установке на Linux OS
- Необходимо поместить скрипт ABQ.sh в директорию с командами, запускающими Abaqus. Например, /var/DassaultSystemes/SIMULIA/Commands;
- Открыть скрипт ABQ.sh любым текстовым редактором и настроить переменную ABQ – абсолютный путь к команде, запускающей Abaqus;
- Для скрипта выполнить команду chmod +x
- Настроить MPM-Агент, указав абсолютный путь до скрипта ABQ.sh в файле MpmAgent.cfg;
- Запустить 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