Как решить OdbError в скрипте Abaqus Python?

Я запускаю трехмерную твердотельную модель в скрипте Abaqus Python, который должен быть проанализирован 200 раз, поскольку модель была организована в цикле for (для i в диапазоне (0,199):). Иногда я получаю следующую ошибку, после чего анализ прекращается. Я не могу понять причину.

Odb_0=session.openOdb(name='Job-1'+'.odb')

odberrror: файл .lck для выходной базы данных D:/abaqus/Model/Job-1.odb указывает, что обработчик входных файлов анализа в настоящее время модифицирует базу данных. В настоящее время база данных не может быть открыта.

Отмечено, что все переменные, включая Odb_0 и ...., удаляются в конце каждого шага цикла перед запуском следующего.


person Mohsen Abyani    schedule 11.12.2020    source источник
comment
вы продолжаете открывать сеанс, можете ли вы опубликовать больше кода?   -  person Anna Semjén    schedule 11.12.2020
comment
Большое спасибо за ваше уведомление. После множества проб и ошибок я обнаружил, что в некоторых итерациях со случайно сгенерированными входными значениями некоторые элементы сетки (Hex) выходят из строя без видимой причины. Итак, в таких условиях я решил использовать элементы сетки Tet, несмотря на то, что это может внести некоторые приближения в наши анализы. Этот подход решил предыдущую проблему, хотя следующая ошибка возникает только в нескольких последующих итерациях: VisError: с помощью предоставленных параметров не были извлечены данные xy.   -  person Mohsen Abyani    schedule 12.12.2020
comment
@Mohsen Abyani Возможно, у вас не загружены данные ODB или вы не определили / не настроили вывод при построении своей модели. например, я обычно получаю VisError, когда пытаюсь извлечь какие-то данные о соединителях, но вывод соединителя не был определен на этапе предварительной обработки.   -  person Mike    schedule 10.03.2021


Ответы (2)


Из документации Abaqus

Файл блокировки (имя_задания.lck) записывается всякий раз, когда выходной файл базы данных открывается с доступом для записи, в том числе при выполнении анализа и записи выходных данных в выходной файл базы данных. Файл блокировки предотвращает одновременную запись в выходную базу данных из нескольких источников. Он удаляется автоматически, когда выходной файл базы данных закрывается или когда завершается анализ, создавший его.

Когда вы удаляете свой предыдущий анализ, вы должны быть уверены, что все процессы, связанные с этим моделированием, были завершены. Есть несколько возможностей сделать это:

  • Запуск моделирования через subprocess.popen может дать вам гораздо больший контроль над процесс (например, ожидание его завершения, запись определенного журнала и т. д.);
  • Именование ваших симуляций по-разному (например, «Задание-1», «Задание-2» и т. д.) и удаление старых с задержкой (например, удаление «Задания-1» во время запуска «Задания-3»);
  • Менее предпочтительно: с использованием модуля time
person Roman Zhuravlev    schedule 14.12.2020
comment
Спасибо за ваши уведомления. Я думаю, что задание задания каждой симуляции по-разному (например, «Задание-1», «Задание-2» и т. д.) и удаление каждого в конце каждого шага помогло мне решить проблему. - person Mohsen Abyani; 15.12.2020
comment
Не могли бы вы принять ответ в этом случае? - person Roman Zhuravlev; 16.12.2020

Я не верю, что вашей проблеме поможет изменение типа элемента.

В сообщении и в файле .lck говорится, что в базе данных возникла тупиковая ситуация с доступом. Выходной файл потерян и не может обновить базу данных .odb.

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

person duffymo    schedule 13.12.2020