Modelica语言是否存在一个方法保证某个数值永远大于0一般问题
燃烧化学反应通常被视为刚性问题,这是由于燃烧过程中涉及的化学反应动力学特性所决定的。在仿真过程中常常出现燃烧室模型工质组分计算出负数致使仿真失败跳出问题。即便使用总包反应模型将复杂成千上万的基元反应简化为简单的几个总包反应后依旧存在这个问题。
为了保证模型运行,我首先想到了添加一个if判断来消除这个问题,当燃料组分小于0时,反应速率降低为0:
if moleConcentration[2]<0 then r=0; else r=xxx;
但是这并不能解决问题,我想到这可能是由于Modelica语言的事件语法导致的,因此我选择了抑制事件的判断
if noEvent(moleConcentration[2]<0) then r=0; else r=xxx;
事实上该方法确实使得部分工况得以运行,但是依旧无法满足所有工况。
将判断值从0改成一个很小的正数依然无法解决问题,甚至出现了更复杂的报错。
Modelica语言是否存在一个方法保证某个数值永远大于0