切换类型基于布尔参数(没有继承)?

时间:2016-07-29 10:44:56

标签: modelica openmodelica

我有一个代表一些化学过程的模型,我希望反应模型可以在吸收和解吸类(定义相应的模型)之间切换,基于布尔参数。 我试着这样做:

model Sorption
  boolean parameter absorbing;
  AbsorptionModel if absorbing else Desorptionmodel reaction;
equation
  reaction.T = T; //dummy usage
  ...

使用它像:

Sorption TestAbsorption(absorbing=true); // uses the absorption model
Sorption TestDesorption(absorbing=false); // uses the desorption model

当然,这种方式不起作用。 absorbing在编译时是已知的,所以我觉得应该可以以某种方式实现这一点。

我尝试使用replaceable,但我不想(不必要地)制作两个独立的Sorption子类来切换反应模型的类型。似乎可替换/重新声明仅在继承时可用,但我可能错了?有办法做我想做的事吗?

AbsorptionModelDesorptionModel都继承自相同的基类,并且具有相同的接口(如果相关)。

1 个答案:

答案 0 :(得分:4)

如果需要,则不能使用if和组件声明,但条件组件除外(但这只会删除组件声明及其连接方程式)。

model Sorption
  boolean parameter absorbing;
  replaceable model RModel = AbsorptionModel;
  RModel reaction;
equation
  reaction.T = T; //dummy usage
  ...

使用它像:

Sorption TestAbsorption(redeclare model RModel = AbsorptionModel); // uses the absorption model
Sorption TestDesorption(redeclare model RModel = Desorptionmodel); // uses the desorption model