Compute rates, cumulative production values, instantaneous nominal declines, and transition times for Arps hyperbolic-to-exponential decline curves.

1 2 3 4 | ```
hyp2exp.q(qi, Di, b, Df, t)
hyp2exp.Np(qi, Di, b, Df, t)
hyp2exp.D(Di, b, Df, t)
hyp2exp.transition(Di, b, Df)
``` |

`qi` |
initial rate [volume / time], i.e. q(t = 0). |

`Di` |
initial nominal Arps decline exponent [1 / time]. |

`b` |
Arps hyperbolic exponent. |

`Df` |
final nominal Arps decline exponent [1 / time]. |

`t` |
time at which to evaluate rate or cumulative [time]. |

Assumes consistent units of time between `qi`

, `Di`

, `Df`

, and `t`

. To convert, see the decline-rate conversion functions referenced below.

When appropriate, internally uses `harmonic.q`

and `harmonic.Np`

to avoid singularities in calculations for `b`

near 1.

`hyp2exp.q`

returns the rate for each element of `t`

,
in the same units as `qi`

.

`hyp2exp.Np`

returns the cumulative production for each element of
`t`

, in the same units as `qi * t`

.

`hyp2exp.D`

returns the nominal instantaneous decline for each
element of `t`

. This can be converted to effective decline and
rescaled in time by use of `as.effective`

and
`rescale.by.time`

.

`hyp2exp.transition`

returns the transition time (from hyperbolic to
exponential decline), in the same units as `1 / Di`

.

`as.effective`

, `as.nominal`

, `rescale.by.time`

.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ```
## qi = 1000 Mscf/d, Di = 95% effective / year, b = 1.2,
## Df = 15% effective / year, t from 0 to 25 years
## result in Mscf/d
hyp2exp.q(1000, as.nominal(0.95), 1.2, as.nominal(0.15), seq(0, 25))
## qi = 500 bopd, Di = 3.91 nominal / year, b = 0.5,
## Df = 0.3 nominal / year, t = 20 years
hyp2exp.Np(rescale.by.time(500, from.period="day", to.period="year"),
3.91, 0.5, 0.3, 20)
## Di = 85% effective / year, b = 1.5, Df = 15% effective / year,
## t = 6 and 48 months
hyp2exp.D(as.nominal(0.85), 1.5, as.nominal(0.15), c(0.5, 4))
## Di = 85% effective / year, b = 1.5, Df = 5% effective / year
hyp2exp.transition(as.nominal(0.85), 1.5, as.nominal(0.05))
``` |

Questions? Problems? Suggestions? Tweet to @rdrrHQ or email at ian@mutexlabs.com.

All documentation is copyright its authors; we didn't write any of that.