2013-11-20 43 views
0

建模如果我有不具有输入和输出没有像的Modelica - 映射非Modelica的函数来

void foo(void) 
{ 
    variable1; 
    variable2; 
    for loop 
    { 
    if conditions 
    } 
    variable2=foobar(); // another function call, foobar() is not modelica function 

} 

然后我可以在Modelica的它像下面建模非Modelica的功能?

model foo 
variable1; 
variable2; 

algorithm 
for loop 
    { 
    if conditions 
    } 
variable2 :=foobar(); //foobar here is modelica function 
end foo; 

回答

1

您可能希望有一个快速浏览一下漂亮的小抄http://modref.xogeny.com/找出如何for循环做。此外,当内部算法部分,您必须使用分配,而不是方程:

algorithm 
... 
variable2 := foobar(); //foobar here is modelica function 
+0

谢谢我编辑了我的帖子@Dietmar Winkler – shilu

3

其实,你的描述有点麻烦。如果你的函数没有输入和输出,调用它的意义何在?我想你的功能side effects。但是,如果您正在从Modelica调用带有副作用的函数,则需要非常小心,因为一般来说,您无法控制何时调用它们。例如,他们将被称为所谓的“候选解决方案”以及实际的模拟步骤。

因此,如果你更多地解释了这个函数的作用,那将是最好的。这不仅有助于决定如何在Modelica中表达它,还可以证明您的函数最好保留为C代码,并通过Modelica中的外部函数接口进行调用。

+0

是的。函数具有副作用,因为它会更改全局变量的值。我想知道什么是建模这种功能的最佳方法。将它作为参数传递给函数? – shilu

+0

如果函数具有副作用,则应使用关键字“不纯”来限定它,以使Modelica解算器知道它具有副作用。 –