Class FoulingModel

java.lang.Object
neqsim.process.mechanicaldesign.heatexchanger.FoulingModel
All Implemented Interfaces:
Serializable

public class FoulingModel extends Object implements Serializable
Dynamic fouling model for heat exchangers based on the Ebert-Panchal (1997) threshold fouling correlation.

Predicts time-dependent fouling resistance growth as a function of velocity, wall temperature, and fluid properties. Unlike the traditional fixed-resistance TEMA approach, this model captures:

  • The threshold condition below which fouling is negligible
  • The asymptotic fouling behavior as deposition and removal reach equilibrium
  • The effect of velocity (shear) on removal rate
  • The effect of wall temperature on chemical reaction rate (Arrhenius)

The fouling rate is modeled as deposition minus removal:

dRf/dt = alpha * Re^beta * exp(-E / (R * Tw)) - gamma * tau_w * Rf

where:

  • alpha, beta = deposition rate constants (depend on crude type)
  • E = activation energy (J/mol)
  • R = universal gas constant (8.314 J/(mol*K))
  • Tw = wall temperature (K)
  • gamma = removal rate constant
  • tau_w = wall shear stress (Pa)
  • Rf = current fouling resistance (m2*K/W)

At steady state, Rf_asymptotic = alpha * Re^beta * exp(-E/(R*Tw)) / (gamma * tau_w).

The Kern-Seaton (1959) asymptotic model is also included as a simpler alternative:

Rf(t) = Rf_max * (1 - exp(-t / tau))

References:

  • Ebert, W. and Panchal, C.B. (1997). "Analysis of Exxon Crude-Oil Slip-Stream Coking Data." Fouling Mitigation of Industrial Heat-Exchange Equipment, Begell House, 451-460.
  • Kern, D.Q. and Seaton, R.E. (1959). "A Theoretical Analysis of Thermal Surface Fouling." British Chemical Engineering, 4(5), 258-262.
  • Polley, G.T., Wilson, D.I., Yeap, B.L., and Pugh, S.J. (2002). "Evaluation of laboratory crude oil threshold fouling data for application to refinery pre-heat trains." Applied Thermal Engineering, 22, 777-788.
Version:
1.0
Author:
NeqSim Development Team
See Also:
  • Field Details

    • serialVersionUID

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

      private static final double R_GAS
      Universal gas constant (J/(mol*K)).
      See Also:
    • modelType

      private FoulingModel.FoulingModelType modelType
    • fixedFoulingResistance

      private double fixedFoulingResistance
    • alpha

      private double alpha
      Deposition pre-exponential constant. Typical: 0.2-1.0 for crude oils.
    • beta

      private double beta
      Reynolds number exponent. Typical: -0.66 for crude oils.
    • activationEnergy

      private double activationEnergy
      Activation energy (J/mol). Typical: 28000-68000 for crude oils.
    • gamma

      private double gamma
      Removal rate constant (1/(Pa*s)). Typical: 3e-9 to 8e-9.
    • rfMax

      private double rfMax
      Maximum (asymptotic) fouling resistance (m2*K/W).
    • timeConstant

      private double timeConstant
      Time constant (hours).
    • reynoldsNumber

      private double reynoldsNumber
    • wallTemperature

      private double wallTemperature
    • wallShearStress

      private double wallShearStress
    • velocity

      private double velocity
    • fluidDensity

      private double fluidDensity
    • fluidViscosity

      private double fluidViscosity
    • tubeID

      private double tubeID
    • currentFoulingResistance

      private double currentFoulingResistance
    • operatingTimeHours

      private double operatingTimeHours
    • foulingRate

      private double foulingRate
  • Constructor Details

    • FoulingModel

      public FoulingModel()
      Constructs a FoulingModel with default FIXED type.
    • FoulingModel

      public FoulingModel(FoulingModel.FoulingModelType type)
      Constructs a FoulingModel with specified type.
      Parameters:
      type - fouling model type
  • Method Details

    • getFoulingResistance

      public double getFoulingResistance()
      Gets the current fouling resistance for the configured model and conditions.
      Returns:
      fouling resistance (m2*K/W)
    • getFoulingResistance

      public double getFoulingResistance(double timeHours)
      Gets the fouling resistance at a specified operating time.
      Parameters:
      timeHours - operating time in hours
      Returns:
      fouling resistance (m2*K/W)
    • calcEbertPanchalFoulingRate

      public double calcEbertPanchalFoulingRate(double currentRf)
      Calculates the instantaneous fouling rate dRf/dt using the Ebert-Panchal model.
      dRf/dt = alpha * Re^beta * exp(-E/(R*Tw)) - gamma * tau_w * Rf
      
      Parameters:
      currentRf - current fouling resistance (m2*K/W)
      Returns:
      fouling rate (m2*K/(W*hr))
    • calcEbertPanchalResistance

      public double calcEbertPanchalResistance(double timeHours)
      Calculates the fouling resistance at a given time using Ebert-Panchal model with simple Euler integration.
      Parameters:
      timeHours - operating time (hours)
      Returns:
      fouling resistance (m2*K/W)
    • calcKernSeatonResistance

      public double calcKernSeatonResistance(double timeHours)
      Calculates the fouling resistance at a given time using the Kern-Seaton asymptotic model.
      Rf(t) = Rf_max * (1 - exp(-t / tau))
      
      Parameters:
      timeHours - operating time (hours)
      Returns:
      fouling resistance (m2*K/W)
    • calcThresholdTemperature

      public double calcThresholdTemperature(double thresholdRate)
      Calculates the threshold wall temperature below which no fouling occurs.

      At the threshold, deposition rate equals removal rate at zero fouling:

      alpha * Re^beta * exp(-E/(R*Tw_threshold)) = 0
      

      In practice, the threshold is the temperature at which dRf/dt becomes negligibly small. Uses the Polley (2002) threshold condition: fouling rate at Rf=0 equals a target threshold rate.

      Parameters:
      thresholdRate - target fouling rate at Rf=0 (m2*K/(W*s)), typical: 1e-10 to 1e-9
      Returns:
      threshold wall temperature (K)
    • calcThresholdVelocity

      public double calcThresholdVelocity()
      Calculates the threshold velocity above which fouling is suppressed.

      Uses the condition that the removal rate exceeds the deposition rate. Requires a diameter and fluid properties to convert between velocity, Reynolds number, and shear stress.

      Returns:
      threshold velocity (m/s), or 0 if fouling cannot be suppressed at this temperature
    • updateConditions

      public void updateConditions(double velocity, double density, double viscosity, double wallTemp, double innerDiameter)
      Updates the operating conditions from fluid properties.
      Parameters:
      velocity - fluid velocity (m/s)
      density - fluid density (kg/m3)
      viscosity - fluid dynamic viscosity (Pa*s)
      wallTemp - wall temperature (K)
      innerDiameter - tube inner diameter (m)
    • advanceTime

      public void advanceTime(double timeStepHours)
      Advances the fouling state by a time step using Euler integration.
      Parameters:
      timeStepHours - time step in hours
    • reset

      public void reset()
      Resets the fouling state (e.g., after cleaning).
    • getAsymptoticFoulingResistance

      public double getAsymptoticFoulingResistance()
      Calculates the asymptotic fouling resistance for current conditions.
      Returns:
      asymptotic fouling resistance (m2*K/W)
    • predictTimeToFouling

      public double predictTimeToFouling(double targetRf)
      Predicts the time to reach a target fouling resistance.
      Parameters:
      targetRf - target fouling resistance (m2*K/W)
      Returns:
      estimated time in hours, or -1 if target exceeds asymptotic value
    • toMap

      public Map<String,Object> toMap()
      Returns all fouling model results as a map.
      Returns:
      map of result keys and values
    • toJson

      public String toJson()
      Converts all fouling model results to a JSON string.
      Returns:
      JSON string with pretty printing
    • createCrudeOilModel

      public static FoulingModel createCrudeOilModel()
      Creates an Ebert-Panchal fouling model configured for typical crude oil service.

      Uses parameters from Polley et al. (2002) for North Sea crude:

      • alpha = 0.5
      • beta = -0.66
      • E = 48,000 J/mol
      • gamma = 5e-9 1/(Pa*s)
      Returns:
      configured FoulingModel for crude oil
    • createHeavyCrudeModel

      public static FoulingModel createHeavyCrudeModel()
      Creates an Ebert-Panchal fouling model for heavy crude oil / high-asphaltene service.

      Higher activation energy and deposition rate than light crude:

      • alpha = 1.0
      • beta = -0.66
      • E = 68,000 J/mol
      • gamma = 3e-9 1/(Pa*s)
      Returns:
      configured FoulingModel for heavy crude
    • createCoolingWaterModel

      public static FoulingModel createCoolingWaterModel(double rfMaxValue, double tauHours)
      Creates a Kern-Seaton model for cooling water service.
      Parameters:
      rfMaxValue - maximum fouling resistance (m2*K/W), typical 0.0002-0.0005
      tauHours - time constant (hours), typical 1000-4000
      Returns:
      configured FoulingModel for cooling water
    • getModelType

      public FoulingModel.FoulingModelType getModelType()
      Gets the fouling model type.
      Returns:
      model type
    • setModelType

      public void setModelType(FoulingModel.FoulingModelType modelType)
      Sets the fouling model type.
      Parameters:
      modelType - model type to use
    • setFixedFoulingResistance

      public void setFixedFoulingResistance(double resistance)
      Sets the fixed fouling resistance for the FIXED model type.
      Parameters:
      resistance - fouling resistance (m2*K/W)
    • getFixedFoulingResistance

      public double getFixedFoulingResistance()
      Gets the fixed fouling resistance.
      Returns:
      fouling resistance (m2*K/W)
    • setAlpha

      public void setAlpha(double alpha)
      Sets Ebert-Panchal deposition constant alpha.
      Parameters:
      alpha - deposition pre-exponential constant
    • setBeta

      public void setBeta(double beta)
      Sets Ebert-Panchal Reynolds exponent beta.
      Parameters:
      beta - Reynolds number exponent (typically negative, e.g. -0.66)
    • setActivationEnergy

      public void setActivationEnergy(double energy)
      Sets Ebert-Panchal activation energy.
      Parameters:
      energy - activation energy (J/mol)
    • setGamma

      public void setGamma(double gamma)
      Sets Ebert-Panchal removal rate constant.
      Parameters:
      gamma - removal rate constant (1/(Pa*s))
    • setRfMax

      public void setRfMax(double rfMax)
      Sets Kern-Seaton maximum fouling resistance.
      Parameters:
      rfMax - maximum fouling resistance (m2*K/W)
    • setTimeConstant

      public void setTimeConstant(double timeConstant)
      Sets Kern-Seaton time constant.
      Parameters:
      timeConstant - time constant (hours)
    • getOperatingTimeHours

      public double getOperatingTimeHours()
      Gets the current operating time.
      Returns:
      operating time (hours)
    • getFoulingRate

      public double getFoulingRate()
      Gets the current fouling rate.
      Returns:
      fouling rate (m2*K/(W*hr))