Modelica.Fluid.Examples.DrumBoiler.BaseClasses

Additional components for drum boiler example

Information

Extends from Modelica.Fluid.Icons.BaseClassLibrary (Icon for library).

Package Content

NameDescription
Modelica.Fluid.Examples.DrumBoiler.BaseClasses.EquilibriumDrumBoiler EquilibriumDrumBoiler Simple Evaporator with two states, see Astroem, Bell: Drum-boiler dynamics, Automatica 36, 2000, pp.363-378


Modelica.Fluid.Examples.DrumBoiler.BaseClasses.EquilibriumDrumBoiler Modelica.Fluid.Examples.DrumBoiler.BaseClasses.EquilibriumDrumBoiler

Simple Evaporator with two states, see Astroem, Bell: Drum-boiler dynamics, Automatica 36, 2000, pp.363-378

Modelica.Fluid.Examples.DrumBoiler.BaseClasses.EquilibriumDrumBoiler

Information


Model of a simple evaporator with two states. The model assumes two-phase equilibrium inside the component; saturated steam goes out of the steam outlet.

References: Astroem, Bell: Drum-boiler dynamics, Automatica 36, 2000, pp.363-378

Extends from Modelica.Fluid.Interfaces.PartialTwoPort (Partial component with two ports).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Massm_D mass of surrounding drum metal [kg]
SpecificHeatCapacitycp_D specific heat capacity of drum metal [J/(kg.K)]
VolumeV_t total volume inside drum [m3]
Assumptions
BooleanallowFlowReversalsystem.allowFlowReversal= true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Dynamics
DynamicsenergyDynamicssystem.energyDynamicsFormulation of energy balance
DynamicsmassDynamicssystem.massDynamicsFormulation of mass balance
Initialization
AbsolutePressurep_startsystem.p_startStart value of pressure [Pa]
VolumeV_l_startV_t/2Start value of liquid volumeStart value of volume [m3]

Connectors

TypeNameDescription
replaceable package MediumMedium in the component
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
HeatPort_aheatPort 
output RealOutputVliquid volume

Modelica definition

model EquilibriumDrumBoiler 
  "Simple Evaporator with two states, see Astroem, Bell: Drum-boiler dynamics, Automatica 36, 2000, pp.363-378"
  extends Modelica.Fluid.Interfaces.PartialTwoPort(
    final port_a_exposesState=true,
    final port_b_exposesState=true,
    redeclare replaceable package Medium = 
        Modelica.Media.Water.StandardWater 
        constrainedby Modelica.Media.Interfaces.PartialTwoPhaseMedium);
  import Modelica.SIunits.Conversions.*;
  import Modelica.Constants;
  import Modelica.Fluid.Types;

  parameter SI.Mass m_D "mass of surrounding drum metal";
  parameter Medium.SpecificHeatCapacity cp_D 
    "specific heat capacity of drum metal";
  parameter SI.Volume V_t "total volume inside drum";
  parameter Medium.AbsolutePressure p_start=system.p_start 
    "Start value of pressure";
  parameter SI.Volume V_l_start=V_t/2 
    "Start value of liquid volumeStart value of volume";

  // Assumptions
  parameter Boolean allowFlowReversal = system.allowFlowReversal 
    "allow flow reversal, false restricts to design direction (port_a -> port_b)";
  parameter Types.Dynamics energyDynamics=system.energyDynamics 
    "Formulation of energy balance";
  parameter Types.Dynamics massDynamics=system.massDynamics 
    "Formulation of mass balance";

  Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort;
  Modelica.Blocks.Interfaces.RealOutput V "liquid volume";

  Medium.SaturationProperties sat 
    "State vector to compute saturation properties";
  Medium.AbsolutePressure p(start=p_start, stateSelect=StateSelect.prefer) 
    "pressure inside drum boiler";
  Medium.Temperature T "temperature inside drum boiler";
  SI.Volume V_v "volume of vapour phase";
  SI.Volume V_l(start=V_l_start, stateSelect=StateSelect.prefer) 
    "volumes of liquid phase";
  Medium.SpecificEnthalpy h_v=Medium.dewEnthalpy(sat) 
    "specific enthalpy of vapour";
  Medium.SpecificEnthalpy h_l=Medium.bubbleEnthalpy(sat) 
    "specific enthalpy of liquid";
  Medium.Density rho_v=Medium.dewDensity(sat) "density in vapour phase";
  Medium.Density rho_l=Medium.bubbleDensity(sat) "density in liquid phase";
  SI.Mass m "total mass of drum boiler";
  SI.Energy U "internal energy";
  Medium.Temperature T_D=heatPort.T "temperature of drum";
  SI.HeatFlowRate q_F=heatPort.Q_flow "heat flow rate from furnace";
  Medium.SpecificEnthalpy h_W=inStream(port_a.h_outflow) 
    "Feed water enthalpy (specific enthalpy close to feedwater port when mass flows in to the boiler)";
  Medium.SpecificEnthalpy h_S=inStream(port_b.h_outflow) 
    "steam enthalpy (specific enthalpy close to steam port when mass flows in to the boiler)";
  SI.MassFlowRate qm_W=port_a.m_flow "feed water mass flow rate";
  SI.MassFlowRate qm_S=port_b.m_flow "steam mass flow rate";
/*outer Modelica.Fluid.Components.FluidOptions fluidOptions
    "Global default options";*/
equation 
// balance equations
  m = rho_v*V_v + rho_l*V_l + m_D "Total mass";
  U = rho_v*V_v*h_v + rho_l*V_l*h_l - p*V_t + m_D*cp_D*T_D "Total energy";
  if massDynamics == Types.Dynamics.SteadyState then
    0 = qm_W + qm_S "Steady state mass balance";
  else
    der(m) = qm_W + qm_S "Dynamic mass balance";
  end if;
  if energyDynamics == Types.Dynamics.SteadyState then
    0 = q_F + port_a.m_flow*actualStream(port_a.h_outflow)
            + port_b.m_flow*actualStream(port_b.h_outflow) 
      "Steady state energy balance";
  else
    der(U) = q_F
            + port_a.m_flow*actualStream(port_a.h_outflow)
            + port_b.m_flow*actualStream(port_b.h_outflow) 
      "Dynamic energy balance";
  end if;
  V_t = V_l + V_v;

// Properties of saturated liquid and steam
  sat.psat = p;
  sat.Tsat = T;
  sat.Tsat = Medium.saturationTemperature(p);

// ideal heat transfer between metal and water
  T_D = T;

// boundary conditions at the ports
  port_a.p = p;
  port_a.h_outflow = h_l;
  port_b.p = p;
  port_b.h_outflow = h_v;

// liquid volume
  V = V_l;

// Check that two-phase equilibrium is actually possible
  assert(p < Medium.fluidConstants[1].criticalPressure - 10000,
    "Evaporator model requires subcritical pressure");
initial equation 
// Initial conditions
  // Note: p represents the energy as it is constrained by T_sat
  if energyDynamics == Types.Dynamics.FixedInitial then
    p = p_start;
  elseif energyDynamics == Types.Dynamics.SteadyStateInitial then
    der(p) = 0;
  end if;

  if massDynamics == Types.Dynamics.FixedInitial then
    V_l = V_l_start;
  elseif energyDynamics == Types.Dynamics.SteadyStateInitial then
    der(V_l) = 0;
  end if;

end EquilibriumDrumBoiler;

HTML-documentation generated by Dymola Sun Jan 17 21:11:53 2010.