2013-05-11 106 views
0

如下面的例子:Modelica的特殊操作的源代碼

model HelloWorld "A Simple Model" 
    Real x(start = 1); 
equation 
    **der(x) = -x;** 
    annotation (uses(Modelica(version="3.2"))); 
end HelloWorld; 

我計劃寫一些代碼轉換Modelica源成Java格式。但是,我找不到像der()等特殊運算符的源代碼。

我的意思是:在java中的例子可以寫入格式爲:

class HelloWorld{ 
    ModelicaReal x = new ModelicaReal(start,1); 

    public void run(){ 
     while(time...){ 
     ...der(x)... 
     } 
    } 
} 

我想處理der(x)作爲Java函數調用。但我必須先找到der()運算符源代碼,然後我才能將der()運算符轉換爲java函數。但Modelica運營商源代碼不在Modelica標準庫中?

回答

3

沒有der()的源代碼。 (至少不喜歡你正在尋找的那個

爲什麼?

因爲它是(你說的是運營商。不是一個功能。你所要求的是(差不多)像+運營商或connect的源代碼。

我相信你遇到過這樣的功能,在java。例如在C++中您有sizeof()。這不是一個真正的功能,但看起來和行爲像一個。

der()由每個模擬器的集成方法實現。並作爲內置的運營商提供給您。它不是像sincos這樣的庫函數實現的....並且坦率地說它不能。它不會按照您在源代碼中看到的那樣進行評估。

我不知道如何去翻譯它。但有一些頌歌求解器積分器在那裏。我希望有人會很快給你一個替代方法。


只是一個友善的人擡頭,它可能不像現在接近它那麼容易。而且您不能將modelica代碼(,對於任何源代碼)轉換爲另一種語言,就像那樣。也許這可以將java翻譯爲C/C++,反之亦然,但是這些語言是密切相關的並且用於相同類型的編程範例。 Modelica是不同的。

如果你堅持翻譯algorithmic部分modelica並留下equations出它現在更容易。然後你可以繼續使用目前的方法。

祝你好運。

+0

讚賞您的詳細答案?如果是這樣,我可以通過一些方法從Java調用Modelica運算符嗎?如果有這樣的方法? 是否可以通過OMC或某些腳本? – xing 2013-05-13 07:57:36

+0

對於Dymola而言,API可以用作調用Dymola的Java方法,編譯模型並獲得結果,也許與OMC類似。真正的問題是你無法逐行解決問題,但你必須在編譯之前對模型的所有方程進行排序,並應用你的集成器和ODE求解器。 – 2013-05-13 14:28:18

+0

@xing請參閱Marcos評論。我認爲OMC也有類似的java界面。檢查這個。 http://www.ep.liu.se/ecp/043/020/ecp09430121.pdf,你也可以隨時詢問formus。這是一個類似的問題。 https://www.openmodelica.org/index.php/forum/topic?id=51 – stardust 2013-05-13 15:25:17