bluebonnet.flow.reservoir

reservoir: scaling solutions for hydrofractured wells.

This module calculates the scaling curves, using flow properties and finite difference methods.

Classes

IdealReservoir

Class for building scaling solutions of production from hydrofractured wells.

SinglePhaseReservoir

Single-phase real fluid reservoir.

TwoPhaseReservoir

Oil-gas reservoir simulation.

MultiPhaseReservoir

Reservoir with three phases: oil, gas, and water all flowing.

Module Contents

class bluebonnet.flow.reservoir.IdealReservoir[source]

Class for building scaling solutions of production from hydrofractured wells.

This maintains simulation parameters and fluid properties.

Parameters:
  • nx (int) – number of spatial nodes

  • pressure_fracface (float | NDArray) – drawdown pressure at x=0 (psi)

  • pressure_initial (float) – reservoir pressure before production (psi)

  • fluid (FlowProperties) – reservoir fluid PVT/flow properties

nx: int

number of spatial nodes

pressure_fracface: float | numpy.typing.NDArray

drawdown pressure at \(x=0\) (psi)

pressure_initial: float

reservoir pressure before production (psi)

fluid: bluebonnet.flow.flowproperties.FlowProperties | None = None

reservoir fluid PVT/flow properties

__post_init__()[source]

Last initialization steps.

simulate(time: numpy.ndarray)[source]

Calculate simulation pressure over time.

Parameters:

time (ndarray) – times to solve for pressure

recovery_factor(time: numpy.ndarray | None = None, density=False) numpy.ndarray[source]

Calculate recovery factor over time.

If time has is not specified, requires that simulate has been run

Parameters:

time (ndarray, Optional) – times to calculate recovery factor at

Returns:

recovery – recovery factor over time

Return type:

ndarray

recovery_factor_interpolator() collections.abc.Callable[source]

Generate a function to get recovery factor from time.

Requires that recovery_factor has been run

Return type:

scipy interpolator object that takes in time and spits out recovery factor

alpha_scaled(pseudopressure: numpy.ndarray) numpy.ndarray[source]

Calculate scaled diffusivity.

fvf_scale() float[source]

Scaling for formation volume factor.

Returns:

FVF

Return type:

float

class bluebonnet.flow.reservoir.SinglePhaseReservoir[source]

Bases: IdealReservoir

Single-phase real fluid reservoir.

alpha_scaled(pseudopressure: numpy.ndarray) numpy.ndarray[source]

Calculate scaled diffusivity.

fvf_scale() float[source]

Scaling for formation volume factor.

Returns:

FVF

Return type:

float

simulate(time: numpy.ndarray[float], pressure_fracface: numpy.ndarray[float] | None = None)[source]

Calculate simulation pressure over time.

Parameters:
  • time (ndarray) – times to solve for pressure

  • pressure_fracface (Iterable[float] | None, optional) – pressure at frac-face over time. Defaults to None, which is no change

Raises:

ValueError – wrong length changing pressure at frac-face:

class bluebonnet.flow.reservoir.TwoPhaseReservoir[source]

Bases: SinglePhaseReservoir

Oil-gas reservoir simulation.

References

Ruiz Maraggi, L.M., Lake, L.W. and Walsh, M.P., 2020. “A Two-Phase Non-Linear One- Dimensional Flow Model for Reserves Estimation in Tight Oil and Gas Condensate Reservoirs Using Scaling Principles.” In SPE Latin American and Caribbean Petroleum Engineering Conference. OnePetro. https://doi.org/10.2118/199032-MS

Sw_init: float = 0.0
simulate(time: numpy.ndarray)[source]

Calculate simulation pressure over time.

Parameters:

time (ndarray) – times to solve for pressure

class bluebonnet.flow.reservoir.MultiPhaseReservoir[source]

Bases: SinglePhaseReservoir

Reservoir with three phases: oil, gas, and water all flowing.

Parameters:
  • nx (int) – number of spatial nodes

  • pressure_fracface (float | NDArray) – drawdown pressure at x=0 (psi)

  • pressure_initial (float) – reservoir pressure before production (psi)

  • fluid (FlowProperties) – reservoir fluid PVT/flow properties

  • So_init (float) – oil saturation at the beginning

  • Sw_init (float) – water saturation

  • Sg_init (float) – gas saturation

So_init: float = 1.0

Initial oil saturation.

Sw_init: float = 0.0

Initial water saturation.

Sg_init: float = 0.0

Initial gas saturation.

abstract simulate(time: numpy.ndarray)[source]

Calculate simulation pressure over time.

Parameters:

time (ndarray) – times to solve for pressure

alpha_scaled(pseudopressure: numpy.ndarray, saturation: numpy.ndarray) numpy.ndarray[source]

Calculate scaled diffusivity given pseudopressure and saturations.

Parameters:
  • pseudopressure (ndarray) – scaled pseudopressure

  • saturation (ndarray) – record array with So, Sg, Sw records

Returns:

alpha – scaled diffusivity

Return type:

ndarray