Class AirCooler

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

public class AirCooler extends Cooler
Air-cooled heat exchanger (fin-fan cooler) model.

Models an air cooler with humid-air side energy balance, fin-tube thermal design (LMTD, UA), bundle geometry, and fan power estimation. Supports ambient temperature correction, fan curve modelling, and number-of-bays sizing.

Thermal design follows the API 661 framework: the overall heat transfer coefficient considers air-side (fin) and process-side components. The air-side coefficient uses the Briggs-Young fin-tube correlation, and LMTD correction for cross-flow applies per TEMA.

Usage example:

AirCooler cooler = new AirCooler("AC-100", hotStream);
cooler.setOutletTemperature(40.0, "C");
cooler.setAirInletTemperature(25.0, "C");
cooler.setNumberOfTubeRows(4);
cooler.setFinPitch(2.5e-3);
cooler.run();
double fanPower = cooler.getFanPower("kW");
double faceArea = cooler.getFaceArea();
Version:
2.0
Author:
esol
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.
    • airInletTemperature

      private double airInletTemperature
      Air inlet temperature [K].
    • airOutletTemperature

      private double airOutletTemperature
      Air outlet temperature [K].
    • relativeHumidity

      private double relativeHumidity
      Relative humidity fraction [0-1].
    • atmosphericPressure

      private double atmosphericPressure
      Atmospheric pressure [Pa].
    • tubeOuterDiameter

      private double tubeOuterDiameter
      Tube outside diameter [m]. Default 25.4 mm (1 inch) per API 661.
    • tubeWallThickness

      private double tubeWallThickness
      Tube wall thickness [m]. Default 2.11 mm (BWG 14).
    • finHeight

      private double finHeight
      Fin height [m]. Default 15.875 mm (5/8 inch).
    • finThickness

      private double finThickness
      Fin thickness [m]. Default 0.4 mm (aluminium).
    • finPitch

      private double finPitch
      Fin pitch [m]. Default 2.5 mm (394 fpm).
    • finConductivity

      private double finConductivity
      Fin thermal conductivity [W/m-K]. Default 200 for aluminium.
    • numberOfTubeRows

      private int numberOfTubeRows
      Number of tube rows. Default 4 per API 661 typical.
    • numberOfTubePasses

      private int numberOfTubePasses
      Number of tube passes. Default 2.
    • transversePitch

      private double transversePitch
      Transverse tube pitch [m]. Default 60.3 mm (2-3/8 inch).
    • tubeLength

      private double tubeLength
      Tube length (one bay) [m]. Default 12 m (40 ft standard).
    • bayWidth

      private double bayWidth
      Bay width [m]. Default 3.05 m (10 ft).
    • numberOfBays

      private int numberOfBays
      Number of bays. Default 1, can be auto-sized.
    • numberOfFansPerBay

      private int numberOfFansPerBay
      Number of fans per bay. Default 2.
    • fanDiameter

      private double fanDiameter
      Fan diameter [m]. Default 4.27 m (14 ft).
    • processFoulingResistance

      private double processFoulingResistance
      Process-side fouling resistance [m2-K/W]. Default 1.76e-4 (API 661 typical).
    • airFoulingResistance

      private double airFoulingResistance
      Air-side fouling resistance [m2-K/W]. Default 0 (clean fins).
    • lmtdCorrectionFactor

      private double lmtdCorrectionFactor
      LMTD correction factor for cross-flow (F). Default 0.9.
    • fanEfficiency

      private double fanEfficiency
      Fan total efficiency (fan + belt + motor). Default 0.55.
    • fanCurveActive

      private boolean fanCurveActive
      Whether a user-defined fan curve is active.
    • fanCurveA0

      private double fanCurveA0
      Fan curve coefficients: dP = a0 + a1*Q + a2*Q^2 + a3*Q^3, Q in m3/s, dP in Pa.
    • fanCurveA1

      private double fanCurveA1
      Fan curve coefficient a1.
    • fanCurveA2

      private double fanCurveA2
      Fan curve coefficient a2.
    • fanCurveA3

      private double fanCurveA3
      Fan curve coefficient a3.
    • designAmbientTemperature

      private double designAmbientTemperature
      Design ambient temperature [K] (for ITD-based correction).
    • airMassFlow

      private double airMassFlow
      Air mass flow (dry basis) [kg/s].
    • airVolumeFlow

      private double airVolumeFlow
      Air volume flow at inlet [m3/s].
    • overallU

      private double overallU
      Overall heat transfer coefficient (bare tube basis) [W/m2-K].
    • requiredArea

      private double requiredArea
      Required bare-tube area [m2].
    • lmtd

      private double lmtd
      Log-mean temperature difference [K].
    • airSideHTC

      private double airSideHTC
      Air-side heat transfer coefficient (bare tube basis) [W/m2-K].
    • processSideHTC

      private double processSideHTC
      Process-side heat transfer coefficient [W/m2-K].
    • finEfficiency

      private double finEfficiency
      Fin efficiency [-].
    • fanPower

      private double fanPower
      Fan power (total, all fans) [W].
    • airSidePressureDrop

      private double airSidePressureDrop
      Air-side pressure drop [Pa].
    • faceVelocity

      private double faceVelocity
      Unit face velocity [m/s].
    • faceArea

      private double faceArea
      Bundle face area [m2].
    • tubesPerRow

      private int tubesPerRow
      Calculated number of tubes per row.
    • totalTubes

      private int totalTubes
      Total number of tubes.
    • totalFinArea

      private double totalFinArea
      Total fin area [m2].
    • bareTubeArea

      private double bareTubeArea
      Bare tube area [m2].
    • ambientCorrectionFactor

      private double ambientCorrectionFactor
      Ambient correction factor (duty ratio at different ambient T vs design T).
    • itd

      private double itd
      Initial temperature difference (ITD = T_process_in - T_air_in) [K].
  • Constructor Details

    • AirCooler

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

      public AirCooler(String name, StreamInterface inStream)
      Constructor for AirCooler with inlet stream.
      Parameters:
      name - equipment name
      inStream - inlet process stream
  • Method Details

    • setAirInletTemperature

      public void setAirInletTemperature(double temperature, String unit)
      Set air inlet temperature.
      Parameters:
      temperature - temperature value
      unit - "C" for Celsius, "K" for Kelvin
    • setAirOutletTemperature

      public void setAirOutletTemperature(double temperature, String unit)
      Set air outlet temperature.
      Parameters:
      temperature - temperature value
      unit - "C" for Celsius, "K" for Kelvin
    • setRelativeHumidity

      public void setRelativeHumidity(double rh)
      Set relative humidity fraction (0-1).
      Parameters:
      rh - relative humidity
    • setAtmosphericPressure

      public void setAtmosphericPressure(double pressure)
      Set atmospheric pressure [Pa].
      Parameters:
      pressure - atmospheric pressure in Pa
    • setTubeOuterDiameter

      public void setTubeOuterDiameter(double diameter)
      Set tube outside diameter [m].
      Parameters:
      diameter - tube OD in meters
    • setTubeWallThickness

      public void setTubeWallThickness(double thickness)
      Set tube wall thickness [m].
      Parameters:
      thickness - tube wall thickness in meters
    • setFinHeight

      public void setFinHeight(double height)
      Set fin height [m].
      Parameters:
      height - fin height in meters
    • setFinThickness

      public void setFinThickness(double thickness)
      Set fin thickness [m].
      Parameters:
      thickness - fin thickness in meters
    • setFinPitch

      public void setFinPitch(double pitch)
      Set fin pitch (fin-to-fin spacing) [m].
      Parameters:
      pitch - fin pitch in meters
    • setFinConductivity

      public void setFinConductivity(double conductivity)
      Set fin thermal conductivity [W/m-K].
      Parameters:
      conductivity - fin thermal conductivity
    • setNumberOfTubeRows

      public void setNumberOfTubeRows(int rows)
      Set number of tube rows (typically 3-6, per API 661).
      Parameters:
      rows - number of tube rows
    • setNumberOfTubePasses

      public void setNumberOfTubePasses(int passes)
      Set number of tube passes.
      Parameters:
      passes - number of tube passes
    • setTransversePitch

      public void setTransversePitch(double pitch)
      Set transverse tube pitch [m].
      Parameters:
      pitch - tube pitch in meters
    • setTubeLength

      public void setTubeLength(double length)
      Set tube length per bay [m].
      Parameters:
      length - tube length in meters
    • setBayWidth

      public void setBayWidth(double width)
      Set bay width [m].
      Parameters:
      width - bay width in meters
    • setNumberOfBays

      public void setNumberOfBays(int bays)
      Set number of bays.
      Parameters:
      bays - number of bays
    • setNumberOfFansPerBay

      public void setNumberOfFansPerBay(int fans)
      Set number of fans per bay.
      Parameters:
      fans - fans per bay
    • setFanDiameter

      public void setFanDiameter(double diameter)
      Set fan diameter [m].
      Parameters:
      diameter - fan diameter in meters
    • setProcessFoulingResistance

      public void setProcessFoulingResistance(double resistance)
      Set process-side fouling resistance [m2-K/W].
      Parameters:
      resistance - fouling resistance
    • setAirFoulingResistance

      public void setAirFoulingResistance(double resistance)
      Set air-side fouling resistance [m2-K/W].
      Parameters:
      resistance - fouling resistance
    • setLmtdCorrectionFactor

      public void setLmtdCorrectionFactor(double factor)
      Set LMTD correction factor for cross-flow arrangement.
      Parameters:
      factor - F factor (0.7-1.0)
    • setFanEfficiency

      public void setFanEfficiency(double efficiency)
      Set overall fan efficiency (fan * belt * motor).
      Parameters:
      efficiency - overall efficiency (0-1)
    • setProcessSideHTC

      public void setProcessSideHTC(double htc)
      Set process-side heat transfer coefficient [W/m2-K]. If not set, a default of 200 is used.
      Parameters:
      htc - process-side HTC
    • setDesignAmbientTemperature

      public void setDesignAmbientTemperature(double temperature, String unit)
      Set design ambient temperature (for ambient correction).
      Parameters:
      temperature - temperature value
      unit - "C" or "K"
    • setFanCurve

      public void setFanCurve(double a0, double a1, double a2, double a3)
      Set fan curve as cubic polynomial: dP = a0 + a1*Q + a2*Q^2 + a3*Q^3.
      Parameters:
      a0 - constant term [Pa]
      a1 - linear coefficient [Pa/(m3/s)]
      a2 - quadratic coefficient [Pa/(m3/s)^2]
      a3 - cubic coefficient [Pa/(m3/s)^3]
    • getFanStaticPressure

      public double getFanStaticPressure(double volumeFlow)
      Get fan static pressure from the fan curve for given volume flow [Pa].
      Parameters:
      volumeFlow - air volume flow per fan [m3/s]
      Returns:
      fan static pressure [Pa]
    • getAirMassFlow

      public double getAirMassFlow()
      Get air mass flow (dry basis) [kg/s].
      Returns:
      air mass flow
    • getAirVolumeFlow

      public double getAirVolumeFlow()
      Get air volume flow at inlet conditions [m3/s].
      Returns:
      air volume flow
    • getOverallU

      public double getOverallU()
      Get overall heat transfer coefficient (bare tube basis) [W/m2-K].
      Returns:
      U value
    • getRequiredArea

      public double getRequiredArea()
      Get required heat transfer area (bare tube basis) [m2].
      Returns:
      required area in m2
    • getLMTD

      public double getLMTD()
      Get log-mean temperature difference [K].
      Returns:
      LMTD
    • getAirSideHTC

      public double getAirSideHTC()
      Get air-side heat transfer coefficient (bare tube basis) [W/m2-K].
      Returns:
      air-side HTC
    • getFinEfficiency

      public double getFinEfficiency()
      Get fin efficiency [-].
      Returns:
      fin efficiency (0-1)
    • getFanPower

      public double getFanPower()
      Get total fan power [W].
      Returns:
      fan power in W
    • getFanPower

      public double getFanPower(String unit)
      Get total fan power with unit.
      Parameters:
      unit - "W", "kW", "hp"
      Returns:
      fan power in specified unit
    • getAirSidePressureDrop

      public double getAirSidePressureDrop()
      Get air-side pressure drop [Pa].
      Returns:
      air-side DP
    • getFaceVelocity

      public double getFaceVelocity()
      Get face velocity [m/s].
      Returns:
      face velocity
    • getFaceArea

      public double getFaceArea()
      Get bundle face area [m2].
      Returns:
      face area
    • getTubesPerRow

      public int getTubesPerRow()
      Get number of tubes per row.
      Returns:
      tubes per row
    • getTotalTubes

      public int getTotalTubes()
      Get total number of tubes.
      Returns:
      total tubes
    • getAmbientCorrectionFactor

      public double getAmbientCorrectionFactor()
      Get ambient correction factor (actual duty / design duty ratio).
      Returns:
      correction factor
    • getITD

      public double getITD()
      Get initial temperature difference (ITD) [K].
      Returns:
      ITD
    • getNumberOfBays

      public int getNumberOfBays()
      Get number of bays.
      Returns:
      number of bays
    • getNumberOfTubeRows

      public int getNumberOfTubeRows()
      Get number of tube rows.
      Returns:
      number of tube rows
    • calcAirFlow

      private void calcAirFlow(double duty)
      Calculate air mass and volume flow from duty and humid-air energy balance.
      Parameters:
      duty - heat duty [W] (positive = heat rejection)
    • calcLMTD

      private void calcLMTD(double tProcessIn, double tProcessOut)
      Calculate LMTD for cross-flow with F correction. Uses process inlet/outlet and air inlet/outlet temperatures.
      Parameters:
      tProcessIn - process inlet temperature [K]
      tProcessOut - process outlet temperature [K]
    • calcAirSideHTC

      private void calcAirSideHTC()
      Calculate air-side heat transfer coefficient using Briggs-Young correlation for finned tubes.

      Briggs, D.E. and Young, E.H. (1963), "Convection Heat Transfer and Pressure Drop of Air Flowing Across Triangular Pitch Banks of Finned Tubes", Chemical Engineering Progress Symposium Series 59(41):1-10.

    • calcThermalDesign

      private void calcThermalDesign(double duty)
      Calculate overall U, required area, and bundle sizing.
      Parameters:
      duty - heat duty [W]
    • calcAirSidePressureDrop

      private void calcAirSidePressureDrop()
      Calculate air-side pressure drop using Robinson-Briggs correlation.
    • calcFanPower

      private void calcFanPower()
      Calculate fan power.
    • calcAmbientCorrection

      private void calcAmbientCorrection()
      Calculate ambient temperature correction factor. Ratio of available duty at actual ambient vs design ambient, based on the mean-temperature-difference method.
    • 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
      Overrides:
      run in class Heater
      Parameters:
      id - UUID
    • estimateProcessSideHTC

      private void estimateProcessSideHTC()
      Estimate process-side HTC from fluid properties if not explicitly set.
    • toJson

      public String toJson()
      Generate a comprehensive JSON report of the air cooler design.
      Specified by:
      toJson in interface ProcessEquipmentInterface
      Overrides:
      toJson in class Cooler
      Returns:
      JSON string