Class PipeHagedornBrown
- All Implemented Interfaces:
Serializable, Runnable, CapacityConstrainedEquipment, PipeLineInterface, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface
Implements the Hagedorn and Brown (1965) method for predicting pressure traverses in vertical and near-vertical wells. This correlation is widely used for production tubing and vertical riser calculations, particularly when the liquid phase is continuous.
Reference
Hagedorn, A.R. and Brown, K.E., "Experimental Study of Pressure Gradients Occurring During Continuous Two-Phase Flow in Small-Diameter Vertical Conduits", Journal of Petroleum Technology, April 1965, pp. 475-484. SPE-940-PA.
Method Overview
The Hagedorn-Brown correlation calculates pressure gradient from:
dP/dz = (rho_m * g + f * rho_m * v_m^2 / (2 * D)) / (1 - rho_m * v_m * v_sg / P)
where rho_m is the mixture density accounting for slip between phases via the empirical liquid holdup correlation. The denominator accounts for the acceleration pressure gradient (kinetic energy changes).
Liquid Holdup Determination
Liquid holdup (H_L) is determined from three dimensionless groups using empirical charts (correlations fitted to Hagedorn-Brown experimental data):
- Liquid velocity number: N_vL = v_sL * (rho_L / (g * sigma))^0.25
- Gas velocity number: N_vG = v_sG * (rho_L / (g * sigma))^0.25
- Pipe diameter number: N_D = D * (rho_L * g / sigma)^0.5
- Liquid viscosity number: N_L = mu_L * (g / (rho_L * sigma^3))^0.25
Applicability
- Best suited for vertical or near-vertical flow (inclination 75-90 degrees)
- Wide range of gas-liquid ratios
- Pipe diameters from 1 to 4 inches (tested range)
- Not recommended for horizontal or slightly inclined flow
Usage Example
SystemInterface fluid = new SystemSrkEos(350.0, 200.0);
fluid.addComponent("methane", 0.8);
fluid.addComponent("nC10", 0.2);
fluid.setMixingRule("classic");
Stream inlet = new Stream("well_inlet", fluid);
inlet.setFlowRate(50000, "kg/hr");
inlet.run();
PipeHagedornBrown tubing = new PipeHagedornBrown("production_tubing", inlet);
tubing.setDiameter(0.0762); // 3 inch tubing
tubing.setLength(3000.0); // 3000 m TVD
tubing.setElevation(-3000.0); // vertical downward (production)
tubing.setNumberOfIncrements(30);
tubing.run();
- Version:
- 1.0
- Author:
- NeqSim
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleCalculated liquid holdup.private static final doubleAcceleration of gravity in m/s2.Length profile along the pipe.private static final org.apache.logging.log4j.LoggerLogger object for class.private doubleMixture density in kg/m3.private doubleMixture velocity in m/s.Pressure profile along the pipe.private static final longSerialization version UID.private doubleSuperficial gas velocity in m/s.private doubleSuperficial liquid velocity in m/s.Temperature profile along the pipe.private doubleTotal pressure drop in bar.Fields inherited from class Pipeline
adiabatic, ambientTemperature, angle, burialDepth, buried, coatingConductivity, coatingThickness, corrosionAllowance, designCode, designPressure, designTemperature, diameter, elevation, equilibriumHeatTransfer, equilibriumMassTransfer, fileName, fittings, flowPattern, flowRegime, frictionFactor, heatTransferCoefficient, inletElevation, innerHeatTransferCoefficient, insulationConductivity, insulationThickness, insulationType, legHeights, legPositions, length, liquidHoldup, liquidHoldupProfile, locationClass, materialGrade, mechanicalDesignCalculator, numberOfIncrements, numberOfLegs, numberOfNodesInLeg, outerHeatTransferCoefficient, outerHeatTransferCoeffs, outerTemperature, outletElevation, pipe, pipeDiameters, pipelineMechanicalDesign, pipeMaterial, pipeSchedule, pipeWallConductivity, pipeWallRoughness, pressureDrop, pressureProfile, reynoldsNumber, roughness, soilConductivity, surfaceTemperature, system, temperatureProfile, times, useFittings, velocity, wallHeatTransferCoeffs, wallThicknessFields inherited from class TwoPortEquipment
inStream, outStreamFields inherited from class ProcessEquipmentBaseClass
conditionAnalysisMessage, energyStream, hasController, isSolved, properties, reportFields inherited from class SimulationBaseClass
calcIdentifier, calculateSteadyState, timeFields inherited from class NamedBaseClass
name -
Constructor Summary
ConstructorsConstructorDescriptionDefault constructor for PipeHagedornBrown.PipeHagedornBrown(String name) Constructor with name.PipeHagedornBrown(String name, StreamInterface inStream) Constructor with name and inlet stream. -
Method Summary
Modifier and TypeMethodDescriptionprivate doublecalcCNL(double nL) Calculate CNL coefficient from liquid viscosity number.private doublecalcFrictionFactor(double re) Calculate Moody/Haaland friction factor.private doublecalcHoldupFromParam(double param) Calculate liquid holdup from the holdup parameter using curve-fit to chart.private doublecalcLiquidHoldup(double nVl, double nVg, double nD, double nL, double lambdaL) Calculate liquid holdup using the Hagedorn-Brown empirical correlation.private doublecalcSecondaryCorrection(double param) Calculate secondary correction factor psi.private doublecalcSegmentPressureDrop(SystemInterface sys, double segLength, double segElev) Calculate pressure drop for a single pipe segment using the Hagedorn-Brown method.Get the length profile along the pipe.doubleGet the calculated liquid holdup at the last segment.doubleGet the mixture density at the last segment.doubleGet the total pressure drop across the pipeline.double[]Get the pressure profile along the pipe.Get the pressure profile as a list.double[]Get the temperature profile along the pipe.Get the temperature profile as a list.doubleGet the total pressure drop across the pipe.voidIn this method all thermodynamic and unit operations will be calculated in a steady state calculation.Methods inherited from class Pipeline
addCapacityConstraint, addFitting, addFittingFromDatabase, addFittings, addStandardFitting, addStandardFittings, calculateHoopStress, calculateMAOP, calculateMinimumWallThickness, calculateOverallHeatTransferCoefficient, calculateTestPressure, calculateVonMisesStress, clearCapacityConstraints, clearFittings, displayResult, generateMechanicalDesignReport, getAmbientTemperature, getAngle, getBottleneckConstraint, getBurialDepth, getCapacityConstraints, getCapacityDuty, getCapacityMax, getCoatingConductivity, getCoatingThickness, getCorrosionAllowance, getCorrosionRate, getDesignCode, getDesignPressure, getDesignTemperature, getDiameter, getEffectiveLength, getElevation, getEntropyProduction, getEquivalentLength, getFittings, getFlowRegime, getFrictionFactor, getHeatTransferCoefficient, getInletElevation, getInnerHeatTransferCoefficient, getInsulationConductivity, getInsulationThickness, getInsulationType, getLength, getLiquidHoldupProfile, getLocationClass, getMAOP, getMaterialGrade, getMaxUtilization, getMechanicalDesign, getMechanicalDesignCalculator, getNumberOfFittings, getNumberOfIncrements, getNumberOfLegs, getOuterHeatTransferCoefficient, getOutletElevation, getOutletPressure, getOutletTemperature, getPipe, getPipeMaterial, getPipeSchedule, getPipeWallConductivity, getPipeWallRoughness, getRecommendedCorrosionAllowanceMm, getRecommendedMaterial, getReynoldsNumber, getSoilConductivity, getSuperficialVelocity, getSuperficialVelocity, getTimes, getTotalFittingsLdRatio, getVelocity, getWallThickness, initializeCapacityConstraints, initMechanicalDesign, isAdiabatic, isBuried, isCapacityExceeded, isHardLimitExceeded, isMechanicalDesignSafe, isUseFittings, printFittingsSummary, removeCapacityConstraint, runCorrosionAnalysis, runTransient, setAdiabatic, setAmbientTemperature, setAmbientTemperatures, setAngle, setBurialDepth, setBuried, setCoatingConductivity, setCoatingThickness, setConstantSurfaceTemperature, setCorrosionAllowance, setDesignCode, setDesignLifeYears, setDesignPressure, setDesignPressure, setDesignTemperature, setDiameter, setElevation, setEquilibriumHeatTransfer, setEquilibriumMassTransfer, setGlycolWeightFraction, setHeatTransferCoefficient, setHeightProfile, setInhibitorEfficiency, setInitialFlowPattern, setInletElevation, setInnerHeatTransferCoefficient, setInsulationConductivity, setInsulationThickness, setInsulationType, setLegPositions, setLength, setLocationClass, setMaterialGrade, setNumberOfIncrements, setNumberOfLegs, setNumberOfNodesInLeg, setOuterHeatTransferCoefficient, setOuterHeatTransferCoefficients, setOuterTemperatures, setOutletElevation, setOutletPressure, setOutletTemperature, setOutputFileName, setPipeDiameters, setPipeMaterial, setPipeOuterHeatTransferCoefficients, setPipeSchedule, setPipeSpecification, setPipeWallConductivity, setPipeWallHeatTransferCoefficients, setPipeWallRoughness, setPipeWallRoughness, setSoilConductivity, setTimeSeries, setUseFittings, setWallHeatTransferCoefficients, setWallThickness, toJson, toJsonMethods inherited from class TwoPortEquipment
getInletPressure, getInletStream, getInletStreams, getInletTemperature, getMassBalance, getOutletPressure, getOutletStream, getOutletStreams, getOutletTemperature, setInletPressure, setInletStream, setInletTemperature, setOutletPressure, setOutletStream, setOutletTemperature, validateSetupMethods inherited from class ProcessEquipmentBaseClass
addController, copy, equals, getAvailableMargin, getAvailableMarginPercent, getConditionAnalysisMessage, getConstraintEvaluationReport, getController, getController, getControllers, getEffectiveCapacityFactor, getEnergyStream, getExergyChange, getFailureMode, getMassBalance, getMaxUtilizationPercent, getMinimumFlow, getPressure, getPressure, getProperty, getReferenceDesignation, getReport_json, getResultTable, getSpecification, getTemperature, getTemperature, getThermoSystem, getUtilizationSummary, hashCode, initElectricalDesign, initializeDefaultConstraints, initInstrumentDesign, isActive, isActive, isCapacityAnalysisEnabled, isFailed, isNearCapacityLimit, isSetEnergyStream, reportResults, restoreFromFailure, run_step, runConditionAnalysis, setCapacityAnalysisEnabled, setController, setEnergyStream, setEnergyStream, setFailureMode, setFlowValveController, setMinimumFlow, setPressure, setReferenceDesignation, setRegulatorOutSignal, setSpecification, setTemperature, simulateDegradedOperation, simulateTrip, solvedMethods 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 CapacityConstrainedEquipment
disableAllConstraints, enableAllConstraints, getAvailableMargin, getAvailableMarginPercent, getMaxUtilizationPercent, getUtilizationSummary, isCapacityAnalysisEnabled, isNearCapacityLimit, setCapacityAnalysisEnabledMethods inherited from interface NamedInterface
getName, getTagName, getTagNumber, setName, setTagName, setTagNumberMethods inherited from interface PipeLineInterface
setOutPressure, setOutTemperatureMethods inherited from interface ProcessEquipmentInterface
getElectricalDesign, getEquipmentState, getExergyChange, getExergyDestruction, getExergyDestruction, getFluid, getInstrumentDesign, getOperatingEnvelopeViolation, getOutletFlowRate, getReferenceDesignationString, getRestCapacity, getSimulationValidationErrors, isSimulationValid, isWithinOperatingEnvelope, needRecalculationMethods inherited from interface SimulationInterface
getCalculateSteadyState, getCalculationIdentifier, getTime, increaseTime, isRunInSteps, run, run_step, run_step, runTransient, setCalculateSteadyState, setCalculationIdentifier, setRunInSteps, setTime, solvedMethods inherited from interface TwoPortInterface
getInletPressure, getInletStream, getInletTemperature, getInStream, getOutletPressure, getOutletStream, getOutletTemperature, getOutStream, setInletPressure, setInletStream, setInletTemperature, setOutletPressure, setOutletStream, setOutletTemperature, setOutPressure, setOutTemperature
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerialization version UID.- See Also:
-
logger
private static final org.apache.logging.log4j.Logger loggerLogger object for class. -
GRAVITY
private static final double GRAVITYAcceleration of gravity in m/s2.- See Also:
-
totalPressureDrop
private double totalPressureDropTotal pressure drop in bar. -
superficialLiquidVelocity
private double superficialLiquidVelocitySuperficial liquid velocity in m/s. -
superficialGasVelocity
private double superficialGasVelocitySuperficial gas velocity in m/s. -
mixtureVelocity
private double mixtureVelocityMixture velocity in m/s. -
calculatedHoldup
private double calculatedHoldupCalculated liquid holdup. -
mixtureDensity
private double mixtureDensityMixture density in kg/m3. -
pressureProfileList
-
temperatureProfileList
-
lengthProfileList
-
-
Constructor Details
-
PipeHagedornBrown
public PipeHagedornBrown()Default constructor for PipeHagedornBrown. -
PipeHagedornBrown
-
PipeHagedornBrown
Constructor with name and inlet stream.- Parameters:
name- equipment nameinStream- inlet stream
-
-
Method Details
-
run
In this method all thermodynamic and unit operations will be calculated in a steady state calculation.
- Specified by:
runin interfaceSimulationInterface- Overrides:
runin classPipeline- Parameters:
id- UUID
-
calcSegmentPressureDrop
Calculate pressure drop for a single pipe segment using the Hagedorn-Brown method.- Parameters:
sys- thermodynamic system at segment conditionssegLength- segment length in meterssegElev- segment elevation change in meters (positive = upward)- Returns:
- pressure drop in bar
-
calcLiquidHoldup
private double calcLiquidHoldup(double nVl, double nVg, double nD, double nL, double lambdaL) Calculate liquid holdup using the Hagedorn-Brown empirical correlation.Uses curve-fit approximations to the original Hagedorn-Brown charts. The holdup is determined from a correlation function of dimensionless velocity, diameter, and viscosity numbers.
- Parameters:
nVl- liquid velocity numbernVg- gas velocity numbernD- pipe diameter numbernL- liquid viscosity numberlambdaL- no-slip liquid fraction- Returns:
- predicted liquid holdup (0 to 1)
-
calcCNL
private double calcCNL(double nL) Calculate CNL coefficient from liquid viscosity number.- Parameters:
nL- liquid viscosity number- Returns:
- CNL coefficient
-
calcHoldupFromParam
private double calcHoldupFromParam(double param) Calculate liquid holdup from the holdup parameter using curve-fit to chart.- Parameters:
param- holdup parameter- Returns:
- liquid holdup fraction
-
calcSecondaryCorrection
private double calcSecondaryCorrection(double param) Calculate secondary correction factor psi.- Parameters:
param- secondary parameter- Returns:
- correction factor psi
-
calcFrictionFactor
private double calcFrictionFactor(double re) Calculate Moody/Haaland friction factor.- Parameters:
re- Reynolds number- Returns:
- Fanning friction factor
-
getTotalPressureDrop
public double getTotalPressureDrop()Get the total pressure drop across the pipe.- Returns:
- total pressure drop in bar
-
getPressureDrop
public double getPressureDrop()Get the total pressure drop across the pipeline.- Specified by:
getPressureDropin interfacePipeLineInterface- Overrides:
getPressureDropin classPipeline- Returns:
- pressure drop in bar
-
getLiquidHoldup
public double getLiquidHoldup()Get the calculated liquid holdup at the last segment.- Specified by:
getLiquidHoldupin interfacePipeLineInterface- Overrides:
getLiquidHoldupin classPipeline- Returns:
- liquid holdup fraction
-
getMixtureDensity
public double getMixtureDensity()Get the mixture density at the last segment.- Returns:
- mixture density in kg/m3
-
getPressureProfile
public double[] getPressureProfile()Get the pressure profile along the pipe.- Specified by:
getPressureProfilein interfacePipeLineInterface- Overrides:
getPressureProfilein classPipeline- Returns:
- array of pressures in bar at each increment
-
getPressureProfileList
-
getTemperatureProfile
public double[] getTemperatureProfile()Get the temperature profile along the pipe.- Specified by:
getTemperatureProfilein interfacePipeLineInterface- Overrides:
getTemperatureProfilein classPipeline- Returns:
- array of temperatures in Kelvin at each increment
-
getTemperatureProfileList
-
getLengthProfile
-