Class PipeMukherjeeAndBrill
- All Implemented Interfaces:
Serializable, Runnable, CapacityConstrainedEquipment, PipeLineInterface, ProcessEquipmentInterface, TwoPortInterface, ProcessElementInterface, SimulationInterface, NamedInterface
Implements the Mukherjee-Brill correlation for predicting liquid holdup, pressure drop, and flow pattern in two-phase gas-liquid flow at all pipe inclinations. This correlation was developed from an extensive experimental database covering uphill, downhill, and horizontal flow.
Reference
Mukherjee, H. and Brill, J.P., "Pressure Drop Correlations for Inclined Two-Phase Flow", Journal of Energy Resources Technology, December 1985, Vol. 107, pp. 549-554.
Mukherjee, H. and Brill, J.P., "Empirical Equations to Predict Flow Patterns in Two-Phase Inclined Flow", International Journal of Multiphase Flow, 1985, Vol. 11, No. 3, pp. 299-315.
Flow Pattern Determination
The Mukherjee-Brill method classifies flow into four patterns:
- STRATIFIED — Gas flows over a liquid layer (downhill and horizontal)
- SLUG — Alternating liquid slugs and gas pockets
- ANNULAR — Gas core with liquid film on wall (high gas rates)
- BUBBLE — Small gas bubbles dispersed in liquid (high liquid rates)
Flow pattern boundaries depend on pipe inclination angle (theta), superficial gas and liquid velocities, and fluid properties.
Liquid Holdup Correlation
The Mukherjee-Brill holdup correlation uses the form:
H_L = exp[(C1 + C2*sin(theta) + C3*sin^2(theta) + C4*N_L^2) /
(N_gv^C5 / (1 + N_Lv)^C6)]
where the coefficients C1-C6 depend on the flow pattern and pipe inclination direction (uphill, downhill, or horizontal).
Friction Factor
Uses the Moody friction factor for no-slip Reynolds number, with a two-phase multiplier based on holdup ratio to account for the increased wall shear from multiphase flow.
Applicability
- All pipe inclinations from -90 to +90 degrees
- Pipe diameters 1 to 6 inches (tested)
- Gas-liquid and gas-condensate systems
- Commonly used as alternative to Beggs-Brill for NCS pipeline design
Usage Example
SystemInterface fluid = new SystemSrkEos(303.15, 50.0);
fluid.addComponent("methane", 0.85);
fluid.addComponent("ethane", 0.10);
fluid.addComponent("propane", 0.05);
fluid.setMixingRule("classic");
Stream inlet = new Stream("inlet", fluid);
inlet.setFlowRate(30000, "kg/hr");
inlet.run();
PipeMukherjeeAndBrill pipe = new PipeMukherjeeAndBrill("pipeline", inlet);
pipe.setDiameter(0.2032); // 8 inch
pipe.setLength(15000.0); // 15 km
pipe.setElevation(-200.0); // slightly downhill
pipe.setNumberOfIncrements(30);
pipe.run();
System.out.println("Pressure drop: " + pipe.getPressureDrop() + " bar");
System.out.println("Flow pattern: " + pipe.getFlowPattern());
- Version:
- 1.0
- Author:
- NeqSim
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumFlow pattern classification per Mukherjee-Brill. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate doubleCalculated liquid holdup.Identified flow pattern.Flow pattern profile along the pipe.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 PipeMukherjeeAndBrill.PipeMukherjeeAndBrill(String name) Constructor with name.PipeMukherjeeAndBrill(String name, StreamInterface inStream) Constructor with name and inlet stream. -
Method Summary
Modifier and TypeMethodDescriptionprivate doublecalcFrictionFactor(double re) Calculate Moody/Haaland friction factor.private doublecalcFrictionMultiplier(double holdupRatio) Calculate two-phase friction factor multiplier from holdup ratio.private doublecalcLiquidHoldup(double nLv, double nGv, double nL, double theta, double lambdaL) Calculate liquid holdup using the Mukherjee-Brill correlation.private doublecalcSegmentPressureDrop(SystemInterface sys, double segLength, double segElev) Calculate pressure drop for a single pipe segment using the Mukherjee-Brill method.determineFlowPattern(double vSl, double vSg, double rhoL, double rhoG, double muL, double sigma, double theta) Determine flow pattern using Mukherjee-Brill boundaries.Get the identified flow pattern.Get the identified flow pattern enum.Get the flow pattern profile along the pipe.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:
-
currentFlowPattern
Identified flow pattern. -
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
-
flowPatternProfile
-
-
Constructor Details
-
PipeMukherjeeAndBrill
public PipeMukherjeeAndBrill()Default constructor for PipeMukherjeeAndBrill. -
PipeMukherjeeAndBrill
-
PipeMukherjeeAndBrill
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 Mukherjee-Brill method.- Parameters:
sys- thermodynamic system at segment conditionssegLength- segment length in meterssegElev- segment elevation change in meters (positive = upward)- Returns:
- pressure drop in bar
-
determineFlowPattern
private PipeMukherjeeAndBrill.FlowPattern determineFlowPattern(double vSl, double vSg, double rhoL, double rhoG, double muL, double sigma, double theta) Determine flow pattern using Mukherjee-Brill boundaries.The flow pattern is determined from dimensionless gas and liquid velocity numbers, pipe inclination, and fluid properties.
- Parameters:
vSl- superficial liquid velocity in m/svSg- superficial gas velocity in m/srhoL- liquid density in kg/m3rhoG- gas density in kg/m3muL- liquid viscosity in Pa.ssigma- surface tension in N/mtheta- pipe inclination angle in radians- Returns:
- identified flow pattern
-
calcLiquidHoldup
private double calcLiquidHoldup(double nLv, double nGv, double nL, double theta, double lambdaL) Calculate liquid holdup using the Mukherjee-Brill correlation.The holdup is calculated from flow-pattern-dependent correlations using dimensionless velocity and viscosity numbers and the pipe inclination angle.
- Parameters:
nLv- liquid velocity numbernGv- gas velocity numbernL- liquid viscosity numbertheta- pipe inclination angle in radianslambdaL- no-slip liquid fraction- Returns:
- predicted liquid holdup (0 to 1)
-
calcFrictionMultiplier
private double calcFrictionMultiplier(double holdupRatio) Calculate two-phase friction factor multiplier from holdup ratio.The Mukherjee-Brill friction factor correction accounts for the effect of slip between phases on the wall shear stress. The multiplier is based on the ratio of no-slip to actual liquid holdup.
- Parameters:
holdupRatio- ratio of no-slip liquid fraction to actual holdup- Returns:
- friction factor multiplier
-
calcFrictionFactor
private double calcFrictionFactor(double re) Calculate Moody/Haaland friction factor.- Parameters:
re- Reynolds number- Returns:
- Darcy 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
-
getFlowPattern
-
getFlowPatternEnum
Get the identified flow pattern enum.- Returns:
- flow pattern enum value
-
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
-
getFlowPatternProfile
-