Class HydrocycloneMechanicalDesign

All Implemented Interfaces:
Serializable

public class HydrocycloneMechanicalDesign extends SeparatorMechanicalDesign
Mechanical design for de-oiling hydrocyclone packages.

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

Applicable standards for hydrocyclone mechanical design
StandardScope
ASME VIII Div 1Pressure vessel shell and head design
NORSOK P-001Process design requirements
NORSOK M-001Material selection
API RP 14ENozzle 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:
  • Field Details

    • serialVersionUID

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

      private double designPressureMarginFactor
      Design pressure margin factor (e.g. 1.10 for 10% above max operating).
    • designTemperatureMarginC

      private double designTemperatureMarginC
      Design temperature margin above max operating (Celsius).
    • minDesignTemperatureC

      private double minDesignTemperatureC
      Minimum design temperature (Celsius), material-driven.
    • corrosionAllowanceMm

      private double corrosionAllowanceMm
      Corrosion allowance for produced water service (mm).
    • vesselJointEfficiency

      private double vesselJointEfficiency
      Joint efficiency for welded vessel (1.0 = full radiography).
    • allowableStressMPa

      private double allowableStressMPa
      Material allowable stress at design temperature (MPa). SA-316L typical.
    • materialGrade

      private String materialGrade
      Material grade designation.
    • designCode

      private String designCode
      Design code reference.
    • maxInletVelocity

      private double maxInletVelocity
      Maximum inlet nozzle velocity (m/s). API RP 14E erosional limit.
    • maxOverflowVelocity

      private double maxOverflowVelocity
      Maximum overflow (clean water) nozzle velocity (m/s).
    • maxRejectVelocity

      private double maxRejectVelocity
      Maximum reject (oil-rich) nozzle velocity (m/s).
    • vesselInnerDiameterM

      private double vesselInnerDiameterM
      Vessel inner diameter (m) per vessel.
    • vesselWallThicknessMm

      private double vesselWallThicknessMm
      Vessel wall thickness (mm), calculated.
    • vesselLengthM

      private double vesselLengthM
      Vessel tangent-to-tangent length (m).
    • numberOfVessels

      private int numberOfVessels
      Number of vessels.
    • linersPerVessel

      private int linersPerVessel
      Number of active liners per vessel.
    • linerDiameterMm

      private double linerDiameterMm
      Liner diameter (mm).
    • totalActiveLiners

      private int totalActiveLiners
      Total number of active liners.
    • spareLiners

      private int spareLiners
      Number of spare liners.
    • headType

      private String headType
      Head type for vessel ends.
    • headThicknessMm

      private double headThicknessMm
      Head thickness (mm).
    • inletNozzleIdMm

      private double inletNozzleIdMm
      Inlet nozzle ID (mm).
    • overflowNozzleIdMm

      private double overflowNozzleIdMm
      Overflow (clean water) nozzle ID (mm).
    • rejectNozzleIdMm

      private double rejectNozzleIdMm
      Reject (oil-rich) nozzle ID (mm).
    • emptyVesselWeightKg

      private double emptyVesselWeightKg
      Empty vessel weight per vessel (kg).
    • linerWeightPerVesselKg

      private double linerWeightPerVesselKg
      Total liner insert weight per vessel (kg).
    • designPressureBarg

      private double designPressureBarg
      Design pressure (barg).
    • designTemperatureHighC

      private double designTemperatureHighC
      Design temperature high (Celsius).
    • designTemperatureLowC

      private double designTemperatureLowC
      Design temperature low (Celsius).
    • operatingPressureBarg

      private double operatingPressureBarg
      Operating pressure (barg).
    • operatingTemperatureC

      private double operatingTemperatureC
      Operating temperature (Celsius).
  • Constructor Details

    • HydrocycloneMechanicalDesign

      public HydrocycloneMechanicalDesign(ProcessEquipmentInterface equipment)
      Creates a hydrocyclone mechanical design for the given equipment.
      Parameters:
      equipment - the hydrocyclone process equipment
  • Method Details

    • calcDesign

      public void calcDesign()

      calcDesign.

      Overrides:
      calcDesign in class SeparatorMechanicalDesign
    • 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

      private void calcNozzleSizes(Hydrocyclone hc)
      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

      private void calcWeights(Hydrocyclone hc)
      Calculates vessel and package weights.
      Parameters:
      hc - the hydrocyclone equipment
    • populateBaseFields

      private void populateBaseFields()
      Populates base class fields from calculated results.
    • getResponse

      public SeparatorMechanicalDesignResponse getResponse()
      Get the mechanical design response object.

      This method returns a MechanicalDesignResponse object 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:
      getResponse in class SeparatorMechanicalDesign
      Returns:
      MechanicalDesignResponse object
    • toJson

      public String toJson()
      Export mechanical design data to JSON format.

      This method creates a MechanicalDesignResponse object 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:
      toJson in class SeparatorMechanicalDesign
      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

      public void setMaterialGrade(String grade)
      Sets the material grade and updates allowable stress.
      Parameters:
      grade - material designation (e.g. "SA-316L", "SA-316", "22Cr Duplex")
    • getMaterialGrade

      public String getMaterialGrade()
      Gets the material grade.
      Returns:
      material designation string
    • 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

      public Map<String,Object> getHydrocycloneDesignSummary()
      Gets a summary map of the hydrocyclone mechanical design results.
      Returns:
      map of design parameter names to values