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.的梯度,从而使解算器可以使用解析雅可比矩阵,则效率会更高。查看有关导数注释的说明。如果您非常幸运,您的工具可以自动生成这些

函数中不能有隐式计算,但可以在隐式方程中使用函数的返回值,即使是完整的函数调用(如果是标量的话),它也会得到解决,因此通常在Modelica中表达这一点没有问题。只需将其写入模型中。然后,函数返回值将只是非线性方程系统的一部分,您不必担心它,除了以下内容:

  • 您的函数需要在任何地方返回数值上合理的值,非线性解算器可以调用该函数,而非线性解算器可能离解很远。这对流体属性来说可能是一个挑战,可能需要您在函数内部实现外推,并在函数外部实现断言来处理
  • 如果您提供一个导数函数来返回函数w.r.t.的梯度,从而使解算器可以使用解析雅可比矩阵,则效率会更高。查看有关导数注释的说明。如果您非常幸运,您的工具可以自动生成这些

您是否有一个具体的最小示例来说明这一点,并说明您不想(或不能)改变哪些方面?这可以帮助人们提出解决这个问题的方法。您好,您介意在问题中添加您的评论信息吗?也许可以在开始时编辑一下。这样人们就可以阅读你问题中的所有重要信息,而不必阅读评论。嘿@Michelle,谢谢-完成!您是否有一个具体的最小示例来说明这一点,并说明您不想(或不能)更改哪些方面?这可以帮助人们提出解决这个问题的方法。您好,您介意在问题中添加您的评论信息吗?也许可以在开始时编辑一下。这样人们就可以阅读你问题中的所有重要信息,而不必阅读评论。嘿@Michelle,谢谢-完成!