Class HRSG
- All Implemented Interfaces:
Serializable, Runnable, AutoSizeable, CapacityConstrainedEquipment, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface
Models a counter-current heat exchanger where hot exhaust gas from a gas turbine heats water/steam to produce superheated steam. The HRSG transfers heat from the gas-side inlet stream to produce a steam outlet at the specified conditions.
The model calculates the heat transfer based on the gas-side cooling and applies an effectiveness factor to determine the actual steam production rate for given steam conditions.
HRSG hrsg = new HRSG("HRSG-1", gasTurbineExhaust);
hrsg.setSteamPressure(40.0); // bara
hrsg.setSteamTemperature(400.0, "C"); // superheated
hrsg.setApproachTemperature(15.0); // K
hrsg.run();
double steamFlow = hrsg.getSteamFlowRate("kg/hr");
- Version:
- 1.0
- Author:
- Even Solbraa
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleprivate booleanWhether this equipment has been auto-sized.private final Map<String, CapacityConstraint> Storage for capacity constraints.private doubleDesign (maximum) heat transfer duty in Watts.private doubleprivate doubleprivate doubleprivate doubleprivate static final org.apache.logging.log4j.LoggerLogger object for class.private static final longSerialization version UID.private doubleprivate doubleprivate doubleFields inherited from class TwoPortEquipment
inStream, outStreamFields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
ConstructorsConstructorDescriptionConstructor for HRSG.HRSG(String name, StreamInterface hotGasInletStream) Constructor for HRSG with hot gas inlet stream (from gas turbine exhaust). -
Method Summary
Modifier and TypeMethodDescriptionvoidaddCapacityConstraint(CapacityConstraint constraint) Adds a capacity constraint to this equipment.voidautoSize(double safetyFactor) Automatically size the equipment based on connected stream conditions.voidClears all capacity constraints from this equipment.private doubleestimateFeedWaterEnthalpy(double temperature) Estimate feed water specific enthalpy.private doubleestimateSteamEnthalpy(double pressure, double temperature) Estimate steam specific enthalpy using simplified correlation.Gets the bottleneck (most limiting) constraint for this equipment.Gets all capacity constraints defined for this equipment.doublegetCapacityDuty.doublegetCapacityMax.doubleGet the design (maximum) heat transfer duty.doublegetDesignHeatDuty(String unit) Get the design (maximum) heat transfer duty in specified unit.doubleGet gas outlet temperature.doubleGet heat transferred from gas to steam.doublegetHeatTransferred(String unit) Get heat transferred in specified unit.doubleGets the maximum utilization across all enabled constraints.Get a detailed sizing report after auto-sizing.doubleGet the calculated steam flow rate.doublegetSteamFlowRate(String unit) Get steam flow rate in specified unit.private voidInitialize capacity constraints for the HRSG.booleanCheck if equipment has been auto-sized.booleanChecks if any capacity constraint is violated (exceeds 100% utilization).booleanChecks if any HARD constraint limit is exceeded.booleanremoveCapacityConstraint(String constraintName) Removes a capacity constraint by name.voidIn this method all thermodynamic and unit operations will be calculated in a steady state calculation.voidsetApproachTemperature(double approachTemp) Set approach temperature (minimum temperature difference at pinch).voidsetDesignHeatDuty(double designHeatDuty) Set the design (maximum) heat transfer duty.voidsetDesignHeatDuty(double designHeatDuty, String unit) Set the design (maximum) heat transfer duty with unit.voidsetEffectiveness(double effectiveness) Set heat transfer effectiveness.voidsetFeedWaterTemperature(double temperature) Set feed water temperature.voidsetFeedWaterTemperature(double temperature, String unit) Set feed water temperature with unit.voidsetSteamPressure(double pressure) Set steam pressure.voidsetSteamTemperature(double temperature) Set steam temperature.voidsetSteamTemperature(double temperature, String unit) Set steam temperature with unit.Methods inherited from class TwoPortEquipment
getInletPressure, getInletStream, getInletStreams, getInletTemperature, getMassBalance, getOutletPressure, getOutletStream, getOutletStreams, getOutletTemperature, setInletPressure, setInletStream, setInletTemperature, setOutletPressure, setOutletPressure, setOutletStream, setOutletTemperature, setOutletTemperature, toJson, toJson, validateSetupMethods inherited from class ProcessEquipmentBaseClass
addController, copy, displayResult, equals, getAvailableMargin, getAvailableMarginPercent, getConditionAnalysisMessage, getConstraintEvaluationReport, getController, getController, getControllers, getEffectiveCapacityFactor, getEnergyStream, getEntropyProduction, getExergyChange, getFailureMode, getMassBalance, getMaxUtilizationPercent, getMechanicalDesign, getMinimumFlow, getPressure, getPressure, getProperty, getReferenceDesignation, getReport_json, getResultTable, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initializeDefaultConstraints, initInstrumentDesign, initMechanicalDesign, isActive, isActive, isCapacityAnalysisEnabled, isFailed, isNearCapacityLimit, isSetEnergyStream, reportResults, restoreFromFailure, run_step, runConditionAnalysis, setCapacityAnalysisEnabled, setController, setEnergyStream, setEnergyStream, setFailureMode, setFlowValveController, setMinimumFlow, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, simulateDegradedOperation, simulateTrip, solvedMethods inherited from class SimulationBaseClass
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from class NamedBaseClass
getName, getTagNumber, setName, setTagNumberMethods inherited from class Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface AutoSizeable
autoSize, autoSize, getSizingReportJsonMethods inherited from interface CapacityConstrainedEquipment
disableAllConstraints, enableAllConstraints, getAvailableMargin, getAvailableMarginPercent, getMaxUtilizationPercent, getUtilizationSummary, isCapacityAnalysisEnabled, isNearCapacityLimit, setCapacityAnalysisEnabledMethods inherited from interface NamedInterface
getName, getTagName, getTagNumber, setName, setTagName, setTagNumberMethods inherited from interface ProcessEquipmentInterface
getElectricalDesign, getEquipmentState, getExergyChange, getExergyDestruction, getExergyDestruction, getFluid, getInstrumentDesign, getOperatingEnvelopeViolation, getOutletFlowRate, getOutletPressure, getOutletTemperature, getReferenceDesignationString, getRestCapacity, getSimulationValidationErrors, isSimulationValid, isWithinOperatingEnvelope, needRecalculationMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, runTransient, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from interface TwoPortInterface
getInStream, getOutStream, setOutPressure, setOutPressure, setOutTemperature, setOutTemperature
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object for class. -
steamPressure
private double steamPressure -
steamTemperature
private double steamTemperature -
feedWaterTemperature
private double feedWaterTemperature -
approachTemperature
private double approachTemperature -
effectiveness
private double effectiveness -
heatTransferred
private double heatTransferred -
steamFlowRate
private double steamFlowRate -
gasOutletTemperature
private double gasOutletTemperature -
designHeatDutyW
private double designHeatDutyWDesign (maximum) heat transfer duty in Watts. Used for capacity constraint calculations. -
autoSized
private boolean autoSizedWhether this equipment has been auto-sized. -
capacityConstraints
Storage for capacity constraints.
-
-
Constructor Details
-
HRSG
-
HRSG
Constructor for HRSG with hot gas inlet stream (from gas turbine exhaust).- Parameters:
name- equipment namehotGasInletStream- hot gas stream from gas turbine exhaust
-
-
Method Details
-
run
In this method all thermodynamic and unit operations will be calculated in a steady state calculation.
- Specified by:
runin interfaceSimulationInterface- Parameters:
id- UUID
-
estimateSteamEnthalpy
private double estimateSteamEnthalpy(double pressure, double temperature) Estimate steam specific enthalpy using simplified correlation.- Parameters:
pressure- steam pressure in baratemperature- steam temperature in Kelvin- Returns:
- specific enthalpy in J/kg
-
estimateFeedWaterEnthalpy
private double estimateFeedWaterEnthalpy(double temperature) Estimate feed water specific enthalpy.- Parameters:
temperature- feed water temperature in Kelvin- Returns:
- specific enthalpy in J/kg
-
getHeatTransferred
public double getHeatTransferred()Get heat transferred from gas to steam.- Returns:
- heat transferred in Watts
-
getHeatTransferred
Get heat transferred in specified unit.- Parameters:
unit- heat unit ("W", "kW", "MW")- Returns:
- heat transferred
-
getSteamFlowRate
public double getSteamFlowRate()Get the calculated steam flow rate.- Returns:
- steam flow rate in kg/sec
-
getSteamFlowRate
Get steam flow rate in specified unit.- Parameters:
unit- flow unit ("kg/sec", "kg/hr", "ton/hr")- Returns:
- steam flow rate
-
getGasOutletTemperature
public double getGasOutletTemperature()Get gas outlet temperature.- Returns:
- gas outlet temperature in Kelvin
-
setSteamPressure
public void setSteamPressure(double pressure) Set steam pressure.- Parameters:
pressure- steam pressure in bara
-
setSteamTemperature
public void setSteamTemperature(double temperature) Set steam temperature.- Parameters:
temperature- steam temperature in Kelvin
-
setSteamTemperature
Set steam temperature with unit.- Parameters:
temperature- steam temperatureunit- temperature unit ("C", "K", "F")
-
setFeedWaterTemperature
public void setFeedWaterTemperature(double temperature) Set feed water temperature.- Parameters:
temperature- feed water temperature in Kelvin
-
setFeedWaterTemperature
Set feed water temperature with unit.- Parameters:
temperature- feed water temperatureunit- temperature unit ("C", "K")
-
setApproachTemperature
public void setApproachTemperature(double approachTemp) Set approach temperature (minimum temperature difference at pinch).- Parameters:
approachTemp- approach temperature in K (or C since it is a difference)
-
setEffectiveness
public void setEffectiveness(double effectiveness) Set heat transfer effectiveness.- Parameters:
effectiveness- effectiveness factor (0 to 1)
-
getDesignHeatDuty
public double getDesignHeatDuty()Get the design (maximum) heat transfer duty.- Returns:
- design heat duty in Watts
-
getDesignHeatDuty
Get the design (maximum) heat transfer duty in specified unit.- Parameters:
unit- heat unit ("W", "kW", "MW")- Returns:
- design heat duty
-
setDesignHeatDuty
public void setDesignHeatDuty(double designHeatDuty) Set the design (maximum) heat transfer duty.- Parameters:
designHeatDuty- design heat duty in Watts
-
setDesignHeatDuty
Set the design (maximum) heat transfer duty with unit.- Parameters:
designHeatDuty- design heat duty valueunit- heat unit ("W", "kW", "MW")
-
getCapacityDuty
public double getCapacityDuty()getCapacityDuty.
- Specified by:
getCapacityDutyin interfaceProcessEquipmentInterface- Returns:
- a double
-
getCapacityMax
public double getCapacityMax()getCapacityMax.
- Specified by:
getCapacityMaxin interfaceProcessEquipmentInterface- Returns:
- a double
-
initializeCapacityConstraints
private void initializeCapacityConstraints()Initialize capacity constraints for the HRSG. -
getCapacityConstraints
Gets all capacity constraints defined for this equipment.Returns an unmodifiable map of constraint name to constraint object. Constraints are used by the optimization framework to detect bottlenecks, enforce limits, and guide production allocation. Equipment subclasses populate this map via
ProcessEquipmentInterface.addCapacityConstraint(CapacityConstraint).- Specified by:
getCapacityConstraintsin interfaceCapacityConstrainedEquipment- Specified by:
getCapacityConstraintsin interfaceProcessEquipmentInterface- Overrides:
getCapacityConstraintsin classProcessEquipmentBaseClass- Returns:
- unmodifiable map of constraint name to constraint, empty if none defined
-
getBottleneckConstraint
Gets the bottleneck (most limiting) constraint for this equipment.Returns the enabled constraint with the highest utilization ratio. If no constraints are defined or enabled, returns null.
- Specified by:
getBottleneckConstraintin interfaceCapacityConstrainedEquipment- Specified by:
getBottleneckConstraintin interfaceProcessEquipmentInterface- Overrides:
getBottleneckConstraintin classProcessEquipmentBaseClass- Returns:
- the most limiting constraint, or null if none
-
isCapacityExceeded
public boolean isCapacityExceeded()Checks if any capacity constraint is violated (exceeds 100% utilization).A violated constraint means the equipment is operating beyond its design capacity. For HARD constraints, this may indicate equipment trip or failure. For SOFT constraints, this indicates reduced efficiency or accelerated wear.
- Specified by:
isCapacityExceededin interfaceCapacityConstrainedEquipment- Specified by:
isCapacityExceededin interfaceProcessEquipmentInterface- Overrides:
isCapacityExceededin classProcessEquipmentBaseClass- Returns:
- true if any enabled constraint utilization exceeds 1.0 (100%)
-
isHardLimitExceeded
public boolean isHardLimitExceeded()Checks if any HARD constraint limit is exceeded.HARD limits represent absolute equipment limits (e.g., maximum speed) that cannot be exceeded without equipment trip or damage. This is more severe than general capacity exceedance.
- Specified by:
isHardLimitExceededin interfaceCapacityConstrainedEquipment- Specified by:
isHardLimitExceededin interfaceProcessEquipmentInterface- Overrides:
isHardLimitExceededin classProcessEquipmentBaseClass- Returns:
- true if any enabled HARD constraint's max value is exceeded
-
getMaxUtilization
public double getMaxUtilization()Gets the maximum utilization across all enabled constraints.Returns the highest utilization ratio across all enabled constraints. Values above 1.0 indicate the equipment is over capacity. Returns 0.0 if no constraints are defined or enabled.
- Specified by:
getMaxUtilizationin interfaceCapacityConstrainedEquipment- Specified by:
getMaxUtilizationin interfaceProcessEquipmentInterface- Overrides:
getMaxUtilizationin classProcessEquipmentBaseClass- Returns:
- maximum utilization as fraction (1.0 = 100% of design capacity)
-
addCapacityConstraint
Adds a capacity constraint to this equipment.Constraints can be added at any time. If a constraint with the same name already exists, it is replaced. Use the fluent builder API on
CapacityConstraintto configure the constraint before adding.- Specified by:
addCapacityConstraintin interfaceCapacityConstrainedEquipment- Specified by:
addCapacityConstraintin interfaceProcessEquipmentInterface- Overrides:
addCapacityConstraintin classProcessEquipmentBaseClass- Parameters:
constraint- the capacity constraint to add (ignored if null)
-
removeCapacityConstraint
Removes a capacity constraint by name.- Specified by:
removeCapacityConstraintin interfaceCapacityConstrainedEquipment- Parameters:
constraintName- the name of the constraint to remove- Returns:
- true if the constraint was found and removed
-
clearCapacityConstraints
public void clearCapacityConstraints()Clears all capacity constraints from this equipment.- Specified by:
clearCapacityConstraintsin interfaceCapacityConstrainedEquipment
-
autoSize
public void autoSize(double safetyFactor) Automatically size the equipment based on connected stream conditions.This method calculates dimensions and design parameters using the inlet stream properties and applies the specified safety factor. The equipment must have a valid inlet stream connected before calling this method.
- Specified by:
autoSizein interfaceAutoSizeable- Parameters:
safetyFactor- multiplier for design capacity, typically 1.1-1.3 (10-30% over design)
-
getSizingReport
Get a detailed sizing report after auto-sizing.The report includes:
- Design basis (flow rates, pressures, temperatures)
- Calculated dimensions
- Design parameters (K-factor, Cv, velocity, etc.)
- Safety margins
- Specified by:
getSizingReportin interfaceAutoSizeable- Returns:
- formatted sizing report string
-
isAutoSized
public boolean isAutoSized()Check if equipment has been auto-sized.- Specified by:
isAutoSizedin interfaceAutoSizeable- Returns:
- true if autoSize() has been called successfully
-