Как решить 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» и ...., удаляются в конце каждого шага цикла перед запуском следующего.

вы продолжаете открывать сеанс, можете ли вы опубликовать больше кода?

Anna Semjén 11.12.2020 18:26

Большое спасибо за ваше уведомление. После множества проб и ошибок я обнаружил, что в некоторых итерациях со случайно сгенерированными входными значениями некоторые элементы сетки (Hex) выходят из строя без видимой причины. Итак, в таких условиях я решил использовать элементы сетки Tet, несмотря на то, что это может внести некоторые приближения в наши анализы. Этот подход решил предыдущую проблему, хотя следующая ошибка возникает только в нескольких последующих итерациях: «VisError: с использованием предоставленных параметров не были извлечены данные xy».

Mohsen Abyani 12.12.2020 19:05

@Mohsen Abyani Возможно, у вас не загружены данные ODB или вы не определили / не настроили вывод при построении своей модели. например, я обычно получаю VisError, когда пытаюсь извлечь какие-то данные о соединителях, но вывод соединителя не был определен на этапе предварительной обработки.

Mike 10.03.2021 08:28
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
977
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

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

Ответ принят как подходящий

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

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

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

  • Запуск симуляции через subprocess.popen может дать вам гораздо больший контроль над процессом (например, ожидание его окончания, запись определенного лога и т. д.);
  • Именование ваших симуляций по-разному (например, «Задание-1», «Задание-2» и т. д.) и удаление старых с задержкой (например, удаление «Задания-1» во время запуска «Задания-3»);
  • Менее предпочтительно: с использованием модуля времени

Спасибо за ваши уведомления. Я думаю, что задание задания каждой симуляции по-разному (например, «Задание-1», «Задание-2» и т. д.) и удаление каждого в конце каждого шага помогло мне решить проблему.

Mohsen Abyani 15.12.2020 19:06

Не могли бы вы принять ответ в этом случае?

Roman Zh. 16.12.2020 11:53

Другие вопросы по теме