我在组件模型中使用指针将信息(属性数据(传递给函数,在函数中可以显式计算更多的量。
其中一个数量必须隐含计算。然而,众所周知,隐式方程不能用函数来计算。
我的解决方案是从函数中调用一个模型,并通过函数将指针的信息传递给模型。然而,众所周知,模型不能从函数中调用。
所以我的问题是:有人有工作的想法吗?
(顺便说一句:不可能以这种方式更改组件模型,也不可能直接调用下一个模型,因为我必须更改很多模型。(
在组件模型中,我称之为
Fluidmodel A(fluidpointer, temperature(p=pressure,h=enthalpy))
组件模型称为流体模型Fluidmodel A
,该流体模型包含函数temperature
。在函数temperature
中,可以直接计算温度。
由于我想求解一个隐式函数,我需要调用temperature
中的另一个模型助手。
由于这是不可能的,我正在寻找一个变通办法。(使用超过Fluidmodel A
的fluidpointer
没有帮助,因为我必须更改组件模型才能在Fluidmodel A
中调用助手。(
函数中不能有隐式计算,但可以在隐式方程中使用函数的返回值,即使是完整的函数调用(如果它是标量(,它也会被求解,所以通常在Modelica中表达这一点都没有问题。只需将其写在模型中即可。函数返回值将只是非线性方程系统的一部分,您不必担心以下问题:
- 您的函数需要在任何地方返回数值敏感的值,在这些地方它可以由非线性解算器调用,而非线性解算程序可能离解很远。这对流体性质来说可能是一个挑战,可能需要在函数内部实现外推,并在函数外部断言以进行处理
- 如果你提供一个导数函数来返回函数相对于输入的梯度,这样解算器就可以使用解析雅可比函数,那么效率会更高。查看有关导数注释的规范。如果你很幸运,你的工具可以自动生成这些