Códigos MATLAB de Buckley–Leverett: Apéndices A–D del libro de Wu (2016)

Yacimientos
Programación
MATLAB
Explicación y descarga de los códigos MATLAB de los Apéndices A, B, C y D del libro Multiphase Fluid Flow in Porous and Fractured Reservoirs de Yu-Shu Wu (2016), aplicados a la ecuación de Buckley–Leverett.
Author

Rigoberto Chandomi

Published

August 13, 2026

Introducción

En este post (y en el video que lo acompaña) revisamos los códigos en MATLAB que aparecen en los apéndices A, B, C y D del libro:

Wu, Y.S. (2016). Multiphase Fluid Flow in Porous and Fractured Reservoirs. Elsevier / Gulf Professional Publishing.

Estos apéndices resuelven, con distintas variantes, la clásica ecuación de Buckley–Leverett de desplazamiento inmiscible en medios porosos, usando el método gráfico de Welge para encontrar la saturación de frente y el balance de fluidos desplazados.

{{< https://youtu.be/J2gG8doLKNo?si=hwXyY7SzBMVEmT_w >}}

Todo el código fuente, junto con el PDF del apéndice teórico, está disponible en mi repositorio de GitHub:

🔗 Codigos - Multiphase fluid flow in porous and fractured reservoirs

Resumen de los cuatro apéndices

Apéndice Tema Sistema / Física Curvas kr
A Método gráfico de Welge Sistema lineal, desplazamiento agua–aceite Brooks–Corey
B Método gráfico de Welge Sistema radial (pozo inyector), agua desplazando aceite Brooks–Corey
C Buckley–Leverett con fluido no-Newtoniano Fluido Power-law desplazando a un fluido Newtoniano Brooks–Corey
D Buckley–Leverett con flujo no-Darciano Ecuación de Forchheimer (flujo no-Darciano) Brooks–Corey

Apéndice A – Método gráfico de Welge (sistema lineal)

Resuelve la solución analítica de Buckley–Leverett en un sistema lineal 1D, calculando:

  • Permeabilidades relativas de agua y aceite (kr_w, kr_o) con exponentes tipo Corey.
  • La función de flujo fraccional f_w(S) y su derivada df_w(S), incluyendo el término gravitacional (theta, dlt_rho, g).
  • La saturación de frente de avance Swf mediante la condición de tangencia de Welge.
  • El perfil de saturación de agua a distintos tiempos de inyección.

Parámetros clave: L, A, phi, k, muo, muw, Sor, Swc, no, nw, qt.

Apéndice B – Método gráfico de Welge (sistema radial)

Misma filosofía que el Apéndice A, pero adaptada a un sistema radial alrededor de un pozo inyector:

  • Se define el radio del pozo r y el radio del yacimiento R, además del espesor h.
  • La función de flujo fraccional aquí es más simple (f_w = 1/(1+mob)) porque no incluye el término gravitacional explícito del caso lineal.
  • Se resuelve la posición del frente bf en coordenadas radiales, útil para estimar el avance del banco de agua alrededor de un pozo inyector.

Apéndice C – Buckley–Leverett con fluido no-Newtoniano (Power-law)

Extiende el problema clásico a un caso donde el fluido desplazante es no-Newtoniano tipo ley de potencia (power-law):

  • Se define una viscosidad efectiva mu_ef(S) y una viscosidad aparente mu_nn(S, p_x) en función del índice de comportamiento n y el coeficiente H.
  • El gradiente de presión px se obtiene resolviendo, saturación por saturación, la ecuación no lineal de balance de velocidades (fzero) entre la fase Newtoniana y la no-Newtoniana.
  • Es un buen ejemplo de cómo MATLAB resuelve ecuaciones implícitas dentro de un lazo for, algo muy común en simulación de yacimientos “casera”.

Apéndice D – Buckley–Leverett con flujo no-Darciano (Forchheimer)

Aquí el desplazamiento ya no sigue la ley de Darcy, sino la ecuación de Forchheimer, que agrega un término de velocidad al cuadrado para capturar efectos inerciales (flujo no-Darciano):

  • Se definen coeficientes beta (b_w, b_n) que dependen de la permeabilidad relativa y la porosidad efectiva de cada fase.
  • Las velocidades v_w y v_n se obtienen resolviendo la forma cuadrática de Forchheimer.
  • Igual que en el Apéndice C, el gradiente de presión se resuelve por saturación con fzero.

¿Por qué revisar estos códigos?

Aunque el libro de Wu (2016) está pensado como texto de posgrado, estos apéndices son un excelente punto de partida si quieres:

  • Programar tus propias soluciones analíticas de Buckley–Leverett en Python o R (como hacemos normalmente en este blog).
  • Entender cómo se implementa el método de Welge paso a paso, sin depender de un simulador comercial.
  • Ver ejemplos reales de cómo MATLAB resuelve ecuaciones no lineales dentro de bucles, algo trasladable a Python (scipy.optimize.brentq) o R (uniroot).

Descarga

Los cuatro scripts (Apendice A.m a Apendice D.m) están en el repositorio de GitHub enlazado arriba. Si te gustaría verlos migrados a Python/R con gráficos interactivos en Plotly/ggplot2, dímelo en los comentarios del video — puede ser el siguiente post de esta serie.

🛒
Propiedades De Los Fluidos Del Yacimiento

Disponible en Mercado Libre

Ver oferta →