Class ShortcutDistillationColumn
java.lang.Object
neqsim.util.NamedBaseClass
neqsim.process.SimulationBaseClass
neqsim.process.equipment.ProcessEquipmentBaseClass
neqsim.process.equipment.distillation.ShortcutDistillationColumn
- All Implemented Interfaces:
Serializable, Runnable, DistillationInterface, ProcessEquipmentInterface, ProcessElementInterface, SimulationInterface, NamedInterface
public class ShortcutDistillationColumn
extends ProcessEquipmentBaseClass
implements DistillationInterface
Short-cut distillation column using the Fenske-Underwood-Gilliland (FUG) method.
This class provides rapid conceptual design estimates for distillation columns without requiring full rigorous tray-by-tray calculations. It calculates:
- Minimum number of stages (Fenske equation)
- Minimum reflux ratio (Underwood equations)
- Actual number of stages for a given reflux ratio (Gilliland correlation)
- Optimal feed tray location (Kirkbride equation)
- Condenser and reboiler duties
The user must specify the light key component, heavy key component, and desired recoveries or product compositions. The column operates at the feed pressure.
- Version:
- 1.0
- Author:
- NeqSim
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleRelative volatility of light key to heavy key.private StreamInterfaceBottoms stream.private doubleCondenser duty in Watts.private doubleCondenser pressure in bara.private StreamInterfaceDistillate stream.private StreamInterfaceFeed stream.private intOptimal feed tray number from top (Kirkbride).private StringHeavy key component name.private doubleRecovery of heavy key in bottoms (molar fraction, 0 to 1).private StringLight key component name.private doubleRecovery of light key in distillate (molar fraction, 0 to 1).(package private) static org.apache.logging.log4j.LoggerLogger object for class.private doubleActual number of theoretical stages (Gilliland).private doubleMinimum number of theoretical stages (Fenske).private doubleActual reflux ratio.private doubleReboiler duty in Watts.private doubleReboiler pressure in bara (default = feed pressure).private doubleReflux ratio multiplier (actual / minimum).private doubleMinimum reflux ratio (Underwood).private static final longSerialization version UID.private booleanFlag indicating if the column has been solved.Fields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
ConstructorsConstructorDescriptionConstructor for ShortcutDistillationColumn.ShortcutDistillationColumn(String name, StreamInterface feedStream) Constructor for ShortcutDistillationColumn. -
Method Summary
Modifier and TypeMethodDescriptionprivate doublecomputeBottomsToDistillateRatio(double[] zFeed, double[] alpha, int n, int lkIdx, int hkIdx) Compute bottoms to distillate molar ratio.private doublecomputeDistillateTotalFraction(double[] zFeed, int n, int lkIdx, int hkIdx) Compute total distillate fraction.private voidcomputeDuties(SystemInterface feedFluid, double reflux, double[] zFeed, double[] xD, int n, int lkIdx, int hkIdx) Compute condenser and reboiler duties.private doublecomputeFeedQuality(SystemInterface feedFluid) Compute feed quality parameter q. q = 1 for saturated liquid, q = 0 for saturated vapor.private voidcreateOutputStreams(SystemInterface feedFluid, double[] zFeed, double[] xD, int n, int lkIdx, int hkIdx) Create output streams for distillate and bottoms.private double[]estimateDistillateComposition(double[] zFeed, double[] alpha, int n, int lkIdx, int hkIdx) Estimate distillate composition based on key component recoveries.doubleGet the actual number of theoretical stages (Gilliland).doubleGet the actual reflux ratio.Get the bottoms stream.doubleGet the condenser duty in Watts.Get the distillate (overhead) stream.intGet the optimal feed tray number from the top.doubleGet the minimum number of theoretical stages (Fenske).doubleGet the minimum reflux ratio (Underwood).doubleGet the reboiler duty in Watts.doubleGet the relative volatility of light key to heavy key.Get a complete results summary as JSON string.booleanisSolved()Check if the column has been solved.voidIn this method all thermodynamic and unit operations will be calculated in a steady state calculation.voidsetCondenserPressure(double pressure) Set the condenser pressure.voidsetCondenserPressure(double pressure, String unit) Set the condenser pressure with units.voidsetFeedStream(StreamInterface feedStream) Set the feed stream.voidsetHeavyKey(String componentName) Set the heavy key component.voidsetHeavyKeyRecoveryBottoms(double recovery) Set the recovery of heavy key in the bottoms (mole fraction 0 to 1).voidsetLightKey(String componentName) Set the light key component.voidsetLightKeyRecoveryDistillate(double recovery) Set the recovery of light key in the distillate (mole fraction 0 to 1).voidsetNumberOfTrays(int number) setNumberOfTrays.voidsetReboilerPressure(double pressure) Set the reboiler pressure.voidsetRefluxRatioMultiplier(double multiplier) Set the reflux ratio multiplier (R_actual / R_minimum).private doublesolveUnderwood(double[] alpha, double[] zFeed, double q, int n) Solve the Underwood equation for theta using bisection.toJson()Serializes the Process Equipment along with its state to a JSON string.private doubleunderwoodFunction(double[] alpha, double[] zFeed, double theta, double q, int n) Evaluate the Underwood function: sum(alpha_i * z_i / (alpha_i - theta)) - (1 - q).Methods inherited from class ProcessEquipmentBaseClass
addCapacityConstraint, addController, copy, displayResult, equals, getAvailableMargin, getAvailableMarginPercent, getBottleneckConstraint, getCapacityConstraints, getConditionAnalysisMessage, getConstraintEvaluationReport, getController, getController, getControllers, getEffectiveCapacityFactor, getEnergyStream, getEntropyProduction, getExergyChange, getFailureMode, getMassBalance, getMassBalance, getMaxUtilization, getMaxUtilizationPercent, getMechanicalDesign, getMinimumFlow, getPressure, getPressure, getProperty, getReferenceDesignation, getReport_json, getResultTable, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initializeDefaultConstraints, initInstrumentDesign, initMechanicalDesign, isActive, isActive, isCapacityAnalysisEnabled, isCapacityExceeded, isFailed, isHardLimitExceeded, isNearCapacityLimit, isSetEnergyStream, reportResults, restoreFromFailure, run_step, runConditionAnalysis, setCapacityAnalysisEnabled, setController, setEnergyStream, setEnergyStream, setFailureMode, setFlowValveController, setMinimumFlow, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, simulateDegradedOperation, simulateTrip, solved, toJsonMethods inherited from class SimulationBaseClass
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTimeMethods inherited from class NamedBaseClass
getName, getTagNumber, setName, setTagNumberMethods inherited from class Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface NamedInterface
getName, getTagName, getTagNumber, setName, setTagName, setTagNumberMethods inherited from interface ProcessEquipmentInterface
addCapacityConstraint, addController, displayResult, equals, getAvailableMargin, getAvailableMarginPercent, getBottleneckConstraint, getCapacityConstraints, getCapacityDuty, getCapacityMax, getConditionAnalysisMessage, getController, getController, getControllers, getElectricalDesign, getEntropyProduction, getEquipmentState, getExergyChange, getExergyChange, getExergyDestruction, getExergyDestruction, getFluid, getInletStreams, getInstrumentDesign, getMassBalance, getMassBalance, getMaxUtilization, getMaxUtilizationPercent, getMechanicalDesign, getOperatingEnvelopeViolation, getOutletFlowRate, getOutletPressure, getOutletStreams, getOutletTemperature, getPressure, getPressure, getReferenceDesignation, getReferenceDesignationString, getReport_json, getRestCapacity, getResultTable, getSimulationValidationErrors, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initInstrumentDesign, initMechanicalDesign, isCapacityExceeded, isHardLimitExceeded, isNearCapacityLimit, isSimulationValid, isWithinOperatingEnvelope, needRecalculation, reportResults, runConditionAnalysis, setController, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, toJson, validateSetupMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, run_step, runTransient, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTime, solved
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
static org.apache.logging.log4j.Logger loggerLogger object for class. -
feedStream
Feed stream. -
lightKey
Light key component name. -
heavyKey
Heavy key component name. -
lightKeyRecoveryDistillate
private double lightKeyRecoveryDistillateRecovery of light key in distillate (molar fraction, 0 to 1). -
heavyKeyRecoveryBottoms
private double heavyKeyRecoveryBottomsRecovery of heavy key in bottoms (molar fraction, 0 to 1). -
refluxRatioMultiplier
private double refluxRatioMultiplierReflux ratio multiplier (actual / minimum). -
condenserPressure
private double condenserPressureCondenser pressure in bara. -
reboilerPressure
private double reboilerPressureReboiler pressure in bara (default = feed pressure). -
nMin
private double nMinMinimum number of theoretical stages (Fenske). -
rMin
private double rMinMinimum reflux ratio (Underwood). -
nActual
private double nActualActual number of theoretical stages (Gilliland). -
rActual
private double rActualActual reflux ratio. -
feedTrayNumber
private int feedTrayNumberOptimal feed tray number from top (Kirkbride). -
condenserDuty
private double condenserDutyCondenser duty in Watts. -
reboilerDuty
private double reboilerDutyReboiler duty in Watts. -
alphaLKHK
private double alphaLKHKRelative volatility of light key to heavy key. -
distillateStream
Distillate stream. -
bottomsStream
Bottoms stream. -
solved
private boolean solvedFlag indicating if the column has been solved.
-
-
Constructor Details
-
ShortcutDistillationColumn
Constructor for ShortcutDistillationColumn.- Parameters:
name- column name
-
ShortcutDistillationColumn
Constructor for ShortcutDistillationColumn.- Parameters:
name- column namefeedStream- the feed stream
-
-
Method Details
-
setFeedStream
Set the feed stream.- Parameters:
feedStream- the feed stream
-
setLightKey
Set the light key component.- Parameters:
componentName- light key component name
-
setHeavyKey
Set the heavy key component.- Parameters:
componentName- heavy key component name
-
setLightKeyRecoveryDistillate
public void setLightKeyRecoveryDistillate(double recovery) Set the recovery of light key in the distillate (mole fraction 0 to 1).- Parameters:
recovery- light key recovery in distillate (default 0.99)
-
setHeavyKeyRecoveryBottoms
public void setHeavyKeyRecoveryBottoms(double recovery) Set the recovery of heavy key in the bottoms (mole fraction 0 to 1).- Parameters:
recovery- heavy key recovery in bottoms (default 0.99)
-
setRefluxRatioMultiplier
public void setRefluxRatioMultiplier(double multiplier) Set the reflux ratio multiplier (R_actual / R_minimum). Default is 1.2.- Parameters:
multiplier- ratio of actual to minimum reflux (must be > 1.0)
-
setCondenserPressure
public void setCondenserPressure(double pressure) Set the condenser pressure.- Parameters:
pressure- condenser pressure in bara
-
setCondenserPressure
Set the condenser pressure with units.- Parameters:
pressure- condenser pressureunit- pressure unit (e.g., "bara", "barg")
-
setReboilerPressure
public void setReboilerPressure(double pressure) Set the reboiler pressure.- Parameters:
pressure- reboiler pressure in bara
-
setNumberOfTrays
public void setNumberOfTrays(int number) setNumberOfTrays.
- Specified by:
setNumberOfTraysin interfaceDistillationInterface- Parameters:
number- a int
-
run
In this method all thermodynamic and unit operations will be calculated in a steady state calculation.
- Specified by:
runin interfaceSimulationInterface- Parameters:
id- UUID
-
computeFeedQuality
Compute feed quality parameter q. q = 1 for saturated liquid, q = 0 for saturated vapor.- Parameters:
feedFluid- the feed fluid after flash- Returns:
- feed quality q
-
solveUnderwood
private double solveUnderwood(double[] alpha, double[] zFeed, double q, int n) Solve the Underwood equation for theta using bisection.- Parameters:
alpha- relative volatilitieszFeed- feed compositionq- feed qualityn- number of components- Returns:
- theta value
-
underwoodFunction
private double underwoodFunction(double[] alpha, double[] zFeed, double theta, double q, int n) Evaluate the Underwood function: sum(alpha_i * z_i / (alpha_i - theta)) - (1 - q).- Parameters:
alpha- relative volatilitieszFeed- feed compositiontheta- current theta estimateq- feed qualityn- number of components- Returns:
- function value
-
estimateDistillateComposition
private double[] estimateDistillateComposition(double[] zFeed, double[] alpha, int n, int lkIdx, int hkIdx) Estimate distillate composition based on key component recoveries.- Parameters:
zFeed- feed compositionalpha- relative volatilitiesn- number of componentslkIdx- light key indexhkIdx- heavy key index- Returns:
- estimated distillate mole fractions (normalized)
-
computeBottomsToDistillateRatio
private double computeBottomsToDistillateRatio(double[] zFeed, double[] alpha, int n, int lkIdx, int hkIdx) Compute bottoms to distillate molar ratio.- Parameters:
zFeed- feed compositionalpha- relative volatilitiesn- number of componentslkIdx- light key indexhkIdx- heavy key index- Returns:
- B/D ratio
-
computeDuties
private void computeDuties(SystemInterface feedFluid, double reflux, double[] zFeed, double[] xD, int n, int lkIdx, int hkIdx) Compute condenser and reboiler duties.- Parameters:
feedFluid- the feed fluidreflux- actual reflux ratiozFeed- feed compositionxD- distillate compositionn- number of componentslkIdx- light key indexhkIdx- heavy key index
-
computeDistillateTotalFraction
private double computeDistillateTotalFraction(double[] zFeed, int n, int lkIdx, int hkIdx) Compute total distillate fraction.- Parameters:
zFeed- feed compositionn- number of componentslkIdx- light key indexhkIdx- heavy key index- Returns:
- total distillate fraction
-
createOutputStreams
private void createOutputStreams(SystemInterface feedFluid, double[] zFeed, double[] xD, int n, int lkIdx, int hkIdx) Create output streams for distillate and bottoms.- Parameters:
feedFluid- feed fluidzFeed- feed compositionxD- distillate compositionn- number of componentslkIdx- light key indexhkIdx- heavy key index
-
getMinimumNumberOfStages
public double getMinimumNumberOfStages()Get the minimum number of theoretical stages (Fenske).- Returns:
- minimum number of stages
-
getMinimumRefluxRatio
public double getMinimumRefluxRatio()Get the minimum reflux ratio (Underwood).- Returns:
- minimum reflux ratio
-
getActualNumberOfStages
public double getActualNumberOfStages()Get the actual number of theoretical stages (Gilliland).- Returns:
- actual number of stages
-
getActualRefluxRatio
public double getActualRefluxRatio()Get the actual reflux ratio.- Returns:
- actual reflux ratio
-
getFeedTrayNumber
public int getFeedTrayNumber()Get the optimal feed tray number from the top.- Returns:
- feed tray number
-
getCondenserDuty
public double getCondenserDuty()Get the condenser duty in Watts.- Returns:
- condenser duty (negative = heat removed)
-
getReboilerDuty
public double getReboilerDuty()Get the reboiler duty in Watts.- Returns:
- reboiler duty (positive = heat added)
-
getRelativeVolatility
public double getRelativeVolatility()Get the relative volatility of light key to heavy key.- Returns:
- alpha_LK/HK
-
getDistillateStream
Get the distillate (overhead) stream.- Returns:
- distillate stream
-
getBottomsStream
-
isSolved
public boolean isSolved()Check if the column has been solved.- Returns:
- true if solved
-
getResultsJson
Get a complete results summary as JSON string.- Returns:
- JSON string with all FUG results
-
toJson
Serializes the Process Equipment along with its state to a JSON string.
- Specified by:
toJsonin interfaceProcessEquipmentInterface- Overrides:
toJsonin classProcessEquipmentBaseClass- Returns:
- json string.
-