Combustion Unit Operations

In addition to suppling thermodynamic and transport routines, JSteam also provides a suite of models (known as unit operations) for modelling subsystems and equipment within heat and power plants. This page covers the combustion operations, which relies on the Mixture Thermodynamics and Steam Thermodynamics functionality included in JSteam.

To view available unit operations, use JSteamMEX('help') under the COMBUSTION UNIT OPERATIONS heading. They are grouped as follows:

Boilers
A natural gas fired boiler model which superheats water into steam, including computing combustion products.
Furnaces
Natural gas fired furnace models which compute combustion products.
Gas Turbines & HRSGs
Gas Turbine and Heat Recovery Steam Generator (HRSG) models.

Example: Fired Boiler

As per the help page in the JSteam Excel Help Manual Examples/JSteam Excel Help.chm:

The fired boiler calculates the required fuel and air flow to generate the specified amount of steam, at a given temperature and pressure. The air flow is calculated from a specified fraction of the inlet or stack O2.

From the JSteamMEX Help print out:

[status,StmH,BFWM,airM,fuelM,FEff,Duty,Stack] = JSteamMEX('UnitOp_BoilerFired',BFWH,StmM,StmT,StmP,BDr,{Fuel_Mixture},fuelT,airT,airP,airRelHum,minStackT,O2,O2Mode)

and following Examples/JSteam_UnitOps.m:

% Inputs
BFWT = 25;   % Inlet Boiler Feed Water Temperature [C]
BFWP = 5;    % Inlet Boiler Feed Water Pressure [bar]
BFWH = JSteamMEX('HPT',BFWP,BFWT); % Inlet Boiler Feed Water Enthalpy [kJ/kg]

StmM = 5;    % Outlet Steam Mass Flow Rate [tonne/h]
StmT = 410;  % Outlet Steam Temperature [C]
StmP = 42;   % Outlet Steam Pressure [bar]

BDr  = 0.01; % Blowdown Ratio [fraction]

fuel = JSteamMEX('TypNatGas'); % Typical Natural Gas mixture
fuelT = -20; % Fuel Temperature [C]
airT = 30;   % Air Temperature [C]
airP = JSteamMEX('OneAtm'); % Air Pressure [bar]
airRelHum = 0.5; % Air Relative Humidity [fraction]

minStackT = 200; % Minimum Stack Temperature [C]
O2   = 0.01;     % Minimum Stack O2 Mole Fraction
O2Mode = 1;      % 0 Inlet Spec, 1 Outlet Spec

[status,StmH,BFWM,airM,fuelM,FEff,Duty,Stack] = JSteamMEX('UnitOp_BoilerFired',BFWH,StmM,StmT,StmP,BDr,fuel,fuelT,airT,airP,airRelHum,minStackT,O2,O2Mode)

the routine will calculate the Steam Enthalpy (StmH), Boiler Feed Water Mass Flow Rate (BFWM), Air Mass Flow Rate (airM), Fuel Mass Flow Rate (fuelM), Firing Efficiency (FEff), Duty (Duty) and Stack (combustion products) Mole Fractions (Stack). It will also return a status code, where 1 is success, and 0 and below is a failure.

Example: Gas Turbine with Steam Injection Coupled to HRSG with Supplementary Firing

As per the help page in the JSteam Excel Help Manual Examples/JSteam Excel Help.chm:

The Gas Turbine Injected is a simple Gas Turbine Generator (GTG) model which calculates the required fuel and air flows to generate the specified power, at a given equipment efficiency and steam injection conditions. It is coupled in this example to a Heat Recovery Steam Generator (HRSG) with secondary firing enable to generate steam using the waste heat from the Gas Turbine exhaust together with supplementary fuel.

From the JSteamMEX Help print out:

[status,airM,fuelM,exhaustM,Exhaust] = JSteamMEX('UnitOp_GasTurbineInj',{Fuel_Mixture},fuelT,airT,airP,airRelHum,exhaustT,presRatio,compEff,StmT,StmP,StmM,GTPower,GTEff)
[status,StmM,BaseStmM,MaxStmM,SecFuelM,econDT,sprHDT,stackT,stackM,Stack] = JSteamMEX('UnitOp_HRSGSup',{GT_Exhaust},{SecFuel_Mixture},OpMode,exhaustT,exhaustM,secFuelT,minAppT,minStackT,minStackO2,StmDemand,BFWH,StmT,StmP,BDr)

and following Examples/JSteam_UnitOps.m:

% Gas Turbine Inputs
fuel  = {'Methane',0.9;'Ethane',0.08;'Propane',0.02};   % Fuel Mixture Mole Fractions
fuelT = -20;     % Fuel Temperature [C]
airT  = 30;      % Air Temperature [C]
airP  = 1.01325; % Air Pressure [bar]
airRelHum = 0.5; % Air Relative Humidity [fraction]

exhaustT = 500;  % GTG Exhaust Temperature [C]
presRatio = 20;  % Ratio of inlet to outlet compressure pressure
compEff  = 0.75; % Compressor Isentropic Efficiency [fraction]

StmT = 410;      % Injected Steam Temperature [C]
StmP = 42;       % Injected Steam Pressure [bar]
StmM = 1;        % Injected Steam Mass Flow Rate [tonne/hr]

GTPower = 15000; % GTG Output Power [kW]
GTEff = 0.3;     % GTG Overall Mechanical+Electrical Efficiency [fraction]

% Solve Gas Turbine
[status,airM,fuelM,exhaustM,Exhaust] = JSteamMEX('UnitOp_GasTurbineInj',fuel,fuelT,airT,airP,airRelHum,exhaustT,presRatio,compEff,StmT,StmP,StmM,GTPower,GTEff)

the routine will compute the required Air Mass Flow (airM) and Fuel Mass Flow (fuelM), in order to generate the required GTG output power, together with the Exhaust Mass Flow (exhaustM) and Exhaust Mixture Mole Fraction (Exhaust). These exhaust values can then be used with the HRSG model:

% HRSG Inputs
secFuel    = fuel;  % Assume same fuel for both units
secFuelT   = fuelT;
OpMode     = 1;     % 0 Base Load Only, 1 Meet Demand, 2 Maximum Firing

minAppT    = 30;    % Minimum internal delta-T [C]
minStackT  = 200;   % Minimum stack temperature [C]
minStackO2 = 0.01;  % Minimum stack O2 mole fraction

StmDemand  = 50;    % Steam Demand [tonne/hr]
StmT       = 410;   % Steam Temperature [C]
StmP       = 42;    % Steam Pressure [bar]
BFWH       = 350;   % Boiler Feed Water Enthalpy [kJ/kg]
BDr        = 0.01;  % Blowdown Ratio

[status,StmM,BaseStmM,MaxStmM,SecFuelM,econDT,sprHDT,stackT,stackM,Stack] = JSteamMEX('UnitOp_HRSGSup',Exhaust,secFuel,OpMode,exhaustT,exhaustM,secFuelT,minAppT,minStackT,minStackO2,StmDemand,BFWH,StmT,StmP,BDr)

the routine will calculate the Steam Mass Flow Rate(StmM), Base Load (no firing) Steam Mass Flow Rate (BaseStmM), Maximum Firing (limited by Stack Temperature and Stack O2 Fraction) Steam Flow Rate (MaxStmM), Secondary Fuel Mass Flow Rate (SecFuelM), Economiser delta-T (econDT), Super Heater delta-T (sprHDT), Stack Temperature (stackT), Stack Mass Flow Rate (stackM), and Stack (combustion products) Mole Fractions (Stack). It will also return a status code, where 1 is success, and 0 and below is a failure.

As the most complex set of models in this example, there are a range of operating points that have no solution, or no solution that meets the requirements. For example, changing the GTG Exhaust Temperature from 500C to 300C will leave the HRSG unable to meet the target steam demand (50 tonne/hr) without breaking the Economiser delta-T constraint (30C). In this case, the model returns a status code of 10 (still "successful" as positive), but has found a steam mass flow rate that satisfies the Economiser delta-T constraint, but it is higher than requested.