我正在Dymola建造一个类似于Helmholtz-Media的媒体库,但是Ammonia + Water是一种混合物。 你得到了许多不明确可解的方程式。
由于Modelica中的Media和Fluid库的结构,我需要能够从p,h和x获得我的热力学状态。状态向量由d,T和x组成。
这是一个如何获取state-vector的简单示例:
model getState_phX
parameter AbsolutePressure p = 500000 "pressure";
parameter SpecificEnthalpy h = 2500000 "enthalpy";
parameter SI.MassFraction x = 0.7 "mole fraction of amonia";
parameter Real[2] start = getStart_Td_phx(p,h,xL);
output ThermodynamicState state(d(start=start[2]),T(start=start[1]),X={(1 - xL),xL});
DerivateFull f = Derivates(state);
equation
p = (1 + f.delta*f.phirdelta)*R*state.T*state.d/molarMass(state);
h = state.T*R*(1 + f.delta*f.phirdelta + f.tau*f.phirtau + f.tau0*f.phi0tau0)/molarMass(state);
end getState_phX;
请不要介意方程的各个部分。它们由依赖于状态向量的许多部分(总和和日志)组成。 这是由Dymola的求解器解决的,具有良好的起始值。 但我并不需要Dassl的所有“时间依赖”解决能力。
在没有求解器的情况下,是否有用于解决此类固定方程系统的库? 是否可以使用这些函数从这个模型中创建一个函数?
我知道我可以手工编写一个简单的求解器但是对于媒体模型(VLE)的其他部分我也需要高度可靠的固定求解器(但有4个非线性独立方程)
如果我没有清楚地解释自己,请告诉我。谢谢你的帮助。
答案 0 :(得分:1)
流体属性库的基础是前向部分,即实际的亥姆霍兹能量状态方程(EoS)。它需要d,T,X
作为输入。这部分或多或少地要实施
如果要使用p,h,X
指定热力学状态,或者如果要在多个阶段之间找到平衡点,通常会建立一个重复函数系统,并尝试使用迭代函数找到方程组的根程序。 Span (2000)写道
"制定可靠的迭代程序[用于根发现] 在设置程序包时,这通常是最关键的问题 对状态方程的评估"。
重新使用现有的求解器有优点和缺点,它们通常经过很好的测试,编写它们需要花费很多精力,但如果你编写自己的求解器,你就可以更好地控制它的作用。据我所知,达斯尔有各种各样的力量,但解决这种方程并不是它最初的目标。
Olson, Tummescheit and Elmqvist (2005)尝试使用Dymola解算器查找VLE,请参阅链接pdf的第3.2节。听起来很有效,但不太可靠
MSL已经包含一个基于Brent算法的非线性求解器,它仅使用一个未知算法,参见Modelica.Math.Nolinear.solveOneNonlinearEquation
。如果需要,您可以添加其他通用解算器。
在编写自己的求解器之前,您应该联系Modelica.Media
接口的开发人员(将在MSL的未来版本中进行扩展,以包含多组分,多阶段混合)并考虑重新使用现有的流体属性库,如RefProp,CoolProp,FluidProp或MultiFlash,仅举几例。