Class OperatingEnvelope

java.lang.Object
neqsim.process.equipment.compressor.OperatingEnvelope
All Implemented Interfaces:
Serializable

public class OperatingEnvelope extends Object implements Serializable
Operating envelope for compressor performance tracking.

This class defines and tracks the safe operating region for a compressor including:

  • Surge line - minimum stable flow at each speed
  • Stonewall line - maximum flow (choked flow) at each speed
  • Speed limits - minimum and maximum operating speeds
  • Power limits - driver power constraints
  • Head limits - maximum and minimum head at each speed

Envelope Definition

The operating envelope is typically defined by arrays of flow and head values at different speeds. The surge line represents the minimum flow below which the compressor becomes unstable. The stonewall (choke) line represents the maximum flow where the compressor can no longer increase flow regardless of head.

Example Usage

OperatingEnvelope envelope = new OperatingEnvelope();
envelope.setSurgeLine(surgeFlows, surgeHeads, surgeSpeeds);
envelope.setStonewallLine(stonewallFlows, stonewallHeads, stonewallSpeeds);
envelope.setMinSpeed(7000);
envelope.setMaxSpeed(10500);

boolean inEnvelope = envelope.isWithinEnvelope(currentFlow, currentHead, currentSpeed);
double surgeMargin = envelope.getSurgeMargin(currentFlow, currentHead, currentSpeed);
Version:
1.0
Author:
NeqSim Development Team
See Also:
  • Field Details

    • serialVersionUID

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

      private double[] surgeFlows
      Surge line flow points (m3/h).
    • surgeHeads

      private double[] surgeHeads
      Surge line head points (kJ/kg).
    • surgeSpeeds

      private double[] surgeSpeeds
      Surge line speed points (RPM).
    • stonewallFlows

      private double[] stonewallFlows
      Stonewall line flow points (m3/h).
    • stonewallHeads

      private double[] stonewallHeads
      Stonewall line head points (kJ/kg).
    • stonewallSpeeds

      private double[] stonewallSpeeds
      Stonewall line speed points (RPM).
    • minSpeed

      private double minSpeed
      Minimum operating speed (RPM).
    • maxSpeed

      private double maxSpeed
      Maximum operating speed (RPM).
    • ratedSpeed

      private double ratedSpeed
      Rated speed (RPM).
    • maxPower

      private double maxPower
      Maximum power (kW).
    • minPower

      private double minPower
      Minimum power for stable operation (kW).
    • maxHead

      private double maxHead
      Maximum head (kJ/kg).
    • maxDischargeTemperature

      private double maxDischargeTemperature
      Maximum discharge temperature (Kelvin).
    • usePolynomialFit

      private boolean usePolynomialFit
      Use polynomial fit for surge line.
    • surgePolynomialCoeffs

      private double[] surgePolynomialCoeffs
      Surge line polynomial coefficients (head = a0 + a1*Q + a2*Q^2 + ...).
    • stonewallPolynomialCoeffs

      private double[] stonewallPolynomialCoeffs
      Stonewall polynomial coefficients.
  • Constructor Details

    • OperatingEnvelope

      public OperatingEnvelope()
      Default constructor.
    • OperatingEnvelope

      public OperatingEnvelope(double minSpeed, double maxSpeed)
      Constructor with speed limits.
      Parameters:
      minSpeed - minimum operating speed in RPM
      maxSpeed - maximum operating speed in RPM
  • Method Details

    • setSurgeLine

      public void setSurgeLine(double[] flows, double[] heads, double[] speeds)
      Sets the surge line from discrete points.
      Parameters:
      flows - flow values in m3/h
      heads - head values in kJ/kg
      speeds - speed values in RPM
    • setSurgeLinePolynomial

      public void setSurgeLinePolynomial(double[] coefficients)
      Sets the surge line from a polynomial.

      Head at surge = a0 + a1*Q + a2*Q^2 + ...

      Parameters:
      coefficients - polynomial coefficients
    • setStonewallLine

      public void setStonewallLine(double[] flows, double[] heads, double[] speeds)
      Sets the stonewall line from discrete points.
      Parameters:
      flows - flow values in m3/h
      heads - head values in kJ/kg
      speeds - speed values in RPM
    • setStonewallLinePolynomial

      public void setStonewallLinePolynomial(double[] coefficients)
      Sets the stonewall line from a polynomial.
      Parameters:
      coefficients - polynomial coefficients
    • isWithinEnvelope

      public boolean isWithinEnvelope(double flow, double head, double speed)
      Checks if an operating point is within the envelope.
      Parameters:
      flow - actual flow in m3/h
      head - actual head in kJ/kg
      speed - actual speed in RPM
      Returns:
      true if within envelope
    • getSurgeMargin

      public double getSurgeMargin(double flow, double head, double speed)
      Gets the surge margin for an operating point.

      Surge margin = (Q_actual - Q_surge) / Q_surge

      Parameters:
      flow - actual flow in m3/h
      head - actual head in kJ/kg
      speed - actual speed in RPM
      Returns:
      surge margin as fraction (positive = safe, negative = in surge)
    • getStonewallMargin

      public double getStonewallMargin(double flow, double head, double speed)
      Gets the stonewall margin for an operating point.

      Stonewall margin = (Q_stonewall - Q_actual) / Q_stonewall

      Parameters:
      flow - actual flow in m3/h
      head - actual head in kJ/kg
      speed - actual speed in RPM
      Returns:
      stonewall margin as fraction (positive = safe, negative = choked)
    • getSurgeFlowAtHead

      public double getSurgeFlowAtHead(double head, double speed)
      Gets the surge flow at a given head and speed.
      Parameters:
      head - polytropic head in kJ/kg
      speed - shaft speed in RPM
      Returns:
      surge flow in m3/h
    • getStonewallFlowAtHead

      public double getStonewallFlowAtHead(double head, double speed)
      Gets the stonewall flow at a given head and speed.
      Parameters:
      head - polytropic head in kJ/kg
      speed - shaft speed in RPM
      Returns:
      stonewall flow in m3/h
    • getDistanceToEnvelope

      public double getDistanceToEnvelope(double flow, double head, double speed)
      Gets the distance to the nearest envelope boundary.
      Parameters:
      flow - actual flow in m3/h
      head - actual head in kJ/kg
      speed - actual speed in RPM
      Returns:
      distance as fraction (positive = inside, negative = outside)
    • getSpeedMargin

      public double getSpeedMargin(double speed)
      Gets the speed margin.
      Parameters:
      speed - actual speed in RPM
      Returns:
      margin as fraction of operating range
    • getLimitingConstraint

      public String getLimitingConstraint(double flow, double head, double speed)
      Gets the limiting constraint at an operating point.
      Parameters:
      flow - actual flow in m3/h
      head - actual head in kJ/kg
      speed - actual speed in RPM
      Returns:
      string describing the limiting constraint, or null if within envelope
    • interpolateSurgeFlow

      private double interpolateSurgeFlow(double head)
      Interpolates surge flow from the surge curve.
      Parameters:
      head - the polytropic head value
      Returns:
      the interpolated surge flow rate
    • interpolateStonewallFlow

      private double interpolateStonewallFlow(double head)
      Interpolates stonewall flow from the stonewall curve.
      Parameters:
      head - the polytropic head value
      Returns:
      the interpolated stonewall flow rate
    • getSurgeFlowFromPolynomial

      private double getSurgeFlowFromPolynomial(double head)
      Gets surge flow from polynomial fit.
      Parameters:
      head - the polytropic head value
      Returns:
      the calculated surge flow from polynomial coefficients
    • getStonewallFlowFromPolynomial

      private double getStonewallFlowFromPolynomial(double head)
      Gets stonewall flow from polynomial fit.
      Parameters:
      head - the polytropic head value
      Returns:
      the calculated stonewall flow from polynomial coefficients
    • getMinSpeed

      public double getMinSpeed()
      Gets the minimum speed.
      Returns:
      minimum speed in RPM
    • setMinSpeed

      public void setMinSpeed(double speed)
      Sets the minimum speed.
      Parameters:
      speed - minimum speed in RPM
    • getMaxSpeed

      public double getMaxSpeed()
      Gets the maximum speed.
      Returns:
      maximum speed in RPM
    • setMaxSpeed

      public void setMaxSpeed(double speed)
      Sets the maximum speed.
      Parameters:
      speed - maximum speed in RPM
    • getRatedSpeed

      public double getRatedSpeed()
      Gets the rated speed.
      Returns:
      rated speed in RPM
    • setRatedSpeed

      public void setRatedSpeed(double speed)
      Sets the rated speed.
      Parameters:
      speed - rated speed in RPM
    • getMaxPower

      public double getMaxPower()
      Gets the maximum power.
      Returns:
      max power in kW
    • setMaxPower

      public void setMaxPower(double power)
      Sets the maximum power.
      Parameters:
      power - max power in kW
    • getMinPower

      public double getMinPower()
      Gets the minimum power.
      Returns:
      min power in kW
    • setMinPower

      public void setMinPower(double power)
      Sets the minimum power.
      Parameters:
      power - min power in kW
    • getMaxHead

      public double getMaxHead()
      Gets the maximum head.
      Returns:
      max head in kJ/kg
    • setMaxHead

      public void setMaxHead(double head)
      Sets the maximum head.
      Parameters:
      head - max head in kJ/kg
    • getMaxDischargeTemperature

      public double getMaxDischargeTemperature()
      Gets the maximum discharge temperature.
      Returns:
      max discharge temp in Kelvin
    • setMaxDischargeTemperature

      public void setMaxDischargeTemperature(double temp)
      Sets the maximum discharge temperature.
      Parameters:
      temp - max discharge temp in Kelvin
    • getSurgeFlows

      public double[] getSurgeFlows()
      Gets the surge flow array.
      Returns:
      surge flow array
    • getSurgeHeads

      public double[] getSurgeHeads()
      Gets the surge head array.
      Returns:
      surge head array
    • getStonewallFlows

      public double[] getStonewallFlows()
      Gets the stonewall flow array.
      Returns:
      stonewall flow array
    • getStonewallHeads

      public double[] getStonewallHeads()
      Gets the stonewall head array.
      Returns:
      stonewall head array