初始化时仅求解方程式系统一次

时间:2020-03-19 09:29:11

标签: modelica

我需要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;

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

相关问题