Пакет поддержки ЛОГОС
ЛОГОС — пакет программ для промышленного 3D-моделирования и многопрофильного инженерного анализа. Интеграция с Engee организована через механизм Пользовательских Функций (ПФ) в модуле ЛОГОС «Платформа», который предназначен для подключения сторонних расчетных модулей.
|
Для интеграции с ЛОГОС требуется установленная и запущенная подсистема Engee.Интеграции. Убедитесь, что клиентская программа запущена и подключена к текущей сессии Engee перед началом интеграции. Подробные инструкции по установке и настройке см. в статье Engee.Интеграции. |
Интеграция выполняется посредством регистрации пользовательских функций, написанных на Python, в контексте интегрирующего решателя ЛОГОС. Эти функции принимают и отправляют данные из/в Engee по протоколу UDP через конкретные порты:
-
Порт 6848 — для приема сигналов из Engee в ЛОГОС;
-
Порт 6849 — для передачи сигналов из ЛОГОС в Engee.
Такое взаимодействие позволяет организовать косимуляцию — совместный расчет, где обе системы обмениваются данными в реальном времени. Это открывает возможности для:
-
Использования специализированных моделей Engee внутри прочностных расчетов ЛОГОС;
-
Передачи расчетных параметров между системами на каждом шаге интегрирования;
-
Создания комплексных моделей, объединяющих физику из разных доменов.
Пользовательские функции в ЛОГОС
|
Пользовательская функция (ПФ) — это функция обратного вызова, вызываемая расчетным модулем в процессе расчета задачи. Механизм ПФ позволяет изменять или дополнять поведение существующего расчетного модуля без его модификации. Коннектор ПФ — это интерфейс (указатель на функцию), через который расчетный модуль вызывает пользовательскую функцию с заранее определенным набором параметров. Во время инициализации задачи модуль сопряжения загружает библиотеки с ПФ, инициализирует коннекторы и вызывает ПФ в нужные моменты расчета. Каждая ПФ имеет свой API — набор аргументов и возвращаемых значений. Интерфейс ПФ может отображаться автоматически в редакторе ЛОГОС-Платформы при создании или подключении пользовательской функции. |
Общая схема работы ПФ:
-
Расчетный модуль (например, ЛОГОС-Тепло или ЛОГОС-Прочность) содержит встроенные коннекторы ПФ, к которым пользователь может подключить свою функцию.
-
Коннектор передает в ПФ все необходимые данные для текущего шага расчета (например, температуру, напряжения, плотность и т.д.).
-
ПФ выполняет пользовательскую логику (например, пересчет коэффициента теплопроводности или вычисление критерия разрушения).
-
Результаты возвращаются в расчетный модуль, где используются в процессе моделирования.
|
Для корректной работы ПФ необходимо, чтобы ее интерфейс соответствовал интерфейсу коннектора, к которому она подключается. |
|
Перечень ПФ в расчетных модулях ЛОГОС приведен ниже. Более подробно о ПФ ЛОГОС читайте в официальной документации ЛОГОС. Встроенные пользовательские функции расчетных модулей ЛОГОС
Перечисленные пользовательские функции встроены в основные расчетные модули ЛОГОС и могут использоваться в качестве шаблонов при разработке собственных ПФ на Python или для интеграции с Engee. |
Модуль косимуляции
Модуль косимуляции cosimulation.py — это вспомогательный модуль на языке Python, обеспечивающий обмен между Engee и ЛОГОС по протоколу UDP. Модуль позволяет организовать двунаправленный обмен сигналами между системами в реальном времени по следующей логике:
-
Создаются два UDP-сокета: прием (порт 6848) и передача (порт 6849);
-
Модуль один раз инициализирует соединение и хранит время модели Engee;
-
Пользовательская функция ЛОГОС вызывает
cosimulate(time, signals)и получает список значений от Engee.
Для работы достаточно разместить cosimulation.py рядом с пользовательскими функциями и импортировать его в начале кода:
import cosimulation # или: from cosimulation import engee_sim
|
Ниже приведен полный пример файла В конце файла создается глобальный объект Содержимое файла
|
Использование в пользовательской функции
Чтобы связать расчет в ЛОГОС с моделью Engee, нужно подключить модуль cosimulation.py и вызвать его метод cosimulate() внутри пользовательской функции (ПФ).
Это позволит на каждом шаге обмениваться сигналами: отправлять данные из ЛОГОС в Engee и получать оттуда значения, которые можно использовать в расчетах.
-
Откройте вашу пользовательскую функцию в модуле Платформа.
-
В самое начало функции добавьте строку импорта:
import cosimulation # или: from cosimulation import engee_sim -
Затем добавьте вызов
cosimulate()для обмена данными с Engee.
Ниже показан готовый пример функции:
import cosimulation # Подключаем модуль косимуляции
def erosion_user(nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress,
pu, eu, epsp, rou, divU, ts, loc, tt, time, eraseFlag):
# Отправляем в Engee три сигнала: давление, энергию и плотность
signals_from_engee = cosimulation.engee_sim.cosimulate(time, [pu, eu, rou])
# Если данных нет (Engee еще не ответил) — возвращаем все без изменений
if not signals_from_engee:
return nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress, \
pu, eu, epsp, rou, divU, ts, loc, tt, time, eraseFlag
# Извлекаем сигналы, полученные из Engee
strain_from_engee = signals_from_engee[0] # предельная пластическая деформация
epsp_from_engee = signals_from_engee[1] # текущая пластическая деформация
# Критерий разрушения: если epsp >= strain, элемент считается разрушенным
if epsp_from_engee >= strain_from_engee:
eraseFlag = True
# Возвращаем обновленные значения в расчет ЛОГОС
return nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress, \
pu, eu, epsp_from_engee, rou, divU, ts, loc, tt, time, eraseFlag
Как это работает:
-
Импорт модуля — при импорте
cosimulation.pyавтоматически создается и настраивается объектengee_sim, который открывает UDP-соединение с Engee. -
Вызов
cosimulate()— при каждом шаге расчета ЛОГОС:-
Первым аргументом передается текущее модельное время (
time); -
Вторым — список сигналов, которые нужно отправить в Engee (например,
[pu, eu, rou]).
-
-
Обмен данными:
-
Модуль отправляет эти сигналы в Engee через порт 6849;
-
Далее ожидается ответ от Engee на порту 6848;
-
Если ответ получен, модуль возвращает список значений, пришедших из Engee.
-
-
Использование данных — возвращенные значения можно использовать в логике функции, например для задания определенных условий.
-
Если данных нет —
cosimulate()вернет пустой список, и расчет продолжится без обмена.
Регистрация и запуск пользовательской функции в ЛОГОС
После подготовки модуля cosimulation.py и написания пользовательской функции (например, erosion_user) необходимо подключить ее в ЛОГОС и запустить совместный расчет с Engee.
Шаг 1. Подключение функции в ЛОГОС
-
Откройте модуль «Платформа» в ЛОГОС.
-
Вкладка Проект → выберите нужное расчетное задание. Пример пути, где может находиться проект:
VNIIEF/LOGOS-EXAMPLES-5.3.24.109/LOGOS-MIP/Projects/project_name
-
Нажмите по задаче правой кнопкой мыши и выберите «Свойства».

Откроется окно Редактор одиночной задачи:

-
В списке коннекторов ПФ найдите подходящий (например,
erosion_userдля расчета эрозии).
-
Дважды кликните по коннектору, чтобы открыть Редактор пользовательских функций.
-
В открывшемся редакторе вставьте код вашей функции, использующей
cosimulate():import cosimulation # Импортируем модуль косимуляции def erosion_user(nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress, pu, eu, epsp, rou, divU, ts, loc, tt, time, eraseFlag): # Обмен сигналами между LOGOS и Engee signals = cosimulation.engee_sim.cosimulate(time, [pu, eu, rou]) if not signals: return nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress, \ pu, eu, epsp, rou, divU, ts, loc, tt, time, eraseFlag strain_from_engee, epsp_from_engee = signals # Критерий разрушения: если epsp >= strain, элемент считается разрушенным if epsp_from_engee >= strain_from_engee: eraseFlag = True return nsh, nip, ncmr, nhv, Cmr, strainVelF, strain_from_engee, stress, \ pu, eu, epsp_from_engee, rou, divU, ts, loc, tt, time, eraseFlag -
Вернитесь в Редактор задачи, выберите созданную функцию и подключите ее к соответствующему коннектору.
|
Для каждой задачи в ЛОГОС может быть свой набор коннекторов. Перед подключением убедитесь, что сигнатура вашей функции (список аргументов) совпадает с интерфейсом выбранного коннектора. |
Шаг 2. Запуск косимуляции
Порядок запуска важен для корректной синхронизации Engee и ЛОГОС.
-
Сначала запустите модель в Engee. Она должна быть загружена и ожидать подключения от ЛОГОС.
-
Затем запустите расчет в ЛОГОС (в течение 1 минуты после старта модели в Engee).

|
Engee необходимо запускать первым! Если запустить ЛОГОС до запуска модели в Engee, соединение установлено не будет. Шаг расчета в Engee должен быть равен или кратен шагу расчета ЛОГОС. |
Шаг 3. Проверка успешного соединения
После запуска проверьте сообщения в логе Engee. Успешное подключение отображается строками:
INFO | Object has been created: Logos INFO | Successfully interconnected with LOGOS!
Шаг 4. Контроль передаваемых сигналов
Для проверки данных, поступающих из ЛОГОС, откройте Инспектор данных
в Engee:

Здесь можно наблюдать значения сигналов, передаваемых между системами в реальном времени.
Шаг 5. Завершение расчета
После окончания расчета обе программы завершают работу синхронно. Результаты расчета можно просмотреть в ЛОГОС через модуль Scientific View — выберите нужный выходной файл в Постпроцессоре:
