Balance de Materia: Ajuste de Np y Verificación de Índices de Empuje
Parte 3: Simulación de la producción acumulada mediante regresión no lineal y validación del mecanismo de empuje
Yacimientos
MBE
Python
R
Tercera parte del balance de materia para yacimientos de aceite. Simulamos Np a partir de un valor de N obtenido por Havlena-Odeh o Campbell, lo ajustamos con regresión no lineal (Levenberg-Marquardt) para mejorar el ajuste al historial de producción, y verificamos el mecanismo de empuje dominante con los índices de empuje.
En la Parte 2 usamos el método de Havlena-Odeh para estimar el OOIP (N) a partir de la pendiente de F vs Et. Ese valor de N es un buen punto de partida, pero no siempre reproduce con precisión la producción acumulada histórica (\(N_p\)).
En esta tercera parte damos un paso adicional:
Simular \(N_p\) con el N obtenido previamente (ej. de Havlena-Odeh o Campbell)
Comparar contra el \(N_p\) real y detectar desviaciones
Ajustar N con regresión no lineal (Levenberg-Marquardt) para minimizar el error
Recalcular los índices de empuje con el N ajustado y verificar el mecanismo dominante
¿Por qué ajustar Np?
El gráfico de Havlena-Odeh es sensible a la dispersión de los primeros puntos y a errores de medición. Simular Np con el N estimado y compararlo contra el histórico real es una prueba de consistencia adicional — si Np calculado se aleja del observado, especialmente en etapas avanzadas de depleción, el N asumido probablemente necesita ajuste.
La Ecuación de Np
Para un yacimiento sin acuífero (\(W_e = 0\)) y sin casquete de gas (\(m = 0\)), despejando \(N_p\) de la MBE:
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltdf = pd.read_csv("MB_ex.csv", parse_dates=["Date"], dayfirst=True)# === PROPIEDADES DE REFERENCIA (primer registro) ===Boi = df["Bo"].iloc[0]Rsi = df["Rs"].iloc[0]Pi = df["Pavg"].iloc[0]# === PARÁMETROS DE ROCA Y AGUA ===Swc =0.15cf =3.5e-6cw =7.0e-6print(f"Registros: {len(df)}")
Registros: 31
Ver código
print(f"Boi = {Boi}, Rsi = {Rsi}, Pi = {Pi} psia")
Boi = 1.376, Rsi = 0.8, Pi = 5200.0 psia
Ver código
print(f"Rango de fechas: {df['Date'].min().date()} a {df['Date'].max().date()}")
Rango de fechas: 2003-01-01 a 2010-06-23
Ver código
library(dplyr)
Warning: package 'dplyr' was built under R version 4.3.3
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
Figure 2: Np observado vs Np simulado con N = 250 MMSTB.
Interpretación
Si el ajuste inicial se separa del histórico real — típicamente hacia el final, cuando el yacimiento ya ha depletado más presión — el N usado necesita corrección. Un ajuste visual no es suficiente para cuantificar el error; el siguiente paso usa regresión no lineal.
Paso 2 — Ajuste no lineal de N (Levenberg-Marquardt)
Usamos el algoritmo de Levenberg-Marquardt para encontrar el valor de N que minimiza la diferencia entre \(N_p\) observado y calculado:
Figure 6: Índices de empuje vs tiempo, graficados como área apilada entre 0 y 1.
Interpretación de los Resultados
¿Qué significan los índices?
Interpretación de los drive indices.
Índice
Mecanismo
Típico cuando…
DDI alto (>0.8)
Expansión de aceite y gas liberado
Yacimiento volumétrico, sin soporte de presión
CDI significativo (>0.1)
Compactación de roca y expansión de agua connata
Yacimientos profundos, alta compresibilidad
WDI alto (>0.5)
Invasión de agua del acuífero
Acuífero activo
SDI alto (>0.3)
Expansión del casquete de gas
Casquete de gas significativo
En este ejemplo, DDI domina durante todo el historial de producción (~0.90-0.93), lo que confirma que el yacimiento produce principalmente por expansión del aceite y del gas liberado (depletion drive). El CDI contribuye entre un 7-10%, algo mayor que en el caso volumétrico puro de la Parte 2, consistente con la mayor caída de presión observada en este ejemplo.
Verificación
La suma DDI + CDI debe ser ≈ 1.0 en cada punto del historial. El área apilada facilita esta verificación visualmente: si la línea superior se aleja de 1.0, hay un error en el N ajustado o en el modelo asumido (sin acuífero, sin casquete de gas).
Resumen
Resultado
Valor
N inicial (Havlena-Odeh / Campbell)
250 MMSTB
N ajustado por regresión no lineal
Valor obtenido por Levenberg-Marquardt
Mecanismo dominante
Depletion drive (DDI ≈ 0.90-0.93)
Contribución de compactación
CDI ≈ 0.07-0.10
Modelo validado
Ajuste consistente de Np y DDI+CDI ≈ 1.0
Referencias
Havlena, D. & Odeh, A.S. (1963). The Material Balance as an Equation of a Straight Line. JPT, 15(8).
Ahmed, T. (2019). Reservoir Engineering Handbook, 5th ed. Gulf Professional Publishing. Cap. 12-13.
Sanni, M. (2019). Petroleum Engineering: Principles, Calculations, and Workflows. Wiley/AGU.
Dake, L.P. (1978). Fundamentals of Reservoir Engineering. Elsevier. Cap. 3.