【发布时间】:2019-12-09 10:56:10
【问题描述】:
Dymola 中有一个选项“在模型中保存起始值”,它允许重复使用这些参数来调整模拟。
我在 OpenModelica 中寻找类似的可能性,但到目前为止我无法弄清楚。特别是,我正在使用 ThermoSysPro 构建模型,它对初始值的变化相当敏感。我的模型有几个垂直管道(上游、下游),所以很容易失败。
1.是否可以在 OpenModelica 中保存初始/开始/猜测值?
2。在模型中实现/采用这些值的方法是什么? (假设我有密度 - ρ,焓 - h,温度 - T 等等。只是为了简化 Modelica 新手)
-----更新------
就我而言,我有两种方法来启动/初始值: (ThermoSysPro - TSP)
方法 1 - 通过引入所需的边界条件或接近成功运行的边界条件,在不更改 TSP 中给出的默认起始值的情况下运行模拟 1 秒。
收集生成的初始值并将它们添加为起始值(当一个组件有很多时很耗时)。
对于诸如 “volume” 之类的组件或任何其他未离散化的组件,只需在组件的 “Initialization” 部分或“文本视图” 窗口,例如Q(start = 0.3); P(start = xxx)。
但对于离散化组件,例如 “管道”,它必须通过 “文本视图” 使用运算符 each 来完成,例如Q(each start = 0.3)。但是,当通过“图表视图”更改组件的任何参数时,运算符“each”会消失,因此必须给出如下:
• Q(start = {0.3 for i in 1:componentName.Ns+1})
• Q(start = fill(0.3, componentName.Ns+1))
• Q(start = {x1, x2, x3, x4, … xi})
Ns + 1 - 用于水力节点/Ns - 用于热力节点
问题
P.1.1 - 通常应该写:
Q(start = fill(0.3, Ns+1), fixed = fill(true/false, Ns+1))
但这与操作符each 的情况相同,通过“图表视图”更改组件的任何参数后,属性fixed 会自动更改为fixed=false,尽管需要数组。我尝试创建一个布尔参数并使用数组理解,但我总是得到相同的结果。 有什么建议或解决方法吗?
P.1.2 – 在调整生成的起始值而不是使用默认值之后,我看不到模拟的任何改进(加速/更好的结果/或其他)。此外,在调整了太多之后,我开始遇到初始化问题——这应该与我的理解相反。所以,我不确定我应该如何正确使用/声明起始值?也许问题是我没有明确添加fixed = true/false?
方法 2 – 使用 Modelica 函数根据边界条件计算起始值。所以首先,我计算多个参数的起始值(通常我计算压力和焓)。例如
parameter Modelica.SIunits.Enthalpy init_enthalpy[Ns+1] = {Modelica.Media.Water.WaterIF97_base.specificEnthalpy_pT(P[i], T) for i in 1:Ns+1}
然后将其添加到特定组件为:
h(start = init_enthalpy)
问题:
P2.1 对于 ThermoPower 库,这种方法非常有效,但是对于 ThermoSysPro,我遇到了困难,因为有很多可以为初始化给出的参数。通常应该给出多少参数,或者如何找到最重要的参数?
P2.2 在initial equation 部分中声明开始/初始值 和将其计算为parameter(如上)之间有区别吗?
P2.3 指出起始值是fixed=true / false 是不是意味着你在使用所谓的“逆问题”?
【问题讨论】:
标签: modelica openmodelica