Skip to the content.

Choke Collapse Analysis

ChokeCollapseAnalyzer diagnoses whether a ThrottlingValve is operating in critical (sonic) flow, subcritical flow, or in the transition window between the two. For liquid service it also flags flashing and cavitation.

Theory

For an ideal gas, the throat reaches sonic conditions when the downstream / upstream pressure ratio falls to the critical pressure ratio:

\[r_c = \left( \frac{2}{\gamma + 1} \right)^{\gamma / (\gamma - 1)}\]

where $\gamma = C_p / C_v$. With $r = p_2 / p_1$:

For liquid service the analyser uses a bubble-point flash on a clone of the inlet system to estimate the vapour pressure $p_v$, then checks:

\[\sigma = \frac{p_2 - p_v}{p_1 - p_2}\]

If $p_2 < p_v$ the liquid is FLASHING. If $\sigma$ is below the threshold (default 1.5) the trim is flagged as CAVITATION.

Quick example

SystemInterface fluid = new SystemSrkEos(298.15, 100.0);
fluid.addComponent("methane", 1.0);
fluid.setMixingRule("classic");

Stream feed = new Stream("feed", fluid);
feed.setFlowRate(1000.0, "kg/hr");
feed.setPressure(100.0, "bara");
feed.setTemperature(25.0, "C");
feed.run();

ThrottlingValve cv = new ThrottlingValve("CV-100", feed);
cv.setOutletPressure(10.0);
cv.run();

ChokeCollapseResult result = cv.analyseChokeCollapse();
System.out.println(result.toJson());

Typical output:

{
  "flowRegime": "CRITICAL",
  "collapseMode": "NONE",
  "fluidPhase": "gas",
  "inletPressureBara": 100.0,
  "outletPressureBara": 10.0,
  "pressureRatio": 0.10,
  "criticalPressureRatio": 0.54,
  "marginToCollapse": 0.44,
  "gamma": 1.31,
  "machNumber": 1.0,
  "flashing": false,
  "recommendations": []
}

API surface

Method Purpose
ThrottlingValve.analyseChokeCollapse() Convenience wrapper
new ChokeCollapseAnalyzer(valve).analyze() Run full analysis
findCollapsePressureRatio() Returns $r_c$ for the inlet gas
setCriticalMarginThreshold(double) Width of TRANSITION band (default 5%)
setCavitationThreshold(double) Liquid cavitation $\sigma$ limit (default 1.5)
setDownstreamPressure(double, "bara") What-if downstream pressure
ChokeCollapseAnalyzer.criticalPressureRatio(gamma) Pure analytical helper

Result fields

ChokeCollapseResult exposes flowRegime (CRITICAL / SUBCRITICAL / TRANSITION / REVERSE), collapseMode (NONE / NEAR_COLLAPSE / COLLAPSED / FLASHING / CAVITATION), the actual and critical pressure ratios, $\gamma$, an estimated Mach number, the cavitation index (liquid service only), a flashing flag, and a recommendations list with remediation hints.

Liquid service — flashing and cavitation

For a liquid feed the analyser runs a bubble-point flash on a clone of the inlet system to estimate $p_v$, then classifies the regime:

SystemInterface liq = new SystemSrkEos(298.15, 50.0);
liq.addComponent("n-butane", 1.0);
liq.setMixingRule("classic");

Stream feed = new Stream("feed", liq);
feed.setFlowRate(5000.0, "kg/hr");
feed.setPressure(50.0, "bara");
feed.setTemperature(25.0, "C");
feed.run();

ThrottlingValve cv = new ThrottlingValve("LCV-101", feed);
cv.setOutletPressure(1.5);    // below vapour pressure → flashing
cv.run();

ChokeCollapseResult r = cv.analyseChokeCollapse();
// r.getCollapseMode() → FLASHING
// r.isFlashing()      → true
// r.getRecommendations() lists anti-cavitation trim guidance

Adjust the cavitation threshold (default $\sigma = 1.5$) via analyzer.setCavitationThreshold(2.0) for conservative screening.

Python (Jupyter) usage

ChokeCollapseAnalyzer = ns.JClass(
    "neqsim.process.equipment.valve.ChokeCollapseAnalyzer")

result = valve.analyseChokeCollapse()
print(result.toJson())

When to use it