Компилировать пользовательскую подпрограмму только один раз при выполнении последовательных заданий в Abaqus

У меня есть сценарий, написанный на Python, который калибрует параметры материала на основе результатов последнего задания, то есть последовательно запускает множество заданий в Abaqus до тех пор, пока ошибка не станет достаточно малой.

Я использую подпрограмму Fortran, которая компилируется перед каждым заданием.

Проблема в том, что для каждого задания, которое я отправляю, компилируется пользовательская подпрограмма. Несмотря на то, что входные параметры отличаются от параметров последнего задания, пользовательскую подпрограмму не нужно компилировать заново. Компиляция подпрограммы занимает около 80% времени выполнения задания.

Как я могу указать, чтобы пользовательская подпрограмма компилировалась только ОДИН РАЗ и использовалась для всех последовательных запусков?

Ниже приведены фрагменты соответствующего кода, написанного на Python. Я выполняю свой скрипт, набрав

abaqus cae nogui=script.py

в терминале. В коде используется скриптовый интерфейс Abaqus.

Создание задания:

mdb.Job(name=self.jobName, model='Model-1', description='', type=ANALYSIS, 
        atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=90, 
        memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 
        explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, 
        modelPrint=OFF, contactPrint=OFF, historyPrint=OFF,
        userSubroutine=self.userSubroutinePath, 
        scratch='', resultsFormat=ODB, multiprocessingMode=DEFAULT, numCpus=1, 
        numGPUs=0)

Отправьте и дождитесь завершения работы:

mdb.jobs[self.jobName].submit(consistencyChecking=OFF)
mdb.jobs[self.jobName].waitForCompletion()

Этот код запускается каждый раз, когда я запускаю последовательное задание с данными из предыдущего запуска.

Компилятор Intel 64 Fortran Compiler XE, версия 15.0.0.090, сборка 20140723.


person DjungelJarl    schedule 28.06.2016    source источник
comment
Посмотрите в руководстве для abaqus make   -  person agentp    schedule 28.06.2016
comment
@agentp Да, я использую команду «abaqus make library=umat.f», но получаю сообщение «Отсутствует обязательный аргумент: job=‹name›», что, возможно, не имеет смысла, поскольку согласно руководству я могу использовать «abaqus make {job=‹name› ИЛИ библиотека=‹name.f›}'. Спасибо   -  person DjungelJarl    schedule 27.07.2016
comment
я предполагаю, что ваша команда abaqus на самом деле является скриптом, который пытается выполнить некоторую предварительную обработку перед передачей ваших аргументов настоящей команде abaqus. Попробуйте определить фактический полный путь к исполняемому файлу abaqus и запустите его.   -  person agentp    schedule 27.07.2016
comment
@agentp Спасибо за предложение. Я запустил команду сейчас следующим образом '/path/abaqus make library=umat.f', и она попыталась начать компиляцию, а не раньше, так что это шаг в правильном направлении. Однако я получаю сообщение об ошибке командной строки: «sh: ifort: команда не найдена». Я предполагаю, что проблема в моем файле .env. Я указал переменную compile_fortran с параметрами, и при компиляции во время выполнения задания я могу компилировать подпрограммы на лету. Спасибо   -  person DjungelJarl    schedule 28.07.2016
comment
ну, если я был прав насчет скрипта, этот скрипт может поставить ifort на ваш путь. Нетрудно определить путь для ifort и добавить его в вашу среду.   -  person agentp    schedule 28.07.2016


Ответы (2)


Введя

module add abaqus
module add intel
module add gcc

Мне тогда разрешили войти

abaqus make library=usub.f

который скомпилирует подпрограмму.

person DjungelJarl    schedule 29.07.2016
comment
для других, у кого может быть эта проблема, этот ответ очень специфичен для системы. - person agentp; 29.07.2016
comment
@agentp Да, я мог бы добавить, что я запускаю все это в кластере Gridcore Gompute под управлением CentOS 6.7. - person DjungelJarl; 01.08.2016

Для платформ Windows:

Сначала создайте файл «.dll» с помощью команды «abaqus make library». Вы можете найти его в своем каталоге ABAQUS.

Во-вторых, отредактируйте файл среды (например, «abaqus_v6»), добавив следующую строку

usub_dir_lib="xxx"

где xxx — путь к файлу «.dll» (здесь — каталог ABAQUS).

Теперь вы готовы выполнить свой код Python.

person user7682939    schedule 09.03.2017