2012-11-15 18 views
4

我對Modelica中的混合建模範例感到困惑。一方面,事件是有用的,另一方面,它們是要避免的。讓我解釋一下我的情況:控制混合Modelica模型中的事件

我有一個大型模型,由一個鄰近區域中的多個建築物組成,模擬1年以上。最初,模型運行非常緩慢。在儘可能多的條件下添加noEvent()可以大大提高速度。

隨着發展的繼續,模型的控制變得越來越複雜,我又有很多事件,有時在很短的時間間隔。爲了讓一個想法:

Number of (model) time events : 28170 
Number of (U) time events  : 0 
Number of state events  : 22572 
Number of step  events  : 0 

這些事件炸燬輸出(正確處理後,我需要在事件變量)和減慢了模擬。此外,我感覺有些事件(如果...)會導致意想不到的行爲。

我想知道是否會在某些時間步驟強制我的事件並在這些時間步驟之間禁止它們?理想情況下,我想根據某些條件觸發這些「強迫事件」。例如:白天他們應該每隔15分鐘,在每分鐘高太陽輻射下,在夜間我根本不想要事件。

這是一個好主意嗎?我想這會更快,因爲許多州的事件將成爲時間事件? Modelica 3.2(在Dymola中)如何做到這一點?

預先感謝所有答案。 Roel

回答

5

有幾點意見。首先,如果你有很多事件的模擬(相對於模擬的總持續時間),我鼓勵你做的第一件事就是使用一個低階積分器。這裏的重點是高階積分器通常允許您花更長的時間步長。但如果這些步驟經常被事件截斷,它們最終會變得非常昂貴。

其次,您可以嘗試固定步驟集成商。根據工具的不同,他們可能會在固定時間步積分器的背景下實施這種「池事件並一次全部解除」的方法。但規範並沒有真正說明工具應該如何處理在固定時間步驟之間發生的事件。

第三,解決這個問題的另一種方法是自己「彙集」您的活動。我可以想象得到的最簡單的方法是獲取所有當前生成事件的語句,並將它們包含在「樣本(...,...),然後」語句中。這樣,您可以確保事件僅在特定時間間隔內觸發。這比固定的時間步驟方法更便於攜帶。我認爲這是你實際提出的問題,但重要的是要指出,它不應該基於時間步長(模型沒有時間步長的概念),而是基於模型指定的採樣間隔(這將會在實踐中,完全獨立於時間步驟)。

正如你指出的那樣,使用「sample(...,...)」會將這些變成時間事件,而且,這應該會更快。

+1

另一個答案包含有用的提示和見解。謝謝邁克爾。 – saroele