Class CompressorCurveCorrections

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

public class CompressorCurveCorrections extends Object implements Serializable
Utility class providing correction factors for centrifugal compressor performance curves.

This class implements industry-standard correction methods for more accurate compressor performance prediction:

  • Reynolds Number Correction: Adjusts efficiency for viscous effects at off-design conditions
  • Mach Number Limitation: Calculates stonewall (choke) flow based on sonic velocity
  • Multistage Surge Correction: Adjusts surge line for multistage compressors at reduced speeds

References:

  • API 617 - Axial and Centrifugal Compressors
  • ASME PTC-10 - Performance Test Code for Compressors
  • Ludwig's Applied Process Design for Chemical and Petrochemical Plants, Chapter 18
Version:
1.0
Author:
Even Solbraa
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final double
    Critical Mach number threshold for stonewall onset.
    private static final double
    Maximum Mach number (choke condition).
    private static final double
    Gas constant R = 8314 J/(kmol·K).
    private static final double
    Reference Reynolds number for standard efficiency curves (typically 1e7).
    private static final double
    Exponent for Reynolds correction (typically 0.1-0.2 for centrifugal compressors).
    private static final long
     
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    private
    Private constructor - utility class.
  • Method Summary

    Modifier and Type
    Method
    Description
    static double
    calculateCorrectedEfficiency(double baseEfficiency, double actualReynolds, double flowRatio)
    Calculate combined efficiency correction.
    static double
    calculateEfficiencyAtFlow(double maxEfficiency, double flowRatio, double curveFactor)
    Apply efficiency correction for operating away from best efficiency point (BEP).
    static double
    calculateMachNumber(double gasVelocity, double sonicVelocity)
    Calculate Mach number at compressor inlet or impeller eye.
    static double
    calculateMultistageSurgeCorrection(double surgeFanLawFlow, double speedRatio, int numberOfStages)
    Calculate surge flow correction for multistage compressors at reduced speeds.
    static double
    calculateMultistageSurgeHeadCorrection(double surgeFanLawHead, double speedRatio, int numberOfStages)
    Calculate corrected surge head for multistage compressors at reduced speeds.
    static double
    Calculate Reynolds number correction factor using default reference Reynolds number.
    static double
    calculateReynoldsEfficiencyCorrection(double actualReynolds, double referenceReynolds)
    Calculate Reynolds number correction factor for polytropic efficiency.
    static double
    calculateReynoldsNumber(double tipSpeed, double impellerDiameter, double kinematicViscosity)
    Calculate compressor Reynolds number.
    static double
    calculateSonicVelocity(double kappa, double temperature, double molarMass, double compressibilityFactor)
    Calculate sonic velocity (speed of sound) for an ideal gas.
    static double
    calculateStonewallFlow(double designFlow, double sonicVelocity, double designMachNumber)
    Calculate maximum flow (stonewall/choke) based on Mach number limitation.
    static double
    calculateTipSpeed(double rpm, double diameter)
    Calculate impeller tip speed from rotational speed and diameter.
    static double
    correctStonewallFlowForGas(double referenceStonewallFlow, double referenceMolarMass, double actualMolarMass, double referenceKappa, double actualKappa)
    Calculate stonewall flow correction for gas molecular weight.
    static double
    Get the critical Mach number for stonewall calculations.
    static double
    Get the reference Reynolds number used for efficiency corrections.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • R_GAS

      private static final double R_GAS
      Gas constant R = 8314 J/(kmol·K).
      See Also:
    • REFERENCE_REYNOLDS

      private static final double REFERENCE_REYNOLDS
      Reference Reynolds number for standard efficiency curves (typically 1e7).
      See Also:
    • REYNOLDS_EXPONENT

      private static final double REYNOLDS_EXPONENT
      Exponent for Reynolds correction (typically 0.1-0.2 for centrifugal compressors).
      See Also:
    • CRITICAL_MACH

      private static final double CRITICAL_MACH
      Critical Mach number threshold for stonewall onset.
      See Also:
    • MAX_MACH

      private static final double MAX_MACH
      Maximum Mach number (choke condition).
      See Also:
  • Constructor Details

    • CompressorCurveCorrections

      private CompressorCurveCorrections()
      Private constructor - utility class.
  • Method Details

    • calculateReynoldsEfficiencyCorrection

      public static double calculateReynoldsEfficiencyCorrection(double actualReynolds, double referenceReynolds)
      Calculate Reynolds number correction factor for polytropic efficiency.

      The efficiency of centrifugal compressors varies with Reynolds number due to viscous losses in the boundary layers. This correction is based on the correlation:

      η_corrected / η_reference = (Re_actual / Re_reference)^n
      

      Where n is typically 0.1-0.2 for centrifugal compressors (API 617 suggests using surface roughness correlations for more accuracy).

      Parameters:
      actualReynolds - Actual Reynolds number at operating conditions
      referenceReynolds - Reference Reynolds number for the performance map (default 1e7)
      Returns:
      Efficiency correction factor (multiply by reference efficiency)
    • calculateReynoldsEfficiencyCorrection

      public static double calculateReynoldsEfficiencyCorrection(double actualReynolds)
      Calculate Reynolds number correction factor using default reference Reynolds number.
      Parameters:
      actualReynolds - Actual Reynolds number at operating conditions
      Returns:
      Efficiency correction factor
    • calculateReynoldsNumber

      public static double calculateReynoldsNumber(double tipSpeed, double impellerDiameter, double kinematicViscosity)
      Calculate compressor Reynolds number.

      Reynolds number for compressors is typically defined as:

      Re = (u * D) / ν
      

      Where u is tip speed, D is impeller diameter, and ν is kinematic viscosity.

      Parameters:
      tipSpeed - Impeller tip speed in m/s
      impellerDiameter - Impeller diameter in m
      kinematicViscosity - Kinematic viscosity in m²/s
      Returns:
      Reynolds number (dimensionless)
    • calculateTipSpeed

      public static double calculateTipSpeed(double rpm, double diameter)
      Calculate impeller tip speed from rotational speed and diameter.
      Parameters:
      rpm - Rotational speed in revolutions per minute
      diameter - Impeller diameter in m
      Returns:
      Tip speed in m/s
    • calculateMachNumber

      public static double calculateMachNumber(double gasVelocity, double sonicVelocity)
      Calculate Mach number at compressor inlet or impeller eye.

      The Mach number is the ratio of gas velocity to sonic velocity:

      Ma = V / c
      
      Parameters:
      gasVelocity - Gas velocity in m/s
      sonicVelocity - Speed of sound in the gas in m/s
      Returns:
      Mach number (dimensionless)
    • calculateSonicVelocity

      public static double calculateSonicVelocity(double kappa, double temperature, double molarMass, double compressibilityFactor)
      Calculate sonic velocity (speed of sound) for an ideal gas.

      The speed of sound in an ideal gas is:

      c = sqrt(k * R * T / M)
      

      Where k is the heat capacity ratio, R is the gas constant, T is temperature, and M is molar mass.

      Parameters:
      kappa - Heat capacity ratio (Cp/Cv)
      temperature - Temperature in K
      molarMass - Molar mass in kg/kmol
      compressibilityFactor - Z-factor (use 1.0 for ideal gas)
      Returns:
      Speed of sound in m/s
    • calculateStonewallFlow

      public static double calculateStonewallFlow(double designFlow, double sonicVelocity, double designMachNumber)
      Calculate maximum flow (stonewall/choke) based on Mach number limitation.

      The stonewall flow is limited by the sonic velocity at the impeller inlet. When the flow velocity approaches the speed of sound (Ma ≈ 1), no further increase in flow is possible regardless of downstream pressure reduction.

      The maximum flow can be estimated from:

      Q_max = A * c * Ma_critical
      

      Where A is the flow area, c is sonic velocity, and Ma_critical ≈ 0.9-1.0.

      Parameters:
      designFlow - Design flow rate in m³/hr
      sonicVelocity - Speed of sound at inlet conditions in m/s
      designMachNumber - Mach number at design flow (typically 0.6-0.8)
      Returns:
      Maximum (stonewall) flow in m³/hr
    • correctStonewallFlowForGas

      public static double correctStonewallFlowForGas(double referenceStonewallFlow, double referenceMolarMass, double actualMolarMass, double referenceKappa, double actualKappa)
      Calculate stonewall flow correction for gas molecular weight.

      Heavier gases have lower sonic velocities, which means they choke at lower flow rates.

      Parameters:
      referenceStonewallFlow - Stonewall flow at reference conditions in m³/hr
      referenceMolarMass - Reference gas molar mass in kg/kmol
      actualMolarMass - Actual gas molar mass in kg/kmol
      referenceKappa - Reference heat capacity ratio
      actualKappa - Actual heat capacity ratio
      Returns:
      Corrected stonewall flow in m³/hr
    • calculateMultistageSurgeCorrection

      public static double calculateMultistageSurgeCorrection(double surgeFanLawFlow, double speedRatio, int numberOfStages)
      Calculate surge flow correction for multistage compressors at reduced speeds.

      For multistage compressors, the simple fan law prediction for surge (Q_surge ∝ N) becomes inaccurate at reduced speeds. This is because:

      • Volume reduction per stage is less at lower speeds
      • Later stages handle more than their rated volume
      • Surge can be initiated by different stages at different speeds

      This correction shifts the surge line to higher flows at reduced speeds, which better matches observed behavior in multistage machines.

      Parameters:
      surgeFanLawFlow - Surge flow predicted by simple fan law in m³/hr
      speedRatio - Actual speed / Design speed (0 to 1)
      numberOfStages - Number of compression stages
      Returns:
      Corrected surge flow in m³/hr
    • calculateMultistageSurgeHeadCorrection

      public static double calculateMultistageSurgeHeadCorrection(double surgeFanLawHead, double speedRatio, int numberOfStages)
      Calculate corrected surge head for multistage compressors at reduced speeds.

      Similar to flow, the surge head may not follow simple fan law (H ∝ N²) exactly for multistage machines at reduced speeds.

      Parameters:
      surgeFanLawHead - Surge head predicted by simple fan law in kJ/kg
      speedRatio - Actual speed / Design speed
      numberOfStages - Number of compression stages
      Returns:
      Corrected surge head in kJ/kg
    • calculateEfficiencyAtFlow

      public static double calculateEfficiencyAtFlow(double maxEfficiency, double flowRatio, double curveFactor)
      Apply efficiency correction for operating away from best efficiency point (BEP).

      Compressor efficiency decreases as operating point moves away from BEP. This method calculates a parabolic efficiency profile:

      η = η_max * [1 - k * (Q/Q_design - 1)²]
      
      Parameters:
      maxEfficiency - Maximum (BEP) efficiency as fraction (0-1)
      flowRatio - Actual flow / Design flow
      curveFactor - Shape factor k (typically 0.3-0.5 for centrifugal compressors)
      Returns:
      Efficiency at the specified flow ratio
    • calculateCorrectedEfficiency

      public static double calculateCorrectedEfficiency(double baseEfficiency, double actualReynolds, double flowRatio)
      Calculate combined efficiency correction.

      This method combines Reynolds number correction and flow-based efficiency variation.

      Parameters:
      baseEfficiency - Base polytropic efficiency at design point (fraction 0-1)
      actualReynolds - Actual Reynolds number
      flowRatio - Actual flow / Design flow
      Returns:
      Corrected efficiency (fraction 0-1)
    • getReferenceReynolds

      public static double getReferenceReynolds()
      Get the reference Reynolds number used for efficiency corrections.
      Returns:
      Reference Reynolds number
    • getCriticalMach

      public static double getCriticalMach()
      Get the critical Mach number for stonewall calculations.
      Returns:
      Critical Mach number