Выполнение скрипта Python Abaqus / CAE или даже вызов встроенного интерпретатора Python из подпрограммы Fortran, безусловно, может быть выполнено. Я нашел это очень полезным в определенных крайних случаях, с оговорками. Используйте с осторожностью .
Вы, кажется, на правильном пути, однако вы должны помнить, чтобы использовал полный путь к файлу для всех внешних файлов, указанных в подпрограмме Abaqus.
Вы найдете полезными подпрограммы Abaqus getjobname
и getoutdir
. Вот пример скелета, с несколькими определениями переменных:
use ifport, only: system, ierrno !! Note: `USE` must come before any `INLCUDE`
character(len=256) :: outdir, jobname
character(len=:), allocatable :: cwd, cmd
integer :: jobnamelen, outdirlen, rc, errnum
call getjobname(jobname, jobnamelen)
call getoutdir(outdir, outdirlen)
cwd = outdir(1:outdirlen)
cmd = 'abaqus cae nogui=' // cwd // '/my_script.py'
rc = system(cmd)
if (rc .eq. -1) then
errnum = ierrno( )
print *, 'Error: ', errnum
endif
Примечания:
1. Если полный путь не указан, Abaqus будет предполагать, что внешние файлы существуют / будут созданы в директории нуля. Обычно это не то же самое, что текущий рабочий каталог.
2. Приведенный выше фрагмент кода был успешно протестирован с использованием uexternaldb
и универсального Python-скрипта в стиле «hello world».
3. Если вы используете ifort 17 или новее (и если вам это нужно), вы также сможете заменить функции переносимости ifport
на встроенную в Fortran 2008 execute_command_line
.
4. Вы можете использовать пакетный файл, однако, пакетный файл (а также скрипт Python, упомянутый в пакетном файле) должен по-прежнему иметь полный путь к файлу.