Skip to the content.

Finite-rate Evaporation and Gas Dissolution in Pipelines

What this model answers

PipelineEvaporationStudy estimates the axial distance needed for an injected hydrocarbon liquid to fall below a specified remaining mass fraction. PipelineDissolutionStudy applies the same finite-rate calculation to injected gas bubbles dissolving into oil or water. The supported geometries are:

The completion criterion is the remaining fraction of the initially injected dispersed-phase inventory: liquid for evaporation and gas for dissolution. Hydrodynamic holdup or void fraction is never used as a transfer measure. If the continuous liquid reaches thermodynamic saturation before the injected gas meets the criterion, the result is incomplete and reports the full profile to the pipe outlet; the solver does not force phase removal.

Model formulation

At each accepted axial position the model creates a local NeqSim droplet, bubble, or annular flow node and solves the KrishnaStandartFilmModel boundary. This gives:

  1. EOS fugacity equality at the gas-liquid interface;
  2. binary diffusivities from NeqSim physical-property models;
  3. coupled Maxwell-Stefan resistance matrices in gas and liquid;
  4. thermodynamic-factor and finite-flux corrections; and
  5. simultaneous interphase heat and component fluxes.

Droplet and bubble transfer coefficients use Ranz-Marshall in the continuous phase and Kronig-Brink internally. The optional Abramzon-Sirignano correction uses the aggregate injected-vapor mass fraction to calculate the Spalding mass-transfer number and is applied only to evaporating liquid droplets. Film calculations use the annular-flow transfer correlations.

The sign convention is positive from gas to liquid. Therefore an evaporating liquid component normally has a negative flux.

Interfacial area

For droplets, conservation of droplet number gives

[ \frac{A_i}{L}=\frac{6\dot V_L}{u_L d_{32}}, \qquad d_{32}=d_{32,0}\left(\frac{\dot V_L}{\dot V_{L,0}}\right)^{1/3}. ]

For a wall film,

[ \frac{A_i}{L}=f_w\pi(D-2\delta), \qquad \delta=\delta_0\frac{\dot V_L}{\dot V_{L,0}}. ]

For bubbles, the equivalent conserved-population relation is

[ \frac{A_i}{L}=\frac{6\dot V_G}{u_G d_{32}}, \qquad d_{32}=d_{32,0}\left(\frac{\dot V_G}{\dot V_{G,0}}\right)^{1/3}. ]

The geometry follows total liquid-phase volume, so gas absorbed into the liquid can grow a droplet or film even while the tracked injected material evaporates. Completion still uses only the mass provenance of the initial liquid phase.

These relations do not model breakup, coalescence, entrainment, deposition, or dry-patch formation. Supply a realistic inlet $d_{32}$, film thickness, and wetted fraction, and perform sensitivity cases.

Slip and residence time

USER_SPECIFIED retains separate user-supplied actual gas and liquid velocities. TERMINAL_VELOCITY recalculates a local Schiller-Naumann force balance as particle diameter and phase properties change. The terminal speed is used in the Ranz-Marshall particle Reynolds number. Its gravity-aligned component is projected onto the pipe axis, so it also changes dispersed-phase residence time and area per pipe length. Pipe inclination is in radians and positive uphill. For a horizontal pipe, terminal rise or settling is transverse: it enhances transfer but does not create an axial gravity-slip component.

The force-balance option represents dilute spherical particles. Use prescribed velocities or an external hydraulic profile for dense dispersions, churn/slug flow, annular films, and cases governed by pressure-gradient momentum closure.

Conservative axial integration

The component update over a step is

[ \Delta\dot n_i=N_i A_i, ]

with equal and opposite changes in the two phases. Donor inventories are bounded so component flows cannot become negative. Separate gas and liquid enthalpy targets use the boundary heat fluxes; optional wall heat is added to the gas for droplets and to the liquid for bubbles or a wall film. The step is halved until both the maximum donor depletion and estimated temperature change meet their configured limits.

No TP flash is run between steps. A TP flash would impose instantaneous phase equilibrium and erase the finite-rate question being solved.

Java example

import neqsim.process.equipment.pipeline.evaporation.LiquidDistribution;
import neqsim.process.equipment.pipeline.evaporation.PipelineEvaporationConfig;
import neqsim.process.equipment.pipeline.evaporation.PipelineEvaporationResult;
import neqsim.process.equipment.pipeline.evaporation.PipelineEvaporationStudy;
import neqsim.thermo.phase.PhaseType;
import neqsim.thermo.system.SystemInterface;
import neqsim.thermo.system.SystemSrkEos;

SystemInterface inlet = new SystemSrkEos(335.15, 10.0);
inlet.addComponent("methane", 500.0, "kg/hr", 0);
inlet.addComponent("ethane", 20.0, "kg/hr", 0);
inlet.addComponent("n-heptane", 1.0, "kg/hr", 1);
inlet.addComponent("nC10", 1.0, "kg/hr", 1);
inlet.createDatabase(true);
inlet.setMixingRule(2);
inlet.setPhaseType(0, PhaseType.GAS);
inlet.setPhaseType(1, PhaseType.OIL);
inlet.getPhase(0).setTemperature(335.15);
inlet.getPhase(1).setTemperature(295.15);
inlet.initBeta();
inlet.init_x_y();
inlet.init(3);
inlet.initPhysicalProperties();

PipelineEvaporationConfig settings = new PipelineEvaporationConfig();
settings.setLiquidDistribution(LiquidDistribution.DROPLETS);
settings.setPipeLength(100.0);
settings.setPipeDiameter(0.20);
settings.setGasVelocity(10.0);          // actual phase velocity, m/s
settings.setLiquidVelocity(0.5);        // droplet velocity, m/s
settings.setInitialDropletDiameter(200.0e-6);
settings.setOverallWallHeatTransferCoefficient(8.0); // W/(m2 K)
settings.setAmbientTemperature(323.15);
settings.setCompletionFraction(1.0e-4); // 99.99% of injected mass evaporated

PipelineEvaporationResult result = new PipelineEvaporationStudy(inlet, settings).run();
if (result.isCompleteEvaporation()) {
  System.out.println("Completion distance [m]: " + result.getCompleteEvaporationDistance());
} else {
  System.out.println("Remaining fraction: "
      + result.getProfile().get(result.getProfile().size() - 1)
          .getRemainingInjectedLiquidFraction());
}
System.out.println("Maximum component balance error [mol/s]: "
    + result.getMaximumComponentMolarBalanceError());
System.out.println("Relative energy balance error: " + result.getRelativeEnergyBalanceError());

For a film, change the distribution and specify the geometry:

settings.setLiquidDistribution(LiquidDistribution.WALL_FILM);
settings.setInitialFilmThickness(0.50e-3);
settings.setWettedPerimeterFraction(1.0);

Gas dissolution example

Use an explicit injected gas in phase 0 and an undersaturated continuous liquid in phase 1. For water-rich systems, prefer CPA or electrolyte CPA with validated gas-water interaction parameters.

import neqsim.process.equipment.pipeline.evaporation.DispersedPhaseSlipModel;
import neqsim.process.equipment.pipeline.evaporation.EvaporationProfilePoint;
import neqsim.process.equipment.pipeline.evaporation.PipelineDissolutionResult;
import neqsim.process.equipment.pipeline.evaporation.PipelineDissolutionStudy;
import neqsim.thermo.system.SystemSrkCPAstatoil;

SystemInterface inlet = new SystemSrkCPAstatoil(295.15, 50.0);
inlet.addComponent("CO2", 0.10, 0);   // injected gas flow, mol/s
inlet.addComponent("water", 20.0, 1); // continuous liquid flow, mol/s
inlet.createDatabase(true);
inlet.setMixingRule(10);
inlet.setPhaseType(0, PhaseType.GAS);
inlet.setPhaseType(1, PhaseType.AQUEOUS);
inlet.initBeta();
inlet.init_x_y();
inlet.init(3);
inlet.initPhysicalProperties();
inlet.setPhaseType(1, PhaseType.AQUEOUS);
inlet.getPhase(1).setType(PhaseType.AQUEOUS);

PipelineEvaporationConfig settings = new PipelineEvaporationConfig();
settings.setPipeLength(100.0);
settings.setPipeDiameter(0.10);
settings.setLiquidVelocity(0.30);
settings.setGasVelocity(0.50);
settings.setInitialBubbleDiameter(1.0e-3);
settings.setSlipModel(DispersedPhaseSlipModel.TERMINAL_VELOCITY);
settings.setPipeInclinationAngle(Math.toRadians(5.0));
settings.setCompletionFraction(1.0e-4); // 99.99% of injected gas dissolved

PipelineDissolutionResult result = new PipelineDissolutionStudy(inlet, settings).run();
if (result.isCompleteDissolution()) {
  System.out.println("Dissolution distance [m]: " + result.getCompleteDissolutionDistance());
} else {
  EvaporationProfilePoint outlet = result.getProfile().get(result.getProfile().size() - 1);
  System.out.println("Injected gas remaining at outlet: " + outlet.getRemainingTrackedPhaseFraction());
}

“Complete dissolution” means the configured tracked-gas mass threshold was reached. “Solubility” is the equilibrium capacity predicted by the selected thermodynamic model. A finite gas phase can legitimately remain because the pipe is too short, transfer is too slow, the liquid saturates, or local conditions favor reverse transfer.

Run at least coarse and fine numerical cases. A practical grid check is to halve maximumDonorFractionPerStep and maximumTemperatureChangePerStep; the reported completion distance should be stable for the intended engineering decision.

Accuracy and validation status

Layer Implemented check Main uncertainty or limitation
Component conservation Equal-and-opposite inventory update; reported molar residual Floating-point tolerance
Energy conservation Separate phase enthalpy targets; reported overall residual Accuracy of enthalpy and heat-transfer closure
Interface equilibrium EOS fugacity equality EOS and binary-interaction parameters; validate VLE first
Multicomponent diffusion Krishna Maxwell-Stefan matrices with thermodynamic and finite-flux corrections Binary diffusivity model and conditioning at trace composition
Droplet coefficients Equation-level Ranz-Marshall, Kronig-Brink, and Abramzon-Sirignano tests Isolated-sphere assumptions; no breakup or coalescence
Bubble coefficients Ranz-Marshall/Kronig-Brink with explicit local relative speed Spherical dilute-bubble assumption; no swarm or contamination correction
Slip closure Schiller-Naumann force balance and separate axial/total relative velocity Not a replacement for coupled momentum equations in dense or regime-transition flow
Film coefficients Existing annular-flow correlations Waves, entrainment, dry patches, and wetted perimeter
Axial solver Adaptive donor/temperature limits and inventory positivity No pressure-drop or full momentum-equation solution

The correlation layer is traceable to Ranz and Marshall (1952) and Abramzon and Sirignano (1989). A useful published multicomponent validation target is the forced-convection n-heptane/n-decane droplet experiment of Daïf et al. (1998): 21.3 mass-% n-heptane, initial radius 743 µm, initial droplet temperature 294 K, air at 345 K and 0.1 MPa, and 3.1 m/s relative velocity. The paper reports radius and temperature histories. Those experimental points are not distributed with NeqSim, so the present automated suite validates the equations, conservation, bounds, and short axial integration, but it does not claim an absolute completion-distance accuracy against that experiment.

Recommended project validation is:

  1. reproduce mixture VLE and transport properties independently;
  2. compare a single-droplet time history with Daïf et al. or project-specific spray data;
  3. measure or bound $d_{32}$, relative velocity, film coverage, and wall heat transfer;
  4. compare outlet liquid carryover at two or more pipeline lengths; and
  5. calibrate geometry parameters on one case and validate on another.

Relation to other tools

References