2013-11-20 44 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解算器知道它具有副作用。 –