Engee 文档

徽标支持包

LOGOS 是一个用于工业三维建模和多学科工程分析的软件包。 与 AnyMath 的集成是通过徽标"平台"模块中的 用户功能(PF)机制组织的,该模块旨在连接第三方计算模块。

与徽标集成需要安装并运行*AnyMath子系统。整合*。 在开始集成之前,请确保客户端程序正在运行并连接到当前的 AnyMath 会话。

有关详细的安装和配置说明,请参阅文章 恩吉。综合服务.

通过在LOGOS集成求解器的上下文中注册用Python编写的用户定义函数来执行集成。 这些函数通过特定端口通过UDP协议从/向 AnyMath 接收和发送数据。:

  • * 端口6848*--用于接收来自*AnyMath*到标志的信号;

  • * 端口6849*--用于将信号从徽标传输到*AnyMath*。

这种交互使得组织cosimulation成为可能,这是一种联合计算,两个系统都可以实时交换数据。 这为:

  • 在标志强度计算中使用专门的*AnyMath*模型;

  • 在每个集成步骤在系统之间传输计算参数;

  • 创建复杂的模型,结合来自不同领域的物理.

徽标中的自定义功能

用户函数(PF)是计算模块在任务计算过程中调用的回调函数。 PF机制允许您更改或补充现有计算模块的行为,而无需修改它。

PF连接器是一个接口(指向函数的指针),计算模块通过该接口调用具有预定义参数集的用户函数。 在任务初始化期间,接口模块从PF加载库,初始化连接器,并在正确的计算时刻调用PF。

每个PF都有自己的API参数集和返回值。 创建或启用自定义功能时,PF界面可以自动显示在 徽标平台 编辑器中。

PF操作的一般方案:

  1. 计算模块(例如,LOGOS-HeatLOGOS-Strength)包含内置的 PF连接器 ,用户可以将其功能连接到其中。

  2. 连接器向PF传输电流计算步骤所需的所有数据(例如,温度、电压、密度等)。).

  3. PF执行用户逻辑(例如,重新计算导热系数或计算破坏准则)。

  4. 结果被返回到计算模块,在那里它们被用于建模过程。

为了使PF正常工作,它的接口必须与它所连接的连接器的接口相匹配。

下面给出了LOGOS计算模块中的PF列表。 有关PF徽标的更多信息,请参阅官方徽标文档。

徽标计算模块的内置用户功能
标志-温暖
函数名称 委任事宜 基本参数

1

[医]来源

池中心的热源的初始化。

x,y,z, 时间, t, 区域, 资料来源, 品质检测

2

贴片,贴片

定温度的边界条件。

名称表, 国旗, x,y,z, 时间, 卡帕, , 简历, T

3

贴片,贴片

与热流的边界条件。

名称表, 国旗, x,y,z, 时间, 卡帕, , 简历, T, fQ

4

贴片连接

对流的边界条件。

名称表, 国旗, x,y,z, 时间, 卡帕, , 简历, T, fTs, 法尔法

5

卡帕

确定导热系数。

名称材料, x,y,z, 时间, T, 卡帕

6

确定材料的密度。

名称材料, x,y,z, 时间, T,

7

简历

确定热容量。

名称材料, x,y,z, 时间, T, 简历

8

[医]消融率

质量材料夹带的速率。

T, centerX,Y,Z, normalX,Y,Z


商标-耐久性
函数名称 委任事宜 基本参数

1

MatUser_ST

自定义电压计算。

应变/应变, 压力, 马康斯特, 临时工, 时间, 斯塔特夫

2

Mat_User_ST_GetDMatrix

材料常数的矩阵的计算。

马康斯特, 斯塔特夫, 马特, nComp

3

ErosionUser_ST

用户定义的破坏准则(静止)。

n.标准,标准, 应变/应变, 压力, nComp

4

马特瑟

动态任务的应力计算。

[医]应变, 压力, , 欧盟, 环保署, , ts, [医]擦除,擦除

5

[医]使用者

态的自定义方程。

, 欧盟, , 迪夫, ts, 时间

6

[医]糜烂者

动任务的破坏准则。

应变/应变, 环保署, [医]擦除, 时间


标志-航空
函数名称 委任事宜 基本参数

1

UF_InitVelocity

速度场的初始化。

n.细胞,细胞, 时间, x,y,z, u,v,w

2

Uf_压力

压力场的初始化。

n.细胞,细胞, 时间, x,y,z, p

3

UF_InitTemperature

温度场的初始化。

n.细胞,细胞, 时间, x,y,z, t

4

UF_InitCK

成分浓度的初始化。

n.细胞,细胞, 时间, x,y,z, 计数, ck的

5

Uf_能源

个能量源。

n.细胞,细胞, 时间, x,y,z, e

6

[医]来源

脉冲的源。

n.细胞,细胞, 时间, x,y,z, u,v,w

7

UF_DynamicViscosity碌录莽拢潞赂漏卯芦禄忙猫

动粘度。

t, p, 计数, y, 毫升

8

超导热导

导热系数。

t, p, 计数, y, kp

9

[医]特殊肉

恒压下的热容量。

t, p, 计数, y, cp

10

UF_BC_Param

边界条件的参数。

n.面,面, 补丁, 迭代, 时间, x,y,z, 参数

列出的用户函数内置于主要的LOGOS计算模块中,可以在Python中开发自己的PF或与 AnyMath 集成时用作模板。

Cosimulation模块

Cosimulation模块 cosimulation.py -这是Python中的一个辅助模块,通过UDP协议提供 AnyMath 和LOGOS之间的交换。 该模块允许您根据以下逻辑实时组织系统之间的双向信号交换:

  • 创建两个UDP套接字:接收(端口6848)和传输(端口6849);

  • 模块初始化连接一次,并存储*AnyMath模型的时间*;

  • 自定义徽标函数调用 cosimulate(时间,信号) 并从*AnyMath*获取值列表。

要工作,放置就足够了 cosimulation.py 在自定义函数旁边,并在代码开头导入它:

import cosimulation     # или: from cosimulation import engee_sim

下面是一个完整的示例文件 cosimulation.py. 该模块在LOGOS和 AnyMath 之间配置两个UDP连接,在每个计算步骤交换数据,并存储 AnyMath 系统的当前模型时间。 班级 恩格尔西姆 创建一个连接,接收来自 AnyMath 的信号,并从徽标发送信号。

在文件末尾创建一个全局对象。 工程师_传真,在导入过程中初始化并在自定义函数中使用。

文件内容 cosimulation.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

import socket
import struct
from typing import List

# Абстракция для взаимодействия {docs_engee} и LOGOS
class EngeeSim:
    def __init__(self):
        # Сокеты для связи
        self.sock_comm = None  # сокет для отправки данных (LOGOS -> {docs_engee})
        self.sock_snd = None   # сокет для приема данных ({docs_engee} -> LOGOS)
        # Параметры модели {docs_engee}
        self.engee_model_time = 0.0
        self.engee_sample_time = 0.0

    def __del__(self):
        # При удалении объекта закрываем сокеты
        if self.sock_comm:
            self.sock_comm.close()
        if self.sock_snd:
            self.sock_snd.close()

    def init_intercommunicate(self):
        # Инициализация UDP-соединения.
        self.sock_comm = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock_snd = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock_snd.settimeout(0.05)
        # Порт 6849 — передача данных из LOGOS в {docs_engee}
        self.sock_comm.connect(("127.0.0.1", 6849))
        # Порт 6848 — прием данных от {docs_engee}
        self.sock_snd.bind(("127.0.0.1", 6848))
        # Отправляем служебное сообщение для установления связи
        self.sock_comm.send(b"INIT")

    def cosimulate(self, logos_model_time: float, signals: List[float]):
        # Обмен сигналами между LOGOS и {docs_engee} на каждом шаге расчета.
        # Проверяем синхронизацию по времени модели
        if logos_model_time <= engee_sim.engee_model_time + engee_sim.engee_sample_time:
            return []

        试试:
            #我们接受工程师的资料
            recv_data=self。sock_snd.recv(2048)
除了插座。超时时间:
#如果没有数据,我们返回一个空列表
            返回[]

        #将数据解压缩为双精度(8字节)
        工程数据=[]
        对于i在范围(0,len(recv_data),8):
            块=recv_data[i:i+8]
            engee_data.追加(struct.解包('d',块)[0])

        #前两个值是步骤和工程师模型时间
        engee_sim.engee_sample_time=engee_data[0]
        engee_sim.engee_model_time=engee_data[1]
        engee_data=engee_data[2:]

        #包装标志的信号发送给工程师
        packed_data=b""
        对于sig in信号:
            packed_data+=结构。包("d",sig)

        #向工程师发送数据
        自我。sock_comm。发送(packed_data)
        返回工程师_数据

##################################################################
#初始化{docs_engee}和LOGOS之间的数据传输
engee_sim=EngeeSim()
engee_sim.init_intercommunicate()
##################################################################

在自定义函数中使用

要将徽标中的计算与 AnyMath 模型链接,您需要连接模块 cosimulation.py 并调用他的方法 cosimulate() 户功能(PF)内。 这将允许您在每个步骤交换信号:从徽标发送数据到 AnyMath 并从那里接收可用于计算的值。

  1. 平台 模块中打开您的自定义功能。

  2. 在函数的最开始,添加导入行:

    import cosimulation   # или: from cosimulation import engee_sim
  3. 然后添加一个挑战 cosimulate()AnyMath 交换数据。

该功能的现成示例如下所示。:

import cosimulation  # Подключаем модуль косимуляции

def erosion_user(nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress,
                 pu, eu, epsp, rou, divU, ts, loc, tt, time, eraseFlag):

    # Отправляем в {docs_engee} три сигнала: давление, энергию и плотность
    signals_from_engee = cosimulation.engee_sim.cosimulate(time, [pu, eu, rou])

    # Если данных нет ({docs_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

    # Извлекаем сигналы, полученные из {docs_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

    #将更新的值返回到LOGOS计算
    返回nsh,nip,ncmr,nhv,Cmr,strainVelF,应变,应力, \
           pu,eu,epsp_from_engee,rou,divU,ts,loc,tt,time,eraseFlag

它是如何工作的:

  1. 模块导入--导入时 cosimulation.py 会自动创建和配置对象 工程师_传真,它打开到 AnyMath 的UDP连接。

  2. 挑战 cosimulate()-在计算的每一步,标志:

    • 当前模型时间作为第一个参数传递(时间);

    • 第二个是需要发送到 AnyMath 的信号列表(例如, [pu,eu,rou]).

  3. 数据交换:

    • 模块通过端口 6849将这些信号发送到AnyMath**;

    • 接下来,预计将有来自 AnyMath*on port*6848的响应;

    • 如果收到响应,模块将返回来自 AnyMath 的值列表。

  4. 数据使用--返回的值可以在函数的逻辑中使用,例如,设置某些条件。

  5. 如果没有可用的数据 — cosimulate() 返回一个空列表,计算继续而不交换。

在徽标中注册和启动自定义功能

准备模块后 cosimulation.py 并编写自定义函数(例如, [医]使用者)有必要将其连接到徽标,并开始与 AnyMath 的联合计算。

第1步。 将功能连接到徽标

  1. 打开徽标中的 "平台" 模块。

  2. 项目 选项卡→选择所需的计算任务。 项目所在的路径示例: VNIIEF/LOGOS-EXAMPLES-5.3.24.109/LOGOS-MIP/Projects/project_name

    logos 1

  3. 右键单击任务并选择 "属性"

    logos 2

    将打开 单个任务编辑器窗口:

    logos 3

  4. 在PF连接器列表中,找到合适的连接器(例如, [医]使用者 来计算侵蚀)。

    logos 4

  5. 双击连接器以打开 自定义函数编辑器

  6. 在打开的编辑器中,使用以下方法粘贴函数的代码 cosimulate():

    import cosimulation  # Импортируем модуль косимуляции
    
    def erosion_user(nsh, nip, ncmr, nhv, Cmr, strainVelF, strain, stress,
                     pu, eu, epsp, rou, divU, ts, loc, tt, time, eraseFlag):
    
        #标志与工程师之间的信号交换
        信号=共仿真。engee_sim.cosimulate(时间,[pu,eu,rou])
    
        如果没有信号:
            返回nsh,nip,ncmr,nhv,Cmr,strainVelF,应变,应力, \
                   pu,eu,epsp,rou,divU,ts,loc,tt,time,eraseFlag
    
        strain_from_engee,epsp_from_engee=信号
    
        #破坏准则:如果epsp>=应变,则认为该元素被破坏
        如果epsp_from_engee>=strain_from_engee:
            eraseFlag=真
    
        返回nsh,nip,ncmr,nhv,Cmr,strainVelF,strain_from_engee,应力, \
               pu,eu,epsp_from_engee,rou,divU,ts,loc,tt,time,eraseFlag
  7. 回到 任务编辑器,选择创建的函数并将其连接到相应的连接器。

徽标可以为每个任务拥有自己的一组连接器。 在连接之前,请确保函数的签名(参数列表)与所选连接器的接口匹配。


第2步。 开始模拟

启动顺序对于正确同步AnyMath和徽标非常重要。

  1. 首先,在 AnyMath 中运行模型。 它应该被加载并等待来自徽标的连接。

  2. 然后在LOGOS中运行计算(在 AnyMath 中启动模型后1分钟内)。

    logos 5

AnyMath必须先启动! 如果在 AnyMath 中启动模型之前启动徽标,则不会建立连接。 AnyMath 中的计算步骤必须等于或是LOGOS计算步骤的倍数。


第三步。 检查成功的连接

启动后,检查 AnyMath 日志中的消息。 成功的连接如下所示:

INFO | Object has been created: Logos
INFO | Successfully interconnected with LOGOS!

第4步。 传输信号的控制

要验证来自徽标的数据,请打开 数据检查员 data inspector icon工程师:

logos 6 logos 7

在这里,您可以实时观察系统之间传输的信号的值。

第5步。 完成计算

计算完成后,两个程序同步关闭。 计算结果可以通过 Scientific View 模块在LOGOS中查看—在 Postprocessor中选择所需的输出文件:

logos 8