我需要Modelica在初始化时仅一次求解变量的方程组。之后,变量“变成”一个参数并且不再更改。有什么办法可以做到这一点?
作为背景信息:我为一个简单的泵实现了modelica模型,该模型具有输入参数最大体积流量,最大流量下的系统压力损失,总管长和表面粗糙度。现在,我需要计算管道的相应(平均)水力直径,以便可以在正常模拟过程中估算可变体积流量下的压力损失。我正在使用Colebrook-White-Approach,所以我需要求解一个方程组。
代码如下所示。前缀var_
表示其变量,param_
表示其是已知参数。我需要var_d
。
// calculation of velocity and reynolds number
var_w_max = param_Q_max/(Pi/4*var_d^2);
var_Re_max = var_w_max*var_d/param_my;
// Colebrook-White approach
1/sqrt(var_lambda_max) = -2*log10(2.51/(var_Re_max*var_lambda_max)+param_k/(3.71*var_d));
param_p_loss = var_lambda_max*param_l/var_d*param_rho_h2o*var_w_max^2/2;
答案 0 :(得分:6)
如果要在开始时根据值计算参数,然后冻结它,则可以使用初始方程式。
例如如果要基于最后两个方程式计算param_p_loss和param_k,请执行以下操作:
parameter Real param_p_loss(fixed=false);
parameter Real param_k(fixed=false);
initial equation
1/sqrt(var_lambda_max) = -2*log10(2.51/(var_Re_max*var_lambda_max)+param_k/(3.71*var_d));
param_p_loss = var_lambda_max*param_l/var_d*param_rho_h2o*var_w_max^2/2;
equation
...
fixed = false表示参数最初需要求解。
答案 1 :(得分:2)
实际上,您可以在初始化期间求解参数值。线索在于修饰符fixed=false
。
下面是一个简单的压降示例,您可以在初始化期间求解液压直径以获得所需的标称质量流量。
model SolveParameter
parameter Modelica.SIunits.Diameter dh(fixed=false, start=0.1)
"Hydraulic diameter. Start attribute is guess value";
parameter Real k=0.06 "Roughness, pipe length etc. combined";
parameter Modelica.SIunits.MassFlowRate m_flow_nominal=2
"Nominal mass flow rate";
parameter Modelica.SIunits.PressureDifference dp=1e5
"Differential pressure (boundary condition)";
Modelica.SIunits.MassFlowRate m_flow "Time varying mass flow rate";
initial equation
m_flow = m_flow_nominal;
equation
m_flow = dh*k*sqrt(dp);
end SolveParameter;
如果直径是实例化类(管道模型)中的参数,则可以在实例化模型时应用fixed=false
,即
Modelica.Fluid.Pipes.DynamicPipe pipe(diameter(fixed=false));
最诚挚的问候,
Rene Just Nielsen