Function 函数中的隐式计算
我在组件模型中使用指针将信息(属性数据)传递给函数,在这些函数中,进一步的量会被明确地计算出来 其中一个量必须隐式计算。然而,众所周知,隐式方程不能用函数计算 我的解决方案是从函数中调用模型,并通过函数将指针的信息传递给模型。然而,众所周知,模型不能从函数中调用 所以我的问题是:有没有人有解决问题的想法 (顺便说一句:没有可能以这种方式更改组件模型,直接调用进一步的模型,因为我必须更改很多模型。) 在我调用的组件模型中Function 函数中的隐式计算,function,implicit,modelica,dymola,Function,Implicit,Modelica,Dymola,我在组件模型中使用指针将信息(属性数据)传递给函数,在这些函数中,进一步的量会被明确地计算出来 其中一个量必须隐式计算。然而,众所周知,隐式方程不能用函数计算 我的解决方案是从函数中调用模型,并通过函数将指针的信息传递给模型。然而,众所周知,模型不能从函数中调用 所以我的问题是:有没有人有解决问题的想法 (顺便说一句:没有可能以这种方式更改组件模型,直接调用进一步的模型,因为我必须更改很多模型。) 在我调用的组件模型中 流体模型A(流体指针,温度(p=压力,h=焓)) 组件模型调用流体模型Flu
流体模型A(流体指针,温度(p=压力,h=焓))
组件模型调用流体模型Fluidmodel A
,该模型包含函数temperature
。在函数温度中
可以明确计算温度
由于我想解隐式函数,我需要在温度
中调用另一个模型助手
由于这是不可能的,我正在寻找一个解决办法。(使用被超越为
Fluidmodel A
的fluidpointer
不会有帮助,因为我必须更改组件模型才能在Fluidmodel A
中调用helper)您不能在函数中进行隐式计算,但可以使用函数的返回值,即使是完整的函数调用,如果它是标量的,在一个隐式方程中,它也会被求解,所以通常在Modelica中表示这一点都没有问题。只需将其写入模型中。然后,函数返回值将只是非线性方程系统的一部分,您不必担心它,除了以下内容:
- 您的函数需要在任何地方返回数值上合理的值,非线性解算器可以调用该函数,而非线性解算器可能离解很远。这对流体属性来说可能是一个挑战,可能需要您在函数内部实现外推,并在函数外部实现断言来处理
- 如果您提供一个导数函数来返回函数w.r.t.的梯度,从而使解算器可以使用解析雅可比矩阵,则效率会更高。查看有关导数注释的说明。如果您非常幸运,您的工具可以自动生成这些
- 您的函数需要在任何地方返回数值上合理的值,非线性解算器可以调用该函数,而非线性解算器可能离解很远。这对流体属性来说可能是一个挑战,可能需要您在函数内部实现外推,并在函数外部实现断言来处理
- 如果您提供一个导数函数来返回函数w.r.t.的梯度,从而使解算器可以使用解析雅可比矩阵,则效率会更高。查看有关导数注释的说明。如果您非常幸运,您的工具可以自动生成这些