Class HydrocycloneMechanicalDesign
- All Implemented Interfaces:
Serializable
Provides pressure vessel sizing, wall thickness calculation, nozzle sizing, weight estimation, and cost estimation for multi-liner hydrocyclone packages used in produced water treatment.
Design Standards
| Standard | Scope |
|---|---|
| ASME VIII Div 1 | Pressure vessel shell and head design |
| NORSOK P-001 | Process design requirements |
| NORSOK M-001 | Material selection |
| API RP 14E | Nozzle velocity limits |
Vessel Sizing Approach
A hydrocyclone package consists of one or more pressure vessels, each housing multiple liner inserts. The vessel inner diameter is sized to accommodate the liners in a circular arrangement. Key design equations:
Wall thickness (ASME VIII Div 1, UG-27): t = (P * R) / (S * E - 0.6 * P) + CA Vessel ID from liner packing: D_vessel = f(liner_diameter, liners_per_vessel) Nozzle velocity (API RP 14E): V_nozzle = Q / A_nozzle < V_erosional
- Version:
- 1.0
- Author:
- esol
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class SeparatorMechanicalDesign
SeparatorMechanicalDesign.SeparatorValidationResult -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleMaterial allowable stress at design temperature (MPa).private doubleCorrosion allowance for produced water service (mm).private StringDesign code reference.private doubleDesign pressure (barg).private doubleDesign pressure margin factor (e.g. 1.10 for 10% above max operating).private doubleDesign temperature high (Celsius).private doubleDesign temperature low (Celsius).private doubleDesign temperature margin above max operating (Celsius).private doubleEmpty vessel weight per vessel (kg).private doubleHead thickness (mm).private StringHead type for vessel ends.private doubleInlet nozzle ID (mm).private doubleLiner diameter (mm).private intNumber of active liners per vessel.private doubleTotal liner insert weight per vessel (kg).private StringMaterial grade designation.private doubleMaximum inlet nozzle velocity (m/s).private doubleMaximum overflow (clean water) nozzle velocity (m/s).private doubleMaximum reject (oil-rich) nozzle velocity (m/s).private doubleMinimum design temperature (Celsius), material-driven.private intNumber of vessels.private doubleOperating pressure (barg).private doubleOperating temperature (Celsius).private doubleOverflow (clean water) nozzle ID (mm).private doubleReject (oil-rich) nozzle ID (mm).private static final longSerialization version UID.private intNumber of spare liners.private intTotal number of active liners.private doubleVessel inner diameter (m) per vessel.private doubleJoint efficiency for welded vessel (1.0 = full radiography).private doubleVessel tangent-to-tangent length (m).private doubleVessel wall thickness (mm), calculated.Fields inherited from class MechanicalDesign
costEstimate, designStandard, innerDiameter, maxDesignCv, maxDesignDuty, maxDesignGassVolumeFlow, maxDesignOilVolumeFlow, maxDesignPower, maxDesignPressureDrop, maxDesignVelocity, maxDesignVolumeFlow, maxDesignWaterVolumeFlow, minDesignDuty, minDesignGassVolumeFLow, minDesignOilFLow, minDesignPower, minDesignVolumeFLow, minDesignWaterVolumeFLow, moduleHeight, moduleLength, moduleWidth, outerDiameter, tantanLength, wallThickness, weightElectroInstrument, weightNozzle, weightPiping, weightStructualSteel, weightVessel, weigthInternals, weigthVesselShell -
Constructor Summary
ConstructorsConstructorDescriptionCreates a hydrocyclone mechanical design for the given equipment. -
Method Summary
Modifier and TypeMethodDescriptionvoidcalcDesign.private voidCalculates nozzle internal diameters from flow rates and velocity limits.private voidCalculates vessel inner diameter and length based on liner packing.private voidCalculates required wall thickness per ASME VIII Div 1 UG-27.private voidCalculates vessel and package weights.doubleGets the allowable stress.doubleGets the corrosion allowance.doubleGets the design pressure.doubleGets the high design temperature.doubleGets the low design temperature.doubleGets the empty vessel weight (per vessel).doubleGets the head thickness.Gets a summary map of the hydrocyclone mechanical design results.doubleGets the inlet nozzle internal diameter.doubleGets the total liner weight per vessel.Gets the material grade.intGets the number of vessels.doubleGets the overflow nozzle internal diameter.doubleGets the reject nozzle internal diameter.Get the mechanical design response object.doubleGets the vessel inner diameter.doubleGets the vessel tangent-to-tangent length.doubleGets the vessel wall thickness.private voidPopulates base class fields from calculated results.private doubleroundUpToStandardNozzle(double idMm) Rounds up a nozzle ID to the nearest standard pipe size.voidsetAllowableStressMPa(double stressMPa) Sets the allowable stress at design temperature.voidsetCorrosionAllowanceMm(double caMm) Sets the corrosion allowance.voidsetDesignPressureMarginFactor(double factor) Sets the design pressure margin factor.voidsetMaterialGrade(String grade) Sets the material grade and updates allowable stress.toJson()Export mechanical design data to JSON format.Methods inherited from class SeparatorMechanicalDesign
addSeparatorSection, applyDemistingInternal, calcGasOutletNozzleID, calcInletNozzleID, calcLiquidRetentionTime, calcLiquidVolumeAtLevel, calcOilOutletNozzleID, calcSurgeTime, calcSurgeVolume, calculateDefaultLevelFractions, calculateDesignPressure, calculateDesignTemperature, calculateEffectiveLengthsFromInternals, calculateFoamAdjustedVolume, calculateMinDesignTemperature, calculateSoudersBrownVelocity, calculateStokesVelocity, displayResults, getBootVolume, getDemisterPressureDrop, getDemisterThickness, getDemisterType, getDemisterVoidFraction, getDemisterWireDiameter, getDesignPressureMargin, getDesignSummary, getDesignTemperatureMarginC, getDropletDiameterGasLiquid, getDropletDiameterLiquidLiquid, getEffectiveLengthGas, getEffectiveLengthLiquid, getEntrainmentDetailJson, getFg, getFoamAllowanceFactor, getGasCarryUnderCalibrationFactor, getGasInOilFraction, getGasInWaterFraction, getGasLoadFactor, getGasOutletNozzleID, getHHLL, getHHLLFraction, getHIL, getHILFraction, getHLL, getHLLFraction, getInletDeviceKFactor, getInletNozzleID, getInletPipeDiameter, getInletToGasDemister, getInletToPerforatedPlate, getKFactorUtilization, getLIL, getLILFraction, getLiquidInGasCalibrationFactor, getLiquidLiquidCalibrationFactor, getLLL, getLLLFraction, getLLLL, getLLLLFraction, getMaxGasVelocityLimit, getMaxLiquidVelocity, getMinDesignTemperatureC, getMinOilRetentionTime, getMinWaterRetentionTime, getMistEliminatorDpCoeff, getMistEliminatorEfficiency, getMistEliminatorThickness, getNIL, getNILFraction, getNLL, getNLLFraction, getOilInGasFraction, getOilInWaterFraction, getOilOutletNozzleID, getOverallGasLiquidEfficiency, getPerforatedPlateToWeir, getRetentionTime, getSeparatorSection, getSeparatorSection, getSeparatorSections, getVolumeSafetyFactor, getWaterInGasFraction, getWaterInOilFraction, getWaterOutletNozzleID, getWeirFraction, getWeirHeight, getWeirHeightAbsolute, getWeirLength, isDetailedEntrainmentUsed, isMistEliminatorFlooded, loadProcessDesignParameters, performSizingCalculations, readDesignSpecifications, setAllLiquidLevelsFromHeights, setBootVolume, setDemisterPressureDrop, setDemisterThickness, setDemisterType, setDemisterVoidFraction, setDemisterWireDiameter, setDesign, setDesignPressureMargin, setDesignTemperatureMarginC, setDropletDiameterGasLiquid, setDropletDiameterLiquidLiquid, setEffectiveLengthGas, setEffectiveLengthLiquid, setFg, setFoamAllowanceFactor, setFromDesignSpec, setFromExistingDesign, setFromExistingDesign, setGasLiquidSurfaceTension, setGasLoadFactor, setGasOutletNozzleID, setHHLLFraction, setHILFraction, setHLLFraction, setInletDeviceKFactor, setInletDeviceType, setInletNozzleID, setInletPipeDiameter, setInletToGasDemister, setInletToPerforatedPlate, setInterfaceLevelsFromHeights, setLILFraction, setLiquidLevelsFromHeights, setLLLFraction, setLLLLFraction, setMaxGasVelocityLimit, setMaxLiquidVelocity, setMinDesignTemperatureC, setMinOilRetentionTime, setMinWaterRetentionTime, setMistEliminatorDpCoeff, setMistEliminatorThickness, setNILFraction, setNLLFraction, setOilOutletNozzleID, setPerforatedPlateToWeir, setRetentionTime, setVolumeSafetyFactor, setWaterOutletNozzleID, setWeirFraction, setWeirHeightAbsolute, setWeirLength, validateDesign, validateDesignComprehensive, validateDropletDiameter, validateGasVelocity, validateLiquidVelocity, validateRetentionTimeMethods inherited from class MechanicalDesign
addDesignDataSource, calculateCostEstimate, costEstimateToJson, equals, generateBillOfMaterials, getApplicableStandards, getBareModuleCost, getCompanySpecificDesignStandards, getConstrutionMaterial, getCorrosionAllowance, getCostEstimate, getDefaultLiquidDensity, getDefaultLiquidViscosity, getDesignCorrosionAllowance, getDesignDataSources, getDesignJointEfficiency, getDesignLimitData, getDesignMaxPressureLimit, getDesignMaxTemperatureLimit, getDesignMinPressureLimit, getDesignMinTemperatureLimit, getDesignStandard, getDuty, getGrassRootsCost, getHeatTransferArea, getInnerDiameter, getInstallationManHours, getJointEfficiency, getLastMarginResult, getMaterialDesignStandard, getMaterialPipeDesignStandard, getMaxAllowableStress, getMaxDesignCv, getMaxDesignGassVolumeFlow, getMaxDesignOilVolumeFlow, getMaxDesignPressure, getMaxDesignPressureDrop, getMaxDesignVelocity, getMaxDesignVolumeFlow, getMaxDesignWaterVolumeFlow, getMaxOperationPressure, getMaxOperationTemperature, getMinDesignGassVolumeFLow, getMinDesignOilFLow, getMinDesignPressure, getMinDesignVolumeFLow, getMinDesignWaterVolumeFLow, getMinOperationPressure, getMinOperationTemperature, getModuleHeight, getModuleLength, getModuleWidth, getOuterDiameter, getPower, getPressureMarginFactor, getProcessEquipment, getPurchasedEquipmentCost, getRecommendedStandards, getTantanLength, getTensileStrength, getTotalModuleCost, getVolumeTotal, getWallThickness, getWeightElectroInstrument, getWeightNozzle, getWeightPiping, getWeightStructualSteel, getWeightTotal, getWeightVessel, getWeigthInternals, getWeigthVesselShell, hasDesignStandard, hashCode, initMechanicalDesign, isHasSetCompanySpecificDesignStandards, setCompanySpecificDesignStandards, setConstrutionMaterial, setCorrosionAllowance, setCostEstimateCepci, setCostEstimateLocationFactor, setCostEstimateMaterial, setDefaultLiquidDensity, setDefaultLiquidViscosity, setDesignDataSource, setDesignDataSources, setDesignStandard, setDesignStandard, setDesignStandard, setDesignStandard, setDesignStandards, setHasSetCompanySpecificDesignStandards, setInnerDiameter, setJointEfficiency, setMaterialDesignStandard, setMaterialPipeDesignStandard, setMaxDesignCv, setMaxDesignDuty, setMaxDesignGassVolumeFlow, setMaxDesignOilVolumeFlow, setMaxDesignPower, setMaxDesignPressureDrop, setMaxDesignVelocity, setMaxDesignVolumeFlow, setMaxDesignWaterVolumeFlow, setMaxOperationPressure, setMaxOperationTemperature, setMinDesignDuty, setMinDesignGassVolumeFLow, setMinDesignOilFLow, setMinDesignPower, setMinDesignVolumeFLow, setMinDesignWaterVolumeFLow, setMinOperationPressure, setMinOperationTemperature, setModuleHeight, setModuleLength, setModuleWidth, setOuterDiameter, setPressureMarginFactor, setProcessEquipment, setTantanLength, setTensileStrength, setWallThickness, setWeightElectroInstrument, setWeightNozzle, setWeightPiping, setWeightStructualSteel, setWeightTotal, setWeightVessel, setWeigthInternals, setWeigthVesselShell, toCompactJson, validateOperatingEnvelope, validateOperatingEnvelope
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
designPressureMarginFactor
private double designPressureMarginFactorDesign pressure margin factor (e.g. 1.10 for 10% above max operating). -
designTemperatureMarginC
private double designTemperatureMarginCDesign temperature margin above max operating (Celsius). -
minDesignTemperatureC
private double minDesignTemperatureCMinimum design temperature (Celsius), material-driven. -
corrosionAllowanceMm
private double corrosionAllowanceMmCorrosion allowance for produced water service (mm). -
vesselJointEfficiency
private double vesselJointEfficiencyJoint efficiency for welded vessel (1.0 = full radiography). -
allowableStressMPa
private double allowableStressMPaMaterial allowable stress at design temperature (MPa). SA-316L typical. -
materialGrade
Material grade designation. -
designCode
Design code reference. -
maxInletVelocity
private double maxInletVelocityMaximum inlet nozzle velocity (m/s). API RP 14E erosional limit. -
maxOverflowVelocity
private double maxOverflowVelocityMaximum overflow (clean water) nozzle velocity (m/s). -
maxRejectVelocity
private double maxRejectVelocityMaximum reject (oil-rich) nozzle velocity (m/s). -
vesselInnerDiameterM
private double vesselInnerDiameterMVessel inner diameter (m) per vessel. -
vesselWallThicknessMm
private double vesselWallThicknessMmVessel wall thickness (mm), calculated. -
vesselLengthM
private double vesselLengthMVessel tangent-to-tangent length (m). -
numberOfVessels
private int numberOfVesselsNumber of vessels. -
linersPerVessel
private int linersPerVesselNumber of active liners per vessel. -
linerDiameterMm
private double linerDiameterMmLiner diameter (mm). -
totalActiveLiners
private int totalActiveLinersTotal number of active liners. -
spareLiners
private int spareLinersNumber of spare liners. -
headType
Head type for vessel ends. -
headThicknessMm
private double headThicknessMmHead thickness (mm). -
inletNozzleIdMm
private double inletNozzleIdMmInlet nozzle ID (mm). -
overflowNozzleIdMm
private double overflowNozzleIdMmOverflow (clean water) nozzle ID (mm). -
rejectNozzleIdMm
private double rejectNozzleIdMmReject (oil-rich) nozzle ID (mm). -
emptyVesselWeightKg
private double emptyVesselWeightKgEmpty vessel weight per vessel (kg). -
linerWeightPerVesselKg
private double linerWeightPerVesselKgTotal liner insert weight per vessel (kg). -
designPressureBarg
private double designPressureBargDesign pressure (barg). -
designTemperatureHighC
private double designTemperatureHighCDesign temperature high (Celsius). -
designTemperatureLowC
private double designTemperatureLowCDesign temperature low (Celsius). -
operatingPressureBarg
private double operatingPressureBargOperating pressure (barg). -
operatingTemperatureC
private double operatingTemperatureCOperating temperature (Celsius).
-
-
Constructor Details
-
HydrocycloneMechanicalDesign
Creates a hydrocyclone mechanical design for the given equipment.- Parameters:
equipment- the hydrocyclone process equipment
-
-
Method Details
-
calcDesign
-
calcVesselDimensions
private void calcVesselDimensions()Calculates vessel inner diameter and length based on liner packing.The vessel must accommodate the liners plus header/manifold space. The diameter is estimated from the number of liners per vessel packed in a circular cross-section. The vessel length depends on the liner effective length plus inlet/outlet header space.
-
calcWallThickness
private void calcWallThickness()Calculates required wall thickness per ASME VIII Div 1 UG-27.For cylindrical shells under internal pressure:
t = (P * R) / (S * E - 0.6 * P) + CA
where P = design pressure (MPa), R = inside radius (mm), S = allowable stress (MPa), E = joint efficiency, CA = corrosion allowance (mm).
-
calcNozzleSizes
Calculates nozzle internal diameters from flow rates and velocity limits.- Parameters:
hc- the hydrocyclone equipment
-
roundUpToStandardNozzle
private double roundUpToStandardNozzle(double idMm) Rounds up a nozzle ID to the nearest standard pipe size.- Parameters:
idMm- calculated nozzle ID in mm- Returns:
- next standard pipe size in mm
-
calcWeights
Calculates vessel and package weights.- Parameters:
hc- the hydrocyclone equipment
-
populateBaseFields
private void populateBaseFields()Populates base class fields from calculated results. -
getResponse
Get the mechanical design response object.This method returns a
MechanicalDesignResponseobject that can be further customized or combined with other data before serialization.Returns a separator-specific response with additional fields for vessel sizing, internals, and process design data.
- Overrides:
getResponsein classSeparatorMechanicalDesign- Returns:
- MechanicalDesignResponse object
-
toJson
Export mechanical design data to JSON format.This method creates a
MechanicalDesignResponseobject and serializes it to JSON using Gson. The JSON includes equipment identification, weight breakdown, design conditions, dimensions, and materials information.Usage example:
MechanicalDesign mecDesign = separator.getMechanicalDesign(); mecDesign.calcDesign(); String json = mecDesign.toJson();Returns JSON with separator-specific fields.
- Overrides:
toJsonin classSeparatorMechanicalDesign- Returns:
- JSON string representation of the mechanical design
-
getVesselInnerDiameterM
public double getVesselInnerDiameterM()Gets the vessel inner diameter.- Returns:
- diameter in meters
-
getVesselWallThicknessMm
public double getVesselWallThicknessMm()Gets the vessel wall thickness.- Returns:
- thickness in mm
-
getVesselLengthM
public double getVesselLengthM()Gets the vessel tangent-to-tangent length.- Returns:
- length in meters
-
getNumberOfVessels
public int getNumberOfVessels()Gets the number of vessels.- Returns:
- number of pressure housings
-
getInletNozzleIdMm
public double getInletNozzleIdMm()Gets the inlet nozzle internal diameter.- Returns:
- nozzle ID in mm
-
getOverflowNozzleIdMm
public double getOverflowNozzleIdMm()Gets the overflow nozzle internal diameter.- Returns:
- nozzle ID in mm
-
getRejectNozzleIdMm
public double getRejectNozzleIdMm()Gets the reject nozzle internal diameter.- Returns:
- nozzle ID in mm
-
getEmptyVesselWeightKg
public double getEmptyVesselWeightKg()Gets the empty vessel weight (per vessel).- Returns:
- weight in kg
-
getLinerWeightPerVesselKg
public double getLinerWeightPerVesselKg()Gets the total liner weight per vessel.- Returns:
- weight in kg
-
getDesignPressureBarg
public double getDesignPressureBarg()Gets the design pressure.- Returns:
- pressure in barg
-
getDesignTemperatureHighC
public double getDesignTemperatureHighC()Gets the high design temperature.- Returns:
- temperature in Celsius
-
getDesignTemperatureLowC
public double getDesignTemperatureLowC()Gets the low design temperature.- Returns:
- temperature in Celsius
-
getHeadThicknessMm
public double getHeadThicknessMm()Gets the head thickness.- Returns:
- thickness in mm
-
setMaterialGrade
Sets the material grade and updates allowable stress.- Parameters:
grade- material designation (e.g. "SA-316L", "SA-316", "22Cr Duplex")
-
getMaterialGrade
-
setCorrosionAllowanceMm
public void setCorrosionAllowanceMm(double caMm) Sets the corrosion allowance.- Parameters:
caMm- corrosion allowance in mm
-
getCorrosionAllowanceMm
public double getCorrosionAllowanceMm()Gets the corrosion allowance.- Returns:
- corrosion allowance in mm
-
setDesignPressureMarginFactor
public void setDesignPressureMarginFactor(double factor) Sets the design pressure margin factor.- Parameters:
factor- margin factor (e.g. 1.10 for 10%)
-
setAllowableStressMPa
public void setAllowableStressMPa(double stressMPa) Sets the allowable stress at design temperature.- Parameters:
stressMPa- allowable stress in MPa
-
getAllowableStressMPa
public double getAllowableStressMPa()Gets the allowable stress.- Returns:
- stress in MPa
-
getHydrocycloneDesignSummary
-