Class FoulingModel
- All Implemented Interfaces:
Serializable
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:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumFouling model type selection. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleActivation energy (J/mol).private doubleDeposition pre-exponential constant.private doubleReynolds number exponent.private doubleprivate doubleprivate doubleprivate doubleprivate doubleprivate doubleRemoval rate constant (1/(Pa*s)).private FoulingModel.FoulingModelTypeprivate doubleprivate static final doubleUniversal gas constant (J/(mol*K)).private doubleprivate doubleMaximum (asymptotic) fouling resistance (m2*K/W).private static final longSerialization version UID.private doubleTime constant (hours).private doubleprivate doubleprivate doubleprivate double -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a FoulingModel with default FIXED type.Constructs a FoulingModel with specified type. -
Method Summary
Modifier and TypeMethodDescriptionvoidadvanceTime(double timeStepHours) Advances the fouling state by a time step using Euler integration.doublecalcEbertPanchalFoulingRate(double currentRf) Calculates the instantaneous fouling rate dRf/dt using the Ebert-Panchal model.doublecalcEbertPanchalResistance(double timeHours) Calculates the fouling resistance at a given time using Ebert-Panchal model with simple Euler integration.doublecalcKernSeatonResistance(double timeHours) Calculates the fouling resistance at a given time using the Kern-Seaton asymptotic model.doublecalcThresholdTemperature(double thresholdRate) Calculates the threshold wall temperature below which no fouling occurs.doubleCalculates the threshold velocity above which fouling is suppressed.static FoulingModelcreateCoolingWaterModel(double rfMaxValue, double tauHours) Creates a Kern-Seaton model for cooling water service.static FoulingModelCreates an Ebert-Panchal fouling model configured for typical crude oil service.static FoulingModelCreates an Ebert-Panchal fouling model for heavy crude oil / high-asphaltene service.doubleCalculates the asymptotic fouling resistance for current conditions.doubleGets the fixed fouling resistance.doubleGets the current fouling rate.doubleGets the current fouling resistance for the configured model and conditions.doublegetFoulingResistance(double timeHours) Gets the fouling resistance at a specified operating time.Gets the fouling model type.doubleGets the current operating time.doublepredictTimeToFouling(double targetRf) Predicts the time to reach a target fouling resistance.voidreset()Resets the fouling state (e.g., after cleaning).voidsetActivationEnergy(double energy) Sets Ebert-Panchal activation energy.voidsetAlpha(double alpha) Sets Ebert-Panchal deposition constant alpha.voidsetBeta(double beta) Sets Ebert-Panchal Reynolds exponent beta.voidsetFixedFoulingResistance(double resistance) Sets the fixed fouling resistance for the FIXED model type.voidsetGamma(double gamma) Sets Ebert-Panchal removal rate constant.voidsetModelType(FoulingModel.FoulingModelType modelType) Sets the fouling model type.voidsetRfMax(double rfMax) Sets Kern-Seaton maximum fouling resistance.voidsetTimeConstant(double timeConstant) Sets Kern-Seaton time constant.toJson()Converts all fouling model results to a JSON string.toMap()Returns all fouling model results as a map.voidupdateConditions(double velocity, double density, double viscosity, double wallTemp, double innerDiameter) Updates the operating conditions from fluid properties.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
R_GAS
private static final double R_GASUniversal gas constant (J/(mol*K)).- See Also:
-
modelType
-
fixedFoulingResistance
private double fixedFoulingResistance -
alpha
private double alphaDeposition pre-exponential constant. Typical: 0.2-1.0 for crude oils. -
beta
private double betaReynolds number exponent. Typical: -0.66 for crude oils. -
activationEnergy
private double activationEnergyActivation energy (J/mol). Typical: 28000-68000 for crude oils. -
gamma
private double gammaRemoval rate constant (1/(Pa*s)). Typical: 3e-9 to 8e-9. -
rfMax
private double rfMaxMaximum (asymptotic) fouling resistance (m2*K/W). -
timeConstant
private double timeConstantTime 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
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
-
toJson
Converts all fouling model results to a JSON string.- Returns:
- JSON string with pretty printing
-
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
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
Creates a Kern-Seaton model for cooling water service.- Parameters:
rfMaxValue- maximum fouling resistance (m2*K/W), typical 0.0002-0.0005tauHours- time constant (hours), typical 1000-4000- Returns:
- configured FoulingModel for cooling water
-
getModelType
Gets the fouling model type.- Returns:
- model type
-
setModelType
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))
-