Upgrading Workbooks from v2.2 to v2.3


Every function name from v2.2 still exists in v2.3; nothing was removed or renamed. Most workbooks open and recalculate without edits. Some formulas do need attention:

  • seven functions take different arguments;
  • gas pipeline and gas choke rates are now in MMscf/d;
  • unit conversion accepts registered unit names only;
  • inputs outside a correlation's valid range now return an error instead of a number;
  • several results change because v2.2 calculated them wrongly.

Work through the checklist below, then re-check any design whose numbers come from the corrected functions.

Checklist

  1. Edit formulas that call one of the seven functions with new arguments.
  2. Convert gas rates for the gas pipeline and gas choke functions.
  3. Replace unit names that are no longer accepted.
  4. Expect #VALUE! or #NUM! where inputs fall outside a correlation's range.
  5. Re-check designs built on corrected results: gas pipelines, chokes, gas lift, fracturing, rod pumps, multiphase flow and equation-of-state bubble points.
  6. Update lambdas saved in your workbooks.

Finding the formulas to check

Use Excel's Find (Ctrl+F) → Options → Within: Workbook, Look in: Formulas, and search for a function name or a family prefix such as PO.FRAC., PO.SF. or PO.GL.. Find All lists every cell that uses it.

Keep a copy of the workbook as it was in v2.2, so you can compare numbers after the upgrade.

Functions with new arguments

Argument units are as shown in each function's description in the Function Browser.

Function v2.2 v2.3 What to change
PO.FRAC.PKN.Length.Leakoff (Q, h, C, t) (Q, Ul, h, G, nu, C, t) Add fluid viscosity Ul [cP] after Q; add shear modulus G [psi] and Poisson's ratio nu after h
PO.FRAC.KGD.Length.Leakoff (Q, h, C, t) (Q, Ul, h, G, C, t) Add Ul [cP] after Q; add G [psi] after h
PO.FRAC.Radial.Radius.Leakoff (Q, C, t) (Q, Ul, G, C, t) Add Ul [cP] and G [psi] after Q
PO.FRAC.Leakoff.Cv (K, porosity, ct, dP, Ufrac) (K, porosity, dP, Ufrac) Delete the third argument, total compressibility ct
PO.RP.Torque.PRHP (PPRL, MPRL, S, N) (W, S, N) Replace peak and minimum polished-rod loads with one value, W [lbf] (see below)
PO.PVT.Cw.Sat.ByMcCain (P, T_degF, salinity_gl) (P, T_degF, salinity_gl, SG_gas) Append gas specific gravity SG_gas; 0.63 reproduces the v2.2 result
PO.IPR.GW.PSS.Time (Re, Rw, K, porosity, Ct, Ug) (Re, K, porosity, Ct, Ug) Delete the second argument, wellbore radius Rw; the result is unchanged

The .SI lambdas of these functions changed the same way. In SI units, G is in kPa, the dropped ct was in 1/kPa, and PO.RP.Torque.PRHP.SI takes W in N with S in cm.

Don't leave the old argument list in place. Excel passes arguments by position, so after the change the old values land in the wrong parameters. Usually the new input checks then return #VALUE!, but a wrong number is possible. Edit every call.

Fracture lengths with leakoff. Ul, G and nu don't enter the length formula. They let the function check that its assumptions hold: PKN needs dimensionless time of at least 1, and KGD and radial need a dimensionless parameter of at least 1. The length itself also changed, because v2.2 was missing a barrel-to-cubic-foot conversion. PKN and KGD lengths with leakoff are about 5.6 times their v2.2 values. The radial radius is unchanged.

PO.FRAC.Leakoff.Cv also changed value. It is about 10 times its v2.2 result at the same inputs, now matching the published correlation.

PO.RP.Torque.PRHP now takes the card work load: average upstroke load minus average downstroke load, which is C·A₂/L on the dynamometer card. It cannot be converted from PPRL and MPRL. The v2.2 form overstated polished-rod horsepower: on Guo's Example 18.1 it gave 24.6 hp against the book's 10.3 hp. Without a measured card, the rod-pump blueprints use the fluid load (PO.RP.Load.FluidLoad) as W for a static-card estimate.

Gas pipeline and choke rates

These functions now use MMscf/d (million standard cubic feet per day), like the PO.VFP.* gas functions. In v2.2 they used Mscf/d (thousand scf/d).

Functions Change What to do
Rate input Qg: PO.SF.PL.Gas.Re, PO.SF.PL.Gas.Vel, PO.SF.PL.Gas.Weymouth.Pout, PO.SF.PL.Gas.PanhandleA.Pout, PO.SF.PL.Gas.PanhandleB.Pout, PO.SF.CH.Gas.Pwh, PO.SF.CH.Gas.Size Mscf/d → MMscf/d Divide the rate you pass by 1,000
Rate result: PO.SF.PL.Gas.Weymouth.Rate, PO.SF.PL.Gas.PanhandleA.Rate, PO.SF.PL.Gas.PanhandleB.Rate, PO.SF.CH.Gas.Rate, PO.SF.CH.Gas.Rate.Sonic Mscf/d → MMscf/d Multiply by 1,000 to compare with a v2.2 value
PO.FA.Hydrate.Qinj.MEG.SI, PO.FA.Hydrate.Qinj.MeOH.SI (lambda result) L/d → m³/d Multiply by 1,000 to compare with a v2.2 value

The .SI lambdas of the pipeline and choke functions still take and return m³/d.

The pipeline functions' values were also corrected (see Corrected results). So a v2.2 pipeline rate and a v2.3 one differ by more than the unit.

Unchanged: PO.GL.Inj.Eff, PO.GL.Inj.Qgi, PO.GL.Valve.ThornhillCraver, PO.IPR.GW.PSS.Rate and PO.IPR.GW.PSS.Rate.NonDarcy still use thousand scf/d. PO.VFP.* was already in MMscf/d.

Unit names

PO.UnitConverter and every function that takes a unit name accept registered unit names only. v2.2 also accepted unit expressions it assembled on the fly. These no longer work:

  • products and powers written with * or ^;
  • SI prefixes added to a unit that doesn't register them;
  • arbitrary multipliers;
  • symbols such as °F.

An unrecognised name returns #VALUE!.

v2.2 spelling v2.3 spelling
scf/bbl scf/STB
lb/gal lbm/gal[US]
gal/min gal[US]/min
gal/d gal[US]/d
mPa*s mPa.s
N*m N.m
in*lbf lbf.in
ft*lbf lbf.ft
lb/ft lbm/ft
sm3/d m3/d
sm3/m3 m3/m3
ft^2, m^3 ft2, m3
lb/in2, lbf/in2 psi
day d
kbbl mbbl or 1000 bbl
ac acre
µm um
L/d m3/d (convert the value)
g/cc g/cm3 (this one already failed in v2.2)

Names are not case-sensitive: HP finds hp.

To find a valid name:

Inputs outside the valid range

Functions now check their inputs against the published validity range of the correlation behind them.

  • #VALUE! means an input is outside that range. In v2.2 the same call returned a number that the correlation does not support.
  • #NUM! means there is no answer at those inputs, for example:
    • a gas pipeline outlet pressure that cannot be reached at that rate;
    • an equation-of-state bubble or dew point that does not converge;
    • a decline EUR whose economic limit is never reached.

Examples:

Call v2.2 v2.3 Valid range
PO.FRAC.Proppant.Vs.Stokes with a 0.5 in grain 57.0 #VALUE! grain diameter 0.002–0.25 in
PO.RP.Load.PPRL with F1 = 1.1 27,333 #VALUE! 0–1
PO.FRAC.PKN.Width with Q = 600 bbl/min 0.80 #VALUE! 0.5–400 bbl/min
PO.FRAC.KGD.Pnet with G = 3.28 psi 3.6e-5 #VALUE! 3,000–5×10⁷ psi
PO.FA.Hydrate.dT.MeOH with 70 % inhibitor 170 #VALUE! 0–60 %
PO.SF.PL.Gas.Weymouth.Pout at 100 MMscf/d in an 8 in line 792 psi #NUM! no outlet pressure delivers that rate

When a cell shows one of these errors, open the function in the Function Browser. Its description states the range, and the input to look at is usually the one you changed last.

Corrected results

These functions return different numbers for the same inputs, because v2.2 was wrong. Each was checked against the reference the function cites. Re-run any design that depends on them.

Function or family Change from v2.2
PO.SF.PL.Gas.Weymouth.Rate, .PanhandleA.Rate, .PanhandleB.Rate Lower by a factor of about 21–28 (on top of the MMscf/d unit change)
PO.SF.PL.Gas.*.Pout Now includes the full pressure drop (1.6–2.5 % lower in the test case)
PO.SF.CH.Ros.Pwh, .Rate, .Size ×1.57, ×0.64, ×1.25
PO.SF.CH.Pilehvari.Pwh, .Rate, .Size ×0.29, ×2.3–3.4, ×0.72, depending on inputs
PO.SF.CH.AshfordPierce.Rate, .Size ×1.20, ×0.82
PO.GL.Inj.Grad (and PO.GL.Inj.Pd, which uses it) About ×10
PO.GL.Valve.ThornhillCraver About ×15
PO.GL.Valve.Pvc Now equals the dome pressure
PO.GL.Valve.Pdome, PO.GL.Valve.TRO −2.5 % to +1.1 %
PO.FRAC.PKN.Length.Leakoff, PO.FRAC.KGD.Length.Leakoff About ×5.6
PO.FRAC.PKN.Width.Leakoff About ×0.2
PO.FRAC.Leakoff.Cv About ×10
PO.FRAC.Leakoff.Cc Scales with √(Δp / 1,000 psi): the same at 1,000 psi, lower below, higher above
PO.FRAC.PKN.Length.NoLoss, PO.FRAC.PKN.Width.NoLoss Much longer and narrower fractures (a shipped example went from 24 ft to 3,590 ft)
PO.FRAC.KGD.Length.NoLoss, PO.FRAC.Radial.Radius.NoLoss ×0.24 and ×28.5
PO.FRAC.KGD.Width, PO.FRAC.KGD.Width.General, PO.FRAC.Radial.Width About ×0.13
PO.FRAC.Proppant.Vs.StokesField Now equals PO.FRAC.Proppant.Vs.Stokes (about ×400)
PO.FRAC.Proppant.WallFactor No longer zero for grain-to-width ratios above 0.5
PO.MBE.Aq.VEH.WdFin Higher at mid-range dimensionless time
PO.RP.Pump.Stroke.Eff Now subtracts tubing stretch (about 9 % lower in a typical case)
PO.VFP.* multiphase .Pin / .Pout Small changes in most cases; up to about 13 % in some (Gray, Beggs-Brill)
PO.VFP.* multiphase .dPdL Beggs-Brill +5 %, Gray −2 %
PO.EoS.Pb.PR Corrected bubble point (an example tuning case went from 36.8 to 17.0 MPa, much closer to the lab value)

Some descriptions now state what was always meant, with no change to the calculation:

  • Hydrate temperature depressions (PO.FA.Hydrate.dT.*) are temperature differences. To convert one, use deltaF → deltaC, not degF → degC.
  • Gas-lift valve pressures (Pdome, Pvc, TRO) are absolute pressures.
  • In PO.RP.Load.FluidLoad, H is the net lift: the depth from surface to the fluid level in the annulus.
  • In PO.RP.Pump.Stroke.Eff, the rod stretch is under the fluid load only.

Other changes

  • Two functions spill down a column. PO.EoS.Component.List and PO.DCA.Data.OutlierFlag now spill down a column instead of across a row. Update any formula that reads their results by column.
  • Bourdet smoothing. In PO.DCA.Diag.Bourdet, PO.DCA.Diag.Beta and PO.DCA.Diag.bParam, the smoothing window L is now measured in natural-log cycles. With L = 0 nothing changes; with L > 0 the curve moves (about +13 % at L = 0.5). New in v2.3: PO.DCA.Diag.Bourdet.SemiLog.
  • No more Function Library menus. The ribbon's Function Library menus are replaced by the discipline tree in the Function Browser. The functions themselves are the same.

Lambdas saved in your workbooks

A lambda you installed in v2.2 lives in that workbook's Name Manager and keeps its v2.2 definition. This matters for the seven .SI lambdas with new arguments, and for any lambda whose function was corrected. To update one:

  1. Open Formulas → Name Manager and delete the lambda's name, for example PO.FRAC.PKN.Length.Leakoff.SI.
  2. Insert it again from the Lambda Manager pane.
  3. Edit the formulas that call it, as in Functions with new arguments.

See Using Lambdas in Petroleum Office for how lambdas are installed.

Tags:
migration