Я не думаю, что вы можете переопределить среду во время симуляции.В вашем случае (где вам не нужно смешивать две жидкости) вы можете создать новую среду, например, под названием OilWaterMixture
, расширяющуюся от Modelica.Media.Interfaces.PartialMedium
.
Если вы посмотрите на кодPartialMedium
вы увидите, что он содержит множество partial
(«пустых») функций, которые вы должны заполнить в своей новой модели носителя.Например, в OilWaterMixture
вы должны расширить функцию specificEnthalpy_pTX
, чтобы она возвращала удельную энтальпию вашей смеси вода / масло для определенной смеси вода / масло (задается вектором массовой доли X
).Это можно сделать, добавив следующую модель в пакет OilWaterMixture
:
redeclare function extends specificEnthalpy_pTX "Return specific enthalpy"
Oil = Modelica.Media.Incompressible.Examples.Essotherm650;
Water = Modelica.Media.Water.StandardWater;
algorithm
h_oil := Oil.h_pT(p,T);
h_water := Water.specificEnthalpy_pT(p,T);
h := X[0]*h_oil + X[1]*h_water;
end specificEnthalpy_pTX;
Вектор массовой доли X
определен в PartialMedium
, а в OilWaterMixture
необходимо определить, что он имеет дваэлементы.
Опять же, поскольку вы фактически не собираетесь использовать свойства смешивания, а только векторы массовой доли {0,1}
или {1,0}
, простое линейное уравнение смешивания должно быть адекватным.
Когда выиспользуйте OilWaterMixture
в различных компонентах, в журнале ошибок будет указано, какие функции среды им нужны.Поэтому вам, вероятно, не нужно расширять все частичные функции в PartialMedium
.