Class HRSG

All Implemented Interfaces:
Serializable, Runnable, AutoSizeable, CapacityConstrainedEquipment, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface

public class HRSG extends TwoPortEquipment implements CapacityConstrainedEquipment, AutoSizeable
Heat Recovery Steam Generator (HRSG) for combined-cycle power plants.

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 Details

    • serialVersionUID

      private static final long serialVersionUID
      Serialization version UID.
      See Also:
    • logger

      private static final org.apache.logging.log4j.Logger logger
      Logger 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 designHeatDutyW
      Design (maximum) heat transfer duty in Watts. Used for capacity constraint calculations.
    • autoSized

      private boolean autoSized
      Whether this equipment has been auto-sized.
    • capacityConstraints

      private final Map<String, CapacityConstraint> capacityConstraints
      Storage for capacity constraints.
  • Constructor Details

    • HRSG

      public HRSG(String name)
      Constructor for HRSG.
      Parameters:
      name - equipment name
    • HRSG

      public HRSG(String name, StreamInterface hotGasInletStream)
      Constructor for HRSG with hot gas inlet stream (from gas turbine exhaust).
      Parameters:
      name - equipment name
      hotGasInletStream - hot gas stream from gas turbine exhaust
  • Method Details

    • run

      public void run(UUID id)

      In this method all thermodynamic and unit operations will be calculated in a steady state calculation.

      Specified by:
      run in interface SimulationInterface
      Parameters:
      id - UUID
    • estimateSteamEnthalpy

      private double estimateSteamEnthalpy(double pressure, double temperature)
      Estimate steam specific enthalpy using simplified correlation.
      Parameters:
      pressure - steam pressure in bara
      temperature - 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

      public double getHeatTransferred(String unit)
      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

      public double getSteamFlowRate(String unit)
      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

      public void setSteamTemperature(double temperature, String unit)
      Set steam temperature with unit.
      Parameters:
      temperature - steam temperature
      unit - temperature unit ("C", "K", "F")
    • setFeedWaterTemperature

      public void setFeedWaterTemperature(double temperature)
      Set feed water temperature.
      Parameters:
      temperature - feed water temperature in Kelvin
    • setFeedWaterTemperature

      public void setFeedWaterTemperature(double temperature, String unit)
      Set feed water temperature with unit.
      Parameters:
      temperature - feed water temperature
      unit - 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

      public double getDesignHeatDuty(String unit)
      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

      public void setDesignHeatDuty(double designHeatDuty, String unit)
      Set the design (maximum) heat transfer duty with unit.
      Parameters:
      designHeatDuty - design heat duty value
      unit - heat unit ("W", "kW", "MW")
    • getCapacityDuty

      public double getCapacityDuty()

      getCapacityDuty.

      Specified by:
      getCapacityDuty in interface ProcessEquipmentInterface
      Returns:
      a double
    • getCapacityMax

      public double getCapacityMax()

      getCapacityMax.

      Specified by:
      getCapacityMax in interface ProcessEquipmentInterface
      Returns:
      a double
    • initializeCapacityConstraints

      private void initializeCapacityConstraints()
      Initialize capacity constraints for the HRSG.
    • getCapacityConstraints

      public Map<String, CapacityConstraint> 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:
      getCapacityConstraints in interface CapacityConstrainedEquipment
      Specified by:
      getCapacityConstraints in interface ProcessEquipmentInterface
      Overrides:
      getCapacityConstraints in class ProcessEquipmentBaseClass
      Returns:
      unmodifiable map of constraint name to constraint, empty if none defined
    • getBottleneckConstraint

      public CapacityConstraint 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:
      getBottleneckConstraint in interface CapacityConstrainedEquipment
      Specified by:
      getBottleneckConstraint in interface ProcessEquipmentInterface
      Overrides:
      getBottleneckConstraint in class ProcessEquipmentBaseClass
      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:
      isCapacityExceeded in interface CapacityConstrainedEquipment
      Specified by:
      isCapacityExceeded in interface ProcessEquipmentInterface
      Overrides:
      isCapacityExceeded in class ProcessEquipmentBaseClass
      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:
      isHardLimitExceeded in interface CapacityConstrainedEquipment
      Specified by:
      isHardLimitExceeded in interface ProcessEquipmentInterface
      Overrides:
      isHardLimitExceeded in class ProcessEquipmentBaseClass
      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:
      getMaxUtilization in interface CapacityConstrainedEquipment
      Specified by:
      getMaxUtilization in interface ProcessEquipmentInterface
      Overrides:
      getMaxUtilization in class ProcessEquipmentBaseClass
      Returns:
      maximum utilization as fraction (1.0 = 100% of design capacity)
    • addCapacityConstraint

      public void addCapacityConstraint(CapacityConstraint constraint)
      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 CapacityConstraint to configure the constraint before adding.

      Specified by:
      addCapacityConstraint in interface CapacityConstrainedEquipment
      Specified by:
      addCapacityConstraint in interface ProcessEquipmentInterface
      Overrides:
      addCapacityConstraint in class ProcessEquipmentBaseClass
      Parameters:
      constraint - the capacity constraint to add (ignored if null)
    • removeCapacityConstraint

      public boolean removeCapacityConstraint(String constraintName)
      Removes a capacity constraint by name.
      Specified by:
      removeCapacityConstraint in interface CapacityConstrainedEquipment
      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:
      clearCapacityConstraints in interface CapacityConstrainedEquipment
    • 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:
      autoSize in interface AutoSizeable
      Parameters:
      safetyFactor - multiplier for design capacity, typically 1.1-1.3 (10-30% over design)
    • getSizingReport

      public String 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:
      getSizingReport in interface AutoSizeable
      Returns:
      formatted sizing report string
    • isAutoSized

      public boolean isAutoSized()
      Check if equipment has been auto-sized.
      Specified by:
      isAutoSized in interface AutoSizeable
      Returns:
      true if autoSize() has been called successfully