Name | Description |
---|---|
![]() | Controller of the heat source |
![]() | Pressure source |
![]() | Liquid source |
steamPowerBoiler | Industrial boiler model |
![]() | Valve |
![]() | Class modeling the boiling TP |
Class modeling the heat source controller. This class inherits from interf.sourceHeatSignalI. The interactive variables of the model are shown in Table 1.
Table 1. Interactive variables.heatFlowSP | Heat flow set-point. |
Type | Name | Default | Description |
---|---|---|---|
Boolean | Ejs | false | |
Boolean | Sysquake | false |
Type | Name | Description |
---|---|---|
cutEmitter | setPointSignal | Setpoint of the heat flow |
model heatSourCntrl "Controller of the heat source" extends interf.sourceHeatSignalI; Real heatFlowSP(start=0, fixed=true); outer parameter Boolean Ejs = false; outer parameter Boolean Sysquake = false; equation heatFSP = heatFlowSP; if (Ejs) then der(heatFlowSP) = 0; end if; end heatSourCntrl;
Class modeling the heat source controller. This class inherits from gas.sourcePressGasB. The interactive variables of the model are shown in Table 1.
Table 1. Interactive variables.pressG | Gas pressure. |
tempG | Gas temperature. |
Type | Name | Default | Description |
---|---|---|---|
Integer | nComp | 1 | Number of components |
Real | pressGinitial | Gas pressure [M.L-1.t-2] | |
Real | tempGinitial | Gas temperature [T] | |
Boolean | Ejs | false | Batch interactivity |
Boolean | Sysquake | false | Runtime interactivity |
Boolean | atm | false | Visualize the pressure in atm. |
Type | Name | Description |
---|---|---|
cutGasC | inMol | Gas flow - Connector Capacitive |
cutHeatMC | inHeat | Heat flow - Connector M-C |
model pressDownStream "Pressure source" extends gas.sourcePressGasB(nComp=1); parameter Real pressGinitial( unit="M.L-1.t-2") "Gas pressure"; parameter Real tempGinitial( unit="T") "Gas temperature"; Real pressG( unit="M.L-1.t-2", start=pressGinitial); Real tempG( unit="T", start=tempGinitial); outer parameter Boolean Ejs = false "Batch interactivity"; outer parameter Boolean Sysquake = false "Runtime interactivity"; parameter Boolean atm = false "Visualize the pressure in atm."; equation inMol.molG = { 1}; inMol.pressG = if (atm) then pressG*101325 else pressG; inMol.tempG = tempG; if (Ejs) then der(pressG) = 0; der(tempG) = 0; end if; end pressDownStream;
Class modeling the input liquid source. This class inherits from interf.sourceVolLiqSignalI. The interactive variables of the model are shown in Table 1.
Table 1. Interactive variables.flowVSP | Setpoint of the volumetric flow. |
tempSP | Setpoint of the flow temperature. |
Type | Name | Default | Description |
---|---|---|---|
Integer | nComp | 1 | Number of components |
Boolean | Ejs | false | Global variable - Runtime interactivity |
Boolean | Sysquake | false | Global variable - Batch interactivity |
Type | Name | Description |
---|---|---|
cutEmitter | setPointSignal | Set-point of the total volumetric flow, component volume fraction and temperature |
model sourceLiqCntrl "Liquid source" extends interf.sourceVolLiqSignalI(nComp=1); Real flowVSP( unit="L3.t-1", start=0) "Setpoint of the volumetric flow"; Real tempSP( unit="T", start=297) "Setpoint of the flow temperature"; outer parameter Boolean Ejs = false "Global variable - Runtime interactivity"; outer parameter Boolean Sysquake = false "Global variable - Batch interactivity"; equation totalVolFSP = flowVSP; volFractSP = {1}; tempFSP = tempSP; if (Ejs) then der(flowVSP) = 0; der(tempSP) = 0; end if; end sourceLiqCntrl;
The mathematical model of the boiler is found in (Ramirez 1989). The input of liquid water is placed at the boiler bottom, and the vapor output valve is placed at the top. The output valve has the following constitutive equation: Fm = (F0)*sqrt(p(p-p0)), where p0 is the valve output pressure. The water contained in the boiler is continually heated. Two control volumes are considered:
The vapor volume is equal to the difference between the boiler-recipient inner volume and the water volume. The boiling is a transport phenomena represented by a model connecting both control volumes. The heat-flow into the boiler, the pressure at the valve output and the water pump are modeled using JARA2i source models.
W.F. Ramirez (1989): Computational Methods for Process Simulation. Butterworths Publishers, Boston, USA.
Type | Name | Default | Description |
---|---|---|---|
Boolean | Ejs | true | Global variable - Runtime interactiviy |
Boolean | Sysquake | false | Global variable - Batch interactivity |
Real | perfGasConst | 8.31 | Constant of the perfect gases [J/(mol*K)] |
Real | CpCoefML[1, 7] | [4.18E3, 0, 0, 0, 0, 0, 0] | Heat capacity per mass unit of the liquid. [Cp]: J/(Kg*K) |
Real | CpCoefNG[1, 7] | [55.486, 54.24E-3, 0, 0, 0, ... | Molar heat capacity, at constant pressure, of the vapor. [Cp]:J/(mol*K) |
Real | molecWeigth[:] | {18E-3} | Molecular weigth of the water [Kg/mol] |
Real | density[:] | {1E3} | Density of liquid water [Kg/m3] |
Real | molEnthalpyGRef[:] | {-241.8322E3} | Reference molar enthalpy of the vapor [J/mol] |
Real | massEnthalpyLRef[:] | {-15.88E6} | Reference enthalpy per mass unit of the liquid [J/Kg] |
Real | tempRef | 298 | Enthalpy reference temperature [K] |
Real | Kprop | 10 | Parameter of the boiling model [Kg/(s*K)] |
Real | Kvalve | (1.1E-7/molecWeigth[1]) | Valve coefficient [mol/(s*N/m**2)] |
Real | pressDownStreamInitial | 1.14E6 | Output pressure [N/m**2] |
Real | tempDownStreamInitial | 294 | Output temperature [K] |
Real | sectionInitial | 1 | Boiler cross-section [m2] |
Real | vesselVolumeInitial | 5.66 | Boiler volume [m3] |
Real | molVaporInitial[:] | {1200} | [mol] |
Real | tempVaporInitial | 700 | [K] |
Real | massWaterInitial[:] | {2840} | [Kg] |
Real | tempWaterInitial | 294 | [K] |
model steamPowerBoiler "Industrial boiler model" // Interactivity inner parameter Boolean Ejs = true "Global variable - Runtime interactiviy"; inner parameter Boolean Sysquake = false "Global variable - Batch interactivity"; parameter Real perfGasConst( unit="J/(mol*K)") = 8.31 "Constant of the perfect gases"; parameter Real CpCoefML[1,7] = [ 4.18E3, 0, 0, 0, 0, 0, 0] "Heat capacity per mass unit of the liquid. [Cp]: J/(Kg*K)"; parameter Real CpCoefNG[1,7] = [ 55.486, 54.24E-3, 0, 0, 0, 0, 0] "Molar heat capacity, at constant pressure, of the vapor. [Cp]:J/(mol*K)"; parameter Real molecWeigth[:]( unit="Kg/mol") = {18E-3} "Molecular weigth of the water"; parameter Real density[:]( unit="Kg/m3") = {1E3} "Density of liquid water"; parameter Real molEnthalpyGRef[:]( unit="J/mol") = {-241.8322E3} "Reference molar enthalpy of the vapor"; parameter Real massEnthalpyLRef[:]( unit="J/Kg") = {- 15.88E6} "Reference enthalpy per mass unit of the liquid"; parameter Real tempRef( unit="K") = 298 "Enthalpy reference temperature"; parameter Real Kprop( unit="Kg/(s*K)") = 10 "Parameter of the boiling model"; parameter Real Kvalve( unit="mol/(s*N/m**2)") = ( 1.1E-7 / molecWeigth[1]) "Valve coefficient"; parameter Real pressDownStreamInitial( unit="N/m**2") = 1.14E6 "Output pressure"; parameter Real tempDownStreamInitial( unit="K") = 294 "Output temperature"; parameter Real sectionInitial( unit="m2") = 1 "Boiler cross-section"; parameter Real vesselVolumeInitial( unit="m3") = 5.66 "Boiler volume"; parameter Real molVaporInitial[:]( unit="mol") = {1200}; parameter Real tempVaporInitial( unit="K") = 700; parameter Real massWaterInitial[:]( unit="Kg") = {2840}; parameter Real tempWaterInitial( unit="K") = 294; gas.semiPerfGasCp6B vapor( nComp=1,perfGasConst=perfGasConst,CpCoefN=CpCoefNG, tempRef=tempRef,molEnthalpyRef=molEnthalpyGRef, molGinitial=molVaporInitial,tempGinitial=tempVaporInitial); liq.liquidCp6B water( nComp=1,CpCoefMInitial=CpCoefML, massEnthalpyRefInitial = massEnthalpyLRef, tempRefInitial=tempRef,densityInitial=density, sectionInitial = sectionInitial, massLinitial=massWaterInitial,tempLinitial=tempWaterInitial); liq.vesselLiqB vessel( vesselVolumeInitial=vesselVolumeInitial); waterBoil boil( nComp=1,CpCoefML=CpCoefML,CpCoefNG=CpCoefNG,Kprop=Kprop, molecWeigth=molecWeigth,molEnthalpyGRef=molEnthalpyGRef, massEnthalpyLRef=massEnthalpyLRef,tempRef=tempRef); heat.sourceHeatFB heatSource( nComp=1); heatSourCntrl heatSourceCntrl; valve valveG( Kv=Kvalve,CpCoefN=CpCoefNG,molEnthalpyRef=molEnthalpyGRef, tempRef=tempRef); pressDownStream outValvePress( pressGinitial=pressDownStreamInitial, tempGinitial = tempDownStreamInitial); liq.sourceVolLiqFB liqSource( nComp=1, densityInitial=density, CpCoefMInitial=CpCoefML,tempRefInitial=tempRef,pmax=1E8, pcodo=9.5E7,pmin=100, peps=50, massEnthalpyRefInitial = massEnthalpyLRef); sourceLiqCntrl sourceLiqCtrl; equation // Mass flow connect( vapor.inMol, boil.outMol); connect( water.inMassTop, boil.inMass); connect( vapor.inMol, valveG.inMol); connect( outValvePress.inMol, valveG.outMol); connect( liqSource.inMass, water.inMassBot); // Volume constraint connect( vapor.constraintV, vessel.constraintV); connect( water.constraintV, vessel.constraintV); // Heat flow connect( heatSource.inHeat, water.inHeat); // Control signals connect( heatSource.setPointSignal, heatSourceCntrl.setPointSignal); connect( liqSource.setPointSignal, sourceLiqCtrl.setPointSignal); end steamPowerBoiler;
Class modeling the valve. This class inherits from gas.convecGasFlowB. The interactive variables of the model are shown in Table 1.
Table 1. Interactive variables.valveOpening | Opening of the valve (0: closed, 1: opened). The variable value is in the range [0,1]. |
Type | Name | Default | Description |
---|---|---|---|
Integer | nComp | 1 | Number of components |
Real | CpCoefN[nComp, 7] | Coefficients of the molar heat capacity at constant pressure CpMol[i] = CpCoefN[i,1] + CpCoefN[i,2]*T + ... + CpCoefN[i,7]*T**6 | |
Real | eps | 1.E-10 | Small constant to avoid by-zero division |
Real | molEnthalpyRef[nComp] | zeros(nComp) | Molar enthalpy of the components at the reference temperature [M.L2.t-2.mol-1] |
Real | tempRef | 298 | Reference temperature for enthalpy [T] |
Real | Kv | Valve parameter [mol.L.t.M-1] | |
Boolean | Ejs | false | Global variable - Runtime interactivity |
Boolean | Sysquake | false | Global variable - Batch interactivity |
Type | Name | Description |
---|---|---|
cutGasR | inMol | Gas flow - Connector Resistive. |
cutGasR | outMol | Gas flow - Connector Resistive. |
cutHeatFC | inHeat | Heat flow - Connector F-C. Connector for the heat convection. |
model valve "Valve" extends JARA2i.gas.convecGasFlowB(nComp=1); parameter Real Kv( unit="mol.L.t.M-1") "Valve parameter"; Real valveOpening( min=0, max=1, start=1) "Valve opening"; outer parameter Boolean Ejs = false "Global variable - Runtime interactivity"; outer parameter Boolean Sysquake = false "Global variable - Batch interactivity"; equation if (Ejs) then der(valveOpening) = 0; end if; // Valve constitutive relation totalMolF = if inMol.pressG > outMol.pressG then valveOpening * Kv * sqrt( abs( inMol.pressG * ( inMol.pressG - outMol.pressG))) else - valveOpening * Kv * sqrt( abs( outMol.pressG * ( outMol.pressG - inMol.pressG))); end valve;
Class modeling the boiling TP. This class inherits from phase.boilingB.
Type | Name | Default | Description |
---|---|---|---|
Integer | nComp | 1 | Number of components |
Real | massEnthalpyLRef[nComp] | zeros(nComp) | Specific (per mass) enthalpy of the liquid components at the reference temperature [L2.t-2] |
Real | molEnthalpyGRef[nComp] | zeros(nComp) | Specific (per mol) enthalpy of the gas components at the reference temperature [M.L2.t-2.mol-1] |
Real | tempRef | 298 | Reference temperature for the enthalpy [T] |
Real | CpCoefML[nComp, 7] | Liquid components: coefficients of the specific (per mass) heat capacity Cp unit: L2.t-2.T-1 Cp[i] = CpCoef[i,1] + CpCoef[i,2]*T + ... + CpCoef[i,7]*T**6 | |
Real | CpCoefNG[nComp, 7] | Vapor components: coefficients of the specific (per mol) heat capacity at constant pressure. Cp unit: M.L2.t-2.T-1.mol-1 Cp[i] = CpCoef[i,1] + CpCoef[i,2]*T + ... + CpCoef[i,7]*T**6 | |
Real | molecWeigth[nComp] | Molecular weigth of the components [M.mol-1] | |
Real | eps | 1E-8 | Small constant to avoid by-zero division |
Real | Kprop | [M.t-1.T-1] | |
Real | table[:, :] | [10010, 98.47691660773307; 2... |
Type | Name | Description |
---|---|---|
cutLiquidR | inMass | Liquid flow - Connector R. Connector for the liquid flow. |
cutGasR | outMol | Gas flow - Connector Resistive. |
model waterBoil "Class modeling the boiling TP" extends JARA2i.phase.boilingB(nComp=1); parameter Real table[:, :]=[10010, 98.47691660773307; 20010, 148.4269176476954; 30010, 177.6475879801146; 40010, 198.378622659501; 50010, 214.4574123694938; 60010, 227.5934932453431; 70010, 238.6988467456249; 80010, 248.3178618525062; 90010, 256.801684968388; 100010, 264.3900766701888; 200010, 314.2940809594901; 300010, 343.466911284551; 400010, 364.1541447980703; 500010, 380.1926978867681; 600010, 393.2913686792779; 700010, 404.3615582598954; 800010, 413.9472257811304; 900010, 422.3991972846422; 1000010, 429.9569899434075; 2000010, 479.595940075578; 3000010, 508.5400329259396; 4000010, 529.0136178250616; 5000010, 544.8454909944244; 6000010, 557.7403004267688; 7000010, 568.6069510036199; 8000010, 577.987726208682; 9000010, 586.2322315086598; 10000010, 593.5790361179787]; Modelica.Blocks.Tables.CombiTable1D calcBoilingTemp(table=table); // Real x (start= 373, fixed=false) , y; equation calcBoilingTemp.u[1] = outMol.pressG; calcBoilingTemp.y[1] = tempBoiling; compVaporBoil = { 1}; assert( outMol.pressG > 1e4, "The model of the boiling process is outside of its experimental frame"); end waterBoil;