Mapping of every v1.8 Excel UDF (213 functions across 7 categories) to its v2.0 equivalent (591 functions across 16 modules). v2.0 uses a dotted namespace (PO.<module>.<family>.<operation>) and groups thematically (e.g., Arps Exponential/Harmonic/Hyperbolic collapsed into one PO.DCA.Arps.* family with a b parameter). Migration notes flag only what actually changed: name (always renamed), parameter order, added/removed parameters, and unit changes.
Unit notation used below: [T] = time unit (days, months — consistent across inputs); [L3] = volume unit; [1/T] = nominal decline rate; [1/T^n] = PLE generalized decline rate (dimension varies with exponent n); rates in [bbl/D], [STB/d], [mscf/D] (thousand scf/day), [mmscf/D] (million scf/day); pressure in [psi] (absolute) or [psig] (gauge — flagged explicitly); temperature in [degF], [degR], [K]; viscosity in [cP]; IFT in [dynes/cm]; permeability in [mD]; dimensions [ft], [in]; formation volume factor [bbl/STB], [rcf/scf]; solution GOR [scf/STB].
When to use this doc
Open this document if, after upgrading from v1.8 to v2.0, your Excel sheets show #NAME? errors or formulas referencing the old UDF names. Ctrl-F your old function name, read the migration note, and update your formula.
How v2.0 names work
v2.0 uses a dotted namespace: PO.<module>.<family>.<operation>. Enter the full dotted name directly in a cell — Excel treats the dots as part of the identifier:
=PO.DCA.Arps.Rate(Qi, Di, b, time)
Parameter names in v2.0 use snake_case (pipe_ID, T_degF, SG_gas) where v1.8 used camelCase (pipeID, T, SGgas). This is cosmetic — Excel doesn't care about parameter names, only position.
Breaking changes — read first
Most v1.8 → v2.0 migrations are pure renames. Six cases require a real math or input change and will silently produce wrong numbers if you only rename:
- Gas-flow rate unit flip (1000×) —
ReynoldsNumberGas, InletPipePressureGas, OutletPipePressureGas: Qg was [mscf/d] (thousand scf/day), now [mmscf/D] (million scf/day). Divide old Qg values by 1000.
- Arps Exponential and Harmonic collapse into unified Arps —
ExponentialDecline* and HarmonicDecline* functions no longer exist; use PO.DCA.Arps.* with b=0 (exponential) or b=1 (harmonic).
- Duong parameter reorder — v1.8
(a, m, q1, qInf, time) became v2.0 (q1, Qinf, a, m, time). Fit output order also reordered to [q1, qInf, a, m].
- PLE
Di0 dimension refinement — Di_intercept [1/T] → Di0 [1/T^n]. Old values may need recomputation depending on how they were calibrated.
- Gauge vs absolute pressure in one PVT correlation —
RsoDindorukChristman2001 took P in [psig]; v2.0 PO.PVT.Rs.ByDindorukChristman takes [psi] (absolute). Add ~14.7 psi.
- Multiphase VFP parameter reorder — Beggs-Brill / Gray / Hagedorn-Brown
.Pin / .Pout signatures were standardized; see the PipeFlow section for each rewrite.
Other unit wording changes ([STB/d] → [bbl/D], [psia] → [psi], [dymes/cm] → [dynes/cm]) are cosmetic — same number, relabeled.
Use the "On this page" sidebar to jump to a specific v1.8 category — Decline (54), PipeFlow (17), PTA (18), PVT (44), SCAL (38), Utilities (17), WellFlow (25).
Decline
All Arps (exponential, harmonic, hyperbolic) v1.8 functions collapse into a single PO.DCA.Arps.* family in v2.0 — the user now supplies b (0=exponential, 1=harmonic, 0<b<1=hyperbolic). Cumulative (*Cumulative) → *.Prod, EUR/Time unchanged semantically but econRate parameter renamed Q_econ. The new category also adds .D (instantaneous decline rate), .Diag.* (flow-regime diagnostics), .Convert.* (nominal/effective), and .Data.* (cleaning/outlier) families with no v1.8 equivalents. SSE/R2 statistics moved from Decline into a separate PO.Stats.* namespace.
Ansah-Knowles-Buba
| Old (v1.8) |
New (v2.0) |
Migration notes |
AnsahKnowlesBubaDeclineRate(Qi, alpha, beta, time) |
PO.DCA.AKB.Rate(Qi, alpha, beta, time) |
renamed |
AnsahKnowlesBubaDeclineCumulative(Qi, alpha, beta, time) |
PO.DCA.AKB.Prod(Qi, alpha, beta, time) |
renamed |
AnsahKnowlesBubaDeclineEUR(Qi, alpha, beta, econRate) |
PO.DCA.AKB.EUR(Qi, alpha, beta, Q_econ) |
renamed — parameter econRate → Q_econ |
AnsahKnowlesBubaDeclineTime(Qi, alpha, beta, econRate) |
PO.DCA.AKB.Time(Qi, alpha, beta, Q_econ) |
renamed — parameter econRate → Q_econ |
AnsahKnowlesBubaDeclineFitParameters(timeValues, rateValues) |
PO.DCA.AKB.Fit(times, rates) |
renamed |
AnsahKnowlesBubaDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.AKB.WFit(times, rates, weights) |
renamed |
Arps Exponential / Harmonic / Hyperbolic (now unified under PO.DCA.Arps)
| Old (v1.8) |
New (v2.0) |
Migration notes |
ExponentialDeclineRate(Qi, Di, time) |
PO.DCA.Arps.Rate(Qi, Di, b, time) |
renamed — added parameter b (pass b=0) |
ExponentialDeclineCumulative(Qi, Di, time) |
PO.DCA.Arps.Prod(Qi, Di, b, time) |
renamed — added parameter b (pass b=0) |
ExponentialDeclineEUR(Qi, Di, econRate) |
PO.DCA.Arps.EUR(Qi, Di, b, Q_econ) |
renamed — added parameter b (pass b=0); parameter econRate → Q_econ |
ExponentialDeclineTime(Qi, Di, econRate) |
PO.DCA.Arps.Time(Qi, Di, b, Q_econ) |
renamed — added parameter b (pass b=0); parameter econRate → Q_econ |
ExponentialDeclineFitParameters(timeValues, rateValues) |
PO.DCA.Arps.Fit(times, rates) |
renamed — returns [Qi, Di, b] instead of [Qi, Di] |
ExponentialDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.Arps.WFit(times, rates, weights) |
renamed — returns [Qi, Di, b] instead of [Qi, Di] |
HarmonicDeclineRate(Qi, Di, time) |
PO.DCA.Arps.Rate(Qi, Di, b, time) |
renamed — added parameter b (pass b=1) |
HarmonicDeclineCumulative(Qi, Di, time) |
PO.DCA.Arps.Prod(Qi, Di, b, time) |
renamed — added parameter b (pass b=1) |
HarmonicDeclineEUR(Qi, Di, econRate) |
PO.DCA.Arps.EUR(Qi, Di, b, Q_econ) |
renamed — added parameter b (pass b=1); parameter econRate → Q_econ |
HarmonicDeclineTime(Qi, Di, econRate) |
PO.DCA.Arps.Time(Qi, Di, b, Q_econ) |
renamed — added parameter b (pass b=1); parameter econRate → Q_econ |
HarmonicDeclineFitParameters(timeValues, rateValues) |
PO.DCA.Arps.Fit(times, rates) |
renamed — returns [Qi, Di, b] instead of [Qi, Di] |
HarmonicDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.Arps.WFit(times, rates, weights) |
renamed — returns [Qi, Di, b] instead of [Qi, Di] |
HyperbolicDeclineRate(Qi, Di, b, time) |
PO.DCA.Arps.Rate(Qi, Di, b, time) |
renamed |
HyperbolicDeclineCumulative(Qi, Di, b, time) |
PO.DCA.Arps.Prod(Qi, Di, b, time) |
renamed |
HyperbolicDeclineEUR(Qi, Di, b, econRate) |
PO.DCA.Arps.EUR(Qi, Di, b, Q_econ) |
renamed — parameter econRate → Q_econ |
HyperbolicDeclineTime(Qi, Di, b, econRate) |
PO.DCA.Arps.Time(Qi, Di, b, Q_econ) |
renamed — parameter econRate → Q_econ |
HyperbolicDeclineFitParameters(timeValues, rateValues) |
PO.DCA.Arps.Fit(times, rates) |
renamed |
HyperbolicDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.Arps.WFit(times, rates, weights) |
renamed |
Modified Hyperbolic
| Old (v1.8) |
New (v2.0) |
Migration notes |
ModifiedHyperbolicDeclineRate(Qi, Di, Dlim, b, time) |
PO.DCA.ModHyp.Rate(Qi, Di, Dlim, b, time) |
renamed |
ModifiedHyperbolicDeclineCumulative(Qi, Di, Dlim, b, time) |
PO.DCA.ModHyp.Prod(Qi, Di, Dlim, b, time) |
renamed |
ModifiedHyperbolicDeclineEUR(Qi, Di, Dlim, b, econRate) |
PO.DCA.ModHyp.EUR(Qi, Di, Dlim, b, Q_econ) |
renamed — parameter econRate → Q_econ |
ModifiedHyperbolicDeclineTime(Qi, Di, Dlim, b, econRate) |
PO.DCA.ModHyp.Time(Qi, Di, Dlim, b, Q_econ) |
renamed — parameter econRate → Q_econ |
ModifiedHyperbolicDeclineFitParameters(timeValues, rateValues) |
PO.DCA.ModHyp.Fit(times, rates) |
renamed |
ModifiedHyperbolicDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.ModHyp.WFit(times, rates, weights) |
renamed |
Duong
| Old (v1.8) |
New (v2.0) |
Migration notes |
DuongDeclineRate(a, m, q1, qInf, time) |
PO.DCA.Duong.Rate(q1, Qinf, a, m, time) |
renamed — parameter order changed: was (a, m, q1, qInf, time), now (q1, Qinf, a, m, time) |
DuongDeclineCumulative(a, m, q1, qInf, time) |
PO.DCA.Duong.Prod(q1, Qinf, a, m, time) |
renamed — parameter order changed: was (a, m, q1, qInf, time), now (q1, Qinf, a, m, time) |
DuongDeclineEUR(a, m, q1, qInf, econRate) |
PO.DCA.Duong.EUR(q1, Qinf, a, m, Q_econ) |
renamed — parameter order changed (as above); parameter econRate → Q_econ |
DuongDeclineTime(a, m, q1, qInf, econRate) |
PO.DCA.Duong.Time(q1, Qinf, a, m, Q_econ) |
renamed — parameter order changed (as above); parameter econRate → Q_econ |
DuongDeclineFitParameters(timeValues, rateValues) |
PO.DCA.Duong.Fit(times, rates) |
renamed — fit now returns [q1, qInf, a, m] instead of [a, m, q1, qInf] |
DuongDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.Duong.WFit(times, rates, weights) |
renamed — fit now returns [q1, qInf, a, m] instead of [a, m, q1, qInf] |
Power Law Exponential (PLE)
| Old (v1.8) |
New (v2.0) |
Migration notes |
PowerLawExponentialDeclineRate(Qi_intercept, Di_intercept, D_inf, n, time) |
PO.DCA.PLE.Rate(Qi0, Di0, Dinf, n, time) |
renamed — parameters shortened; dimension of Di0 refined from [1/T] to [1/T^n] (v1.8 label was inaccurate; numeric value unchanged if Di was calibrated consistently) |
PowerLawExponentialDeclineCumulative(Qi_intercept, Di_intercept, D_inf, n, time) |
PO.DCA.PLE.Prod(Qi0, Di0, Dinf, n, time) |
renamed — parameters shortened; dimension of Di0 refined from [1/T] to [1/T^n] (v1.8 label was inaccurate; numeric value unchanged if Di was calibrated consistently) |
PowerLawExponentialDeclineEUR(Qi_intercept, Di_intercept, D_inf, n, econRate) |
PO.DCA.PLE.EUR(Qi0, Di0, Dinf, n, Q_econ) |
renamed — parameters shortened; dimension of Di0 refined from [1/T] to [1/T^n] (v1.8 label was inaccurate; numeric value unchanged if Di was calibrated consistently); parameter econRate → Q_econ |
PowerLawExponentialDeclineTime(Qi_intercept, Di_intercept, D_inf, n, econRate) |
PO.DCA.PLE.Time(Qi0, Di0, Dinf, n, Q_econ) |
renamed — parameters shortened; dimension of Di0 refined from [1/T] to [1/T^n] (v1.8 label was inaccurate; numeric value unchanged if Di was calibrated consistently); parameter econRate → Q_econ |
PowerLawExponentialDeclineFitParameters(timeValues, rateValues) |
PO.DCA.PLE.Fit(times, rates) |
renamed |
PowerLawExponentialDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.PLE.WFit(times, rates, weights) |
renamed |
Stretched Exponential (SEDM)
| Old (v1.8) |
New (v2.0) |
Migration notes |
StretchedExponentialDeclineRate(Qi, tau, n, time) |
PO.DCA.SEDM.Rate(Qi, tau, n, time) |
renamed |
StretchedExponentialDeclineCumulative(Qi, tau, n, time) |
PO.DCA.SEDM.Prod(Qi, tau, n, time) |
renamed |
StretchedExponentialDeclineEUR(Qi, tau, n, econRate) |
PO.DCA.SEDM.EUR(Qi, tau, n, Q_econ) |
renamed — parameter econRate → Q_econ |
StretchedExponentialDeclineTime(Qi, tau, n, econRate) |
PO.DCA.SEDM.Time(Qi, tau, n, Q_econ) |
renamed — parameter econRate → Q_econ |
StretchedExponentialDeclineFitParameters(timeValues, rateValues) |
PO.DCA.SEDM.Fit(times, rates) |
renamed |
StretchedExponentialDeclineWeightedFitParameters(timeValues, rateValues, weightsValues) |
PO.DCA.SEDM.WFit(times, rates, weights) |
renamed |
SSE / Error statistics (moved to PO.Stats)
| Old (v1.8) |
New (v2.0) |
Migration notes |
ComputeSse(observedValues, predictedValues) |
PO.Stats.SSE(observed, predicted) |
renamed |
ComputeLogSse(observedValues, predictedValues) |
PO.Stats.LogSSE(observed, predicted) |
renamed |
ComputeWeightedSse(observedValues, predictedValues, weightsValues) |
PO.Stats.WSSE(observed, predicted, weights) |
renamed |
ComputeWeightedLogSse(observedValues, predictedValues, weightsValues) |
PO.Stats.WLogSSE(observed, predicted, weights) |
renamed |
Field Profile (now in PO.FPP module)
| Old (v1.8) |
New (v2.0) |
Migration notes |
BasicFieldProfile(time_buildup, time_plateau, Q_plateau, Di, time) |
PO.FPP.Field.Rate(t_buildup, t_plateau, Q_plateau, Di, b, t) |
renamed — added parameter b (Arps b-factor; pass b=0 for exponential tail) |
CombinedFieldProfile(timeSeries, profile, schedule, time) |
PO.FPP.Sched.Rate(timeSeries, profile, schedule, t) |
renamed |
PipeFlow
v1.8 PipeFlow is split into two v2.0 modules: PO.VFP (vertical/wellbore flow with inclination) for multiphase and single-phase-with-angle cases, and PO.SF.PL (surface pipeline) for horizontal-only liquid/gas pipelines. The v2.0 multiphase .Pin/.Pout correlations take a normalized parameter order: (Ql, Qg, P_boundary, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness[, pipe_angle]) — this differs from v1.8 which interleaved pressure/temperature near the end. Multiphase .dPdL (pressure gradient) adds PVT-property inputs Bl, Rho_g, Ug, Bg, Rs that were previously computed internally.
Single-phase liquid (horizontal) — moved to PO.VFP.Liq / PO.SF.PL.Liq
| Old (v1.8) |
New (v2.0) |
Migration notes |
FrictionPressureDropLiquid(Ql, Ul, Rho_l, pipeID, pipeRoughness, pipeLength) |
PO.VFP.Liq.dPfrc(Ql, Rho_l, Ul, pipe_ID, pipe_length, pipe_roughness) |
renamed — parameter order changed: Ul, Rho_l → Rho_l, Ul; pipeLength, pipeRoughness reordered |
PotentialEnergyPressureDropLiquid(Rho_l, pipeLength, pipeAngle) |
PO.VFP.Liq.dPgrv(Rho_l, pipe_length, pipe_angle) |
renamed |
ReynoldsNumberLiquid(Ql, Rho_l, pipeID, Ul) |
PO.VFP.Liq.Re(Ql, Rho_l, pipe_ID, Ul) |
renamed |
InletPipePressureLiquid(P_out, Ql, Ul, Rho_l, pipeID, pipeRoughness, pipeLength, pipeAngle) |
PO.VFP.Liq.Pin(Ql, P_out, Rho_l, Ul, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed: Ql moved first; Ul, Rho_l swapped; pipeRoughness, pipeLength reordered |
OutletPipePressureLiquid(P_in, Ql, Ul, Rho_l, pipeID, pipeRoughness, pipeLength, pipeAngle) |
PO.VFP.Liq.Pout(Ql, P_in, Rho_l, Ul, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed (same as InletPipePressureLiquid) |
Single-phase gas (with angle) — moved to PO.VFP.Gas
| Old (v1.8) |
New (v2.0) |
Migration notes |
ReynoldsNumberGas(Qg, SGgas, pipeID, Ug) |
PO.VFP.Gas.Re(Qg, SG_gas, pipe_ID, Ug) |
renamed — unit Qg [mscf/d] → [mmscf/D] (1000× flip — divide old values by 1000) |
InletPipePressureGas(Qg, P_out, pipeLength, pipeID, pipeAngle, pipeRoughness, zFactor, T, SGgas, Ug) |
PO.VFP.Gas.Pin(Qg, P_out, T_degF, SG_gas, Ug, Z, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed; unit Qg [mscf/d] → [mmscf/D] (1000× flip — divide old values by 1000) |
OutletPipePressureGas(Qg, P_in, pipeLength, pipeID, pipeAngle, pipeRoughness, zFactor, T, SGgas, Ug) |
PO.VFP.Gas.Pout(Qg, P_in, T_degF, SG_gas, Ug, Z, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed (same as .Pin); unit Qg [mscf/d] → [mmscf/D] (1000× flip — divide old values by 1000) |
Multiphase Beggs-Brill
| Old (v1.8) |
New (v2.0) |
Migration notes |
InletPressureBeggsBrill(Ql, Rho_l, Ul, Qg, SGgas, IFTgl, pipeID, pipeLength, pipeRoughness, pipeAngle, P_out, T) |
PO.VFP.BeggsBrill.Pin(Ql, Qg, P_out, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed (normalized to Ql, Qg, P, T, Rho_l, Ul, SG, IFT, geometry) |
OutletPressureBeggsBrill(Ql, Rho_l, Ul, Qg, SGgas, IFTgl, pipeID, pipeLength, pipeRoughness, pipeAngle, P_in, T) |
PO.VFP.BeggsBrill.Pout(Ql, Qg, P_in, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed (as above) |
PressureGradientBeggsBrill(Ql, Rho_l, Ul, Qg, Ug, SGgas, zFactor, IFTgl, pipeID, pipeRoughness, pipeAngle, P, T) |
PO.VFP.BeggsBrill.dPdL(Ql, Qg, P, Rho_l, Ul, Bl, Rho_g, Ug, Bg, IFT_gl, Rs, pipe_ID, pipe_roughness, pipe_angle) |
renamed — parameter order changed; added parameters Bl, Rho_g, Bg, Rs; removed SGgas, zFactor, T (gas properties now passed explicitly) |
Multiphase Gray
| Old (v1.8) |
New (v2.0) |
Migration notes |
InletPressureGray(Ql, Rho_l, Ul, Qg, SGgas, IFTgl, pipeID, pipeLength, pipeRoughness, pipeAngle, P_out, T) |
PO.VFP.Gray.Pin(Ql, Qg, P_out, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed |
OutletPressureGray(Ql, Rho_l, Ul, Qg, SGgas, IFTgl, pipeID, pipeLength, pipeRoughness, pipeAngle, P_in, T) |
PO.VFP.Gray.Pout(Ql, Qg, P_in, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness, pipe_angle) |
renamed — parameter order changed |
PressureGradientGray(Ql, Rho_l, Ul, Qg, Ug, SGgas, zFactor, IFTgl, pipeID, pipeRoughness, pipeAngle, P, T) |
PO.VFP.Gray.dPdL(Ql, Qg, P, Rho_l, Ul, Bl, Rho_g, Ug, Bg, IFT_gl, Rs, pipe_ID, pipe_roughness, pipe_angle) |
renamed — parameter order changed; added Bl, Rho_g, Bg, Rs; removed SGgas, zFactor, T |
Multiphase Hagedorn-Brown
| Old (v1.8) |
New (v2.0) |
Migration notes |
InletPressureHarBrown(Ql, Rho_l, Ul, Qg, SGgas, IFTgl, pipeID, pipeLength, pipeRoughness, P_out, T) |
PO.VFP.HagedornBrown.Pin(Ql, Qg, P_out, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness) |
renamed — parameter order changed |
OutletPressureHarBrown(Ql, Rho_l, Ul, Qg, SGgas, IFTgl, pipeID, pipeLength, pipeRoughness, P_in, T) |
PO.VFP.HagedornBrown.Pout(Ql, Qg, P_in, T_degF, Rho_l, Ul, SG_gas, IFT_gl, pipe_ID, pipe_length, pipe_roughness) |
renamed — parameter order changed |
PressureGradientHarBrown(Ql, Rho_l, Ul, Qg, Ug, SGgas, zFactor, IFTgl, pipeID, pipeRoughness, P, T) |
PO.VFP.HagedornBrown.dPdL(Ql, Qg, P, Rho_l, Ul, Bl, Rho_g, Ug, Bg, IFT_gl, Rs, pipe_ID, pipe_roughness) |
renamed — parameter order changed; added Bl, Rho_g, Bg, Rs; removed SGgas, zFactor, T |
PTA
v1.8 PTA prefix Pdw* / Pw* / pta* reorganized into PO.PTA.PD.VW.* (dimensionless wellbore pressure for vertical wells), PO.PTA.Pw.VW.* (dimensional wellbore pressure), and PO.PTA.ToDim.* (converters from dimensional to dimensionless). Boundary suffixes renamed: LCPB → LinConP, LSFB → LinSealF, PCPB → PerpConP, PMB → PerpMix, PSFB → PerpSealF. The Pw* family also changes the prodData parameter unit from [STB/D] to [bbl/D] (numerically identical for oil at standard conditions — relabel only) and renames the permeability parameter from lowercase k to uppercase K.
| Old (v1.8) |
New (v2.0) |
Migration notes |
PdLSSIHR(td, rd) |
PO.PTA.PD.LSS(tD, rD) |
renamed |
PdwVWIHR(td, cd, skinFactor) |
PO.PTA.PD.VW(tD, CD, S) |
renamed |
PdwVWIHRLCPB(td, cd, skinFactor, Ld) |
PO.PTA.PD.VW.LinConP(tD, CD, S, LD) |
renamed |
PdwVWIHRLSFB(td, cd, skinFactor, Ld) |
PO.PTA.PD.VW.LinSealF(tD, CD, S, LD) |
renamed |
PdwVWIHRPCPB(td, cd, skinFactor, Ld1, Ld2) |
PO.PTA.PD.VW.PerpConP(tD, CD, S, LD1, LD2) |
renamed |
PdwVWIHRPMB(td, cd, skinFactor, Ld1, Ld2) |
PO.PTA.PD.VW.PerpMix(tD, CD, S, LD1, LD2) |
renamed |
PdwVWIHRPSFB(td, cd, skinFactor, Ld1, Ld2) |
PO.PTA.PD.VW.PerpSealF(tD, CD, S, LD1, LD2) |
renamed |
PwVWIHR(time, prodData, B, Ul, C, Rw, S, Ct, porosity, h, k) |
PO.PTA.Pw.VW(time, prod_data, B, Ul, C, Rw, S, Ct, porosity, h, K) |
renamed — parameter k → K; unit prodData [STB/D] → [bbl/D] |
PwVWIHRLCPB(time, prodData, B, Ul, C, Rw, S, Ct, porosity, h, k, L) |
PO.PTA.Pw.VW.LinConP(time, prod_data, B, Ul, C, Rw, S, Ct, porosity, h, K, L) |
renamed — parameter k → K; unit prodData [STB/D] → [bbl/D] |
PwVWIHRLSFB(time, prodData, B, Ul, C, Rw, S, Ct, porosity, h, k, L) |
PO.PTA.Pw.VW.LinSealF(time, prod_data, B, Ul, C, Rw, S, Ct, porosity, h, K, L) |
renamed — parameter k → K; unit prodData [STB/D] → [bbl/D] |
PwVWIHRPCPB(time, prodData, B, Ul, C, Rw, S, Ct, porosity, h, k, L1, L2) |
PO.PTA.Pw.VW.PerpConP(time, prod_data, B, Ul, C, Rw, S, Ct, porosity, h, K, L1, L2) |
renamed — parameter k → K; unit prodData [STB/D] → [bbl/D] |
PwVWIHRPMB(time, prodData, B, Ul, C, Rw, S, Ct, porosity, h, k, L1, L2) |
PO.PTA.Pw.VW.PerpMix(time, prod_data, B, Ul, C, Rw, S, Ct, porosity, h, K, L1, L2) |
renamed — parameter k → K; unit prodData [STB/D] → [bbl/D] |
PwVWIHRPSFB(time, prodData, B, Ul, C, Rw, S, Ct, porosity, h, k, L1, L2) |
PO.PTA.Pw.VW.PerpSealF(time, prod_data, B, Ul, C, Rw, S, Ct, porosity, h, K, L1, L2) |
renamed — parameter k → K; unit prodData [STB/D] → [bbl/D] |
ptaCd(C, poro, ct, h, rw) |
PO.PTA.ToDim.CD(C, porosity, Ct, h, Rw) |
renamed |
ptaLd(l, rw) |
PO.PTA.ToDim.LD(L, Rw) |
renamed |
ptaPd(P, Pi, q, k, h, B, mu) |
PO.PTA.ToDim.PD(P, Pi, q, K, h, B, Ul) |
renamed — parameter mu → Ul; parameter k → K; unit q [STB/D] → [bbl/D] |
ptaRwd(r, rw) |
PO.PTA.ToDim.rD(r, Rw) |
renamed |
ptaTd(t, k, poro, mu, ct, rw) |
PO.PTA.ToDim.tD(t, K, porosity, Ul, Ct, Rw) |
renamed — parameter mu → Ul; parameter k → K |
PVT
PVT reorganizes by quantity → correlation: e.g., every bubble-point correlation becomes PO.PVT.Pb.By<Author>. Oil viscosity splits cleanly into .Dead, .Sat, .UnSat families. Temperature parameters now explicitly suffix _degF or _degR to prevent unit confusion. SGoilAPI → API, SGgas → SG_gas, Rso/Rsob → Rs/Rsb, zFactor → Z. New correlations (Beal, Glaso dead oil, ChewConnally, Kouzel) are new in v2.0. v2.0 relabels [psia] → [psi] across most PVT rows (numerically identical — both mean absolute pressure); [degR], [degF], [cP], [rcf/scf], [bbl/STB], [scf/STB] are unchanged. Individual rows do NOT flag the psia → psi relabel — it applies universally. Only the one real gauge-vs-absolute change (RsoDindorukChristman2001: [psig] → [psi]) is flagged.
Gas properties
| Old (v1.8) |
New (v2.0) |
Migration notes |
Bg(P, T, zFactor) |
PO.PVT.Bg.ByDefinition(P, T_degR, Z) |
renamed |
Cg(P, T, SGgas) |
PO.PVT.Cg.ByDefinition(P, T_degR, SG_gas) |
renamed |
GasDensity(P, T, SGgas, zFactor) |
PO.PVT.Rho.Gas.ByDefinition(P, T_degR, SG_gas, Z) |
renamed |
UgLGE(zFactor, SGgas, P, T) |
PO.PVT.Ug.ByLGE(Z, SG_gas, P, T_degR) |
renamed |
PpcStanding(SGgas) |
PO.PVT.Ppc.ByStanding(SG_gas) |
renamed |
PpcSutton(SGgas) |
PO.PVT.Ppc.BySutton(SG_gas) |
renamed |
TpcStanding(SGgas) |
PO.PVT.Tpc.ByStanding(SG_gas) |
renamed |
TpcSutton(SGgas) |
PO.PVT.Tpc.BySutton(SG_gas) |
renamed |
ZfactorBrillBeggs(Ppr, Tpr) |
PO.PVT.Z.ByBrillBeggs(Ppr, Tpr) |
renamed |
ZfactorDAK(Ppr, Tpr) |
PO.PVT.Z.ByDAK(Ppr, Tpr) |
renamed |
Oil — bubble-point pressure
| Old (v1.8) |
New (v2.0) |
Migration notes |
PboAlMarhoun(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByAlMarhoun(SG_gas, API, Rs, T_degF) |
renamed |
PboDindorukChristman(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByDindorukChristman(SG_gas, API, Rs, T_degF) |
renamed |
PboDoklaOsman(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByDoklaOsman(SG_gas, API, Rs, T_degF) |
renamed |
PboGlaso(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByGlaso(SG_gas, API, Rs, T_degF) |
renamed |
PboPetroskyFarshad(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByPetroskyFarshad(SG_gas, API, Rs, T_degF) |
renamed |
PboStanding(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByStanding(SG_gas, API, Rs, T_degF) |
renamed |
PboVasquezBeggs(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Pb.ByVasquezBeggs(SG_gas, API, Rs, T_degF) |
renamed |
| Old (v1.8) |
New (v2.0) |
Migration notes |
BoSatAlMarhoun1988(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Bo.Sat.ByAlMarhoun(SG_gas, API, Rs, T_degF) |
renamed |
BoSatDindorukChristman2001(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Bo.Sat.ByDindorukChristman(SG_gas, API, Rs, T_degF) |
renamed |
BoSatGlaso1980(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Bo.Sat.ByGlaso(SG_gas, API, Rs, T_degF) |
renamed |
BoSatPetrosky1990(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Bo.Sat.ByPetrosky(SG_gas, API, Rs, T_degF) |
renamed |
BoSatStanding1947(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Bo.Sat.ByStanding(SG_gas, API, Rs, T_degF) |
renamed |
BoSatVasquezBeggs1980(SGgas, SGoilAPI, Rso, T) |
PO.PVT.Bo.Sat.ByVasquezBeggs(SG_gas, API, Rs, T_degF) |
renamed |
BoUSat(Bob, Co, Pb, P) |
PO.PVT.Bo.UnSat.ByDefinition(Bob, Co, Pb, P) |
renamed |
Oil — solution gas-oil ratio (Rs)
| Old (v1.8) |
New (v2.0) |
Migration notes |
RsoAlMarhoun1988(SGgas, SGoilAPI, P, T) |
PO.PVT.Rs.ByAlMarhoun(SG_gas, API, P, T_degF) |
renamed |
RsoDindorukChristman2001(SGgas, SGoilAPI, P, T) |
PO.PVT.Rs.ByDindorukChristman(SG_gas, API, P, T_degF) |
renamed — unit P [psig] → [psi] (real change: v1.8 took gauge pressure, v2.0 takes absolute — add ~14.7 psi) |
RsoGlaso1980(SGgas, SGoilAPI, P, T) |
PO.PVT.Rs.ByGlaso(SG_gas, API, P, T_degF) |
renamed |
RsoPetroskyFarshad1993(SGgas, SGoilAPI, P, T) |
PO.PVT.Rs.ByPetroskyFarshad(SG_gas, API, P, T_degF) |
renamed |
RsoStanding1981(SGgas, SGoilAPI, P, T) |
PO.PVT.Rs.ByStanding(SG_gas, API, P, T_degF) |
renamed |
RsoVasquezBeggs1980(SGgas, SGoilAPI, P, T) |
PO.PVT.Rs.ByVasquezBeggs(SG_gas, API, P, T_degF) |
renamed |
Oil — compressibility, viscosity, interfacial tension
| Old (v1.8) |
New (v2.0) |
Migration notes |
CoSatVillenaLanzi1985(P, Pb, T, Rsob, SGoilAPI) |
PO.PVT.Co.Sat.ByVillenaLanzi(P, Pb, T_degF, Rsb, API) |
renamed |
CoUSatVasquezBeggs1980(Rsob, SGgas, SGoilAPI, T, P) |
PO.PVT.Co.UnSat.ByVasquezBeggs(Rsb, SG_gas, API, T_degF, P) |
renamed |
UodEgbogah1983(SGoilAPI, T) |
PO.PVT.Uo.Dead.ByEgbogah(API, T_degF) |
renamed |
UoSatBeggsRobinson1975(Rso, Uod) |
PO.PVT.Uo.Sat.ByBeggsRobinson(Rs, Uo_dead) |
renamed |
UoUSatVasquezBeggs1980(P, Pb, Uob) |
PO.PVT.Uo.UnSat.ByVasquezBeggs(P, Pb, Uob) |
renamed |
IFTgoAbdulMajeed(SGoilAPI, T, Rso) |
PO.PVT.IFT.GasOil.ByAbdulMajeed(API, T_degF, Rs) |
renamed — result unit [dymes/cm] typo fixed to [dynes/cm] |
IFTgoBakerSwerdloff(SGoilAPI, T, P) |
PO.PVT.IFT.GasOil.ByBakerSwerdloff(API, T_degF, P) |
renamed — result unit [dymes/cm] typo fixed to [dynes/cm] |
Water
| Old (v1.8) |
New (v2.0) |
Migration notes |
BwMcCain(P, T) |
PO.PVT.Bw.ByMcCain(P, T_degF) |
renamed |
CwSatMcCain(P, T, Cs) |
PO.PVT.Cw.Sat.ByMcCain(P, T_degF, salinity_gl) |
renamed — parameter Cs → salinity_gl (units g NaCl/l unchanged) |
CwUSatOsif(P, T, Cs) |
PO.PVT.Cw.UnSat.ByOsif(P, T_degF, salinity_gl) |
renamed — parameter Cs → salinity_gl (units g NaCl/l unchanged) |
RswpMcCain(P, T) |
PO.PVT.Rsw.Pure.ByMcCain(P, T_degF) |
renamed |
RswMcCain(Rswp, salinity, T) |
PO.PVT.Rsw.ByMcCain(Rsw_pure, salinity_pct, T_degF) |
renamed — salinity units % by weight unchanged |
Uw1McCain(T, salinity) |
PO.PVT.Uw.1Atm.ByMcCain(T_degF, salinity_pct) |
renamed — salinity units % by weight unchanged |
UwMcCain(P, Uw1) |
PO.PVT.Uw.ByMcCain(P, Uw_1atm) |
renamed |
SCAL
SCAL modules split by system (gas-oil, gas-water, gas-condensate, two-phase oil-water) and by wettability (SWW / WW / IW / OW). The v1.8 Krow*/Krw* prefix is replaced with a hierarchical PO.SCAL.<Model>.<Rock>.<Wettability>.Krow / .Krw. Parameter lists and units are unchanged in every case — the only parameter rename is lowercase k → uppercase K for permeability. New v2.0 additions (not migrated from v1.8): Stone I/II three-phase, Brooks-Corey, Van Genuchten, Leverett J-function, and Honarpour.*.GasOil.* which add krgAtSorg. v1.8's pore-volume compressibility CfNewman[L|S] becomes PO.SCAL.Cf.[Lime|Sand].ByNewman.
Rock compressibility
| Old (v1.8) |
New (v2.0) |
Migration notes |
CfNewmanL(porosity) |
PO.SCAL.Cf.Lime.ByNewman(porosity) |
renamed |
CfNewmanS(porosity) |
PO.SCAL.Cf.Sand.ByNewman(porosity) |
renamed |
Corey / LET two-phase
| Old (v1.8) |
New (v2.0) |
Migration notes |
KrowCorey(Sw, Swi, Sorw, KrowSwi, No) |
PO.SCAL.Corey.Krow(Sw, Swi, Sorw, Krow_Swi, No) |
renamed |
KrwCorey(Sw, Swi, Sorw, KrwSorw, Nw) |
PO.SCAL.Corey.Krw(Sw, Swi, Sorw, Krw_Sorw, Nw) |
renamed |
KrowLET(Sw, Swi, Sorw, KrowSwi, Lo, Eo, To) |
PO.SCAL.LET.Krow(Sw, Swi, Sorw, Krow_Swi, Lo, Eo, To) |
renamed |
KrwLET(Sw, Swi, Sorw, KrwSorw, Lw, Ew, Tw) |
PO.SCAL.LET.Krw(Sw, Swi, Sorw, Krw_Sorw, Lw, Ew, Tw) |
renamed |
Honarpour oil-water (sandstone / carbonate × WW / IW)
| Old (v1.8) |
New (v2.0) |
Migration notes |
KrowHonarpourSandWaterWet(Sw, Swi, Sorw, porosity) |
PO.SCAL.Honarpour.Sand.WW.Krow(Sw, Swi, Sorw, porosity) |
renamed |
KrwHonarpourSandWaterWet(Sw, Swi, Sorw, porosity) |
PO.SCAL.Honarpour.Sand.WW.Krw(Sw, Swi, Sorw, porosity) |
renamed |
KrowHonarpourSandInterWet(Sw, Swi, Sorw, porosity) |
PO.SCAL.Honarpour.Sand.IW.Krow(Sw, Swi, Sorw, porosity) |
renamed |
KrwHonarpourSandInterWet(Sw, Swi, Sorw, porosity) |
PO.SCAL.Honarpour.Sand.IW.Krw(Sw, Swi, Sorw, porosity) |
renamed |
KrowHonarpourCarbWaterWet(Sw, Swi, Sorw, porosity, k) |
PO.SCAL.Honarpour.Carb.WW.Krow(Sw, Swi, Sorw, porosity, K) |
renamed — parameter k → K |
KrwHonarpourCarbWaterWet(Sw, Swi, Sorw, porosity, k) |
PO.SCAL.Honarpour.Carb.WW.Krw(Sw, Swi, Sorw, porosity, K) |
renamed — parameter k → K |
KrowHonarpourCarbInterWet(Sw, Swi, Sorw) |
PO.SCAL.Honarpour.Carb.IW.Krow(Sw, Swi, Sorw) |
renamed |
KrwHonarpourCarbInterWet(Sw, Swi, Sorw) |
PO.SCAL.Honarpour.Carb.IW.Krw(Sw, Swi, Sorw) |
renamed |
Ibrahim-Koederitz oil-water (sandstone / carbonate × SWW / WW / IW / OW)
| Old (v1.8) |
New (v2.0) |
Migration notes |
KrowIKSandStrongWaterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Sand.SWW.Krow(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrwIKSandStrongWaterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Sand.SWW.Krw(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrowIKSandWaterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Sand.WW.Krow(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrwIKSandWaterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Sand.WW.Krw(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrowIKSandInterWet(Sw, Swi, Sorw) |
PO.SCAL.IK.Sand.IW.Krow(Sw, Swi, Sorw) |
renamed |
KrwIKSandInterWet(Sw, Swi, Sorw) |
PO.SCAL.IK.Sand.IW.Krw(Sw, Swi, Sorw) |
renamed |
KrowIKSandOilWet(Sw, Swi, Sorw) |
PO.SCAL.IK.Sand.OW.Krow(Sw, Swi, Sorw) |
renamed |
KrwIKSandOilWet(Sw, Swi, Sorw) |
PO.SCAL.IK.Sand.OW.Krw(Sw, Swi, Sorw) |
renamed |
KrowIKCarbStrongWaterWet(Sw, Swi, Sorw, Swc) |
PO.SCAL.IK.Carb.SWW.Krow(Sw, Swi, Sorw, Swc) |
renamed |
KrwIKCarbStrongWaterWet(Sw, Swi, Sorw, Swc) |
PO.SCAL.IK.Carb.SWW.Krw(Sw, Swi, Sorw, Swc) |
renamed |
KrowIKCarbWaterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Carb.WW.Krow(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrwIKCarbWaterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Carb.WW.Krw(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrowIKCarbInterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Carb.IW.Krow(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrwIKCarbInterWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Carb.IW.Krw(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrowIKCarbOilWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Carb.OW.Krow(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
KrwIKCarbOilWet(Sw, Swi, Sorw, Swc, porosity, k) |
PO.SCAL.IK.Carb.OW.Krw(Sw, Swi, Sorw, Swc, porosity, K) |
renamed — parameter k → K |
Ibrahim-Koederitz gas-oil / gas-water / gas-condensate
| Old (v1.8) |
New (v2.0) |
Migration notes |
KrgIKGasOilSand(Sg, Sgc, Sorg, Swc, Slc, porosity) |
PO.SCAL.IK.Sand.GasOil.Krg(Sg, Sgc, Sorg, Swc, Slc, porosity) |
renamed |
KrogIKGasOilSand(Sg, Sgc, Sorg, Swc, Slc, porosity) |
PO.SCAL.IK.Sand.GasOil.Krog(Sg, Sgc, Sorg, Swc, Slc, porosity) |
renamed |
KrgIKGasOilCarb(Sg, Sgc, Swc, Slc, porosity, k) |
PO.SCAL.IK.Carb.GasOil.Krg(Sg, Sgc, Swc, Slc, porosity, K) |
renamed — parameter k → K |
KrogIKGasOilCarb(Sg, Sgc, Swc, Slc, porosity, k) |
PO.SCAL.IK.Carb.GasOil.Krog(Sg, Sgc, Swc, Slc, porosity, K) |
renamed — parameter k → K |
KrgwIKGasWater(Sg, Sgc, Swc, Slc, porosity, k) |
PO.SCAL.IK.GasWat.Krgw(Sg, Sgc, Swc, Slc, porosity, K) |
renamed — parameter k → K |
KrwIKGasWater(Sg, Sgc, Swc, Slc, porosity, k) |
PO.SCAL.IK.GasWat.Krw(Sg, Sgc, Swc, Slc, porosity, K) |
renamed — parameter k → K |
KrgIKGasCond(Sg, Sgc, Slc) |
PO.SCAL.IK.GasCond.Krg(Sg, Sgc, Slc) |
renamed |
KrcgIKGasCond(Sg, Sgc, Slc) |
PO.SCAL.IK.GasCond.Krcg(Sg, Sgc, Slc) |
renamed |
Utilities
Spline and interpolation functions moved into PO.Spline.* and PO.Math.*. Parameter names follow snake_case convention (xValues → x_values) but units and semantics are unchanged. API2SG / SG2API moved into the PVT module. UnitConverter keeps its top-level flat identifier as PO.UnitConverter.
| Old (v1.8) |
New (v2.0) |
Migration notes |
API2SG(SGoilAPI) |
PO.PVT.SG.Oil.FromAPI(API) |
renamed — moved to PVT module |
SG2API(SGoil) |
PO.PVT.API.FromSGoil(SG_oil) |
renamed — moved to PVT module |
UnitConverter(Value, UnitFrom, UnitTo) |
PO.UnitConverter(value, unit_from, unit_to) |
renamed |
ExpIntegralEi(x) |
PO.Math.Ei(x) |
renamed |
DataDifferentiate(xValues, yValues, t, l) |
PO.Math.DataDiff(x_values, y_values, t, l) |
renamed |
CubicSplineInterpolate(xValues, yValues, t) |
PO.Spline.Cubic.Interp(x_values, y_values, t) |
renamed |
CubicSplineDifferentiate(xValues, yValues, t) |
PO.Spline.Cubic.Diff(x_values, y_values, t) |
renamed |
CubicSplineIntegrate(xValues, yValues, t) |
PO.Spline.Cubic.Integ(x_values, y_values, t) |
renamed |
CubicSplineIntegrateT1T2(xValues, yValues, t1, t2) |
PO.Spline.Cubic.IntegT1T2(x_values, y_values, t1, t2) |
renamed |
CubicSplinesIntersection(xValues1, yValues1, xValues2, yValues2) |
PO.Spline.Cubic.Intersect(x_values_1, y_values_1, x_values_2, y_values_2) |
renamed |
LinearSplineInterpolate(xValues, yValues, t) |
PO.Spline.Linear.Interp(x_values, y_values, t) |
renamed |
LinearSplineDifferentiate(xValues, yValues, t) |
PO.Spline.Linear.Diff(x_values, y_values, t) |
renamed |
LinearSplineIntegrate(xValues, yValues, t) |
PO.Spline.Linear.Integ(x_values, y_values, t) |
renamed |
LinearSplineIntegrateT1T2(xValues, yValues, t1, t2) |
PO.Spline.Linear.IntegT1T2(x_values, y_values, t1, t2) |
renamed |
LinearSplinesIntersection(xValues1, yValues1, xValues2, yValues2) |
PO.Spline.Linear.Intersect(x_values_1, y_values_1, x_values_2, y_values_2) |
renamed |
ProximalInterpolate(xValues, yValues, t) |
PO.Spline.Proximal.Interp(x_values, y_values, t) |
renamed |
StepInterpolate(xValues, yValues, t) |
PO.Spline.Step.Interp(x_values, y_values, t) |
renamed |
WellFlow
v1.8 WellFlow maps to v2.0 PO.IPR (Inflow Performance Relationships). Vertical vs horizontal well split into PO.IPR.VW.* and PO.IPR.HW.*; PSS / SS / TF flow regimes exposed as explicit sub-namespaces. Gas well functions grouped under PO.IPR.GW.*. ProdIndex* → PO.IPR.*.PI, FlowRate* → PO.IPR.*.Rate. Many vertical-well rows shift result unit wording from [STB/d] / [STB/(d.psi)] to [bbl/D] / [bbl/(D.psi)] — numerically identical for oil at standard conditions. Horizontal-well PI rows (ByBorisov, ByBabuOdeh, ByGRJ, ByJoshi, ByRenardDupuy) keep [STB/(d.psi)] unchanged.
Utility functions
| Old (v1.8) |
New (v2.0) |
Migration notes |
DrainageRadius(A) |
PO.IPR.Re(A) |
renamed |
EffectiveWellboreRadius(Rw, S) |
PO.IPR.Rwa(Rw, S) |
renamed |
EquivalentSkinFactor(Xf, W, K_fracture, K, Rw) |
PO.FRAC.Well.SkinEq(Xf, W, Kf, K, Rw) |
renamed — parameter K_fracture → Kf; moved to new FRAC module |
Vertical well — productivity index and flow rate
| Old (v1.8) |
New (v2.0) |
Migration notes |
ProdIndexPSS(K, h, Bl, Ul, Re, Rw, S) |
PO.IPR.VW.PSS.PI(K, h, Bl, Ul, Re, Rw, S) |
renamed — result unit [STB/(d.psi)] → [bbl/(D.psi)] (relabel only, numerically equivalent for oil at standard conditions) |
ProdIndexSS(K, h, Bl, Ul, Re, Rw, S) |
PO.IPR.VW.SS.PI(K, h, Bl, Ul, Re, Rw, S) |
renamed — result unit [STB/(d.psi)] → [bbl/(D.psi)] (relabel only) |
ProdIndexTF(time, K, h, Bl, Ul, porosity, Ct, Rw, S) |
PO.IPR.VW.TF.PI(time, K, h, Bl, Ul, porosity, Ct, Rw, S) |
renamed — result unit [STB/(d.psi)] → [bbl/(D.psi)] (relabel only) |
FlowRatePSS(J, P_average, Pwf) |
PO.IPR.VW.PSS.Rate(J, P_average, Pwf) |
renamed — result unit [STB/d] → [bbl/D] (relabel only) |
FlowRateSS(J, Pe, Pwf) |
PO.IPR.VW.SS.Rate(J, Pe, Pwf) |
renamed — result unit [STB/d] → [bbl/D] (relabel only) |
FlowRateTF(J, Pi, Pwf) |
PO.IPR.VW.TF.Rate(J, Pi, Pwf) |
renamed — result unit [STB/d] → [bbl/D] (relabel only) |
FlowRatePSSVogel(J, P_average, Pwf, Pb) |
PO.IPR.VW.PSS.Rate.ByVogel(J, P_average, Pwf, Pb) |
renamed — result unit [STB/d] → [bbl/D] (relabel only) |
FlowRateSSVogel(J, Pe, Pwf, Pb) |
PO.IPR.VW.SS.Rate.ByVogel(J, Pe, Pwf, Pb) |
renamed — result unit [STB/d] → [bbl/D] (relabel only) |
FlowRateTFVogel(J, Pi, Pwf, Pb) |
PO.IPR.VW.TF.Rate.ByVogel(J, Pi, Pwf, Pb) |
renamed — result unit [STB/d] → [bbl/D] (relabel only) |
TimeToPSS(Re, K, Ul, porosity, Ct) |
PO.IPR.VW.PSS.Time(Re, K, Ul, porosity, Ct) |
renamed |
Gas well
| Old (v1.8) |
New (v2.0) |
Migration notes |
GasFlowRatePSS(K, h, P_average, Pwf, zFactor, Ug, Re, Rw, S, T) |
PO.IPR.GW.PSS.Rate(K, h, P_average, Pwf, Z, Ug, Re, Rw, S, T_degR) |
renamed |
GasFlowRatePSSNonDarcy(K, h, P_average, Pwf, zFactor, Ug, Re, Rw, S, T, D) |
PO.IPR.GW.PSS.Rate.NonDarcy(K, h, P_average, Pwf, Z, Ug, Re, Rw, S, T_degR, D) |
renamed |
NonDarcyCoefficient(Rw, h, h_perf, SGgas, Ug, K) |
PO.IPR.GW.D(Rw, h, h_perf, SG_gas, Ug, K) |
renamed |
TimeToPSSGas(Re, Rw, porosity, K, Ct, Ug) |
PO.IPR.GW.PSS.Time(Re, Rw, K, porosity, Ct, Ug) |
renamed — parameter order changed: porosity, K → K, porosity |
Horizontal well — productivity index and drainage
| Old (v1.8) |
New (v2.0) |
Migration notes |
DrainageAreaHorWell1(L, b) |
PO.IPR.HW.DrainArea.Rect(L, b) |
renamed |
DrainageAreaHorWell2(L, b) |
PO.IPR.HW.DrainArea.Ellipse(L, b) |
renamed |
ProdIndexHorWellBO(sizeX, sizeY, sizeZ, Kx, Ky, Kz, L, Rw, Bl, Ul, S, x1, y0, z0) |
PO.IPR.HW.PSS.PI.ByBabuOdeh(size_x, size_y, size_z, Kx, Ky, Kz, L, Rw, Bl, Ul, S, x1, y0, z0) |
renamed |
ProdIndexHorWellBO2(sizeX, sizeY, sizeZ, Kx, Ky, Kz, L, Rw, Bl, Ul, S) |
PO.IPR.HW.PSS.PI.ByBabuOdeh.Centered(size_x, size_y, size_z, Kx, Ky, Kz, L, Rw, Bl, Ul, S) |
renamed |
ProdIndexHorWellBorisov(L, Rw, Re, h, K, Bl, Ul) |
PO.IPR.HW.SS.PI.ByBorisov(L, Rw, Re, h, K, Bl, Ul) |
renamed — regime re-declared as SS |
ProdIndexHorWellGRJ(L, Rw, Re, h, Kz, Kxy, Bl, Ul) |
PO.IPR.HW.SS.PI.ByGRJ(L, Rw, Re, h, Kz, Kxy, Bl, Ul) |
renamed |
ProdIndexHorWellJoshi(L, Rw, Re, h, Kz, Kxy, Bl, Ul) |
PO.IPR.HW.SS.PI.ByJoshi(L, Rw, Re, h, Kz, Kxy, Bl, Ul) |
renamed |
ProdIndexHorWellRD(L, Rw, Re, h, Kz, Kxy, Bl, Ul) |
PO.IPR.HW.SS.PI.ByRenardDupuy(L, Rw, Re, h, Kz, Kxy, Bl, Ul) |
renamed |
Unmapped / deprecated
All 213 v1.8 functions map to a v2.0 equivalent. None deprecated or removed. EquivalentSkinFactor moved across modules (WellFlow → PO.FRAC.Well.SkinEq) but semantics are identical.