Class CombinedCycleSystem

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

public class CombinedCycleSystem extends TwoPortEquipment implements CapacityConstrainedEquipment, AutoSizeable
Combined-cycle power system integrating a gas turbine, HRSG, and steam turbine.

Models a gas turbine combined cycle (GTCC) where:

  1. Fuel gas is burned in a gas turbine to produce power and hot exhaust
  2. Hot exhaust flows through an HRSG to generate steam
  3. Steam expands through a steam turbine for additional power

The overall thermal efficiency is typically 50-62% for modern combined-cycle plants, compared to 30-40% for simple-cycle gas turbines.

CombinedCycleSystem cc = new CombinedCycleSystem("CC-1", fuelGasStream);
cc.setCombustionPressure(15.0);
cc.setGasTurbineEfficiency(0.35);
cc.setSteamPressure(40.0);
cc.setSteamTemperature(400.0, "C");
cc.setSteamTurbineEfficiency(0.85);
cc.run();

double totalPower = cc.getTotalPower("MW");
double efficiency = cc.getOverallEfficiency();
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.
    • gasTurbine

      private GasTurbine gasTurbine
    • hrsg

      private HRSG hrsg
    • steamTurbine

      private SteamTurbine steamTurbine
    • combustionPressure

      private double combustionPressure
    • steamPressure

      private double steamPressure
    • steamTemperature

      private double steamTemperature
    • hrsgApproachTemperature

      private double hrsgApproachTemperature
    • hrsgEffectiveness

      private double hrsgEffectiveness
    • steamTurbineEfficiency

      private double steamTurbineEfficiency
    • steamCondensorPressure

      private double steamCondensorPressure
    • gasTurbinePower

      private double gasTurbinePower
    • steamTurbinePower

      private double steamTurbinePower
    • totalPower

      private double totalPower
    • fuelEnergyInput

      private double fuelEnergyInput
    • overallEfficiency

      private double overallEfficiency
    • ratedTotalPowerW

      private double ratedTotalPowerW
      Rated (maximum) total power output 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

    • CombinedCycleSystem

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

      public CombinedCycleSystem(String name, StreamInterface fuelGasInlet)
      Constructor for CombinedCycleSystem with fuel gas inlet.
      Parameters:
      name - equipment name
      fuelGasInlet - fuel gas stream to the gas turbine
  • 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
    • getTotalPower

      public double getTotalPower()
      Get total combined-cycle power output.
      Returns:
      total power in Watts
    • getTotalPower

      public double getTotalPower(String unit)
      Get total combined-cycle power output in specified unit.
      Parameters:
      unit - power unit ("W", "kW", "MW", "hp")
      Returns:
      total power
    • getGasTurbinePower

      public double getGasTurbinePower()
      Get gas turbine power output.
      Returns:
      gas turbine power in Watts
    • getSteamTurbinePower

      public double getSteamTurbinePower()
      Get steam turbine power output.
      Returns:
      steam turbine power in Watts
    • getOverallEfficiency

      public double getOverallEfficiency()
      Get overall combined-cycle thermal efficiency (LHV basis).
      Returns:
      overall efficiency (0 to 1)
    • getFuelEnergyInput

      public double getFuelEnergyInput()
      Get fuel energy input (LHV basis).
      Returns:
      fuel energy input in Watts
    • toJson

      public String toJson()
      Get results as JSON string.
      Specified by:
      toJson in interface ProcessEquipmentInterface
      Overrides:
      toJson in class TwoPortEquipment
      Returns:
      JSON with all combined-cycle results
    • setCombustionPressure

      public void setCombustionPressure(double pressure)
      Set combustion pressure for the gas turbine.
      Parameters:
      pressure - combustion pressure in bara
    • setSteamPressure

      public void setSteamPressure(double pressure)
      Set steam pressure for the HRSG/steam cycle.
      Parameters:
      pressure - steam pressure in bara
    • setSteamTemperature

      public void setSteamTemperature(double temperature)
      Set steam temperature for the HRSG outlet.
      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")
    • setSteamTurbineEfficiency

      public void setSteamTurbineEfficiency(double efficiency)
      Set steam turbine isentropic efficiency.
      Parameters:
      efficiency - isentropic efficiency (0 to 1)
    • setGasTurbineEfficiency

      public void setGasTurbineEfficiency(double efficiency)
      Set gas turbine isentropic efficiency. Not used directly; the GasTurbine model uses its own internal component efficiencies.
      Parameters:
      efficiency - gas turbine overall efficiency (informational)
    • setSteamCondensorPressure

      public void setSteamCondensorPressure(double pressure)
      Set steam condensor pressure.
      Parameters:
      pressure - condensor pressure in bara
    • setHrsgApproachTemperature

      public void setHrsgApproachTemperature(double approachTemp)
      Set HRSG approach temperature.
      Parameters:
      approachTemp - approach temperature in K
    • setHrsgEffectiveness

      public void setHrsgEffectiveness(double effectiveness)
      Set HRSG heat transfer effectiveness.
      Parameters:
      effectiveness - effectiveness (0 to 1)
    • getRatedTotalPower

      public double getRatedTotalPower()
      Get the rated (maximum) total power output.
      Returns:
      rated total power in Watts
    • getRatedTotalPower

      public double getRatedTotalPower(String unit)
      Get the rated (maximum) total power output in specified unit.
      Parameters:
      unit - power unit ("W", "kW", "MW", "hp")
      Returns:
      rated total power
    • setRatedTotalPower

      public void setRatedTotalPower(double ratedPower)
      Set the rated (maximum) total power output.
      Parameters:
      ratedPower - rated total power in Watts
    • setRatedTotalPower

      public void setRatedTotalPower(double ratedPower, String unit)
      Set the rated (maximum) total power output with unit.
      Parameters:
      ratedPower - rated total power value
      unit - power unit ("W", "kW", "MW", "hp")
    • 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 combined-cycle system.
    • 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