Conificación de Agua en Python: Penetración del Pozo y Caudal Crítico

Un ejemplo con cuatro combinaciones de intervalo abierto y anisotropía

Yacimientos
Producción
Python
Calcula el caudal crítico de conificación de agua con el método presentado por Chierici. Compara dos longitudes de intervalo abierto y dos relaciones kv/kh con un flujo sencillo en Python.
Autor/a
Fecha de publicación

3 de octubre de 2026

¿Cómo influye el intervalo abierto en la conificación de agua?

Cuando un pozo produce aceite sobre un acuífero, el gradiente de presión cerca del pozo puede elevar localmente el contacto agua–aceite. Esa deformación se conoce como conificación de agua.

El caudal crítico es el límite que, bajo los supuestos del modelo, permite mantener un cono estable sin que el agua alcance el intervalo productor. Un cono puede existir incluso por debajo de ese caudal: lo que se busca evitar es su llegada al pozo.

Calcularemos este límite con el procedimiento del capítulo 12 de Principles of Petroleum Reservoir Engineering, volumen 2, de Gian Luigi Chierici. Usaremos los datos del ejercicio 12.6 y compararemos intervalos abiertos de 6 y 18 m, con relaciones kv/kh de 1 y 0.1.

Visita el canal @rigopetrodata

Tutoriales de R, Python y Excel para ingeniería petrolera

Ver canal

El ejemplo

Un pozo drena un área de 80 acres. La formación tiene 50 m de espesor total: los 30 m superiores contienen aceite y los 20 m inferiores corresponden al acuífero local. El intervalo abierto comienza en el techo de la zona de aceite.

Dato utilizado Valor Unidad
Área de drenaje 80 acres
Espesor de la columna de aceite, ho 30 m
Permeabilidad horizontal, kh 500 mD
Permeabilidad relativa al aceite a Swi, kro 0.90 fracción
Factor de volumen del aceite, Bo 1.25 m³ de yacimiento/m³ de superficie
Viscosidad del aceite, μo 2.0 cP
Densidad del aceite, ρo 780 kg/m³
Densidad del agua, ρw 1030 kg/m³
Longitud del intervalo abierto, b 6 y 18 m
Relación de permeabilidades, kv/kh 1 y 0.1 adimensional

La distancia inicial entre el fondo del intervalo abierto y el contacto es ho − b: 24 m para la apertura de 6 m y 12 m para la de 18 m. En las ecuaciones usamos ho = 30 m, no el espesor total de 50 m.

1. Cargar los datos

Descargar el dataset del ejemplo

El CSV contiene cuatro filas, una por combinación de b_m y kv_kh. Las propiedades comunes se repiten para conservar todas las entradas en un solo archivo.

Guárdalo junto a tu notebook y ejecuta los fragmentos en orden. Necesitamos NumPy, pandas y Matplotlib; puedes instalarlos con pip install numpy pandas matplotlib.

Ver código
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

datos = pd.read_csv("datos_conificacion.csv")
datos[["caso", "b_m", "kv_kh"]]
caso b_m kv_kh
0 1 6 1.0
1 2 18 1.0
2 3 6 0.1
3 4 18 0.1

2. Definir las propiedades y el radio de drenaje

Aproximamos el área de drenaje mediante un círculo:

\[ r_e=\sqrt{\frac{A}{\pi}} \]

Usamos 1 acre = 4046.856 m². Como las propiedades comunes son iguales en las cuatro filas, las tomamos de la primera.

Ver código
base = datos.iloc[0]
ho = base["ho_m"]
kh = base["kh_md"]
kro = base["kro"]
Bo = base["Bo"]
mu_o = base["mu_o_cp"]
rho_o = base["rho_o_kg_m3"]
rho_w = base["rho_w_kg_m3"]

area = base["area_acres"] * 4046.856
re = np.sqrt(area / np.pi)
print(f"Radio de drenaje: {re:.2f} m")
Radio de drenaje: 321.02 m

Obtenemos un radio de aproximadamente 321.02 m.

3. Calcular la penetración y el radio adimensional

La penetración es la fracción de la columna de aceite abierta a producción:

\[ b_D=\frac{b}{h_o} \]

La anisotropía entra mediante el radio adimensional:

\[ r_{De}=\frac{r_e}{h_o}\sqrt{\frac{k_v}{k_h}} \]

Aquí \(k_h\) corresponde a la permeabilidad radial \(k_r\) de la formulación del libro, suponiendo isotropía en el plano horizontal.

Ver código
datos["b_D"] = datos["b_m"] / ho
datos["r_De"] = re / ho * np.sqrt(datos["kv_kh"])
datos[["b_m", "kv_kh", "b_D", "r_De"]].round(3)
b_m kv_kh b_D r_De
0 6 1.0 0.2 10.701
1 18 1.0 0.6 10.701
2 6 0.1 0.2 3.384
3 18 0.1 0.6 3.384

Las penetraciones son 0.2 y 0.6. El radio adimensional es aproximadamente 10.701 para kv/kh = 1 y 3.384 para kv/kh = 0.1.

Rango de la correlación

El capítulo indica 5 ≤ rDe ≤ 80 y 0.1 ≤ bD ≤ 0.75 para los modelos con los que se obtuvo la función. Las dos penetraciones están dentro del rango, pero el caso kv/kh = 0.1 del propio ejercicio tiene rDe ≈ 3.384. Lo calcularemos como extrapolación, señalada en la tabla y en las gráficas.

4. Calcular el caudal crítico

La función geométrica se expresa como:

\[ \Omega(r_{De},b_D)=\frac{A(b_D)}{B(b_D)+C(b_D)\ln(r_{De})} \]

con:

\[ A(b_D)=0.993+\frac{0.00119}{0.769-b_D} \]

\[ B(b_D)=\frac{1}{0.302-0.053b_D-0.336b_D^2} \]

\[ C(b_D)=1.459\exp\left[0.803b_D^2\ln\left(5.664b_D^{2.85}+9\right)\right] \]

En Python basta una función corta. np.log representa el logaritmo natural.

Ver código
def omega(b_D, r_De):
    A = 0.993 + 0.00119 / (0.769 - b_D)
    B = 1 / (0.302 - 0.053 * b_D - 0.336 * b_D**2)
    C = 1.459 * np.exp(0.803 * b_D**2 * np.log(5.664 * b_D**2.85 + 9))
    return A / (B + C * np.log(r_De))

El caudal crítico se obtiene mediante:

\[ q_{o,\mathrm{crit}}= 5.256\times10^{-6}h_o^2(\rho_w-\rho_o) \frac{k_h k_{ro}}{B_o\mu_o}\,\Omega(r_{De},b_D) \]

Con ho en m, densidades en kg/m³, kh en mD, μo en cP y Bo en m³/m³, el resultado es m³/d de aceite a condiciones de superficie. kro es la permeabilidad relativa al aceite a la saturación inicial de agua, por lo que \(k_h k_{ro}\) representa la permeabilidad efectiva al aceite usada en este ejemplo.

Ver código
factor = 5.256e-6 * ho**2 * (rho_w - rho_o) * kh * kro / (Bo * mu_o)
datos["Omega"] = omega(datos["b_D"], datos["r_De"])
datos["qcrit_m3_d"] = factor * datos["Omega"]

en_rango = datos["r_De"].between(5, 80) & datos["b_D"].between(0.1, 0.75)
datos["Uso"] = np.where(en_rango, "Dentro del rango", "Extrapolación")
datos[["b_m", "kv_kh", "b_D", "r_De", "qcrit_m3_d", "Uso"]].round(2)
b_m kv_kh b_D r_De qcrit_m3_d Uso
0 6 1.0 0.2 10.70 28.98 Dentro del rango
1 18 1.0 0.6 10.70 15.78 Dentro del rango
2 6 0.1 0.2 3.38 38.47 Extrapolación
3 18 0.1 0.6 3.38 20.88 Extrapolación

Redondeando a una cifra decimal, los cuatro caudales son:

Intervalo abierto, b (m) kv/kh Caudal crítico (m³/d) Uso de la correlación
6 1.0 29.0 Dentro del rango
18 1.0 15.8 Dentro del rango
6 0.1 38.5 Extrapolación
18 0.1 20.9 Extrapolación

Estos valores coinciden, al redondeo mostrado, con los del ejercicio 12.6. Conservamos la precisión completa durante el cálculo y redondeamos únicamente al presentar los resultados.

🛒
Propiedades De Los Fluidos Del Yacimiento

Disponible en Mercado Libre

Ver oferta →

5. Comparar los cuatro casos

Una tabla dinámica permite construir un gráfico de barras con pocas líneas. El símbolo (*) identifica la extrapolación.

Ver código
tabla = datos.pivot(index="b_m", columns="kv_kh", values="qcrit_m3_d")
tabla = tabla[[1.0, 0.1]]
tabla.columns = ["kv/kh = 1", "kv/kh = 0.1 (*)"]
tabla.plot.bar(rot=0, figsize=(8, 5))
plt.xlabel("Longitud del intervalo abierto, b (m)")
plt.ylabel("Caudal crítico de aceite (m³/d, superficie)")
plt.legend(title="")
plt.tight_layout()
plt.show()
Figura 1: Caudal crítico para aperturas de 6 y 18 m. (*) El caso kv/kh = 0.1 extrapola la correlación a rDe < 5.

Al aumentar la apertura de 6 a 18 m, el fondo del intervalo productor queda más cerca del agua y el caudal crítico disminuye. Un intervalo abierto más largo no implica un mayor caudal libre de agua por conificación.

La menor permeabilidad vertical produce aquí un caudal crítico calculado mayor. Esta tendencia es consistente con una menor facilidad de flujo vertical; los valores para kv/kh = 0.1 mantienen la limitación de extrapolación indicada.

6. Variar la penetración

Ahora mantenemos las propiedades del ejemplo y variamos bD de 0.1 a 0.75, equivalente a aperturas de 3 a 22.5 m. Esta sensibilidad amplía los cuatro casos iniciales.

Reutilizamos la misma función y representamos cada anisotropía con una línea. La línea discontinua corresponde al radio adimensional fuera del rango.

Ver código
b_D = np.linspace(0.1, 0.75, 100)
plt.figure(figsize=(8, 5))
for relacion, estilo in [(1.0, "-"), (0.1, "--")]:
    r_De = re / ho * np.sqrt(relacion)
    qcrit = factor * omega(b_D, r_De)
    plt.plot(b_D, qcrit, estilo, label=f"kv/kh = {relacion:g}")
plt.xlabel("Penetración, bD = b/ho")
plt.ylabel("Caudal crítico de aceite (m³/d, superficie)")
plt.legend()
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
Figura 2: Efecto de la penetración sobre el caudal crítico. La línea discontinua es una extrapolación en rDe; ambas curvas respetan el rango de bD.

¿Qué aprendemos del ejemplo?

La posición del intervalo abierto respecto al contacto y la relación entre permeabilidad vertical y horizontal influyen en el caudal crítico. Para esta geometría, abrir una mayor fracción de la columna de aceite reduce el margen frente a la llegada de agua por conificación.

El modelo considera un pozo vertical parcialmente penetrante, abierto desde el techo de una formación homogénea con anisotropía uniforme, sobre agua de fondo. Usa un cono estabilizado y desprecia efectos capilares y de compresibilidad en su formulación. No representa barreras internas ni canalización por fracturas.

El caudal crítico es una estimación bajo esos supuestos, no una garantía de producción sin agua. El contacto puede moverse y también puede existir agua producida por otros mecanismos. La porosidad, viscosidad del agua y krw no intervienen en esta ecuación de caudal crítico; sí pueden intervenir al estudiar el tiempo de llegada y la evolución posterior del corte de agua.

Referencia

Chierici, G. L. (1995). Principles of Petroleum Reservoir Engineering, volumen 2. Springer. Capítulo 12, sección 12.6.1: Calculation of the Critical Flow Rate for Water Coning, páginas impresas 77–81; ecuaciones 12.45c, 12.48a–d y 12.49. Ejercicio 12.6, páginas impresas 118–119.