我有一个代表一些化学过程的模型,我希望反应模型可以在吸收和解吸类(定义相应的模型)之间切换,基于布尔参数。 我试着这样做:
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
子类来切换反应模型的类型。似乎可替换/重新声明仅在继承时可用,但我可能错了?有办法做我想做的事吗?
AbsorptionModel
和DesorptionModel
都继承自相同的基类,并且具有相同的接口(如果相关)。
答案 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