100% encontró este documento útil (1 voto)
563 vistas296 páginas

Tesis

xxxxxxxxxxxxxxx

Cargado por

MaribelMamaniD
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
563 vistas296 páginas

Tesis

xxxxxxxxxxxxxxx

Cargado por

MaribelMamaniD
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 296

Portada

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO

FACULTAD DE INGENIERÍA

Potencial de las hojas de


cálculo electrónicas y su
aplicación a la ingeniería
petrolera

TESIS
Que para obtener el título de

Ingeniero Petrolero

PRESENTA

Humberto García Guerrero

DIRECTOR DE TESIS

Dr. Néstor Martínez Romero

Ciudad Universitaria, Cd. Mx., 2017


AGRADECIMIENTOS
Agradecimientos

A mis padres, Humberto García Cruz y Francisca Guerrero García, por su incondicional apoyo y
ejemplo de vida, gracias por todo lo que me han dado, sin su trabajo y esfuerzo esto no sería
posible.

A mis hermanas Miriam Citlalli y Diana Isabel, todo es mejor si tienes unas inigualables hermanas
con quien compartir. Gracias por su cariño y apoyo.

A Lupita Aguilar, mi corazón, por estar conmigo y siempre brindarme tu apoyo incondicional en
momentos de alegría y tristeza, nunca habrá alguien como tú.

A mi querida UNAM y en especial a mi Facultad de Ingeniería, lo mejor de la vida.

A mi Director de tesis, Dr Néstor Martínez gracias por su apoyo y paciencia y todos los
conocimientos y sabios consejos compartidos a lo largo de muchas clases.

Al Ing. Erick Gallardo por apoyarme y tenerme mucha paciencia, Ing. Oswaldo Espinola, Ing. Juan
Carlos Sabido y al Dr. Iván Guerrero Sarabia, gracias por su apoyo en este trabajo.

A mis viejos amigos y amigas Ossiel, Oliver, Daff, Liz, Hugo, Pamela, Gabriela Ávila, Kenia,
Gabriela Bravo, Dan, Lore, Omar, Carlos, Ale, Rosa y a los muchos nuevos, Kareli, Edgar, Mike,
Fabiola, Fabián, Tere, Piedra y los muchos más que me faltan… Gracias por dejarme conocerlos
y compartir muy buenos momentos con ustedes.

3
CONTENIDO

Contenido
CONTENIDO
Portada ........................................................................................................................................... 1

Agradecimientos ........................................................................................................................... 3

Contenido........................................................................................................................................ I

Resumen ...................................................................................................................................... VII

Abstract ....................................................................................................................................... VIII

Introducción.................................................................................................................................. IX

Capítulo 1 Antecedentes .............................................................................................................. 2

1.1 Origen de las hojas de cálculo electrónicas .......................................................................... 2


1.1.1 La primera hoja de cálculo .............................................................................................. 2
1.2 Breve historia de las hojas de cálculo electrónicas ............................................................... 3
1.3 Versiones de Microsoft Excel ................................................................................................ 4
1.4 Visual Basic para Aplicaciones en la ingeniería petrolera ..................................................... 6

Capítulo 2 Filosofía de uso de las hojas de cálculo electrónicas ............................................ 8

2.1 Introducción a Visual Basic para Aplicaciones ...................................................................... 8


2.1.1 ¿Qué es el lenguaje VBA? .............................................................................................. 8
2.1.2 Consideraciones importantes .......................................................................................... 9
2.2 La pestaña desarrollador ..................................................................................................... 10
2.3 El entorno de desarrollo VBE .............................................................................................. 11
2.3.1 ¿Qué es el editor de Visual Basic, VBE? ...................................................................... 11
2.3.2 Cómo trabajar con el explorador de proyectos ............................................................. 12
Agregar un nuevo módulo. ................................................................................................ 12
Eliminar un módulo ............................................................................................................ 13
Importar y exportar objetos ................................................................................................ 14
Trabajar con ventanas de código ...................................................................................... 14
Personalizar el entorno VBE ............................................................................................. 16
2.4 Procedimientos en VBA ....................................................................................................... 17
2.4.1 Procedimiento Sub ........................................................................................................ 18
Estructura de un procedimiento Sub ................................................................................. 18
Ejecutar un procedimiento Sub ......................................................................................... 18
2.4.2 Procedimiento Function ................................................................................................ 19
Estructura de un procedimiento Function .......................................................................... 19
Ejecutar un procedimiento Function .................................................................................. 19
2.5 ¿Qué es una macro? ........................................................................................................... 19
2.5.1 Usar el grabador de macros .......................................................................................... 20
2.5.2 Ejecutar una macro ....................................................................................................... 22
2.5.3 Uso de referencias relativas y absolutas ...................................................................... 23

I
CONTENIDO

2.5.4 Eliminar una macro ....................................................................................................... 25


2.5.5 Examinar una macro ..................................................................................................... 25
2.5.6 Modificar una macro...................................................................................................... 25
2.5.7 Guardar libros que contienen macros ........................................................................... 26
Guardar una macro en el libro de macros personal .......................................................... 26
2.5.8 Las macros y la seguridad ............................................................................................ 27
2.6 Programación en VBA ......................................................................................................... 28
2.6.1 Variables y constantes .................................................................................................. 28
¿Qué es una variable? ...................................................................................................... 28
Nombres de variables ........................................................................................................ 29
Tipos de datos el VBA ....................................................................................................... 29
Declarar variables .............................................................................................................. 29
Alcance de variables entre módulos .................................................................................. 30
Constantes ........................................................................................................................ 30
Cadenas de caracteres ..................................................................................................... 31
Fechas ............................................................................................................................... 31
¿Cómo funciona el signo igual? ........................................................................................ 31
2.6.2 Comentarios .................................................................................................................. 32
2.6.3 Operadores ................................................................................................................... 33
Aritméticos ......................................................................................................................... 33
Lógicos .............................................................................................................................. 33
Comparación ..................................................................................................................... 33
Concatenación................................................................................................................... 34
Prioridad de las operaciones ............................................................................................. 34
2.6.4 Arreglos ......................................................................................................................... 34
Arreglos fijos .................................................................................................................. 34
Arreglos dinámicos ........................................................................................................ 35
2.6.5 Estructuras de decisión ................................................................................................. 35
If - Then ............................................................................................................................. 35
Select Case ....................................................................................................................... 36
GoTo.................................................................................................................................. 36
2.6.6 Estructuras de ciclo ....................................................................................................... 37
For - Next........................................................................................................................... 37
Do While - Loop ................................................................................................................. 37
Do Loop - While ................................................................................................................. 37
Do Until - Loop................................................................................................................... 38
Do - Loop Until................................................................................................................... 38
2.6.7 Estructuras para controlar objetos ................................................................................ 38
For Each - Next ................................................................................................................. 38
With - End With.................................................................................................................. 39
2.6.8 Consideraciones al escribir código en VBA .................................................................. 39
Colocar sangrías ............................................................................................................... 39
Continuación de la instrucción ........................................................................................... 40
2.7 Modelo de objetos en Excel ................................................................................................. 40
2.7.1 ¿Qué son los objetos en Excel? ................................................................................... 40
2.7.2 ¿Cómo funcionan los objetos?...................................................................................... 41
2.7.3 Colecciones................................................................................................................... 41
2.7.4 Propiedades .................................................................................................................. 41
2.7.5 Métodos ........................................................................................................................ 42
2.7.6 Eventos ......................................................................................................................... 43

II
CONTENIDO

2.7.7 Buscador de objetos, ayuda y listado automático ......................................................... 44


2.8 Comunicación con el usuario ............................................................................................... 45
2.8.1 Cuadro de mensaje MsgBox ......................................................................................... 45
2.8.2 Cuadro de mensaje InputBox ........................................................................................ 47
2.8.3 GetOpenFilename ......................................................................................................... 48
2.8.4 GetSaveAsFilename ..................................................................................................... 49
2.9 Trabajar con formularios ...................................................................................................... 49
2.9.1 Crear un formulario ....................................................................................................... 50
2.9.2 Ejecutar un formulario ................................................................................................... 50
2.9.3 Controles ....................................................................................................................... 51
2.9.4 Personalizar formulario y controles ............................................................................... 52
Cambiar propiedades de controles y formularios .............................................................. 52
2.9.5 Uso de los controles...................................................................................................... 52
Eventos de controles ......................................................................................................... 52
Control Label ..................................................................................................................... 53
Control CommandButton ................................................................................................... 54
Control TextBox ................................................................................................................. 54
Control ComboBox ............................................................................................................ 54
Control ListBox .................................................................................................................. 54
Control CheckBox.............................................................................................................. 54
Control OptionButton ......................................................................................................... 55
Control ToggleButton ......................................................................................................... 55
Control Frame .................................................................................................................... 56
Control MultiPage .............................................................................................................. 56
Control ScrollBar ............................................................................................................... 56
Control SpinButton ............................................................................................................ 56
Control Image .................................................................................................................... 56
Control RefEdit .................................................................................................................. 57
2.10 Depuración y gestión de errores ........................................................................................ 57
2.11 Personalizar la cinta de opciones ...................................................................................... 59
2.11.1 Modificar la cinta de opciones manualmente .............................................................. 59
2.11.2 Modificar la cinta de opciones automáticamente con XML ......................................... 61
2.12 Crear complementos de Excel ........................................................................................... 66
2.12.1 Trabajar con complementos........................................................................................ 67
2.12.2 Generar complemento ................................................................................................ 67

Capítulo 3 Pronósticos de producción ..................................................................................... 70

3.1 Introducción ......................................................................................................................... 70


3.2 Campos análogos ................................................................................................................ 71
3.3 De tipo volumétrico .............................................................................................................. 71
3.3.1 Cálculo del volumen original de hidrocarburos (N) ....................................................... 72
3.4 Curvas de declinación ......................................................................................................... 74
3.4.1 Análisis de curvas de declinación ................................................................................. 75
Declinación exponencial .................................................................................................... 77
Declinación armónica ........................................................................................................ 78
Declinación hiperbólica...................................................................................................... 78
Identificación de modelos .................................................................................................. 79
Determinación de parámetros de cada modelo ................................................................. 80
3.4.2 Ventajas y desventajas ................................................................................................. 82

III
CONTENIDO

3.5 Balance de materia .............................................................................................................. 83


3.5.1 Ecuación general de balance de materia ...................................................................... 83
Consideraciones de la ecuación de balance de materia ................................................... 86
3.5.2 Ecuación general de balance de materia como una línea recta ................................... 87
3.5.3 Solución a la ecuación de balance de materia como una línea recta ........................... 88
Caso 1. Yacimiento volumétrico bajosaturado .................................................................. 88
Caso 2. Yacimiento volumétrico saturado ......................................................................... 90
Caso 3. Yacimiento con empuje de casquete de gas ....................................................... 90
Caso 4. Yacimiento con empuje por agua ......................................................................... 92
Modelo de acuífero con geometría definida .................................................................. 92
Modelo de Schilthuis de flujo continuo .......................................................................... 94
Modelo de van Everdingen y Hurst................................................................................ 94
3.5.4 Pronóstico de producción con la Ecuación de Balance de Materia .............................. 96
Fase 1. Predicción del comportamiento del yacimiento .................................................... 96
Relación gas aceite producido ...................................................................................... 97
Ecuaciones de saturación ............................................................................................. 98
Método de Tracy .......................................................................................................... 100
Método de Muskat ....................................................................................................... 102
Método de Tarner ........................................................................................................ 104
Fase 2. Relación del comportamiento del yacimiento con el tiempo ............................... 105
3.5.5 Ventajas y desventajas ............................................................................................... 107
3.6 Simulación numérica de yacimientos ................................................................................ 107
3.6.1 Clasificación de los simuladores de yacimientos ........................................................ 108
3.6.2 Proceso de simulación numérica de yacimientos ....................................................... 108
Modelo conceptual .......................................................................................................... 109
Formulación matemática del problema ........................................................................... 110
Conservación de la masa ............................................................................................ 110
Ley de Darcy ............................................................................................................... 113
Ecuación de estado ..................................................................................................... 113
Ecuación de flujo en coordenadas cartesianas ........................................................... 114
Ecuación de flujo para un fluido ligeramente compresible .......................................... 114
Condiciones iniciales y de frontera. ............................................................................. 116
Solución numérica del problema ..................................................................................... 117
Aproximación de la primera derivada .......................................................................... 118
Aproximación de la segunda derivada ........................................................................ 118
Discretización .............................................................................................................. 119
Aproximación de la ecuación de flujo por medio de diferencias finitas ....................... 120
Aproximación de las condiciones iniciales y de frontera ............................................. 123
Esquemas de solución en diferencias finitas ............................................................... 125
Modelo computacional..................................................................................................... 130
3.6.3 Ventajas y desventajas ............................................................................................... 130

Capítulo 4 Potencial de producción de pozos petroleros ..................................................... 132

4.1 Introducción ....................................................................................................................... 132


4.2 Sistema integral de producción ......................................................................................... 132
4.3 Comportamiento de flujo en el yacimiento ......................................................................... 134
4.3.1 Ecuación de Darcy ...................................................................................................... 134
4.3.2 Ecuación de afluencia ................................................................................................. 135
4.3.3 Índice de productividad ............................................................................................... 136

IV
CONTENIDO

4.3.4 IP en yacimientos bajosaturados ................................................................................ 137


4.3.5 IPR en yacimientos saturados .................................................................................... 138
Método de Vogel ............................................................................................................. 138
Método de Standing para EF≠1 ....................................................................................... 139
Método de Harrison ......................................................................................................... 140
Método de Fetkovich ....................................................................................................... 140
4.3.6 Curvas de IPR futuras ................................................................................................. 141
Método de Fetkovich ....................................................................................................... 142
Método de Eickmier ......................................................................................................... 143
Método de Standing ........................................................................................................ 143
Método de Cuoto ............................................................................................................. 144
4.3.7 Curvas generalizadas de IPR ..................................................................................... 144
4.4 Comportamiento de flujo en tuberías................................................................................. 145
4.4.1 Fundamentos de flujo a través de tuberías ................................................................. 145
Ecuación general de energía ........................................................................................... 146
Pérdidas de presión por fricción ...................................................................................... 147
Ecuación de Darcy ...................................................................................................... 147
Ecuación de Fanning ................................................................................................... 148
Factor de fricción ......................................................................................................... 148
4.4.2 Flujo de una sola fase ................................................................................................. 150
Flujo de liquido ................................................................................................................ 150
Flujo de gas ..................................................................................................................... 152
4.4.3 Flujo multifásico en tuberías ....................................................................................... 154
Conceptos fundamentales ............................................................................................... 155
Patrones de flujo .......................................................................................................... 155
Colgamiento ................................................................................................................ 155
Velocidades superficiales ............................................................................................ 157
Velocidad real .............................................................................................................. 157
Densidad de la mezcla de fluidos ................................................................................ 157
Gasto de masa ............................................................................................................ 159
Viscosidad de la mezcla .............................................................................................. 159
Tensión superficial de la mezcla de líquidos ............................................................... 160
Densidad de la mezcla de líquidos .............................................................................. 160
4.4.4 Flujo multifásico en tuberías verticales ....................................................................... 160
4.4.5 Flujo multifásico en tuberías horizontales ................................................................... 161
4.4.6 Flujo multifásico en tuberías inclinadas ...................................................................... 161
4.4.7 Correlación de Beggs y Brill para el cálculo de caídas de presión ............................. 161
4.4.8 Cálculo de perfiles de presión a lo largo de una tubería ............................................. 166
4.4.9 Flujo a través de estranguladores ............................................................................... 166
Correlaciones de flujo a través de estranguladores .................................................... 169
4.5 Metodología del análisis nodal .......................................................................................... 170
4.5.1 Elección del nodo solución.......................................................................................... 172
4.5.2 Fondo del pozo como nodo solución .......................................................................... 172
4.5.3 Cabeza del pozo como nodo solución ........................................................................ 173
4.5.4 Separador como nodo solución .................................................................................. 175
4.5.5 Yacimiento como nodo solución ................................................................................. 176
4.5.6 Estrangulador como nodo solución ............................................................................. 176

Capítulo 5 Aplicación de las hojas de cálculo electrónicas a la ingeniería petrolera ........ 180

V
CONTENIDO

5.1 Introducción ....................................................................................................................... 180


5.2 Descripción de la pestaña Ingeniería Petrolera ................................................................. 180
5.3 Curvas de declinación ....................................................................................................... 181
5.3.1 Ejemplos de aplicación de curvas de declinación ....................................................... 183
Ejemplo 1 Declinación exponencial ................................................................................. 183
Ejemplo 2 Declinación armónica ..................................................................................... 185
Ejemplo 3 Declinación hiperbólica ................................................................................... 187
5.4 Balance de materia ............................................................................................................ 188
5.4.1 Ejemplos de aplicación de aplicación de la EBM ........................................................ 190
Ejemplo 1 Método de Tracy ............................................................................................. 190
Ejemplo 2 Método de Muskat .......................................................................................... 191
Ejemplo 3 Método de Tarner ........................................................................................... 192
5.5 Simulación numérica ......................................................................................................... 193
5.5.1 Ejemplo de aplicación de la simulación numérica de yacimientos: ............................. 195
Ejemplo 1 Comportamiento de un pozo productor en 1D ............................................... 195
Ejemplo 2 Comportamiento de un pozo productor en 2D ............................................... 197
Ejemplo 3 Comportamiento de cuatro pozos productores en 2D .................................... 199
Potencial de producción de pozos petroleros .......................................................................... 201
5.5.2 Ejemplos de aplicación de análisis nodal .................................................................... 202
Ejemplo 1 Separador como nodo solución ...................................................................... 203
Ejemplo 2 Cabeza de pozo como nodo solución ............................................................ 204
Ejemplo 3 Fondo de pozo como nodo solución ............................................................... 205
Ejemplo 4 Yacimiento como nodo solución ..................................................................... 206

Conclusiones y recomendaciones .......................................................................................... 207

Referencias ................................................................................................................................ 208

Nomenclatura ............................................................................................................................ 212

Apéndice A................................................................................................................................. 218

Apéndice B................................................................................................................................. 234

Apéndice C................................................................................................................................. 243

Apéndice D................................................................................................................................. 263

VI
RESUMEN

Resumen
RESUMEN
Este trabajo representa un material de apoyo para los alumnos de ingeniería petrolera. El trabajo
está enfocado a mostrar una alternativa de solución para un problema común durante la carrera,
que es, el programar métodos y procedimientos que representan fenómenos físicos que ocurren
en el yacimiento e instalaciones que se usan en la industria petrolera y que, de no ser
programados, serían complicados de resolver y por lo mismo llevarían mucho tiempo en
solucionarse.

La alternativa propuesta es usar Visual Basic para Aplicaciones (VBA), un complemento que
Excel® tiene integrado y permite aprovechar toda la funcionalidad de las hojas de cálculo junto
con VBA que permite programar procedimientos como se haría en otros lenguajes de
programación.

Se presentan conceptos básicos de programación en VBA que es un lenguaje de programación


muy similar a Visual Basic 6.0® junto con conceptos de problemas comunes en ingeniería petrolera
como son el cálculo de pronósticos de producción y el potencial de producción de pozos petroleros
que pueden ser solucionados mediante la programación en hojas de cálculo.

VII
ABSTRACT

Abstract
ABSTRACT
This work represents a support material for students in petroleum engineering. The work is aimed
to show an alternative solution to a common problem in petroleum engineering, that is program
methods and procedures that represent physical phenomena occurring in reservoirs and facilities
used in petroleum engineering and, if not program them, would very complicated to solve and
therefore would take a long time to resolve.

The alternative approach is to use Visual Basic for Applications (VBA), a supplement that has
integrated Excel® and allows full Functionality of spreadsheets with VBA allows you to program
procedures as you would in other programming languages.

Basic programming concepts are presented in VBA that is a language very similar to Visual Basic
6.0® with common problems in petroleum engineering such as calculating production forecasts and
potential production of oil wells that can be solved by programming in spreadsheets.

VIII
INTRODUCCIÓN

Introducción
INTRODUCCIÓN
El presente trabajo tiene como objetivo ser un material de apoyo para los alumnos de ingeniería
petrolera. El trabajo se enfoca en mostrar como varios de los problemas que se ven a lo largo de
la carrera, pueden ser solucionados mediante su programación en hojas de cálculo, porque los
alumnos están muy familiarizados con su ambiente de trabajo en comparación con otros leguajes
de programación.

El capítulo 1 presenta una introducción a lo que son las hojas de cálculo, su origen y evolución.

El capítulo 2 presenta una guía para poder crear y manejar macros en Excel para automatizar
procesos que resuelven problemas de ingeniería.

En el capítulo 3 se presentan conceptos básicos que permiten al usuario crear pronósticos de


producción con métodos volumétricos, curvas de declinación, balance de materia y simulación
numérica de yacimientos, que de no ser programados complicaría su manejo y solución.

En el capítulo 4 se presentan conceptos básicos de comportamiento de afluencia de pozos


petroleros además de conceptos básicos de comportamiento de flujo en tuberías que permiten
conjuntamente evaluar el potencial de producción de los pozos petroleros.

En el capítulo 5 se presentan casos prácticos de los métodos presentados en los dos capítulos
anteriores programados en hojas de cálculo y para demostrar que estos problemas entre muchos
otros pueden ser solucionados en las hojas de cálculo que todos los estudiantes tienen a su
disposición.

Es importante señalar que las hojas de cálculo pueden ser aplicadas a todas las áreas de la
ingeniería petrolera, como las áreas de perforación por ejemplo en el cálculo de trayectorias de
pozos direccionales, diseños de pozo, creación de ventanas operativas etc., en el área de
producción y yacimientos algunos ejemplos son los mostrados en este trabajo.

IX
Capítulo 1

ANTECEDENTES
CAPÍTULO 1 ANTECEDENTES

CAPÍTULO 1 Antecedentes
CAPÍTULO I ANTECEDENTES
1.1 Origen de las hojas de cálculo electrónicas
Los programas computarizados de hojas de cálculo parecen haber sido una de las innovaciones
más fundamentales y permanentes en la práctica contable desde principios de la década de los
80.

En la actualidad se conoce muy poco, sobre su verdadero origen, no sólo entre los usuarios, sino
inclusive en círculos académicos de la contabilidad, las ciencias matemáticas, de la información e
ingenieril. Muchas personas creen que esos programas fueron desarrollados inicialmente por
expertos en sistemas computacionales desde finales de la década de los 70. Cuando en realidad
su desarrollo empezó décadas antes. Economistas y contadores académicos la promovieron
mucho antes de que expertos en sistemas computacionales estuviese interesado en las hojas de
cálculo electrónicas.

El origen de la expresión “spreadsheet” (hoja o planilla de cálculo) es incierta, pero el término


apareció en la primera edición del diccionario de Kohler (diccionario de contabilidad). El hecho de
que este término aparezca en un diccionario, sugiere que no fue su autor y recopilador, Kohler,
quién lo acuñó, lo más probable es que haga referencia al uso previo en la práctica contable.
Quizás provino de un dispositivo que los europeos llamaron “teneduría de libros americana” que
se refiere a una clase de hoja de cálculo que fusiona el diario con las cuentas del mayor, por lo
cual las columnas del último están organizadas en forma paralela (al lado del diario), una al lado
de la otra, todo en la misma hoja, sin embargo, estas hojas aun no eran computarizadas.

Una edición posterior del diccionario de Kohler para contadores, se refiere a la hoja de cálculo
como “una hoja de trabajo que proporciona dos formas de análisis o recapitulación de costos u
otros datos contables”, también define a la hoja de cálculo como “una hoja de trabajo que contiene
un análisis de un grupo de cuentas relacionadas, o de clases de cuentas, por ejemplo, las filas
representan débitos, las columnas créditos; las cantidades, si hay alguna, aparecen en una de las
intersecciones”.

1.1.1 La primera hoja de cálculo


En 1961 apareció el concepto de una hoja de cálculo electrónica en el artículo Budgeting Models
and System Simulation de Richard Mattessich, considerando el origen de la hoja de cálculo.

En 1970 Pardo y Landaumerecen intentaron patentar los algoritmos con los que suponían
funcionarían las hojas de cálculo electrónicas, la patente no fue aceptada, por ser considerada una
invención puramente matemática.

Dan Bricklin es el inventor aceptado de la hoja de cálculo computarizada. Bricklin contó la historia
de un profesor universitario que hizo una tabla de cálculos en un tablero. Cuando el profesor

2
CAPÍTULO 1 ANTECEDENTES

encontró un error, tuvo que borrar y reescribir una gran cantidad de pasos, impulsando a Bricklin
a pensar que podía replicar el proceso en un ordenador, usando el tablero/hoja de cálculo para ver
los resultados de las fórmulas que usaron en el proceso, su idea se convirtió en VisiCalc la primera
hoja de cálculo electrónica y la aplicación que hizo que la computadora se convirtiera en una
herramienta para los negocios y actualmente para muchas industrias, incluidas las ingenierías.

VisiCalc mostrada en la Figura 1.1 fue la primera aplicación de hoja de cálculo computarizada
disponible en el mercado, su demanda se concentraba principalmente con los entusiastas de los
negocios, ya que fue considerada una herramienta seria de negocios, fue así que se vendieron
más de 700,000 copias en tan solo seis años.

VisiCalc soportaba 5 columnas y 20 filas, y se


convirtió en una de las aplicaciones más vendidas
para el Apple II. Las empresas vieron el gran
potencial de las hojas de cálculo y, en muy poco
tiempo, VisiCalc se convirtió en el gran tractor del
Apple II en el mundo empresarial.

Esto ayudo a que las empresas estandarizaran el


uso de la computadora y las hojas de cálculo, pues
les permitía reducir costos, ya que, al calcular
manualmente sus finanzas, donde cambiar un Figura 1.1 Hoja de cálculo VisiCalc.
simple número significaba recalcular de nuevo toda
la hoja; con VisiCalc solo se tenía que cambiar una celda de la hoja electrónica y automáticamente
se recalculaban el resto de datos, optimizando procesos en el ámbito empresarial. Sus inventores
nunca pudieron patentar el programa debido al contexto legal en el que se encontraba Estados
Unidos.

Posteriormente aparecieron otros programas de hojas de cálculo como SuperCalc, Lotus 1-2-3 y
Excel.

1.2 Breve historia de las hojas de cálculo electrónicas


A partir del lanzamiento de VisiCalc numerosas hojas de cálculo han salido al mercado, algunas
de ellas se enlistan en la Tabla 1.1.
Tabla 1.1 Hojas de cálculo.

Aplicación Imagen Aplicación Imagen

VisiCalc Excel 97
(1978) (1997)

SuperCalc Excel 2000


(1980) (2000)

3
CAPÍTULO 1 ANTECEDENTES

Tabla Hojas de cálculo (continuación).

Aplicación Imagen Aplicación Imagen

Multiplan Excel 2002


(1982) (2002)

Lotus 1-2-3 Excel 2003


(1983) (2003)

Excel 2 Excel 2007


(1987) (2007)

Excel 3 Excel 2010


(1990) (2010)

Excel 4 Excel 2013


(1992) (2013)

Excel 5 Excel 2016


(1994) (2016)

Excel 95
(1995)

1.3 Versiones de Microsoft Excel


Microsoft Excel es una aplicación distribuida por Microsoft Office, se caracteriza por ser un software
de hojas de cálculo utilizado en tareas financieras, contables e ingenieriles. Microsoft ha lanzado
diferentes versiones de Excel las cuales son más eficientes e incorporan tareas más
especializadas y complejas.

Algunas de las versiones anteriores se describen a continuación:

• Multiplan
Multiplan fue el primer programa para hojas de cálculo que Microsoft comercializó en 1982, fue
muy popular en los sistemas CP/M, pero en los sistemas MS-DOS perdió popularidad frente
al Lotus 1-2-3.

• Excel 2
La versión original de Excel para Windows se llamó Excel 2 (en vez de 1) de modo que
correspondería a la versión de Macintosh. Excel 2 apareció por primera vez en 1987, actualmente
está en desuso.

4
CAPÍTULO 1 ANTECEDENTES

• Excel 3
Lanzado a finales de 1990, esta versión cuenta con el lenguaje de macros XLM e igual que la
versión anterior ya no es utilizada.

• Excel 4
Esta versión fue lanzada al mercado a principios de 1992, también utiliza el lenguaje de macros
XLM. Es muy poco utilizada.

• Excel 5
Esta versión salió a principios de 1994. Fue la primera versión en usar VBA, aunque también es
compatible con XML.

• Excel 95
Técnicamente conocido como Excel 7 (no hay Excel 6), esta versión fue lanzada en el verano de
1995, tiene algunas mejoras de VBA y es compatible con el lenguaje XML. Rara vez es utilizada.

• Excel 97
Esta versión fue lanzada en enero de 1997 (también conocido como Excel 8), tiene muchas
mejoras y cuenta con una interfaz de programación de macros VBA. Excel 97 también utiliza un
nuevo formato de archivo (que versiones anteriores de Excel no pueden abrir).

• Excel 2000
Esta versión dio un salto al esquema de cuatro dígitos. Excel 2000 (también conocido como Excel
9) hizo su debut en junio de 1999. Incluye solo unas mejoras desde la perspectiva de un
programador.

• Excel 2002
Esta versión (también conocido como Excel 10 o Excel XP) apareció a finales del 2001. Su principal
característica es la capacidad de recuperar trabajos cuando Excel se bloquea. Aún es utilizada
esta versión.

• Excel 2003
De todas las versiones de Excel, esta es la versión que tiene el menor número de nuevas
características. Fue muy decepcionante para los usuarios de Excel ya que la versión es muy
parecida a la versión de Excel 2002.

• Excel 2007
Excel 2007 marcó el comienzo de una nueva era, quito el viejo menú y la barra de herramientas e
introdujo una nueva barra de opciones. Sin embargo, esta barra de opciones no puede ser
modificada con el uso de VBA. Otra de las mejoras es que tiene un nuevo formato de archivo y
soporte para hojas de trabajo mucho más grandes (más de un millón de filas).

• Excel 2010
Esta versión cuenta con algunas características nuevas, tales como edición de imágenes, tablas
pivote.

5
CAPÍTULO 1 ANTECEDENTES

Otra de las nuevas funciones es que se puede instalar en versión de 64 bits, y la


característica de personalizar la cinta de opciones.

• Excel 2013
Esta fue la primera versión de Excel que ofrece una interfaz de documento único (SDI), eso
significa que cada libro tiene su propia ventana. Al igual que la versión anterior permite modificar
la cinta de opciones.

• Excel 2016
Excel 2016 versión más reciente, y cuenta con varios gráficos nuevos. Esta versión también está
disponible para teléfonos móviles y en línea, solo que estas versiones no aceptan VBA. Al igual
que la versión anterior permite modificar la cinta de opciones.

1.4 Visual Basic para Aplicaciones en la ingeniería petrolera


Visual Basic para Aplicaciones (VBA) es una herramienta de gran importancia para
programadores, personas de negocios e ingenieros por su amplia la funcionalidad. VBA es un
subconjunto casi completo de Visual Basic 5.0 y 6.0, y ofrece herramientas importantes de
automatización, diseño y análisis de datos para la industria, entre ellas la ingeniería petrolera.

La ingeniería petrolera tiene la necesidad de hacer uso de programas de cómputo que faciliten las
tareas cotidianas, y por ello contar con un lenguaje de programación como Visual Basic junto con
el potencial de las hojas de cálculo como Excel, proporciona una herramienta básica para los
profesionales que se desarrollan en el área.

VBA permite manipular toda la aplicación de Excel y brinda una manera más segura y rápida de
realizar actividades y automatizar procedimientos. Algunas de las aplicaciones que se le ha dado
a Excel en esta área son:

• Automatización de cálculos de áreas, volúmenes de roca.


• Análisis de registros geofísicos.
• Automatización de cálculos de reservas.
• Análisis económico.
• Automatización de los procesos para calcular los pronósticos de producción.
• Análisis de historia de producción.
• Administración de campos y activos.

En este trabajo las aplicaciones que serán mostradas están orientadas al área de yacimientos y
producción, no obstante, la aplicación de las hojas de cálculo en la ingeniería petrolera es va más
allá de lo mostrado en este trabajo.

6
Capítulo 2
FILOSOFÍA DE USO DE LAS
HOJAS DE CÁLCULO
ELECTRÓNICAS
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

CAPÍTULO 2 Filosofía de uso de las hojas de cálculo


CAPÍTULO 2 FILOSOFÍA DE USO DE LAS
electrónicas

HOJAS DE CÁLCULO ELECTRÓNICAS


2.1 Introducción a Visual Basic para Aplicaciones
Visual Basic para Aplicaciones (VBA) en combinación con Microsoft Excel, es una de las
herramientas más poderosas con la que se dispone, en el mundo hay más de 750 millones de
usuarios de Excel, y la mayoría, aún no ha descubierto el poder que VBA en Excel les ofrece, la
industria petrolera no es la excepción, para un ingeniero petrolero y profesionales que se
desarrollan en la industria, Excel es una herramienta básica, y muchas de las tareas de la
ingeniería, pueden ser realizadas con mayor rapidez en Excel con ayuda de VBA.

2.1.1 ¿Qué es el lenguaje VBA?


Visual Basic para Aplicaciones, VBA (Visual Basic For Aplications) es un lenguaje de
programación creado por Microsoft que se puede usar con toda la suite de Microsoft Office 2016
como lo es Excel (también disponible en versiones anteriores). Con ella se pueden desarrollar
macros, manipular objetos para controlar Excel y controlar otras aplicaciones desde Excel. No se
necesita más que tener la paquetería Microsoft Office en la computadora, si se cuenta con Excel,
se cuenta con VBA.

Visual Basic para Aplicaciones permite a los usuarios de Excel, entre otras cosas:

• Capturar datos de una forma más rápida.


• Automatizar acciones repetidas, VBA permite la llevar a cabo varias instrucciones en una
sola.
• Crear comandos personalizados, para algunas personas utilizar una combinación de
teclas es mucho más fácil que hacer clic en un icono, VBA permite crear combinaciones de
teclas que realicen alguna acción que se usa frecuentemente.
• Interactuar sobre los libros de Excel, permite modificar los elementos contenidos en un
libro como son las hojas, las celdas, los gráficos etc.
• Crear formularios personalizados, estos permiten crear interfaces amigables para la
interacción con el usuario, la entrada y salida de información.
• Personalizar la interfaz de Excel, la cinta de opciones de Excel es personalizable y se
pueden asociar macros creadas en VBA a la cinta de opciones.
• Crear funciones propias, es posible crear funciones propias adicionales a las que ya tiene
Excel como la suma o promedio.
• Modificar formato, podemos modificar lo que vemos en la ventana de un libro de Excel,
por ejemplo, el tipo de letra, tamaño y color.

8
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

• Crear aplicaciones a gran escala, se pueden crear aplicaciones con una cinta de
opciones personalizada, cuadros de diálogo, ayuda en pantalla entre otras cosas.

2.1.2 Consideraciones importantes


a) En Excel es posible realizar acciones automáticas con VBA escribiendo o grabando
código en un módulo del Editor de Visual Basic, VBE (Visual Basic Editor).

Código: Es el que se genera al automatizar instrucciones en VBA se puede crear de dos maneras:
automáticamente mediante la Grabadora de macros y manualmente con un procedimiento en el
editor de Visual Basic.

Usar la grabadora de macros es una opción sencilla, pero limitada, solo puede automatizar
acciones realizadas en Excel como formato de celdas, ordenado de datos, eliminación de datos
etc.

Si lo que se desea es programar acciones específicas por ejemplo una conversión de unidades,
algoritmos de cálculo, llamar a una correlación, interactuar con el usuario, verificar el tipo de datos
que se están trabajando o cualquier operación que haga uso de estructuras de repetición o
estructuras de decisión, la mejor opción es usar el editor de Visual Basic.

b) Un módulo en VBA puede contener procedimientos Sub y procedimientos Function.

Módulo: Estos contienen el código de las macros grabadas, así como los procedimientos y
funciones propias, los módulos se pueden exportar e importar independientemente del libro en el
que se encuentren.

c) Un procedimiento Sub realiza las acciones que estén dentro de las palabras Sub y End
Sub.
d) Un procedimiento Function regresa un valor y pueden ser llamados desde otros
procedimientos.
e) En VBA se manipulan objetos (libros, hojas y celdas) que son los más importantes.
f) Los objetos tienen jerarquías, los libros contienen a las hojas y estas a las celdas.
g) Los objetos del mismo tipo forman colecciones, las hojas forman la colección Worksheets.
h) Podemos hacer referencia a los objetos indicando la jerarquía de estos por ejemplo
Application.Workbooks(“Libro1.xlsx”), se hace referencia al Libro1 de la colección
Workbooks contenida en el objeto Application.
i) Se puede omitir la jerarquía usando el objeto activo.
j) Los objetos tienen propiedades, y estas pueden ser leídas o modificadas.
k) Para hacer referencia a una propiedad es necesario escribir el nombre del objeto y el de la
propiedad separados por un punto, por ejemplo.
Worksheets(“Hoja1”).Range(“A1”).Value.
l) Se pueden asignar valores a las variables, una variable es un elemento que almacena
datos e información.

9
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

m) Los objetos tienen métodos, un método es una acción que Excel realiza sobre un objeto,
por ejemplo, el método ClearContent del objeto Range que elimina el contenido de las
celdas a las que se hace referencia.
n) VBA tiene todas las estructuras como cualquier lenguaje de programación, como variables,
arreglos y estructuras de control.

2.2 La pestaña desarrollador


Para comenzar a trabajar con Macros en Excel, es necesario mostrar la pestaña Desarrollador,
con siga los siguientes pasos:

Dar clic en la ficha Archivo → Opciones → Personalizar cinta de opciones.


En el lado derecho marcar la casilla Desarrollador y aceptar la ventana.

Se añadirá una nueva cinta como la mostrada en la Figura 2.1.

Figura 2.1 Pestaña Desarrollador.

A continuación, se muestra una breve descripción de la ficha desarrollador.

Grupo Código (Figura 2.2):


• Visual Basic. Abre el editor de Visual Basic
(VBE).
• Macros. Abre la lista de macros, donde se puede
elegir entre ejecutarlas o editaras.
• Grabar macro. Inicia el proceso de grabar
macros. Figura 2.2 Grupo código de la
• Usar referencias relativas. Elige entre usar pestaña desarrollador.
referencias relativas o referencias absolutas.
• Seguridad de macros. Personaliza la configuración de seguridad de las macros.

Grupo Complementos (Figura 2.3):


• Complementos. Permite agregar
complementos y macros guardadas como
complementos.
• Complementos de Excel. Permite agregar
complementos de Excel.
• Complementos COM. Permite seleccionar Figura 2.3 Grupo Complementos de la
complementos COM (librerías de funciones pestaña Desarrollador.
complementarias).

10
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Grupo Controles (Figura 2.4):


• Insertar. Permite insertar controles de formulario o ActiveX) en Excel como son botones,
cuadros combinados, casilla de verificación, control de número, lista, botón de opción,
cuadro de grupo, etiqueta, barra de desplazamiento, campo de texto, imagen)
• Modo diseño. Activa o desactiva el modo diseño, en modo diseño se pueden seleccionar
y modificar los controles, y no se pueden
ejecutar.
• Propiedades. Muestra las propiedades del
objeto seleccionado.
• Ver código. Muestra directamente el código
asociado al objeto seleccionado.
Figura 2.4 Grupo Controles de la
• Ejecutar cuadro de diálogo. Ejecuta un
pestaña Desarrollador.
cuadro de dialogo personalizado.

Grupo XML
• Permite importar y exportar documentos XML.

2.3 El entorno de desarrollo VBE


2.3.1 ¿Qué es el editor de Visual Basic, VBE?
El editor de Visual Basic VBE (Visual Basic Editor) es una aplicación por separado en la que se
puede escribir, modificar y probar código en VBA. Se puede abrir desde Excel. Este entorno cuenta
con numerosas herramientas que facilitan la programación y el correcto funcionamiento del código
que en este se desarrolla.

Para activar VBE es necesario seguir las siguientes indicaciones:


Desarrollador → Código → Visual Basic.
Otra opción es pulsar la combinación de teclas Alt + F11.

Se mostrará el Editor de Visual Basic de la Figura 2.5.

Figura 2.5 Editor de Visual Basic, VBE.

11
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Barra de menús. La barra de menús de VBE trabaja como cualquier otra barra de menús,
esta contiene comandos que se usan en el editor VBE, también que existen combinaciones
de teclas para poder acceder de manera más rápida a cada uno de estos menús. Se puede
colocar el puntero sobre cualquier menú y se mostrará la combinación de teclas asignada
a este.
Barra de herramientas. Esta barra se encuentra exactamente bajo la barra de menús,
contiene herramientas muy usadas para su fácil acceso.
El explorador de proyectos. En este se puede visualizar un diagrama de árbol que
muestra cada libro abierto en ese momento en Excel, se pueden expandir o contraer
haciendo doble clic en los nombres o seleccionando los iconos y .
Ventana de código. Aquí es donde se escribe el código VBA, todos los objetos en un
proyecto tienen asignada una ventana de código, si se da doble clic en cualquier objeto de
la ventana explorador de proyectos, se pueden ver las diferentes hojas de código que
tienen.
Ventana inmediato. Por primera vez, esta ventana no está visible, si no está visible, se
puede mostrar de siguiente para mostrarla:
Pulsar la combinación de teclas Ctrl + G.
Ir a la barra de menús Ver → Ventana inmediato.

Es útil en el momento de ejecutar algún código en VBA o al momento de depurar código.

Para cerrar el entorno VBE existen varias opciones:


Haga clic en el icono de la ventana VBE.
Ir a Archivo → Cerrar y volver a Microsoft Excel.

Para regresar a Excel


Hacer clic en el icono de la barra de herramientas estándar.
Usar la combinación de teclas Alt + F11.

2.3.2 Cómo trabajar con el explorador de proyectos


Cuando se trabaja con el editor VBE cada libro y complemento se abre como un proyecto. Se
puede definir un proyecto como un arreglo de objetos dispuestos en un esquema, se puede
expandir un proyecto haciendo clic en el icono o dando doble clic en el nombre del proyecto. En
la Figura 2.6 se muestra el explorador de proyectos con dos libros y el libro de macros personal
abierto.

El explorador muestra un nodo de Microsoft Excel Objects este muestra un elemento por cada
objeto que se encuentre en el libro, si el libro contiene macros, también se mostrará un nodo
Módulos en el que se guardan las macros del libro.

Agregar un nuevo módulo.


Cuando se graba una macro, Excel genera automáticamente un módulo donde se guarda el código
grabado, pero también se pueden agregar otros módulos.

12
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

En general un módulo puede contener tres tipos de código:


Declaraciones: Se pueden declarar varios tipos de variables que
se tiene planeado usar.
Procedimientos Sub. Son instrucciones programadas que
realizan una acción, una macro grabada es un procedimiento
Sub.
Procedimientos Function. Son instrucciones programadas que
regresan un valor, como la función suma de Excel, regresa el
valor de la suma de los argumentos.

Un módulo puede contener todo tipo de declaraciones y procedimientos,


su organización depende de cada usuario. Muchos usuarios prefieren
tener todo el código de su aplicación en un solo módulo, otros prefieren
tenerlo en diferentes módulos.
Figura 2.6 Explorador
de proyectos.
Para agregar un nuevo módulo siga las siguientes instrucciones:
Seleccione el nombre del proyecto en el explorador de proyectos.
De clic derecho → Insertar → Módulo.

También puede hacer lo siguiente:


Seleccionar el nombre del proyecto en el
explorador de proyectos.
Ir a Insertar en la barra de menús → Módulo.

En la Figura 2.7 se ilustra el procedimiento para


agregar un nuevo módulo.

Eliminar un módulo
Para eliminar un módulo siga las siguientes
instrucciones:
Figura 2.7 Insertar un nuevo módulo.
Seleccione el módulo que desea remover en
el explorador de proyectos.
De clic derecho → Quitar.

O puede hacer lo siguiente:


Seleccione el módulo que desea remover en el
explorador de proyectos.
Ir a Archivo → Quitar módulo.

En la Figura 2.8 se ilustra el procedimiento para quitar


un módulo.

Figura 2.8 Quitar un módulo.

13
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Importar y exportar objetos


Para importar objetos como módulos y formularios siga las siguientes instrucciones:
Seleccione el proyecto en el que desea importar el módulo o formulario.
De clic derecho → Importar archivo…
Busque el módulo o formulario que desea importar y seleccione aceptar.

También puede hacer lo siguiente:


Seleccione el proyecto en el que desea importar el módulo o formulario.
Ir a Archivo → Importar archivo…
Busque el módulo o formulario que desea importar y seleccione aceptar.

Para exportar un objeto como son módulos y formularios, siga las siguientes instrucciones:
Seleccione el modulo o formulario que desea exportar.
De clic derecho → Exportar archivo…
Seleccione la ubicación y en nombre con el que desea guardar el objeto y seleccione
aceptar.

Otra opción es la siguiente:


Seleccione el modulo que desea exportar.
Ir a Archivo → Exportar archivo…
Seleccione la ubicación y en nombre con el que desea exportar el objeto y seleccione
aceptar.

Los archivos exportados como módulos y formularios tienen extensiones bas y frm como se
muestran en la Figura 2.9.

Figura 2.9 Tipos de extensión de archivo para módulos y formularios.

Trabajar con ventanas de código


Es posible visualizar una o varias ventanas de código en el editor
VBE (Figura 2.11), o seleccionar solo trabajar con una sola ventana
(Figura 2.12), o mostrar dos, tres, cuatro ventanas al mismo tiempo
(Figura 2.13). Para poder observar varias ventanas al mismo tiempo
se puede hacer lo siguiente:
Ir a Ventana en VBE y seleccionar alguna opción del menú
de la Figura 2.10.

Figura 2.10 Barra de


menús ventana.

14
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Figura 2.11 Visualización de varias ventanas de código.

Figura 2.12 Visualización de una sola ventana de código.

Figura 2.13 Visualización de dos ventanas al mismo tiempo.

15
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Para maximizar una ventana hay que hacer clic en el icono


maximizar de la ventana de código. Después de maximizar
una ventana, podemos regresarla a su posición anterior o
minimizarla desde los botones que se encuentran en la
esquina superior derecha del editor VBE (Figura 2.14). Figura 2.14 Botones para controlar
una ventana de código.
Cuando se minimizan las ventanas aparecen en la parte
baja del editor VBE (Figura 2.15).

Personalizar el entorno VBE


Normalmente en el editor VBE, las palabras
clave, las funciones y los procedimientos
aparecen en color azul, los objetos métodos
Figura 2.15 Vista de las ventanas de código
y propiedades en negro, los comentarios en
minimizadas.
verde y los errores en rojo, para poder
modificar el formato de estas características, podemos abrir la ventana Opciones (Figura 2.16):
Herramientas → Opciones

Figura 2.16 Ventana Opciones del editor VBE.

Pestaña Editor (Figura 2.16). Lo más


recomendable es mantener siempre todas las
opciones activadas, estas hacen más sencilla la
escritura de código en diferentes formas, como
mostrar el valor de las variables en tiempo de
ejecución, enlistar las propiedades y métodos
automáticamente, requerir que siempre se
declaren las varíales usadas y permitirnos la
libertad de escribir las instrucciones de manera
diferente a como son y que VBA las entienda,
por ejemplo, al escribir “msgbox” y VBE lo
Figura 2.17 Pestaña Formato del editor.
cambiará automáticamente a “MsgBox”.

16
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Pestaña Formato del editor (Figura 2.17). Aquí permite editar el color, tipo y tamaño de
la letra para la ventana de código.
Pestaña General (Figura 2.18). Permite mostrar opciones de edición para los controles
que se agreguen a un formulario, como la cuadrícula que ayuda a alinear los controles y
tener una vista más ordenada.
Pestaña Acoplar (Figura 2.19). Ayuda a configurar las ventanas que se muestran en los
márgenes de VBE.

Figura 2.18 Pestaña General. Figura 2.19 Pestaña Acoplar.

2.4 Procedimientos en VBA


Los códigos que se escriben en el editor de Visual Basic son conocidos como procedimientos,
existen dos tipos principales:
Los procedimientos Sub son un grupo de instrucciones de VBA que realizan una acción.
Los procedimientos Function son instrucciones de VBA que regresan un valor y en
ocasiones un arreglo de valores.

La mayoría de las macros que se escriben en VBA son procedimientos Sub, se puede pensar en
un procedimiento Sub como un comando, ejecuta el comando y algo sucederá dependiendo de lo
que haga el procedimiento Sub.

Un procedimiento Function es diferente a un procedimiento Sub, en Excel se está más


familiarizado con las funciones, como las que usas constantemente: Suma, Promedio, Si,
Pendiente, etc. La lista de funciones de Excel es enorme, cada una de estas funciones necesita
de uno o más argumentos, aunque existen funciones que no usan argumentos, las funciones
hacen algo detrás del escenario usando los argumentos y regresando un valor. Las funciones que
se pueden desarrollar en VBA funcionan de la misma manera.

Para nombrar un procedimiento Sub o Function se deben seguir las siguientes reglas.
Se pueden usar letras, números y algunos signos de puntuación, pero el primer carácter
siempre debe ser una letra.
No se pueden usar espacios o puntos en el nombre.

17
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

No se pueden usar los siguientes caracteres: #, $, %, &, @, ^, *, ¡, !.


Evitar usar nombres como “A1”, realmente Excel los acepta, pero pueden ser confusos.
Utilizar máximo 255 caracteres.

Cuando se nombran procedimientos, lo recomendable es que el nombre describa lo que hace el


procedimiento de la manera más corta posible, por ejemplo, si tenemos un procedimiento Sub que
cambia el tipo de letra y el tamaño y color de relleno de una celda, no es muy útil llamarlo
Cambia_tamaño_letra_color porque es muy largo para después escribirlo cuando se requiera.

2.4.1 Procedimiento Sub


Estructura de un procedimiento Sub
Todos los procedimientos Sub inician con la palabra clave Sub y terminan con la sentencia End
Sub. Tienen un NombreDeProcedimiento, un procedimiento Sub tiene la opción de usar o no
argumentos.

1. Sub NombreDeProcedimiento(Argumento1,...)
2. [Instucciones de VBA]
3. End Sub

En el ejemplo siguiente se muestra un procedimiento Sub llamado “MuestraMensaje”, dentro de


los paréntesis, se escriben los argumentos de este procedimiento, la mayoría de los
procedimientos Sub, no usa argumentos, por eso es que están vacíos.

1. Sub MuestraMensaje()
2. MsgBox "¡Hola!"
3. End Sub

Ejecutar un procedimiento Sub


Ejecutar un procedimiento significa lo mismo que correr o llamar a un procedimiento, se usará esta
terminología por igual.

Existen varias maneras de ejecutar un procedimiento, elegir la adecuada dependerá de la finalidad


de la aplicación.
Con el botón Ejecutar Sub / UserForm o F5. Con esto Excel ejecutará el procedimiento
Sub en el cual el cursor este colocado. Este método no funciona si el procedimiento
necesita uno o más argumentos.
Desde el cuadro de macros de Excel. Ve a Desarrollador → Código → Macros o desde
Vista → Macros otra alternativa es presionar la combinación de teclas Alt + F8. Cuando el
cuadro de macros aparezca, puedes seleccionar el procedimiento que quieras y
seleccionar Ejecutar.
Usar la combinación de teclas Ctrl + Shift + Tecla que le hayas asignado, si es que se le
asigno alguna.
Dar clic a un control a la que este asignada la macro.
Desde otro procedimiento Sub que exista.
Desde un botón de la barra de herramientas de acceso rápido.

18
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Desde un complemento que este agregado a la cinta de opciones.


Cuando un evento ocurre.
Desde la ventana inmediato de VBE.

Estas formas de ejecutar una macro se usarán en el capítulo 5, donde se aplica VBA a ejemplos
de ingeniería petrolera.

2.4.2 Procedimiento Function


Estructura de un procedimiento Function
Los procedimientos Function inician con la palabra clave Function y terminan con la sentencia
End Function, también tienen un NombreDeProcedimiento y Argumentos.

1. Function NombreDeFuncion()
2. [Instrucciones de VBA]
3. NombreDeFuncion = Resultado
4. End Function

En el siguiente ejemplo se muestra una función llamada RaizCuadrada y tiene un argumento


llamado “numero” que se encuentra dentro de los paréntesis, las funciones pueden tener hasta
255 argumentos o ninguno, cuando se ejecuta esta función, calcula la raíz cuadrada del número
que se introduzca como argumento.

1. Function RaizCuadrada(numero)
2. RaizCuadrada = numero ^ (0.5)
3. End Function

Ejecutar un procedimiento Function


Las funciones a diferencia de los procedimientos solo pueden ser ejecutadas de dos maneras
diferentes:
Desde otro procedimiento Sub o procedimiento Function.
Usándola desde una celda de Excel.

2.5 ¿Qué es una macro?


Hace tiempo, a los lenguajes de programación se les llamaba “macro lenguajes” si entre sus
capacidades estaban la automatización de secuencias de comandos en hojas de cálculo o en
aplicaciones de procesamiento de texto, con el lanzamiento de Office 5 por parte de Microsoft,
VBA trae consigo algo que va mucho más allá que los lenguajes de programación anteriores, tales
como la capacidad de crear y controlar los objetos de Excel o para tener acceso a unidades de
almacenamiento y redes. Así VBA es un lenguaje de programación y un lenguaje macro.

Existe confusión de terminología cuando se hace referencia al código en VBA que son una serie
de órdenes escritas y ejecutadas en Excel, ¿es esto una macro, un procedimiento o un programa?
Microsoft llama macro a los procedimientos desarrollados en VBA.

19
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

2.5.1 Usar el grabador de macros

El grabador de macros es una herramienta que convierte las acciones realizadas en Excel en
código de VBA. Esta es la forma más fácil de crear una macro. Todo lo que necesitas es activar el
botón Grabar macro, realizar las acciones que quieres que se automaticen y después desactivarlo
cuando hayas finalizado las acciones que quieres grabar, cuando el botón Grabar macro está
activado cada acción que realices (seleccionar una celda, ingresar un número, cambiar el formato
a un rango de celdas) es grabada y trasladada a código VBA.

La mejor manera de aprender a usar las macros, es iniciar el grabador de macros y realizar algunas
acciones para después aprender del código VBA que se genera.

El grabador de macros es una herramienta muy útil, y es bueno tener en cuenta los siguientes
puntos:
Usar el grabador de macros es útil para grabar tareas simples o partes de una macro más
grande.
No todas las acciones que en Excel se realizan pueden ser grabadas.
El grabador de macros no puede grabar acciones que contienen ciclos.
El grabador de macros crea procedimientos Sub, no se pueden crear procedimientos
Function usando el grabador de macros.
Se puede limpiar un poco el código de procedimientos extraños que fueron grabados
accediendo al código de la macro.

El grabador de macros traduce las acciones del mouse y teclado en código VBA, realicemos un
ejemplo. Siga las siguientes instrucciones:
Inicie un libro en blanco en Excel.
Con la pestaña Desarrollador activada, de clic en el icono Visual Basic.
Redimensione las dos ventanas (Excel y Microsoft Visual Basic para aplicaciones) para
que las pueda visualizar el mismo tiempo).
Seleccione una celda y vaya a la ficha Desarrollador, grupo Código y seleccione Grabar
macro, aparecerá un cuadro de diálogo Grabar macro (Figura 2.22), acepte este cuadro.
Después de este ejemplo se muestra a detalle la descripción del cuadro de diálogo.
En la ventana Explorador de proyectos de VBE aparecerá un apartado de Módulos,
seleccione el Módulo1 y maximice la ventana que aparece.

La pantalla deberá ser similar a la mostrada en la Figura 2.20. Puede haber variaciones por la
versión de Excel o la resolución de las pantallas.

Escriba, muévase y modifique la hoja de cálculo y observe como se va generando código


en Módulo1 que se encuentra en la ventana VBE. Después de realizar algunas opciones
obtendrá un resultado como el mostrado en la Figura 2.21. Puede seleccionar
herramientas de las fichas, crear gráficas, manipular gráficos etc.
Para detener la grabación haga clic en el botón Grabar macro.

20
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Figura 2.20 Ventana de Excel y VBE.

Figura 2.21 Ventana de Excel y VBE después de realizar instrucciones.

El cuadro de diálogo Grabar macro se muestra en la Figura 2.22 y a continuación se describe.


Nombre de la macro. Aquí se coloca el nombre de la macro, Excel le da un nombre por
defecto o puede asignarle uno de acuerdo a lo que hará la macro que se está creando.

21
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Tecla de método abreviado: Las macros necesitan


que un evento o algo suceda para que se ejecuten,
estos pueden ser un clic en un botón, cuando se abre
un libro o en este caso una combinación de teclas, la
puede escribir aquí y la macro se ejecutará cuando
pulse esas teclas, p puede dejarlo vació y la macro
no tendrá ninguna combinación de teclas asignada.
Guardar macro en: En este libro es la opción por
defecto, cuando abra nuevamente el libro, la macro
estará disponible, así como si comparte el libro, la
macro estará disponible siempre y cuando la
Figura 2.22 Cuadro de diálogo
configuración de seguridad este correctamente Grabar macro.
configurada.
Descripción: En este campo es opcional, este puede ayudarle a diferenciar entre las
distintas macros que tenga en su hoja de cálculo, o por si necesita que el usuario conozca
más acerca de lo que hace la macro.

2.5.2 Ejecutar una macro


Existen varias maneras de ejecutar una macro: una combinación de teclas, un botón en la barra
de herramientas de acceso rápido o un botón de comando. A continuación, se muestran estas
opciones:
Ejecutar el procedimiento directamente. Para ejecutar una macro directamente es
necesario estar colocado en el código de la macro y presionar F5.
Desde el cuadro de macros de Excel. En este cuadro se muestran todas las macros que
estén disponibles en el libro. Para ejecutar una macro desde aquí siga las instrucciones
que se muestran a continuación.
Desarrollador → Código → Macros. Se mostrará una ventana (Figura 2.23) con
todas las macros disponibles en el libro, desde allí se puede seleccionar una y dar
clic en Ejecutar.
Con una combinación de teclas. Esta opción nos permite asignar una combinación de
teclas para que se ejecute una macro, para hacer esto sigamos las instrucciones:
Abrir la ventana de macros en Desarrollador →
Código → Macros.
Seleccionar la macro a la que deseemos agregar
la combinación de teclas.
Presionar Opciones.
En la ventana Opciones de la macro (Figura 2.24),
colocamos una letra mayúscula y con esto
tendremos la combinación de teclas, se
recomienda que sea mayúscula porque Excel ya
tiene algunas instrucciones con combinación de
teclas con minúscula, como Ctrl + g para guardar. Figura 2.23 Macros
También podemos agregar una descripción de la disponibles en el libro abierto.
macro.

22
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Aceptar la ventana.
Dar clic a un control. Los controles disponibles en
Excel son se encuentran en la pestaña Desarrollador
→ Controles → Insertar, se mostrarán los controles de
la Figura 2.25. Podemos seleccionar alguno de estos,
existen dos tipos de controles: Controles de formulario
y Controles ActiveX.

Para asignar una macro a alguno de los controles de


Figura 2.24 Ventana opciones
formulario, se hacen los siguientes pasos: de la macro.
Ir a Desarrollador → Controles → Insertar y
seleccionar el control.
Dibujar el control en el formulario donde deseemos. Y
aparecerá una ventana para seleccionar la macro que
queremos asignar al control.
Aceptar la ventana.

Para asignar una macro a alguno de los controles de formulario


ActiveX, se siguen las instrucciones que se muestran a
continuación.
Ir a Desarrollador → Controles → Insertar y seleccionar el
control.
Dibujar el control en el formulario donde deseemos, en Figura 2.25 Insertar
este caso un botón de comando. control de formulario.
En Desarrollador → Controles → marcar el botón Modo Diseño.
Dar clic derecho en el control que dibujamos recientemente y seleccionar Ver
código. Se mostrará el Editor de Visual Basic.
Allí escribimos el siguiente código: Call NombreDeMacro, donde nombre de macro
corresponde a la macro que se desee asignar al control (Figura 2.26).
Volvemos a Excel y deseleccionamos el botón Modo Diseño.

Figura 2.26 Código de control Botón de comando.

Otras opciones que involucran modificar la cinta de opciones se muestran en el apartado


Personalizar la cinta de opciones
2.5.3 Uso de referencias relativas y absolutas
Cuando se graban las acciones con el grabador de macros, Excel usa por defecto las referencias
absolutas, es decir si se selecciona una celda en específico, Excel recordará esta celda y no la
celda que este activa en el momento que quiera ejecutar una macro.

23
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Mostremos un ejemplo:
Inicie el grabador de macros.
Seleccione la celda A1 y escriba “Lunes”.
Muévase a la celda B1 y escriba “Martes”, así hasta tener todos los días de la semana.
Seleccione nuevamente la celda A1, y detenga el grabador de macros. La hoja se tiene
que ver como la que se muestra en la Figura 2.27 y el código generado se muestra a
continuación.

Figura 2.27 Ejemplo de aplicación de referencias relativas y absolutas.


1. Sub Macro1()
2. Range("A1").Select
3. ActiveCell.FormulaR1C1 = "Lunes"
4. Range("B1").Select
5. ActiveCell.FormulaR1C1 = "Martes"
6. Range("C1").Select
7. ActiveCell.FormulaR1C1 = "Miércoles"
8. Range("D1").Select
9. ActiveCell.FormulaR1C1 = "Jueves"
10. Range("E1").Select
11. ActiveCell.FormulaR1C1 = "Sábado "
12. Range("F1").Select
13. ActiveCell.FormulaR1C1 = "Domingo"
14. Range("A1").Select
15. End Sub

Si se ejecuta la macro grabada desde Desarrollador → Código → Macros → Macro 1, observamos


que la acción siempre se va a la celda A1 y si nos situamos en alguna otra celda, no comienza a
escribir a partir de la celda que nosotros seleccionamos, esto es una macro sin usar las referencias
relativas.

Ahora grabemos la misma macro, pero con el icono de Usar referencias relativas activado, se
muestra el código generado por el grabador de macros.

1. Sub Macro2()
2. ActiveCell.FormulaR1C1 = "Lunes"
3. ActiveCell.Offset(0, 1).Range("A1").Select
4. ActiveCell.FormulaR1C1 = "Martes"
5. ActiveCell.Offset(0, 1).Range("A1").Select
6. ActiveCell.FormulaR1C1 = "Miércoles"
7. ActiveCell.Offset(0, 1).Range("A1").Select
8. ActiveCell.FormulaR1C1 = "Jueves"
9. ActiveCell.Offset(0, 1).Range("A1").Select
10. ActiveCell.FormulaR1C1 = "Viernes"
11. ActiveCell.Offset(0, 1).Range("A1").Select
12. ActiveCell.FormulaR1C1 = "Sábado"
13. ActiveCell.Offset(0, 1).Range("A1").Select
14. ActiveCell.FormulaR1C1 = "Domingo"
15. ActiveCell.Offset(0, -6).Range("A1").Select
16. End Sub

24
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Si probamos esta macro, veremos que comenzará a escribir a partir de la celda que se encuentre
seleccionada, esto es una macro con referencias relativas.

2.5.4 Eliminar una macro


Para eliminar una macro se pueden seguir los siguientes pasos:
Desarrollador → Código → Macros → Seleccionar macro → Eliminar.
También puede eiminarse borrando el código correspondiente a la macro desde VBE.

2.5.5 Examinar una macro


Si desea conocer el código generado por la macro, se puede acceder a este mediante las
siguientes instrucciones:
Desarrollador → Código → Visual Basic (o presione Alt + F11).
En el editor de Visual Basic, localice la ventana Proyecto (Explorador de proyectos)
Seleccione el proyecto en el cual grabó la macro.
Seleccione el icono y seleccione el Módulo1.

Se mostrará una ventana con código como en la Figura 2.28, este es el código de la macro,
encontraras muchas instrucciones que Excel va ejecutando una por una, de arriba hacia abajo.

Figura 2.28 Editor de VBE mostrando el código de una macro.

Más adelante serás capaz de poder entender lo que hace cada línea de código, no desesperes, el
aprendizaje de macros requiere de tiempo imaginación y paciencia.

2.5.6 Modificar una macro


Desde la ventana mostrada en la Figura 2.28 es posible modificar una macro que haya sido
grabada con el grabador de macros, se puede volver a grabar una macro, pero en ocasiones es
mejor modificarla, por ejemplo, la siguiente instrucción cambia el tipo de letra a negritas de la celda
que esta seleccionada:

1. ActiveCell.Font.Bold = True

Ejecuta nuevamente la macro y observa los cambios.

25
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

2.5.7 Guardar libros que contienen macros


Si se guarda un libro que contiene macros, este se guardará como un libro habilitado para macros,
es decir, se guardará como un libro con extensión XLSM y no con la extensión normal XLSX.

Si es la primera vez que guarda el libro con macros, y se guarda como comúnmente se hace:
Archivo → Guardar.

Se mostrará el cuadro de
dialogo de Microsoft Excel 2016
en el cual por defecto nos
guardará el libro con una
extensión XLSX (que no está Figura 2.29 Ventana Guardar de Microsoft Excel 2016.
habitada para macros) como se
muestra en la Figura 2.29.

Se tiene que cambiar el formato


a un archivo de Excel habilitado
para macros, escribir el nombre
del libro y seleccionar la Figura 2.30 Ventana Guardar de Microsoft Excel 2016.
ubicación donde deseamos
guardar la macro como se
muestra en la Figura 2.30.

Si se selecciona guardar un libro


que contiene macros con
exención XLSX, Excel mandará
Figura 2.31 Mensaje de alerta cuando se guarda un libro que
la siguiente alerta mostrada en contiene macros.
la Figura 2.31, donde puede
seleccionar “no” para poder seguir guardando el libro como libro habilitado para macros.

Guardar una macro en el libro de macros personal


Muchos de los usuarios que crean macros, las usan solo en
libros específicos, pero en Excel es posible usar las macros
en cualquier libro, para grabar una macro en el libro de
macros personal, cuando inicie el grabador de macros,
seleccione guardar en el libro de macros personal como se
muestra en la Figura 2.32.

Figura 2.32 Grabar macro en el


libro de macros personal.

26
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

2.5.8 Las macros y la seguridad


La seguridad en las macros es una característica importante, ya que VBA es un lenguaje de
programación muy poderoso, y una macro es capaz de dañar las computadoras, desde una macro
se pueden eliminar archivos, enviar información e incluso dañar Windows.

La configuración de seguridad de las macros permite controlar lo que sucede al abrir un libro que
contiene macros, si se abre un libro que contiene macros, Excel mostrará un mensaje bajo la cinta
de opciones informando que el libro abierto tiene desactivadas las macros como en la Figura 2.33.
Por defecto Excel desactiva todas las macros, si se sabe que el libro es seguro se puede dar clic
en Habilitar contenido y habilitar las macros. Para usar el libro sin habilitar las macros, solo es
necesario hacer clic en la para cerrar la advertencia.

Figura 2.33 Advertencia de seguridad al abrir un libro que contiene macros.

Una vez que aceptas que un libro es seguro, para la próxima vez que se abra, Excel no mostrará
la advertencia de seguridad nuevamente.

Una de las mejores maneras de configurar la seguridad de las macros, es agregar una o más
carpetas como ubicaciones de confianza (trusted locations). Así, todos los libros que se
encuentren guardados en esas carpetas serán abiertos sin las advertencias de seguridad.

Se puede cambiar la configuración de seguridad y agregar una Ubicación de confianza con las
siguientes instrucciones:
Desarrollador → Código → Seguridad de macros

Se mostrará la ventana de la Figura 2.34. En la pestaña Configuración de macros, se puede


cambiar la configuración de seguridad de todas las macros entre las que se encuentran:
Deshabilitar todas las macros sin notificación. En esta opción, las macros no
funcionaran nunca.
Deshabilitar todas las macros con notificación. En esta opción Excel mostrará el
mensaje de advertencia de seguridad, se pueden usar las macros si se desea o usar el
libro sin macros.
Deshabilitar todas las macros excepto las firmadas digitalmente. Se podrán usar las
macros que cuenten con una firma digital.
Habilitar todas las macros (No recomendado; puede ejecutarse código posiblemente
peligroso). Esta opción habilita todas las macros sin advertencias.

27
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

En la pestaña Ubicaciones de confianza, se pueden agregar carpetas de confianza siguiendo las


siguientes instrucciones:
Hacer clic en Agregar nueva ubicación y buscar la carpeta que queremos agregar como
ubicación de seguridad

Después de agregar esta ubicación de confianza, todos los libros de Excel que contengan macros
se abrirán con las macros habilitadas.

Figura 2.34 Ventana seguridad de macros.

2.6 Programación en VBA


2.6.1 Variables y constantes
¿Qué es una variable?

Al usar VBA el principal objetivo es manipular datos, algunos de estos se almacenan en las celdas
de una hoja de cálculo de Excel, otros de ellos se pueden almacenar en variables que podemos
crear.

Una variable es el nombre que le das a un espacio de memoria en tu computadora y esta es usada
en un programa, es posible nombrar a las variables como deseemos, tratando de que los nombres
de las varíales describan a estas de la mejor manera posible.

Para asignar un valor a una variable usamos el signo de igual “=”, a continuación, se muestran
varios tipos de variables:
1. x = 1
2. Tasa
3. TasaDeclinacion = 0.1
4. Validación = False
5. y = y + 1
6. Usuario = "Luis Pérez"
7. Fecha = #6/25/2016#
8. NuevoNum = ViejoNum * 1.5

28
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Nombres de variables
VBA tiene algunas reglas en cuanto a nombrar variables:
Se pueden usar letras, números y algunos caracteres especiales, pero el primer carácter
debe ser una letra.
VBA no distingue entre mayúsculas y minúsculas.
No se pueden usar espacios, puntos o signos de operación.
No se pueden usar los siguientes caracteres en el nombre de una variable: #, $, %, &, ¡, !.
El nombre no puede exceder los 255 caracteres.

Para que un nombre de una variable sea más fácil de entender se puede usar “-“ o “_” por ejemplo
Nombre-variable o Nombre_variable.

Tipos de datos el VBA


Los tipos de variables que se pueden usar en VBA se pueden ver en la Tabla 2.1.
Tabla 2.1 Tipos de datos en VBA

Tipo de dato Bytes usados Rango de valores


Byte 1 0 a 255
Boolean 2 Falso o verdadero
Integer 2 -32,768 a 32 767
Long 4 -2,147,483,648 a 2,147,483,647
Single 4 -3.40E38 a -1.40E-45 y 1.40E-45 a 3.40E38
Double 8 -1.79E308 a -4.94E-324 y 4.94E-324 a 1.79E308
Currency 8 -922,337,203,685,477 a 922,337,203,685,477
Date 8 1/1/0100 a 12/32/9999
Object 4 Cualquier objeto
String 1/caracter Varios
Variant Varios Varios

Es recomendable usar el tipo de dato que ocupe la menor cantidad de espacio.

Declarar variables
Cuando se usa una rutina sin declarar variables, VBA las asigna como Variant, que cambia de tipo
de dato dependiendo de las asignaciones que se haga, de igual manera se puede usar para
guardar una cadena de caracteres o para guardar un número, no declararlas reside en que una
variable Variant, ocupe más espacio en la memoria de la computadora.

Una opción que ofrece VBA para obligar al usuario a declarar las variables que usa es: Option
Explicit. Solo con escribir esta instrucción en la parte superior del módulo es suficiente para que
VBA te avise cuando existe una variable que no está declarada.
1. Option Explicit

También se puede activar esta opción desde la ventana opciones como en la Figura 2.16:

29
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Ir a Herramientas → Opciones → Pestaña Editor → Marcar Requerir declaración de


variables.

¿Por qué es útil obligar al usuario a usar la instrucción Option Explicit?, imaginemos que se está
usando VBA sin la opción Option Explicit, y en el proceso se usa una variable Compresiblidad
(sin una “i”), pero por algún error se escribe en alguna otra parte del procedimiento
Compresibilidad, VBA la entenderá como una variable diferente y ocasionará un error en nuestro
procedimiento.

Para declarar una variable se usa la palabra Dim, a continuación, se muestran unos ejemplos de
variables declaradas:
1. Dim Nombre As String
2. Dim Inventario As Double
3. Dim Renglon As Long
4. Dim i As Integer
5. Dim Z

Podemos observar que las primeras cuatro variables están declaradas como un tipo específico de
dato, la última no, VBA la entenderá como Variant que puede ser cualquier tipo de dato.

VBA tiene otras maneras de declarar variables que son:


Static Variable que conserva su valor cada vez que se ejecuta el procedimiento.
Public puede ser usada por cualquier procedimiento del proyecto.
Private solo puede usarse dentro del módulo o procedimiento en que se definió
Const una variable que tiene un valor especificado.

Alcance de variables entre módulos


Un libro puede tener varios módulos y cada módulo puede contener cualquier número de
procedimientos Sub y Function. El alcance de una variable determina quien la puede usar o no;
imaginemos un salón de clases, en el existen varios alumnos cada uno con una libreta y existe
también un pizarrón, las variables estarían escritas en la libreta y el pizarrón, y los módulos los
alumnos, lo que está escrito en el pizarrón lo pueden usar todos los alumnos, ese sería un tipo de
alcance de la variable, lo que está escrito en cada libreta solo lo puede usar el alumno, entonces
estas variables tienen menor alcance que las del pizarrón.

El alcance de las variables puede ser:


Solo en el procedimiento. Usando Dim y Static para declararlas dentro del
procedimiento.
Únicamente en el módulo. Usando Dim o Private para declarar en la parte superior del
módulo.
Para todos los procedimientos y módulos. Usando Public para declarar la variable en
la parte superior del módulo.

Constantes
Una constante es un dato que nunca cambia dentro de los procedimientos a diferencia de las

30
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

variables que van cambiando de valor durante el procedimiento.

Para declarar una constante se hace con la palabra Const como se muestra a continuación:
1. Const pi = 3.1416
2. Const Nombre = "María"
3. Const Gasto As Integer = 100
4. Public Const NombreLibro As String = "Curvas de declinación"

A una constante no se le puede cambiar el valor, si durante algún procedimiento se desea cambiar
el valor de una constante VBA tendrá un error.

Cadenas de caracteres
En VBA el texto se trabaja como cadenas de caracteres, se pueden trabajar dos tipos de cadenas
de caracteres:
Cadenas de caracteres fijas, estas son declaradas con un numero especifico de caracteres.
El número máximo de caracteres que permite una cadena es 65,526.
Cadenas de caracteres variables, este tipo de cadena puede contener más de
2,000,000,000 caracteres.

Cuando se declara una variable del tipo String con la instrucción Dim, se puede especificar el
número máximo de caracteres que contendrá o dejar que el número de caracteres sea dinámico,
dependiendo del número de caracteres que se le asignen a la variable durante el procedimiento,
a continuación, se muestra un ejemplo:
1. Dim CadenaFija As String * 10
2. Dim CadenaDinámica As String

Fechas
Las fechas pueden ser muy útiles dentro de nuestros programas. Para almacenar una fecha se
utiliza el tipo de dato Date, por ejemplo, si se necesita calcular el número de días entre dos fechas
el procedimiento es el siguiente:
1. Sub Dias()
2. Dim Inicio As Date
3. Dim Fin As Date
4. Inicio = #1/1/2016#
5. Fin = Date
6. MsgBox ("Han transcurrido " & Fin - Inicio & " días en este año")
7. End Sub

El mensaje que genera la rutina anterior se muestra en la


Figura 2.35.

¿Cómo funciona el signo igual?


Para asignar un valor a una variable VBA usa el signo “=” para
realizarlo, normalmente en la vida cotidiana, se usa el signo
“=” como símbolo de igualdad, por lo que expresiones como la
que se muestra pueden causar conflicto. Figura 2.35 Mensaje de
1. x=x+1 procedimiento que usa fechas.

31
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

En la realidad nunca el valor de x será igual a de x+1. Para VBA y para muchos lenguajes de
programación esto es posible porque lo que VBA realiza primero es incrementar en uno la variable

x y después la asigna a la misma variable “x”, es importante recordar siempre que VBA usa el
signo “=” como un operador no como un signo de igualdad.

2.6.2 Comentarios
Los comentarios son una instrucción diferente en VBA estos son ignorados por Excel y sirven para
ayudar a quien escribe el código a entenderlo, se pueden usar comentarios muy cortos o muy
extensos, de acuerdo a lo que se necesite, es recomendable usar comentarios para que cuando
se desee modificar el código sea más sencillo o te ayude a recordar lo que hacia ese
procedimiento.

En VBA un comentario inicia siempre con un apostrofe (‘). VBA ignorará lo que este después de
este, es posible ingresar comentarios de dos maneras:
Al iniciar una nueva línea de código:
1. Function RaizCuadrada(numero)
2. 'Esta función calcula la raíz cuadrada de la variable "numero"
3. RaizCuadrada = numero ^ (1 / 2)
4. End Function

Después de una instrucción:


1. Function RaizCuadrada(numero)
2. RaizCuadrada = numero ^ (1 / 2) 'Calcula la raíz cuadrada de "numero"
3. End Function

Existe un caso especial, cuando un apostrofe se encuentra entre comillas, VBA no lo entenderá
como comentario, como se muestra en el siguiente código:
1. Sub MuestraMensaje()
2. MsgBox "¡Hola ' Adios!"
3. End Sub

Cuando se está examinando un código y solo queremos probar una parte de él, lo que se puede
hacer es borrar todo lo demás, pero esto es una pérdida de tiempo, otra opción más viable es
comentar todo lo que no deseamos que se ejecute.

Una forma fácil de comentar varias líneas de código es la siguiente:


Ir a ver → Barra de herramientas → Edición. Se activará la barra de edición como la
mostrada en la Figura 2.36.
Para agregar un apostrofe a todas las líneas seleccionamos en icono Bloque con
comentarios.
Para quitar los apostrofes de comentarios, seleccionamos el icono Bloque sin
comentarios.

Figura 2.36 Barra de herramientas Edición.

32
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Es de utilidad considerar lo siguiente al incluir comentarios.


• Identificarte como el autor, para que quien lo usa sepa quién lo hizo y pueda contactarte
para cualquier duda.
• Para describir el propósito de cada procedimiento Sub o Function que escribas.
• Hacer comentarios para dar un seguimiento a lo que escribes.
• Para describir variables que usas, si no estás muy familiarizado con los nombres.
• Para saber cómo solucionar los errores que puedan presentarse.
• Para indicar el final de una instrucción.

2.6.3 Operadores
Aritméticos Tabla 2.2 Operadores aritméticos.
Los operadores aritméticos funcionan entre variables
y constantes se muestran en la Tabla 2.2. En el caso Operador Función
del operador “\” por ejemplo si realizamos la + Adición o suma
operación 13\5 el resultado será 2, es decir, solo la - Resta
parte entera y el operador Mod regresará en la misma * Multiplicación
operación Mod(13,5) el número 3, es decir, el residuo / División
de tomar solo la parte entera de la división. ^ Potenciación
\ División entera
Lógicos Mod Residuo de la división entera
Los operadores lógicos se
muestran en la Tabla 2.3, los que Tabla 2.3 Operadores lógicos.
más se usan son: Not, And y Or.
Operador Función
Comparación Not Realiza una negación lógica de una expresión
Los operadores de comparación And Realiza una conjunción de dos expresiones
se muestran en la Tabla 2.4 Estas Or Realiza una disyunción entre dos expresiones
expresiones devuelven dos tipos Xor Realiza una exclusión entre dos expresiones
de respuesta; “True” si la Eqv Realiza una equivalencia entre dos expresiones
comparación se cumple y “False” Imp Realiza una implicación entre dos expresiones
si la comparación no se cumple.

Tabla 2.4 Operadores de comparación.

Operador Función
= (Igual) Compara si una expresión es exactamente igual a otra.
<> (Diferente a) Compara si dos expresiones son diferentes.
< (Menor que) Compara si la primera expresión es menor a la segunda expresión.
> (Mayor que) Compara si la primera expresión es mayor a la segunda expresión.
<= (Menor o igual que) Compara si la primera expresión es menor o igual a la segunda
expresión.
>= (Mayor o igual que) Compara si la primera expresión es mayor o igual a la segunda
expresión.

33
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Concatenación
Para concatenar (unir) se usa el carácter “&” se pueden concatenar números o cadenas de
caracteres como se muestra en el siguiente ejemplo donde el código es el siguiente y el resultado
se muestra en la Figura 2.37.
1. Sub Concatenacion()
2. Const A As Integer = 1
3. Const B As Integer = 2
4. Const Nombre As String = "Guadalupe"
5. MsgBox A & B & Nombre
6. End Sub

Prioridad de las operaciones


La prioridad de las operaciones en VBA tiene la
misma que en Excel, la potenciación es la primera,
después multiplicación suma y resta. Se pueden
usar paréntesis para cambiar el orden, los paréntesis
se resuelven del interno al más externo.

2.6.4 Arreglos
Figura 2.37 Resultado de concatenación.
Arreglos fijos
En los lenguajes de programación es muy común usar arreglos, un arreglo es un grupo de variables
que comparten el mismo nombre, así cuando queremos saber el valor de una variable en
específico, necesitamos el nombre de la variable y la posición o índice del elemento de ese arreglo,
por ejemplo si tenemos un arreglo de cadenas de caracteres con 7 elementos que corresponden
a los días de la semana y nombramos al arreglo como DiasSemana, nos podemos referir al primer
elemento del arreglo como DiasSemana(1), al segundo como DiasSemana(2) y así
sucesivamente.

En ingeniería constantemente se llama a estos arreglos como vectores o matrices.

Para declarar un arreglo o vector se usan las siguientes instrucciones:


1. Dim Arreglo(1 To 100) As Integer

El arreglo anterior cuenta con 100 elementos, en el ejemplo siguiente, se define el arreglo de 0 a
100, este arreglo tendrá 101 elementos:
1. Dim Arreglo(0 To 100) As Integer

O una manera más sencilla es la siguiente instrucción:


1. Dim Arreglo(100) As Integer

Para declarar arreglo multidimensional se usan las siguientes instrucciones:


1. Dim Arreglo(1 To 10, 1 To 10) As Integer

Para hacer referencia a algún elemento de este arreglo se usa:


1. Arreglo(3, 7) = 10

34
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Arreglos dinámicos
Un arreglo dinámico es aquel que puede cambiar el número de elementos durante algún
procedimiento para esto, al declarar el arreglo, no se tiene que indicar cuantos elementos tendrá,
ya sea un arreglo de una dimensión o multidimensional. A continuación, se ejemplifica la forma de
declarar un arreglo dinámico:
1. Dim Arreglo() As Integer

Antes de usar el arreglo en algún procedimiento, es necesario redimensionar el arreglo esto se


hace con la instrucción Redim como lo muestra el siguiente ejemplo; donde NumElementos va
cambiando conforme se quiere cambiar el número de elementos en el arreglo:
1. Redim Arreglo(1 To NumElementos)

La instrucción anterior redimensiona el arreglo, pero elimina los elementos que existían antes de
hacer el redimensionamiento, si lo que se quieres es que el arreglo cambie el número de elementos
que contiene, pero sin borrar los elementos anteriores, se puede usar la instrucción Redim
Preserve como lo muestra el ejemplo siguiente:
1. Redim Preserve Arreglo(1 To NumElementos)

2.6.5 Estructuras de decisión


If - Then
Esta es probablemente la estructura de decisión más importante y se usa en casi todos los
programas desarrollados en VBA. Se puede usar la instrucción If-Then cuando se quiere ejecutar
una o más instrucciones condicionalmente. Existe la sentencia Else, que es opcional y sirve para
ejecutar instrucciones si el principal condicionamiento no es verdadero, el siguiente ejemplo
muestra el uso de la instrucción If-Then-Else.
1. Sub VerificarUsuario()
2. Usuario = InputBox("Escriba su nombre")
3. If Usuario = "Luis González" Then
4. MsgBox ("Bienvenido Luis")
5. '...[ Mas código aquí ]...
6. Else
7. MsgBox ("Lo siento, usted no tiene acceso a este procedimiento")
8. End If
9. End Sub

Otras formas de usar la instrucción If-Then se muestran a continuación:


Instrucción If-Then en una sola línea
1. Sub Saludar()
2. If Time < 0.5 Then MsgBox ("Buenos días")
3. End Sub

Usar la instrucción ElseIf esta se usa cuando se quieren evaluar más de una condición el
siguiente ejemplo ilustra el uso de esta instrucción:
1. Sub Saludar2()
2. If Time < 0.5 Then
3. MsgBox ("Buenos días")
4. ElseIf Time >= 0.5 And Time < 0.75 Then
5. MsgBox ("Buenas tardes")
6. Else
7. MsgBox ("Buenas noches")

35
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

8. End If
9. End Sub

Select Case
Esta estructura de decisión toma una opción dentro de tres o más opciones (también funciona para
dos opciones, que es lo que hace la estructura If-Then). En el siguiente ejemplo se ilustra el
funcionamiento de la estructura Select Case donde dependiendo de la variable Usuario se muestra
un mensaje personalizado:
1. Sub VerificarUsuario()
2. Dim Usuario As String
3. Usuario = InputBox("Escriba su nombre")
4. Select Case Usuario
5. Case "Luis González"
6. MsgBox ("Bienvenido Luis González")
7. Case "Fernanda Martínez"
8. MsgBox ("Bienvenido Fernanda Martínez")
9. Case "José Flores"
10. MsgBox ("Bienvenido José Flores")
11. Case "María Salas"
12. MsgBox ("Bienvenido María Salas")
13. Case Else
14. MsgBox ("Lo siento, usted no tiene acceso a este procedimiento")
15. End Select
16. End Sub

GoTo
Esta instrucción representa la manera más sencilla para cambiar el flujo de un programa, la
instrucción GoTo, transfiere la ejecución del programa a otra instrucción la cual se especifica
mediante una etiqueta. El siguiente ejemplo muestra el uso de la instrucción:
1. Sub VerificarUsuario()
2. Usuario = InputBox("Escriba su nobre")
3. If Nombre <> "Luis González" Then GoTo NombreIncorrecto
4. MsgBox ("Bienvenido Luis")
5. ' ...[ Mas código aquí ]...
6. Exit Sub
7. NombreIncorrecto:
8. MsgBox ("Lo siento, usted no tiene acceso a este precedimiento")
9. End Sub

Este procedimiento usa la instrucción InputBox para obtener el nombre de usuario. Después de
esto toma una decisión si el usuario es diferente a “Luis González” se usará la instrucción GoTo
que nos llevará a la etiqueta NombrerIncorrecto y ejecutará las líneas siguientes, en cambio si el
nombre es igual a “Luis González”, el código se ejecutara normalmente.

Podemos observar que existe una instrucción Exit Sub esta instrucción indica que se tiene que
salir del procedimiento, sin esta instrucción el mensaje después de este se mostraría.

36
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

2.6.6 Estructuras de ciclo


For - Next
Esta instrucción se usa cuando se quiere repetir un número determinado de veces alguna
instrucción, pensemos en el siguiente ejemplo, queremos ir sumando de uno en uno hasta el
número 100, el ejemplo se ilustra a continuación:
1. Sub Agregar()
2. Dim i As Integer
3. Dim Total As Integer
4. Total = 0
5. For i = 1 To 100
6. Total = Total + 1
7. Next i
8. MsgBox Total
9. End Sub

El resultado será un mensaje con el número 100.

Do While - Loop
Esta estructura realiza una instrucción siempre y cuando la condición establecida sea válida y la
repite hasta que la condición sea falsa.

El siguiente ejemplo usa la estructura Do Loop y realiza una cuenta regresiva del 10 a 1 para
después mostrar el mensaje “¡Hola a todos!”.
1. Sub Hola10()
2. Dim Contador As Integer
3. Contador = 11
4. Do While Contador > 1
5. Contador = Contador - 1
6. MsgBox Contador
7. Loop
8. MsgBox "¡Hola a todos!"
9. End Sub

Do Loop - While
Realiza una vez la instrucción y después pregunta por la sentencia, si esta es verdadera, la repite
hasta que se encuentre con que la sentencia sea falsa.

El ejemplo siguiente realiza una cuenta regresiva del 10 a 1 para después mostrar el mensaje
“¡Hola a todos!”.
1. Sub Hola10()
2. Dim Contador As Integer
3. Contador = 11
4. Do
5. Contador = Contador - 1
6. MsgBox Contador
7. Loop While Contador > 1
8. MsgBox "¡Hola a todos!"
9. End Sub

37
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Do Until - Loop
Esta estructura a diferencia de Do While-Loop realiza una las instrucciones que se encuentren
dentro del ciclo hasta que la sentencia principal sea cierta.

El ejemplo siguiente realiza una cuenta regresiva del 10 a 1 para después mostrar el mensaje
“¡Hola a todos!”.
1. Sub Hola10()
2. Dim Contador As Integer
3. Contador = 11
4. Do Until Contador = 1
5. Contador = Contador - 1
6. MsgBox Contador
7. Loop
8. MsgBox "¡Hola a todos!"
9. End Sub

Do - Loop Until
Esta estructura, realiza la acción y después pregunta por la condición y seguirá realizando las
instrucciones hasta que la instrucción sea verdadera.

El ejemplo siguiente realiza una cuenta regresiva del 10 a 1 para después mostrar el mensaje
“¡Hola a todos!”.
1. Sub Hola10()
2. Dim Contador As Integer
3. Contador = 11
4. Do
5. Contador = Contador - 1
6. MsgBox Contador
7. Loop Until Contador = 1
8. MsgBox "¡Hola a todos!"
9. End Sub

2.6.7 Estructuras para controlar objetos


For Each - Next
Esta estructura sirve para realizar instrucciones para cada objeto dentro de una colección de
objetos, una colección de objetos consiste en un numero de objetos del mismo tipo, por Excel es
una colección de libros abiertos (la colección Workbooks) y cada Libro tiene una colección de hojas
(la colección Worksheets)

Cuando se necesita moverse a través de una colección de objetos se usa la estructura For Each -
Next. En el siguiente ejemplo se ilustra el uso de esta estructura en el cual se eliminan las hojas
del libro y solo se deja la primera.
1. Sub EliminarHojas()
2. Dim Hoja As Worksheet
3. For Each Hoja In Worksheets
4. If Worksheets.Count = 1 Then Exit For
5. Hoja.Delete
6. Next Hoja
7. End Sub

38
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

With - End With


Ejecuta una serie de instrucciones que hacen referencia repetidamente a un único objeto o
estructura, por lo que las instrucciones pueden utilizar una sintaxis simplificada al acceder a los
miembros del objeto o estructura. Cuando use una estructura, solo podrá leer los valores de los
miembros o invocar métodos, y recibirá un error si intenta asignar valores a los miembros de una
estructura utilizada en una instrucción With...End With.

El siguiente ejemplo muestra el cambio de formato al tipo de fuente de las celdas seleccionadas:

1. With Selection.Font
2. .Name = “Arial Narrow”
3. .Size = 20
4. .Italic = True
5. .Underline = True
6. End With

2.6.8 Consideraciones al escribir código en VBA


Colocar sangrías
En general para todos los lenguajes de programación, colocar sangrías es una técnica muy útil
para poder entender un código, observemos los siguientes dos ejemplos.
• Código sin sangrías:
1. Sub TableroAjedrez()
2. Dim Renglon As Integer
3. Dim Columna As Integer
4. For Renglon = 1 To 8
5. If Renglon Mod 2 = 0 Then
6. For Columna = 1 To 8 Step 2
7. Cells(Renglon, Columna).Interior.Color = RGB(0, 0, 0)
8. Columns(Columna).ColumnWidth = 6
9. Next Columna
10. Else
11. For Columna = 2 To 8 Step 2
12. Cells(Renglon, Columna).Interior.Color = RGB(0, 0, 0)
13. Columns(Columna).ColumnWidth = 6
14. Next Columna
15. End If
16.. Rows(Renglon).RowHeight = 30
17. Next Renglon
18. End Sub

• Código con sangrías:


1. Sub TableroAjedrez()
2. Dim Renglon As Integer
3. Dim Columna As Integer
4. For Renglon = 1 To 8
5. If Renglon Mod 2 = 0 Then
6. For Columna = 1 To 8 Step 2
7. Cells(Renglon, Columna).Interior.Color = RGB(0, 0, 0)
8. Columns(Columna).ColumnWidth = 6
9. Next Columna
10. Else
11. For Columna = 2 To 8 Step 2
12. Cells(Renglon, Columna).Interior.Color = RGB(0, 0, 0)
13. Columns(Columna).ColumnWidth = 6

39
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

14. Next Columna


15. End If
16. Rows(Renglon).RowHeight = 30
17. Next Renglon
18. End Sub

Los dos ejemplos anteriores realizan la misma acción,


un tablero de ajedrez en la hoja activa como el que se
muestra en la Figura 2.38, la diferencia entre estos es
que el código con sangrías es más fácil de entender, en
este se usan estructuras de decisión y estructuras de
ciclo, tenemos una estructura de decisión If Then-Else
y dentro de esta tenemos una estructura de repetición
que es For-Next.

Continuación de la instrucción
Cuando se tienen instrucciones o comentarios que no Figura 2.38 Tablero de ajedrez creado
por un procedimiento.
caben en una sola línea, es posible que los escribamos
en varias líneas y VBA lo entenderá como la misma instrucción, o que se necesita es colocar el
carácter “_” al final del renglón y separado por un espacio, con esto podremos continuar la
instrucción en el siguiente renglón, como en el ejemplo siguiente:
1. ' Este procedimiento crea un tablero de ajedrez en la hoja activa _
2. cambiando el ancho de las columnas y renglones además del color del _
3. fondo de las celdas.

2.7 Modelo de objetos en Excel


2.7.1 ¿Qué son los objetos en Excel?
VBA es un lenguaje orientado a objetos, la base de la programación orientada a objetos es que
Excel como aplicación está conformada de varios objetos individuales donde cada uno tiene sus
propiedades y utilidades, una aplicación de Excel contiene objetos como libros, hojas y celdas,
cada objeto tiene sus propias características y se les llaman propiedades y sus propias utilidades
que se llaman métodos y reaccionan a la interacción con el usuario, estos son los eventos.

Podemos hacer una similitud de estos objetos con los objetos que tienes frente a ti diariamente,
tienes una computadora, una cama, un refrigerador, una mesa, un carro, un lápiz, una libreta etc.,
cada uno de ellos tiene características especiales, como el color el ancho y alto, y tienen diferentes
utilidades, la computadora para trabajar con Excel, la cama para dormir, refrigerador para
conservar alimentos etc.

Cada objeto de Excel tiene sus propiedades y métodos, por ejemplo, una celda es un objeto y tiene
propiedades como su ubicación, el alto de la celda, el color de relleno entre otras, un libro también
es un objeto y tiene métodos como: cuando se abre, cuando se cierra, cuando se agrega una
gráfica etc.

En Excel se trabajará con objetos como workbooks, worksheets y range principalmente, los objetos

40
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

dentro de Excel están ordenados jerárquicamente de acuerdo a un modelo de objetos, y está


basado en las relaciones entre los objetos de Excel.

El modelo de objetos de Excel es la base del funcionamiento de VBA. VBA es el lenguaje de


programación para Excel, pero lo es también para Word, Power Point, Access y Outlook, cada una
de estas aplicaciones usa VBA y cada una tiene sus propias necesidades dado que son
aplicaciones que están diseñadas para diferentes tareas.

2.7.2 ¿Cómo funcionan los objetos?


Como en el mundo real, podemos describir como un modelo de objetos, una casa con cuartos, los
cuartos tienen diferentes objetos, pueden tener ropa, sillas etc., se puede observar la relación entre
ellos, es decir, la ropa pertenece a una recamara, y a su vez la recamara a la casa.

En Excel la aplicación es la que contiene todos los objetos, es como la casa, dentro de la aplicación
de Excel se tienen libros, dentro de los libros hojas, dentro de estas las celdas, estas están en una
estructura jerárquica.

Por ejemplo, si se desea ir a la celda A1 de la Hoja1 del libro de Excel. Podemos usar el siguiente
código:
1. Application.ThisWorkbook.Sheets("Hoja1").Range("A1").Select

Normalmente Excel entiende la jerarquía de objetos y no es necesario escribir todas las


instrucciones; el siguiente código hace lo mismo, se mueve a la celda A1 de la Hoja1 del libro
abierto
1. Range("A1").Select

2.7.3 Colecciones
Muchos de los objetos de Excel forman colecciones, por ejemplo, una casa está situada en un
vecindario, el vecindario seria la colección de casas.

En un libro, tenemos una colección de hojas que se llama worksheets. Si se quiere referir a un
objeto de una colección, por ejemplo, la hoja 1 de la colección worksheets podemos hacerlo con
la posición en la colección o por el nombre de la hoja como se puede ver a continuación:
1. Worksheets(1).Select
2. Worksheets("Hoja1").Select

Si queremos hacer referencia a la Hoja1 del libro1 sería como sigue:


1. Workbooks("Libro1").Worksheets("Hoja1").Select

2.7.4 Propiedades
Todos los objetos tienen propiedades, y son las características que describen a los objetos, y
determinan como se ven, como se comportan si son visibles o no, en VBA se pueden hacer dos
cosas con las propiedades:

Saber el valor de una propiedad de algún objeto.

41
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Cambiar el valor de esta propiedad.

Por ejemplo, las celdas de Excel tienen una propiedad llamada Value, esta propiedad nos dice
que es lo que contiene la celda, si quisiéramos hacer un procedimiento que nos muestre el valor
que contiene una celda, sería como sigue, mostrando el mensaje de la Figura 2.39:
1. Sub MostrarContenido()
2. Contenido = Worksheets("Hoja1").Range("A1").Value
3. MsgBox Contenido
4. End Sub

Ahora para cambiar el valor de una propiedad, siguiendo el


mismo ejemplo con la propiedad Value de una celda seria como
el que se muestra a continuación:
1. Sub CambiarValor()
2. Worksheets("Hoja1").Range("A1").Value = 123
3. End Sub

Este procedimiento Sub cambiará lo que muestra la celda A1 y Figura 2.39 Mensaje que
colocará el número 123. muestra el contenido de una
celda.
Muchos de los objetos de Excel tienen propiedades comunes, aunque no todos, un ejemplo es la
propiedad Visible o la propiedad Name, también hay propiedades que son de solo lectura, es decir
que no podemos cambiarlas mediante un procedimiento.

Para enlistar las propiedades de los objetos, se puede


escribir el nombre del objeto seguido de un punto, y este
mostrará una lista de propiedades y métodos como en la
Figura 2.40.

Las propiedades se diferencian de los métodos por el


ícono que muestran, una propiedad muestra el ícono
Figura 2.40 Lista automática de
y un método el ícono .
propiedades y métodos de objetos en
Excel .
2.7.5 Métodos
Un método es una acción que podemos desarrollar con un objeto, estos pueden hacer que
cambien las propiedades de los objetos o hacer que estos hagan algo.

En el siguiente ejemplo se muestra el método ClearContents del objeto Range y sirve para borrar
lo que contengan las celdas especificadas.
1. Sub Borrar()
2. Range("A1:A10").ClearContents
3. End Sub

Algunos métodos pueden tener uno o más argumentos. Un argumento es un valor que ayuda a
realizar la acción correctamente, en los métodos los argumentos se colocan después del método
y si contiene más de un argumento se separan por una coma.

42
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

El ejemplo mostrado a continuación activa la Hoja1 y copia el contenido de la celda A1 a la celda


B1 usando el objeto Range y el método Copy:
1. Sub CopiarCelda()
2. Worksheets("Hoja1").Activate
3. Range("A1").Copy Range("B1")
4. End Sub

Otro ejemplo es agregar una hoja al libro actual.


1. Sub AgregarHoja()
2. Worksheets.Add
3. End Sub

De igual manera como para las propiedades, para enlistar los métodos de un objeto se escribe el
nombre del objeto seguido de un punto y se abrirá una lista automática de propiedades y eventos
como la de la Figura 2.40.

Las propiedades se diferencian de los métodos por el ícono que muestran, una propiedad muestra
el ícono y un método el ícono .

2.7.6 Eventos
Este es un tema que es necesario entender claramente. Un objeto puede responder a diferentes
eventos, un evento es básicamente algo que pasa en Excel, por ejemplo, cuando un libro es
abierto, cuando una ventana u hoja se activa o desactiva, cuando se edita el contenido de una
celda, cuando un libro es guardado, cuando una combinación de teclas es presionada, cuando
pasa un lapso de tiempo o cuando un error ocurre.

Podemos hacer que se ejecuten procedimientos cuando un evento ocurre. Excel tiene muchos
eventos, y no todos los objetos responden a todos los eventos, incluso existen objetos que no
responden a ningún evento.

Para acceder a los eventos de un libro y una Hoja es necesario seguir los pasos que se muestran
a continuación:
Ir al Editor de Visual Basic.
En la ventana explorador de proyectos seleccionar
una hoja para el objeto Worksheet o ThisWookbook
para el objeto Workbook.
Hacer clic derecho → Ver código (Figura 2.41).

Para el objeto Workbook se mostrará la ventana de la


Figura 2.42, donde en la parte 2 podemos ver todos los
eventos del objeto:

Para el objeto Worksheet se mostrará la ventana de la Figura 2.41 Ver código de objetos.
Figura 2.43, donde en la parte 2 podemos ver todos los
eventos del objeto:

43
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Figura 2.42 Eventos del objeto Workbook.

Figura 2.43 Eventos del objeto Worksheet.

2.7.7 Buscador de objetos, ayuda y listado automático


En ocasiones es difícil poder trabajar con tantos objetos, propiedades, métodos y eventos para
esto existen estas herramientas para hacer más fácil su manejo.
El buscador de objetos
Esta herramienta se muestra en la Figura 2.44, y puede ayudar a encontrar los objetos que están
disponibles, para abrir esta herramienta se pueden realizar las instrucciones siguientes:
En el editor VBE ir a Ver → Examinador de Objetos.
Otra opción es presionar F2.

Ayuda de VBA
La ayuda de VBA muestra la
descripción de cada objeto,
propiedad y método disponible y en
ocasiones muestra un ejemplo de
programación. Esta es una
excelente herramienta para
conocer y obtener ayuda rápida
acerca de VBA.

Para mostrar la ayuda, solo es


necesario presionar F1 y abrirá la
ayuda en línea de VBA Figura 2.44 Examinador de objetos.

44
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Listado automático.
Una característica importante y útil de VBE es que muestra automáticamente un listado de las
propiedades y métodos mientras los escribes, este listado se muestra en la Figura 2.45.

Esta característica se
activa al momento de
escribir el nombre del
objeto o colección y
después un punto “.”,
automáticamente se
desplegará esta lista y
con las flechas de
dirección seleccionamos Figura 2.45 Listado automático de propiedades y métodos.
la propiedad deseada,
podemos comenzar a escribir el nombre de la propiedad o método que deseemos y para
seleccionarlo hay que pulsar la tecla Tab.

2.8 Comunicación con el usuario


VBA provee una manera de interactuar con el usuario, a través de una caja de dialogo que provee
de información del usuario y así el programa sabrá que hacer. Las opciones con las que se dispone
en VBA son las siguientes, algunas de ellas ya se han usado anteriormente, por lo que resultarán
familiares.

2.8.1 Cuadro de mensaje MsgBox


Un MsgBox se puede usar para mostrar un mensaje al usuario, este mensaje puede ser solo
informativo como “Por favor espere”, “Acceso denegado” o esperar un tipo de respuesta del
usuario.

La función MsgBox puede tener los argumentos Aviso que es el mensaje que se mostrará en la
ventana, Botones que se mostrarán en la ventana, y el Título que tendrá la ventana, la estructura
es como se muestra a continuación:
1. MsgBox Aviso,Botones,Título
2. MsgBox (Aviso,Botones,Título)

El siguiente ejemplo muestra el mensaje “Bienvenido a Excel VBA” con los botones Si, No y
Cancelar y tiene el título “Saludar a usuarios” (Figura 2.46):
1. MsgBox "Bienvenido a Excel VBA", vbYesNoCancel, "Saludar a usuarios"

Figura 2.46 MsgBox con botones Si,


Figura 2.47 MsgBox con botones Si, No.
No, Cancelar.

45
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

El siguiente ejemplo muestra un mensaje “Bienvenido a Excel VBA” con los botones Si y No, tiene
el título “Saludar a usuarios” y además muestra el Icono de información (Figura 2.47).
1. MsgBox "Bienvenido a Excel VBA", 4 + 64, "Saludar a usuarios"

Para obtener una respuesta del usuario la podemos igualar a una variable o usar esa respuesta
directamente.
El siguiente ejemplo muestra un MsgBox donde se pregunta por borrar una celda.
1. Sub Pregunta()
2. Dim Respuesta As Long
3. Respuesta = MsgBox("¿Desea eliminar contenido de la celda?", vbYesNo _
4. + vbQuestion, "Eliminar")
5. Select Case Respuesta
6. Case vbYes
7. ActiveCell.Clear
8. Case vbNo
9. MsgBox "No se eliminó el contenido"
10. End Select
11. End Sub

El mensaje mostrado es como en la Figura 2.48. Si se


selecciona el botón Si, se eliminará el contenido de la
celda activa, en cambio sí selecciona No, solo mostrará un
mensaje “No se eliminó el contenido”.

Para el segundo caso hacemos la misma pregunta,


Figura 2.48 MsgBox con opciones
pero no usamos una variable:
Si y No.
1. Sub Pregunta()
2. If MsgBox("¿Desea eliminar contenido de la celda?", vbYesNo _
3. + vbQuestion, "Eliminar") = vbYes Then
4. ActiveCell.Clear
5. Else
6. MsgBox "No se eliminó el contenido"
7. End If
8. End Sub

Los botones e iconos disponibles en un MsgBox son los mostrados en la Tabla 2.5. Las posibles
respuestas se muestran en la Tabla 2.6.

Tabla 2.5 Botones e iconos disponibles en MsgBox.


Instrucción Valor Imagen
vbOKOnly 0
vbOKCancel 1
vbAbortRetryIgnore 2
vbYesNoCancel 3
vbYesNo 4
vbRetryCancel 5
vbCritical 16
vbQuestion 32

46
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Tabla 2.5 (continuación).


Instrucción Valor Imagen
vbExclamation 48
vbInformation 64
vbDefaultButton1 0 Primer botón activado
vbDefaultButton2 256 Segundo botón activado
vbDefaultButton3 512 Tercer botón activado
vbDefaultButton4 768 Cuarto botón activado

Tabla 2.6 Respuestas de un MsgBox.


Instrucción Valor Función
vbOk 1 El usuario dio clic en Ok
vbCancel 2 El usuario dio clic en Cancelar
vbAbort 3 El usuario dio clic en Anular
vbRetry 4 El usuario dio clic en Reintentar
vbIgnore 5 El usuario dio clic en Omitir
vbYes 6 El usuario dio clic en Si
vbNo 7 El usuario dio clic en No

2.8.2 Cuadro de mensaje InputBox


Un InputBox se usa para obtener información breve escrita por el usuario, esta información puede
ser un valor numérico, una cadena de caracteres o incluso un rango de celdas. La función
InputBox acepta como argumentos un Aviso que es el mensaje que mostrará al usuario, un Título
que tendrá la ventana y un ValorPorDefecto que es opcional:
1. Respuesta = InputBox(Aviso,Título,ValorPorDefecto)

A continuación, se muestra un ejemplo que pregunta la edad al usuario y el resultado en la Figura


2.49:
1. Respuesta = InputBox("¿Qué edad tiene?", "Datos personales", "Escriba su edad")

Un InputBox siempre regresa una cadena de caracteres


como respuesta, por lo que, si necesitamos conocer un
valor, tenemos que hacer una validación de esos caracteres,
en el ejemplo siguiente, muestra el uso de un InputBox para
agregar hojas a un libro, donde se pregunta por el número
de hojas que desea ingresar y después verifica la respuesta, Figura 2.49 InputBox.
si es un número el procedimiento agrega las hojas, de lo contrario advierte al usuario de que no
se introdujo un número válido, el mensaje se muestra en la Figura 2.50.
1. Sub AgregarHojas()
2. Dim Aviso As String
3. Dim Titulo As String
4. Dim ValorPorDefecto As Long
5. Dim NumHojas As String
6. Aviso = "¿Cuántas hojas quiere agregar?"
7. Titulo = "Agregar hojas"

47
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

8. ValorPorDefecto = 1
9. NumHojas = InputBox(Aviso, Titulo, ValorPorDefecto)
10. If NumHojas = "" Then Exit Sub
11. If IsNumeric(NumHojas) Then
12. If NumHojas > 0 Then Sheets.Add Count:=NumHojas
13. Else
14. MsgBox "Número no aceptado"
15. End If
16. End Sub

Otro tipo de InputBox es el que nos regresa un rango de celdas, pertenece a los métodos del objeto
Application, a continuación, se muestra un ejemplo:
1. Sub ObtenerRango()
2. Dim Rango As Range
3. On Error Resume Next
4. Set Rango = Application.InputBox("Seleccione rango de celdas", Type:=8)
5. If Rango Is Nothing Then Exit Sub
6. MsgBox "El rango seleccionado es " & Rango.Address
7. End Sub

Este procedimiento mostrará la ventana de la Figura 2.51, en esta se puede seleccionar un rango
de celdas y después mostrará un mensaje con las celdas seleccionadas.

Figura 2.50 InputBox.


Figura 2.51 Método InputBox del objeto
Application.
2.8.3 GetOpenFilename
Este método es útil para poder buscar un archivo y obtener la ruta completa de este, abre una
ventana de dialogo común como la de la Figura 2.52. La sintaxis de esta instrucción es la siguiente:
1. Application.GetOpenFilename ([Filtro],[ÍndiceFiltro],[Título],[Múltiple])

Donde Filtro es el tipo de archivos a


mostrar y la sintaxis es “Etiqueta,
*.ext” el nombre de la etiqueta es lo
que mostrará en la información al
usuario y “*ext”, es la extensión del
archivo, se pueden agregar varios
tipos de filtros con la instrucción “&”,
para todos los archivos la extensión
es “*.*”. ÍndiceFiltro indica que
extensión en caso de haber más de
una en los filtros se mostrará por
defecto. Título es el nombre de la
Figura 2.52 Ventana Abrir.

48
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

ventana y Múltiple indica si se puede hacer la selección de varios archivos.

En el ejemplo siguiente se muestra la ventana de la Figura 2.52 y abre el cuadro de dialogo para
abrir cualquier tipo de archivo.
1. Sub NombreArchivo()
2. Dim Nombre As Variant
3. Nombre = Application.GetOpenFilename("All Files (*.*),*.*", 2, "Abrir un archivo”)
4. If Nombre = False Then MsgBox “No se seleccionó archivo”
5. End Sub

2.8.4 GetSaveAsFilename
Este método es similar a GetOpenFileName pero muestra la ventana de guardar, tiene la sintaxis
siguiente:
1. Application.GetSaveAsFilename ([Nombre],[Filtro],[ÍndiceFiltro],[Título])

Donde: Nombre es el nombre por defecto que le coloca como ayuda en donde se escribe el
nombre del archivo; Filtro determina el tipo de extensión del archivo; IndiceFiltro determina cual
extensión será la seleccionada por defecto, y Título es el título que tendrá la ventana.

El siguiente ejemplo muestra la ventana Guardar como la de la Figura 2.53.


1. Sub GuardarArchivo()
2. Dim Nombre As Variant
3. Nombre = Application.GetSaveAsFilename("Libro de Excel", _
4. "Libro de Excel (*.xlsx),*.xlsx,", 1, "Guardar libro actual")
5. If Nombre = False Then MsgBox "No se nombró al archivo"
6. End Sub

Figura 2.53 Ventana Guardar.

2.9 Trabajar con formularios


Un formulario es útil en VBA cuando se necesita obtener información más específica por parte del
usuario. Cuando se crea un formulario generalmente se realizan las siguientes acciones:
Determinar cómo será, cómo se usará y cuándo deberá aparecer en la aplicación.
Activar VBE e insertar un objeto UserForm.
Agregar controles al formulario.

49
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Modificar las propiedades de los controles o del formulario.


Escribir instrucciones para los eventos de los controles y formularios.
Escribir un procedimiento que muestre el formulario al usuario.

Algunas de estas acciones pueden parecer confusas, pero se explican a continuación.

2.9.1 Crear un formulario


Para insertar un formulario realice los siguientes
pasos:
Activar VBE desde Desarrollador → Código
→ Visual Basic o presionar la combinación
de teclas Alt+F11.
Seleccionar el libro en el que deseamos que
se encuentre el Formulario en el Explorador
de proyectos.
Ir a Insertar → UserForm.
Figura 2.54 Insertar un formulario.
La Figura 2.54 muestra el procedimiento para
insertar un nuevo formulario, y la Figura 2.55
muestra el formulario insertado.

2.9.2 Ejecutar un formulario


Para ejecutar un formulario pueden seguirse las
siguientes instrucciones:
Con el formulario seleccionado, presionar
el botón Ejecutar de la barra de
herramientas estándar o presionar F5.
Mediante la la ejecución de este desde un Figura 2.55 Formulario insertado UserForm1.
procedimiento como el mostrado a
continuación:
1. Sub Ejecutar()
2. UserForm1.Show
3. End Sub

La instrucción Show muestra el formulario en


pantalla.

Al realizar alguna de las acciones anteriores se


ejecuta el formulario de la Figura 2.56, podemos
notar que se encuentra vacío puesto que solo es
el formulario sin modificaciones. Las
modificaciones pueden ser insertar objetos o
cambiar las propiedades del formulario
Figura 2.56 Formulario en modo de
ejecución.

50
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

2.9.3 Controles
Cuando se ejecuta un formulario, VBA despliega una ventana flotante con
los controles que se pueden agregar, para agregar controles a un
formulario, usamos el cuadro de herramientas de la Figura 2.57. Si el
cuadro de herramientas no está visible se puede mostrar con las
siguientes instrucciones:
En VBE ir a Ver → Cuadro de herramientas.

En la Tabla 2.7 se muestra una descripción de cada control. Figura 2.57 Cuadro
de herramientas.
Para agregar un control a un formulario se hace lo
siguiente:
Hacer clic en el control que queremos
agregar en el cuadro de herramientas.
Dar clic en el formulario y arrastrar el puntero
para dibujar el control.

En la Figura 2.58 se muestra un formulario con


algunos de los controles disponibles. Figura 2.58 Formulario con controles.

Tabla 2.7 Controles de formulario.


Control función Imagen

Label Muestra texto.


TextBox Permite ingresar texto.
ComboBox Es una lista desplegable.
ListBox Despliega una lista de elementos.
CheckBox Permite verificar alguna instrucción.
OptionButton Selecciona una opción entre diferentes opciones.
ToggleButton Permite colocar un botón de Encendido/Apagado.
Frame Contenedor de controles.
CommandButton Es un botón pulsable.
TabStrip Permite crear pestañas.
MultiPage Permite crear pestañas.
ScrollBar Permite desplazarse.
SpinButton Permite cambiar el valor mediante un clic.
Image Puede contener una imagen.
RefEdit Permite al usuario seleccionar un rango.

51
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

2.9.4 Personalizar formulario y controles


Cambiar propiedades de controles y formularios
Todos los formularios y controles tienen propiedades que determinan
cómo se comportan y cómo se ven. Las propiedades se pueden cambiar
desde la ventana de propiedades, también es posible modificar
propiedades desde un procedimiento. La ventana de propiedades de un
formulario se muestra en la Figura 2.59. Si la ventana no es visible se
puede activar mediante las instrucciones siguientes:
Presionar la tecla F4 mientras este seleccionado el formulario u
objeto.

Entre las propiedades más comunes podemos mencionar: el ancho del


objeto, largo, posición vertical, posición horizontal, si es visible o no, si
está bloqueado o no, el color, el tipo de letra. Algunas propiedades
comunes de los controles se muestran en la Tabla 2.8. Figura 2.59 Ventana
propiedades.
Tabla 2.8 Propiedades comunes a los controles.
Propiedad Descripción
Accelerator Una letra que en combinación con la tecla Alt, ejecuta el objeto.
Auto-Size Determina si un control se ajusta al tamaño de lo que contiene.
BackColor Determina el color de fondo de un objeto
BackStyle Determina si un objeto es transparente o no.
Caption Es el texto que mostrará el objeto.
Left y Top Determinan la posición dentro del formulario.
Name Es el nombre del objeto con este podemos hacer referencia a él.
Picture Es el archivo de imagen que mostrará un objeto.
Value El valor del control.
Visible Determina si un objeto es visible o no.
Width y Heigth Determinan el tamaño del objeto.

Para cambiar o leer el valor de las propiedades es necesario escribir el nombre del objeto seguido
de un punto “.” y el nombre de la propiedad, a continuación, se muestra un ejemplo para cambiar
el color del fondo del formulario:
900. UserForm1.BackColor = vbRed

2.9.5 Uso de los controles


Eventos de controles
Todos los controles tienen eventos, para indicarnos que está sucediendo con el control, un ejemplo
sencillo es el de un botón, un evento es hacer clic en él, otros eventos pueden ser: dar doble clic ,
cuando obtiene el foco del tabulador, cuando se presiona alguna tecla, cuando se pasa el mouse
sobre él entre otros. A continuación, se muestran dos eventos de un objeto CommandButton los
eventos son el clic y doble clic y muestran dos mensajes diferentes:

52
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

1. Private Sub CommandButton1_Click()


MsgBox "Este es el evento clic"
End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)


MsgBox "Este es el evento dole clic"
End Sub

En el ejemplo anterior se puede observar la siguiente estructura: el nombre del objeto y el del
evento están separados con el carácter “_”, dentro de los paréntesis se encuentran argumentos
propios del evento que se usan para interpretar los eventos de cada objeto. La forma general de
un evento es la siguiente:
1. Private Sub NombreObjeto_Evento()
[Instrucciones]
End Sub

Dependiendo de que evento nos interese


usar de cada control las instrucciones se
tienen que programar dentro del evento
del control, para ver los eventos de cada
control, es necesario hacer doble clic
sobre el control y se abrirá la ventana de
código del control como la mostrada en la
Figura 2.60 es la ventana del evento clic
de un objeto CommandButton.

En la parte 1 de la Figura 2.60 se enlistan Figura 2.60 Ventana código para el control
todos los controles disponibles, y en la CommandButton1.
parte 2 se enlistan los eventos del control

En la Figura 2.61 se muestran los


eventos de un control CommandButton,
entre los que se pueden listar: clic, doble
clic, presionar una tecla, mover el mouse
sobre el botón etc.

Figura 2.61 Eventos de control CommandButton.


Control Label
Es una etiqueta que contiene una cadena de texto, en la
Figura 2.62 se muestran distintos tipos de objetos Label.

Figura 2.62 Ejemplo uso Label.

53
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Control CommandButton
Este control es un botón común que se presiona
y realiza una acción, los estos botones pueden
mostrar una imagen como en la Figura 2.63.

Figura 2.63 Ejemplo uso CommandButton.


Control TextBox
Permite ingresar cadenas de caracteres al usuario, en la
Figura 2.64 se muestra un ejemplo de este control.

Figura 2.64 Ejemplo uso TextBox.


Control ComboBox
Este control es una lista desplegable que permite
seleccionar una opción y permite incluir una opción que
no esté en la lista. En la Figura 2.65 se muestra este
control.

Control ListBox Figura 2.65 Ejemplo uso ComboBox.


Este objeto permite hacer una lista de elementos y mostrarlos
al usuario, en la Figura 2.66 se muestra el uso del objeto
ListBox.

Figura 2.66 Ejemplo uso ListBox.

Control CheckBox
Un control CheckBox permite hacer una
selección binaria, sí o no, verdadero o falso,
encendido o apagado, en el siguiente ejemplo
(Figura 2.67) se muestra el uso con ayuda de
un botón, al presionar el botón mostrará que
casillas están marcadas. El código se muestra
a continuación:

Figura 2.67 Ejemplo uso CheckBox.

54
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

1. Private Sub CommandButton1_Click()


Dim Mensaje As String
If CheckBox1.Value = True Then Mensaje = Mensaje & "Opción 1 activada "
If CheckBox2.Value = True Then Mensaje = Mensaje & "Opción 2 activada "
If CheckBox3.Value = True Then Mensaje = Mensaje & "Opción 3 activada "
MsgBox Mensaje
End Sub

Control OptionButton
Este control es útil cuando se desea seleccionar una
opción entre varias y se pueden hacer grupos como el
mostrado en la Figura 2.68.

Figura 2.68 Ejemplo uso OptionButton.


Control ToggleButton
Este control tiene dos estados: encendido y apagado;
encendido muestra al botón con la apariencia de estar
presionado, y si está presionado la propiedad Value es
verdadera. El siguiente ejemplo ilustra el uso de este
control con la ayuda de objetos Label para indicar si los
botones están encendidos o apagados (Figura 2.69).
Figura 2.69 Ejemplo uso ToggleButton.
1. Private Sub ToggleButton1_Click()
If ToggleButton1.Value = True Then
Label1.Caption = "ToggleButton1 activado"
Label1.BackColor = vbGreen
Else
Label1.Caption = "ToggleButton1 desactivado"
Label1.BackColor = vbRed
End If
End Sub
Private Sub ToggleButton2_Click()
If ToggleButton2.Value = True Then
Label2Caption = "ToggleButton2 activado"
Label2.BackColor = vbGreen
Else
Label2.Caption = "ToggleButton2 desactivado"
Label2.BackColor = vbRed
End If
End Sub

55
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Control Frame
Un objeto frame contiene otros objetos, y es muy útil cuando
un formulario contiene más de un grupo de OptionButtons,
en la Figura 2.70 se muestra el uso del objeto Frame.

Figura 2.70 Ejemplo uso Frame.


Control MultiPage
Con este control se pueden crear pestañas y en ellas
contener diferentes controles, esto para poder organizar
de mejor manera los controles y opciones para el usuario.
En la Figura 2.71 se muestra un ejemplo de este control.

Figura 2.71 Ejemplo uso MultiPage.


Control ScrollBar
Es una barra de desplazamiento, por ejemplo, cuando una
imagen no cabe en pantalla podemos usar la barra de
desplazamiento como en la Figura 2.72.

Figura 2.72 Ejemplo uso ScrollBar.


Control SpinButton
Permite modificar un número incrementándolo o
disminuyéndolo, un ejemplo se muestra en la Figura
2.73.

Figura 2.73 Ejemplo uso SpinButton.


Control Image
Permite contener una imagen en él, como en la Figura 2.74 se muestran tres imágenes en el
formulario.

56
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Control RefEdit
Este se usa cuando se necesita que el usuario ingrese un
rango de celdas de una hoja de Excel, en la Figura 2.75 se
muestra el uso de este control.

Figura 2.74 Ejemplo uso Image.


Figura 2.75 Ejemplo uso RefEdit.

2.10 Depuración y gestión de errores


Equivocarse esta en la naturaleza humana, y cometer errores es lo primero que ocurre cuando se
programa, por eso este apartado es muy importante, cuando se desarrollan aplicaciones o macros
para el uso propio, puede ser que no existan errores, porque conocemos que no hay que hacer en
nuestros programas, pero en el momento de que un usuario usa nuestros programas, estos fallan,
hacer una buena programación consiste en pensar que errores podrán ocurrir y anticiparse a ellos
y que al momento de que otra persona use nuestros programas estos jamás fallen.

En Excel existen dos tipos de errores: errores de programación y errores en tiempo de ejecución,
estos errores surgen cuando Excel está ejecutando el código que se programó, el siguiente
ejemplo muestra la raíz cuadrada de dos números:
1. Sub Raiz2()
Dim Numero As Double
num = InputBox("Ingrese número")
MsgBox "La raiz es " & Sqr(Numero)
End Sub

En la Figura 2.76 se muestra el resultado de esta macro, aparentemente no podría fallar, pero
esta macro aún no está hecha a prueba de errores.

Ejecutemos la misma macro, pero ingresemos un número negativo, ¡falló!, muestra un error en
tiempo de ejecución (Figura 2.77), calcular la raíz cuadrada de un número no se puede.

Figura 2.76 Macro Raiz2. Figura 2.77 Error en tiempo de ejecución.

57
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Lo que hay que hacer es corregir un poco el código de la siguiente manera para evitar que ocurra
un error:
1. Sub Raiz2()
Dim Numero As Variant
Numero = InputBox("Ingrese número")
If Not IsNumeric(Numero) Then
MsgBox "Debe proporcionar un número"
Exit Sub
End If
If Numero < 0 Then
MsgBox "No puede ingresar números negativos"
Exit Sub
End If
MsgBox "La raiz de " & Numero & " es: " & Sqr(Numero)
End Sub

Para evitar los mensajes de error se puede usar la instrucción On Error, esta instrucción sirve para
que Excel deje pasar los errores y siga con las demás instrucciones. Se puede usar la instrucción
On Error de las siguientes tres formas:

On Error GoTo “Etiqueta”, después de ejecutar esta instrucción, VBA en el momento de


que encuentre un error, se dirigirá a la etiqueta que este escrita, para escribir una etiqueta
se escribe el nombre de la etiqueta seguido del carácter “:” por ejemplo:
1. Sub Raiz2()
On Error GoTo Error1
Dim Numero As Double
Numero = InputBox("Ingrese número")
MsgBox "La raiz de " & Numero & " es: " & Sqr(Numero)
Exit Sub
Error1:
MsgBox "Error al ingresar número, intente nuevamente"
End Sub

On Error Resume Next, cuando ocurre un error esta instrucción se salta la línea de código
que genero el error y continua en la siguiente:
1. On Error Resume Next

Los errores de programación son muy comunes, y al momento de que ocurre un error es muy
probable que se muestre la ventana de la Figura 2.78.

Podemos dar clic en Depurar y observaremos que VBA nos manda a la línea que está causando
el error (Figura 2.79).

Figura 2.78 Ventana de error. Figura 2.79 VBA muestra la línea que
se está ejecutando con amarillo.

58
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Para Corregir estos errores existen diferentes técnicas, y todas son buenas, depende del estilo de
cada usuario cual elegir:

Examinar el código.
Usar MsgBox para evaluar el código.
Usar la instrucción Print.
Usar las herramientas de depuración de Excel.

2.11 Personalizar la cinta de opciones


Antes de Excel 2007 no se usaba la Cinta de opciones, se usaban menús desplegables y barras
de herramientas, la Cinta de opciones en Excel es la que se muestra en la Figura 2.80. Es muy
sencillo hacer modificaciones a la cinta de opciones manualmente y no se pueden hacer
modificaciones a la cinta de opciones usando VBA. Por ejemplo, si se desarrolla una aplicación y
se desea agregar nuevos botones a la cinta de opciones, es necesario programar instrucciones
fuera de Excel con código XML.

Figura 2.80 Cinta de opciones de Excel.

2.11.1 Modificar la cinta de opciones manualmente


Entre las opciones que se tiene para personalizar la cinta de opciones se encuentran las siguientes:
Agregar una pestaña personalizada.
Borrar una pestaña personalizada.
Agregar un grupo a una pestaña.
Cambiar el orden de las pestañas.
Cambiar el nombre de las pestañas.
Ocultar pestañas de Excel.
Agregar nuevos grupos personalizados.
Agregar comandos a grupos personalizados.
Quitar comandos de grupos personalizados.
Quitar un grupo de una pestaña.
Mover un grupo a una pestaña diferente.
Cambiar el orden de los grupos de una pestaña.
Cambiar el nombre a un grupo

Existen algunas acciones que no se pueden realizar:


No se pueden eliminar las cintas que trae consigo Excel.
No podemos quitar los grupos de las cintas de Excel.
No se puede cambiar el orden de los comandos de las cintas de Excel.

Todas las configuraciones listadas anteriormente se hacen desde la ventana Opciones de Excel.
Para acceder a la ventana opciones realice lo siguiente.

59
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Ir a Archivo → Opciones → Personalizar cinta de opciones.

Se mostrará la ventana de la Figura 2.81.

Figura 2.81 Opciones de Excel, personalizar la cinta de opciones.

El ejemplo siguiente muestra la


personalización de una nueva pestaña
llamada “Mis macros” donde se colocan
tres macros como se muestra en la
Figura 2.82. Figura 2.82 Pestaña personalizada Mis macros.

Para este ejemplo es necesario que se tengan programadas al menos tres macros, si estas ya se
tienen para crear la pestaña “Mis macros” se hace lo siguiente:
En la ventana Opciones de Excel → Personalizar la
cinta de opciones seleccionamos donde deseemos
insertar la nueva pestaña, en este caso seleccionamos
Insertar en el apartado de pestañas principales y hacemos
clic en Nueva pestaña (Figura 2.83).
Seleccionamos Nueva pestaña (personalizada) en la
lista de la Figura 2.83 y presionamos en Cambiar
nombre, se mostrará la ventana de la Figura 2.84,
escribimos “Mis macros” y presionamos Aceptar.
Figura 2.83 Insertar pestaña
personalizada.

Figura 2.84 Ventana Cambiar nombre de una pestaña.


Ahora agregamos un nuevo grupo seleccionando la pestaña Mis macros y presionando
Nuevo Grupo.

60
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Para cambiar el nombre a los grupos, seleccionamos el grupo y Cambiar nombre


similarmente a como se cambió el nombre de la pestaña.
Para agregar los botones a cada grupo seleccionamos el grupo al que deseamos agregar
los botones con las macros.
En el apartado Comandos disponibles en
seleccionamos macros, allí se enlistarán las
macros que tengamos disponibles, para este
caso tenemos tres macros como en la Figura
2.85. Figura 2.85 Macros disponibles para
Seleccionamos las macros y presionamos el agregar a las cintas de opciones.
botón Agregar para cada una.
Seleccionamos las macros en el recuadro
derecho y después Cambiar nombre, se
mostrará la ventana de la Figura 2.86, en esta
podemos cambiar el nombre y la figura que se
muestra en cada botón.
Para finalizar presionamos Aceptar, y podemos
observar que se agregó una nueva pestaña.
Estos cambios se guardarán y cada vez que se
abra un libro de Excel aparecerán. Figura 2.86 Cambiar nombre e icono
de botón en pestaña personalizada.
Las personalizaciones que hagamos se pueden exportar como archivos de personalización. De
la misma manera se pueden importar y si las configuraciones se quieren pasar a otros usuarios ya
no será necesario que se personalice cada vez, solo con importar el archivo de personalización
será suficiente.

2.11.2 Modificar la cinta de opciones automáticamente con XML


En algunas ocasiones es necesario modificar la cinta de opciones automáticamente cuando un
libro o complemento se abre. El hacer esto hace mucho más fácil acceder a las macros y no es
necesario que el usuario modifique la cinta de opciones manualmente.

Cambiar la cinta de opciones no es una tarea muy sencilla, para modificarla se necesita escribir
código XML, copiar el archivo XML a la carpeta del libro, editar archivos XML y escribir
procedimientos en VBA para manipular los controles del archivo XML. Todo esto es algo que está
fuera del alcance de este capítulo.

Afortunadamente existe software disponible que permite hacer más fácil la personalización de la
cinta de opciones. Para obtener el software es necesario hacer la descarga e instalarlo, su nombre
es Custom UI Editor For Microsoft Office. Las opciones que se tienen para personalizar la cinta
de opciones en Excel son las mismas que se enlistan en el apartado manualmente.

A continuación, se muestran dos ejemplos de cómo configurar la cinta de opciones


automáticamente.

61
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Ejemplo 1. Para configurar la cinta de opciones como en la Figura 2.87, siga los pasos mostrados:

Figura 2.87 Nuevo grupo dentro de la pestaña Inicio.

Abrir un libro de Excel → Desarrollador → Código → Visual Basic


En VBE agregar un nuevo módulo al Libro1
Escribir el siguiente código en el Modulo1:

1. Option Explicit

'Llamada para el botón personalizado 1


Sub Macro1(control As IRibbonControl)
MsgBox "Esta es la macro 1"
End Sub

'Llamada para el botón personalizado 2


Sub Macro2(control As IRibbonControl)
MsgBox "Esta es la macro 2"
End Sub

'Llamada para el botón personalizado 3


Sub Macro3(control As IRibbonControl)
MsgBox "Esta es la macro 3"
End Sub

'Llamada para el botón personalizado 4


Sub Macro4(control As IRibbonControl)
MsgBox "Esta es la macro 4"
End Sub

'Llamada para el botón personalizado 5


Sub Macro5(control As IRibbonControl)
MsgBox "Esta es la macro 5"
End Sub

'Llamada para el botón personalizado 6


Sub Macro6(control As IRibbonControl)
MsgBox "Esta es la macro 6"
End Sub

'Llamada para el botón personalizado 7


Sub Macro7(control As IRibbonControl)
MsgBox "Esta es la macro 7"
End Sub

'Llamada para el botón personalizado 8


Sub Macro8(control As IRibbonControl)
MsgBox "Esta es la macro 8"
End Sub

62
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

El código anterior corresponde al de las macros que queremos agregar a la cinta de opciones,
para este ejemplo solo muestran mensajes con el nombre de la macro.
Guardar el Libro1 con el nombre deseado como Libro de Excel habilitado para macros.
Cerrar el Libro.
Abrir Custom UI Editor For Microsoft Office se mostrará la ventana principal como la de la
Figura 2.88.

Figura 2.88 Ventana principal de Custom UI Editor.

Ir a File → Open y buscar el libro que cerramos recientemente.


Ir a Insert → Office 2010 Custom UI Part o cualquier opción disponible.
En la parte 1 de la ventana mostrada en la Figura 2.89. Escribir el siguiente código:

Figura 2.89 Ventana Custom UI Editor For Microsoft Office.

1. <customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon>
<tabs>
<tab idMso="TabHome" >
<group id="Grupo1" label="Grupo 1" insertAfterMso="GroupEditingExcel" >
<button id="BotonP1" label="Título 1" size="normal" onAction="Macro1"
imageMso="DirectRepliesTo" />
<button id="BotonP2" label="Título 2" size="normal" onAction="Macro2"

63
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

imageMso="AccountMenu" />
<button id="BotonP3" label="Título 3" size="normal" onAction="Macro3"
imageMso="RegionLayoutMenu"/>
<separator id="Separador1" />
<menu id="MenudDeplegable1" label="Mi menú" size="large"
imageMso="TextAlignGallery" >
<button id="BotonP4" label="Título 4" onAction="Macro4"
imageMso="TextAlignGallery" />
<button id="BotonP5" label="Título 5" onAction="Macro5"
imageMso="TextAlignGallery" />
<button id="BotonP6" label="Título 6" onAction="Macro6"
imageMso="TextAlignGallery" />
<button id="BotonP7" label="Título 7" onAction="Macro7"
imageMso="TextAlignGallery" />
<button id="BotonP8" label="Título 8" onAction="Macro8"
imageMso="TextAlignGallery" />
</menu>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Ir a File → Save o presionar el icono para guardar los cambios.


Cerrar Custom UI Editor For Microsoft Office.
Abrir el libro que creamos y aceptar las advertencias de seguridad habilitando las macros.

En el código anterior, podemos observar que la estructura es sencilla y podríamos modificarlo para
configurar la cinta de opciones como lo deseemos.

En general cada botón tiene la siguiente estructura:


1. <button id="Identificador" label="Título" size="normal" onAction="Macro1"
imageMso="DirectRepliesTo" />

Id. Es el identificador.
Label. Es el título que mostrará el botón.
Size. Es el tamaño del botón.
onAction. Es el nombre de la macro que se ejecutará.
imageMso. Es el nombre de la imagen que se mostrará como icono del botón. Para
encontrar los nombres de estas imágenes podemos buscar en línea Office 2010 Add-In:
Icons Gallery y allí se indican las instrucciones para poder abrir la galería, se mostrará una
imagen como en la Figura 2.91. También es posible colocar iconos personalizados

Ejemplo 2 Para configurar la cinta de opciones


como en la Figura 2.90, siga las instrucciones
mostradas a continuación.

Figura 2.90 Nueva pestaña “Mi pestaña”.

64
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Figura 2.91 Office 2010 Add-In: Icons Gallery.

Crear un libro similarmente al del primer ejemplo, pero con 12 macros.


Abrir Custom UI Editor For Microsoft Office y abrir el libro que contiene las macros.
Ir a Insert → Office 2010 Custom UI Part o cualquier opción disponible.
En la parte 1 de la ventana mostrada en la Figura 2.89. Escribir el siguiente código
1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="MiPestaña" label="Mi pestaña" insertAfterMso="TabHome">
<group id="GrupoP1" label="Grupo 1">
<button id="BotonP1" label="Título1" size="normal" onAction="Macro1"
imageMso="DirectRepliesTo" />
<button id="BotonP2" label="Título2" size="normal" onAction="Macro2"
imageMso="AccountMenu" />
<button id="BotonP3" label="Título3" size="normal" onAction="Macro3"
imageMso="RegionLayoutMenu" />
</group>
<group id="GrupoP2" label="Grupo 2">
<button id="BotonP4" label="Título4" size="normal" onAction="Macro4"
imageMso="TextAlignGallery" />
<button id="BotonP5" label="Título5" size="normal" onAction="Macro5"
imageMso="PrintPreviewClose" />
<button id="BotonP6" label="Título6" size="normal" onAction="Macro6"
imageMso="PrintPreviewShrinkOnePage" />
<separator id="Separador1" />
<button id="BotonP7" label="Título7" size="large" onAction="Macro7"
image="Imagen" />
</group>
<group id="GrupoP3" label="Grupo 3">
<menu id="MenúDesplegale" label="Mi menú" size="large"
imageMso="TextAlignGallery" >
<button id="BotonP8" label="Título8" onAction="Macro8"
imageMso="TextAlignGallery" />
<button id="BotonP9" label="Título9" onAction="Macro9"
imageMso="TextAlignGallery" />
<button id="BotonP10" label="Título10" onAction="Macro10"
imageMso="TextAlignGallery" />

65
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

<button id="BotonP11" label="Título11" onAction="Macro11"


imageMso="TextAlignGallery" />
<button id="BotonP12" label="Título12" onAction="Macro12"
imageMso="TextAlignGallery" />
</menu>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Ir a File → Save o presionar el icono para guardar los cambios.


Cerrar Custom UI Editor For Microsoft Office.
Abrir el libro que creamos y aceptar las advertencias de seguridad habilitando las macros.

Podemos observar en la Figura 2.90 aparece como icono una imagen, para poder insertarla
podemos hacer lo siguiente.
Ir al menú Insert de Custom UI Editor For Microsoft
Office → Icons…
Seleccionar la imagen en formato png y
seleccionar Aceptar. Se agregará la imagen como
en la Figura 2.92.
Para mostrar esta imagen en el botón que Figura 2.92 Panel de navegación
deseamos cambiamos la instrucción Custom UI Editor For Microsoft
imageMso=NombreImagen” por Office.
image=”NombreImagen”.

2.12 Crear complementos de Excel


Un complemento es una herramienta que se agrega a Excel para mejorar su funcionalidad, provee
nuevas funciones como fórmulas, nuevos comandos y utilidades. Un complemento puede ser
diseñado a nuestro gusto y llega a parecer parte del programa.

Un ejemplo de complemento es Solver, una herramienta de análisis que tiene Excel, aplicado
sobre todo en el mundo empresarial, permite calcular el valor de una celda que depende de
diversos factores o variables donde a la vez existen una serie de restricciones que han de
cumplirse.

Entre las razones por las que es útil crear complementos tenemos las siguientes.
Hacer más difícil el acceso a nuestro código. Cuando se distribuyen macros de Excel como
aplicaciones, los usuarios normales no pueden acceder a las macros de Excel. Esto se
puede hacer con las configuraciones de protección.
Evitar confusión. Si se crean aplicaciones como complementos los usuarios no tendrán la
confusión de tener que trabajar con código, en un complemento esto no es visible.
Proveer fácil acceso a las herramientas. Está claro que si deseamos ejecutar una macro
es más fácil presionar un botón en la cinta de opciones que ir al menú de macros y buscar

66
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

la macro deseada, esta es una de las funcionalidades de crear complementos, podemos


configurar las macros con botones fácilmente.

2.12.1 Trabajar con complementos


Para mostrar un complemento tenemos que
seguir los pasos que se enlistan a continuación.
Ir a Archivo → Opciones →
Complementos → Administrar
complementos de Excel → Ir. Se
mostrará la ventana de la Figura 2.93.
Seleccionamos el complemento de la
lista y presionamos aceptar.

Figura 2.93 Ventana Complementos de Excel.


2.12.2 Generar complemento
Para generar un complemento seguimos las instrucciones mostradas a continuación.
Abrimos el libro que contenga las macros que deseemos crear como complementos.
Seleccionamos Archivo → Guardar como.
Colocamos el nombre y en tipo de archivo seleccionamos Complemento de Excel y
aceptamos. Con esto el complemento se ha generado.

El siguiente ejemplo muestra cómo crear y usar un complemento.

Partir del ejemplo 2 del apartado 2.11.2 .


Guardarlo con el nombre “MiPestaña” y el tipo de
archivo “Complemento de Excel”.
Abrimos un nuevo libro.
Vamos a Archivo → Opciones → Complementos
→ Administrar complementos de Excel → Ir.
Seleccionamos Examinar y buscamos el
complemento “MiPestaña” donde se encuentre
guardado.
Verificamos que la casilla se encuentre marcada
para el complemento como en la Figura 2.94 y
pulsamos Aceptar. Figura 2.94 Ventana Complementos.
Podemos ver que el complemento se ha agregado como la pestaña “Mi pestaña” de la
Figura 2.95.

67
CAPÍTULO 2 FILOSOFÍA DE USO DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS

Figura 2.95 Nuevo complemento agregado como una pestaña.

68
Capítulo 3

PRONÓSTICOS DE
PRODUCCIÓN
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

CAPÍTULO 3 Pronósticos de producción


CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN
3.1 Introducción
Los pronósticos de producción son estimaciones de volúmenes de hidrocarburos que se espera
obtener de los yacimientos petroleros, estos pronósticos se basan principalmente en la manera
que son explotados, en las propiedades petrofísicas y geológicas que presenta la roca
almacenadora y en las propiedades de los hidrocarburos. Son utilizados principalmente para
determinar de una manera matemática el comportamiento de la producción de dicho yacimiento a
través de su historia productiva, de tal forma que estos análisis pueden realizarse durante toda la
vida productiva del yacimiento. Dicho de otra manera, un pronóstico de producción puede
realizarse desde el momento que fue descubierto el yacimiento (antes de perforar el primer pozo),
durante la perforación de los pozos y durante la etapa de producción. Por ello existen varios
métodos para realizar un pronóstico de producción, y estos son aplicados dependiendo de la etapa
en que se encuentre la explotación del yacimiento.

Los pronósticos de producción nos permiten realizar una cuantificación teórica de los volúmenes
de hidrocarburo en el yacimiento, lo cual nos sirve para calcular las reservas y determinar la
rentabilidad de la explotación de dicho yacimiento.

Los métodos tradicionales para predecir el comportamiento de un yacimiento generalmente


pueden ser divididos en métodos analíticos, experimentales y matemáticos.

Los métodos analíticos utilizan características de yacimientos análogos, que son geográfica o
petrofísicamente similares a la zona o yacimiento objetivo. Los métodos experimentales, miden
propiedades físicas como gastos, presiones o saturaciones en modelos de laboratorio y amplían
estos resultados a todo el yacimiento. Finalmente, los modelos matemáticos utilizan ecuaciones
para predecir el comportamiento del yacimiento.

En este capítulo se abordarán principalmente los modelos matemáticos, por su relación con la
aplicación de las hojas de cálculo electrónicas. Los métodos de pronósticos de producción que se
describen son: analógicos, volumétricos, balance de materia, curvas de declinación y simulación
numérica de yacimientos.

En la Tabla 3.1 se muestran estos ejemplos y los requerimientos de información y la calidad de


las predicciones que evalúan.

70
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Tabla 3.1 Métodos de pronósticos de producción.

Método Etapa de aplicación Información


Campos análogos Evaluación de prospectos Análogos
Cantidad y calidad de la información

Valoración de prospectos
Curvas de Gastos iniciales
Producción inicial
declinación Historia de producción
Pronósticos de corto plazo
Propiedades de los fluidos
Volumetrías
Valoración de prospectos
Balance de materia Presiones
Pronósticos de corto plazo
Propiedades de la formación
Análisis nodal
Planeación del desarrollo del
campo Descripción del yacimiento
Simulación Proyectos estratégicos Análisis PVT
numérica (incrementales) Propiedades petrofísicas
Optimización Historia de producción
Pronósticos de largo plazo

3.2 Campos análogos


Antes de perforar, cuando la información es limitada, una manera en que se puede hacer un
análisis del yacimiento es mediante analogía. En este método, los yacimientos de la misma
formación geológica o provincia, o yacimientos con similares características petrofísicas, pueden
ser usados para predecir el comportamiento del yacimiento en estudio. Este método puede ser
usado para estimar factores de recuperación, gastos de producción iniciales, declinación de la
producción, espaciamiento entre pozos y mecanismos de recuperación. Los resultados pueden
ser tan acertados como similares sean los yacimientos comparados.

3.3 De tipo volumétrico


Los métodos de tipo volumétricos son utilizados principalmente cuando los datos geológicos son
suficientemente robustos y tienen muy baja incertidumbre, ya que la base teórica de este método
son las propiedades de la roca y de los fluidos, las principales propiedades son; la porosidad,
saturación de fluidos, factor de volumen, geometría del yacimiento y el espesor neto.

Para obtener el pronóstico de producción (producción acumulada Np ) mediante este método se


utiliza la ecuación (3.1).

Np =N×Fr (3.1)

donde:
N: Volumen original de hidrocarburos.
Fr : Es el factor de recuperación estimado.

71
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

3.3.1 Cálculo del volumen original de hidrocarburos (N)


Para calcular el volumen original de aceite (N) se utiliza la ecuación (3.2).

𝑉𝜙(1 − 𝑆𝑤 )
𝑁= (3.2)
𝐵𝑜
donde:
V: Volumen de la roca, en que se encuentra el yacimiento.
ϕ: Porosidad.
Sw : Saturación del agua.
Bo : Factor de volumen del aceite.

Volumen de la roca
El volumen de la roca se determina mediante el análisis de mapas geológicos superficiales y la
ayuda de un planímetro (instrumento que ayuda a determinar áreas a partir de mapas geológicos).
En la Figura 3.1 se pueden observar algunos métodos con los que se puede obtener el área,
tomando en cuenta que son formas hipotéticas de representar la estructura en donde se encuentra
el yacimiento (3D) llevando está a un mapa de contornos (2D), donde el resultado es un mapa
geológico, siendo las líneas “isopacas” las que conectan una red de puntos de igual espesor de
formación.

Obteniendo las lecturas de las áreas con el planímetro, se procede a calcular el volumen de la
roca, comúnmente existen dos ecuaciones para determinar el volumen aproximado de la zona
productiva de hidrocarburos, para determinar el volumen de la pirámide de la Figura 3.2 se aplica
la ecuación (3.3), que es la suma de la ecuación para el volumen de una pirámide y una sumatoria
de volúmenes de pirámides truncadas.

Figura 3.1 Proyección de áreas y mapas de contornos para diferentes estructuras[24].


𝑛
ℎ0 ℎ𝑖
𝑉 = 𝐴1 + ∑ (𝐴𝑖 + 𝐴𝑖+1 + √𝐴𝑖 𝐴𝑖+1 ) (3.3)
3 3
𝑖=1
donde:
𝑉: Es el volumen total.
Ai : Es el área encerrada por la línea de la isopaca que se encuentra en la parte inferior.

72
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

An+1 : Es el área contenida entre la isopaca inferior y la cima.


h: Es el espesor (intervalo las isopacas).

Figura 3.2 Esquema para calcular el volumen en una pirámide[24].

Porosidad
La porosidad es el volumen de espacios vacíos que contiene la roca, existen dos tipos de
porosidades.
✓ Porosidad absoluta: Es la relación que existe entre el volumen de poros y el volumen
total de roca.

𝑣𝑜𝑙𝑢𝑚𝑒𝑛 𝑑𝑒 𝑝𝑜𝑟𝑜𝑠 (3.4)


𝜙=
𝑣𝑜𝑙𝑢𝑚𝑒𝑛 𝑡𝑜𝑡𝑎𝑙 𝑑𝑒 𝑟𝑜𝑐𝑎
✓ Porosidad efectiva: Es la relación que existe entre el volumen de poros interconectados
y el volumen total de roca.

volumen de poros interconectados


ϕ= (3.5)
volumen total de roca

Existen varios métodos y herramientas que ayudan a determinar la porosidad de la roca, una de
las principales son los registros geofísicos, estos son representaciones gráficas de una propiedad
física de la roca contra la profundidad. Dentro de los registros que nos ayudan a obtener la
porosidad de la roca, se encuentra el registro sónico, el de neutrón, el de densidad y el registro de
resonancia magnética nuclear, estos registros no miden como tal la porosidad, sino que miden una
propiedad física de la roca como es la densidad, el índice de hidrogeno o incluso la velocidad de
una onda sonora y a partir de estas propiedades se realiza una correlación para estimar la
porosidad. La porosidad se mide en porcentaje o fracción.

Otros métodos son aquellos que se desarrollan en laboratorio, mediante el análisis de núcleos,
suelen ser más efectivos ya que son mediciones directas y además es posible calcular la porosidad
efectiva con mayor exactitud.

73
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Saturación de agua
La saturación de agua es el volumen de agua que se encuentra en los poros de la roca.

volumen de agua contenida en la roca


Sw = (3.6)
volumen total de poros

La parte del volumen poroso ocupado por los hidrocarburos (aceite y/o gas) será la saturación de
hidrocarburos que se designa por SO para el caso en que asuma que solo existe agua y aceite en
el yacimiento.

So = 1 − Sw (3.7)

Al igual que la porosidad, la saturación se expresa en fracción o en porcentaje. La manera más


sencilla de calcular la saturación de agua es mediante el uso de registros eléctricos y aplicando la
ecuación de Archie.

Otra manera de calcular la saturación de agua es mediante técnicas de laboratorio realizadas a


núcleos.

Factor de volumen del aceite


Este es el volumen de aceite que se debe de producir del yacimiento para producir un barril de
aceite a condiciones de superficie (STB) que son: 14.7 libras/pg² (1 atm) y 60°F (15.5°C).

Vol(aceite + gas en solución ) condiciones de yacimiento (3.8)


Bo =
Vol (aceite) condiciones de superficie

Este valor es muy importante y se determina mediante análisis PVT.

3.4 Curvas de declinación


Este método supera en exactitud a los dos métodos anteriores ya que lleva implícito las
heterogeneidades que se presentan en el yacimiento y la dirección de flujo de fluidos en las
mediciones de gasto de producción. Este método consiste principalmente en realizar una gráfica
que compare los gastos de producción contra el tiempo, extrapolando y así conociendo los gastos
futuros de producción por pozo.

Es posible determinar la producción futura total de un yacimiento y realizar a partir de curvas de


declinación una predicción del comportamiento de las reservas probadas para las formaciones que
estén siendo explotadas por estos pozos.

Las curvas de declinación son métodos para estimar regímenes de producción futuros, están
basados en la suposición de que los pozos permanecerán sin la influencia de controles artificiales;
que se les permite constantemente mantener la producción máxima que son capaces, y de que
siempre producen bajo las mismas condiciones de operación y que todos los factores que

74
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

influenciaron la curva en el pasado, serán los mismos durante la vida productiva futura, estos
factores son los siguientes:
• Cambios en los métodos de producción.
• Reparaciones.
• Tratamientos a pozos.
• Cambios en las condiciones de los aparejos o en las instalaciones superficiales de
producción.

Cabe recalcar que este método es aplicable solo en la etapa de producción de los pozos, ya que
para realizarse se necesitan datos históricos de producción.

Los principales periodos de declinación de un pozo productor son el periodo de flujo transitorio y
en estado pseudoestacionario, dentro del cual se encuentran la declinación exponencial,
hiperbólica y armónica.

3.4.1 Análisis de curvas de declinación


El inicio del abatimiento de presión está determinado por el tiempo en el cual, el radio de drene ha
alcanzado las fronteras externas de no-flujo. De allí en adelante como resultado de la producción,
la región total drenada por el pozo comienza a ser deplecionada, como se muestra en la Figura
3.3.
Dentro de la declinación en estado
pseudoestacionario se encuentran
tres modelos empíricos, estos
modelos son:

Declinación exponencial.
Declinación hiperbólica.
Declinación armónica.

El modelo de declinación
hiperbólico es el más general, los
otros dos modelos son
derivaciones del modelo de
declinación hiperbólico.

Figura 3.3 Caída de presión en el área de drene.


En 1945 Arps[3] creó los
fundamentos del análisis de curvas de declinación, proponiendo unas curvas matemáticas
empíricas. La ecuación de declinación empírica de Arps representa la relación del gasto con el
tiempo.

1 dq
𝐷=− (3.9)
q dt

75
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Donde D, se define como gasto de declinación y los tres tipos de declinación pueden obtenerse a
partir de la expresión de la ecuación general (3.10).

D q n
=( ) (3.10)
Di qi

Reordenando la ecuación (3.10) se tiene:

D = bqn (3.11)

Donde n es el exponente de declinación, Di es el gasto de declinación al inicio del periodo de


declinación y b es una contante de proporcionalidad definida como:

Di
b= (3.12)
qi n

En la declinación exponencial n=0, en la armónica, n=1 y en la hiperbólica 0<n<1. A partir de esto,


la expresión para el gasto de declinación, D, para cada modelo es:
Exponencial, al sustituir n=0 en la ecuación (3.11) se tiene que D = Di = cte; la caída de
producción por unidad de tiempo es una fracción constante del gasto, es decir:

dq
− = Di q (3.13)
dt

q
Armónica, al sustituir n=1 en la ecuación (3.11) se tiene que D = Di ( ); la caída en la
qi
producción por unidad de tiempo como fracción del gasto es directamente proporcional al
gasto, es decir:

1 dq Di (3.14)
− = q
q dt qi

q n
Hiperbólica, a partir de la ecuación (3.11) se tiene que D = Di ( ) la caída de producción
qi
por unidad de tiempo como una fracción del gasto de producción es proporcional a una
potencia fraccional de gasto de producción, con la potencia, n, variando entre 0 y 1, es
decir:

1 dq Di (3.15)
− = n qn
q dt qi

Estos modelos de declinación son aplicables tanto para aceite como para gas.

76
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Declinación exponencial
Este tipo de declinación ocurre si el valor del exponente de declinación n de la ecuación de Arps
es 0. La declinación exponencial se caracteriza por el hecho de que la caída de gasto de
producción por unidad de tiempo es proporcional a la tasa de producción.

Integrando la ecuación (3.13) se tiene:

q t
1
∫ dq = − ∫ Di dt (3.16)
qi q 0

Resolviendo la integral se obtiene la ecuación (3.17) que es la expresión para la declinación


exponencial.

q = qi e−Di t (3.17)

La integración de la ecuación (3.17) a través del tiempo provee una expresión para el cálculo de
la producción acumulada a partir del inicio de la declinación y de esta manera obtener el pronóstico
de producción.

t t
Np = ∫ qdt = ∫ qi e−Di t dt (3.18)
0 0

1
Np = (q − q) (3.19)
Di i

Cálculo del gasto de declinación, Di


Este valor puede ser determinado a partir del histórico de producción. Si se tienen datos de gasto
y tiempo de producción disponibles, el valor de Di puede ser obtenido a partir de la pendiente de
una línea recta en escala semilogarítmica. Si se aplican logaritmos a ambos lados de la ecuación
(3.17) se obtiene la ecuación (3.20) que indica que la pendiente de la recta al graficar log(q) contra
t representa a -Di.

ln(q) = ln(qi ) − Di t (3.20)

Si la declinación es exponencial es el modelo adecuado. Una regresión lineal de los datos de t y


log(q) permitirán el cálculo de Di.
Si el gasto de producción, q, y la producción acumulada, Np, están disponibles, el valor de Di puede
ser obtenido a parir de la pendiente de la línea recta de la gráfica de Np contra q mediante la
ecuación (3.21).

q = qi − Di Np (3.21)

77
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Una regresión lineal de los datos de t y Np, permitirán el cálculo de Di.

Declinación armónica
Este tipo de declinación ocurre si el valor del exponente de declinación n de la ecuación de Arps
es 1. En este caso el valor de la constante declinación Di es proporcional al gasto, q, algunas veces
se presenta cuando la producción es controlada predominantemente por segregación
gravitacional.

Integrando la expresión (3.14) se tiene:

q t
1 Di
−∫ 2
dq = ∫ dt (3.22)
qi q 0 qi

Resolviendo la integral se obtiene la ecuación (3.23) que es la expresión para la declinación


armónica:

qi
q= (3.23)
1 + Di t

Por otra parte, la ecuación de gasto producido (producción acumulada) puede determinarse
integrando la ecuación (3.23), quedando como:

t t
q𝑖
Np = ∫ qdt = ∫ dt (3.24)
0 0 1 + Di t

Dando como resultado:

qi
Np = [ln(q𝑖 ) − ln(q)] (3.25)
Di

Declinación hiperbólica
La declinación hiperbólica es la forma general de la ecuación de Arps, cuando n está entre 0 y 1,
se presenta el mecanismo de empuje de gas en solución, expansión de casquete de gas o empuje
de agua. También se presenta cuando el mecanismo de empuje natural es suplementado por
inyección de gas o de agua. En cualquier caso, la presencia de estos mecanismos de empuje
implica que la compresibilidad total se incremente y la recuperación de hidrocarburos sea mejorada
en comparación con el mecanismo de empuje de expansión del aceite.

Con base a lo anterior, se puede decir que la declinación hiperbólica es la que se presenta con
más frecuencia.

Integrando la expresión (3.15) se tiene:

78
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

q t
1 Di
−∫ dq = ∫ dt (3.26)
qi q (𝑛+1)
0 (qi )𝑛

Resolviendo la integral se obtiene la ecuación (3.27) que es la expresión de la declinación


hiperbólica;

qi
q= 1 (3.27)
(1 + nDi 𝑡)n

El valor de la constante de declinación, Di , es lo más difícil de determinar en este análisis, sin


embargo, una vez determinada esta constante, es relativamente simple obtener el gasto q,
correspondiente a un tiempo t. Estos mismos parámetros pueden ser utilizados para calcular la
producción acumulada durante el tiempo t.

Para determinar la ecuación de la producción acumulada se integra la ecuación (3.27) con respecto
al tiempo:

t t
qi
Np = ∫ qdt = ∫ 1 dt (3.28)
0 0 (1 + nDi 𝑡)n

Dando como resultado:

qi (1−𝑛) qi
Np = [1 − (1 + nDi 𝑡) 𝑛 ] = (q 1−n − q1−n ) (3.29)
(1 − n)Di (1 − n)Di i

Identificación de modelos
Los datos de producción pueden ser graficados utilizando diferentes escalas para identificar el
modelo de declinación que más se ajuste a los datos. En la Figura 3.4 se muestran los tres tipos
de declinación utilizando las escalas: cartesiana, semilogarítmica y logarítmica, donde se pueden
identificar los siguientes casos:
Si la gráfica de log(q) contra t muestra una línea recta (línea 1 de la figura B), de acuerdo
a la ecuación (3.20), los datos de declinación muestran una declinación exponencial.
Si la gráfica de q contra Np muestra una línea recta (línea 1 de la figura D), de acuerdo con
la ecuación (3.21), los datos muestran una declinación exponencial.
Si al graficar de Np contra log(q) muestra una línea recta (línea 2 de la figura E), de acuerdo
a la ecuación (3.25), la declinación armónica puede ser usada.
Si ninguna de las gráficas anteriores se ajusta a una línea recta, la declinación hiperbólica
puede ser verificada graficando el gasto de declinación relativo con la ecuación (3.9). En la
Figura 3.5 se observan las declinaciones exponencial, armónica e hiperbólica.

79
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Figura 3.4 Representación gráfica de las curvas de declinación[44].

Figura 3.5 Comparación de diferentes tipos de declinación[10].

Determinación de parámetros de cada modelo


Una vez que el modelo de declinación es identificado, los parámetros n y Di pueden ser
determinados mediante el ajuste de los datos a un modelo seleccionado.

Declinación exponencial. Para este modelo, el valor de Di puede ser estimado tomando en
consideración la pendiente de la línea recta en la gráfica log(q) contra t mediante la
ecuación (3.20).
Asimismo, el valor de Di puede ser determinado, con base en la pendiente de la línea recta
de la gráfica q contra Np, mediante la ecuación (3.21).

80
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Para un modelo de declinación armónica, el valor de Di puede ser estimado considerando


la pendiente de la línea recta en la gráfica de Np contra log(q), mediante la ecuación (3.25).

Para la estimación de los parámetros del modelo de declinación hiperbólica que es el que más se
presenta en la realidad, se han desarrollado varios métodos entre los que están los métodos
gráficos (Arps, Slider, Fetkovitch), métodos aproximados (Rowland y Lin) que requieren pocos
cálculos, métodos de mínimos cuadrados desarrollados especialmente para las curvas de
declinación (Chatas y Yankie, McCray y Comer, Copal) y métodos generales de mínimos
cuadrados (Locke, Schrider y Romeo).

A continuación, se presenta un método propuesto por Shirman[49] que puede ser aplicado a
cualquier tipo de declinación. Este método está basado en la ecuación (3.9) donde se define un
gasto de declinación, D como:

1 dq
− = bqn = D (3.30)
q dt

La ecuación (3.30) puede ser expresada como:

dq
bq(n+1) = − (3.31)
dt

Aplicando logaritmos a ambos lados de la ecuación (3.31) se tiene:

dq
ln(b) + (n + 1)ln(q) = ln (− ) (3.32)
dt

La ecuación (3.32) indica que la derivada del gasto con respecto al tiempo mostrará una línea recta
contra el gasto de producción en una escala logarítmica. La pendiente de la línea es n+1 y la
ordenada al origen proporciona el valor de b.

Para poder realizar una gráfica y calcular los parámetros d y n, es necesario calcular las derivadas
de la producción con respecto del tiempo, estas se pueden calcular de diferentes maneras, una de
ellas es una aproximación numérica[12] desarrollada mediante el polinomio de Lagrange, en la
ecuación (3.33) el término de error no es presentado.
m
dq
= ∑ qi Li ′ (t i ) (3.33)
dt
i=1

En la ecuación (3.33) entre más puntos sean usados para calcular la derivada, mejor es la
aproximación. Las fórmulas más comunes son las que involucren tres y cinco puntos para el cálculo
de la derivada, esto es útil cuando los datos están igualmente espaciados.

Para el primer dato, la derivada se calcula con la ecuación (3.34) de tres puntos:

81
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

dq −3q1 + 4q2 − q3
= (3.34)
dt 2(∆t)

Para los demás puntos, la derivada se calcula con la ecuación (3.35).

dq qi+1 − qi−1
= (3.35)
dt 2(∆t)

Una vez que los parámetros b y d se han calculado, la única incógnita para determinar el gasto de
declinación inicial Di mediante la ecuación (3.12) es el gasto inicial 𝑞𝑖 .

Tomando en consideración la ecuación (3.12) y sustituyéndola en la ecuación (3.27) se obtiene:

qi
q= 1 (3.36)
(1 + nbqi n t)n

La ecuación anterior significa que el gasto inicial puede ser determinado de cualquier dato
aceptable de gasto y tiempo, j, mediante la ecuación:

1

qi j = (qj −n − nbt) n (3.37)

El mejor gasto inicial puede ser determinado como un promedio de todos los valores de gasto
inicial mediante la ecuación (3.38).
m
1 (3.38)
qi = ∑(qi )j
m
j=1

3.4.2 Ventajas y desventajas


El método de curvas de declinación es uno de los métodos más utilizados para realizar un
pronóstico de producción, sin embargo, tiende a tener algunas ventajas y desventajas con respecto
a otros métodos utilizados para el mismo objetivo, algunas de estas ventajas son:
• Es más exacto que los métodos volumétricos.
• Nos da buena estimación de los pronósticos de producción.
• Permite obtener volúmenes originales.
• Permite realizar el cálculo de reservas.

Principales desventajas del Método de Curvas de Declinación:


• Requiere de mucha información.
• Si cambia alguna condición en el estado mecánico del pozo la extrapolación de las gráficas
se invalida.
• Si cambia el esquema de explotación la extrapolación de las gráficas se invalida.

82
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

3.5 Balance de materia


La ecuación de balance de materia (EBM) propuesta por Schilthuis[48] ha sido usada como una
herramienta básica para interpretar y predecir el comportamiento de los yacimientos.

La ecuación de balance de materia se basa en el principio de conservación de la masa, es decir,


considera solo la transformación de esta, existiendo un balance en el que no hay pérdidas, la masa
que entra es igual a la masa que sale, de forma similar, la masa que se expande es igual a la masa
que se produce, se utiliza un volumen de control para cuantificar los cambios existentes en el
mismo. La EBM expresa la relación que debe existir en todo momento en el yacimiento que se
produce en condiciones que se aproximen al equilibrio.

La EBM puede utilizarse para estimar el volumen de aceite y gas original, estimar el tamaño de la
capa de gas, estimar la presencia, tipo y tamaño del acuífero, predecir el comportamiento de
presión conociendo la historia de producción del yacimiento, estimar las profundidades de los
contactos y predecir el comportamiento futuro de los yacimientos.

3.5.1 Ecuación general de balance de materia


La ecuación es derivada de un balance de materia que iguala la producción acumulada con la
expansión de los fluidos en el yacimiento resultado de una caída de presión. La situación anterior
es descrita en la Figura 3.6 a partir de la cual se puede realizar un balance de todos los cambios
de volumen que ocurren durante la vida productiva del yacimiento.

Figura 3.6 Concepto de modelo de tanque para el desarrollo de la EBM[51].

La EBM puede ser escrita en una forma general como sigue:

Volumen poroso ocupado por el aceite original a pi +


Volumen poroso ocupado por la capa de gas a pi =
Volumen poroso ocupado por el aceite remanente a p + (3.39)
Volumen poroso ocupado por la capa de gas a p +
Volumen poroso ocupado por el gas disuelto liberado a p +
Volumen poroso ocupado por la entrada neta de agua a p +

83
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Cambio en volumen poroso debido a la expansión del agua connata y la


expansión de la roca
Todos los términos involucrados en la ecuación (3.39) pueden ser determinados de las
propiedades PVT y de la formación, a continuación, se muestra cada uno de ellos.
Volumen poroso ocupado por el aceite original a la presión inicial:

Volumen del aceite original = NBoi (3.40)

Volumen poroso ocupado por la capa de gas a la presión inicial:

Volumen de la capa de gas = mNBoi (3.41)

Donde m es la relación que existe entre el volumen origina de la capa de gas y el volumen original
de aceite, definido por:

Volumen original de la capa de gas GBgi


m= = (3.42)
Volumen original de la capa de aceite NBoi

Volumen poroso ocupado por el aceite remanente a la presión, p:

Volumen del aceite remanente = (N − Np )Bo (3.43)

Volumen poroso ocupado por la capa de gas a la presión, p:


Cuando la presión del yacimiento cae de la presión inicial, pi, a una nueva presión, p, el gas que
se encuentra en la capa de gas se expande y ocupa un mayor volumen. Asumiendo que no se
produce gas de la capa de gas durante la caída de presión, el nuevo volumen de la capa de gas
puede ser determinado por:
mNBoi
Volumen de la capa de gas a la presión p = [ ] Bg (3.44)
Bgi

Volumen poroso ocupado por la expansión del gas disuelto liberado:


Este término puede ser determinado a partir del siguiente balance del gas en solución.
Volumen de Volumen Volumen Volumen de
gas disuelto = original de − de gas − gas disuelto (3.45)
liberado gas disuelto producido remanente

Que puede expresarse como:

Volumen del gas disuelto liberado = [NR si − Np R p − (N − Np )R s ]Bg (3.46)

Volumen poroso ocupado por la entrada neta de agua:

Entrada neta de agua = We − Wp Bw (3.47)

84
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Cambio en volumen poroso debido a la expansión del agua connata y la expansión de la


roca:
El término que describe la reducción en el volumen poroso debido a la expansión del agua connata
y la expansión de la roca no puede despreciarse en un yacimiento bajosaturado. El efecto de estos
dos componentes generalmente puede ser despreciado en yacimientos con empuje de capa de
gas o en yacimientos que se encuentran por debajo de la presión de burbuja.

La ecuación (3.48) describe a la compresibilidad como los cambios de volumen que experimenta
el fluido o material debido a un cambio de presión.

1 ∂V
c=− (3.48)
V ∂p

O puede expresarse como:

∆V = Vc∆p (3.49)

Donde ∆V representa el cambio o expansión de volumen como resultado de un cambio de presión.


Por lo tanto, la reducción en el volumen poroso debido a la expansión del agua connata está dado
por:

Expansion del agua connata = [(Volumen poroso)Swi ]cw ∆p (3.50)

El volumen poroso puede obtenerse a partir de la ecuación (3.51) que representa el total del
volumen de hidrocarburos en el sistema:

Volumen de Volumen de la
+ = (Volumen poroso)(1 − Swi ) (3.51)
aceite original capa de gas inicial

Sustituyendo las ecuaciones (3.40) y (3.41) en (3.51) se obtiene:

NBoi (1 + m)
(Volumen poroso) = (3.52)
(1 − Swi )

Ahora sustituyendo la ecuación (3.52) en (3.50) se obtiene:

NBoi (1 + m)
Expansión del agua connata = S c ∆p (3.53)
(1 − Swi ) wi w

Similarmente, la reducción del volumen poroso debido a la expansión de la roca está dado por:

NBoi (1 + m)
Expansión de la roca = c ∆p (3.54)
(1 − Swi ) f

85
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Combinando las expresiones de la expansión del agua connata y la roca dadas por las ecuaciones
(3.53) y (3.54) se tiene:

Swi cw + cf
Cambio total en el volumen poroso = NBoi (1 + m) ( ) ∆p (3.55)
1 − Swi

Sustituyendo las ecuaciones (3.40), (3.41), (3.43), (3.44), (3.46), (3.47) y (3.55) en la ecuación
(3.39) se tiene la siguiente expresión:

Np (Bo + (R p − R s )Bg ) − (We − Wp Bw )


N=
B S c + cf (3.56)
(Bo − Boi ) + (R si − R s )Bg + mBoi ( g − 1) + Boi (1 + m) ( wi w ) ∆p
Bgi 1 − Swi

La ecuación (3.56) representa a la ecuación general de balance de materia, EBM. Una forma más
conveniente de la EBM se obtiene al introducir en la ecuación el concepto de factor de volumen
total (dos fases), 𝐵𝑡 , que está definido como:

Bt = Bo + (R si − R s )Bg (3.57)

Al sustituir la ecuación (3.57) en la ecuación (3.56) se obtiene:

Np (Bt + (R p − R si )Bg ) − (We − Wp Bw )


N=
B S c + cf (3.58)
(Bt − Bti ) + mBoi ( g − 1) + Bti (1 + m) ( wi w ) ∆p
Bgi 1 − Swi

Consideraciones de la ecuación de balance de materia


Para la aplicación de la ecuación de balance de materia, se deben hacer ciertas consideraciones
dentro de las que destacan:
El yacimiento es una unidad completa, homogénea e isotrópica.
El aceite y el gas se comportan en el yacimiento en forma similar a como lo hicieron en el
laboratorio durante el análisis PVT.
El campo ha sido desarrollado.
El volumen es constante en los yacimientos de gas y en los de aceite saturado.
Existe un equilibrio en la presión en todo el yacimiento y durante todo el tiempo de la
explotación. Esto implica que en el yacimiento no existen presiones diferenciales de gran
magnitud y que no ocurre cambio en la composición del fluido, excepto el indicado en los
análisis PVT.
No ocurre el mecanismo de empuje por segregación gravitacional del gas y no se produce
gas del casquete. Estas suposiciones son necesarias únicamente para la deducción.
Es de dimensión cero (esta evaluada en un punto del yacimiento)
Generalmente exhibe una dependencia del tiempo.

86
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

A pesar de que el cambio de presión aparece solo explícitamente en algunos términos. El


cambio de presión está implícito en todos los parámetros PVT puesto que son función de
la presión.
La ecuación es evaluada al comparar los valores de p respecto a pi .

Al usar la ecuación de balance de materia, una de las mayores dificultades es la determinación


representativa de la presión promedio del yacimiento a la cual los parámetros deben ser evaluados.

3.5.2 Ecuación general de balance de materia como una línea recta


Una visión general de la EBM puede ser el significado físico de algunos grupos de términos que la
componen, los cuales comprenden:
El volumen de aceite y gas producidos, Np (Bo + (R p − R s )Bg )
La entrada neta de agua al yacimiento, (We − Wp Bw )
Bg
La expansión neta de la capa de gas, mBoi ( − 1)
Bgi

Existen esencialmente tres incógnitas en la ecuación (3.56):


1. El volumen de aceite original,N.
2. La entrada de agua, We .
3. El tamaño de la capa de gas comparado con el volumen de aceite, m.

Havlena y Odeh[34] desarrollaron una técnica para aplicar la EBM y representarla como una línea
recta para determinar las tres incógnitas anteriores, para esto expresaron la ecuación (3.56) como:

Np (Bo + (R p − R s )Bg ) + Wp Bw = N[(Bo − Boi ) + (R si − R s )Bg ] +


Bg Swi cw +cf (3.59)
mNBoi ( − 1) + N(1 + m)Boi ( ) ∆p + We
Bgi 1−Swi

Posteriormente la simplificaron así:

F = N(Eo + mEg + Ef,w ) + We (3.60)

En la ecuación (3.60) los términos F, Eo , Eg y Ef,w se definen de la siguiente manera:


F representa al volumen acumulado de fluidos que han sido producidos del yacimiento
durante la caída de presión ∆p.

F = Np (Bo + (R p − R s )Bg ) + Wp Bw (3.61)

Eo representa la expansión del aceite y del gas disuelto:

Eo = (Bo − Boi ) + (R si − R s )Bg (3.62)

Eg representa la expansión de la capa de gas:

87
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Bg
Eg = Boi ( − 1) (3.63)
Bgi

Ef,w representa la expansión del agua connata y la reducción en el volumen poroso debido
a la expansión de la roca:

Swi cw + cf
Ef,w = (1 + m)Boi ( ) ∆p (3.64)
1 − Swi

3.5.3 Solución a la ecuación de balance de materia como una línea recta


Solucionar la ecuación de balance de materia mediante su representación como una línea recta
requiere la construcción de un gráfico de un grupo de variables contra otro grupo de variables,
donde estos grupos de variables dependen del mecanismo de empuje bajo el cual está
produciendo el yacimiento, un aspecto importante es el significado que pueden tener los puntos
representados, la dirección en la cual se ubican y la forma que toman al final, es decir, la
aproximación a un gráfico es importante ya que las desviaciones representan algo.

La utilización de la EBM como una línea recta proporciona datos importantes para determinar las
incógnitas N, m y We además de poder identificar el mecanismo de empuje. A continuación, se
muestra el uso de esta ecuación para diferentes tipos de yacimientos con diferentes tipos de
empuje presentes.

Caso 1. Yacimiento volumétrico bajosaturado


En la ecuación (3.60) varios términos asociados a los mecanismos de empuje desaparecerán
dependiendo de las condiciones impuestas, para un yacimiento volumétrico bajosaturado, las
condiciones asociadas son las siguientes:
We = 0, pues el yacimiento es volumétrico.
m = 0, pues el yacimiento es bajosaturado.
R s = R si = R p , porque todo el gas producido se encuentra disuelto en el aceite.

Aplicando las condiciones anteriores a la ecuación (3.60) resulta:

F = N(Eo + Ef,w ) (3.65)

O bien:

F
N= (3.66)
(Eo + Ef,w )
donde:
F = Np Bo + Wp Bw
Eo = (Bo − Boi )
Swi cw +cf
Ef,w = Boi ( ) ∆p
1−Swi

88
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Cuando se descubre un nuevo yacimiento uno de los principales objetivos es determinar si el


yacimiento puede clasificarse como volumétrico esto es We = 0. La forma clásica para resolver
esta incógnita es evaluar la parte derecha de la ecuación (3.66) para cada presión y graficarlo
contra Np o el tiempo, como se muestra en la Figura 3.7. Dake[15] sugirió que el gráfico puede
tomar dos diferentes formas:
F
Cuando todos los puntos calculados de ( ) caen en una línea recta horizontal y están
Eo +Ef,w
representados por la línea A de la Figura 3.7, significa que el yacimiento puede ser
clasificado como volumétrico. Esto es un yacimiento que produce únicamente por
agotamiento y cuya energía viene solamente de la expansión de la roca, del agua connata
y del aceite, en este gráfico, la ordenada representa al volumen original de aceite, 𝑁.
F
Cuando los valores de ( )
Eo +Ef,w
aumentan como se muestra en las
curvas B y C de la Figura 3.7
representa un aumento de la
energía en el yacimiento por la
intrusión de agua o expansión
anormal de la roca. La curva C
puede representar a un yacimiento
con un fuerte empuje de agua
donde el acuífero actúa con un
comportamiento infinito, mientras
que B podría representar un
acuífero que ha alcanzado las Figura 3.7 Clasificación de yacimientos[51].
fronteras y que se agota al mismo
tiempo que el yacimiento.

Similarmente la ecuación (3.65) puede


usarse para determinar los mecanismos de
empuje del yacimiento y el volumen de
aceite original, N. Un gráfico de los fluidos
producidos, F contra el término de
expansión Eo + Ef,w como el de la Figura
3.8 dará como resultado una línea recta que
pasa a través del origen y cuya pendiente
es 𝑁, esto se cumple solo para el caso en
el que el yacimiento es volumétrico. Por otro
lado, si la tendencia no es lineal, el
yacimiento debe ser caracterizado como un
yacimiento con empuje de agua.
Figura 3.8 Fluidos producidos contra 𝐸𝑜 + 𝐸𝑓,𝑤 [51].

89
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Caso 2. Yacimiento volumétrico saturado


Un yacimiento volumétrico saturado es aquel que originalmente existe a su presión de burbuja. En
este caso, el principal mecanismo de empuje proviene de la liberación del gas disuelto y la
expansión del gas a medida que la presión cae por debajo de la presión de burbuja.

En este caso la única incógnita es el volumen de aceite original, N. Suponiendo que el término Ef,w
es despreciable en comparación con el término de la expansión del gas en solución, la ecuación
(3.60) puede simplificarse como sigue:

F = NEo (3.67)

Donde el término de producción de fluidos, F y la expansión del aceite y su gas disuelto, Eo han
sido definidos por las ecuaciones (3.61) y (3.62).

La ecuación (3.67) indica que un gráfico


de la producción de fluidos F contra el
término de expansión del aceite y su gas
disuelto Eo , dará como resultado una
línea recta que pasa por el origen con una
pendiente N, tal como se muestra en la
Figura 3.9.

Si al representar los puntos no se ajustan


a una línea recta, el mecanismo de
empuje es diferente y debe evaluarse de
manera diferente al yacimiento.

Figura 3.9 Fluidos producidos contra 𝐸𝑜 [51].

Caso 3. Yacimiento con empuje de casquete de gas


En un yacimiento donde la expansión de la capa de gas es el principal mecanismo de empuje, y si
se consideran despreciables la entrada de agua y el efecto de la expansión de la roca y el agua
connata, el balance de materia a partir de la ecuación (3.60) queda de la siguiente manera:

F = N(Eo + mEg ) (3.68)

Donde F, Eo y Eg están definidos por las ecuaciones (3.61), (3.62) y (3.63).

La forma de usar la ecuación (3.68) depende del número de incógnitas que tenga donde existen
tres posibilidades:
No se conoce N y m es conocido.
No se conoce m y N es conocido.
No se conocen N y m.

90
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Para el caso en que no se conoce N y m es


conocido, la ecuación (3.68) indica que el
gráfico de F contra (Eo + mEg ) dará como
resultado una línea recta que pasa por el origen
cuya pendiente es N, como se muestra en la
Figura 3.10.

Para el caso en que no se conoce m y N es


conocido la ecuación (3.68) puede arreglarse
de la siguiente manera para representar una
línea recta:
Figura 3.10 Fluidos producidos contra 𝐸𝑜 +
F
( ) − Eo = mEg (3.69) 𝑚𝐸𝑔 [51].
N

De acuerdo con la ecuación (3.69) al


F
representar gráficamente a ( − Eo ) contra Eg
N
se obtendrá una línea recta que pasa por el
origen con pendiente m, como la mostrada en
la Figura 3.11.

Para el caso en que se desconocen N y m, la


ecuación (3.68) puede arreglarse de la
siguiente manera:
𝐹
F Eg Figura 3.11 Gráfico de ( − 𝐸𝑜 ) contra 𝐸𝑔 [51].
𝑁
= N + mN ( ) (3.70)
Eo Eo

F Eg
Al representar un gráfico de ( ) contra ( ) dará como resultado una línea recta cuya ordenada
Eo Eo
al origen es N y la pendiente es mN. Este gráfico se ilustra en la Figura 3.12 donde se puede
calcular m como la pendiente entre la ordenada al origen.

𝐹 𝐸𝑔
Figura 3.12 Gráfico de ( ) contra ( ) [51].
𝐸𝑜 𝐸𝑜

91
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Caso 4. Yacimiento con empuje por agua


En los yacimientos con entrada de agua, identificar el acuífero y sus características y propiedades
es uno de los grandes desafíos al realizar un estudio de yacimientos.

En la ecuación (3.60) Dake[15] señala que el término Ef,w puede despreciarse en un yacimiento con
entrada de agua, debido a que se pueden despreciar las compresibilidades del agua connata y la
roca y además como la entrada de agua mantiene la presión, el término ∆p es pequeño, por lo
tanto, la ecuación resulta como:

F = N(Eo + mEg ) + We (3.71)

Si adicionalmente el yacimiento no tiene capa de gas, entonces la ecuación (3.71) se reduce a:

F = NEo + We (3.72)

Cuando se utilizan las dos ecuaciones anteriores, existe una gran incertidumbre en la
determinación de la entrada de agua We . De hecho, el cálculo de We exige un modelo matemático
que se base en el conocimiento de las propiedades del acuífero, las cuales se desconocen y no
son fáciles de determinar.

Para el caso de un yacimiento con entrada de agua y sin capa de gas, la ecuación (3.72) puede
expresarse de la siguiente manera:

F We
( )=N+( ) (3.73)
Eo Eo

A continuación, se presentan algunos modelos de entrada de agua aplicables a la EBM, estos son:
Modelo de acuífero con geometría definida.
Modelo de Schilthuis de flujo continuo.
Modelo de van Everdingen y Hurst.

Modelo de acuífero con geometría definida


Este modelo es el más sencillo para estimar la entrada de agua en un yacimiento de gas o aceite
y se basa en la definición de compresibilidad, que se define por:

∆V = cV∆p (3.74)

Aplicando al acuífero la definición de compresibilidad, se tiene que:

We = (cw + cf )Wi (pi − p) (3.75)

Donde We es la entrada de agua acumulada, bl; cw , la compresibilidad del agua del acuífero,
lpc −1 ; cf , la compresibilidad de la roca del acuífero, lpc −1 ; Wi , el volumen inicial de agua en el
acuífero, bl; pi , la presión inicial del yacimiento,lpc; y p, la presión actual del yacimiento, lpc.

92
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

El cálculo del volumen inicial de agua en el acuífero requiere conocer las propiedades y
dimensiones de este, las cuales raramente son medidas. Por ello, si se supone que el acuífero
tiene una forma radial, entonces:

π(ra 2 − re 2 )hϕ
Wi = [ ] (3.76)
5.615

donde ra es el radio del acuífero, pies; ry , es el radio del yacimiento, pies; h, es el espesor del
acuífero, pies; ϕ, la porosidad del acuífero.

La ecuación (3.76) sugiere que la entrada del agua al yacimiento es en todas las direcciones. Sin
embargo, no siempre es así, ya que ni el agua entra en todas las direcciones del yacimiento, ni el
yacimiento es circular. Por lo tanto, para tomar en cuenta estos casos, se debe modificar la
ecuación (3.76) de manera que describa el tipo de flujo. La modificación más sencilla consiste en
incluir una fracción del ángulo de entrada como se ilustra en la Figura 3.13, de manera que:

We = (cw + cf )fWi (pi − p) (3.77)

Donde f es la fracción del ángulo de intrusión θ y se calcula con:

𝜃
f= (3.78)
360

Este modelo solo es aplicable a acuíferos pequeños


cuyas dimensiones sean de la misma magnitud que el
yacimiento. De acuerdo con Dake, cuando esto sucede,
una caída de presión en el yacimiento se transmite
instantáneamente en el sistema acuífero-yacimiento. Por
ello sugiere que en acuíferos grandes se utilice un
modelo matemático que incluya al tiempo de respuesta
del acuífero a los cambios de presión en el yacimiento.

Muchas veces las propiedades del acuífero cw , cf , h, ra y


θ no se conocen, por ello es conveniente combinarlas y
tratarlas como una incógnita K. Así, la ecuación (3.77) Figura 3.13 Geometría radial
puede escribirse como: considerada para el acuífero[51].

We = KΔp (3.79)

Combinando la ecuación (3.79) con la ecuación (3.73) resulta:

F Δp (3.80)
( ) = N + K( )
Eo Eo

93
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

La ecuación (3.80) representa la solución


lineal para este modelo de acuífero y
F Δp
muestra que un gráfico de ( ) contra ( )
Eo Eo
producirá una línea recta con ordenada al
origen N y pendiente K tal como en la
Figura 3.14.

Modelo de Schilthuis de flujo continuo

El modelo de flujo continuo para un acuífero


propuesto por Schilthuis[48] está
representado por la siguiente ecuación: 𝐹 𝛥𝑝
Figura 3.14 Gráfico de ( ) contra ( ) [51].
𝐸𝑜 𝐸𝑜

t
We = C ∫ (pi − p)dt (3.81)
0

Donde We es la entrada de agua acumulada; C, la constante de intrusión de agua; t, el tiempo; pi ,


la presión inicial del yacimiento; p, la presión en el contacto agua-aceite al tiempo t.

Combinando las ecuaciones (3.81) y (3.73) resulta:


t
F ∫ (pi − p)dt
( ) = N + C( 0 ) (3.82)
Eo Eo

F
Al representar gráficamente ( ) en
Eo
t
∫ (pi −p)dt
función de ( 0 ) resulta una línea
Eo

recta como en la Figura 3.15 donde la


ordenada al origen es el volumen de
aceite original N y la pendiente C permite
el cálculo de la entrada de agua al
yacimiento junto con el área bajo la curva
en la gráfica de presión contra tiempo.

Modelo de van Everdingen y Hurst


Este método fue propuesto por van
Everdingen y Hurst y se expresa Figura 3.15 Determinación gráfica de 𝑁 y 𝐶 [51].
matemáticamente por la siguiente
ecuación:

We = B ∑ ΔpWeD (3.83)

94
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

con:

B = 1119ϕct rc 2 hf (3.84)

donde B es la contante de entrada de agua; y Δp la caída de presión.

Van Everdingen y Hurst introdujeron el término adimensional de intrusión de agua WeD


(consultar[54] para ver valores de WeD ), el cual es función del tiempo adimensional t D y el radio
adimensional rD ,que vienen dados por las siguientes ecuaciones:

kt
t D = 6328×10−3 (3.85)
ϕμw ct re 2

ra
rD = (3.86)
re

ct = cw + cf (3.87)

Donde t es el tiempo en días; k, la permeabilidad del acuífero, md; ϕ, la porosodad del acuífero;
μw , la viscosidad del agua en el acuífero, cp; ra , radio del acuífero, pies; re , radio del yacimiento,
pies; y cw , la compresibilidad del agua, lpc1 .

Combinando la ecuación (3.83) con la ecuación (3.73) se obtiene:

F ∑ ΔpWeD
( ) = N+ B( ) (3.88)
Eo Eo

El procedimiento para resolver la ecuación (3.88) es el siguiente:


Paso 1: A partir de la historia de producción y de presiones del yacimiento, se calcula la
producción de fluidos F y el término de la expansión de los fluidos Eo .
Paso 2: Se supone una configuración del acuífero, esto es lineal o radial.
Paso 3: Se supone el radio del acuífero ra y se calcula el radio adimensional rD .
F ∑ ΔpWeD
Paso 4: se construye un gráfico de en función de ( ), en escala cartesiana, si los
Eo Eo
datos supuestos son correctos, el gráfico debe representar una línea recta cuta ordenada
al origen sea el aceite original N y la pendiente la constante de intrusión de agua B, tal como
se muestra en la en la Figura 3.16. Obsérvese que se pueden obtener resultados
diferentes, y cada uno de ellos indica lo siguiente:
o Completa dispersión; los datos usados son erróneos.
o Una línea curva hacia arriba: el radio del acuífero supuesto es demasiado pequeño.
o Una línea curva hacia abajo: el radio del acuífero supuesto es demasiado grande.
o Una línea en forma de s: se tendrá un mejor ajuste si se supone que la intrusión de
gua es lineal.

95
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Figura 3.16 Gráfico de Havlena y Odeh [51][34] para determinar características del acuífero.

3.5.4 Pronóstico de producción con la Ecuación de Balance de Materia


Muchos de los cálculos en ingeniería, requieren el uso de la ecuación de balance de materia y
algunas de las aplicaciones útiles de la ecuación de balance de materia requiere el uso de
ecuaciones de flujo, por ejemplo, la ley de Darcy. Combinando los dos conceptos es posible
predecir el comportamiento futuro de la producción en función del tiempo. Sin la ecuación de flujo,
la ecuación de balance de materia solo provee el comportamiento del yacimiento en función de la
presión.

La predicción del comportamiento futuro del yacimiento se logra a partir de las siguientes dos
fases:
Fase 1. La predicción de la producción de hidrocarburos como una función de la de la
presión del yacimiento. Esta etapa se lleva a cabo sin considerar:
o El número de pozos.
o Localización de los pozos.
o Gasto de producción de los pozos.
o Tiempo necesario para depresionar el yacimiento.
Fase 2. La segunda etapa de predicción es la relacionada con el tiempo de producción. En
esta fase, los datos del comportamiento de los yacimientos, calculados a partir de la fase
uno, se correlacionan con el tiempo. Es necesario contar con la cantidad de pozos y la
productividad de cada pozo.

Fase 1. Predicción del comportamiento del yacimiento


La ecuación de balance de materia anteriormente presentada en sus diferentes representaciones
matemáticas está diseñada para calcular tres incógnitas, el volumen de aceite original N, el tamaño
de la capa de gas m , y la entrada de agua We . Para usar esta ecuación para predecir el
comportamiento futuro de un yacimiento, se requieren dos ecuaciones adicionales.
Relación gas aceite.
Relación de saturaciones con la producción acumulada.

96
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Relación gas aceite producido


La relación gas aceite (RGA) para cualquier tiempo es la relación del volumen total de gas
producido a condiciones estándar con el volumen de aceite producido en el mismo periodo de
tiempo. La RGA puede expresarse matemáticamente como[51]:

k rg μo Bo
RGA = R s + ( ) ( ) (3.89)
k ro μg Bg

Donde RGA es la relación gas aceite; R s , es la relación de solubilidad del gas en el aceite; k rg , es
la permeabilidad relativa al gas; k ro , es la permeabilidad relativa al aceite; Bo , es el factor de
volumen del aceite; Bg , es el factor de volumen del gas; μo , es la viscosidad del aceite; μg , es la
viscosidad del gas.

La RGA es de suma importancia en el análisis del yacimiento, la importancia de la ecuación (3.89)


pude discutirse a partir de las figuras Figura 3.17 y Figura 3.18. Estas figuras muestran el
comportamiento de la RGA en un yacimiento hipotético.

Figura 3.17 Comportamiento de RGA. Figura 3.18 Comportamiento de RGA y Rs.

Existen tres tipos de relaciones gas-aceite:


La relación gas aceite instantánea, RGA
Relación de solubilidad del gas en el aceite, R s
Relación gas aceite acumulado, R p = Gp ⁄Np

La producción acumulada de gas Gp esta relacionada con la RGA y la producción acumulada de


aceite por la expresión:

Np
Gp = ∫ RGAdNp (3.90)
0

97
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

La ecuación (3.90) indica que la producción


acumulada de gas en cualquier tiempo es
esencialmente el área bajo la curva en la
gráfica RGA contra Np como se muestra en la
Figura 3.19.

La producción acumulada de gas ΔGp entre los


puntos Np1 y Np2 esta dada por:

Np2
ΔGp = ∫ RGAdNp (3.91)
Np1 Figura 3.19 Relación entre RGA y 𝑁𝑝

La integral anterior puede ser aproximada por la forma trapezoidal para obtener:

RGA1 − RGA2
ΔGp = [ ] (Np2 − Np1 ) (3.92)
2

La ecuación (3.90) puede ser aproximada mediante:

Gp = ∑ RGAprom ΔNp (3.93)

Ecuaciones de saturación
La saturación de un fluido (gas, aceite o agua) en el yacimiento está definido como el volumen del
fluido dividido entre el volumen de poros:

volumen de aceite
So = (3.94)
volumen de poros

volumen de agua
Sw = (3.95)
volumen de poros

volumen de gas
Sg = (3.96)
volumen de poros

So + Sw + Sg = 1 (3.97)

Si se considera al yacimiento volumétrico y sin capa de gas que contiene un volumen N de aceite
original en sitio a la presión pi y asumiendo que no hay entrada de agua, se tiene:

Soi = 1 − Swi (3.98)

Donde el índice i indica condiciones iniciales. De la definición de saturación de aceite:

98
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

NBoi (3.99)
1 − Swi =
volumen poroso

NBoi
volumen poroso = (3.100)
1 − Swi

Si en el yacimiento se han producido Np barriles de aceite, el aceite remanente es:

volumen de aceite remanente = (N − Np )Bo (3.101)

Sustituyendo las ecuaciones (3.100) y (3.101), en (3.94) se tiene:

(N − Np )Bo
So = (3.102)
NBoi
( )
1 − Swi

O reacomodando términos:

N p Bo
So = (1 − Swi ) (1 − ) (3.103)
N Boi

Para la saturación del gas se tiene:

Sg = 1 − So − Swi (3.104)

Tal vez sea importante señalar como se determinan las permeabilidades relativas

La ecuación (3.103) sugiere que el volumen de aceite remanente estará uniformemente distribuido
en todo el yacimiento. Es importante señalar que, si existe algún mecanismo de empuje como la
entrada de agua o casquete de gas, la saturación debe ser corregida debido al aceite que se queda
atrapado en las zonas invadidas.

Todas las metodologías que han sido desarrolladas para predecir el comportamiento del
yacimiento están esencialmente basadas en el empleo y combinación de las siguientes relaciones:
Ecuación de balance de materia.
Ecuaciones de saturación.
Relación gas aceite, RGA.
Ecuaciones que relacionan R p con la RGA.

Con la información anterior, es posible determinar la recuperación primaria de un yacimiento con


la disminución de la presión del yacimiento. Existen, entre otras, tres metodologías que se utilizan
ampliamente en la industria petrolera para predecir el comportamiento del yacimiento, estas son:
Método de Tracy[53].
Método de Muskat[41].
Método de Tarner[52].

99
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Estos métodos generan esencialmente los mismos resultados cuando pequeños intervalos de
presión o tiempo son usados. Los métodos pueden ser usados para predecir el comportamiento
de un yacimiento bajo cualquier mecanismo de producción, incluyendo:
Gas en solución.
Casquete de gas.
Acuífero asociado.
Empuje combinado.

El uso práctico de estas metodologías es ilustrado para predecir el comportamiento de un


yacimiento volumétrico que produce debido a la expansión del aceite y gas disuelto, bajo el cual,
pueden presentarse los casos de un yacimiento volumétrico bajosaturado y saturado. Al usar la
ecuación de saturación adecuada, se puede predecir el comportamiento de un yacimiento
operando bajo diferentes mecanismos de empuje.

Método de Tracy
A partir de la EBM, ignorando la compresibilidad del agua y de la formación la ecuación (3.56)
puede expresarse como:

Np Bo + (Gp −Np R s )Bg − (We − Wp )Bw


N= (3.105)
B
(Bo − Boi ) + (R si − R s )Bg + mBoi ( g − 1)
Bgi

Donde el término de la producción acumulada de gas Gp está definido por:

Gp = R p N p (3.106)

Tracy[53] sugiere que la ecuación (3.105) puede reordenarse de la siguiente manera:

N = Np Φo + Gp Φg + (Wp Bw − We )Φw (3.107)

Donde Φo , Φg y Φw son llamadas funciones PVT y están definidas por:


Bo − R s Bg
Φo = (3.108)
Den

Bg
Φg = (3.109)
Den

1
Φw = (3.110)
Den

Bg
Den = (Bo − Boi ) + (R si − R s )Bg + mBoi ( − 1) (3.111)
Bgi

100
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Para un yacimiento con empuje por expansión del aceite y gas en solución la ecuación (3.107) y
la ecuación (3.111) se reducen a:

N = N p Φ o + Gp Φ g (3.112)

Den = (Bo − Boi ) + (R si − R s )Bg (3.113)

El método de Tracy[53], se realiza en series de caídas de presión que van de una presión conocida
p∗ a una presión más baja p. Los resultados calculados serán los nuevos valores de p∗ y así
sucesivamente.

Para cada caída de presión de p∗ a p la produccion incremental de aceite y gas son ΔNp y ΔGp y
están expresadas por:

Np = Np ∗ + ΔNp (3.114)

Gp = Gp ∗ + ΔGp (3.115)

Donde Np ∗ y Gp ∗ son la producción acumulada de aceite y gas conocidas al nivel de presión p∗ ,


por otra parte Np y Gp son la producción acumulada de aceite y gas desconocidos al nivel de
presión p.

Reemplazando las ecuaciones (3.114) y (3.115) en la ecuación (3.112) se tiene:

N = (Np ∗ + ΔNp )Φo + (Gp ∗ + ΔGp )Φg (3.116)

Definiendo la RGA promedio entre las dos presiones p∗ y p como:

RGA∗ + RGA
RGAprom = (3.117)
2

La producción incremental de gas ΔGp puede ser aproximada por la ecuación (3.93) como:

ΔGp = RGAprom ΔNp (3.118)

Reemplazando la ecuación (3.118) en la ecuación (3.116) se tiene:

N = (Np ∗ + ΔNp )Φo + (Gp ∗ + RGAprom ΔNp )Φg (3.119)

En la ecuación (3.119) Si N = 1, la producción acumulada Np y la producción acumulada Gp se


convierten en fracciones del aceite original en sitio. Reacomodando la ecuación (3.119) se tiene:

101
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

1 − ( N p ∗ Φ o + Gp ∗ Φ g )
ΔNp = (3.120)
Φo + RGAprom Φg

En la ecuación (3.120) se tienen dos incógnitas la producción incremental de aceite ΔNp y el


promedio de la relacion gas aceite producida RGAprom .

Tracy[53] propone la siguiente técnica para resolver la ecuación (3.120).


1. Seleccionar la presión promedio del yacimiento p.
2. Calcular las funciones PVT Φo y Φg con las ecuaciones (3.108) y (3.109).
3. Estimar RGA a la presión p.
4. Calcular RGAprom con la ecuación (3.117).
5. Calcular ΔNp con la ecuación (3.120).
6. Calcular Np con la ecuación (3.114).
7. Calcular la saturación de aceite y gas en la presión p del yacimiento usando las ecuaciones
(3.103) y (3.104) como:

Bo
So = (1 − Swi )(1 − Np ) (3.121)
Boi

Sg = 1 − So − Swi (3.122)

8. Obtener la relación de permeabilidades k rg ⁄k ro para la saturación de gas sg .


9. Calcular RGA con la ecuación (3.89).
10. Comparar la RGA estimada en el paso 3 con la calculada en el paso 9. Si los valores están
dentro de la tolerancia permitida, se puede proceder al siguiente paso. Si no están dentro
de la tolerancia, elegir la RGA calculada en paso 9 y repetir los cálculos desde el paso 3.
11. Calcular la producción de gas acumulada con la ecuación (3.93).
12. Dado que los resultados de los cálculos están basados en 1 barril de aceite original en sitio,
una comprobación final de la precisión de la predicción debe hacerse en la EBM, con:

Np Φo + Gp Φg = 1 ± Tolerancia (3.123)

13. Repetir desde el paso 1 para otra presión.

Método de Muskat
Muskat[41] expresó la ecuación de balance de materia en la siguiente forma diferencial:

So Bg dR s So k rg μo dBo d(1⁄Bg )
+ + (1 − So − Swc )Bg
dSo Bo dp Bo k ro μg dp dp
= (3.124)
dp k
μ rg
1+ o
μg k ro

102
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Si en la ecuación anterior se agrupan las variables que dependen de la presión, se tiene:

Bg dR s
X(p) = (3.125)
Bo dp

1 μo dBo
Y(p) = (3.126)
Bo μg dp

d(1⁄Bg )
Z(p) = Bg (3.127)
dp

Sustituyendo las ecuaciones (3.125), (3.126) y (3.127) en la ecuación (3.124), se tiene:

k rg
ΔSo So X(p) + So Y(p) + (1 − So − Swc )Z(p)
k ro
( )= (3.128)
Δp μ k rg
1+ o
μg k ro

Craft y Hawkins[14] proponen el siguiente procedimiento para resolver la ecuación de Mustak para
una caída de presión Δp = (p∗ − p).
1. Preparar una gráfica de k rg ⁄k ro contra saturación de gas.
2. Graficar R s , Bo y (1⁄Bg ) contra la presión y determinar la pendiente de cada gráfica en las
dRs dBo d(1⁄Bg )
presiones seleccionadas para tener los valores de , , .
dp dp dp
3. Calcular los términos dependientes de la presión X(p), Y(p) y Z(p) con las ecuaciones
(3.125), (3.126) y (3.127) que corresponden a las presiones seleccionadas en el punto 2.

4. Graficar los términos dependientes de la


presión como en la Figura 3.20.
5. Gráficamente determinar los valores de
X(p), Y(p) y Z(p) que corresponden a la
presión p.
6. Resolver la ecuación (3.128) para
(Δso ⁄Δp) usando la saturación de aceite
So ∗ en el inicio del intervalo de presión
p∗ .
7. Determinar la saturación de aceite So a Figura 3.20 Términos dependientes de la
la presión promedio del yacimiento p, presión X(p), Y(p) y Z(p)[51].
con la ecuación:

ΔSo
So = So∗ − (p∗ − p) ( ) (3.129)
Δp

103
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

8. Usando So del paso 7 y la presión p, recalcular (ΔSo ⁄Δp) con la ecuación (3.128).
9. Calcular el promedio para (ΔSo ⁄Δp) de los dos valores obtenidos en los pasos 6 y 8 con:

ΔSo 1 ΔSo ΔSo


( ) = [( ) +( ) ] (3.130)
Δp Prom 2 Δp Paso 6 Δp Paso 8

10. Usando (ΔSo ⁄Δp)Prom , resolver para la saturación de aceite So , con la ecuación (3.131).

ΔSo
So = So∗ − (p∗ − p) ( ) (3.131)
Δp Prom

Este valor de So se convierte en So∗ para el siguiente intervalo de presión.


11. Calcular la saturación de gas Sg con:

Sg = 1 − Swi − So (3.132)

12. Calcular la producción acumulada de aceite con:

Boi So
Np = N [1 − ( ) ( )] (3.133)
Bo 1 − swi

13. Calcular la producción acumulada de gas mediante las ecuaciones (3.89) y (3.93).
14. Repetir los pasos anteriores para intervalos de presión sucesivos, hasta la presión de
interés.

Cabe destacar que este método se basa en la suposición de que la saturación de aceite es
uniforme en todo el yacimiento y por lo tanto que la solución será incorrecta cuando exista una
segregación de gas apreciable en la formación. Por tanto, es aplicable sólo cuando las
permeabilidades son relativamente bajas.

Método de Tarner
Tarner[52] propone una técnica alternativa para determinar la producción de aceite acumulado Np
y la produccion acumulada de gas Gp como función de la presión del yacimiento. El método se
basa en resolver la ecuación de balance de materia y la ecuación de RGA de manera simultánea
para una determinada caída de presión de p1 a p2 . Esto haciendo la suposición que la producción
de aceite se incrementa de Np1 y Gp1 a Np2 y Gp2 . Para simplificar la descripción del método, el
procedimiento de cálculo se realiza para un yacimiento volumétrico de aceite saturado. Debe
señalarse que el método de Tarner podría extenderse para predecir el comportamiento volumétrico
de yacimientos bajo diferentes mecanismos de empuje.

1. Seleccionar una presión futura p2 por debajo de la presión inicial (actual) del yacimiento p1
y obtener los datos PVT necesarios. Asumir que la producción de aceite incrementa de
Np1 y Np2 .
2. Estimar o suponer la producción de aceite acumulada Np2 a la presión p2 .

104
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

3. Calcular la producción acumulada de gas reacomodando la ecuación de balance de materia


como:

Boi − Bo Bo
Gp2 = N [(R si − R s ) − ] − Np2 [ − R s ] (3.134)
Bg Bg

4. Calcular las saturaciones de gas y de aceite asumiendo como producción acumulada Np2
a la presión p2 mediante las ecuaciones (3.103) y (3.104).
5. Usando los datos de permeabilidad relativa disponibles, determinar la relación de
permeabilidades relativas k rg ⁄k ro que corresponda a la saturación de gas en p2 y calcular
RGA2 a la p2 con la ecuación:

k rg μo Bo
RGA2 = R s + ( )( ) (3.135)
k ro μg Bg

6. Calcular nuevamente la producción de gas acumulada Gp2 a la presión p2 aplicando la


ecuación.

RGA1 + RGA2
Gp2 = Gp1 + [ ] [Np2 − Np1 ] (3.136)
2

donde RGA1 representa la relación gas aceite producida a la p1 .


7. La producción de gas total Gp2 durante el primer periodo de predicción es calculado con la
EBM y comparado con el total de gas producido calculado con la ecuación de RGA. Estas
dos ecuaciones proveen dos formas independientes de determinar el gas producido. Por lo
tanto, si el gas producido Gp2 calculado en el paso 3 coincide con el del paso 6, el valor de
Np2 es correcto y un nuevo cálculo puede ser efectuado, de otra manera se asume otro
valor de Np2 y se repiten los pasos 2 a 6.
8. Para simplificar el proceso iterativo, se pueden asumir tres valores de Np2 los cuales darán
tres diferentes soluciones para cada ecuación (EBM y RGA). Estos valores de Gp2 pueden
graficarse contra los valores de Np2 resultando dos curvas, la intersección de estas es la
producción de gas y aceite que satisface las dos ecuaciones.

Fase 2. Relación del comportamiento del yacimiento con el tiempo


Las técnicas anteriores para predecir el comportamiento del yacimiento muestran la relación de la
producción y la RGA como función de la presión del yacimiento, y no relaciona esta producción,
ya sea de aceite Np o de gas Gp con el tiempo. La Figura 3.21 ilustra la predicción del
comportamiento de la producción como función de la presión.

El tiempo requerido para la producción, puede ser calculado aplicando el concepto de IPR (inflow
performance relationship) junto con las predicciones de la ecuación de balance de materia.
Vogel[55] expresa la IPR como:

105
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

q Pwf Pwf 2
=1-0.2 ( ) -0.8 ( ) (3.137)
qmáx Pws Pws

La siguiente metodología puede emplearse para


relacionar el comportamiento de la producción de un
yacimiento con el tiempo.
1. Graficar Np contra p como en la Figura 3.21.
2. Construir la curva de IPR para cada pozo en
el campo para la presión promedio inicial p∗ .
Calcular la curva para todo el yacimiento,
sumando cada curva de IPR de los pozos, la
Figura 3.23 muestra un ejemplo de esto.
3. Usando la presión de fondo fluyendo mínima
(pwf )mín determinar el gasto total del campo Figura 3.21 Producción acumulada
(qo )∗ T . como función de la presión promedio del
4. Seleccionar una presión promedio futura p y yacimiento[51].
determinar la IPR para cada pozo en el
yacimiento. Como lo muestra la Figura 3.22.
5. Usando la (pwf )mín , determinar el gasto total
(qo )T .
6. Calcular el promedio de los gastos (q̅o )T
mediante la siguiente ecuación:

(qo )T + (qo )∗ T
(q̅o )T = (3.138)
2 Figura 3.22 IPR futura del yacimiento [51]

7. Calcular el tiempo ∆t requerido para producir


la producción de aceite incremental ∆Np
durante el primer periodo de presión, de p∗ a
p, con:

∆Np
∆t = (3.139)
(q̅o )T

8. Repetir los pasos anteriores para calcular el


tiempo para cada intervalo de presión p, el
tiempo total t esta dado por: Figura 3.23 Comportamiento IPR del
yacimiento[51]

t = ∑ ∆t (3.140)

106
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

3.5.5 Ventajas y desventajas


Principales ventajas del Método de balance de materia:
Económico.
Se requiere poca información.
Da una buena aproximación del comportamiento del yacimiento.
Permite calcular volúmenes originales.
Es más exacto que los métodos volumétricos.
Puede servir como base en el empleo de otros métodos.
Ayuda a determinar los diferentes mecanismos de empuje que actúan en el yacimiento.

Principales desventajas del método de balance de materia


Considera homogéneas las propiedades de la roca y de los fluidos en todo el yacimiento,
provocando un cierto error.
No considera el movimiento de los fluidos.
No toma en cuenta el factor geométrico del yacimiento, ya que no es posible conocer la
distribución de los fluidos en la estructura.

3.6 Simulación numérica de yacimientos


La simulación numérica de yacimientos es actualmente una de las herramientas más utilizadas
para realizar cálculo de reservas y pronósticos de producción, este método consiste principalmente
en dividir o discretizar el yacimiento en partes pequeñas llamadas “celdas” y asignarle a cada una,
características y propiedades propias tanto de la formación como de los fluidos, acopladas a
ecuaciones de balance de materia y de flujo de fluidos en medios porosos, lo cual permite la
consideración de las heterogeneidades y anisotropías de flujo de los fluidos en el yacimiento y
tener una gran aproximación del comportamiento real del yacimiento.

De esta manera la simulación numérica de yacimientos combina la física, matemáticas e ingeniería


de yacimientos para obtener algoritmos que deben ser programados para desarrollar una
herramienta que sea capaz de predecir el comportamiento de un yacimiento petrolero bajo
cualquier condición de explotación.

La simulación numérica de yacimientos es pues, el proceso de inferir el comportamiento real a


partir del comportamiento de un modelo matemático. Un simulador numérico es un conjunto de
ecuaciones diferenciales parciales que expresan la conservación de masa y energía.

La simulación numérica tiene como objetivos:


Proporcionar al ingeniero de explotación una herramienta confiable para predecir, con su
incertidumbre asociada, el comportamiento de los yacimientos de hidrocarburos bajo
diferentes condiciones de operación.
El modelar el comportamiento de un yacimiento de hidrocarburos bajo diferentes esquemas
de producción reduce el riesgo asociado a la elección del plan de explotación y por lo tanto
minimiza los flujos de efectivos negativos.

107
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Describir cuantitativamente el flujo de fluidos en un yacimiento heterogéneo, cuya


producción se determina no solamente por las propiedades del yacimiento, sino también
por la demanda del mercado, las estrategias de inversión y las políticas gubernamentales.
Resolver problemas que no pueden ser resueltos analíticamente de alguna otra manera.

3.6.1 Clasificación de los simuladores de yacimientos


Los simuladores de yacimientos pueden ser clasificados de acuerdo a diferentes enfoques
mostrados en la Tabla 3.2

Tabla 3.2 Clasificación de los simuladores de yacimientos.


Enfoque Tipos
Gas y agua.
Tipo de fluido Gas, aceite y agua.
Aceite y agua.
Recuperación convencional.
Desplazamiento miscible.
Proceso de recuperación
Recuperación térmica e incorporación de químicos.
Recuperación secundaria.
1D.
Número de dimensiones 2D.
3D.
Monofásicos.
Número de fases Bifásicos.
Trifásicos.
Rectangulares.
Sistema coordenado Cilíndricos.
Esféricos.
Ordinarios.
Doble porosidad/permeabilidad.
Estructura de roca
Acoplamiento hidráulico / térmico.
Fracturados.

3.6.2 Proceso de simulación numérica de yacimientos


Para hacer una simulación numérica comúnmente se deben tener datos precisos del yacimiento,
tanto geológicos como de los fluidos, estos datos se obtienen de información de campos análogos,
de pozos cercanos al yacimiento o de información recabada durante la exploración del mismo.

La simulación numérica de yacimientos involucra cuatro etapas principales interrelacionadas


mostradas en la Figura 3.24. En la primera, el modelo físico, se incorporan y desarrollan los
procesos relevantes que intervienen en el fenómeno de estudio, en este caso en particular, el flujo
de fluidos en medios porosos. En el modelo matemático, involucramos un conjunto de ecuaciones
diferenciales parciales no lineales y acopladas dependientes del tiempo, analizando su existencia,
convergencia y estabilidad. El modelo numérico emplea esquemas numéricos adecuados de

108
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

discretización, tales como diferencias


finitas, volumen finito o elemento finito,
integrando las propiedades básicas de las
dos primeras etapas; modelos físico y
matemático. En la cuarta etapa, en el
modelo computacional se desarrollan
algoritmos y sus códigos, a fin de resolver
eficientemente el sistema lineal y no lineal
de ecuaciones algebraicas asociado a la
discretización numérica. Cada una de Figura 3.24 Etapas del proceso de modelado y
estas etapas es esencial para la simulación simulación.
del yacimiento, en ocasiones es necesario iterar un determinado número de veces alguna de las
etapas de la simulación a fin de ajustar los modelos físicos, matemáticos, numéricos y algoritmos
computacionales para obtener un pronóstico preciso sobre el comportamiento del yacimiento.

La creciente aceptación de la simulación de yacimientos puede atribuirse a los avances en el


desarrollo computacional, modelos matemáticos, métodos numéricos, técnicas de solución y
herramientas de visualización científica.

Los pasos que usualmente se aplican para una simulación de yacimientos son los siguientes:
Establecer los objetivos del estudio de la simulación. El primer paso es definir objetivos
claros. Estos objetivos deben ser alcanzables y compatibles con yacimientos disponibles y
datos de producción.
Recopilar y validar los datos de yacimientos. En este paso se deben obtener datos del
yacimiento y la producción. Los datos que cumplan con los objetivos son incorporados al
simulador.
Diseñar el simulador. Este paso implica las 4 áreas mostradas en la Figura 3.24, la
construcción de un modelo físico conceptual, el desarrollo de modelos matemáticos, y
modelos numéricos y el desarrollo de modelos computacionales.
Validación histórica del simulador. Una vez que el simulador es construido, este debe ser
calibrado con datos disponibles de producción ya que gran parte de los datos de un
simulador típico, necesitan ser verificados.
Hacer predicciones. En la etapa final de la aplicación, se evalúan diversos planes de
desarrollo y producción, llevándose a cabo un análisis de sensibilidad de diversos
parámetros de producción en el yacimiento.

Modelo conceptual
Para poder representar el comportamiento de un yacimiento mediante un modelo matemático se
deben integrar y definir conceptos básicos de ingeniería de yacimientos, propiedades de la roca y
de los fluidos, la ley de conservación de masa y ecuaciones de flujo que describan con
comportamiento de los fluidos dentro del medio poroso para predecir el comportamiento del
yacimiento bajo diferentes esquemas de explotación.

109
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Formulación matemática del problema


Para entender el flujo de fluidos en medios porosos, se tiene que postular algún sistema de
ecuaciones el cual gobierne el comportamiento de los fluidos.

Las ecuaciones básicas son obtenidas combinando varios principios:


Conservación de la masa (ecuación de continuidad).
La ley de Darcy que describe el gasto de un fluido moviéndose dentro y fuera de un volumen
definido.
Una ecuación de estado que describa la densidad del fluido como función de la temperatura
y presión.
Conservación de energía.

Debido a que el flujo de fluidos en medios porosos es considerado a temperatura constante, la


ecuación de conservación no se considera en el análisis. Las ecuaciones que controlan el flujo de
fluidos a través de medios porosos junto con las condiciones iniciales y de frontera conforman el
modelo matemático del yacimiento.

El proceso de derivación de las ecuaciones para el flujo de un solo fluido es mostrado a


continuación:

Conservación de la masa
La ecuación de continuidad
es una expresión de un
balance de materia, esta
puede ser derivada a partir
de un volumen de control
como el mostrado en la
Figura 3.25. Que es un
prisma rectangular con
dimensiones ∆x, ∆y y ∆z,
con sus lados paralelos a
los ejes coordenados y
centro en (x, y, z) . Para este
prisma rectangular se
puede escribir una ecuación
de balance de materia para
un solo fluido siguiendo las
direcciones x, y, y z. En la Figura 3.25 Volumen de control en coordenadas cartesianas.
cara x − Δx⁄2 del prisma
rectangular, el gasto y la densidad del fluido son qx−Δx⁄2 y ρx−Δx⁄2 respectivamente, similarmente
en las caras y − Δy⁄2 y z − Δz⁄2 los gastos y densidades del fluido son qy−Δy⁄2 , ρy−Δy⁄2 y qz−Δz⁄2
, ρz−Δz⁄2 respectivamente. De la misma manera para las caras x + Δx⁄2, y + Δy⁄2 y z + Δz⁄2 los
gastos y densidades pueden expresarse por: qx+Δx⁄2 , ρx+Δx⁄2 , qy+Δy⁄2 , ρy+Δy⁄2 y qz+Δz⁄2 , ρz+Δz⁄2 .

110
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Para el volumen de control mostrado en la Figura 3.25, se puede escribir la ecuación de balance
de materia de la siguiente forma:

(mi − mo ) + ms = ma (3.141)

Donde mi es la masa que entra al volumen de control; mo , es la masa que sale del volumen de
control; ms es la masa que entra o sale de una fuente externa, por ejemplo, un pozo; ma , es la
masa acumulada en el volumen de control.

Al multiplicar el gasto q y la densidad ρ se tiene como resultado la masa que entra o sale del
volumen de control por unidad de tiempo porque:

L3 m m
[q ( )] [ρ ( 3 )] = [w ( )] (3.142)
t L t

La Figura 3.25 muestra una flecha que indica una adición de masa que puede ser inyectada o
producida del volumen de control y se representa como:

m
qm ( ) (3.143)
t

Se usará una convención donde el signo positivo indicará una entrada de fluido al volumen de
control y, por el contrario, el signo negativo indicará extracción de fluido del volumen de control.

Con las definiciones anteriores, podemos escribir el siguiente balance de masa por un periodo de
tiempo, Δt.

[(w) Δx Δt + (w) Δy Δt + (w) Δz Δt] − [(w) Δx Δt + (w) Δy Δt + (w) Δz Δt]


(3.144)
x− y− z− x+ y+ z+
2 2 2 2 2 2
+ qm Δt = (ϕΔxΔyΔzρ)t+Δt − (ϕΔxΔyΔzρ)t

Donde los gastos másicos wx , wy y wz pueden expresarse en términos de densidad, velocidad y


área como:

wx = αc ρux Ax (3.145)

wy = αc ρuy Ay (3.146)

wz = αc ρuz Az (3.147)

En las ecuaciones (3.145), (3.146) y (3.147), Ax , Ay y Az son las áreas transversales a las
direcciones x, y y z respectivamente. Las definiciones de wx , wy y wz pueden ser sustituidas en la
ecuación (3.144) obteniéndose:

111
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

− [(ρux Ax )x+Δx − (ρux Ax )x−Δx +(ρuy Ay ) Δy − (ρuy Ay ) Δy + (ρuz Az )z+Δz −


2 2
y+ y− 2
2 2 (3.148)
qm 1 (ϕΔxΔyΔzρ)t+Δt −(ϕΔxΔyΔzρ)t
(ρuz Az ) Δz ]+ =
z− αc αc Δt
2

Dividiendo la ecuación (3.148) por ΔxΔyΔz y sabiendo que Vb = ΔxΔyΔz es el volumen del volumen
de control se tiene:

(ρux ) Δx −(ρux ) Δx (ρuy ) Δy −(ρuy ) Δy (ρuz ) Δz −(ρuz ) Δz


x+
2
x−
2
y+
2
y−
2
z+
2
z−
2 qm
−[ ]−[ ]−[ ]+ =
Δx Δy Δz αc Vb (3.149)
1 (ϕρ)t+Δt −(ϕρ)t
αc Δt

Tomando los límites en espacio y tiempo tenemos lo siguiente:

(ρux ) Δx −(ρux ) Δx (ρuy ) Δy −(ρuy ) Δy (ρuy ) Δy −(ρuy ) Δy


x+
2
x−
2
y+
2
y−
2
y+
2
y−
2 qm
lim {[− − − ]+ }=
Δx→0 Δx Δy Δy αc Vb
Δy→0
Δz→0
Δt→0 (3.150)
(ϕρ)t+Δt −(ϕρ)t
lim { }
Δx→0 αc Δt
Δy→0
Δz→0
Δt→0

En la ecuación (3.150), podemos reconocer la definición de la primera derivada parcial con


respecto al tiempo y espacio (x, y, z y t respectivamente)

Con respecto al espacio:


∆s ∆s
∂f f (s + ) − f (s − )
= lim 2 2 , s = x, y, z (3.151)
∂s ∆s→0 ∆s
Con respecto al tiempo:
∂f f(t + ∆t) − f(t)
= lim (3.152)
∂t ∆t→0 ∆t
Con esto la ecuación (3.150) puede ser reescrita como:
∂ ∂ ∂ qm 1 ∂
− (ρux ) − (ρuy ) − (ρuz ) + = (ϕρ) (3.153)
∂x ∂y ∂z αc Vb αc ∂t
Multiplicando la ecuación (3.153) por el volumen Vb obtenemos:
∂ ∂ ∂ qm Vb ∂
− (ρux Ax )Δx − (ρuy Ay )Δy − (ρuz Az )Δz + = (ϕρ) (3.154)
∂x ∂y ∂z αc αc ∂t
La expresión anterior es una forma común de la ecuación de continuidad o de la conservación de
la masa en tres dimensiones.

112
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Ley de Darcy
La ley de Darcy es una relación empírica que relaciona el flujo de fluidos a través de un medio
poroso con el gradiente de potencial, para un solo fluido y una sola dimensión, esta ley puede
expresarse en una forma diferencial como:
q k x dΦ
= ux = −βc (3.155)
Ax μ dx
Donde βc es un factor de conversión; k, es la permeabilidad absoluta en la dirección del flujo; μ, es
la viscosidad del fluido; ux , es la velocidad del flujo; Φ, es el potencial del fluido.

Con la definición del potencial de flujo[23] la ecuación (3.155) puede expresarse para tres
dimensiones como:
k k
u = −βc ∇Φ = −βc (∇p − γ∇Z) (3.156)
μ μ
Con esto, los términos en ux , uy y uz pueden expresarse como sigue:
k x ∂Φ
ux = −βc (3.157)
μ ∂x

k y ∂Φ
uy = −βc (3.158)
μ ∂y

k z ∂Φ
uz = −βc (3.159)
μ ∂z
Adicionalmente si las velocidades se expresan en términos de la presión en vez del potencial,
ignorando las fuerzas gravitacionales (∇Φ = ∇p) se tiene:
k x ∂p
ux = −βc (3.160)
μ ∂x

k y ∂p
uy = −βc (3.161)
μ ∂y

k z ∂p
uz = −βc (3.162)
μ ∂z

Ecuación de estado
La ecuación de estado relaciona la densidad del fluido con la presión y temperatura. Una manera
de expresar esta relación es mediante el factor de volumen expresado en términos de la densidad
que se expresa como:
ρsc
B= (3.163)
ρ

113
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Ecuación de flujo en coordenadas cartesianas


Antes de sustituir las ecuaciones (3.160), (3.161), (3.162) y (3.163) en la ecuación (3.154), se
necesita expresar el término qm como un gasto volumétrico como se muestra a continuación:
m L3 L3 m
qm ( ) = αc ( 3 ) qsc ( ) ρsc ( 3 ) (3.164)
t L t L

qm = αc qsc ρsc (3.165)

Ahora sustituyendo las ecuaciones (3.160), (3.161), (3.162), (3.163) y (3.165) en la ecuación
(3.154) se obtiene:
∂ Ax kx ∂p ∂ Ay ky ∂p ∂ Az kz ∂p Vb ∂ ϕ
(βc ) ∆x + (βc ) ∆y + (βc ) ∆z + qsc = ( ) (3.166)
∂x μB ∂x ∂y μB ∂y ∂z μB ∂z αc ∂t B

La ecuación (3.166) es la forma más general del flujo de fluidos a través de un medio poroso y no
se considera el tipo de fluido (incompresible, ligeramente compresible o compresible) o la
dependencia de las propiedades de la roca y los fluidos con la presión, la porosidad se asume
como función de la presión, y el gasto qsc a condiciones de superficie, además se ignoran los
efectos gravitacionales en la dirección vertical.

Ecuación de flujo para un fluido ligeramente compresible


Considerando un fluido ligeramente compresible, se puede asumir que la compresibilidad del fluido
es pequeña y permanece constante con la presión. Con base en lo anterior, el factor de volumen[23]
puede ser aproximado por la ecuación:

B = B o ⁄[1 + c(p − po )] (3.167)

donde c es la compresibilidad del fluido.

Sustituyendo la ecuación (3.167) en el lado derecho de (3.166) y asumiendo incompresible el


medio poroso se tiene:
Vb ∂ ϕ Vb ϕ ∂ [1 + c(p − po )] Vb ϕc ∂p
( )= ( ) = (3.168)
αc ∂t B αc ∂t Bo αc B o ∂t
La ecuación (3.166) se convierte en:
∂ Ax kx ∂p ∂ Ay ky ∂p ∂ Az kz ∂p Vb ϕc ∂p
(βc ) ∆x + (βc ) ∆y + (βc ) ∆z + qsc = (3.169)
∂x μB ∂x ∂y μB ∂y ∂z μB ∂z αc Bo ∂t

Ahora sustituyendo la definición de B en el lado izquierdo, la ecuación queda como:


∂ ∂p ∂ ∂p
{βc Ax k x [1 + c(p − po )] } ∆x + {βc Ay k y [1 + c(p − po )] } ∆y
∂x ∂x ∂y ∂y
(3.170)
∂ ∂p Vb ϕμc ∂p
+ {βc Az k z [1 + c(p − po )] } ∆z + B o μqsc =
∂z ∂z αc ∂t
Expandiendo las derivadas en el lado izquierdo:

114
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

∂ ∂p ∂p 2
[1 + c(p − po )] (βc Ax k x ) ∆x + βc Ax k x c ( ) + [1 + c(p −
∂x ∂x ∂x
∂ ∂p ∂p 2 ∂ ∂p
po )] (βc Ay k y ) ∆y + βc Ay k y c ( ) + [1 + c(p − po )] (βc Az k z ) ∆z + (3.171)
∂y ∂y ∂y ∂z ∂z
∂p 2 Vb ϕμc ∂p
βc Az k z c ( ) + B o μqsc =
∂z αc ∂t
Es posible, en muchos casos, asumir que [1 + c(p − po )] ≈ 1 para fluidos ligeramente
compresibles porque c es muy pequeña e ignorando el término del gradiente de presión al
cuadrado por ser muy pequeño, se obtiene:
∂ ∂p ∂ ∂p ∂ ∂p Vb ϕμc ∂p
(βc Ax k x ) ∆x + (βc Ay k y ) ∆y + (βc Az k z ) ∆z + B o μqsc = (3.172)
∂x ∂x ∂y ∂y ∂z ∂z αc ∂t
La ecuación (3.172), representa el flujo de un solo fluido, líquido ligeramente compresible en una
formación heterogénea y anisotrópica. Para una formación homogénea e isotrópica, la ecuación
(3.172) puede ser simplificada a:
∂2 x ∂2 y ∂2 z B o μqsc ϕμc ∂p
+ + + = (3.173)
∂x 2 ∂y 2 ∂z 2 βc kVb βc αc k ∂t
Si en la ecuación (3.173) no se consideran fuentes ni sumideros (pozos) se obtiene:
∂2 p ∂2 p ∂2 p ϕμc ∂p
2
+ 2+ 2 = (3.174)
∂x ∂y ∂z βc αc k ∂t
La ecuación (3.174) es conocida como ecuación de difusión, el coeficiente ϕμc⁄βc αc k es el inverso
de la constante de difusividad hidráulica.

Ahora para considerar cuando la compresibilidad de la formación varia con la presión, no es posible
quitar la porosidad ϕ de la dependencia con la presión, a partir de la ecuación (3.154) se puede
sustituir la definición de B, y conservando ϕ en la derivada, se tiene:
∂ ∂p ∂ ∂p ∂ ∂p
(βc Ax k x ) ∆x + (βc Ay k y ) ∆y + (βc Az k z ) ∆z + B o μqsc
∂x ∂x ∂y ∂y ∂z ∂z
(3.175)
μVb ∂p
= {ϕ[1 + c(p − po )]}
αc ∂t
Ahora concentrándose en el lado derecho de la ecuación:
μVb ∂p μVb ∂ϕ ∂p
{ϕ[1 + c(p − po )]} = {[1 + c(p − po )] + ϕc } (3.176)
αc ∂t αc ∂t ∂t
Usando la regla de la cadena.
∂ϕ ∂ϕ ∂p
= (3.177)
∂t ∂p ∂t
La ecuación que expresa la dependencia de la porosidad con la presión[23] es:

ϕ = ϕo [1 + cr (p − po )] (3.178)

De esto obtenemos:

115
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

∂ϕ
= cr ϕo (3.179)
∂p
Con esto se tiene:
∂ϕ ∂p
= cr ϕo (3.180)
∂t ∂t
El lado derecho de la ecuación (3.176) puede ser expresado como:
μVb ∂p μVb ∂p
{ϕ[1 + c(p − po )]} = {[1 + c(p − po )]cr ϕo + ϕc}
αc ∂t αc ∂t
(3.181)
μVb o o o
∂p
= [c ϕ + ccr ϕ (p − p ) + ϕc]
αc r ∂t
El producto de c y cr es muy pequeño, por esto puede ser despreciado. Por lo tanto, la expresión
final es:
∂ ∂p ∂ ∂p ∂ ∂p Vb ϕμct ∂p
(βc Ax k x ) ∆x + (βc Ay k y ) ∆y + (βc Az k z ) ∆z + B o μqsc = (3.182)
∂x ∂x ∂y ∂y ∂z ∂z αc ∂t
donde ct = c + cr ϕo ⁄ϕ es la compresibilidad total del sistema (fluido y formación).

Condiciones iniciales y de frontera.


Las ecuaciones diferenciales que describen el flujo de fluidos en un medio poroso,
matemáticamente hablando, tienen un número de soluciones infinitas y cada una soluciona un
problema en particular. Se puede obtener una solución mediante restricciones que son conocidas
como condiciones iniciales y de frontera. Estas condiciones son parte de los datos conocidos del
yacimiento en estudio. Las condiciones iniciales para un modelo de simulación, son la distribución
de presiones y saturaciones al tiempo cero, las condiciones de frontera son los límites físicos que
tiene el yacimiento.

Cuando una de las variables independientes en la ecuación en derivadas parciales es el tiempo,


se necesita conocer la variable dependiente a un tiempo inicial t o , para poder obtener la solución
a otros tiempos. El sistema permanecerá en equilibrio a un tiempo cero, a menos que ocurra una
perturbación, en el yacimiento esta perturbación ocurre cuando se perfora un pozo.

En la simulación una de las variables dependientes con frecuencia es la presión y la saturación, y


para calcular su distribución en el yacimiento a cualquier tiempo, se debe tener la condición inicial
que para la presión tiene la forma:

p(x, y, z) = λ (3.183)

Y para la saturación:

S(x, y, z) = λ (3.184)

Donde λ es una constante o una función que describe la distribución de la presión dentro del
sistema a un tiempo cero.

116
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Ahora para las condiciones de frontera si se considera un


yacimiento con el mostrado en la Figura 3.26 donde se
distinguen dos tipos de fronteras, externas (límites del
yacimiento) e internas (pozos).

En la frontera se pueden especificar condiciones de dos


tipos Neumann (gradiente de presión especificado en la
frontera, flujo y no flujo) y Dirichlet (presión especificada en
la frontera, presión contante). Figura 3.26 Fronteras internas y
externas en un yacimiento.
La frontera externa puede tener diferentes condiciones de flujo (hay flujo, no hay flujo, valores fijos
de p)

Para la frontera interna (pozo productor o inyector) puede tener las siguientes condiciones: la
presión de fondo fluyendo es contante o gasto constante.

Con esto el modelo matemático completo consta de:


Ecuaciones que gobiernan el comportamiento de flujo en el yacimiento.
Condiciones iniciales, que proporcionan los valores de la variable dependiente a un tiempo
inicial.
Condiciones de frontera, que proporcionan los valores de la variable dependiente en
determinadas regiones del yacimiento (frontera) para cualquier tiempo.

Solución numérica del problema


Una vez que se ha establecido el modelo matemático capaz de describir el proceso físico que se
presenta en el yacimiento, es necesario obtener su solución.

Las ecuaciones que gobiernan el flujo de fluidos a través de un medio poroso son muy complejas
para ser resueltas analíticamente, son altamente no lineales. Solo en casos ideales de flujo en una
sola fase pueden ser solucionado analíticamente. Por esto se deben usar aproximaciones
numéricas para su solución, estas aproximaciones se aplican a un dominio discreto, en lugar de
uno continuo como lo hacen las soluciones analíticas.

La discretización de una ecuación diferencial puede ser realizada por diferentes métodos, entre
los métodos más comunes se encuentran: método de diferencias finitas, método de volumen finito
o elemento finito, en esta sección se usará el método de diferencias finitas.

El principio básico de la aproximación por diferencias finitas es reemplazar las derivadas parciales
por aproximaciones algebraicas. Las ecuaciones en derivadas parciales son reemplazadas por su
equivalente en diferencias finitas las cuales pueden obtenerse de un polinomio de Taylor truncado.

El polinomio de Taylor para una función de una variable f(x) está dado por:

117
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

(x − x0 ) df (x − x0 )2 d2 f (x − x0 )n dn f
f(x) = f(x0 ) + + + ⋯ + (3.185)
1! dx 2! dx 2 n! dx n

Aproximación de la primera derivada


Evaluando el polinomio de Taylor en x = xi+1 y asumiendo que x0 = xi se tiene:
h df h2 d2 f hn dn f
f(xi+1 ) = f(xi ) + + + ⋯+ (3.186)
1! dx 2! dx 2 n! dx n
donde h = xi+1 − xi

df
Al despejar se la ecuación anterior se tiene:
dx

df f(xi+1 ) − f(xi ) 1 h2 d2 f hn dn f
= − ( + ⋯ + ) (3.187)
dx h h 2! dx 2 n! dx n
Truncando la serie de Taylor después del segundo término se tiene:
df f(xi+1 ) − f(xi )
≈ (3.188)
dx h
Ahora evaluando el polinomio de Taylor en x = xi−1 y asumiendo que x0 = xi se tiene:
h df h2 d2 f hn dn f
f(xi−1 ) = f(xi ) − + − ⋯ + (3.189)
1! dx 2! dx 2 n! dx n
donde h = xi − xi−1

df
Al despejar y truncando en el segundo término se tiene:
dx

df f(xi−1 ) − f(xi )
≈ (3.190)
dx h
Una mejor aproximación de la primera derivada se obtiene restando la expresión (3.189) a la
ecuación (3.186) si los incrementos h en ambas ecuaciones son iguales, se tiene:
2h df 2h3 d2 f 2hn dn f
f(xi+1 ) − f(xi−1 ) = + + ⋯ + (3.191)
1! dx 3! dx 2 n! dx n
df
Despejando de la ecuación anterior y truncando en el segundo término se tiene:
dx

df f(xi+1 ) − f(xi−1 )
≈ (3.192)
dx 2h
Estas tres aproximaciones de las ecuaciones (3.188), (3.190) y (3.192) se conocen como
diferencias finitas hacia adelante, diferencias finitas hacia atrás y diferencias finitas centrales
respectivamente.

Aproximación de la segunda derivada


Para aproximar la segunda derivada pueden sumarse las expresiones (3.189) y (3.186)
teniéndose:

118
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

2h2 d2 f 2hn dn f
f(xi+1 ) + f(xi−1 ) = 2f(xi ) + + ⋯ + (3.193)
2! dx 2 n! dx n
d2 f
Despejando de la ecuación anterior y truncando en el segundo término se tiene:
dx2

d2 f f(xi+1 ) − 2f(xi ) + f(xi−1 )


= (3.194)
dx 2 h2

Discretización
El método de diferencias finitas se emplea superponiendo una malla sobre el yacimiento que se
desea modelar. Dos tipos de mallas son usados generalmente en la simulación de yacimientos:
nodos centrados y nodos distribuidos. Estos son discutidos para coordenadas cartesianas, sin
embargo, pueden ser aplicados para cualquier sistema coordenado.

El propósito de la malla es realizar una división del yacimiento en celdas a las cuales se les pueden
asignar propiedades de la roca, por esto las celdas deben ser pequeñas para poder representar la
heterogeneidad del yacimiento.
Malla de nodos centrados
Una malla de nodos centrados con flujo en una dirección x puede ser construida como en la Figura
3.27.

En esta figura la malla consiste en nx


celdas que cubren el yacimiento.
Estas celdas tienen un ancho
determinado, Δxi que no
necesariamente es igual, estas celdas
Figura 3.27 Nodos centrados en una dimensión.
deben cumplir con la condición:
nx

∑ Δxi = Lx (3.195)
i=1
Una vez que las celdas son definidas, los nodos deben ser colocados, para el sistema rectangular
estos se colocan en el centro de las celdas. Las fronteras de las celdas están indicadas por xi−1 y
2
xi+1 mientras que el centro está indicado por xi .
2

En la Figura 3.27 se pueden observar los


términos xi , xi−1 y xi+1 , además se puede
2 2
notar que los nodos en las fronteras se
encuentran dentro del yacimiento. La
Figura 3.28 muestra una malla de nodos
centrados para dos dimensiones.

Figura 3.28 Malla 2D para nodos centrados.

119
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Malla de nodos distribuidos


Para un sistema de nodos
distribuidos en la dirección x, se
puede construir una malla como la
mostrada en la Figura 3.29.

Los nodos son colocados en la Figura 3.29 Nodos distribuidos en una dimensión, las
frontera del yacimiento y las fronteras se encuentran entre los nodos.
fronteras de las celdas están colocadas entre dos nodos. En la Figura 3.30 se muestra una malla
de nodos distribuidos para dos dimensiones.

Figura 3.30 Malla 2D con nodos distribuidos, las áreas sombreadas indican el volumen de las
celdas.

Aproximación de la ecuación de flujo por medio de diferencias finitas


El procedimiento para aproximar la ecuación de flujo por medio de diferencias finitas consiste en
reemplazar las derivadas por sus aproximaciones en serie de Taylor. Esta aproximación tiene que
hacerse en espacio y en tiempo
Aproximación en espacio
Tomando como base la ecuación de flujo de un solo fluido ligeramente compresible donde la
porosidad depende de la presión, para una sola dimensión la ecuación (3.182) se reduce a:
∂ βc Ax k x ∂p Vb ϕct ∂p
( o ) ∆x + qsc = (3.196)
∂x B μ ∂x αc B o ∂t
Tomando como base una malla de nodos centrados y usando la aproximación en diferencias finitas
centrales para la primera derivada dada por la ecuación (3.192), la primera derivada en espacio
de la ecuación (3.196) puede expresarse como:
∂ βc Ax k x ∂p 1 βc Ax k x ∂p βc Ax k x ∂p
( o ) ≈ [( o ) −( o ) ] (3.197)
∂x B μ ∂x i ∆xi B μ ∂x i+ 1 B μ ∂x i−1
2 2
A pesar de que la igualdad en la ecuación anterior es una aproximación, en las ecuaciones
siguientes se usará el signo igual para que sea posible la programación de las ecuaciones.

Usando la ecuación (3.197) para aproximar la primera derivada en espacio de la ecuación (3.196)
se tiene:

120
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

1 βc Ax k x ∂p ∂p βc A x k x ∂p Vb ϕct ∂p
[( o ) ( ) 1 − ( o ) ( ) 1 ] ∆x + qsc i = ( ) (3.198)
∆xi B μ ∂x i+ ∂x i+
1 B μ i− ∂x i−
1 αc B o ∂t i
2 2 2 2
∂p ∂p
Ahora usando diferencias finitas para aproximar ( ) y( ) se tiene:
∂x i+1 ∂x i−1
2 2
∂p pi+1 − pi pi+1 − pi
( ) 1= = (3.199)
∂x i+ xi+1 − xi ∆x 1
2 i+
2
∂p pi − pi−1 pi − pi−1
( ) 1= = (3.200)
∂x i− xi − xi−1 ∆x 1
2 i−
2
Sustituyendo las ecuaciones (3.199) y (3.200) en la ecuación (3.198):
βc A x k x βc A x k x Vb ϕct ∂pi
( o ) (pi+1 − pi ) − ( o ) (pi − pi−1 ) + qsc i = ( ) (3.201)
B μ∆x i+ 1 B μ∆x i− 1 αc B o i ∂t
2 2
La ecuación anterior puede reescribirse como:
Vb ϕct ∂pi
Tx (pi+1 − pi ) − Tx (pi − pi−1 ) + qsc i = ( ) (3.202)
i+
1
2
i−
1
2 αc B o i ∂t
Donde los coeficientes Tx 1 y Tx 1 se refieren a las transmisibilidades del medio poroso y están
i+ i−
2 2
definidas por:
βc A x k x
Tx 1 =( o ) (3.203)
i+
2 B μ∆x i+1
2
βc A x k x
Tx 1 =( o ) (3.204)
i−
2 B μ∆x i−1
2
Para el caso de tres dimensiones, se sigue el mismo procedimiento que para una dimensión, para
esto la ecuación (3.182), mediante la aplicación de la aproximación en diferencias finitas centrales
se puede expresar de la siguiente manera:
Ax k x Ax k x
(βc o ) (pi+1,j,k − pi,j,k ) − (βc o ) (p − pi−1,j,k )
μB Δx i+ ,j,k
1 μB Δx i−1,j,k i,j,k
2 2
Ay k y
+ (βc o ) (p − pi,j,k )
μB Δy i,j+1,k i,j+1,k
2
Ay k y
− (βc o ) (p − pi,j−1,k ) (3.205)
μB Δy i,j−1,k i,j,k
2
Az k z
+ (βc ) (p − pi,j,k )
μB o Δz i,j,k+1, i,j,k+1
2
Az k z Vb ϕct ∂pi.j.k
− (βc o ) (pi,j,k − pi,j,k−1 ) + qsci,j,k = ( o
)
μB Δz i,j,k−1, αc B i,j,k ∂t
2
En términos de transmisibilidades:

121
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Txi+1⁄ (pi+1,j,k − pi,j,k ) − Txi−1⁄ (pi,j,k − pi−1,j,k ) + Tyi,j+1⁄ ,k (pi,j+1,k − pi,j,k )


2,j,k 2,j,k 2

− Tyi,j−1⁄ ,k (pi,j,k − pi,j−1,k ) + Tzi,j,k+1⁄ (pi,j,k+1 − pi,j,k )


2 2 (3.206)
Vb ϕct ∂pi.j.k
− Tzi,j,k−1⁄ (pi,j,k − pi,j,k−1 ) + q sci,j,k =( o
)
2 αc B i,j,k ∂t
Donde las transmisibilidades pueden definirse de la siguiente manera:
βc A x k x
Tx 1 = ( o ) (3.207)
i± .j.k
2 B μ∆x i±1,j,k
2
βc A y k y
Ty 1 =( o ) (3.208)
i.j± .k
2 B μ∆y i,j±1,k
2
βc A z k z
Tz 1 =( o ) (3.209)
i.j.k±
2 B μ∆z i,j,k±1
2

Aproximación en tiempo
La discretización de la derivada en tiempo de la ecuación (3.196) es similar a la aproximación de
la derivada en espacio, existen tres aproximaciones posibles, diferencias finitas hacia atrás,
diferencias finitas hacia adelante y diferencias finitas centrales. Las aproximaciones en diferencias
finitas hacia atrás y adelante son aproximaciones de primer orden, mientras que la aproximación
en diferencias finitas centrales es de segundo orden y generalmente no es usada [23]. La
aproximación en diferencias finitas hacia atrás es la que generalmente se usa en simulación de
yacimientos.
o Diferencias finitas hacia atrás
A partir de la ecuación (3.188) la aproximación para la derivada temporal de la ecuación (3.196)
tomando como base el tiempo t n+1 puede escribirse como:
∂pi pi n+1 − pi n
= (3.210)
∂t ∆t
Donde el superíndice n representa que es la presión evaluada en el tiempo actual, y n + 1,
representa el tiempo futuro.

Sustituyendo la ecuación (3.210) en la ecuación (3.202) evaluada al tempo t n+1 se tiene:


Vb ϕct
Tx (pn+1 n+1
i+1 − pi ) − Tx (pn+1 − pn+1
i−1 ) + q sc i = ( ) (p n+1 − pi n ) (3.211)
i+
1
2
i−
1
2
i
αc B o ∆t i i
En la ecuación anterior se puede notar que las derivadas en espacio están asignadas al tiempo
base t n+1 . En otras palabras, están evaluadas al nivel de tiempo t n+1 .

o Diferencias finitas hacia adelante


Similarmente al caso anterior, tomando como base el tiempo t n , la ecuación (3.196) puede
escribirse como:
∂pi pi n+1 − pi n
= (3.212)
∂t ∆t

122
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Las ecuaciones (3.210) y (3.212) son idénticas, pero los niveles de tiempo base a los que están
evaluadas son diferentes. Sustituyendo la ecuación (3.212) en (3.202) con el tiempo base t n , se
tiene:
Vb ϕct
Tx (pni+1 − pni ) − Tx (pni − pni−1 ) + qsc i = ( ) (p n+1 − pi n ) (3.213)
i+
1
2
i−
1
2 αc B o ∆t i i
La diferencia entre las aproximaciones en diferencias finitas hacia atrás y adelante es el nivel de
tiempo que toman como base, en la aproximación en diferencias finitas hacia adelante, las
presiones en el lado izquierdo de la ecuación están evaluadas al tiempo t n , a diferencia de la
aproximación en diferencias finitas hacia atrás, en el que las presiones están evaluadas al tiempo
t n+1 .

Aproximación de las condiciones iniciales y de frontera


Condiciones iniciales
En las ecuaciones en diferencias finitas, el término pn representa los valores de la presión en un
tiempo conocido. El procedimiento para ir avanzando en el tiempo en una simulación comienza
asignando valores conocidos de presión en el nivel de tiempo n en las ecuaciones de diferencias
finitas.

Para un problema de flujo de una sola fase y despreciando los efectos gravitacionales, las
presiones asignadas a cada celda pueden ser escritas como:

pni,j,k = p0 (3.214)

Condiciones de frontera
Las condiciones de frontera son las que delinean el sistema, estas pueden ser internas y externas;
las externas incluyen los límites del yacimiento y las internas pueden ser pozos, roca sin
hidrocarburos o cuerpos impermeables
o Condiciones de frontera externa
En la frontera externa pueden existir condiciones de dos tipos Neumann (gradiente de presión
especifico en la frontera, flujo y no flujo) y Dirichlet (presión especifica en la frontera, presión
contante).

Para las condiciones donde en gradiente de presión es especifico en la frontera se utiliza la


ecuación siguiente:
∂p
=C (3.215)
∂x
Donde generalmente C es función del tiempo, para especificar una frontera de no flujo, C = 0, para
esta discusión se trabajará con un valor de C constante.

En la Figura 3.31 se muestra un sistema en una dimensión con nodos centrados con el que se
describe el medio poroso por medio de 4 celdas (celdas 1 a 4). Las fronteras se encuentran en los
bordes de la primera y la última celda. La ecuación de flujo en diferencias finitas puede ser escrita

123
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

para cada celda, dando como resultado un sistema de 4 ecuaciones con 6 incógnitas, lo cual no
puede resolverse porque existen más incógnitas que ecuaciones en el sistema. Para el sistema de
la Figura 3.31 las ecuaciones para cada celda pueden ser escritas con la ecuación (3.211) como
sigue:

Para la celda 1:
Vb ϕct
Tx (pn+1 − p1n+1 ) − Tx (p1n+1 − pn+1
0 ) + q sc 1 = ( ) (p n+1 − p1 n ) (3.216)
1+
1
2
2
1−
1
2 αc B o ∆t 1 1
Para la celda 2:
Vb ϕct
Tx (pn+1 − pn+1
2 ) − Tx (pn+1 − p1n+1 ) + qsc 2 = ( ) (p n+1 − p2 n ) (3.217)
2+
1
2
3
2−
1
2
2
αc B o ∆t 2 2
Para la celda 3:
Vb ϕct
Tx (pn+1 − pn+1
3 ) − Tx (pn+1 − pn+1
2 ) + q sc 3 = ( ) (p n+1 − p3 n ) (3.218)
3+
1
2
4
3−
1
2
3
αc B o ∆t 3 3
Para la celda 4:
Vb ϕct
Tx (pn+1 − pn+1
4 ) − Tx (pn+1 − pn+1
3 ) + q sc 4 = ( ) (p n+1 − p4 n ) (3.219)
4+
1
2
5
4−
1
2
4
αc B o ∆t 4 4
La razón por la que existen más incógnitas que ecuaciones es porque en las ecuaciones
correspondientes a las celdas en las fronteras contienen presiones que se encuentran fuera del
yacimiento pn+1
0 y pn+1
5 . Se puede usar la ecuación (3.215) para completar el sistema de
ecuaciones. La aproximación en diferencias finitas centrales para la ecuación (3.215) para la
frontera izquierda (x = x1−1 ) es:
2

∂p p1 − p0
≈ =C (3.220)
∂x x1 − x0
Despejando p0 de la ecuación anterior resulta:

p0 = p1 − C(x1 − x0 ) (3.221)

Similarmente para la frontera de la derecha en x = x4−1 se tiene:


2

p5 = p4 − C(x5 − x4 ) (3.222)

Las ecuaciones (3.221) y (3.222) representan las dos ecuaciones necesarias para completar el
sistema para el yacimiento mostrado en la Figura 3.31.

Si se trata de una frontera de no flujo (C = 0), las ecuaciones (3.221) y (3.222) indicarán que la
presión en las celdas fuera del yacimiento (celdas 0 y 5) serán iguales a las presiones en las celdas
que se encuentran en la frontera dentro del yacimiento. Si se sustituyen las ecuaciones para una
frontera de no flujo p0 = p1 y p4 = p5 en las ecuaciones (3.216) y (3.219), los términos en las
fronteras se hacen cero, otra alternativa para representar fronteras de no flujo es hacer el término

124
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

de transmisibilidad en las fronteras igual a cero, esto es, para las fronteras del yacimiento de la
Figura 3.31:
Vb ϕct
Tx (pn+1 − p1n+1 ) + qsc1 = ( ) (p n+1 − p1 n ) (3.223)
1+
1
2
2
αc B o ∆t 1 1

Vb ϕct
−Tx (pn+1 − pn+1
3 ) + q sc 4 = ( ) (p n+1 − p4 n ) (3.224)
4−
1
2
4
αc B o ∆t 4 4
Para el caso en que la presión es específica en la frontera externa la siguiente expresión es
usada:

pi = C (3.225)

Figura 3.31 Malla 2D con nodos distribuidos, las áreas sombreadas indican el volumen de las
celdas.

o Condiciones de frontera interna


En el caso de fronteras internas, como pozos, roca impermeable, o fallas impermeables debe
establecerse un modelo para cada tipo de frontera, para esta discusión solo se mostrará para el
caso de un pozo.

Las dimensiones de una malla de simulación son por lo general mucho más grandes que las
dimensiones del pozo, por lo que la aproximación de línea fuente puede ser usada para representar
un pozo.

La expresión para una fuente o sumidero puede entonces ser obtenida usando la teoría de pozos
en estado estacionario, el flujo en el pozo puede ser estimado como:
−2πβc k H h 1
qsc i,j,k = (pi,j,k − pwf ) (3.226)
[log e (req ⁄rw ) + s] μB
Donde Peaceman mostro que el radio equivalente req es:

Esquemas de solución en diferencias finitas


El problema a resolver en simulación de yacimientos es avanzar desde las condiciones iniciales
hacia tiempos fututos, esto por medio de intervalos de tiempo ∆t, anteriormente se mostraron las
aproximaciones en diferencias finitas hacia atrás y adelante, ecuaciones (3.211) y (3.213)
respectivamente.

Debido al tiempo base usado para hacer la aproximación en diferencias finitas, la aproximación en
diferencias finitas hacia adelante resultará en un esquema de solución explicito para el nuevo nivel

125
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

de presión, mientras que la aproximación en diferencias finitas hacia atrás resultará en un esquema
de solución implícito para los nuevos niveles de presión.

Método explicito
Este esquema es el más simple, ya que resuelve el problema para una sola incógnita p en el
tiempo futuro (n + 1), valiéndose para
ello de los valores ya conocidos de la
variable p en el tiempo actual n. Este
esquema es representado en la Figura
3.32.

Si se considera la ecuación (3.213) y Figura 3.32 Esquema explícito.


despejando la presión al tiempo futuro
se tiene:
αc B o ∆t
pi n+1 = pi n + ( ) q
Vb ϕct i sc i
(3.227)
αc B o ∆t
+( ) [T pn − (Tx 1 + Tx 1 ) pni + Tx 1 pni−1 ]
Vb ϕct i xi+12 i+1 i+
2
i−
2
i−
2

Todos los términos en el lado derecho de la ecuación (3.227) son conocidos, por lo tanto, las
presiones en el nuevo nivel de presión (n + 1) pueden ser obtenidas explícitamente usando esta
ecuación.

Por su sencillez, este esquema presenta limitaciones fuertes de estabilidad, lo que ocasiona tener
que utilizar intervalos de tiempo muy pequeños al avanzar en la solución, lo cual tampoco es muy
conveniente debido al tiempo de computo requerido para efectuar los cálculos.

Método implícito
Este esquema consiste en resolver el problema
para todas las incógnitas en forma simultánea.
Este esquema es representado en la Figura
3.33.

Si se considera la ecuación (3.211) agrupando


términos conocidos a la derecha y los Figura 3.33 Esquema implícito.
desconocidos a la izquierda, se tiene:
Vb ϕct Vb ϕct
Tx pn+1
i−1 − (Tx + Tx +( ) ) pn+1 + Tx 1 pn+1
i+1 = − ( ) p n − qsc i (3.228)
i−
1
2
i−
1
2
i+
1
2
o
αc B ∆t i i
i+
2 αc B o ∆t i i
La ecuación anterior puede ser escrita de la siguiente manera:

Wi pn+1 n+1
i−1 + Ci pi + Ei pn+1
i+1 = Q i (3.229)

Donde los coeficientes de la ecuación (3.229) son:

126
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Wi = Tx 1 (3.230)
i−
2

Vb ϕct
Ci = − (Tx + Tx +( )) (3.231)
i−
1
2
i+
1
2 αc B o ∆t i

Ei = Tx 1 (3.232)
i+
2

Vb ϕct
Qi = − ( ) p n − qsc i (3.233)
αc B o ∆t i i

Escribiendo la ecuación (3.229) para


todas las celdas de un yacimiento
como el mostrado en la Figura 3.34
se tendría un sistema de ecuaciones
como el siguiente: Figura 3.34 Yacimiento 1D con 6 celdas y un pozo.

p1n+1 Q1
C1 E1 0 0 0 0
W2 C2 E2 pn+1
0 2 Q20 0
0 W3 C3 pn+1
E33 Q30 0
W4 C4n+1 = Q E4 0
(3.234)
0 0 p4 4
0 0 0 W5 Q5C5 E5
pn+1
5
[0 0 0 0 W6
[Q 6 ] C6 ]
[pn+1
6 ]
Para un yacimiento con N número de celdas el sistema a solucionar es, esquemáticamente como
el mostrado en la Figura 3.35.

Para el caso de un yacimiento en dos dimensiones como el mostrado en la Figura 3.36 la ecuación
que describe el flujo puede obtenerse a partir de la ecuación (3.182) quedando de la siguiente
manera:
∂ βc Ax k x ∂p ∂ βc Ay k y ∂p Vb ϕct ∂p
( o ) ∆x + ( o ) ∆y + qsc = (3.235)
∂x B μ ∂x ∂y B μ ∂y αc B o ∂t

Figura 3.35 Sistema de ecuaciones para un Figura 3.36 Representación de un


yacimiento en una dimensión (1D). yacimiento en dos dimensiones (2D).

127
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Aproximando la ecuación (3.235) mediante diferencias finitas y expresándola en términos de


transmisibilidades se obtiene:
Txi+1⁄ ,j (pn+1 n+1 n+1 n+1 n+1 n+1
i+1,j − pi,j ) − Txi−1⁄ ,j (pi,j − pi−1,j ) + Tyi,j+1⁄ (pi,j+1 − pi,j )
2 2 2
Vb ϕct ∂pi,j (3.236)
− Tyi,j−1⁄ (pn+1 n+1
i,j − pi,j−1 ) + q sci,j =( o
)
2 αc B ∆t i,j ∂t
Que puede escribirse como:

Si,j pn+1 n+1 n+1 n+1 n+1


i,j−1 + Wi,j pi−1,j + Ci,j pi,j + Ei,j pi+1,j + Ni,j pi,j+1 = Q i,j (3.237)

Donde los coeficientes de la ecuación (3.237) están definidos como:

Si,j = Tyi,j−1⁄ (3.238)


2

Wi,j = Tx 1 (3.239)
i− ,j
2

Vb ϕct
Ci,j = − [Tyi,j−1⁄ + Tx + Tx + Tyi,j+1⁄ + ( ) ] (3.240)
2
1
i− ,j
2
1
i+ ,j
2 2 αc B o ∆t i,j

Ei,j = Tx 1 (3.241)
i+ ,j
2

Ni,j = Tyi,j+1⁄ (3.242)


2

Vb ϕct
Q i,j = − ( ) p n − qsc i,j (3.243)
αc B o ∆t i,j i,j
En este caso, cuando el yacimiento
está representado por NxM celdas, se
tiene que solucionar un sistema
pentadiagonal como el mostrado en
forma esquemática en la Figura 3.37.

Cuando el yacimiento es en tres


dimensiones como se puede observar
en la Figura 3.38 la ecuación que
Figura 3.37 Representación esquemática del sistema
describe el flujo puede obtenerse a de ecuaciones para un yacimiento en dos
partir de la ecuación (3.182) quedando dimensiones (2D).
de la siguiente manera:

∂ βc Ax k x ∂p ∂ βc Ay k y ∂p ∂ βc Az k z ∂p Vb ϕct ∂p
( o ) ∆x + ( o ) ∆y + ( o ) ∆z + qsc = (3.244)
∂x B μ ∂x ∂y B μ ∂y ∂z B μ ∂z αc B o ∂t

128
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

Figura 3.38 Representación de un Figura 3.39 Representación esquemática del


yacimiento en tres dimensiones (3D). sistema de ecuaciones para un yacimiento en
tres dimensiones (3D).
Aproximando la ecuación (3.244) mediante diferencias finitas y expresándola en términos de
transmisibilidades se obtiene:
Bi,j,k pn+1 n+1 n+1 n+1 n+1 n+1
i,j,k−1 + Si,j,k pi,j−1,k + Wi,j,k pi−1,j,k + Ci,j,k pi,j,k + Ei,j,k pi+1,j,k + Ni,j,k pi,j+1,k
(3.245)
+ Ai,j,k pn+1
i,j,k+1 = Q i,j,k
donde:

Bi,j,k = Tz 1 (3.246)
i,j,k−
2

Si,j,k = Ty 1 (3.247)
i,j− ,k
2

Wi,j,k = Tx 1 (3.248)
i− ,j,k
2

Vb ϕct
Ci,j,k = − (Tz + Ty + Txi−1,j,k + Tx + Ty + Tz +( ) ) (3.249)
i,j,k−
1
2
1
i,j− ,k
2
1
i+ ,j,k
2
1
i,j+ ,k
2
i,j,k+
1
2 αc B o ∆t i,j,k

Ei,j,k = Tx 1 (3.250)
i+ ,j,k
2

Ni,j,k = Ty 1 (3.251)
i,j+ ,k
2

Ai,j,k = Tz 1 (3.252)
i,j,k+
2

Vb ϕct
Q i,j,k = − ( ) p n − qsc i,j,k (3.253)
αc B o ∆t i,j,k i,j,k

Para el caso de tres dimensiones se genera un sistema de ecuaciones como el mostrado


esquemáticamente en la Figura 3.39.

Para los tres casos (1D, 2D y 3D) se genera un sistema de ecuaciones que puede ser resuelto con

129
CAPÍTULO 3 PRONÓSTICOS DE PRODUCCIÓN

cualquier técnica disponible (eliminación gaussiana, Gauss-Jordan, LU, Thomas) y obtener el


vector solución que representa la presión en el nuevo nivel de tiempo.

Modelo computacional
El modelo computacional, es un programa de cómputo en el que se tienen programadas las
ecuaciones anteriormente descritas, en el mercado existen diferentes proveedores de software
para hacer simulación de yacimientos.

3.6.3 Ventajas y desventajas


Principales ventajas del método de simulación matemática:
Es un método muy exacto si es ajustado y operado de manera adecuada, resultara la
mejor herramienta.
Permite visualizar el comportamiento del yacimiento bajo distintos esquemas de
explotación.
Permite calcular volúmenes originales.
Permite realizar pronósticos de producción muy cercanos a la realidad.
Considera las heterogeneidades y las direcciones de flujo en el yacimiento.

Principales desventajas del método de simulación matemática:


Es un método que requiere de mucha información.
Suele ser el método más costoso que existe para calcular reservas y realizar pronósticos
de producción.
Puede requerir de hardware de gran capacidad para el procesamiento de la información.
Dependiendo del simulador y la información, puede llevarse mucho tiempo para que el
sistema procese toda la información.
Los simuladores no distinguen la calidad de la información, por lo tanto, para que los
resultados sean apegados a la realidad los datos deben representar la realidad con la
mínima incertidumbre.
Requieren de un constante mantenimiento, así como de lógica y experiencia del analista.

130
Capítulo 4

POTENCIAL DE PRODUCCIÓN
DE POZOS PETROLEROS
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

CAPÍTULO 4 Potencial de producción de pozos petroleros


CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN
DE POZOS PETROLEROS
4.1 Introducción
Una vez que un pozo se pone a producir, es necesario evaluar su productividad en las condiciones
en que se encuentra. Para saber si produce en la forma correcta se necesita conocer su potencial,
siendo el potencial del pozo el gasto máximo que puede aportar si se le impusiera el mejor conjunto
de condiciones posibles.

La evaluación del potencial debe tomar en cuenta todos los factores desde técnicos, operativos,
ambientales y económicos, desde el punto de vista técnico es necesario evaluar en conjunto el
sistema integral de producción (SIP) donde se busca determinar qué problemas ocasionan que un
pozo tenga baja productividad y así planear las acciones pertinentes para mejorar la explotación.

Las características del yacimiento, las propiedades de los fluidos, las condiciones de presión, la
saturación de los fluidos, permeabilidades relativas, el daño al pozo y las características de la
tubería de producción y la línea de descarga permiten determinar lo que un pozo puede producir.

Los análisis que se hacen al sistema integral de producción permiten conocer el comportamiento
actual y futuro de un pozo, como resultado de estos análisis se puede determinar una mejora en
la eficiencia de flujo y un incremento de la producción.

En este capítulo se presentan los principios de flujo de los fluidos en los componentes del sistema
integral de producción; yacimiento, pozo e instalaciones superficiales para mostrar los
procedimientos que se realizan a un pozo como la técnica del análisis nodal que consiste en
analizar los diferentes componentes del SIP con el propósito de predecir los gastos de producción
y optimizar los diferentes componentes del sistema para que lleven a un incremento de la
producción del yacimiento.

4.2 Sistema integral de producción


El sistema integral de producción es el conjunto de elementos que transporta los fluidos desde el
yacimiento hasta la superficie y los separa en aceite gas y agua y los envía a instalaciones para
almacenarlo o comercializarlos.

Un sistema integral de producción puede ser simple o puede incluir muchos componentes como
se desee. Los componentes básicos de sistema integral de producción son[31]:
• Yacimiento.

132
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

• Pozo.
• Tubería de descarga.
• Estrangulador.
• Separadores y equipo de proceso.
• Tanque de almacenamiento.

En la Figura 4.1 se muestra esquemáticamente el sistema integral de producción:

A continuación, se describen los elementos del


sistema integral de producción:

Yacimiento. Se entiende por yacimiento la porción de


trampa geológica que contiene hidrocarburos, la cual
se comporta como un sistema intercomunicado
hidráulicamente. Los hidrocarburos que ocupan los
poros o huecos de la roca almacén, se encuentran a
alta presión y temperatura, debido a la profundidad
que se encuentra la zona productora.

Pozo. Es un agujero que se hace desde la superficie


hasta llegar al yacimiento; en este agujero se instalan
sistemas de tuberías y otros elementos, con el fin de
establecer medio a través del cual los fluidos fluyen Figura 4.1 Sistema integral de
del yacimiento a la superficie. producción[21].

Tubería de descarga. Las tuberías son estructuras de acero, cuya finalidad es transportar el gas,
aceite y en algunos casos agua desde la cabeza del pozo hasta el tanque de almacenamiento. Los
costos específicos en el transporte tanto de aceite como de gas disminuyen cuando la capacidad
de manejo aumenta; esto se logra si el aceite, gas y agua se transportan en tuberías de diámetro
óptimo, para cada capacidad dada.

Estrangulador. Es un aditamento que se instala en los pozos productores con el fin de establecer
una restricción al flujo de fluidos. Es decir, permite obtener un gasto deseado, además de prevenir
la conificación de agua, producción de arena y, sobre todo, ofrece seguridad a las instalaciones
superficiales.

Separadores: Son equipos utilizados para separar la mezcla de aceite y gas, y en algunos casos
aceite, gas y agua que proviene directamente de los pozos. Los separadores pueden clasificarse
por su forma o geometría en horizontales, verticales y esféricos, y por su finalidad, separar dos
fases (gas y líquido) o tres (gas aceite y agua).

Tanques de almacenamiento. Son recipientes de gran capacidad para almacenar la producción


de fluidos de uno o varios pozos. Los tanques de almacenamiento pueden ser estructuras

133
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

cilíndricas de acero instaladas en tierra firme, o bien, buques-tanque, usualmente utilizados en


pozos costa afuera.

4.3 Comportamiento de flujo en el yacimiento


El comportamiento de flujo del yacimiento al pozo está en función de los mecanismos de
producción del yacimiento, la presión media del yacimiento, la permeabilidad, la saturación de los
fluidos, el daño a la formación y el tipo de terminación del pozo.

Para el estudio del comportamiento de flujo de fluidos del yacimiento al pozo existen herramientas
analíticas que se presentan en este capítulo y simuladores de yacimientos que requieren de mayor
y mejor calidad y cantidad de información.

Las herramientas analíticas son la evaluación del índice de productividad (J) y la curva de IPR
(Inflow Performance Relationship). El índice de productividad es la relación entre el gasto
producido y la caída de presión en el yacimiento, mientras que el IPR es la relación que existe
entre el gasto producido y la presión de fondo fluyendo.

Para conocer el comportamiento de flujo en el yacimiento, se utiliza una ecuación que relaciona
las dos variables de principal importancia en la optimización de la producción: la presión y el gasto.
La ecuación que relaciona estas dos variables es la ecuación de Darcy.

4.3.1 Ecuación de Darcy


En la ingeniería petrolera la Ley de Darcy se utiliza
para describir el comportamiento de flujo en el
yacimiento, esta fue establecida por Henry
Darcy[16] a partir de diversos experimentos.

El experimento es simple como el que se muestra


en la Figura 4.2. El recipiente se llenó de arena y
se hizo fluir agua a través del empacamiento hasta
saturarlo completamente.

Darcy encontró que la velocidad de flujo a través


del medio poroso es proporcional al gradiente de
presión, dp⁄dx, e inversamente proporcional a la
viscosidad, μ. Así se estableció la siguiente
expresión: Figura 4.2 Experimento de Darcy[21].
dp
V=Cte (4.1)
dx
Mustak y Meres[42] establecieron que la constante de proporcionalidad puede ser expresada en
términos de la viscosidad y permeabilidad de tal forma que la ecuación (4.1), queda expresada
como actualmente se conoce a la ley de Darcy.

134
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

k dp
V=- (4.2)
μ dx
La ecuación también se expresa en términos de gasto volumétrico:
k A dp
q=VA=- (4.3)
μ dx
El signo asociado a las ecuaciones (4.2) y (4.3) se debe a que si dx es introducido en la dirección
del flujo, la presión cae mientras x crece. Esta declinación resulta en un valor de dp⁄dx negativo,
por eso para asegurar que la velocidad sea positiva, se incluye el signo negativo.

Henry Darcy fue el primero en realizar trabajos sobre permeabilidad cuando analizó el flujo de agua
a través de filtros y por esta razón, la unidad de permeabilidad en la industria petrolera es el Darcy.
Dado que muchos de los yacimientos tienen una permeabilidad menor a un Darcy, se utiliza con
frecuencia el milidarcy (mD) como unidad.

La ley de Darcy es válida bajo las consideraciones siguientes:


• Medio homogéneo e isotrópico.
• Medio poroso saturado100% de un fluido de viscosidad constante.
• Temperatura constante.
• Flujo laminar.

4.3.2 Ecuación de afluencia


El comportamiento de afluencia de un pozo representa la capacidad de un pozo para aportar
fluidos. Es decir, el comportamiento de flujo indicará la respuesta de la formación a un abatimiento
de presión en el pozo productor. Es por eso que un buen entendimiento de los conceptos,
interrelaciones y factores que determinan el comportamiento del flujo en el medio poroso, es
primordial para usar apropiadamente los métodos o técnicas que se empleen para obtener el
comportamiento presente y futuro de un yacimiento. Para calcular la caída de presión (abatimiento)
en un yacimiento, se requiere una expresión que muestre las pérdidas de energía o presión debido
al esfuerzo viscoso o fuerzas de fricción como una función de la velocidad o gasto. Por tanto, para
poder establecer la ecuación de afluencia para un determinado pozo productor, será necesario
aplicar y combinar las siguientes ecuaciones:
1. Ecuación de conservación de la masa.
2. Ecuación de movimiento.
3. Ecuación de estado.

Como se mencionó anteriormente, el uso de la Ley de Darcy se debe considerar siempre en la


predicción de los gastos de flujo desde el yacimiento hasta la cabeza del pozo. La siguiente
ecuación puede ser aplicada para predecir cualquier condición de flujo:
Cte(k a h) pe
q= r ∫ f(p)dp (4.4)
ln ( e ) pwf
rw
Donde:

135
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

cte = constante, en unidades de campo es 0.00708.


f(p) = Alguna función de presión [adimensional].
h = Espesor de la zona productora. [ft].
k a = Permeabilidad absoluta [mD].
pe = Presión en la frontera exterior [psi].
pwfs = Presión de flujo en la pared del pozo [psi].
q = Gasto de aceite [bpd].
re = Radio de drene [ft].
rw= Radio del pozo [ft].

La ecuación anterior es aplicable a todos los sistemas porosos, sin embargo, la solución o forma
que adquiera, dependerá de las condiciones iniciales y de frontera (daño, almacenamiento,
fracturas, penetración parcial) así como también de la geometría y tipo de flujo establecidas en el
sistema.

Geometrías de flujo
En el flujo de fluidos del yacimiento hacia el pozo se han observado diferentes geometrías de flujo,
las cuales se indican a continuación:
Flujo cilíndrico/radial.
Flujo convergente.
Flujo lineal.
Flujo elíptico.
Flujo hemisférico.
Flujo esférico.

Los flujos lineal y radial son los más comunes en pozos de aceite y gas.

Periodos de flujo
En el comportamiento de la presión en un pozo que produce a gasto contante, se pueden identificar
los siguientes periodos de flujo:
dp
Estacionario = 0.
dt
dp
Pseudoestacionario = constante.
dt
dp
Transitorio = variable.
dt

4.3.3 Índice de productividad


En la Figura 4.3 se muestran las curvas típicas que representan el comportamiento de flujo del
yacimiento al pozo. En la línea A, la tendencia es una recta que representa cuando la presión de
fondo fluyendo es mayor a la presión de saturación. A presiones de fondo fluyendo por debajo de
la presión de saturación se esperan comportamientos como los de la línea B, C y D.

Cuando la presión de fondo fluyendo es mayor a la presión de saturación, la pendiente de la recta

136
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

es constante y entonces el índice de productividad


(IP) es J (línea A). Cuando pwf < pb se considera
un comportamiento no lineal que se conoce como
IPR (líneas B, C y D).

4.3.4 IP en yacimientos bajosaturados


El concepto de índice de productividad es un
intento para encontrar una función simple que
relacione la capacidad de un pozo para aportar
fluidos por un determinado abatimiento de presión.
La relación de gasto de producción de un pozo y el Figura 4.3 Curvas típicas del
abatimiento de presión en este gasto se denomina comportamiento de afluencia del
índice de productividad y se simboliza con la letra J. yacimiento al pozo[29].

Si la producción q está en (bl/día) y el abatimiento de presión en (lb/pg2), el índice de productividad


se define como:
qo
J= (4.5)
pws -pwf
El gasto de producción es medido directamente en la superficie a condiciones de almacenamiento,
y la presión del yacimiento normalmente se obtiene a partir de una prueba de incremento de
presión. Después de un tiempo de producción, la presión de fondo fluyendo es medida con un
registrador de fondo o mediante la determinación del nivel de fluido en el espacio anular, si el
espacio anular está abierto.

La ecuación del índice de productividad se puede escribir mediante la ecuación (4.6) que es una
línea recta, considerando a J constante así mismo con la presión de fondo estática. Una gráfica de
pwf contra q0 , exhibirá una línea recta, siempre que la presión del yacimiento permanezca por
encima de la presión de saturación, durante un periodo de la vida productora del pozo.
q0
pwf =pws - (4.6)
J

En la Figura 4.4 se muestra el índice de


productividad como una línea recta. Donde se
pueden observar los siguientes aspectos:
• Cuando q es igual a cero, pwf , es igual a
pws .
• Cuando pwf es igual a cero, q es igual a
Jpws , es decir, se tiene un qmáx
hipotético.

Figura 4.4 Índice de productividad en forma


recta.

137
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

4.3.5 IPR en yacimientos saturados


Para el caso en que pwf < pb , es decir cuando existen
dos fases en el yacimiento, la ecuación (4.5) no se
cumple, pues el valor de la pendiente cambia con el
abatimiento de presión como lo muestra la Figura
4.5. La curva del índice de productividad para
cualquier gasto de producción, siempre que pwf < pb
será la primera derivada del gasto con respecto al
abatimiento de presión:
dq
IP=IPR= (4.7)
dpwf Figura 4.5 Variación del IP en
yacimientos saturados.
Método de Vogel
Vogel[55] presentó una solución para la determinación del comportamiento de flujo del yacimiento
al pozo, cuando la presión de fondo fluyendo es menor a la presión de saturación, suponiendo flujo
radial, saturación de agua constante en un medio poroso homogéneo e isotrópico; en donde lo
efectos gravitacionales y de compresibilidad de la formación y el agua no son significativos
mostrando que conforme avanza la declinación de un yacimiento con empuje de gas en solución,
la productividad de un pozo disminuye conforme a la siguiente relación empírica.
qo pwf pwf 2
=1-0.2 ( ) -0.8 ( ) (4.8)
qmax pws pws
La ecuación anterior representa la curva de la
Figura 4.6 y puede interpretarse como una
solución general para yacimientos con empuje de
gas disuelto.

Para aplicar esta ecuación es necesario tener en


cuenta lo siguiente:
• Este método no debe ser considerado
correcto para otro tipo de mecanismo de
producción, aunque ha dado buenos Figura 4.6 Curva de IPR para yacimientos
resultados para yacimientos donde con empuje de gas disuelto.
prevalece otro tipo de mecanismo de
empuje e incluso mecanismos
combinados incluso en flujo de tres fases muestra buenos resultados, pero la
recomendación es aplicarlo con el mayor apego a las condiciones originales.
• El método de Vogel solo es utilizado para pozos sin daño, es decir cuando la eficiencia de
flujo e igual a uno, por lo que si el pozo está dado será necesario usar otro método.

Para obtener pwf de forma directa, la ecuación de Vogel puede ser modificada conociendo pws , q
y qmáx obteniendo la ecuación (4.9).

138
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

pwf =0.125pws (-1+√81-80(qo ⁄qmax )) (4.9)

Método de Standing para EF≠1


Standing[50] extendió el trabajo de Vogel[55] presentando una familia de curvas para diferentes
eficiencias de flujo. La eficiencia de flujo es definida como en la ecuación (4.10).
∆pideal pws - pwf - ∆ps
EF= = (4.10)
∆preal pws - pwf
La Figura 4.7 muestra las curvas de IPR para eficiencias de flujo de 0.5 a 1.5, de esta ampliación
al método de Vogel es factible obtener:
• El gasto máximo posible para pozos con o sin daño o bien, estimulados.
• El gasto para cualquier pwf y diferentes valores de EF.
• La curva de IPR para pozos dañados, estimulados o sin daño.

La ecuación (4.9) considerando la ecuación (4.10) adquiere la siguiente forma:


qo p'wf p'wf 2
=1-0.2 ( ) -0.8 ( ) (4.11)
qmax pws pws
donde:

p'wf =pws -(pws -pwf )EF (4.12)

Figura 4.7 Curva de IPR para pozos con EF≠1 de yacimientos con empuje de gas disuelto[50]

139
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Método de Harrison
En la aplicación de las ecuaciones (4.8) y
(4.11) para bajas presiones de fondo
fluyendo la curva de IPR presenta una
forma similar a la Figura 4.8, esto es
porque el valor de p′wf comienza a ser
negativo, para esto Harrison[11] sugiere el
empleo de la siguiente ecuación, la cual
puede emplearse tanto para valores
positivos como negativos de p′wf . Sin
embargo, los resultados serán menores a
los obtenidos con el método de Vogel[55]

Figura 4.8 Errores de extrapolación con el método


de Standing.
qo p'
(1.792 wf )
=1.2-0.2e pws (4.13)
qmáx

Método de Fetkovich
Fetkovich[26] presenta una ecuación más exacta para el comportamiento de un yacimiento
saturado, no importando altos valores de EF y bajos valores de pwf la ecuación es la siguiente:
n
q=J ' o (p2ws -p2wf ) (4.14)

La ecuación (4.14) representa una línea recta


en coordenadas log-log. Para hacer uso de
esta ecuación se emplea la ecuación (4.8)
hasta que inicien los valores negativos de
p′wf como en la Figura 4.9. Usando los
valores de la línea continua de la misma
figura, se construye una gráfica log-log como
la de la Figura 4.10, esta curva es llamada
curva de contrapresión en donde J ' o es la
intersección sobre el eje q, donde
2
(p2ws -p2wf ) = 1 y n = 1⁄pendiente . Después
de obtener n y J ' o se continúa construyendo
la curva con la ecuación (4.14) como de Figura 4.9 Curva de presión contra gasto para
muestra en la Figura 4.11. valores positivos de 𝑝𝑤𝑓 .

La grafica generalizada de Harrison, resultado de la aplicación de la ecuación (4.14) se muestra


en la Figura 4.12. Se recomienda su uso para cuando el valor de EF salga del rango de la gráfica
original de Standing, por otra parte, proporciona resultados más precisos que los obtenidos con la
ecuación (4.8).

140
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Figura 4.10 Grafica log-log de presiones Figura 4.11 Corrección por declinación de
contra gasto. presión.

Figura 4.12 Curvas de afluencia para pozos con EF≠1, de un yacimiento con empuje por gas
disuelto.

4.3.6 Curvas de IPR futuras


Cuando se analiza el comportamiento de flujo del yacimiento al pozo, se distinguen dos problemas
a resolver, el primero es el comportamiento de la curva de presión contra el gasto para una etapa
en particular de la exploración. El segundo es la manera en que el IPR decrece a medida que
continua la explotación.

La realización de curvas de IPR futuras es muy importante en la determinación de los gastos

futuros de producción, tanto para pozos fluyentes como para pozos con algún sistema artificial de
producción.

141
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Las curvas de IPR futuras son de gran utilidad cuando se desea determinar el momento adecuado
para instalar un sistema artificial de producción, para la realización de las curvas de IPR futuras se
debe contar con suficiente información. Esta información consta de los cambios de presión en el
fondo del pozo, la historia de producción entre las más importantes.

Método de Fetkovich
Muskat, presento la ecuación (4.15) que relaciona el índice de productividad a un tiempo t1 y a un
tiempo t 2 .
k
( ro )
J1 μo B o 1
= (4.15)
J2 ( k ro )
μo B o 2
De un balance de materia para un yacimiento con empuje de gas disuelto Fetkovich[26] encontró
que el comportamiento de k ro es casi lineal con la presión. Con base en lo anterior escribió la
ecuación (4.16) la cual aproxima el cambio en la permeabilidad al aceite con el abatimiento de
presión.
k o pws pws
= (4.16)
ki pwsi
O bien:
pws
k ro pws = (4.17)
pwsi
donde k ro es tomada con respecto a ki , y
se define en aquel lugar geométrico donde
no existe abatimiento. La Figura 4.13
define el lugar geométrico de los valores de
k ro
pws contra la presión a un abatimiento
μo Bo
cero ∆p = 0. De esta forma:


qol = Jo1 (p2ws1 − p2wf )n (4.18)

Que define el gasto contra el abatimiento


de presión y, por otra parte, la ecuación
(4.17) proporciona la corrección por
abatimiento de presión. La ecuación final Figura 4.13 Lugar geométrico de los valores de
propuesta por Fetkovich es: (𝑘𝑟𝑜 ⁄𝜇𝑔 𝐵𝑜 ) vs 𝑝[26].
pws2

qo = Jo1 ( ) (p2ws − p2wf )n (4.19)
pws1

Si se efectúa una prueba de flujo de tres o cuatro puntos para el tiempo presente, es posible
construir las curvas de IPR para otras presiones estáticas usando la ecuación (4.19).

142
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Método de Eickmier
Eickmier[22] notó que para valores de n = 1 y pwf = 0 , el resultado del cociente de la ecuación
(4.18) a t1 entre la ecuación (4.19) a t 2 permite determinar qmáx a t 2 :
qmáx1 pws1 3
=( ) (4.20)
qmáx2 pws2
La solución de la ecuación (4.20) requiere una prueba de pozo al tiempo presente t1 , a partir de la
cual se puede obtener qmáx1 . Conociendo qmáx1 y pws1 , se puede resolver qmáx2 a cualquier
presión estática considerada y, como complemento, puede construirse una curva completa de IPR
para t 2 empleando la ecuación (4.8).

Método de Standing
Standing desarrolló un procedimiento que requiere cálculos de balance de materia para determinar
saturaciones futuras de donde se pueden obtener valores de k ro . De su estudio la ecuación (4.8)
toma la siguiente forma:
q0 pwf pwf
= (1 − )(1 + 0.8 ) (4.21)
qmáx pws pws
De la ecuación (4.21) sustituyendo qo = J(pws -pwf ) se obtiene:
qmáx pwf
J= (1 + 0.8 ) (4.22)
pws pws
Si el valor de J se toma cuando pwf = pws la ecuación (4.22) se convierte en:

J ∗ = 1.8qmáx /pws (4.23)

Dividiendo la ecuación (4.22) entre la ecuación (4.23) entre la ecuación, se tiene que:

JP∗ = 1.8 J/(1 + 0.8pwf /pws ) (4.24)

Que permite realizar el cálculo de Jp∗ a partir de un valor medido de J . De lo anterior para un valor
futuro de J ∗ (Jf∗ ) se puede calcular a partir de un valor presente Jp∗ , para cualquier pws futura
tomando como base la ecuación (4.15):
k ro k ro
Jf∗ = Jp∗ ( ) /( ) (4.25)
B o μo f μo B o p
Si se sustituye la ecuación (4.23) en la ecuación (4.8), la curva del IPR futura se puede construir a
partir de la ecuación (4.26):
J ∗ pws pwf pwf 2
q= [1 − 0.2 ( ) − 0.8 ( ) ] (4.26)
1.8 pws pws
Donde J ∗ para cualquier tiempo futuro está definido por la ecuación (4.25).

Para poder aplicar la ecuación (4.25) se necesita contar con los valores presentes y futuros de k ro ,
μo y Bo estos se pueden calcular con correlaciones.

143
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

El procedimiento para realizar la curva de IPR futura es el siguiente:


• Realizar una prueba de producción, para poder contar con los valores presentes de J y pws .
• Calcular el índice de productividad presente Jp∗ con la ecuación (4.24) o bien con la Ley de
Darcy:
0.00708kh
JP∗ =
r 4 (4.27)
Bo μo (ln ( e ) − + S)
rw 3
• Sustituir el valor de Jp∗ en la ecuación (4.25) y construir la gráfica de IPR para diferentes
valores de pwf con la ecuación (4.26).

Método de Cuoto
Este procedimiento puede ser usado en la construcción de curvas IPR presentes y futuras, para
esto es necesario conocer la permeabilidad relativa del aceite k ro , la viscosidad del aceite (μo ) y
el factor de volumen (Bo ) a las condiciones de presión y temperatura para las que se quiere
conocer la curva de IPR futura. La ecuación de propuesta por Cuoto[17] es la siguiente:
kh k ro pwf pwf
qo = 3.49(A) p ( ) (EF) (1 − ) [1.8 − 0.8(EF) (1 − )]
0.472re ws μo Bo pws pws (4.28)
ln ( )
rw
donde:
A = Factor de conversión = 0.001127, para (pie, lb/pg 2 , cp, md y bpd)
EF = Eficiencia de flujo

La elección del método para construir las curvas de IPR depende de los datos con los que se
cuente, si se quiere usar el método de Standing o Cuoto, es necesario conocer las propiedades
del sistema roca-fluidos a la presión media del yacimiento para las cuales se desea evaluar la
curva de IPR futura. En cambio, si tenemos pruebas de producción podemos ocupar el método de
Fetkovich, podemos usar también el método de Eickmier si solo contamos con el gasto máximo al
tiempo presente.

4.3.7 Curvas generalizadas de IPR


Patton y Goland[45], en adición a las ecuaciones
presentadas anteriormente, obtuvieron, al
combinar las ecuaciones (4.5), (4.8) y (4.14) una
serie de expresiones para construir las curvas
generalizadas de IPR como en la Figura 4.14.

Procedimiento de cálculo:
1. Obtener el valor de la pb de un análisis pVT.
2. Determinar la pws del pozo y obtener la pwf
a un gasto medido q. Figura 4.14 Comportamiento de
3. Para datos de pruebas de producción afluencia generalizado.
donde pwf > pb , obtener J, qb , qc y qmáx , en ese orden, empleando las siguientes
expresiones:

144
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

q
J= (4.29)
(pws − pwf )

qb = J(pws − pb ) (4.30)

q b pb
qc = (4.31)
1.8 (pws − pb )

qmáx = qb + qc (4.32)

4. Para datos de prueba de producción donde pws > pb > pwf obtener qc , qb y qmáx con las
siguientes expresiones:
q
qc =
p p p 2 (4.33)
1.8 ( ws ) − 0.8 − 0.2 ( wf ) − 0.8 ( wf )
pb pb pb

qb = J(pws − pb ) (4.34)

qmáx = qb + qc (4.35)

Para construcción de la curva IPR (pwf < pb ), se emplea para calcular q, a diferentes valores de
pwf la ecuación siguiente:
pwf pwf 2
q = qb + [qmáx − qb ] [1 − 0.2 ( ) − 0.8 ( ) ] (4.36)
pws pws

Si la prueba se efectúa a una presión abajo del punto de burbujeo, se debe primero calcular el
valor de J con la siguiente ecuación:
q
J= pb
pws − pb + (4.37)
p p 2
1.8 (1 − 0.2 ( wf ) − 0.8 ( wf ) )
pb pb

4.4 Comportamiento de flujo en tuberías


4.4.1 Fundamentos de flujo a través de tuberías
En la industria petrolera el flujo de gas y líquido por tuberías requiere de una precisión en el cálculo
de las caídas de presión ya que las mezclas de hidrocarburos son transportadas desde el
yacimiento a la superficie y a través de grandes distancias en la superficie, lo que influye en el
diseño del sistema de tuberías.

Las caídas de presión en el flujo multifásico son diferentes al de una sola fase, ya que en la mayoría
de los casos entre en gas y liquido existe una interface, donde el gas se desliza dejando atrás al
líquido generando diferentes patrones de flujo, lo que ocasiona grandes caídas de presión
comparado con el flujo de una sola fase.

145
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Ecuación general de energía


La ecuación general de energía que
gobierna el flujo de fluidos a través
de una tubería, se obtiene a partir
de un balance macroscópico de la
energía asociada a la unidad de
masa de un fluido, que pasa a
través de un elemento aislado del
sistema como en la Figura 4.15.

Considerando el sistema en estado


estacionario, el balance de energía
puede ser escrito de la siguiente Figura 4.15 Volumen de control.
manera:
mgZ1 mv12 mgZ2 mv22
U1 + p1 V1 + + + q + Ws = U2 + p2 V2 + + (4.38)
gc 2g c gc 2g c
mv2
Dónde: U es la energía interna; pV es la energía de expansión o compresión; es la energía
2gc
mgZ
cinética, es la energía potencial; q es la energía calorífica agregada al fluido; Ws es el trabajo
gc
realizado por o sobre el fluido y Z es la elevación sobre el nivel de referencia.

Dividiendo la ecuación (4.38) por m para obtener la energía asociada por unidad de masa y
reescribiendo en forma diferencial se tiene:
p vdv g
dU + d ( ) + + dZ + dq + dWs = 0 (4.39)
ρ gc gc
De termodinámica:
p
dU = dh − d ( ) (4.40)
ρ

dp
dh = TdS + (4.41)
ρ

dp p
dU = TdS + − d( ) (4.42)
ρ ρ
Donde h, entalpía específica; S, entropía y T, temperatura.

Sustituyendo la ecuación (4.42) en (4.39) se tiene:

dp p p vdv g
TdS + − d( ) + d( ) + + dZ + dq + dWs = 0 (4.43)
ρ ρ ρ gc gc
Para un proceso irreversible, la desigualdad de Clausius establece que:

146
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

dq
dS ≥ − (4.44)
ρ

TdS = −dq + dLw (4.45)

Donde dLw son las pérdidas por irreversibilidad, como la fricción. Usando estas relaciones y
asumiendo que no se realiza trabajo en, o por el fluido la ecuación (4.43) se reduce a:
dp vdv g
+ + dZ + dLw = 0 (4.46)
ρ gc gc
Si se considera que la tubería es inclinada en un ángulo θ
desde la horizontal, como en la Figura 4.16 y sabiendo
que dZ = dL sin(θ)

ρ
Multiplicando la ecuación (4.46) por se tiene:
dL

dp ρvdv g dLw
+ + ρ sen(θ) + ρ =0 (4.47)
dL g c dL g c dL Figura 4.16 Geometría de flujo.
Esta ecuación puede ser resuelta para calcular el gradiente de presión, si se considera la caída de
presión positiva en la dirección de flujo:
dp g ρvdv dp
= ρ sen(θ) + +( ) (4.48)
dL g c g c dL dL f
dp dLw
Donde ( ) ≡ ρ , es el gradiente de presión por pérdidas por fricción.
dL f dL

Pérdidas de presión por fricción


Las pérdidas de presión por fricción, en conductos circulares de diámetro constante, han sido
determinadas experimentalmente por varios investigadores. Los resultados de esta
experimentación, utilizando tuberías de diversos materiales, construyen la base de las fórmulas
que actualmente se usan.

Ecuación de Darcy
Darcy, Weisbach y otros, dedujeron experimentalmente la siguiente ecuación, expresada en
unidades consistentes:
∆p fρv 2
( ) = (4.49)
∆L f 2g c d

147
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Ecuación de Fanning
Una ecuación parecida a la de Darcy fue establecida por Fanning, quien obtuvo valores de f cuatro
veces menores a los de Darcy. Esta diferencia se debe al uso del radio hidráulico en lugar del
diámetro de la tubería al formar su correlación.

La ecuación establecida por Fanning es:


∆p fv 2 ρ
( ) = (4.50)
∆L f 2g c R h
Donde:
área de la sección transversal
R h = radio hidráulico =
perímetro mojado
R h = (πd2 /4)/πd = d/4
∆p 2fv 2 ρ
∴( )f = (4.51)
∆L gc d

Factor de fricción
El valor del factor de fricción (f) es función de la rugosidad de la tubería (ε) y del número de
Reynolds (NRe ) , esto es:

f = f(ε, NRe ) (4.52)

El número de Reynolds (adimensional) se define como:


dvρ
NRe = (4.53)
μ
La rugosidad de la tubería ε, es una característica de sus superficies, la cual está constituida por
pliegues o crestas unidas, formando una superficie homogéneamente distribuida y depende del
tipo de material que se emplee en su construcción.

Los valores de rugosidad más comúnmente usados en la industria son:


• Tubería estirada, ε = 0.00006.
• Tuberías de producción o perforación, ε = 0.0006.
• Tuberías de escurrimiento, ε = 0.0007.
• Tuberías galvanizadas, ε = 0.006.

Para calcular el valor de f es necesario determinar el régimen de flujo. En conductos, los fluidos se
mueven de acuerdo a cualquiera de los siguientes regímenes de flujo: laminar o turbulento. El flujo
laminar ocurre cuando las partículas de fluido se mueven en líneas rectas paralelas al eje del
conducto. A velocidades mayores, las partículas se mueven de una manera caótica, formando
vórtices y remolinos; en este caso el flujo es turbulento. Reynolds estableció experimentalmente
un parámetro para determinar el régimen de flujo en tuberías. A este parámetro mostrado en la
ecuación (4.53) se le conoce como numero de Reynolds. El flujo laminar se presenta cuando NRe <
2300 y el flujo turbulento cuando NRe > 3100 .

148
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Para flujo laminar de una sola fase, el factor de fricción depende exclusivamente del número de
Reynolds y está dado por:
64
f= (4.54)
NRe
Para flujo turbulento, el factor de fricción está dado por la ecuación de Colebrook y White [11]:
−2
ε 2.514
f = [−2log ( + )] (4.55)
3.715d √f NRe
Se observa que para calcular f, en este caso, se requiere de un proceso iterativo.

Basándose en la ecuación (4.55) Moody preparó un diagrama para determinar el factor de fricción
en tuberías de rugosidad comercial que se muestra en la Figura 4.17 (más adelante). En este
diagrama se puede notar lo siguiente:
• Para NRe < 2300 f depende exclusivamente del número de Reynolds.
• A partir de NRe = 3100, se inicia la zona de transición. Dentro de esta, f depende tanto de
NRe como de ε⁄d (rugosidad relativa).
• La zona francamente turbulenta se inicia a diferentes valores de NRe , dependiendo del valor
de ε⁄d. En esta zona f es independiente de NRe y varia únicamente con la rugosidad
relativa. El valor de f puede obtenerse, para flujo turbulento, con:

f = (−2 log(ε/3.715 d))−2 (4.56)

• Cuando el flujo es crítico (2300 < NRe < 3100) el factor de fricción se puede aproximar con
la siguiente expresión:

NRe − 2300 1.3521


f= 2 + 0.032 (4.57)
2300 ε 2.514
(2.3026 log ( + ))
[ 3.715d 3100√f ]

Sustituyendo la ecuación (4.49) en la ecuación (4.48), se obtiene el gradiente de presión, que es


aplicable a cualquier fluido y cualquier ángulo de inclinación:
dp g ρvdv fρv 2
= ρ sen(θ) + + (4.58)
dL g c g c dL 2g c d
Donde el factor de fricción f, es función del número de Reynolds y la rugosidad de la tubería. Esta
relación puede ser calculada mediante el diagrama de Moody. El gradiente de presión total está
constituido de los siguientes tres componentes.
∆p ∆p ∆p ∆p
( ) =( ) +( ) + ( ) (4.59)
∆L T ∆L e ∆L acc ∆L f
donde:
∆p
( ) = Gradiente de presión total.
∆L T

149
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

∆p g
( ) = ρ sen(θ) = Gradiente de presión debido a la elevación.
∆L e gc
∆p ρvdv
( ) = = Gradiente de presión debido a la aceleración.
∆L acc gc dL
∆p fρv2
( ) = = Gradiente de presión por pérdidas de fricción.
∆L f 2gc d

4.4.2 Flujo de una sola fase


Flujo de liquido
• Ecuación general: De la ecuación (4.59) que expresa el gradiente de presión total puede
escribirse en la forma siguiente, al despreciar el efecto de aceleración:

∆pT = ∆pe + ∆pf (4.60)

La caída de la presión por elevación1 es:

∆pe = 0.433 ∙ γL ∙ ∆h (4.61)

La pérdida de presión de la fase liquida por fricción, en unidades de campo, se obtiene con la
ecuación de Darcy, de la manera siguiente:
fγL q2 L
∆pf = 0.06056 (4.62)
d5
Al sustituir las ecuaciones (4.61) y (4.62) en la ecuación (4.60), se obtiene:
f γL q2 L
ΔpT = 0.433 γL Δh + 0.6056 (4.63)
d5

• Numero de Reynolds
El número de Reynolds para el líquido en unidades de campo está dado por:
q γL
NRe = 92.2 (4.64)

Eficiencia de flujo
La rugosidad de las tuberías depende del proceso empleado en su fabricación, su grado y tamaño.
Aun las tuberías nuevas y con mayor razón las almacenadas, mostraran valores aleatorios en su
rugosidad. Los efectos de la corrosión, erosión e incrustaciones, que ocurren en las tuberías en
operación, también afectan las condiciones de flujo. Por lo anterior, los gastos calculados mediante
las correlaciones raramente concuerdan con los medidos.

Para compensar esta imprecisión, generalmente se introduce en los cálculos un factor de eficiencia
E. Este factor se define como la fracción (o porcentaje) del gasto total calculado al manejado

1
El desarrollo de las ecuaciones puede ser consultado en la referencia [29].

150
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Figura 4.17 Diagrama de Moddy.

151
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

realmente en la tubería. Cuando se carece de datos de campo, la selección de E se basa en la


experiencia; sin embargo, un valor de 0.9 es apropiado para los cálculos de diseño de tuberías.

Para calcular el gasto real de una línea, su gasto teórico se multiplica por el factor E. Para corregir
las pérdidas de presión calculadas, estas se dividen por la raíz cuadrada de E. Este procedimiento
tiene el mismo efecto que cambiar el factor de fricción por un nuevo valor de f⁄E 2 .

Por lo tanto, la ecuación (4.63), de acuerdo con lo expuesto queda:

f γL q2 L
ΔpT = 0.433 γL Δh + 0.06056 (4.65)
E 2 d5

Flujo de gas
• Ecuación general
De la ecuación (4.59), las pérdidas de presión por fricción se expresan en unidades prácticas según
Darcy como:

f po ̅ + 460) L
q2 γg z̅ (T
∆pf = ( )( ) (4.66)
519.98 To + 460 d5 p̅

En la ecuación anterior, la caída de presión por fricción está en función de la presión media p̅ =
(p1 + p2 )/2 y adicionalmente Δpf puede ser definida como Δpf = p1 − p2 , por tanto, haciendo las
sustituciones anteriores en la ecuación (4.66), se obtiene:

f po ̅ + 460)L
q2 γg (T
(p12 − p22 ) = ( 2
) ( ) ( ) (4.67)
4.61.346 (To + 460) d5

Que es la ecuación que permite evaluar las pérdidas de presión por fricción en gasoductos
horizontales.

Las pérdidas de presión debido al cambio de elevación se expresan de la siguiente forma:

∆pe = ρ̅g h (4.68)

Que en unidades prácticas puede expresarse como:

2.7044 p̅ γg
Δpe = ( ) (4.69)
144 ̅
z̅ (T + 460)

Y como Δpe = p1 − p2 , la ecuación (4.69) queda de la siguiente manera:

p̅ γg h
p1 − p2 = 0.01878 (4.70)
̅ + 460)
z̅ (T

152
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Multiplicando ambos miembros por: (p1 + p2 )/2; se obtiene:


p̅2 γg h
(p12 − p22 ) = 0.03756 (4.71)
̅ + 460)
z̅ (T
Es importante señalar que el valor de h se toma con respecto a un nivel base que normalmente es
la superficie, el valor de h será positivo hacia arriba y negativo en el caso contrario.

La ecuación (4.71) es la que permite calcular exclusivamente las pérdidas de presión por
elevación. Como se observa, a diferencia de la ecuación de pérdidas por fricción, es necesario
suponer un valor de p2 para obtener una p̅ y así calcular las pérdidas de presión por elevación.
Por lo tanto, se necesita de un proceso iterativo hasta alcanzar que la p2 supuesta sea
aproximadamente igual a la p2 calculada.

Sumando las ecuaciones (4.67) y (4.71) se obtiene la ecuación (4.72) para calcular p1 o p2 en
unidades prácticas y bajo las siguientes suposiciones:
• Flujo en régimen permanente.
• Flujo de una sola fase.
• Energía cinética despreciable.

̅(T
qg2 +γg Z ̅ +460)L ̅2 γg ∙h
p
f po
p12 − p22 = ( )( )( ) + 0.03756 ̅(T̅ (4.72)
461.3462 To +460 d5 Z +460)

La ecuación (4.72) puede ser despejada para determinar el gasto dadas las condiciones de presión
en la entrada y la salida, así como el diámetro de la tubería:

K4 2 0.5
qg = 0.5
[p1 − p22 − (0.03756p̅2 γg h/(Z̅(T
̅ + 460)))] d2.5 (4.73)
L

donde:

0.5
T
2( o
+ 460 0.5 1
K 4 = 461.346 ) ( ) (4.74)
po ̅ ̅
f γg Z (T + 460)

O bien, se puede calcular el diámetro dadas las condiciones de presión y gasto:

0.2
L (4.75)
d = [( ) (1/ (p12 − p22 − (0.03756 p̅2 γg h/(Z̅(T
̅ + 460)))) ) qg2 ]
K4

• Numero de Reynolds
Al igual que para flujo de líquidos por tuberías, es conveniente obtener una ecuación del número
de Reynolds para flujo de gas, en la que sus factores estén en unidades prácticas. La expresión
del número de Reynolds para gas en unidades prácticas es:

153
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

q g γg (4.76)
NRe = 0.0201056
d μg

• Presión media
Como la distribución de presiones en un gasoducto no es lineal, se recomienda el uso de la
siguiente ecuación para obtener la presión media:

2 p1 3 − p2 3 (4.77)
p̅ = [ ]
3 p1 2 − p1 2

• Eficiencia de flujo
De igual manera como para los líquidos, la eficiencia es un factor de ajuste para compensar los
efectos de corrosión, rugosidad e incrustaciones, que no se consideran en la deducción de las
ecuaciones de flujo, por lo tanto, los resultados obtenidos se tienen que corregir y así obtener un
gasto que mejor se aproxime a la realidad.

Los valores más comunes de eficiencia E para gas son:

Tabla 4.1 Valores de E para flujo de gas según Ikoku[35].


Contenido de líquidos
Línea E
(gal/106 pies3)
Gas seco 0.1 0.92
Gas húmedo 7.2 0.77
Gas y condensado 800 0.60

4.4.3 Flujo multifásico en tuberías


El flujo multifásico en tuberías se define como el movimiento conjunto de gas y líquido través de
estas. El gas y el líquido pueden fluir como una mezcla o como fases separadas, generando
diferentes patrones de flujo, siendo los patrones de flujo la distribución de una fase con respecto a
otra al fluir a través de las tuberías.

El estudio del flujo multifásico permite. Por ejemplo, estimar la presión necesaria en el fondo del
pozo para transportar un determinado gasto de producción hasta la superficie.

Los problemas que se presentan en el flujo multifásico pueden ser divididos dentro de cuatro
categorías principales:
• Flujo multifásico vertical.
• Flujo multifásico horizontal.
• Flujo multifásico inclinado.
• Flujo a través de estranguladores y conexiones.

154
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

El flujo multifásico y los problemas asociados a este han sido estudiados detenidamente, y
numerosas ecuaciones y correlaciones han sido presentadas para predecir el comportamiento del
flujo multifásico vertical, así como el horizontal.

Conceptos fundamentales
Patrones de flujo
Al fluir dos fases simultáneamente, pueden hacerlo de distintas formas. Cada una de estas formas
representa una distribución relativa de una fase con respecto a otra, construyendo un patrón de
flujo o tipo de flujo.

En la Figura 4.18 se muestran los patrones de flujo para tuberías horizontales y en la Figura 4.19
los patrones de flujo para tuberías verticales presentadas por Beggs [8] y Orkiszewski[43]
respectivamente en trabajos experimentales.

Figura 4.18 Patrones de flujo en Figura 4.19 Patrones de flujo en tuberías


tuberías horizontales[8]. verticales[43].

Colgamiento
Se define como la relación entre el volumen de líquido existente en una sección de tubería a las
condiciones de flujo, y el volumen de la sección aludida. Esta relación de volúmenes depende de
la cantidad de líquido y gas que fluyen simultáneamente en la tubería. Generalmente, la velocidad
con que fluye el gas es diferente a la velocidad con que fluye el líquido, propiciando un
“resbalamiento” entre las fases.

El término “resbalamiento” se usa para describir el fenómeno natural del flujo a mayor velocidad
de una de las dos fases. Las causas de este fenómeno son diversas. La resistencia al flujo por
fricción es mucho menor en la fase gaseosa que en la fase liquida. La diferencia de
compresibilidades entre el gas y líquido, hace que el gas en expansión viaje a mayor velocidad
que el líquido. Cuando el flujo es ascendente o descendente, actúa la segregación gravitacional

155
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

ocasionando que el líquido viaje a menor velocidad que el gas, para el primer caso, y a mayor
velocidad para el segundo caso.

Para calcular las pérdidas de presión por elevación (carga hidrostática), es necesario predecir con
precisión el colgamiento considerado el resbalamiento entre las fases.

La expresión establecida por Mukherjee y Brill[39] es:

C
2 2
Ngv5
HL = exp [(C1 + C2 sin θ + C3 sin θ + C4 NLμ ) C ] (4.78)
NLv6

Donde:
1 0.25
NLμ = 0.15726μL ( ) (4.79)
ρL σ3

ρL 0.25 (4.80)
NLv = 1.938vsL ( )
σ

ρL 0.25 (4.81)
Ngv = 1.938vsg ( )
σ

Hg = 1 − HL (4.82)

En la Tabla 4.2 aparecen los coeficientes para diferentes patrones de flujo.

Tabla 4.2 Coeficientes de la ecuación (4.78) para diferentes patones de flujo[39].


Dirección
Tipo de flujo C1 C2 C3 C4 C5 C6
del flujo
Horizontal o -
Todos -0.380113 0.129875 2.343227 0.475686 0.288657
ascendente 0.119788
Estratificado -1.330282 4.808139 4.171584 56.262268 0.079951 0.504887
Descendente
Otros -0.516644 0.789805 0.551627 15.519214 0.371771 0.393952

Otro concepto que se usa con frecuencia en los cálculos de gradientes para flujo multifásico, es el
colgamiento sin resbalamiento (λ). Se define en la misma forma que HL pero se calcula a partir de
las condiciones de p y T existentes considerando las producciones obtenidas en superficie (q y
RGA), esto es:
qL
λL = (4.83)
qL + qg

λg = 1 − λL (4.84)

156
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Velocidades superficiales
Es la velocidad que tendría cualquiera de las fases si ocupara toda la tubería. Se define por las
expresiones siguientes:
qL 0.01191(qo Bo + qw Bw )
vsL = = (4.85)
Ap d2

qg 0.002122 qo (RGA − R s ) Bg
vsg = = (4.86)
AP d2
qL + qg
vm = = vsL + vsg (4.87)
AP
Donde Ap es el área de la sección transversal de la tubería.

De estas ecuaciones se observa que:


vsL
λL = (4.88)
vm
Cuando se produce por espacio anular, el área transversal al flujo es:
π 2
Ap = (d − d2te ) (4.89)
4 ci
Por lo que las ecuaciones (4.85) y (4.86) quedan:
0.01191(qo Bo + qw Bw )
vsL = (4.90)
(d2ci − d2te )
0.002122 qo (RGA − R S ) Bg
vsg = (4.91)
(d2ci − d2te )

Velocidad real
Aplicando el concepto de colgamiento, se puede obtener la velocidad real correspondiente a cada
fase.
qL qL vsL
vL = = = (4.92)
A L A p HL HL

qg qg vsg
vg = = = (4.93)
Ag Ap (1 − HL ) (1 − HL )

Densidad de la mezcla de fluidos


La densidad real de la mezcla de fluidos se obtiene a partir del colgamiento con:

ρm = ρL HL + ρg (1 − HL ) (4.94)

Algunos autores calculan la densidad de la mezcla si considerar el resbalamiento entre las fases,
esto es:

157
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

ρn = ρL λL + ρg (1 − λL ) (4.95)

También puede obtenerse esta densidad a partir de la expresión siguiente:


M
ρn = (4.96)
Vm
dónde: M es la masa de la mezcla a condiciones estándar por barril de aceite producido a
condiciones estándar, (lbm @c. s.⁄lbo @c. s.); Vm , es el volumen de la mezcla a condiciones
3
estándar por barril de aceite producido a condiciones estándar, (piesm @c. s.⁄pieso3 @c. s.)

Los valores de M y Vm se obtienen con las ecuaciones siguientes:

M = Mo + Mg + Mw (4.97)

Mo = 350.5 γo (4.98)

Mg = 0.0764 γg R (4.99)

Mw = 350.5γw WOR (4.100)

Sustituyendo las ecuaciones (4.98), (4.99) y (4.100) en la ecuación (4.97), se obtiene:

M = 350.5(γo + γw WOR) + 0.0764 R γg (4.101)

Vm = Vmo + Vmg + Vmw (4.102)

Vmo = 5.615 Bo (4.103)

Vmg = (R − R S )Bg (4.104)

Vmw = 5.615 WOR Bw (4.105)

Sustituyendo las ecuaciones (4.103), (4.104) y (4.105) en la ecuación (4.102) se tiene:

Vm = 5.615(Bo + Bw WOR) + (R − R s ) Bg (4.106)

Sustituyendo las ecuaciones (4.101) y (4.106) en la ecuación (4.96) se obtiene:


350.5(γo + γw WOR) + 0.0764 R γg
ρn = (4.107)
5.615(Bo + Bw WOR) + (R − R s )Bg

158
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Gasto de masa
Se define por la siguiente expresión:
lbm de líquido y gas
wm = (4.108)
segundo
Y puede obtenerse con cualquiera de las ecuaciones siguientes:
qo M
wm = (4.109)
86400

wm = wo + ww + wg (4.110)

Donde:

wo = ρo qo Bo / 15388 (4.111)

ww = ρw qw Bw /15388 (4.112)

wg = ρg qo (RGA − R S )Bg / 86400 (4.113)

Viscosidad de la mezcla
Dependiendo del método que se aplique, se usan las siguientes ecuaciones para obtener la
viscosidad de la mezcla de dos fluidos:

μn = μL λL + μg (1−λL ) (4.114)

H
μm = μL L μg (1−HL ) (4.115)

donde:

μL = μo fo + μw fw (4.116)

q o Bo
fo = (4.117)
q w Bw + q o Bo

Bo
fo = (4.118)
Bo + WOR Bw

fw = 1 − fo (4.119)

159
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Tensión superficial de la mezcla de líquidos


Se obtiene con la siguiente expresión:

σL = σo fo + σw fw (4.120)

Densidad de la mezcla de líquidos


Se calcula con la siguiente expresión:

ρL = ρo fo + ρw fw (4.121)

4.4.4 Flujo multifásico en tuberías verticales


En el momento en que los fluidos del yacimiento se producen por las tuberías de producción, se
consume la mayoría de la presión disponible para llevarlos a la superficie, por lo que es muy
importante realizar una evaluación precisa de la distribución de la presión a lo largo de la tubería.
Al hacer conjuntamente el análisis del sistema integral de producción, es posible:
• Diseñar las tuberías de producción y las líneas de descarga.
• Proyectar sistemas artificiales de producción (bombeo neumático, mecánico)
• Obtener la presión de fondo fluyendo, sin intervenir los pozos.
• Calcular el efecto de los estranguladores sobre el gasto.
• Determinar la vida fluyente de los pozos.
• Corroborar los datos obtenidos con las correlaciones para su ajuste.

Cuando el flujo es vertical las caídas de presión por aceleración son muy pequeñas, por lo que el
gradiente de presión por aceleración se desprecia y la ecuación (4.59) queda de la siguiente forma:
∆p ∆p ∆p
( ) =( ) + ( ) (4.122)
∆L T ∆L e ∆L f
Las diversas correlaciones existentes para el cálculo del gradiente de presión en tuberías con flujo
multifásico, pueden clasificarse en tres tipos[43]:
• Tipo 1. No se considera resbalamiento entre fases ni patrones de flujo.
La densidad de la mezcla se obtiene en función de las propiedades de los fluidos, corregidas por
presión y temperatura. Las pérdidas por fricción y los efectos del colgamiento se expresan por
medio de un factor de fricción correlacionado empíricamente. No se distinguen patrones de flujo.
Dentro de este tipo están incluidos los métodos de Poettman y Carpenter[46], Fancher y Brown[25] y
Baxendell y Thomas[7].
• Tipo 2. Se considera resbalamiento entre las fases no se distinguen patrones de flujo.
La densidad de la mezcla se calcula utilizando el concepto de colgamiento. El factor de fricción se
correlaciona con las combinaciones de las propiedades del gas y del líquido. Se calcula el
gradiente de presión por correlación, sin embargo, no se distinguen regímenes de flujo. Los
métodos de Hagedorn y Brown[33] y Asheim[4] caen dentro de este tipo de correlaciones.
• Tipo 3. Se considera resbalamiento entre fases y patrones de flujo.

160
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

La densidad de la mezcla se determina mediante el colgamiento. El factor de fricción se


correlaciona con las propiedades del fluido para la fase continua. Se distinguen diferentes patrones
de flujo y se calcula el gradiente de presión por aceleración. Las principales correlaciones que
caen dentro de esta clasificación son: Duns y Ros[19], Orkiszewski[43], Aziz[5], Beggs y Brill[8],
Chierici[13], Mukherjee y Brill[40] Gould y Tek[32].

4.4.5 Flujo multifásico en tuberías horizontales


Numerosos autores han presentado correlaciones para evaluar el gradiente de presión en tuberías
horizontales entre las cuales podemos considerar a Bertuzzi, Tek y Poettman[9], Lockhart y
Martinelli[38], Dukler[18], Eaton, Andrews y Knowless[20] y la correlación de Beggs y Brill[8].

Para flujo horizontal, el gradiente de presión debido al cambio de elevación es igual a cero por lo
que la ecuación (4.59) se reduce a:
Δp Δp Δp
( ) =( ) +( ) (4.123)
ΔL T ΔL e ΔL ac
Que es:
Δp ρv 2 ρ∆(v 2 )
( ) =f + (4.124)
ΔL T 2g c d 2g c ∆L
La mayoría de los investigadores han adoptado la ecuación anterior para evaluar las
características del flujo de dos fases y posteriormente determinar el gradiente de precisión total.
El problema de la variación de las características del fluido se elimina al suponer que la mezcla
gas-líquido es homogénea en un intervalo pequeño de tubería. Así la ecuación (4.124) se puede
escribir como:
Δp ρm vm 2 ρm ∆(vm 2 )
( ) = ftp + (4.125)
ΔL T 2g c d 2g c ∆L
En donde ftp , ρm , y Vm se refieren a la mezcla y son definidos en forma distinta por los autores de
las diferentes correlaciones.

4.4.6 Flujo multifásico en tuberías inclinadas


Muy pocas de las líneas superficiales son realmente horizontales, la mayoría de ellas varían un
poco y pasan por terrenos bastante inclinados. El flujo multifásico inclinado es definido como el
flujo en tuberías que se desvían de la horizontal. Entre las correlaciones más importantes se
encuentra la correlación de Flanigan[28] y la de Beggs y Brill[8].

4.4.7 Correlación de Beggs y Brill para el cálculo de caídas de presión


La correlación de Beggs y Brill fue desarrollada a partir de datos experimentales obtenidos en
instalaciones a escala, las instalaciones consistían en tuberías de acrílico de 1 y 1.5 pulgadas la
tubería podía inclinarse en cualquier ángulo, en la Figura 4.20 se puede observar el sistema usado
para desarrollar la correlación. Los parámetros estudiados y sus rangos de variación fueron: gasto
de gas 0 a 300 miles pies3/día; gasto de líquido 0 a 30 gal/min; presión promedio del sistema 35 a
95 lpc; diámetro de tubería 1 a 1.5 pg.; colgamiento de líquido 0 a 0.870; gradiente de presión 0 a
0.8 lpc/pie; ángulo de inclinación -90° a 90° y patrones de flujo horizontal. Los fluidos usados fueron

161
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

agua y aire. Para cada tamaño de tubería, los gastos de líquido y gas fueron variados para que
todos los patrones de flujo fueran observados con la tubería horizontal. Después de establecer
gastos de flujo, el ángulo de inclinación fue variado para que el efecto del ángulo en el colgamiento
de líquido y gradiente de presión fuera observado. El colgamiento de líquido y el gradiente de
presión fueron registrados para ángulos de 0, más y menos 5, 10, 15, 20, 35, 55, 75 y 90 grados
desde la horizontal. Las correlaciones fueron desarrolladas a partir de 584 medidas.

Figura 4.20 Diagrama esquemático usado para el desarrollo de la correlación de Beggs y


Brill[8].

Diferentes correlaciones para el colgamiento de


líquido son presentadas para cada patrón de flujo
horizontal. El colgamiento de líquido que existiría si
la tubería fuese horizontal es calculado primero y
después corregido por el efecto del ángulo de
inclinación. Los patrones de flujo horizontal son
ilustrados en la Figura 4.18. La variación del
colgamiento de líquido con el ángulo de inclinación
se muestra en la Figura 4.21 para tres de las
pruebas. Se observó que el colgamiento de líquido
tenía un máximo en +50° y un mínimo en -50°. El
mapa de patrones de flujo original fue modificado Figura 4.21 Colgamiento de líquido
ligeramente para incluir la zona de transición entre contra ángulo de inclinación[8].
el patrón de flujo segregado y el patrón de flujo
intermitente. El mapa de patrones de flujo modificado esta superpuesto en el original en la Figura
4.22. El factor de fricción de dos fases es calculado usando ecuaciones que son independientes

162
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

del patrón de flujo, pero dependen del colgamiento. La gráfica del factor de corrección del factor
de fricción como función del colgamiento de líquido se muestra en la Figura 4.23.

Figura 4.22 Mapa de patrones de flujo de Figura 4.23 Factor de fricción de dos
Beggs y Brill[8]. fases[8].

• Determinación del patrón de flujo


Las siguientes variables son usadas para determinar que patrón de flujo existirá si la tubería
estuviera en una posición horizontal. Estos parámetros son de correlación y no dan información
acerca del patrón de flujo real a no ser que la tubería sea horizontal.
vm 2
NFr = (4.126)
gd

L1 = 316λL 0.302 (4.127)

L2 = 0.0009252 λL −2.4684 (4.128)

L3 = 0.10 λL −1.4516 (4.129)

L4 = 0.5 λL −6.738 (4.130)

Los límites de cada patrón de flujo se muestran en la Tabla 4.3 (más adelante).
• Calculo del colgamiento de líquido
Cuando el patrón de flujo es de transición el colgamiento de líquido debe ser calculado interpolando
los patrones de flujo segregado e intermitente con la siguiente ecuación:

HL (transición) = AHL (segregado) + (1 − A)HL (intermitente) (4.131)

L3 −NFr
donde A =
L3 −L2

163
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Tabla 4.3 Límites de patrones de flujo horizontal[8].

Patrón de flujo Condiciones

Segregado λL < 0.01 y NFr < L1 ó λL ≥ 0.01 y NFr < L2


Transición λL ≥ 0.01 y L2 < NFr ≤ L3
Intermitente 0.01 ≤ λL < 0.4 y L3 < NFr ≤ L1 ó λL ≥ 0.4 y L3 < NFr ≤ L4
Distribuido λL < 0.4 y NFr ≥ L1 ó λL ≥ 0.4 y NFr > L4
Las mismas ecuaciones son usadas para el cálculo del colgamiento de líquido en todos los
patrones de flujo. Los coeficientes y exponentes usados en la ecuación dependen del patrón de
flujo.

HL(θ) = HL(0) ψ (4.132)

Donde HL(0) es el colgamiento de líquido que existiría si la tubería fuese horizontal y es calculado
con la siguiente ecuación:
aλL b
HL(0) = (4.133)
NFr c
Donde a, b y c son determinados Tabla 4.4 Coeficientes de la ecuación (4.133)
dependiendo del patrón de flujo de la Tabla para diferentes patones de flujo[8].
4.4 con la restricción de que HL(0) > λL Patrón de
a b c
flujo
El factor de corrección del colgamiento del Segregado 0.98 0.4846 0.0868
líquido por efecto del ángulo de inclinación Intermitente 0.845 0.5351 0.0173
está dado por: Distribuido 1.065 0.5824 0.0609

ψ = 1 + C[sen(1.8θ) − 0.333sen3 (1.8θ)] (4.134)

Donde θ es el ángulo de inclinación real.

Para tuberías verticales, la ecuación (4.134) se convierte en:

ψ = 1 + 0.3C (4.135)

Donde C puede calcularse con la ecuación (4.136).

C = (1 − λL ) ln(dλL e NLv f NFr g ) (4.136)

Donde d, e, f y g son determinados a partir de la Tabla 4.5. Con la restricción de que C≥0.

164
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Tabla 4.5 Coeficientes de la ecuación (4.136) para diferentes patones de flujo[8].


Patrón de flujo horizontal d e f g
Segregado ascendente 0.011 -3.768 3.539 -1.614
Intermitente ascendente 2.96 0.305 -0.4473 0.0978
Distribuido ascendente Sin corrección C = 0 ψ = 1
Todos los patrones de flojo
4.70 -0.3692 0.1244 -0.5056
descendente

• Pérdidas de presión por fricción


Las pérdidas de presión por fricción están representadas por la siguiente ecuación:
dp f𝑡𝑝 ρn vm 2
( ) = (4.137)
dZ f 2g c d
donde ρn puede calcularse de la ecuación (4.95), ftp puede ser calculado por medio de la
siguiente ecuación.
ftp
ftp = fn ( ) (4.138)
fn
El factor de fricción sin resbalamiento es determinado del diagrama de Moody o mediante:
−2
NRe
fn = [2 log [ ]] (4.139)
4.5223 logNRe − 3.8215
Usando el siguiente número de Reynolds:
124 d vm ρn
NRe = (4.140)
μn
Donde μn se calcula a partir de la ecuación (4.10).

ftp
El factor de fricción normalizado ( ) es función del colgamiento del líquido HL(θ) , y del colgamiento
fn
sin resbalamiento λL y puede obtenerse de la siguiente expresión:
ftp
= es (4.141)
fn
En el cual S e Y se calculan respectivamente con las expresiones
ln(Y)
S= (4.142)
−0.0523 + 3.182 ln(Y) − 0.8725 ln(Y)2 + 0.01853 ln(Y)4
λL
Y= (4.143)
HL(θ) 2
El valor de S se indetermina en el rango de 1<y<1.2 para este intervalo S se calcula de a siguiente
manera:

S = ln(2.2Y − 1.2) (4.144)

165
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

• Pérdidas de presión por aceleración


A pesar de que el gradiente de presión por aceleración es muy pequeño, con excepción de flujo
de alta velocidad, puede ser calculado con mejor precisión a partir de la ecuación
dp ρs vm vsg dp
( ) = (4.145)
dZ acc g c p dZ
Si se define EK como:
ρs vm vsg
EK = (4.146)
gcp
El gradiente de presión total puede ser calculado de la siguiente manera:
dp dp
( ) +( )
dp dZ el dZ f (4.147)
=
dZ 1 − EK
donde:
dp g
( ) = ρs (4.148)
dZ el g c

4.4.8 Cálculo de perfiles de presión a lo largo de una tubería


El cálculo de perfiles de perfiles de presión en flujo multifásico involucra el empleo de un proceso
iterativo o de ensayo y error si la temperatura en la tubería varia con la posición. Al calcular el perfil
de presión, la tubería es dividida en incrementos de presión o longitud y las propiedades del fluido
y el gradiente depresión son evaluados a las condiciones promedio de presión, temperatura y
ángulo de inclinación. La exactitud en el cálculo del perfil de presión incrementa mientras el número
de incrementos es mayor, pero esto hace que el número de cálculos se incremente. Lo que no
representa un problema si los procedimientos se programan. Los incrementos deben ser pequeños
a bajas presiones donde la presión cambia rápidamente con la distancia.

El perfil de presión puede calcularse mediante incrementos de presión o incrementos de longitud,


en ambos casos se asume que la temperatura es conocida.

El procedimiento para calcular el perfil de presión mediante incrementos de longitud se muestra


en el diagrama de flujo de la Figura 4.24 y el procedimiento para calcular el perfil de presión
mediante incrementos de presión se muestra en el diagrama de flujo de la Figura 4.25

4.4.9 Flujo a través de estranguladores


La predicción del comportamiento del flujo de mezclas gas-líquido en orificios no es un problema
que pueda considerarse resuelto. Existen numerosos estudios sobre este tema y se han
encontrado varias correlaciones que relacionan el gasto a través del orificio, la presión y
temperatura antes del orificio y el área de estrangulamiento, cuando el flujo es crítico. Algunas de
las correlaciones obtenidas están basadas en trabajos experimentales y se ajustan
razonablemente a los rangos probados; sin embargo, se desconoce su precisión fuera de estos
límites.

166
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Figura 4.24 Diagrama de flujo para el cálculo de un perfil de presión (incrementos en


longitud).

167
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Figura 4.25 Diagrama de flujo para el cálculo de un perfil de presión (incrementos en


presión).

168
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

En el desarrollo de sus correlaciones los autores han repuesto diversas relaciones de presión
crítica. Establecer un valor fijo para dicha relación implica una simplificación que indudablemente
se reflejara en la exactitud de las predicciones que se obtengan al aplicar las correlaciones
mostradas a continuación. Por lo anterior es recomendable que al desarrollar una correlación se
investiguen las fronteras del flujo crítico y además que las relaciones se cumplan para los casos
extremos, o sea: flujo solo de gas o solo de líquido.

Correlaciones de flujo a través de estranguladores


A partir de datos de producción, Gilbert[30] desarrollo una expresión aplicable al flujo simultáneo
gas-líquido a través de estranguladores. En su trabajo describe en forma detallada el papel del
estrangulador en un pozo y analiza cuál es el efecto sobre la producción de cambios bruscos en
el diámetro del orificio.

Tomando como base la relación entre las presiones antes y después de un orificio para flujo sónico
de una fase, Gilbert recomendó para tener flujo sónico una relación de 0.588 o menor, entre la
presión promedio en el sistema de recolección (después del estrangulador) y la presión en la boca
del pozo (antes del estrangulador).

Utilizando datos adicionales Baxendell[6] actualizó la ecuación de Gilbert, modificando los


coeficientes.

Ros[47] orientó su trabajo al flujo de mezclas con alta relación gas-aceite, en las que el gas fue la
fase continua. En su desarrollo llego a una expresión similar a la de Gilbert; pero con coeficientes
diferentes. Aparentemente su expresión la comprobó con datos de campo.

Achong[1] también revisó la ecuación de Gilbert y estableció una expresión que valido
comparándola con más de 100 pruebas de campo.

La forma general de las ecuaciones desarrolladas por los investigadores citados es:
AqL RB
p1 = (4.149)
dCϕ
donde:
p1 = Presión corriente arriba (lb/pg 2 ).
qL =Producción de líquido (bl/día).
R = Relación gas-líquido (pies 3 /bl).
dϕ =Diámetro del estrangulador (64avos de pg).
Tabla 4.6 Constantes de la ecuación (4.149).
A,B,C = Constantes que dependen de la
Correlación A B C
correlación y se toman los valores de la
Gilbert 10.0 0.546 1.89
Tabla 4.6.
Ros 17.40 0.500 2.00
Baxendell 9.56 0.546 1.93
Achong 3.82 0.650 1.88

169
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

4.5 Metodología del análisis nodal


A lo largo de este capítulo se han tratado temas relacionados al cálculo de caídas de presión tanto
en el yacimiento como en las tuberías de producción, para conocer el potencial de producción de
pozos petroleros, es necesario saber si las tuberías instaladas están trabajando en forma óptima.
Para conseguir este objetivo, debe usar las técnicas disponibles para el análisis del sistema
integral de producción, una de estas técnicas es el análisis nodal.

La razón por la cual el sistema integral de producción se somete a la técnica del análisis nodal, es
porque este involucra en sus cálculos todos los elementos del sistema y permite determinar el
efecto de su variación en la capacidad de transporte y tener una imagen en conjunto del
comportamiento del pozo para estimar su potencial. Desde la perspectiva de evaluación esto es
posible, sin embargo, en condiciones de diseño (sin restricciones económicas) es factible
dimensionar el SIP en su conjunto para obtener la capacidad de transporte requerida, o bien, la
capacidad de transporte idónea, teniendo como límite tan solo la capacidad de afluencia del
yacimiento.

El análisis nodal se puede aplicar a pozos fluyentes, inyectores o productores mediante un sistema
artificial de producción. Por otra parte, del análisis del comportamiento del sistema se pueden
identificar las posibles restricciones que modifiquen negativamente la capacidad de transporte del
mismo. Asimismo, es posible estudiar y comprender con relativa facilidad el comportamiento de
estranguladores, válvulas de seguridad, etc.

Las principales pérdidas de presión en el sistema integral de producción son las siguientes:
• Pérdidas de presión en el medio poroso. Representan ente el 10 y el 50% de las pérdidas
totales.
• Pérdidas de presión en la tubería vertical. Representan entre el 30 y el 80% de las pérdidas
totales.
• Pérdidas de presión en la línea de descarga. Representan entre el 5 y 30% de las pérdidas
totales.

El procedimiento que se debe seguir para realizar el análisis nodal a un sistema integral de
producción, requiere de la selección de un nodo y después suponer diferentes gastos de
producción y calcular la presión en este corriente abajo y corriente arriba, empezando con las
presiones constantes que son usualmente pws y psep , finalmente se grafican dos curvas, una de
inflow y otra de outflow (curvas de oferta y demanda respectivamente), y la intersección de estas
curvas es la solución del sistema.

En la Figura 4.26 se muestra un sistema de producción, en el que aparecen las posibles pérdidas
de presión desde el yacimiento hasta el separador. Este sistema es común en instalaciones
marinas, sin embargo, para efectos de estudio de este capítulo se utilizará un sistema de
producción como el mostrado en la Figura 4.27. Una vez delineado el procedimiento general de
manera sencilla, pueden enfrentarse con éxito problemas más complejos.

170
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Figura 4.26 Pérdidas de presión en un sistema completo de producción.

En general las expresiones para el cálculo de la presión en el nodo pueden expresarse de acuerdo
a las ecuaciones (4.150) y (4.151).

Inflow

pr − ∆p(componentes corriente abajo) = pnodo (4.150)

Outflow

psep + ∆p(componentes corriente arriba) = pnodo (4.151)

Los dos criterios que se deben


satisfacer en el análisis son:
• El gasto de entrada en el
nodo debe ser igual al gasto
de salida.
• Únicamente una presión
puede existir en el nodo
para un gasto determinado.

El gasto y la presión que satisfagan


los requerimientos previos pueden
ser leídos de la gráfica de presión
contra gasto en el nodo. La Figura 4.27 Pérdidas de presión y nodos principales del
intersección de las curvas ocurre en sistema.
el gasto o que satisface los criterios anteriores. Este gasto será la capacidad de producción del
sistema para un conjunto en particular de componentes. Para conocer el efecto en los cambios de
cualquier componente sobre la capacidad de producción del sistema, nuevas curvas deben ser
construidas.

171
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

4.5.1 Elección del nodo solución


La elección del nodo solución para pozos fluyentes o inyectores, depende del componente que se
desee evaluar; esto es, que su análisis muestre convenientemente la respuesta del sistema a las
condiciones dadas y a las que se establezcan como supuestas, de tal forma que pueda identificar
con certeza el problema y planear la solución técnica a la luz de una justificación económica, para
su posterior ejecución.

4.5.2 Fondo del pozo como nodo solución


Probablemente la posición más común como nodo solución es el fondo del pozo, el fondo del pozo
se toma a la profundidad media del intervalo productor o en su caso a la profundidad media del
intervalo disparado.

El sistema entero es dividido en dos componentes, el yacimiento es uno y el otro es el sistema


total de tuberías (T.P. y L.D.). Suponiendo que no existe ninguna restricción en las tuberías, las
únicas caídas de presión son las dadas a continuación:

pnodo = pwf (4.152)

Inflow

pr − ∆pyac = pnodo (4.153)

Outflow

psep + ∆pL.D + ∆pT.P. = pnodo (4.154)

Procedimiento de solución:
1. Partiendo de la presión media del yacimiento (teniendo en cuenta que pr es un valor
contante y no varía con el gasto), asumir varios gastos de producción y construir la curva
de IP o IPR.
2. A partir de la presión del separador (teniendo en cuenta que ps es un valor constante y no
varía con el gasto), asumir varios gastos de producción y obtener la presión en la cabeza
del pozo pwh necesaria para mover los fluidos a través de la línea de descarga (L.D.) al
separador. Utilizando una correlación de flujo multifásico en tubería horizontal o curvas de
gradiente de presión.
3. Usando los mismos gastos del punto 2, y las presiones en la cabeza del pozo, determinar
la presión de fondo fluyendo, pwf necesaria para mover los fluids a través de la tubería de
producción (T.P.) hasta la cabeza del pozo, utilizando una correlación de flujo multifásico
vertical o las curvas de gradiente de presión.
4. Graficar la curva de IP o IPR calculada en el primer paso (curva de inflow). Sobre la misma
grafica se grafican los gastos y presiones de fondo fluyendo obtenidas en el tercer paso
(curva de outflow).
La intersección de las curvas será como se muestra en la Figura 4.28, mostrará el gasto posible
para este sistema, este gasto no es el gasto máximo u optimo del sistema, pero es el gasto al cual

172
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

el pozo producirá para las condiciones


actuales del yacimiento y del sistema
total de tuberías que está instalado.

Para modificar este gasto, se requiere


cambiar el diámetro de la T.P. o de la L.D.
o el estrangulador, o la presión de
separación, o bien, a través de una
estimulación para modificar las
condiciones de la formación. La elección Figura 4.28 Comportamiento del sistema tomando
es este nodo como solución, obedece a como nodo solución el fondo del pozo.
que al aislarse el yacimiento del resto del sistema puede verse clara e inmediatamente el efecto
del abatimiento de la presión estática sobre el gasto como en la Figura 4.29. Así también puede
observarse, según la Figura 4.30, el efecto de realizar una estimulación o remover el daño.

Figura 4.29 Pronóstico de comportamiento Figura 4.30 Eficiencia de flujo y su


de afluencia para diferentes presiones relación con el ritmo de producción.
estáticas supuestas.

4.5.3 Cabeza del pozo como nodo solución


Elegir la cabeza del pozo como nodo solución es muy común. En estas condiciones el sistema se
divide en dos: el separador y la L.D. constituyen un componente y el yacimiento y la T.P., el otro.

La expresión para las curvas de Inflow y outflow son las siguientes

pnodo = pwh (4.155)

Inflow

pr − ∆pyac − ∆pT.P = pnodo (4.156)

Outflow

psep + ∆pL.D. = pnodo (4.157)

173
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Al graficar las presiones en la cabeza del pozo


contra gastos de aceite para los dos
componentes, se obtiene una gráfica como la
mostrada en la Figura 4.31.

Procedimiento de solución
1. Partiendo de la presión media del
yacimiento (tomando en cuenta que pr
es un valor constante y no varía con el
gasto), asumir varios gastos de
producción y calcular la presión de fondo Figura 4.31 Cabeza del pozo como nodo
solución.
fluyendo (pwf ) para dichos gastos
utilizxando la ecuación que mejor describa el comportamiento de flujo en el yacimiento.
2. Utilizando los mismos gastos y las presiones de fondo fluyendo (pwf ) obtenidas en el
primer paso, determinar las presiones en la cabeza del pozo (pwh ) necesarias para mover
los fluidos a través de la tubería de producción (T.P.) hasta la cabeza del pozo, utilizando
una correlación de flujo multifásico o curvas de gradiente de presión.
3. Partiendo de la presión del separador (teniendo en cuenta que ps es un valor constante y
no varía con el gasto), asumir varios gastos de producción y obtener la presión en la cabeza
del pozo (pwh ) necesaria par mover los fluidos a través de la línea de descarga (L.D.) hasta
el separador, utilizando una correlación de flujo multifásico en tubería horizontal o curvas
de gradiente de presión.
4. Graficar los gastos y las presiones en la cabeza del pozo, obtenidas en el paso 2 (curva de
inflow). Sobre esta misma gráfica, graficar los gastos y las presiones en la cabeza del pozo,
obtenidas en el paso 3 (curva de outflow). La intersección mostrará el gasto al cual el pozo
producirá para las condiciones dadas del yacimiento y del sistema total de tuberías que
está instalado.

Al considerar como nodo solución la cabeza del pozo, la línea de descarga se aísla y de esta forma
es fácil mostrar el efecto que el cambio de su diámetro tiene sobe el gasto. Esto se observa en la
Figura 4.32 y Figura 4.33.

Figura 4.32 Cabeza del pozo como nodo Figura 4.33 Influencia del cambio de
solución. diámetro de una línea de escurrimiento.

174
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

4.5.4 Separador como nodo solución


La elección del separador como nodo solución es apropiada cuando el gas a la descarga del mismo
debe tener una presión tal, que le permita incorporarse a un sistema de alta presión, o algún otro
sistema de recolección. Además, como la ps debe analizarse considerando el sistema en su
conjunto, pues no siempre una reducción de ella se traduce en un incremento del gasto. La razón
es que, a línea de escurrimiento, o la T.P., o el yacimiento en pozos de baja productividad pueden
construir la restricción principal al flujo.

Las expresiones para las curvas de Inflow y Outflow son las siguientes:

pnodo = psep (4.158)

Inflow

pr − Δpyac −ΔpT.P. − ΔpL.D. = pnodo (4.159)

Outflow

psep = pnodo (4.160)

Procedimiento de solución
1. Partiendo de la presión media del yacimiento, asumir varios gastos de producción y calcular
la presión de fondo fluyendo (pwf ) para dichos gastos utilizando la ecuación que mejor
describa el comportamiento de flujo en el yacimiento.
2. Utilizando los mismos gastos y las presiones de fondo fluyendo (pwf ) obtenidas en el primer
paso, determinar las presiones en la cabeza del pozo (pwh ) necesarias para mover los
fluidos a través de la tubería de producción hasta la cabeza del pozo, utilizando una
correlación de flujo multifásico o curvas de gradiente de presión.
3. Utilizando los mismos gastos y las presiones
en la cabeza del pozo (pwh ) obtenidas en el
paso anterior, se deerminan las presiones al
final de la línea de descarga (L.D.), las cuales
serán las presiones a la entrada del
separador, utilizando una correlación de flujo
multifásico en tuberías horizontales o curvas
de gradiente de presión.
4. Graficar los gastos y las presiones a la
entrada del separador, obtenidas en el paso
3 (curva inflow). Sobre esa misma gráfica,
graficar la presión del separador la cual es
independiente del gasto y depende de otros
factores (curva de outflow) como se muestra Figura 4.34 Efecto de la presión de
en la Figura 4.34. La intersección de las separación sobre el gasto máximo del
sistema.
curvas mostrará el gasto posible para este
sistema, este gasto no es el gasto máximo u óptimo del sistema, pero es el gasto al cual el

175
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

pozo producirá para las condiciones dadas del yacimiento y del sistema total de tuberías
que está instalado.

4.5.5 Yacimiento como nodo solución


La elección del yacimiento como nodo solución permite obtener el gasto posible a diferentes
presiones estáticas. Sin embargo, su utilidad es relativa si no se considera la variación de la RGA.
Su cambio provoca, a su vez, una nueva curva que representa al resto del sistema.

Las expresiones para las curvas de Inflow y Outflow son las siguientes:

pnodo = pyac (4.161)

Inflow

pyac = pnodo (4.162)

Outflow

psep + ΔpL.D. + ΔpT.P. + Δpyac = pnodo (4.163)

Procedimiento de solución:
5. A partir de ps , obtener la pwh , para diferentes
gastos supuestos.
6. Obtener la pwf para los gastos supuestos, y a
partir de los valores de pwh calculados, aplicar
el método seleccionado de flujo multifásico para
la T.P. o de curvas de gradiente de presión.
7. Determinar, con los valores de las pwf anteriores
las correspondientes pws para cada gasto
supuesto.
8. Graficar los valores de pws contra el gasto e Figura 4.35 Yacimiento como nodo
incluir ahí la línea que represente la pws actual. solución.
Como en la Figura 4.35.

4.5.6 Estrangulador como nodo solución


Muchos pozos fluyentes y con sistemas artificiales de producción son equipados con
estranguladores con el propósito de controlar las presiones y la producción dependiendo de la
etapa en que se encuentre el pozo. Los estranguladores son colocados comúnmente en la cabeza
del pozo, pero en algunos casos son colocados cerca del separador, la localización de los
estranguladores puede tener gran efecto sobre la capacidad productiva de los pozos,
especialmente si los pozos tienen una línea de descarga (L.D.) muy extensa.

176
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

Las expresiones para las curvas de inflow y outflow son las siguientes:

Pnodo = Pwh (4.164)

Inflow

Pr − ∆Pyac − ∆PT.P = Pnodo (4.165)

Outflow

psep + ΔpL.D. + ΔpT.P. + Δpyac = pnodo (4.166)

Para un estrangulador localizado en la cabeza del pozo en el cual exista flujo crítico se obtiene las
siguientes relaciones para encontrar la presión del nodo.
a) Relación de presiones Pd /Pe = 0.5
(
2(Psep − ∆PL.D. ) = Pnodo
4.167)
Para un estrangulador localizado en el separador, la presión a la entrada del estrangulador, es la
presión al final de la línea de descarga (L.D.) por lo tanto se obtiene las siguientes expresiones:
b) Relación de presiones Pd /Pe = 0.5
(
2Psep − ∆PL.D. = Pnodo
4.168)
La elección del nodo dos como nodo de solución, responde a lo indicado en el apartado de la
cabeza del pozo como nodo de solución. En el procedimiento de solución se agrega un paso más,
en el que se incluye el efecto del cambio del diámetro del estrangulador.

Procedimiento de solución
1) Partiendo de la presión media del yacimiento (recordando que la Pr es n valor constante,
no varía con el gasto), asumir varios gastos de producción y calcular la presión de fondo
fluyendo (Pwf ) para dichos gastos de producción, utilizando la ecuación que mejor describa
el comportamiento de flujo en el yacimiento.
2) Utilizando los mismos gatos y las presiones de fondo fluyendo (Pwf ) obtenidas en el paso
1, se determinan las presiones en la cabeza del pozo (Pwh ) necesarias para mover los
fluidos a través de la tubería de producción (T.P.) hasta la cabeza del pozo, utilizando
correlaciones de flujo multifásico para tubería vertical.
3) Partiendo de la presión del separador (dado que Psep es constante, no varía con el gasto),
asumir varios gastos de producción y dependiendo del lugar donde se encuentre el
estrangulador y del tipo de fluido transportado (flujo de agua o multifásico) se elige alguna
de las ecuaciones anterior y, se obtiene la presión en la cabeza del pozo (Pwh = Pnodo )
necearía para mover los fluidos a través del estrangulador y de la línea de descarga (L.D.)
hasta el separador, utilizando una correlación de flujo multifásico en tubería horizontal.

177
CAPÍTULO 4 POTENCIAL DE PRODUCCIÓN DE POZOS PETROLEROS

4) Graficar los gastos y las presiones en la cabeza del pozo (Pwh = Pnodo ) obtenidas en el
paso 2 (curva de inflow). Sobre esa misma gráfica, se grafican los gastos y las presiones

5) en la cabeza del pozo (Pwh = Pnodo )


obtenidas en el paso 3 (curva outflow).
La intersección de las curvas mostrará
el gasto posible para este sistema, este
gasto no es el gasto máximo u óptimo
del sistema, pero es el gasto al cual el
pozo producirá a las condiciones dadas
del yacimiento y del sistema total de
tuberías al que está instalado.
Figura 4.36 Efecto del estrangulador en la
En la Figura 4.36 se muestra el efecto del presión en la boca del pozo.
estrangulador sobre el gasto y la presión en la
boca del pozo.

178
Capítulo 5
APLICACIÓN DE LAS HOJAS
DE CÁLCULO ELECTRÓNICAS A
LA INGENIERÍA PETROLERA
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

CAPÍTULO 5 Aplicación de las hojas de cálculo


CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE
electrónicas a la ingeniería petrolera

CÁLCULO ELECTRÓNICAS A LA INGENIERÍA


PETROLERA
5.1 Introducción
En este capítulo se muestra la aplicación de las hojas de cálculo en la ingeniería petrolera, los
ejemplos ilustran de manera simple, sólo una de las múltiples aplicaciones que se pueden
desarrollar en las hojas de cálculo. Se muestra el desarrollo de una herramienta para realizar
pronósticos de producción con curvas de declinación, balance de materia y simulación numérica a
partir de lo expuesto en el capítulo 3, también se muestra el desarrollo de una herramienta para
realizar análisis nodal a partir de lo expuesto en el capítulo 4. Estos métodos pueden ser evaluados
mediante una nueva pestaña llamada Ingeniería Petrolera en la cinta de opciones de Excel, cuyo
desarrollo detallado se describe a lo largo de este capítulo.

5.2 Descripción de la pestaña Ingeniería Petrolera


La funcionalidad de las hojas de cálculo va más allá de solo disponer de las herramientas
precargadas en ellas, adicionalmente, el usuario se pueden desarrollar funciones y procedimientos
que realicen tareas específicas dependiendo de las áreas en que se desempeñen.

Una nueva pestaña llamada Ingeniería Petrolera se desarrolla como parte de este trabajo, la
pestaña se muestra en la Figura 5.1.

Figura 5.1 Pestaña personalizada Ingeniería petrolera.

En la figura anterior se pueden distinguir cuatro grupos de botones, el primero corresponde a las
curvas de declinación, el segundo a balance de materia y el tercer grupo a simulación numérica
de yacimientos, estos tres grupos corresponden a la elaboración de pronósticos de producción. El
cuarto grupo corresponde al análisis nodal.

La pestaña está desarrollada en Excel VBA mediante el uso de Macros o Subrutinas y la


implementación de objetos UserForm para la comunicación con el usuario. A lo largo de este
capítulo se describe el uso de todas las opciones disponibles en la pestaña y en los apéndices A,

180
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

B, C y D se muestra el código completo de cada subrutina y la descripción de cada UserForm


utilizado a manera de apoyo para quien desarrolla herramientas en Excel VBA

5.3 Curvas de declinación


Las curvas de declinación son métodos para estimar el comportamiento futuro de la producción de
un yacimiento, a continuación, se presentan los ejemplos de aplicación para el caso de la
declinación exponencial, armónica a hiperbólica.

La realización de un pronóstico mediante curvas de declinación se lleva a cabo con los botones
del grupo Curvas de declinación de la pestaña Ingeniería petrolera mostrado en la Figura 5.2
el cual se describe a continuación:
1. Botón Identificar modelo: Muestra el formulario
FIDENDEC de la Figura 5.3. El apartado Datos
permite pedir al usuario datos de tiempo y gasto que
son la base para las curvas de declinación, el apartado
Seleccionar gráfica permite cambiar entre los gráficos Figura 5.2 Grupo Curvas de
característicos de las curvas de declinación, las declinación de la pestaña
opciones disponibles son las mostradas en la Figura Ingeniería petrolera.
3.4 y Figura 3.5.

Figura 5.3 Formulario FIDENDEC para identificar el modelo de declinación.

En la parte inferior izquierda se encuentra el apartado Realizar pronóstico, el cual permite calcular
los parámetros Di, n y qi para los datos seleccionados e insertar los parámetros para realizar el
pronóstico al presionar el botón Aceptar.

181
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Los resultados se muestran en una hoja de Excel como en la Figura 5.4 donde se colocan los
datos de entrada, los gastos calculados, producción acumulada, los parámetros importantes del
modelo y dos gráficas, una de gasto contra tiempo y la otra de producción acumulada contra
tiempo.

Figura 5.4 Hoja de resultados para los pronósticos de producción mediante curvas de
declinación.

2. Botón Exponencial: Muestra el formulario de la Figura 5.5 para ingresar los datos de
tiempo y gasto, posteriormente calcula los parámetros de la declinación con el modelo
Exponencial y pregunta al usuario los parámetros para realizar el pronóstico al presionar
Aceptar. Finalmente inserta los resultados como en la Figura 5.4.

Figura 5.5 Formulario FIDENDEC para identificar el modelo de declinación.

182
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

3. Botón Armónica: Similar al botón Exponencial, pero para el modelo de declinación


armónica.
4. Botón Hiperbólica: Similar al botón Exponencial, pero para el modelo de declinación
hiperbólica.
5. Botón Insertar gráfica: Permite insertar la gráfica seleccionada de alguna de las opciones
de la Figura 5.6. Las gráficas son similares a la Figura 5.7.

Figura 5.6 Opciones de gráficas Figura 5.7 Gráfica de gasto vs tiempo en una
disponibles en curvas de declinación. declinación exponencial.

Adicionalmente pueden utilizarse las funciones qExponencial, qArmonica y qHiperbolica para


calcular el gasto ingresando los parámetros del modelo y calcular la producción acumulada con
las funciones NpExponencial, NpArmonica y NpHiperbolica disponibles en la sección de
funciones definidas por el usuario.

El desarrollo del formulario FIDENDEC, y las subrutinas adicionales asociadas a la programación


del grupo curvas de declinación se muestran en el apéndice A.

5.3.1 Ejemplos de aplicación de curvas de declinación


A continuación, se muestran ejemplos de aplicación de las curvas de declinación mediante el uso
del grupo Curvas de declinación de la pestaña Ingeniería petrolera.

Ejemplo 1 Declinación exponencial


Para los datos mostrados en la Tabla 5.1 identificar el modelo de declinación adecuado y
determinar los parámetros del modelo para hacer una proyección de la producción hasta alcanzar
una producción marginal de 25 BPD.

1. Presionar el botón identificar modelo y seleccionar los datos correspondientes al tiempo y


gasto, en la ventana que aparece seleccionar graficar log(q) vs tiempo como en la Figura
5.8 se puede ver que se trata de una declinación exponencial.
2. Una vez identificado el modelo, introducir los parámetros para calcular el pronóstico, estos
son finalizar el pronóstico por Gasto y el incremento de tiempo deseado, y presionar
Aceptar.

183
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Tabla 5.1 Datos de producción para el ejemplo 1.


Tiempo Tiempo Tiempo
Gasto (BPD) Gasto (BPD) Gasto (BPD)
(meses) (meses) (meses)
1 904.84 9 406.57 17 182.68
2 818.73 10 367.88 18 165.30
3 740.82 11 332.87 19 149.57
4 670.32 12 301.19 20 135.34
5 606.53 13 272.53 21 122.46
6 548.81 14 246.60 22 110.80
7 496.59 15 223.13 23 100.26
8 449.33 16 201.90 24 90.72

Figura 5.8 Identificación de modelo para los datos del ejemplo 1.

3. Finalmente, los resultados se mostrarán en una hoja


similar a la mostrada en la Figura 5.4. Los
parámetros del modelo se muestran en la Figura
5.9, y el comportamiento de la producción en la
Figura 5.10.
4. Finalmente la formula puede aplicarse para los
tiempos restantes. El comportamiento de
producción se muestra en la Figura 5.10.
Figura 5.9 Parámetros del
modelo para el ejemplo 1.

184
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.10 Predicción de la producción para el ejemplo 1.

Ejemplo 2 Declinación armónica


Para los datos mostrados en la Tabla 5.2 identificar el modelo de declinación adecuado y
determinar los parámetros del modelo para hacer una proyección de la producción hasta el quinto
año de producción.
Tabla 5.2 Datos de producción para el ejemplo 2.

Tiempo (años) Gasto (BPD) Tiempo (años) Gasto (BPD) Tiempo (a) Gasto (BPD)
0 10 1.4 6.53 2.7 4.94
0.2 9.29 1.5 6.37 2.8 4.84
0.3 8.98 1.6 6.22 2.9 4.76
0.4 8.68 1.7 6.08 3.0 4.67
0.5 8.4 1.8 5.94 3.1 4.59
0.6 8.14 1.9 5.81 3.2 4.51
0.7 7.9 2.0 5.68 3.3 4.44
0.8 7.67 2.1 5.56 3.4 4.36
0.9 7.45 2.2 5.45 3.5 4.29
1.0 7.25 2.3 5.34 3.6 4.22
1.1 7.05 2.4 5.23 3.7 4.16
1.2 6.87 2.5 5.13 3.8 4.09
1.3 6.69 2.6 5.03 3.9 4.03

1. Presionar el botón identificar modelo y seleccionar los datos correspondientes al tiempo y


gasto, seleccionar graficar el log(q) vs producción acumulada como en la Figura 5.11 se
puede ver que se trata de una declinación armónica.
2. Una vez identificado el modelo, introducir los parámetros para calcular el pronóstico, estos
son finalizar el pronóstico por Tiempo y el incremento de tiempo deseado, y presionar
Aceptar.
3. Los parámetros del modelo se muestran en la Figura 5.12, y el comportamiento de la
producción en la Figura 5.13.

185
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.11 Identificación de modelo para los datos del ejemplo 2.

Figura 5.12 Parámetros calculados para


una declinación armónica del ejemplo 2.

Figura 5.13 Predicción de la producción para el ejemplo 2.

186
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Ejemplo 3 Declinación hiperbólica


Para los datos mostrados en la Tabla 5.3 identificar el modelo de declinación adecuado y
determinar los parámetros del modelo para hacer una proyección de la producción hasta el quinto
año de producción.

Tabla 5.3 Datos de producción para el ejemplo 3.

Tiempo (años) Gasto (BPD) Tiempo (años) Gasto (BPD) Tiempo (a) Gasto (BPD)
0 9.63 1.5 6.1 2.9 4.25
0.2 9.28 1.6 5.93 3.0 4.15
0.3 8.95 1.7 5.77 3.1 4.06
0.4 8.64 1.8 5.61 3.2 3.97
0.5 8.35 1.9 5.46 3.3 3.88
0.6 8.07 2.0 5.32 3.4 3.8
0.7 7.81 2.1 5.18 3.5 3.71
0.8 7.55 2.2 5.05 3.6 3.64
0.9 7.32 2.3 4.92 3.7 3.56
1.0 7.09 2.4 4.8 3.8 3.49
1.1 6.87 2.5 4.68 3.9 3.41
1.2 6.67 2.6 4.57 4.0 3.34
1.3 6.47 2.7 4.46
1.4 6.28 2.8 4.35

1. Presionar el botón identificar modelo y seleccionar los datos correspondientes al tiempo y


gasto, en la ventana que aparece seleccionar graficar –(dq/qdt) vs gasto como en la Figura
5.14 se puede ver que se trata de una declinación hiperbólica.

Figura 5.14 Identificación de modelo para los datos del ejemplo 3.

187
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

2. Una vez identificado el modelo, introducir


los parámetros para calcular el pronóstico,
estos son finalizar el pronóstico por Tiempo
y el incremento de tiempo deseado, y
presionar Aceptar.
3. Los parámetros del modelo se muestran en
la Figura 5.15, y el comportamiento de la
producción en la Figura 5.16.

Figura 5.15 Parámetros calculados para


una declinación armónica del ejemplo 3.

Figura 5.16 Predicción de la producción para el ejemplo 3.

5.4 Balance de materia


Unas de las técnicas de aplicación de la Ecuación de Balance
de Materia son las propuestas por Tracy[53], Muskat[41] y
Tarner[52]. Estos son aplicados mediante el grupo Balance de
materia de la pestaña Ingeniería petrolera la cual se muestra
en la Figura 5.17 y su descripción se muestra a continuación.
Figura 5.17 Grupo Balance de
1. Botón Método de Tracy: Muestra el formulario FEBM materia de la pestaña Ingeniería
para introducir los datos necesarios para la realización petrolera.
del pronóstico como en la Figura 5.18. Al presionar aceptar se llama a la subrutina
EBMTracy y realiza el pronóstico de producción.
Finalmente muestra los resultados en una nueva hoja como en la Figura 5.19.

2. Botón Método de Muskat: Muestra el formulario FEBM para introducir los datos necesarios
para la realización del pronóstico como en la Figura 5.18. Al presionar aceptar se llama a
la subrutina EBMMuskat y realiza el pronóstico de producción.
Finalmente muestra los resultados en una nueva hoja como en la Figura 5.19.

188
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

3. Botón Método de Tarner: Muestra el formulario


FEBM para introducir los datos necesarios para
la realización del pronóstico como en la Figura
5.18. Al presionar aceptar se llama a la subrutina
EBMTarner y realiza el pronóstico de
producción.
Finalmente muestra los resultados en una nueva
hoja como en la Figura 5.19.

El desarrollo del formulario FEBM, y las subrutinas


asociadas a la programación del grupo EBM se
muestran en el apéndice B.

Figura 5.18 Formulario EBM con los


datos necesarios para realizar
pronóstico.

Figura 5.19 Resultados del pronóstico de producción con la EBM.

189
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

5.4.1 Ejemplos de aplicación de aplicación de la EBM


Para la aplicación de la EBM se resuelve el siguiente ejemplo y se utilizan las rutinas programadas
en los botones del grupo Balance de materia

Problema: Calcular la recuperación de aceite en función de la presión usando el método de Tracy,


Muskat y Tarner. Los datos son los siguientes:
Presión inicial = 2500 lpca
Temperatura inicial = 180 °F
Aceite original en sitio = 56 x 106 bl@ce.
Saturación de agua inicial = 0.20
Los datos PVT se muestran en la y los de relación de permeabilidades relativas en la
Tabla 5.4 Propiedades de los fluidos para el ejemplo de pronóstico de producción
con la Ecuación de Balance de Materia.
Presión Bo Rs Bg
μo/ μg
(lpca) (bl@cy/bl@ce) (pies3@ce/bl@ce) (bl@cy/pies3@ce)
2500 1.498 721 0.001048 28.7058824
2300 1.463 669 0.001155 32.4698795
2100 1.429 617 0.001280 36.7283951
1900 1.395 565 0.001440 41.6455696
1700 1.361 513 0.001634 47.1428571
1500 1.327 461 0.001884 53.4666667
1300 1.292 409 0.002206 60.7534247
1100 1.258 357 0.002654 69.0845070
900 1.224 305 0.003300 78.6231884
700 1.190 253 0.004315 89.4776119

Tabla 5.5 Relación de permeabilidades relativas.

Sg krg/kro Sg krg/kro
0.0750 0.0010 0.2792 0.1604
0.0800 0.0015 0.3076 0.2244
0.0894 0.0035 0.3527 0.3848
0.0938 0.0058 0.4050 0.7178
0.1011 0.0102 0.4552 1.2761
0.1098 0.0151 0.4945 2.0367
0.1200 0.0192 0.5447 3.4931
0.1353 0.0253 0.5999 7.0011
0.1636 0.0363 0.6465 13.2157
0.1942 0.0548 0.6734 21.8649
0.2392 0.0966 0.6967 38.4656
0.2451 0.1042
Ejemplo 1 Método de Tracy
1. Seleccionar el botón Método de Tracy y seleccionar los datos como en la Figura 5.20.

190
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.20 Ingreso de datos para pronóstico de producción con la EBM

2. Presionar aceptar y colocar el nombre de la hoja de resultados, los resultados se mostrarán


en una nueva hoja como lo muestra la Figura 5.21.

Figura 5.21 Resultados del pronóstico de producción con la EBM método de Tracy.
Ejemplo 2 Método de Muskat
1. Seleccionar el botón Método de Muskat y seleccionar los datos como en la Figura 5.20.
2. Presionar aceptar y colocar el nombre de la hoja de resultados, los resultados se mostrarán
en una nueva hoja como lo muestra la Figura 5.22.

191
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.22 Resultados del pronóstico de producción con la EBM método de Muskat.
Ejemplo 3 Método de Tarner
3. Seleccionar el botón Método de Tarner y seleccionar los datos como en la Figura 5.20.
4. Presionar aceptar y colocar el nombre de la hoja de resultados, los resultados se mostrarán
en una nueva hoja como lo muestra la Figura 5.23

Figura 5.23 Resultados del pronóstico de producción con la EBM método de Tarner.

192
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

5.5 Simulación numérica


Se presentará el problema que describe el flujo bidireccional, monofásico, en régimen transitorio
(variable), de un fluido ligeramente compresible y de viscosidad constante, que fluye en un medio
poroso homogéneo de espesor constante y anisótropo y en dónde no existe flujo en las fronteras.

La solución se realiza mediante la programación en esquema implícito de la ecuación (3.182) para


dos dimensiones, mediante el grupo Simulación numérica de yacimientos de la pestaña
Ingeniería petrolera de la Figura 5.24 que se describe a continuación:

Figura 5.24 Grupo Simulación numérica de yacimientos de la pestaña Ingeniería petrolera.

1. Botón Propiedades del yacimiento: Muestra el


formulario FPROPYAC de la Figura 5.25 donde se
insertan las características principales del
yacimiento.
2. Botón Propiedades del fluido: Muestra el
formulario FPROPFLU de la Figura 5.27 donde se
insertan las propiedades del fluido.
3. Botón Crear modelo: Crea en una nueva hoja una
representación del yacimiento apoyándose de las
celdas disponibles como lo muestra la Figura 5.26.

Figura 5.25 Formulario


FPROPYAC para la simulación
numérica de yacimientos.

Figura 5.27 Formulario


FPROPFLUI para la simulación
numérica de yacimientos.

Figura 5.26 Representación esquemática de un


yacimiento de 5 celdas en una dimensión.

193
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

4. Botón Insertar pozos: Muestra el menú


desplegable de la Figura 5.28 que permite
colocar pozos productores e inyectores sobre el
yacimiento creado en el paso 3 mediante el
formulario FPOZO de la Figura 5.29 donde se
pregunta al usuario la posición del pozo y el
gasto o presión de este.
Figura 5.28 Menú desplegable
insertar pozos.

5. Botón Condiciones iniciales: Muestra el


formulario FCONDINI de la Figura 5.30 donde
se insertan las condiciones iniciales de presión y
la presión de saturación para que se realice la
simulación hasta alcanzar la presión de
saturación, ya que por debajo de esta el modelo
Figura 5.29 Formulario FPOZO para
no aplica, adicionalmente pregunta por un insertar pozos en el yacimiento
incremento de tiempo que será el paso en creado.
tiempo para la solución.

6. Botón Simular: Resuelve el sistema creado


anteriormente y muestra en una nueva hoja los
resultados de presión en cada celda.

Figura 5.30 Formulario FCONDINI


para insertar las condiciones iniciales
en la simulación de yacimientos.
7. Botón Gráficas: Permite insertar dos tipos de
gráfica de acuerdo a las opciones de la Figura
5.31, la primera es un mapa de distribución de
presión y la segunda gráfica es una
representación en 3D de la distribución de
presión similares a las mostradas en la Figura
5.32.

Figura 5.31 Opciones de gráficas


para simulación numérica de
yacimientos.

194
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.32 Graficas resultado de simulación, mapa (izquierda) y superficie (derecha).

El desarrollo de los formularios y subrutinas asociadas a la programación del grupo Simulación


numérica de yacimientos se muestran en el apéndice C.

5.5.1 Ejemplo de aplicación de la simulación numérica de yacimientos:


Para realizar un pronóstico mediante la Simulación numérica de yacimientos, se presentan tres
ejemplos, el primero para un yacimiento en 1D con un pozo productor, el segundo para un
yacimiento en 2D con un pozo productor en el centro del yacimiento y el tercero para un yacimiento
2D con cuatro pozos productores en las esquinas.

Ejemplo 1 Comportamiento de un pozo productor en 1D


Los datos disponibles son los siguientes:
• Celdas en X = 1
• Celdas en Y = 5
• Tamaño de celda en X = 1000 pies
• Tamaño de celda en Y = 1000 pies
• Espesor = 75 pies
• Permeabilidad en X = 15 mD
• Permeabilidad en Y = 15 mD
• Compresibilidad de la formación = 0 lpc-1
• Porosidad = 0.18
• Viscosidad del fluido = 10 cp
• Compresibilidad del fluido = 3.5x10-6 lpc-1
• Factor de volumen = 1 bl@cy/bl@ce
• Presión de saturación = 4000 lpc
• Presión inicial = 6000 lpc
• Incremento en tiempo = 15 días

El yacimiento cuenta con un pozo productor de 150 BPD en la cuarta celda como lo muestra la
Figura 5.33.

195
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Proceso de solución:
1. Insertar los datos del yacimiento presionando
el botón Propiedades del yacimiento y llenando
los datos requeridos por el formulario de la
Figura 5.25.
2. Presionar el botón Propiedades del fluido e
Figura 5.33 Representación del
insertar los datos necesarios en el formulario
yacimiento en una dimensión.
de la Figura 5.27.
3. Presionar el botón Crear modelo, se creará un modelo similar al mostrado en la Figura
5.26.
4. Elegir Insertar pozo productor e insertar el gasto del pozo y la ubicación como en la Figura
5.33.
5. Presionar el botón Condiciones iniciales y llenar los campos requeridos.
6. Presionar el botón Simular y escribir al nombre de la hoja donde se insertarán los
resultados, la tabla con los resultados finales se muestra en la Figura 5.34 puede
observarse que la presión más baja corresponde a la cuarta celda, donde se encuentra el
pozo productor y se ha alcanzado la presión de burbuja.

Figura 5.34 Resultados para el ejemplo 1 de simulación numérica.

196
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Ejemplo 2 Comportamiento de un pozo productor en 2D


Los datos disponibles son los siguientes:
• Celdas en X = 15
• Celdas en Y = 15
• Tamaño de celda en X = 100 pies
• Tamaño de celda en Y = 100 pies
• Espesor = 550 pies
• Permeabilidad en X = 2 mD
• Permeabilidad en Y = 2 mD
• Compresibilidad de la formación = 1x10-6 lpc-1
• Porosidad = 0.15
• Viscosidad del fluido = 0.5 cp
• Compresibilidad del fluido = 6.9x10-6 lpc-1
• Factor de volumen = 1.1 bl@cy/bl@ce
• Presión de saturación = 2000 lpc
• Presión inicial = 3000 lpc
• Incremento en tiempo = 10 días

El yacimiento cuenta con un pozo productor de 200 BPD en la celda 61 como lo muestra la Figura
5.35.

Figura 5.35 Representación del yacimiento en dos dimensiones con un pozo productor.

1. El proceso de solución es similar al del ejemplo 1, realizando los pasos mencionados en el


ejemplo 1 para los datos del presente ejemplo, los resultados finales de distribución de
presión se muestran en la Figura 5.36.

197
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.36 Distribución de presión al alcanzarse la presión de burbuja para el ejemplo 2 de


simulación numérica.

2. El mapa de distribución de presión se presenta en la Figura 5.37, mientras la superficie de


distribución de presión se muestra en la Figura 5.38.

Figura 5.37 Mapa de distribución de presión al Figura 5.38 Superficie de distribución de


alcanzarse la presión de burbuja para el presión al alcanzarse la presión de burbuja
ejemplo 2 de simulación numérica. para el ejemplo 2 de simulación numérica.

198
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Ejemplo 3 Comportamiento de cuatro pozos productores en 2D


Los datos disponibles son los siguientes:
• Celdas en X = 15
• Celdas en Y = 15
• Tamaño de celda en X = 100 pies
• Tamaño de celda en Y = 100 pies
• Espesor = 550 pies
• Permeabilidad en X = 2 mD
• Permeabilidad en Y = 2 mD
• Compresibilidad de la formación = 1x10-6 lpc-1
• Porosidad = 0.15
• Viscosidad del fluido = 0.5 cp
• Compresibilidad del fluido = 6.9x10-6 lpc-1
• Factor de volumen = 1.1 bl@cy/bl@ce
• Presión de saturación = 2000 lpc
• Presión inicial = 3000 lpc
• Incremento en tiempo = 10 días
El yacimiento cuenta con cuatro pozos productores en las esquinas, en la celda 1 el gasto es de
100 BPD; en la celda 11 de 150 BPD; en la celda 121 de 200 BPD y en la celda 111 de 250 BPD
como lo muestra la Figura 5.35.

Figura 5.39 Representación del yacimiento en dos dimensiones con un pozo productor.

3. El proceso de solución es similar al del ejemplo 1, realizando los pasos mencionados en el


ejemplo 1 para los datos del presente ejemplo, los resultados finales de distribución de
presión se muestran en la Figura 5.40.

199
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.40 Distribución de presión al alcanzarse la presión de burbuja para el ejemplo 3 de


simulación numérica.

4. El mapa de distribución de presión se presenta en la Figura 5.41, mientras la superficie de


distribución de presión se muestra en la Figura 5.42.

Figura 5.41 Mapa de distribución de presión Figura 5.42 Superficie de distribución de


al alcanzarse la presión de burbuja para el presión al alcanzarse la presión de burbuja
ejemplo 3 de simulación numérica. para el ejemplo 3 de simulación numérica.

200
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Potencial de producción de pozos petroleros


En el capítulo 4 se muestra el análisis del potencial de producción de los pozos petroleros y
consiste en encontrar las mejores condiciones posibles que pueden ser impuestas a un sistema
integral de producción durante la extracción de hidrocarburos.

Para ilustrar la metodología del análisis nodal se


resuelve el sistema de producción simple de la Figura
5.43 que consta de cuatro nodos, el separador, la
cabeza del pozo, el fondo del pozo y el yacimiento, en
esta figura también se muestran las caídas de presión
existentes entre cada uno de los nodos.

El proceso general de solución consiste en seleccionar


un nodo y después calcular las caídas de presión
Figura 5.43 Nodos en un sistema
corriente abajo y corriente arriba (inflow y outflow) para simple de producción.
diferentes gastos supuestos y encontrar la intersección
de las curvas de inflow y outflow; que representa la
presión en el nodo elegido y el gasto que aportara el
sistema para un conjunto de elementos en particular.

La solución de este sistema se realiza mediante el grupo


“Análisis nodal” de la pestaña Ingeniería petrolera Figura 5.44 Grupo Análisis nodal de
mostrado en la Figura 5.44 el cual contiene tres la pestaña Ingeniería petrolera.
botones.
1. Botón Datos análisis nodal: Al hacer clic en el botón se muestra el formulario
FDATOSNODAL que se presenta en la figura Figura 5.45
a. Formulario FDATOSNODAL: El formulario contiene los datos necesarios para
realizar un análisis nodal al sistema de producción simple de la figura Figura 5.43.
Cuenta con dos botones “Aceptar” y “Cancelar”, al presionar “Cancelar” se cierra el
formulario si realizar alguna instrucción; Al presionar Aceptar, se verifican los datos
de entrada y si son correctos, se almacenan para posteriormente realizar el análisis.

Figura 5.45 Formulario FDATOSNODAL mostrado al hacer clic en el botón Datos análisis
nodal de la pestaña Ingeniería petrolera.

201
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

2. Botón Nodo solución: Este botón corresponde a un


menú desplegable de la Figura 5.46 que muestra
las opciones de nodo solución (separador, cabeza,
fondo y yacimiento). Al hacer clic en alguna de las
cuatro opciones se almacena una variable que
indica qué nodo se seleccionó para la posterior
solución del sistema.
3. Botón Resolver Nodal: Llama a la subrutina de
solución CALNODAL que calcula las presiones
cuesta arriba y cuesta abajo para diferentes gastos Figura 5.46 Opciones del botón
desplegable Nodo solución.
de producción para construir las curvas de inflow y
outflow con las siguientes consideraciones:
a. La caída de presión entre los nodos 1 y 2 de la Figura 5.43 se calcula mediante la
correlación de Beggs y Brill[8], con un ángulo de inclinación de 0° (tubería horizontal).
b. La caída de presión entre los nodos 2 y 3 de la Figura 5.43 se calcula mediante la
correlación de Beggs y Brill[8], con un ángulo de inclinación de 90° (tubería vertical).
c. La caída de presión entre los nodos 3 y 4 de la Figura 5.43 se calcula mediante el
método de Vogel[55].
d. Se considera perfil lineal de
temperatura.
Finalmente se grafican las dos curvas y
se obtiene como resultado una gráfica
similar a la de la Figura 5.47.

El desarrollo del formulario FDATOSNODAL,


la subrutina CALNODAL y las subrutinas
adicionales asociadas a la solución del sistema
de producción simple se muestran en el Figura 5.47 Gráficas de inflow y outflow para
apéndice D. un sistema de producción simple eligiendo
como nodo solución el fondo del pozo.
5.5.2 Ejemplos de aplicación de análisis nodal
A continuación, se muestran cuatro ejemplos uno por cada nodo de la Figura 5.43. en el que se
utilizan los siguientes datos:
• Presión en el separador de 100 lpca.
• Línea de descarga de 2’’ de longitud y 3000 pies de longitud.
• Tubería de producción de 1.995” y 5000 pies de longitud
• Presión de fondo estática de 2200 lpca
• Relación gas aceite de 400 pies cúbicos por barril.
• Gasto de aceite de 200 BPD.
• Gasto de agua de 0 BPD
• Presión de fondo fluyendo de 2000 lpca.
• Temperatura de yacimiento 140°F.
• Temperatura de superficie 60°F

202
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

• Densidad del aceite 35°API.


• Densidad relativa del gas 0.65.
• Densidad relativa del agua 1.05.
El sistema a resolver se muestra en Figura 5.48.

Ejemplo 1 Separador como nodo solución


1. Seleccionar el botón datos análisis nodal e
introducir los datos del ejemplo como en la
Figura 5.48 y presionar aceptar. Figura 5.48 Datos para ejemplos de
análisis nodal.

Figura 5.49 Ingreso de datos para ejemplo de análisis nodal.

2. Seleccionar el botón nodo solución y


después elegir el separador como nodo
solución, se mostrará un mensaje
informando el nodo que se seleccionó
como en la
3. Seleccionar el botón resolver nodal y se Figura 5.50 Mensaje de confirmación.
mostrará la solución del problema para ese conjunto de condiciones dadas. La Figura 5.51
muestra el resultado, donde en el separador habrá 100 lpca (constante) con 652 BPD.

Figura 5.51 Gráfica de resultado del análisis nodal eligiendo el separador como nodo solución.

203
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

La elección del separador como nodo solución hace más fácil visualizar el efecto de la presión de
separación en el gasto, si se varía la presión de separación en 150 y 50 psia, el efecto puede
visualizarse en la Figura 5.51.

Figura 5.52 Efecto de la presión de separación en el gasto obtenido.

Ejemplo 2 Cabeza de pozo como nodo solución


1. Seleccionar el botón datos análisis nodal e introducir los datos del ejemplo como en la
Figura 5.48 y presionar aceptar.
2. Seleccionar el botón nodo solución y después elegir la cabeza del pozo como nodo
solución, se mostrará un mensaje informando el nodo que se seleccionó similar a la Figura
5.50.
3. Seleccionar el botón resolver nodal y se mostrará la solución del problema para ese
conjunto de condiciones dadas. La Figura 5.53 muestra el resultado, donde en la cabeza
del pozo habrá 250 lpca con 633 BPD.

Figura 5.53 Gráfica de resultado del análisis nodal eligiendo la cabeza de pozo como nodo
solución.

Al elegir la cabeza de pozo como nodo solución la línea de descarga es aislada y es fácil ver el
efecto de cambiar el diámetro de esta. La Figura 5.54 muestra el efecto de cambiar el diámetro de
la línea de descarga a 3” donde el gasto obtenido es 764 BPD comparado con la línea de descarga
de 2” donde se obtenía un gasto de 633 BPD.

204
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Figura 5.54 Efecto del diámetro de la línea de descarga en el gasto obtenido.


Ahora si se toma en cuenta el cambio del diámetro de la tubería de producción de 1.995” a 2.441”
puede observarse que el gasto cambia de 633 BPD a 650 BPD como lo muestra la Figura 5.55.

Figura 5.55 Efecto del diámetro de la tubería de producción en el gasto obtenido.


Ejemplo 3 Fondo de pozo como nodo solución
1. Presionar Datos análisis nodal e introducir los datos del ejemplo como en la Figura 5.48.
2. Seleccionar el botón nodo solución y elegir el fondo de pozo como nodo solución.
3. Presionar resolver nodal, se mostrará la solución del problema para ese conjunto de
condiciones. La Figura 5.56 muestra el resultado, donde en el fondo del pozo habrá 1494
lpca con 633 BPD.

Figura 5.56 Gráfica de resultado del análisis nodal eligiendo el fondo de pozo como nodo
solución.

205
CAPÍTULO 5 APLICACIÓN DE LAS HOJAS DE CÁLCULO ELECTRÓNICAS A LA INGENIERÍA PETROLERA

Ejemplo 4 Yacimiento como nodo solución


1. Seleccionar el botón datos análisis nodal e introducir los datos del ejemplo como en la
Figura 5.48 y presionar aceptar.
2. Seleccionar el botón nodo solución y después elegir el yacimiento como nodo solución,
se mostrará un mensaje informando el nodo que se seleccionó similar a la Figura 5.50.
3. Seleccionar el botón resolver nodal y se mostrará la solución del problema para ese
conjunto de condiciones dadas. La Figura 5.56 muestra el resultado, donde en el
yacimiento habrá 2200 lpca (constante) con 633 BPD.

Figura 5.57 Gráfica de resultado del análisis nodal eligiendo el fondo de pozo como nodo
solución.

206
CONCLUSIONES Y RECOMENDACIONES

CONCLUSIONES Y RECOMENDACIONES
Conclusiones y recomendaciones

• Las hojas de cálculo son una herramienta poderosa para la ingeniería, y es de suma
importancia que los ingenieros petroleros sepan usarlas adecuadamente para poder
mejorar su desempeño profesional.
• La importancia de que los alumnos conozcan un lenguaje de programación les permite
tener una amplia comprensión de los problemas analizados, ya que en ocasiones el sentido
y objetivo principal de los temas es hecho a un lado porque que no se conocen las
herramientas para solucionarlos.
• La programación en hojas de cálculo es muy similar a otros lenguajes de programación y
representa una opción de programación simple y accesible ya que la mayoría de los
alumnos conoce el funcionamiento de las hojas de cálculo como es Excel.
• La programación en Excel es interactiva y sencilla de entender, porque es posible grabar
las acciones que queremos realizar y después analizar el código del procedimiento
generado.
• Es muy recomendable conocer la programación en hojas de cálculo para automatizar
procedimientos usados en la ingeniería que normalmente tomarían tiempo para realizarse.
• Los problemas presentados pueden desarrollarse ampliamente en las hojas de cálculo y
conformar robustos libros de Excel que pueden usarse con toda seguridad en la ingeniería
petrolera.
• Los pronósticos de producción son una herramienta muy importante para la ingeniería al
igual que el análisis de la producción y es útil poderlos automatizar en algún lenguaje de
programación para evaluar el potencial de producción de un pozo petrolero.
• La guía presentada es compacta y si los usuarios necesitan profundizar en el conocimiento
de las hojas de cálculo se pueden consultar los libros presentados en la bibliografía.

207
REFERENCIAS

Referencias
REFERENCIAS
[1] Achong, I. (1961). Revised Beam Performance Formula For Lake Maracaibo. Well
International Report.
[2] Amelot, M. (2013). VBA Excel 3013, programación en Excel Macros y lenguaje VBA .
Barcelona: Ediciones ENI.
[3] Arps, J. (1945). Analysis of Decline Curves. Trans. AIME, 160(1), 228-247. Society of
Petroleum Engineers. doi:10.2118/945228-G
[4] Asheim, H. (1986). MONA, An Accurate Two-Phase Well Flow Model Based on Phase
Slippage. SPE Production Engineering, 1(3). Society of Petroleum Engineers.
doi:10.2118/12989-PA
[5] Aziz, K., Govier, G., & Fogarasi, M. (1972). Pressure Drop In Wells Producing Oil And
Gas. Journal of Canadian Petroleum Technology, 11(3). Petroleum Society of Canada.
doi:10.2118/72-03-04
[6] Baxendell, P. (1957). Bean performance--Lake Maracaibo wells. Houston, Texas:
Internalreport, Shell Oil Company.
[7] Baxendell, P., & Thomas, R. (1961). The Calculation of Pressure Gradients In High-
Rate Flowing Wells. Journal of Petroleum Technology, 13(10). Society of Petroleum
Engineers. doi:10.2118/2-PA
[8] Beggs, D., & Brill, J. (1973). A Study of Two-Phase Flow In Inclined Pipes. Journal of
Petroleum Technology, 25(5). Society of Petroleum Engineers. doi:10.2118/4007-PA
[9] Bertuzzi, A., Tek, M., & Poettman, F. (1956). Simultaneous Flow of Liquid and Gas
Through Horizontal Pipe. Society of Petroleum Engineers.
[10] Boyund, G., Lyons, W., & Ghalambor, A. (2007). Petroleum Production Engineering,
A Computer-Assisted Approach. Oxford, United Kingdom: Elsevier Science &
Technology Books.
[11] Brown, K. E. (1984). The Technology of Artificial Lift Methods. 4. Tulsa: Pennwell
Books.
[12] Burden, R., & Faires, J. (2011). Numerical differentiation. En Numerical Analysis (9
ed., págs. 174-180). Boston, MA: Brooks Cole Pub.
[13] Chierici, G., Ciucci, G., & Sclocchi, G. (1974). Two-Phase Vertical Flow In Oil Wells -
Prediction of Pressure Drop. Journal of Petroleum Technology, 26(8). Society of
Petroleum Engineers. doi:10.2118/4316-PA.

208
REFERENCIAS

[14] Craft, B. C., & Hawkins, M. (1991). Applied Petroleum Reservoir Engineering (2 ed.).
Upper Saddle River, United States: Prentice Hall.
[15] Dake, L. (1994). The Practice of Reservoir Engineering. Developments in Petroleum
Science, 26. Amsterdan: Elsevier Science & Technology.
[16] Darcy, H. (1856). Les fontaines publiques de la ville de Dijon. Paris: Victor Dalmont
Éditeur.
[17] Dias-Couto, L. (1982). General Inflow Performance Relationship for Solution-Gas
Reservoir Wells. Journal of Petroleum Technology, 34(2), 285-288. Society of
Petroleum Engineers. doi:10.2118/9765-PA
[18] Dukler, A. E., Wicks, M., & Cleveland, R. G. (1964). Frictional pressure drop in two-
phase flow: A. A comparison of existing correlations for pressure loss and holdup. 10.
AIChE J. doi:10.1002/aic.690100117
[19] Duns, H., & Ros, N. (1963). Vertical flow of gas and liquid mixtures in wells. 6th World
Petroleum Congress, 19-26 June, Frankfurt am Main, Germany. Frankfurt am Main,
Germany: World Petroleum Congress.
[20] Eaton, B., Andrews, D., & Knowles, C. (1967). The Prediction of Flow Patterns, Liquid
Holdup and Pressure Losses Occurring During Continuous Two-Phase Flow in
Horizontal Pipelines. Journal of Petroleum Technology, 19(6). Society of Petroleum
Engineers. doi:10.2118/1525-PA
[21] Economides, M., Hill, D., & Ehlig-Economides, C. (1994). Petroleum Productions
Systems. Upper Saddle River, United States: Prentice Hall.
[22] Eickmier, J. (1968). How to Accurately Predict Future Well Productivities. World Oil.
[23] Ertekin, T., Abou-Kassem, J., & King, G. (2001). Basic Applied Reservoir Simulation.
Richardson, Texas: Society of Petroleum Engineers.
[24] Escobar, F. (2008). Fundamentos de ingeniería de yacimientos. Colombia: Editorial
Universidad Surcolombiana.
[25] Fancher, G., & Brown, K. (1963). Prediction of Pressure Gradients For Multiphase
Flow In Tubing. Society of Petroleum Engineers Journal, 3(1). Society of Petroleum
Engineers. doi:10.2118/440-PA
[26] Fetkovich, M. (1973). The Isochronal Testing of Oil Wells. Society of Petroleum
Engineers of AIME. doi:10.2118/4529-MS
[27] Fetkovich, M. (1980). Decline Curve Analysis Using Type Curves. JPT, 32(06). Society
of Petroleum Engineers. doi:10.2118/4629-PA
[28] Flanigan, O. (1958). Effect of Uphill Flow On Pressure Drop In Design of Two-Phase
Gathering Systems. Oil and Gas Journal .

209
REFERENCIAS

[29] Garaicochea, F., Huicochea, C., & López, O. (1991). Transporte de hidrocarburos por
ductos. México: Colegio de Ingenieros Petroleros de México A.C.
[30] Gilbert, W. (1954). Flowing and Gas-lift well Performance. Drilling and Production
Practice. New York, New York: American Petroleum Institute.
[31] Golan, M., & Whitson, C. H. (1986). Well performance. Boston: International Human
Resources Development Corp, Dordrecht.
[32] Gould, T., & Tek, M. (1974). Two-Phase Flow Through Vertical, Inclined, Or Curved
Pipe. Journal of Petroleum Technology, 26(8). Society of Petroleum Engineers.
doi:10.2118/4487-PA
[33] Hagedorn, A., & Brown, K. (1965). Experimental Study of Pressure Gradients
Occurring During Continuous Two-Phase Flow in Small-Diameter Vertical Conduits.
Journal of Petroleum Technology, 17(04). Society of Petroleum Engineers.
doi:10.2118/940-PA
[34] Havlena, D., & Odeh, A. (1963). The Material Balance as an Equation of a Straight
Line. Journal of Petroleum Technology, 15(18). Society of Petroleum Engineers.
doi:10.2118/559-PA
[35] Ikoku, C. U. (1984). Natural Gas Production Engineering. NY: John Wiley and Sons.
[36] Jelen, B. (2015). Excel 2016 VBA and Macros. Estados Unidos, Estados Unidos:
Pearson Educarion, Inc.
[37] Le Guen, F. (2012). Macros y Lenguaje VBA, aprender a programar en excel.
Barcelona: Ediciones ENI.
[38] Lockhart, R., & Martinelli, R. (1949). Proposed correlation of data for isothermal two-
phase, two-component flow in pipes. Chemical Engineering Progress, 45, 39-48.
[39] Mukherjee, H., & Brill, J. (1983). Liquid Holdup Correlations for Inclined Two-Phase
Flow. Journal of Petroleum Technology, 35(5). Society of Petroleum Engineers.
doi:10.2118/10923-PA
[40] Mukherjee, H., & Brill, J. (1985). Pressure Drop Correlations for Inclined Two-Phase
Flow. Journal of Energy Resources Technology, 107(4). Petroleum Fluid Mechanics.
doi:10.1115/1.3231233

[41] Muskat, M. (1945). The Production Histories of Oil Producing Gas-Drive Reservoirs.
Journal of Applied Physics, 16, 147-169. doi:10.1063/1.1707566
[42] Muskat, M., & Meres, M. W. (1936). The Flow of Heterogeneous Fluids Through
Porous Media. Journal of Applied Physics, 7, 346. doi:10.1063/1.1745403
[43] Orkiszewski, J. (1967). Predicting Two-Phase Pressure Drops in Vertical Pipe. Journal
of Petroleum Technology, 19(6). Society of Petroleum Engineers. doi:10.2118/1546-PA

210
REFERENCIAS

[44] Paris de Ferrer, M. (2009). Fundamentos de Ingeniería de Yacimientos. Maracaibo,


Venezuela: Ediciones Astro Data S.A.
[45] Patton, L., & Goland, M. (1980). Generalized IPR curves for predicting well behavior.
Pet. Eng. Int.
[46] Poettman, F., & Carpenter, P. (1952). The Multiphase Flow of Gas, Oil, and Water
Through Vertical Flow Strings with Application to the Design of Gas-lift Installations.
Drilling and Production Practice, 257-317. American Petroleum Institute.
[47] Ros, N. (1960). An analysis of critical simultaneous gas/liquid flow through a restriction
and its application to flowmetering. Applied Scientific Research, 9.
doi:10.1007/BF00382215
[48] Schilthuis, R. (1936). Active Oil and Reservoir Energy. Trans. AIME, 118(1), 33.
Society of Petroleum Engineers. doi:10.2118/936033-G
[49] Shirman, E. (1999). Universal Approach to the Decline Curve Analysis. Journal of
Canadian Petroleum Technology, 38(13). Petroleum Society of Canada.
doi:10.2118/99-13-68
[50] Standing, M. B. (1970). Inflow Performance Relationships for Damaged Wells
Producing by Solution-Gas Drive. Journal of Petroleum Technology, 22(11). Society of
Petroleum Engineers. doi:10.2118/3237-PA
[51] Tarek, H. (2010). Reservoir Engineering Handbook (4 ed.). Oxford, United Kingdom:
Elsevier Science & Technology.
[52] Tarner, J. (1944). How Different Size Gas Caps and Pressure Maintenance Programs
Affect Amount of Recoverable Oil. Oil Weekly, 144.
[53] Tracy, G. W. (1955). Simplified Form of the Material Balance Equation. Trans. AIME,
204, 243-246. Society of Petroleum Engineers.
[54] Van Everdingen, A., & Hurst, W. (1949). The Application of the Laplace Transformation
to Flow Problems in Reservoirs. Trans. AIME, 1(12), 305-324. Society of Petroleum
Engineers. doi:10.2118/949305-G.
[55] Vogel, J. V. (1968). Inflow Performance Relationships for Solution-Gas Drive Wells.
Journal of Petroleum Technology, 20(1). Society of Petroleum Engineers.
doi:10.2118/1476-PA
[56] Walkenbach, J. (2013). Excel VBA, Programming for Dummies. Hoboken, New
Jersey.: John Wiley & Sons, Inc.
[57] Walkenbach, J. (2015). Excel VBA, Programming for Dummies. Hoboken, New Jersey:
John Wiley & Sona, Inc.

211
NOMENCLATURA

Nomenclatura
NOMENCLATURA
Símbolo Significado Unidades
𝐴 Área (pies2)
𝐴𝑝 Área de la sección transversal (pies2)
𝐴𝑥 Área transversal a la dirección X (pies2)
𝐴𝑦 Área transversal a la dirección Y (pies2)
𝐴𝑧 Área transversal a la dirección Z (pies2)
𝐵 Constante de intrusión de agua
𝐵 Factor de volumen de formación (bl@cy/bl@ce)
𝐵° Factor de volumen a la presión 𝑝0 (bl@cy/bl@ce)
𝐵𝑔 Factor de volumen del gas (bl@cy/pie3@ce)
𝐵𝑔 Factor de volumen del gas inicial (bl@cy/pie3@ce)
𝑖
𝐵𝑜 Factor de volumen del aceite (pie3@cy/pie3@ce)
𝐵𝑜 𝑖 Factor de volumen del aceite inicial (bl@cy/bl@ce)
𝐵𝑡 Factor de volumen total (bl@cy/bl@ce)
𝐵𝑤 Factor de volumen del agua (bl@cy/bl@ce)
𝑐 Compresibilidad (lpc-1)
𝑐𝑓 Compresibilidad de la formación (lpc-1)
𝑐𝑟 Compresibilidad de la roca (lpc-1)
𝑐𝑡 Compresibilidad total (lpc-1)
𝑐𝑤 Compresibilidad del agua (lpc-1)
𝐶 Constante de intrusión de agua
𝑑 Diámetro (pies)
𝐷 Tasa de declinación nominal (años-1, meses-1)
𝐷𝑖 Tasa de declinación nominal inicial (años-1, meses-1)
𝑑𝜙 Diámetro del estrangulador 64avos de pg.
𝐸 Eficiencia de flujo
𝐸𝐵𝑀 Ecuación de balance de materia
𝐸𝐹 Eficiencia de flujo (fracción)
𝐸𝑓,𝑤 En la EBM toma expansión del agua connata y formación (bl@cy/bl@ce)
𝐸𝑔 En la EBM toma en cuenta la expansión de la capa de gas (bl@cy/bl@ce)
𝐸𝑜 En la EBM expansión del aceite y gas disuelto (bl@cy/bl@ce)
𝑓 Función de ángulo
𝑓 Factor de fricción
𝑓 Fracción
𝐹 Término de producción en la EBM (bl@cy)
𝐹𝑟 Factor de recuperación (fracción)

212
NOMENCLATURA

Símbolo Significado Unidades


𝑔 Gravedad (pies/s2)
𝑔𝑐 Constante de gravedad (pies/s2)
𝐺 Volumen de gas inicial (pie3)
ℎ Espesor (pies)
ℎ Elevación (pies)
𝐻 Colgamiento de líquido o gas
𝐼𝑃𝑅 Inflow performance relationship
𝐽 Índice de productividad (bl/lpc)
𝑘 permeabilidad (mD)
𝑘𝑎 Permeabilidad absoluta (mD)
𝑘𝑟𝑔 Permeabilidad relativa al gas
𝑘𝑟𝑜 Permeabilidad relativa al aceite
𝑘𝑥 Permeabilidad en la dirección X (darcy)
𝑘𝑦 Permeabilidad en la dirección Y (darcy)
𝑘𝑧 Permeabilidad en la dirección Z (darcy)
𝐾 Agrupación de incógnitas cw , cf , h, ra y θ en modelo de acuífero. (-)
𝐿 Longitud (pies)
𝑚 Relación de volumen del casquete de gas y el aceite inicial. (-)
𝑚𝑎 Masa acumulada en el volumen de control (lb)
𝑚𝑖 Masa entrante en volumen de control (lb)
𝑚𝑜 Masa que sale del volumen de control (lb)
𝑚𝑠 Masa que entra o sale del volumen de control (fuente externa) (lb)
𝑛 Exponente de declinación (-)
𝑁 Volumen original de hidrocarburos (bl)
𝑁𝐹𝑟 Número de Froude
𝑁𝑅𝑒 Número de Reynolds
𝑁𝑝 Producción acumulada (bl)
𝑁𝑝 Producción acumulada (bl)
𝑝 Presión (lpc)
𝑝° Presión de referencia (lpc)
𝑝𝑒 Presión en frontera exterior (lpc)
𝑝𝑠𝑒𝑝 Presión de separación (lpc)
𝑝𝑤𝑓 Presión de fondo fluyendo (lpc)
𝑝𝑤ℎ Presión en la cabeza del pozo (lpc)
𝑝𝑤𝑠 Presión de fondo estática (lpc)
𝑞 Gasto de producción (bl/día)
𝑞𝑖 Gasto de producción inicial (bl/día)
𝑞𝑚 Gasto másico producido (lb/día)
𝑞𝑚á𝑥 Gasto máximo (bl/día)
𝑞𝑠𝑐 Gasto de producción a condiciones estándar (bl/día)

213
NOMENCLATURA

Símbolo Significado Unidades


𝑟𝑎 Radio del acuífero (pies)
𝑟𝐷 Radio adimensional
𝑟𝑒 Radio del yacimiento (pies)
𝑟𝑒 Radio de drene (pies)
𝑟𝑤 Radio del pozo (pies)
𝑅 Relación gas líquido (pies3/bl)
𝑅𝐺𝐴 Relación gas aceite (pie3@ce/bl@ce)
𝑅𝑠 Relación de solubilidad (pie3@ce/bl@ce)
𝑅𝑠 𝑖 Relación de solubilidad inicial (pie3@ce/bl@ce)
𝑅ℎ Radio hidráulico (pies)
𝑅𝑝 Relación gas aceite acumulado. (pie3@ce/bl@ce)
𝑆 Saturación (fracción)
𝑆𝑤 𝑖 Saturación de agua inicial (fracción)
𝑆𝑜 Saturación de aceite (fracción)
𝑆𝑤 Saturación de agua (fracción)
𝑆𝑤𝑐 Saturación de agua connata (fracción)
𝑡 tiempo (días)
𝑇 Temperatura (°F)
𝑡𝐷 Tiempo adimensional
𝑇𝑥 Transmisibilidad en la dirección X
𝑇𝑦 Transmisibilidad en la dirección Y
𝑇𝑧 Transmisibilidad en la dirección Z
𝑢𝑥 Componente de velocidad en la dirección X
𝑢𝑦 Componente de velocidad en la dirección Y
𝑢𝑧 Componente de velocidad en la dirección Z
𝑣 Velocidad (pies/s2)
𝑉 Volumen (pies3)
𝑉𝑏 Volumen bruto de volumen de control (pies3)
𝑤 Gasto másico (lb/día)
𝑤𝑥 Gasto másico en la dirección X (lb/día)
𝑤𝑦 Gasto másico en la dirección Y (lb/día)
𝑤𝑧 Gasto másico en la dirección Z (lb/día)
𝑊𝑒 Entrada de agua acumulada (bl@cy)
𝑊𝑒𝐷 Función del tiempo adimensional
𝑊𝑖 Volumen de gas inicial (bl@cy)
𝑊𝑝 Agua producida acumulada (bl@cy)
𝑊𝑂𝑅 Relación agua aceite (bl@ce/bl@ce)
𝑥 Distancia en la dirección X (sistema cartesiano) (pies)
𝑋(𝑃) Variable dependiente de la presión método de Muskat
𝑌(𝑃) Variable dependiente de la presión método de Muskat

214
NOMENCLATURA

Símbolo Significado Unidades


𝑦 Distancia en la dirección X (sistema cartesiano) (pies)
𝑍(𝑃) Variable dependiente de la presión método de Muskat
𝑧 Distancia en la dirección X (sistema cartesiano) (pies)
𝛼𝑐 Constante de conversión 5.614583
𝛽𝑐 Factor de conversión 1.127
𝛾 Densidad relativa
Δ Diferencia
∆𝑥 Tamaño de volumen de control (dirección X) (pies)
∆𝑦 Tamaño de volumen de control (dirección Y) (pies)
∆𝑧 Tamaño de volumen de control (dirección Z) (pies)
𝜀 Rugosidad (pies)
𝜃 Ángulo de inclinación (grados)
𝜆 Colgamiento sin resbalamiento de líquido o gas (fracción)
𝜇 Viscosidad (cp)
𝜇𝑔 Viscosidad del gas (cp)
𝜇𝑜 Viscosidad del aceite (cp)
𝜇𝑤 Viscosidad del agua (cp)
𝜌 Densidad (lb/pie3)
𝜌𝑠𝑐 Densidad a condiciones estándar (lb/pie3)
𝜎 Tensión superficial (dinas/cm)
𝜙 Porosidad (fracción)
Φ Potencial de fluido
𝛷𝑔 Función PVT de Tracy
𝛷𝑜 Función PVT de Tracy
𝛷𝑤 Función PVT de Tracy
Subíndices
𝑎𝑐𝑐 Aceleración
𝑒 Elevación
𝑓 fricción
𝑔 Gas
𝐿 Líquido
𝑚 Mezcla
𝑀 Masa de la mezcla
𝑛 Sin resbalamiento
𝑜 Aceite
𝑠𝑔 Superficial del gas
𝑠𝐿 Superficial del líquido
𝑇 Total
𝑤 Agua

215
NOMENCLATURA

Superíndices
° Referencia
𝑛 Tiempo actual
𝑛+1 Tiempo futuro
𝑛−1 Tiempo pasado
𝑖, 𝑗, 𝑘 posición

216
APÉNDICES
APÉNDICE A

Apéndice A
APÉNDICE A
Contenido del apéndice:

1. Descripción del formulario FIDENDEC y sus componentes principales.


2. Lista de variables usadas y sus unidades.
3. Declaración de variables principales.
4. Subrutina ejecutada por el Botón Identificar modelo.
5. Subrutina del botón Exponencial.
6. Subrutina del botón Armónica.
7. Subrutina del botón Hiperbólica.
8. Subrutina del botón gráfica Gasto (q) vs Tiempo (t).
9. Subrutina del botón gráfica Log Gasto (q) vs Tiempo (t).
10. Subrutina del botón gráfica Log Gasto (q) vs Log Tiempo (t).
11. Subrutina del botón gráfica Gasto (q) vs Producción acumulada (Np).
12. Subrutina del botón gráfica Log Gasto (q) vs Producción acumulada (Np).
13. Subrutina del botón gráfica Log Gasto (q) vs Log Producción acumulada (Np).
14. Subrutina del botón gráfica (-dq/qdt) vs Gasto (q)
15. Subrutina PARAMETROSEXPONENCIAL.
16. Subrutina PARAMETROSARMONICA.
17. Subrutina PARAMETROSSHIRMAN.
18. Subrutina CALCULAD.
19. Subrutina CALCULANP.
20. Función QEXPONENCIAL.
21. Función QARMÓNICA.
22. Función QHIPERBOLICA.
23. Función NPEXPONENCIAL.
24. Función NPARMONICA.
25. Función NPHIPERBOLICA.
26. Subrutina RDECLINACION.
27. Subrutina GRADECLINACION
28. Subrutina GRAFICABASE
29. Subrutina GRAFICATOIMAGEN
30. Subrutina VERIFICARDATOS
31. Subrutina LEERRANGO
32. Subrutina RANGOAVECTOR
33. Declaraciones y rutinas generales.

218
APÉNDICE A

1. Descripción del formulario FIDENDEC y sus componentes principales.


El formulario FIDENDEC (Figura A. 1) se compone de objetos ListBox para la selección de gráfica
a mostrar, OptionButton para de acuerdo a que modelo se calcularán los parámetros de
declinación, Label para mostrar resultados, Image para mostrar las gráficas y CommandButton
para cerrar el formulario principalmente, adicionalmente contiene Frame y Label para ayuda visual.
Las características principales se muestran en la Tabla A. 1.

Figura A. 1 Formulario FINDEC con sus componentes principales.

Tabla A. 1 Descripción de los elementos principales del formulario FINDEC.


Número Objeto Descripción
RefEdit1 y RefEdit2, permiten introducir los datos de presión y
1 RefEdit
gasto para realizar el pronóstico
ComboBox1 y ComboBox2 que permiten elegir entre las
2 ComboBox
unidades disponibles para los datos
ComboBox3 que permite elegir entre alguna gráfica característica
3 ComboBox
para poder identificar el modelo de declinación.
Image1 donde se coloca una imagen BMP con el
4 Image comportamientos típicos de las declinaciones en diferentes
escalas.
Image2 donde se coloca una imagen BMP con el comportamiento
5 Image
de los datos seleccionados antes de mostrar el formulario.
ComboBox4 que permite elegir entre los diferentes modelos de
6 ComboBox
declinación.
TextBox1 y ComboBox5, permiten elegir cuando detener el
TextBox y
7 estudio, cuando se alcance un tiempo o cuando se alcance un
ComboBox
gasto definido.

219
APÉNDICE A

TextBox2 donde se inserta el paso de tiempo para que se genere


8 TextBox
una tabla de resultados.
Botón llamado CommandButton1 que cierra el formulario y no se
9 CommandButton
realiza alguna acción.
Botón llamado CommandButton2 que resuelve el problema con
10 CommandButton
las características especificadas.

El código asociado al formulario FINDEC es:


1. Option Explicit
2.
3. Private Sub ComboBox1_Change()
4. If ComboBox1.ListIndex = 0 Then Label11.Caption = "(meses)"
5. If ComboBox1.ListIndex = 1 Then Label11.Caption = "(años)"
6. End Sub
7.
8. Private Sub ComboBox3_Click()
9. 'MUESTA LAS GRAFICAS CARACTERÍSTICAS DE CADA MODELO (IZQUIEERDA) Y LA GRÁFICA CON _
10. LOS DATOS SELECCIONADOS.
11. Call VERIFICARDATOS
12. If Status = "Si" Then
13. Call CALCULANP(VecT, VecQ, Ele)
14. Select Case ComboBox3.ListIndex
15. Case 0 'Gasto (q) vs Tiempo (t)
16. Call GRADECLINACION(C, VecT, VecQ, 1, 1, "Gasto (q) vs Tiempo (t)", _
17. "Tiempo (t)", "Gasto (q)")
18. Call GRAFICATOIMAGEN(C, Image2)
19. Call GRAFICABASE(C, 1, 1, 1, "Tiempo (t)", "Gasto (q)")
20. Call GRAFICATOIMAGEN(C, Image1)
21. Case 1 'Log Gasto (q) vs Tiempo (t)
22. Call GRADECLINACION(C, VecT, VecQ, 1, 2, "Log Gasto (q) vs Tiempo (t)", _
23. "Tiempo (t)", "Log Gasto (q)")
24. Call GRAFICATOIMAGEN(C, Image2)
25. Call GRAFICABASE(C, 2, 1, 2, "Tiempo (t)", "Log Gasto (q)")
26. Call GRAFICATOIMAGEN(C, Image1)
27. Case 2 'Log Gasto (q) vs Log Tiempo (t)
28. Call GRADECLINACION(C, VecT, VecQ, 2, 2, "Log Gasto (q) vs Log Tiempo (t)", _
29. "Log Tiempo (t)", "Log Gasto (q)")
30. Call GRAFICATOIMAGEN(C, Image2)
31. Call GRAFICABASE(C, 3, 2, 2, "Log Tiempo (t)", "Log Gasto (q)")
32. Call GRAFICATOIMAGEN(C, Image1)
33. Case 3 'Gasto (q) vs Producción acumulada (Np)
34. Call GRADECLINACION(C, Np, qNp, 1, 1, "Gasto (q) vs Prod. acumulada (Np)", _
35. "Prod. acumulada (Np)", "Gasto (q)")
36. Call GRAFICATOIMAGEN(C, Image2)
37. Call GRAFICABASE(C, 4, 1, 1, "Prod. acumulada (Np)", "Gasto (q)")
38. Call GRAFICATOIMAGEN(C, Image1)
39. Case 4 'Log Gasto (q) vs Producción acumulada (Np)
40. Call GRADECLINACION(C, Np, qNp, 1, 2, "Log Gasto (q) vs Prod. acumulada (Np)", _
41. "Prod. acumulada (Np)", "Log Gasto (q)")
42. Call GRAFICATOIMAGEN(C, Image2)
43. Call GRAFICABASE(C, 5, 1, 2, "Prod. acumulada (Np)", "Log Gasto (q)")
44. Call GRAFICATOIMAGEN(C, Image1)
45. Case 5 'Log Gasto (q) vs Log Producción acumulada (Np)
46. Call GRADECLINACION(C, Np, qNp, 2, 2, "Log Gasto (q) vs Log Prod. acumulada (Np)",
47. _
48. "Log Prod. acumulada (Np)", "Log Gasto (q)")
49. Call GRAFICATOIMAGEN(C, Image2)

220
APÉNDICE A

50. Call GRAFICABASE(C, 6, 2, 2, "Log Prod. acumulada (Np)", "Log Gasto (q)")
51. Call GRAFICATOIMAGEN(C, Image1)
52. Case 6 '(-dq/qdt) vs Gasto (q)
53. Call CALCULAD(VecT, VecQ, DerDec, Ele - 1)
54. For I = 1 To Ele - 1
55. DerDec(I) = (-1 / VecQ(I)) * DerDec(I)
56. Next I
57. ReDim Preserve VecQ(1 To Ele)
58. Call GRADECLINACION(C, VecQ, DerDec, 1, 1, "Gasto (q) vs D", _
59. "Gasto (q)", "D (-dq/qdt)")
60. Call GRAFICATOIMAGEN(C, Image2)
61. Call GRAFICABASE(C, 7, 1, 1, "Gasto (q)", "D (-dq/qdt)")
62. Call GRAFICATOIMAGEN(C, Image1)
63. End Select
64. Else
65. ComboBox3.Value = "Seleccionar gráfica"
66. End If
67. FIDENDEC.Repaint
68. End Sub
69.
70. Private Sub ComboBox4_Click()
71. Call VERIFICARDATOS
72. If Status = "Si" Then
73. Select Case ComboBox4.ListIndex
74. Case 0
75. Call PARAMETROSEXPONENCIAL(VecT, VecQ, DI, N, qi, Ele)
76. Case 1
77. Call PARAMETROSARMONICA(VecT, VecQ, DI, N, qi, Ele)
78. Case 2
79. Call PARAMETROSSHIRMAN(VecT, VecQ, DI, N, qi, Ele)
80. End Select
81. Label8.Caption = "Di= " & FormatNumber(DI, 4, vbTrue) & ", n= " & _
82. FormatNumber(N, 4, vbTrue) & ", qi = " & FormatNumber(qi, 4, vbTrue)
83. Else
84. ComboBox4.Text = "Elegir modelo"
85. End If
86. End Sub
87.
87. Private Sub CommandButton1_Click()
88. Unload FIDENDEC
89. End Sub
90.
91. Private Sub CommandButton2_Click()
92. Call VERIFICARDATOS
93. If Status = "Si" Then
94. Select Case ComboBox4.ListIndex
95. Case 0
96. Call PARAMETROSEXPONENCIAL(VecT, VecQ, DI, N, qi, Ele)
97. Case 1
98. Call PARAMETROSARMONICA(VecT, VecQ, DI, N, qi, Ele)
99. Case 2
100. Call PARAMETROSSHIRMAN(VecT, VecQ, DI, N, qi, Ele)
101. Case Else
102. MsgBox "No se ha elegido método de declinación", vbInformation, "Error"
103. Exit Sub
104. End Select
105. Label8.Caption = "Di= " & FormatNumber(DI, 4, vbTrue) & ", n= " & _
106. FormatNumber(N, 4, vbTrue) & ", qi = " & FormatNumber(qi, 4, vbTrue)
107. Call RDECLINACION
108. Unload FIDENDEC

221
APÉNDICE A

109. End If
110. End Sub
111.
112. Private Sub UserForm_Initialize()
113. ComboBox1.AddItem "Meses"
114. ComboBox1.AddItem "Años"
115. ComboBox1.ListIndex = 0
116. ComboBox2.AddItem "BPD"
117. ComboBox2.AddItem "MBPD"
118. ComboBox2.ListIndex = 0
119. ComboBox3.AddItem "Gasto (q) vs Tiempo (t)"
120. ComboBox3.AddItem "Log Gasto (q) vs Tiempo (t)"
121. ComboBox3.AddItem "Log Gasto (q) vs Log Tiempo (t)"
122. ComboBox3.AddItem "Gasto (q) vs Producción acumulada (Np)"
123. ComboBox3.AddItem "Log Gasto (q) vs Producción acumulada (Np)"
124. ComboBox3.AddItem "Log Gasto (q) vs Log Producción acumulada (Np)"
125. ComboBox3.AddItem "(-dq/qdt) vs Gasto (q)"
126. ComboBox4.AddItem "Exponencial"
127. ComboBox4.AddItem "Armónico"
128. ComboBox4.AddItem "Hiperbólico"
129. ComboBox5.AddItem "Gasto"
130. ComboBox5.AddItem "Tiempo"
131. ComboBox5.ListIndex = 0
132. End Sub

2. Lista de variables usadas y sus unidades.


1. '************************ VARIABLES DESCRIPCIÓN Y UNIDADES **************************
2. ' VARIABLE DESCRIPCIÓN
3. ' RTiempo RANGO QUE GUARDA DATOS DE TIEMPO (MESES,AÑOS)
4. ' RGasto RANGO QUE GUARDA DATOS DE GASTO (BPD)
5. ' RNp RANGO QUE GUARDA DATOS DE NP (BL)
6. ' RangoAux RANGO AUXILIAR PARA LEER DATOS
7. ' VecT() VECTOR DE TIEMPO, ALMACENA LOS DATOS LEIDOS, (MESES, AÑOS)
8. ' VECQ() VECTOR DE GASTO, ALMACENA LOS DATOS LEIDOS, (BPD)
9. ' DerDec() VECTOR QUE ALMACENA OS DATOS DE LA DERIVADA DQ/DT
10. ' Arr1() VECTOR AUXILIAR
11. ' Arr2() VECTOR AUXILIAR
12. ' Arr3() VECTOR AUXILIAR
13. ' Np() VECTOR QUE ALMACENA DATOS DE NP CALCULADOS PARA GRAFICAR.
14. ' qNp() VECTOR QUE ALMACENA DATOS DE GASTO PARA GRAFICAR.
15. ' Di TASA DE DECLINACIÓ (MESES-1, AÑOS-1)
16. ' nn EXPONENTE DE DECLINACIÓN
17. ' qi GASTO INICIAL (BPD)
18. ' Pen PENDIENTE DE UNA RECTA
19. ' Ord ORDENADA DE UNA LÍNEA RECTA
20. ' Ele CONTADOR AUXILIAR DE NÚMERO DE ELEMENTOS EN UN VECTOR
21. ' Status$ ESTABLECE SI SE HAN LEIDO CORECTAMENTE LOS DATOS DE TIEMPO Y GASTO
22. ' Fname$ VARIABLE AUXILIAR PARA CREAR IMÁGEN BMP A PARTIR DE GRÁFICA EN _
23. ' EXCEL Y SOLOCARLA EN OBJETO IMAGE DE FORMULARIO.
24. ' Rango1 VARIABLE AUXILIAR
25. ' Rango2 VARIABLE AUXILIAR

3. Declaración de variables principales.


1. Option Explicit
2. Public RTiempo As Range, RGasto As Range, RNp As Range, RangoAux As Range
3. Public VecT() As Double, VECQ() As Double, DerDec() As Double, _
4. Arr1() As Double, Arr2() As Double, Arr3() As Double, _
5. Np() As Double, qNp() As Double, DI#, nn#, qi#, Pen#, Ord#, Ele%, _
6. Status$, Fname$, Rango1, Rango2, Hoja As Worksheet

222
APÉNDICE A

4. Subrutina ejecutada por el Botón Identificar modelo.


1. Sub BOTON_IDENTIFICAR()
2. FIDENDEC.Show
3. End Sub

5. Subrutina del botón Exponencial.


1. Sub BOTON_EXP()
2. On Error Resume Next
3. FIDENDEC.Image1.Visible = False: FIDENDEC.Image2.Visible = False
4. FIDENDEC.Label1.Visible = False: FIDENDEC.Label2.Visible = False
5. FIDENDEC.Frame3.Visible = False: FIDENDEC.Frame2.Top = 70
6. FIDENDEC.CommandButton1.Left = 225: FIDENDEC.CommandButton1.Top = 190
7. FIDENDEC.CommandButton2.Left = 300: FIDENDEC.CommandButton2.Top = 190
8. FIDENDEC.Width = 385: FIDENDEC.Height = 250
9. FIDENDEC.Show
10. End Sub

6. Subrutina del botón Armónica.


1. Sub BOTON_ARM()
2. On Error Resume Next
3. FIDENDEC.Image1.Visible = False: FIDENDEC.Image2.Visible = False
4. FIDENDEC.Label1.Visible = False: FIDENDEC.Label2.Visible = False
5. FIDENDEC.Frame3.Visible = False: FIDENDEC.Frame2.Top = 70
6. FIDENDEC.CommandButton1.Left = 225: FIDENDEC.CommandButton1.Top = 190
7. FIDENDEC.CommandButton2.Left = 300: FIDENDEC.CommandButton2.Top = 190
8. FIDENDEC.Width = 385: FIDENDEC.Height = 250
9. FIDENDEC.Show
10. End Sub

7. Subrutina del botón Hiperbólica.


1. Sub BOTON_HIP()
2. On Error Resume Next
3. FIDENDEC.Image1.Visible = False: FIDENDEC.Image2.Visible = False
4. FIDENDEC.Label1.Visible = False: FIDENDEC.Label2.Visible = False
5. FIDENDEC.Frame3.Visible = False: FIDENDEC.Frame2.Top = 70
6. FIDENDEC.CommandButton1.Left = 225: FIDENDEC.CommandButton1.Top = 190
7. FIDENDEC.CommandButton2.Left = 300: FIDENDEC.CommandButton2.Top = 190
8. FIDENDEC.Width = 385: FIDENDEC.Height = 250
9. FIDENDEC.Show
10. End Sub

8. Subrutina del botón gráfica Gasto (q) vs Tiempo (t).


1. Sub BOTON_GRA1()
2. 'Gráfica Gasto (q) vs Tiempo (t)
3. If Status = "No" Then Exit Sub
4. Rango1 = RTiempo.Value: Rango2 = RGasto.Value
5. Call GRADECLINACION(C, RTiempo, RGasto, 1, 1, "Gasto (q) vs Tiempo (t)", _
6. "Tiempo (t)", "Gasto (q)")
7. Status = "No"
8. End Sub

9. Subrutina del botón gráfica Log Gasto (q) vs Tiempo (t).


1. Sub BOTON_GRA2()
2. 'Gráfica Log Gasto (q) vs Tiempo (t)
3. If Status = "No" Then Exit Sub
4. Call GRADECLINACION(C, RTiempo, RGasto, 1, 2, "Gasto (q) vs Tiempo (t)", _
5. "Tiempo (t)", "Log Gasto (q)")
6. Status = "No"

223
APÉNDICE A

7. End Sub

10. Subrutina del botón gráfica Log Gasto (q) vs Log Tiempo (t).
1. Sub BOTON_GRA3()
2. 'Gráfica Log Gasto (q) vs Log Tiempo (t)
3. If Status = "No" Then Exit Sub
4. Call GRADECLINACION(C, RTiempo, RGasto, 2, 2, "Gasto (q) vs Tiempo (t)", _
5. "Log Tiempo (t)", "Log Gasto (q)")
6. Status = "No"
7. End Sub

11. Subrutina del botón gráfica Gasto (q) vs Producción acumulada (Np).
1. Sub BOTON_GRA4()
2. 'Gráfica Gasto (q) vs Producción acumulada (Np)
3. If Status = "No" Then Exit Sub
4. Call GRADECLINACION(C, RNp, RGasto, 1, 1, "Gasto (q) vs Prod. acumulada (Np)", _
5. "Prod. acumulada (Np)", "Gasto (q)")
6. Status = "No"
7. End Sub

12. Subrutina del botón gráfica Log Gasto (q) vs Producción acumulada (Np).
1. Sub BOTON_GRA5()
2. 'Gráfica Log Gasto (q) vs Producción acumulada (Np)
3. If Status = "No" Then Exit Sub
4. Call GRADECLINACION(C, RNp, RGasto, 1, 2, "Gasto (q) vs Prod. acumulada (Np)", _
5. "Prod. acumulada (Np)", "Log Gasto (q)")
6. Status = "No"
7. End Sub

13. Subrutina del botón gráfica Log Gasto (q) vs Log Producción acumulada (Np).
1. Sub BOTON_GRA6()
2. 'Gráfica Log Gasto (q) vs Log Producción acumulada (Np)
3. If Status = "No" Then Exit Sub
4. Call GRADECLINACION(C, RNp, RGasto, 2, 2, "Gasto (q) vs Prod. acumulada (Np)", _
5. "Log Prod. acumulada (Np)", "Log Gasto (q)")
6. Status = "No"
7. End Sub

14. Subrutina del botón gráfica (-dq/qdt) vs Gasto (q).


1. Sub BOTON_GRA7()
2. 'Gráfica (-dq/qdt) vs Gasto (q)
3. If Status = "No" Then Exit Sub
4. Call RANGOAVECTOR(RTiempo, VecT)
5. Call RANGOAVECTOR(RGasto, VecQ)
6. Ele = UBound(VecT)
7. Call CALCULAD(VecT, VecQ, DerDec, Ele - 1)
8. For I = 1 To Ele - 1
9. DerDec(I) = (-1 / VecQ(I)) * DerDec(I)
10. Next I
11. Call GRADECLINACION(C, VecQ, DerDec, 1, 1, "Gasto (q) vs D (-dq/qdt)", _
12. "Gasto (q)", "D (-dq/qdt)")
13. Status = "No"
14. End Sub

15. Subrutina PARAMETROSEXPONENCIAL.


1. Sub PARAMETROSEXPONENCIAL(DatT() As Double, DatQ() As Double, DI As Double, _
2. nn As Double, qi As Double, Ele As Integer)
3. 'CALCULA LOS PARÁMETROS DE LA DECLINACIÓN EXPONENCIAL.

224
APÉNDICE A

4. Redim Arr1(Ele): Redim Arr2(Ele)


5. For I = 1 To Ele
6. Arr1(I) = Log(DatQ(I))
7. Next I
8. Call Regresion(DatT, Arr1, Pen, Ord, Ele)
9. DI = -Pen
10. nn = 0
11. qi = Exp(Ord)
12. End Sub

16. Subrutina PARAMETROSARMONICA.


1. Sub PARAMETROSARMONICA(DatT() As Double, DatQ() As Double, DI As Double, _
2. nn As Double, qi As Double, Ele As Integer)
3. 'CALCULA LOS PARÁMETROS DE LA DECLINACIÓN ARMONICA.
4. Call CALCULANP(DatT, DatQ, Ele)
5. Redim Arr1(Ele - 1): Redim Arr2(Ele)
6. For I = 1 To Ele - 1
7. Arr1(I) = Log(DatQ(I + 1))
8. Next I
9. Call Regresion(Np, Arr1, Pen, Ord, Ele - 1)
10. DI = -Pen * Exp(Ord)
11. nn = 1
12. qi = Exp(Ord)
13. End Sub

17. Subrutina PARAMETROSSHIRMAN.


1. Sub PARAMETROSSHIRMAN(DatT() As Double, DatQ() As Double, DI As Double, _
2. nn As Double, qi As Double, Ele As Integer)
3. 'CALCULA LOS PARÁMETROS DE LA DECLINACIÓN HIPERBÓLICA CON EL MÉTODO DE SHIRMAN.
4. Dim A As Double
5. Redim DerDec(Ele - 1)
6. Redim Arr1(Ele - 1): Redim Arr2(Ele - 1): Redim Arr3(Ele - 1)
7. Call CALCULAD(DatT, DatQ, DerDec, Ele - 1)
8. For I = 1 To Ele - 1
9. Arr1(I) = Log(DatQ(I))
10. Arr2(I) = Log(-DerDec(I))
11. Next I
12. Call Regresion(Arr1, Arr2, Pen, Ord, Ele - 1)
13. nn = Pen - 1
14. A = Exp(Ord)
15. qi = 0
16. For I = 1 To Ele - 1
17. Arr3(I) = ((DatQ(I)) ^ (-nn) - A * nn * DatT(I)) ^ (-1 / nn)
18. qi = qi + Arr3(I)
19. Next I
20. qi = qi / (Ele - 1)
21. DI = A * qi ^ nn
22. End Sub

18. Subrutina CALCULAD.


1. Sub CALCULAD(x() As Double, y() As Double, D() As Double, Ele As Integer)
2. 'CALCULA LA DERIVADA DE UNA SERIE DE DATOS (X,Y) Y LOS REGRESA EN EL VECOTOR D.
3. Redim D(Ele)
4. D(1) = (-3 * y(1) + 4 * y(2) - y(3)) / (x(3) - x(1))
5. For I = 2 To Ele
6. D(I) = (y(I + 1) - y(I - 1)) / (x(I + 1) - x(I - 1))
7. Next I
8. End Sub

225
APÉNDICE A

19. Subrutina CALCULANP.


1. Sub CALCULANP(x() As Double, y() As Double, Ele As Integer)
2. 'CALCULA NP CON LA FORMA TRAPEZOIDAL.
3. Redim Np(1 To Ele - 1): Redim qNp(1 To Ele - 1)
4. For I = 1 To Ele - 1
5. qNp(I) = y(I + 1)
6. If I = 1 Then
7. Np(I) = (x(I + 1) - x(I)) * (y(I + 1) + ((y(I) - y(I + 1)) / 2))
8. Else
9. Np(I) = (x(I + 1) - x(I)) * (y(I + 1) + ((y(I) - y(I + 1)) / 2)) + Np(I - 1)
10. End If
11. Next I
12. End Sub

20. Función QEXPONENCIAL.


1. Function QEXPONENCIAL(qi#, DI#, T#)
2. 'CALCULA EL GASTO DE ACUERDO A LA DECLINACIÓN EXPONENCIAL.
3. QEXPONENCIAL = qi * Exp(-DI * T)
4. End Function

21. Función QARMÓNICA.


1. Function QARMONICA(qi#, DI#, T#)
2. 'CALCULA EL GASTO DE ACUERDO A LA DECLINACIÓN ARMÓNICA.
3. QARMONICA = qi / (1 + DI * T)
4. End Function

22. Función QHIPERBOLICA.


1. Function QHIPERBOLICA(qi#, DI#, nn#, T#)
2. 'CALCULA EL GASTO DE ACUERDO A LA DECLINACIÓN HIPERBÓLICA.
3. QHIPERBOLICA = qi / (1 + nn * DI * T) ^ (1 / nn)
4. End Function

23. Función NPEXPONENCIAL.


1. Function NPEXPONENCIAL(qi#, DI#, Q#)
2. 'CALCULA EL LA PRODUCCIÓN ACUMULADA NP DE ACUERDO A LA DECLINACIÓN EXPONENCIAL.
3. NPEXPONENCIAL = (qi - Q) / DI
4. End Function

24. Función NPARMONICA.


1. Function NPARMONICA(qi#, DI#, Q#)
2. 'CALCULA EL LA PRODUCCIÓN ACUMULADA NP DE ACUERDO A LA DECLINACIÓN ARMÓNICA.
3. NPARMONICA = (qi / DI) * (Log(qi) - Log(Q))
4. End Function

25. Función NPHIPERBOLICA.


1. Function NPHIPERBOLICA(qi#, DI#, nn#, Q#)
2. 'CALCULA EL LA PRODUCCIÓN ACUMULADA NP DE ACUERDO A LA DECLINACIÓN HIPERBÓLICA.
3. NPHIPERBOLICA = (qi / ((1 - nn) * DI)) * ((qi) ^ (1 - nn) - (Q) ^ (1 - nn))
4. End Function

26. Subrutina RDECLINACION.


1. Sub RDECLINACION(TITULO$)
2. 'INSERTA LOS PARÁMETROS DI, nn Y QI DE EL MODELO DE DELINACIÓN SELECCIONADO CON UN _
3. FORMATO COMO EL MOSTRADO EN EL APARTADO CORRESPONDIENTE DEL CAPÍTULO 5.
4. Set Hoja = ActiveWorkbook.Sheets.Add
5. Application.Wait (Now + TimeValue("00:00:01"))
6.

226
APÉNDICE A

7. Hoja.Name = "Resultados declinación " & Format(Time, "HH") & ";" & Format(Time, "MM")
8. _
9. & ";" & Format(Time, "SS")
10. With Hoja
11. 'CONTENIDO
12. .Cells(1, 1) = "Datos"
13. .Cells(1, 4) = "Resultados"
14. If FIDENDEC.ComboBox1.ListIndex = 0 Then .Cells(2, 1) = "Tiempo (meses)"
15. If FIDENDEC.ComboBox1.ListIndex = 1 Then .Cells(2, 1) = "Tiempo (años)"
16. If FIDENDEC.ComboBox2.ListIndex = 0 Then .Cells(2, 2) = "Gasto (BPD)"
17. If FIDENDEC.ComboBox2.ListIndex = 1 Then .Cells(2, 2) = "Gasto (MBPD)"
18. If FIDENDEC.ComboBox1.ListIndex = 0 Then .Cells(2, 4) = "Tiempo (m) pronóstico"
19. If FIDENDEC.ComboBox1.ListIndex = 1 Then .Cells(2, 4) = "Tiempo (a) pronóstico"
20. If FIDENDEC.ComboBox2.ListIndex = 0 Then .Cells(2, 5) = "Gasto (BPD) pronóstico"
21. If FIDENDEC.ComboBox2.ListIndex = 1 Then .Cells(2, 5) = "Gasto (MBPD) pronóstico"
22. If FIDENDEC.ComboBox2.ListIndex = 0 Then .Cells(2, 6) = "Np (B) pronóstico"
23. If FIDENDEC.ComboBox2.ListIndex = 1 Then .Cells(2, 6) = "Np (MB) pronóstico"
24. .Cells(2, 7) = "Parámetros declinación"
25. .Cells(2, 9) = "Gráficas"
26. If FIDENDEC.ComboBox1.ListIndex = 0 Then .Cells(3, 7) = "Di (mes-1):"
27. If FIDENDEC.ComboBox1.ListIndex = 1 Then .Cells(3, 7) = "Di (años-1):"
28. .Cells(4, 7) = "n:"
29. If FIDENDEC.ComboBox2.ListIndex = 0 Then .Cells(5, 7) = "qi (BPD):"
30. If FIDENDEC.ComboBox2.ListIndex = 1 Then .Cells(5, 7) = "qi (MBPD):"
31. If FIDENDEC.ComboBox2.ListIndex = 0 Then .Cells(6, 7) = "qf (BPD):"
32. If FIDENDEC.ComboBox2.ListIndex = 1 Then .Cells(6, 7) = "qf (MBPD):"
33. If FIDENDEC.ComboBox1.ListIndex = 0 Then .Cells(7, 7) = "Tiempo inicial (mes):"
34. If FIDENDEC.ComboBox1.ListIndex = 1 Then .Cells(7, 7) = "Tiempo inicial (año):"
35. If FIDENDEC.ComboBox1.ListIndex = 0 Then .Cells(8, 7) = "Tiempo final (mes):"
36. If FIDENDEC.ComboBox1.ListIndex = 1 Then .Cells(8, 7) = "Tiempo final (año):"
37. .Cells(9, 7) = "Producción acumulada:"
38. .Cells(10, 7) = "Ponóstico finalizado por:"
39. .Cells(3, 8) = DI
40. .Cells(4, 8) = N
41. .Cells(5, 8) = qi
42. If FIDENDEC.ComboBox5.ListIndex = 0 Then .Cells(10, 8) = "Gasto"
43. If FIDENDEC.ComboBox5.ListIndex = 1 Then .Cells(10, 8) = "Tiempo"
44. 'TAMAÑO
45. .Rows(2).RowHeight = 6 * 5.66
46. .Columns(3).ColumnWidth = 1
47. .Columns(7).ColumnWidth = 25
48. .Columns(9).ColumnWidth = 70
49. 'ALINEACIÓN, COMBINADO Y COLOR
50. .Range(.Cells(1, 1), .Cells(2, 9)).VerticalAlignment = xlCenter
51. .Range(.Cells(1, 1), .Cells(2, 9)).HorizontalAlignment = xlCenter
52. .Range(.Cells(1, 1), .Cells(2, 9)).WrapText = True
53. .Range(.Cells(1, 1), .Cells(1, 2)).Merge
54. .Range(.Cells(1, 4), .Cells(1, 8)).Merge
55. .Range(.Cells(2, 7), .Cells(2, 8)).Merge
56. .Range(.Cells(2, 1), .Cells(2, 2)).Interior.Color = RGB(192, 192, 192)
57. .Range(.Cells(2, 4), .Cells(2, 9)).Interior.Color = RGB(192, 192, 192)
58. .Range(.Cells(3, 6), .Cells(11, 7)).HorizontalAlignment = xlRight
59. .Range(.Cells(2, 1), .Cells(2, 2)).Borders(xlEdgeTop).LineStyle = xlContinuous
60. .Range(.Cells(2, 1), .Cells(2, 2)).Borders(xlEdgeBottom).LineStyle = xlContinuous
61. .Range(.Cells(2, 4), .Cells(2, 9)).Borders(xlEdgeTop).LineStyle = xlContinuous
62. .Range(.Cells(2, 4), .Cells(2, 9)).Borders(xlEdgeBottom).LineStyle = xlContinuous
63. For I = 1 To UBound(VecT)
64. .Cells(2 + I, 1) = VecT(I)
65. .Cells(2 + I, 2) = VecQ(I)
66. Next I

227
APÉNDICE A

67. I = 0
68. If N = 0 Then FIDENDEC.ComboBox4.ListIndex = 0
69. If N = 1 Then FIDENDEC.ComboBox4.ListIndex = 1
70. If FIDENDEC.ComboBox1.ListIndex = 0 Then AUX1 = (365 / 12)
71. If FIDENDEC.ComboBox1.ListIndex = 1 Then AUX1 = 365
72. Select Case FIDENDEC.ComboBox4.ListIndex
73. Case 0
74. If FIDENDEC.ComboBox5.ListIndex = 0 Then 'gasto
75. Do
76. I = I + 1
77. .Cells(2 + I, 4) = Val(FIDENDEC.TextBox2.Text) * I
78. .Range(.Cells(2 + I, 5), .Cells(2 + I, 5)).FormulaLocal = _
79. "=qExponencial($H$5;$H$3;" & .Cells(2 + I, 4).Address & ")"
80. .Range(.Cells(2 + I, 6), .Cells(2 + I, 6)).FormulaLocal = _
81. "=NpExponencial($H$5;$H$3;" & .Cells(2 + I, 5).Address & ")*" & _
82. CStr(AUX1)
83. Loop While .Cells(2 + I, 5) > Val(FIDENDEC.TextBox1.Text)
84. Else 'TIEMPO
85. Do
86. I = I + 1
87. .Cells(2 + I, 4) = Val(FIDENDEC.TextBox2.Text) * I
88. .Range(.Cells(2 + I, 5), .Cells(2 + I, 5)).FormulaLocal = _
89. "=qExponencial($H$5;$H$3;" & Val(FIDENDEC.TextBox2.Text) * I & ")"
90. .Range(.Cells(2 + I, 6), .Cells(2 + I, 6)).FormulaLocal = _
91. "=NpExponencial($H$5;$H$3;" & .Cells(2 + I, 5).Address & ")*" & _
92. CStr(AUX1)
93. Loop While Val(FIDENDEC.TextBox2.Text) * I < Val(FIDENDEC.TextBox1.Text)
94. End If
95. Case 1
96. If FIDENDEC.ComboBox5.ListIndex = 0 Then 'gasto
97. Do
98. I = I + 1
99. .Cells(2 + I, 4) = Val(FIDENDEC.TextBox2.Text) * I
100. .Range(.Cells(2 + I, 5), .Cells(2 + I, 5)).FormulaLocal = _
101. "=qArmonica($H$5;$H$3;" & .Cells(2 + I, 4).Address & ")"
102. .Range(.Cells(2 + I, 6), .Cells(2 + I, 6)).FormulaLocal = _
103. "=NpArmonica($H$5;$H$3;" & .Cells(2 + I, 5).Address & ")*" & CStr(AUX1)
104. Loop While .Cells(2 + I, 5) > Val(FIDENDEC.TextBox1.Text)
105. Else 'TIEMPO
106. Do
107. I = I + 1
108. .Cells(2 + I, 4) = Val(FIDENDEC.TextBox2.Text) * I
109. .Range(.Cells(2 + I, 5), .Cells(2 + I, 5)).FormulaLocal = _
110. "=qArmonica($H$5;$H$3;" & Val(FIDENDEC.TextBox2.Text) * I & ")"
111. .Range(.Cells(2 + I, 6), .Cells(2 + I, 6)).FormulaLocal = _
112. "=NpArmonica($H$5;$H$3;" & .Cells(2 + I, 5).Address & ")*" & CStr(AUX1)
113. Loop While Val(FIDENDEC.TextBox2.Text) * I < Val(FIDENDEC.TextBox1.Text)
114. End If
115. Case 2
116. If FIDENDEC.ComboBox5.ListIndex = 0 Then 'gasto
117. Do
118. I = I + 1
119. .Cells(2 + I, 4) = Val(FIDENDEC.TextBox2.Text) * I
120. .Range(.Cells(2 + I, 5), .Cells(2 + I, 5)).FormulaLocal = _
121. "=qHiperbolica($H$5;$H$3;$H$4;" & .Cells(2 + I, 4).Address & ")"
122. .Range(.Cells(2 + I, 6), .Cells(2 + I, 6)).FormulaLocal = _
123. "=NpHiperbolica($H$5;$H$3;$H$4;" & .Cells(2 + I, 5).Address & ")*" & _
124. CStr(AUX1)
125. Loop While .Cells(2 + I, 5) > Val(FIDENDEC.TextBox1.Text)
126. Else 'TIEMPO

228
APÉNDICE A

127. Do
128. I = I + 1
129. .Cells(2 + I, 4) = Val(FIDENDEC.TextBox2.Text) * I
130. .Range(.Cells(2 + I, 5), .Cells(2 + I, 5)).FormulaLocal = _
131. "=qHiperbolica($H$5;$H$3;$H$4;" & Val(FIDENDEC.TextBox2.Text) * I & ")"
132. .Range(.Cells(2 + I, 6), .Cells(2 + I, 6)).FormulaLocal = _
133. "=NpHiperbolica($H$5;$H$3;$H$4;" & .Cells(2 + I, 5).Address & ")*" & _
134. CStr(AUX1)
135. Loop While Val(FIDENDEC.TextBox2.Text) * I < Val(FIDENDEC.TextBox1.Text)
136. End If
137. End Select
138. .Cells(6, 8) = .Cells(2 + I, 5)
139. .Cells(7, 8) = .Cells(2 + 1, 4)
140. .Cells(8, 8) = .Cells(2 + I, 4)
141. .Cells(9, 8) = .Cells(2 + I, 6)
142. Set RTiempo = .Range(.Cells(3, 4), .Cells(2 + I, 4))
143. Set RGasto = .Range(.Cells(3, 5), .Cells(2 + I, 5))
144. Call GRADECLINACION(C, _
145. "='" & Hoja.Name & "'!" & .Range(.Cells(3, 4), .Cells(2 + I, 4)).Address _
146. , "='" & Hoja.Name & "'!" & .Range(.Cells(3, 5), .Cells(2 + I, 5)).Address _
147. , 1, 1, "Gasto (q) vs Tiempo (t)", "Tiempo (t)", "Gasto (q)")
148. ActiveChart.Parent.Left = Range("I3").Left + 5
149. ActiveChart.Parent.Top = Range("I3").Top + 5
150. Call GRADECLINACION(C, _
151. "='" & Hoja.Name & "'!" & .Range(.Cells(3, 5), .Cells(2 + I, 5)).Address _
152. , "='" & Hoja.Name & "'!" & .Range(.Cells(3, 6), .Cells(2 + I, 6)).Address _
153. , 1, 1, "Gasto (q) vs Prod. acumulada (Np)", _
154. "Prod. acumulada (Np)", "Gasto (q)")
155. ActiveChart.Parent.Left = Range("I18").Left + 5
156. ActiveChart.Parent.Top = Range("I18").Top + 5
157. End WithEnd Sub

27. Subrutina GRADECLINACION


1. Sub GRADECLINACION(C As Chart, x As Variant, y As Variant, esX As Integer, _
2. esY As Integer, TITULO As String, TEJEX As String, TEJEY As String)
3. 'CREA UNA GRÁFICA DE X VS Y CON UN FORMATO ESPECIAL DONDE ESX Y ESY INDICAN EL _
4. TIPO DE EJE (NORMAL O LOGARITMICO), TITULO EL TITULO DE LA GRÁFICA; TEJEX Y _
5. TEJEY SON LOS NOMBRES DE LOS EJES.
6. Dim P As Point, S As Series
7. ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
8. Set C = ActiveChart
9. With C.FullSeriesCollection(1)
10. .XValues = x
11. .Values = y
12. .MarkerStyle = 2
13. .MarkerSize = 5
14. .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
15. .Format.Line.Weight = 2
16. End With
17. For Each S In C.SeriesCollection
18. For Each P In S.Points
19. With P.Format.Fill
20. .ForeColor.RGB = RGB(255, 0, 0)
21. End With
22. Next
23. Next
24. C.PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
25. C.PlotArea.Format.Line.Weight = 2
26. C.HasTitle = True
27. C.ChartTitle.Font.name = "Arial"

229
APÉNDICE A

28. C.ChartTitle.Font.Size = 12
29. C.ChartTitle.Font.Color = RGB(250, 0, 0)
30. C.ChartTitle.Characters.Text = TITULO
31. C.Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
32. C.Axes(xlCategory).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
33. C.Axes(xlCategory).TickLabels.Font.Color = RGB(0, 0, 0)
34. C.Axes(xlCategory).TickLabels.Font.name = "Arial"
35. C.Axes(xlCategory).HasTitle = True
36. C.Axes(xlCategory).AxisTitle.Characters.Text = TEJEX '"Eje x"
37. C.Axes(xlCategory).AxisTitle.Font.name = "Arial"
38. C.Axes(xlCategory).AxisTitle.Font.Color = RGB(0, 0, 0)
39. If esX = 2 Then C.Axes(xlCategory).ScaleType = xlScaleLogarithmic
40. C.Axes(xlValue).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
41. C.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
42. C.Axes(xlValue).TickLabels.Font.Color = RGB(0, 0, 0)
43. C.Axes(xlValue).TickLabels.Font.name = "Arial"
44. C.Axes(xlValue).HasTitle = True
45. C.Axes(xlValue).AxisTitle.Characters.Text = TEJEY '"Eje 7"
46. C.Axes(xlValue).AxisTitle.Font.name = "Arial"
47. C.Axes(xlValue).AxisTitle.Font.Color = RGB(0, 0, 0)
48. If esY = 2 Then C.Axes(xlValue).ScaleType = xlScaleLogarithmic
49. C.PlotArea.Width = 300: C.PlotArea.Height = 170: C.PlotArea.Left = 30
50. C.PlotArea.Top = 20
51. C.HasLegend = False
52. C.Refresh
53. Application.DisplayAlerts = TrueEnd Sub

28. Subrutina GRAFICABASE


1. Sub GRAFICABASE(C As Chart, Caso As Integer, escX As Integer, escY As Integer, _
2. TEJEX$, TEJEY$)
3. 'CREA LA GRÁFICA BASE DE DECLINACIONES EN UNA HOJA DE EXCEL.
1. Dim ANCHO As Double
2. ActiveSheet.Shapes.AddChart2(240, xlXYScatterSmooth).Select
3. Set C = ActiveChart
4. 'Graficamos las tres series
5. Dim TDec(31) As Double, EDec(31) As Double, ADec(31) As Double, _
6. HDec(31) As Double, Dec1(31) As Double, Dec2(31) As Double, Dec3(31) As Double, _
7. Dec4(31) As Double, Dec5(31) As Double, Dec6(31) As Double
8. For I = 0 To 31
9. TDec(I) = 4 * I
10. EDec(I) = 3000 * Exp(-0.03 * TDec(I))
11. ADec(I) = 3000 / (1 + 0.3 * TDec(I))
12. HDec(I) = 3000 / ((1 + 0.1 * TDec(I) * 0.5) ^ (1 / 0.5))
13. Dec1(I) = (1 / 0.03) * (3000 - EDec(I))
14. Dec2(I) = (3000 / 0.3) * (Log(3000) - Log(ADec(I)))
15. Dec3(I) = ((1 / 0.5) / (0.1 * ((1 / 0.5) - 1))) * (3000 - (HDec(I) * (1 + (0.1 /
16. (1 / 0.5)) * TDec(I))))
17. Dec4(I) = 0.03
18. Dec5(I) = (0.3 / 3000) * ADec(I) + 2.18918918918919E-02
19. Dec6(I) = ((0.1 / ((3000) ^ 0.5)) * (HDec(I) ^ 0.5)) + 1.57142857142857E-02
20. Next I
21. With C.FullSeriesCollection(1)
22. .name = "Exponencial"
23. .MarkerStyle = -4142
24. .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
25. .Format.Line.Weight = 2
26. End With
27. C.SeriesCollection.NewSeries
28. With C.FullSeriesCollection(2)
29. .name = "Armónica"

230
APÉNDICE A

30. .MarkerStyle = -4142


31. .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
32. .Format.Line.Weight = 2
33. .Format.Line.DashStyle = msoLineSysDot
34. End With
35. C.SeriesCollection.NewSeries
36. With C.FullSeriesCollection(3)
37. .name = "Hiperbólica"
38. .MarkerStyle = -4142
39. .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
40. .Format.Line.Weight = 2
41. .Format.Line.DashStyle = msoLineDash
42. End With
43. Select Case Caso
44. Case 1
45. C.FullSeriesCollection(1).XValues = TDec
46. C.FullSeriesCollection(1).Values = EDec
47. C.FullSeriesCollection(2).XValues = TDec
48. C.FullSeriesCollection(2).Values = ADec
49. C.FullSeriesCollection(3).XValues = TDec
50. C.FullSeriesCollection(3).Values = HDec
51. Case 2
52. C.FullSeriesCollection(1).XValues = Dec1
53. C.FullSeriesCollection(1).Values = EDec
54. C.FullSeriesCollection(2).XValues = Dec2
55. C.FullSeriesCollection(2).Values = ADec
56. C.FullSeriesCollection(3).XValues = Dec3
57. C.FullSeriesCollection(3).Values = HDec
58. Case 3
59. C.FullSeriesCollection(1).XValues = EDec
60. C.FullSeriesCollection(1).Values = Dec4
61. C.FullSeriesCollection(2).XValues = ADec
62. C.FullSeriesCollection(2).Values = Dec5
63. C.FullSeriesCollection(3).XValues = HDec
64. C.FullSeriesCollection(3).Values = Dec6
65. End Select
66. C.PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
67. C.PlotArea.Format.Line.Weight = 2
68. C.HasTitle = True
69. C.ChartTitle.Font.name = "Arial"
70. C.ChartTitle.Font.Size = 12
71. C.ChartTitle.Font.Color = RGB(250, 0, 0)
72. C.ChartTitle.Characters.Text = "Gráfica base"
73. C.Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
74. C.Axes(xlCategory).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
75. C.Axes(xlCategory).TickLabels.Font.Color = RGB(256, 256, 256)
76. C.Axes(xlCategory).HasTitle = True
77. C.Axes(xlCategory).AxisTitle.Characters.Text = TEJEX '"Eje x"
78. C.Axes(xlCategory).AxisTitle.Font.name = "Arial"
79. C.Axes(xlCategory).AxisTitle.Font.Color = RGB(0, 0, 0)
80. If escX = 2 Then C.Axes(xlCategory).ScaleType = xlScaleLogarithmic
81. C.Axes(xlValue).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
82. C.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
83. C.Axes(xlValue).TickLabels.Font.Color = RGB(256, 256, 256)
84. C.Axes(xlValue).HasTitle = True
85. C.Axes(xlValue).AxisTitle.Characters.Text = TEJEY '"Eje 7"
86. C.Axes(xlValue).AxisTitle.Font.name = "Arial"
87. C.Axes(xlValue).AxisTitle.Font.Color = RGB(0, 0, 0)
88. If escY = 2 Then C.Axes(xlValue).ScaleType = xlScaleLogarithmic
89. ANCHO = C.PlotArea.Width

231
APÉNDICE A

90. C.HasLegend = True


91. C.PlotArea.Width = ANCHO
92. C.Legend.Left = C.PlotArea.InsideWidth + C.PlotArea.InsideLeft - C.Legend.Width - 5
93. C.Legend.Top = C.PlotArea.InsideTop + 5
94. C.Legend.Format.Fill.ForeColor.RGB = RGB(256, 256, 256)
95. C.Legend.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
96. C.Refresh
97. End Sub

29. Subrutina GRAFICATOIMAGEN


1. Sub GRAFICATOIMAGEN(C As Chart, Imagen As MSForms.Image)
2. 'CONVIERTE UNA GRÁFICA DE EXCEL A IMÁGEN Y LA COLOCA EN UN OBJETO IMAGE.
3. On Error Resume Next
4. Fname = ThisWorkbook.Path & Application.PathSeparator & "temp.bmp"
5. C.Export Filename:=Fname, FilterName:="BMP"
6. C.ChartArea.Select
7. C.Parent.Delete
8. Imagen.Picture = LoadPicture(Fname)
9. End Sub

30. Subrutina VERIFICARDATOS


1. Sub VERIFICARDATOS()
2. On Error Resume Next
3. Set RTiempo = Range(FIDENDEC.RefEdit1.Text)
4. Set RGasto = Range(FIDENDEC.RefEdit2.Text)
5.
6. If RTiempo.Columns.Count <> RGasto.Columns.Count Or RTiempo.Rows.Count <>
7. RGasto.Rows.Count Then
8. MsgBox "No coincide el tamaño de rangos", vbCritical, "Error"
9. Status = "No"
10. Exit Sub
11. Else
12. Status = "Si"
13. End If
14. Call RANGOAVECTOR(RTiempo, VecT)
15. Call RANGOAVECTOR(RGasto, VecQ)
16. Ele = UBound(VecT)
17. If Ele < 3 Then
18. MsgBox "Se necesitan al menos tres puntos para el modelo", vbExclamation, "Error"
19. Status = "No"
20. Exit Sub
21. End If
22. End Sub

31. Subrutina LEERRANGO


1. Sub LEERRANGO(R As Range, Texto As String, TITULO As String)
2. 'LEE UN RANGO Y LO GUARDA EN R.
3. On Error GoTo Cancelado:
4. Set R = Application.InputBox(Prompt:=Texto, Title:=TITULO, Type:=8)
5. R.Select
6. Cancelado:
7. End Sub

32. Subrutina RANGOAVECTOR


1. Sub RANGOAVECTOR(R As Range, V() As Double)
2. 'CONVIERTE UN RANGO R A UN VECTOR V.
3. Redim V(R.Rows.Count)
4. For I = 1 To R.Rows.Count
5. V(I) = R.Rows(I)

232
APÉNDICE A

6. Next I
7. End Sub

33. Declaraciones y rutinas generales.


1. Option Explicit
2. Public I%, J% , C As Chart
3. Sub Regresion(x() As Double, y() As Double, Pen As Double, Ord As Double, _
4. Ele As Integer)
5. Dim sumxy#, sumx#, sumy#, sumx2#
6. Pen = 0: Ord = 0
7. For I = 1 To Ele
8. sumxy = sumxy + x(I) * y(I)
9. sumx = sumx + x(I)
10. sumy = sumy + y(I)
11. sumx2 = sumx2 + x(I) * x(I)
12. Next I
13. Pen = (sumxy - ((sumy * sumx) / Ele)) / (sumx2 - ((sumx * sumx) / Ele))
14. Ord = (sumy / Ele) - (Pen * sumx / Ele)
15. End Sub
16. Function RangeExists(R As String) As Boolean
17. 'VERIFICA QUE UN RANGO EXISTA
18. Dim Test As Range
19. On Error Resume Next
20. Set Test = ActiveSheet.Range(R)
21. RangeExists = Err.Number = 0
22. End Function
23. Function VALOR(S As String)
24. 'CALCULA EL VALOR DE LO ESCRITO EN UNA CELDA
25. If RangeExists(S) = True Then
26. VALOR = Range(S).Value
27. Else
28. VALOR = Val(S)
29. End If
30. End Function

233
APÉNDICE B

Apéndice B
APÉNDICE B
Contenido del apéndice:

1. Descripción del formulario FEBM y sus componentes principales.


2. Lista de variables usadas y sus unidades.
3. Declaración de variables principales.
4. Subrutina ejecutada por el Botón Método de Tracy.
5. Subrutina del botón Método de Muskat.
6. Subrutina del botón Método de Tarner
7. Subrutina EBMTRACY
8. Subrutina EBMMUSKAT.
9. Subrutina EBMTARNER.
10. Subrutina INTERPOLA.
11. Subrutina MOSTRARRESULTADOS.
12. Declaraciones y rutinas generales.

1. Descripción del formulario FEBM y sus componentes principales.


El formulario FEBM (Figura B. 1) cuenta principalmente con objetos RefEdit que permiten ingresar
datos desde celdas de Excel o escribirlos directamente, también cuenta con dos botones para
interactuar con el usuario. Los objetos restantes son Frame y Label para ayuda visual. La
descripción de los elementos principales se encuentra en la Tabla B. 1.

Figura B. 1 Formulario FEBM con sus componentes principales.

234
APÉNDICE B

Tabla B. 1 Descripción de los elementos principales del formulario FEBM.


Número Objeto Descripción
1 RefEdit Propiedad name: RefEditN
2 RefEdit Propiedad name: RefEditSwi
2 RefEdit Propiedad name: RefEdiTP
3 RefEdit Propiedad name: RefEditBO
4 RefEdit Propiedad name: RefEditBG
5 RefEdit Propiedad name: RefEditRS
6 RefEdit Propiedad name: RefEditVISOVISG
7 RefEdit Propiedad name: RefEditSG
8 RefEdit Propiedad name: RefEditKRGKRO
Botón llamado CommandButton2 que cierra el formulario si no se
10 CommandButton
realiza alguna acción.
Botón llamado CommandButton1 que lee los datos ingresados
11 CommandButton
por el usuario.

El código asociado al formulario FEBM es el siguiente:


1. Private Sub CommandButton1_Click()
2. 'LEER DATOS Y ASIGNARLOS A VARIABLES
3. On Error GoTo Error1:
4. 'Presion
5. Set RangoAux = Range(RefEdiTP.Value)
6. Call RANGOAVECTOR(RangoAux, Presion)
7. 'Bo
8. Set RangoAux = Range(RefEditBO.Value)
9. Call RANGOAVECTOR(RangoAux, BO)
10. 'Bg
11. Set RangoAux = Range(RefEditBG.Value)
12. Call RANGOAVECTOR(RangoAux, BG)
13. 'Rs
14. Set RangoAux = Range(RefEditRS.Value)
15. Call RANGOAVECTOR(RangoAux, RS)
16. 'mOmG
17. Set RangoAux = Range(RefEditVISOVISG.Value)
18. Call RANGOAVECTOR(RangoAux, MoMg)
19. 'Sg
20. Set RangoAux = Range(RefEditSG.Value)
21. Call RANGOAVECTOR(RangoAux, VecSg)
22. 'KrgKro
23. Set RangoAux = Range(RefEditKRGKRO.Value)
24. Call RANGOAVECTOR(RangoAux, VecKrgKro)
25. 'N
26. N = VALOR(RefEditN.Value)
27. 'Swi
28. Swi = VALOR(RefEditSWI.Value)
29. AUX1 = 1
30. Unload Me
31. Exit Sub
32. Error1:
33. MsgBox "Error en los datos", vbExclamation, "Error EMB Tracy"
34. AUX1 = 0
35. End Sub

235
APÉNDICE B

36.
37. Private Sub CommandButton2_Click()
38. AUX1 = 0
39. Unload Me
40. End Sub

2. Lista de variables usadas y sus unidades.


1. '************************ VARIABLES DESCRIPCIÓN Y UNIDADES **************************
2. ' VARIABLE DESCRIPCIÓN
3. ' Presion() VECTOR QUE ALMACENA DATOS DE PRESIÓN (LPCA)
4. ' Gp() VECTOR QUE ALMACENA DATOS DE GAS PRODUCIDO (PIE3)
5. ' BO() VECTOR QUE ALMACENA DATOS DE FACTOR DE VOLUMEN DEL ACEITE (BL/BL)
6. ' BG() VECTOR QUE ALMACENA DATOS DE FACTOR DE VOLUMEN DEL GAS (PIE3/BL)
7. ' RS() VECTOR QUE ALMACENA DATOS DE RELACIÓN DE SOLUBILIDAD(PIE3/BL)
8. ' MoMg() VECTOR QUE ALMACENA DATOS DE RELACIÓN DE VISCOSIDADES (-)
9. ' VecSg() VECTOR QUE ALMACENA DATOS DE SATURACIÓN DE GAS (-)
10. ' VecKrgKro() VECTOR QUE ALMACENA DATOS DE RELACIÓN DE PERMEABILIDADES RELATIVAS.
11. ' InvBg() VECTOR QUE ALMACENA EL INVERSO DEL FACTOR DE VOLUMEN DEL GAS
12. ' So() VECTOR QUE ALMACENA DATOS DE SATURACIÓN DE ACEITE
13. ' Sg() VECTOR QUE ALMACENA DATOS DE SATURACIÓN DE GAS
14. ' RGA() VECTOR QUE ALMACENA DATOS DE RELACIÓN GAS-ACEITE
15. ' Swi VARIABLE QUE ALMACENA LA SATURACIÓN DE AGUA INICIAL
16. ' N VARIABLE QUE ALMACENA EL VOLUMEN ORIGINAL DE ACEITE.
17. ' AUX1 VARIABLE AUXILIAR
18. ' NombreHojaEBM VARIABLE QUE ALMACENA EL NOMBRE DE LA HOJA PARA INSERTAR RESULTADOS
19. ' HojaEBM OBJETO HOJA USADO PARA CREAR UNA NUEVA HOJA.

3. Declaración de variables principales.


1. Option Explicit
2. Public Presion() As Double, Gp() As Double, BO() As Double, BG() As Double, _
3. RS() As Double, MoMg() As Double, VecSg() As Double, VecKrgKro() As Double, _
4. InvBg() As Double, So() As Double, Sg() As Double, RGA() As Double, Swi#, _
5. N#, AUX1#, NombreHojaEBM As String, HojaEBM As Worksheet

4. Subrutina ejecutada por el Botón Método de Tracy.


1. Sub BOTON_TRACY()
2. 'MUESTRA EL FORULARIO FEBM Y UNA VEZ UNTRODUCIDOS LOS DATOS, LLAMA A EBMTRACY.
3. FEBM.Show
4. If AUX1 = 0 Then Exit Sub
5. Call EBMTRACY(Presion, BO, BG, RS, MoMg, VecSg, VecKrgKro, N, Swi)
6. End Sub

5. Subrutina del botón Método de Muskat.


1. Sub BOTON_MUSKAT()
2. 'MUESTRA EL FORULARIO FEBM Y UNA VEZ UNTRODUCIDOS LOS DATOS, LLAMA A EBMMUSKAT.
3. FEBM.Show
4. If AUX1 = 0 Then Exit Sub
5. Call EBMMUSKAT(Presion, BO, BG, RS, MoMg, VecSg, VecKrgKro, N, Swi)
6. End Sub

6. Subrutina del botón Método de Tarner.


1. Sub BOTON_TARNER()
2. 'MUESTRA EL FORULARIO FEBM Y UNA VEZ UNTRODUCIDOS LOS DATOS, LLAMA A EBMTARNER.
3. FEBM.Show
4. If AUX1 = 0 Then Exit Sub
5. Call EBMTARNER(Presion, BO, BG, RS, MoMg, VecSg, VecKrgKro, N, Swi)
6. End Sub

236
APÉNDICE B

7. Subrutina EBMTRACY.
1. Sub EBMTRACY(P() As Double, BO() As Double, BG() As Double, RS() As Double, _
2. MoMg() As Double, VecSg() As Double, VecKrgKro() As Double, N#, Swi#)
3. 'CALCULA LA PRODUCCIÓN ACUMULADA Y GAS ACUMULADO POR MEDIO DE LA ECUACIÓN DE _
4. BALANCE DE MATERIA CON EL MÉTODO DE TRACY.
5. Dim RGA1#, KrgKroint#, DEN#, FiO#, FiG#, dNp#
6. AUX1 = Ubound(P) + Ubound(BO) + Ubound(BG) + Ubound(RS) + Ubound(MoMg)
7. Ele = Ubound(P)
8. If (AUX1 / 5) <> Ele Then
9. MsgBox "No coinciden los datos", vbCritical, "Error"
10. Exit Sub
11. Else
12. Redim Np(Ele): Redim Gp(Ele): Redim RGA(Ele): Redim So(Ele): Redim Sg(Ele)
13. So(1) = 1 - Swi: Sg(1) = 0: RGA(1) = RS(1): Np(1) = 0: Gp(1) = 0
14. For I = 2 To Ubound(P)
15. DEN = (BO(I) - BO(1)) + (RS(1) - RS(I)) * BG(I)
16. FiO = (BO(I) - RS(I) * BG(I)) / DEN
17. FiG = BG(I) / DEN
18. RGA(I) = RS(I)
19. Do
20. RGA1 = RGA(I)
21. dNp = (1 - (Np(I - 1) * FiO + Gp(I - 1) * FiG)) / (FiO + RGA1 * FiG)
22. Np(I) = Np(I - 1) + dNp
23. So(I) = (1 - Swi) * (1 - Np(I)) * (BO(I) / BO(1))
24. Sg(I) = 1 - So(I) - Swi
25. KrgKroint = INTERPOLA(VecSg, VecKrgKro, Sg(I))
26. RGA(I) = RS(I) + (KrgKroint * MoMg(I) * BO(I) / BG(I))
27. Loop While Abs((RGA(I) - RGA1) / RGA(I)) > 0.01
28. Gp(I) = Gp(I - 1) + RGA(I) * dNp
29. Next I
30. Call MOSTRARRESULTADOS(P, So, Sg, RGA, Np, Gp, N)
31. End If
32. End Sub

8. Subrutina EBMMUSKAT.
1. Sub EBMMUSKAT(P() As Double, BO() As Double, BG() As Double, RS() As Double, _
2. MoMg() As Double, VecSg() As Double, VecKrgKro() As Double, N#, Swi#)
3. 'CALCULA LA PRODUCCIÓN ACUMULADA Y GAS ACUMULADO POR MEDIO DE LA ECUACIÓN DE _
4. BALANCE DE MATERIA CON EL MÉTODO DE MUSKAT.
5. Dim dRs#, dBo#, d1Bg#, dSo#, dSo1#, dSo2#, KrgKroint#, Xp#, Yp#, Zp#
6. AUX1 = Ubound(P) + Ubound(BO) + Ubound(BG) + Ubound(RS) + Ubound(MoMg)
7. Ele = Ubound(P)
8. If (AUX1 / 5) <> Ele Then
9. MsgBox "No coinciden los datos", vbCritical, "Error"
10. Exit Sub
11. Else
12. Redim Np(Ele): Redim Gp(Ele): Redim RGA(Ele): Redim So(Ele): Redim Sg(Ele)
13. Redim InvBg(Ele)
14. For I = 1 To Ele
15. InvBg(I) = 1 / BG(I)
16. Next I
17. Call Regresion(P, BO, dBo, AUX1, Ele)
18. Call Regresion(P, RS, dRs, AUX1, Ele)
19. Call Regresion(P, InvBg, d1Bg, AUX1, Ele)
20. So(1) = 1 - Swi: Sg(1) = 0: RGA(1) = RS(1): Np(1) = 0: Gp(1) = 0
21. For I = 2 To Ele
22. If I = 2 Then
23. dSo1 = (1 - Swi) * (BG(1) / BO(1)) * dRs
24. Else
25. dSo1 = (So(I - 1) * Xp + So(I - 1) * KrgKroint * Yp + Sg(I - 1) * Zp) / _

237
APÉNDICE B

26. (1 + MoMg(I) * KrgKroint)


27. End If
28. So(I) = So(I - 1) - (P(I - 1) - P(I)) * dSo1
29. Sg(I) = 1 - So(I) - Swi
30. KrgKroint = INTERPOLA(VecSg, VecKrgKro, Sg(I))
31. Xp = (BG(I) / BO(I)) * dRs
32. Yp = (1 / BO(I)) * MoMg(I) * dBo
33. Zp = BG(I) * d1Bg
34. dSo2 = (So(I) * Xp + So(I) * KrgKroint * Yp + Sg(I) * Zp) / _
35. (1 + MoMg(I) * KrgKroint)
36. dSo = (dSo1 + dSo2) / 2
37. So(I) = So(I - 1) - (P(I - 1) - P(I)) * dSo
38. Sg(I) = 1 - So(I) - Swi
39. Np(I) = (1 - (BO(1) / BO(I)) * (So(I) / (1 - Swi)))
40. KrgKroint = INTERPOLA(VecSg, VecKrgKro, Sg(I))
41. RGA(I) = RS(I) + KrgKroint * MoMg(I) * (BO(I) / BG(I))
42. Gp(I) = Np(I) * RGA(I)
43. Next I
44. Call MOSTRARRESULTADOS(P, So, Sg, RGA, Np, Gp, N)
45. End If
46. End Sub

9. Subrutina EBMTARNER.
1. Sub EBMTARNER(P() As Double, BO() As Double, BG() As Double, RS() As Double, _
2. MoMg() As Double, VecSg() As Double, VecKrgKro() As Double, N#, Swi#)
3. 'CALCULA LA PRODUCCIÓN ACUMULADA Y GAS ACUMULADO POR MEDIO DE LA ECUACIÓN DE _
4. BALANCE DE MATERIA CON EL MÉTODO DE TARNER.
5. Dim Gp2m#, Gp2r#, KrgKroint#
6. AUX1 = Ubound(P) + Ubound(BO) + Ubound(BG) + Ubound(RS) + Ubound(MoMg)
7. Ele = Ubound(P)
8. If (AUX1 / 5) <> Ele Then
9. MsgBox "No coinciden los datos", vbCritical, "Error"
10. Exit Sub
11. Else
12. Redim Np(Ele): Redim Gp(Ele): Redim RGA(Ele): Redim So(Ele): Redim Sg(Ele)
13. So(1) = 1 - Swi: Sg(1) = 0: RGA(1) = RS(1): Np(1) = 0: Gp(1) = 0
14. Np(2) = 0.01
15. For I = 2 To Ele
16. If I > 2 Then Np(I) = Np(I - 1)
17. Do
18. Gp2m = ((RS(1) - RS(I)) - ((BO(1) - BO(I)) / BG(I))) - _
19. Np(I) * ((BO(I) / BG(I)) - RS(I))
20. For J = 1 To I - 1
21. Gp2m = Gp2m - Gp(J)
22. Next J
23. So(I) = (1 - Swi) * (1 - (Np(I) / 1)) * (BO(I) / BO(1))
24. Sg(I) = 1 - So(I) - Swi
25. KrgKroint = INTERPOLA(VecSg, VecKrgKro, Sg(I))
26. RGA(I) = RS(I) + KrgKroint * MoMg(I) * (BO(I) / BG(I))
27. Gp2r = ((RGA(I - 1) + RGA(I)) / 2) * (Np(I) - Np(I - 1))
28. Np(I) = Np(I) + ((Gp2m - Gp2r) / Abs(Gp2m - Gp2r)) * 0.0001
29. Loop While Abs((Gp2m - Gp2r) / Gp2m) > 0.01
30. Gp(I) = Gp2m
31. Next I
32. Call MOSTRARRESULTADOS(P, So, Sg, RGA, Np, Gp, N)
33. End If
34. End Sub

10. Subrutina INTERPOLA.


1. Function INTERPOLA(x() As Double, y() As Double, Xi As Double)

238
APÉNDICE B

2. 'FUNCION QUE INTERPOLA LINEALMENTE ENTRE LOS VECTORES X E Y PARA UN VALOR DE XI.
3. J = 1
4. Do While Xi > x(J) And J < Ubound(x) - 1
5. J = J + 1
6. Loop
7. If J > 1 Then
8. INTERPOLA = ((y(J + 1) - y(J)) / (x(J + 1) - x(J))) * (Xi - x(J)) + y(J)
9. Else
10. INTERPOLA = ((y(J) - y(J - 1)) / (x(J) - x(J - 1))) * (Xi - x(J - 1)) + y(J - 1)
11. End If
12. End Function

11. Subrutina MOSTRARRESULTADOS.


1. Sub MOSTRARRESULTADOS(P() As Double, So() As Double, Sg() As Double, _
2. RGA() As Double, Np() As Double, Gp() As Double, N As Double)
3. 'MUESTRA LOS DATOS CALCULADOS EN UN FORMATO ESPECIAL.
4. NombreHojaEBM = InputBox("Escriba el nombre de la hoja de resultados", "Resultados")
5. If NombreHojaEBM = "" Then Exit Sub
6. Set HojaEBM = ActiveWorkbook.Sheets.Add
7. HojaEBM.name = NombreHojaEBM
8. With HojaEBM
9. .Cells(1, 1) = "Ecuación de balance de materia " & NombreHojaEBM
10. Range(.Cells(1, 1), .Cells(1, 6)).Merge
11. Range(.Cells(1, 1), .Cells(1, 6)).HorizontalAlignment = xlCenter
12. .Cells(2, 1) = "p (lpc)"
13. .Cells(2, 2) = "So"
14. .Cells(2, 3) = "Sg"
15. .Cells(2, 4) = "RGA (pies3/bl)"
16. .Cells(2, 5) = "Np (bl)"
17. .Cells(2, 6) = "Gp (pie3)"
18. Range(.Cells(2, 1), .Cells(2, 6)).Select
19. With Selection
20. .HorizontalAlignment = xlCenter
21. .VerticalAlignment = xlCenter
22. .Rows.RowHeight = 5 * 5.66
23. .Borders(xlEdgeTop).LineStyle = xlContinuous
24. .Borders(xlEdgeBottom).LineStyle = xlContinuous
25. .Interior.Color = RGB(192, 192, 192)
26. End With
27. For I = 1 To Ubound(P)
28. .Cells(I + 2, 1) = P(I)
29. .Cells(I + 2, 2) = So(I)
30. .Cells(I + 2, 3) = Sg(I)
31. .Cells(I + 2, 4) = RGA(I)
32. .Cells(I + 2, 5) = Np(I) * N
33. .Cells(I + 2, 6) = Gp(I) * N
34. Next I
35. End With
36. 'GRAFICA 1 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
37. Hoja.Shapes.AddChart.Select
38. ActiveChart.ChartType = xlXYScatterSmooth
39. ActiveChart.ChartArea.ClearContents
40. If ActiveChart.SeriesCollection.Count = 0 Then ActiveChart.SeriesCollection.NewSeries
41. With ActiveChart.FullSeriesCollection(1)
42. .XValues = Hoja.Range(Hoja.Cells(3, 1), Hoja.Cells(1 + I, 1))
43. .Values = Hoja.Range(Hoja.Cells(3, 5), Hoja.Cells(1 + I, 5))
44. .MarkerStyle = 2: .MarkerSize = 5
45. .Format.Line.ForeColor.RGB = RGB(255, 0, 0): .Format.Line.Weight = 2
46. End With
47. For Each Serie In ActiveChart.SeriesCollection

239
APÉNDICE B

48. For Each Punto In Serie.Points


49. With Punto.Format.Fill
50. .ForeColor.RGB = RGB(255, 0, 0)
51. End With
52. Next
53. Next
54. With ActiveChart
55. .PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
56. .PlotArea.Format.Line.Weight = 2
57. .HasTitle = False: .HasTitle = True
58. .SetElement (msoElementChartTitleAboveChart)
59. .ChartTitle.Font.Name = "Arial": .ChartTitle.Font.Size = 12
60. .ChartTitle.Font.Color = RGB(250, 0, 0)
61. .ChartTitle.Characters.Text = "Producción acumulada (Aceite)"
62.
63. .Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
64. .Axes(xlCategory).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
65. .Axes(xlCategory).TickLabels.Font.Color = RGB(0, 0, 0)
66. .Axes(xlCategory).TickLabels.Font.Name = "Arial"
67. .Axes(xlCategory).HasTitle = True
68. .Axes(xlCategory).AxisTitle.Characters.Text = "Presión (lpc)" '"Eje X"
69. .Axes(xlCategory).AxisTitle.Font.Name = "Arial"
70. .Axes(xlCategory).AxisTitle.Font.Color = RGB(0, 0, 0)
71. .Axes(xlCategory).Crosses = xlMaximum
72. .Axes(xlCategory).ReversePlotOrder = True
73.
74. .Axes(xlValue).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
75. .Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
76. .Axes(xlValue).TickLabels.Font.Color = RGB(0, 0, 0)
77. .Axes(xlValue).TickLabels.Font.Name = "Arial"
78. .Axes(xlValue).HasTitle = True
79. .Axes(xlValue).AxisTitle.Characters.Text = "Np (B)" '"Eje Y"
80. .Axes(xlValue).AxisTitle.Font.Name = "Arial"
81. .Axes(xlValue).AxisTitle.Font.Color = RGB(0, 0, 0)
82.
83. .PlotArea.Width = 300: .PlotArea.Height = 170: .PlotArea.Left = 30:
84. .PlotArea.Top = 20
85. .HasLegend = False
86. .Parent.Left = Range("G3").Left + 5
87. .Parent.Top = Range("G3").Top + 5
88.
89. .Refresh
90. End With
91.
92. 'GRAFICA 2 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
93. Hoja.Shapes.AddChart.Select
94. ActiveChart.ChartType = xlXYScatterSmooth
95. ActiveChart.ChartArea.ClearContents
96. If ActiveChart.SeriesCollection.Count = 0 Then ActiveChart.SeriesCollection.NewSeries
97. With ActiveChart.FullSeriesCollection(1)
98. .XValues = Hoja.Range(Hoja.Cells(3, 1), Hoja.Cells(1 + I, 1))
99. .Values = Hoja.Range(Hoja.Cells(3, 6), Hoja.Cells(1 + I, 6))
100. .MarkerStyle = 2: .MarkerSize = 5
101. .Format.Line.ForeColor.RGB = RGB(255, 0, 0): .Format.Line.Weight = 2
102. End With
103. For Each Serie In ActiveChart.SeriesCollection
104. For Each Punto In Serie.Points
105. With Punto.Format.Fill
106. .ForeColor.RGB = RGB(255, 0, 0)
107. End With

240
APÉNDICE B

108. Next
109. Next
110. With ActiveChart
111. .PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
112. .PlotArea.Format.Line.Weight = 2
113. .HasTitle = False: .HasTitle = True
114. .SetElement (msoElementChartTitleAboveChart)
115. .ChartTitle.Font.Name = "Arial": .ChartTitle.Font.Size = 12
116. .ChartTitle.Font.Color = RGB(250, 0, 0)
117. .ChartTitle.Characters.Text = "Producción acumulada (Gas)"
118.
119. .Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
120. .Axes(xlCategory).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
121. .Axes(xlCategory).TickLabels.Font.Color = RGB(0, 0, 0)
122. .Axes(xlCategory).TickLabels.Font.Name = "Arial"
123. .Axes(xlCategory).HasTitle = True
124. .Axes(xlCategory).AxisTitle.Characters.Text = "Presión (lpc)" '"Eje X"
125. .Axes(xlCategory).AxisTitle.Font.Name = "Arial"
126. .Axes(xlCategory).AxisTitle.Font.Color = RGB(0, 0, 0)
127. .Axes(xlCategory).Crosses = xlMaximum
128. .Axes(xlCategory).ReversePlotOrder = True
129.
130. .Axes(xlValue).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
131. .Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
132. .Axes(xlValue).TickLabels.Font.Color = RGB(0, 0, 0)
133. .Axes(xlValue).TickLabels.Font.Name = "Arial"
134. .Axes(xlValue).HasTitle = True
135. .Axes(xlValue).AxisTitle.Characters.Text = "Gp (Pie3)" '"Eje Y"
136. .Axes(xlValue).AxisTitle.Font.Name = "Arial"
137. .Axes(xlValue).AxisTitle.Font.Color = RGB(0, 0, 0)
138.
139. .PlotArea.Width = 300: .PlotArea.Height = 170: .PlotArea.Left = 30:
140. .PlotArea.Top = 20
141. .HasLegend = False
142. .Parent.Left = Range("G18").Left + 5
143. .Parent.Top = Range("G18").Top + 5
144.
145. .Refresh
146. End With
147. End Sub

12. Declaraciones y rutinas generales.


1. Option Explicit
2. Public I%, J% , C As Chart
3. Sub Regresion(x() As Double, y() As Double, Pen As Double, Ord As Double, _
4. Ele As Integer)
5. Dim sumxy#, sumx#, sumy#, sumx2#
6. Pen = 0: Ord = 0
7. For I = 1 To Ele
8. sumxy = sumxy + x(I) * y(I)
9. sumx = sumx + x(I)
10. sumy = sumy + y(I)
11. sumx2 = sumx2 + x(I) * x(I)
12. Next I
13. Pen = (sumxy - ((sumy * sumx) / Ele)) / (sumx2 - ((sumx * sumx) / Ele))
14. Ord = (sumy / Ele) - (Pen * sumx / Ele)
15. End Sub
16. Function RangeExists(R As String) As Boolean
17. 'VERIFICA QUE UN RANGO EXISTA
18. Dim Test As Range

241
APÉNDICE B

19. On Error Resume Next


20. Set Test = ActiveSheet.Range(R)
21. RangeExists = Err.Number = 0
22. End Function
23. Function VALOR(S As String)
24. 'CALCULA EL VALOR DE LO ESCRITO EN UNA CELDA
25. If RangeExists(S) = True Then
26. VALOR = Range(S).Value
27. Else
28. VALOR = Val(S)
29. End If
30. End Function

242
APÉNDICE C

Apéndice C
APÉNDICE C
Contenido del apéndice:

1. Descripción del formulario FPROPYAC y sus componentes principales.


2. Descripción del formulario FPROPFLUI y sus componentes principales.
3. Descripción del formulario FPOZO y sus componentes principales.
4. Descripción del formulario FCONDINI y sus componentes principales.
5. Lista de variables usadas y sus unidades.
6. Declaración de variables principales.
7. Subrutina ejecutada por el Botón Propiedades del yacimiento.
8. Subrutina del botón Propiedades del fluido.
9. Subrutina del botón Crear modelo.
10. Subrutina del botón Insertar pozo inyector.
11. Subrutina del botón Insertar pozo productor.
12. Subrutina del botón Condiciones iniciales.
13. Subrutina del botón Simular.
14. Subrutina del botón Gráfica Mapa distribución de presión.
15. Subrutina del botón Gráfica Distribución de presión 3D.
16. Subrutina CREARYACIMIENTO.
17. Subrutina SIMULAR.
18. Subrutina MAPA2D.
19. Subrutina SUPERFICIE3D.
20. Subrutina ESCALA.
21. Subrutina COLORESRGB.
22. Subrutina DECOMP Y SOLVE.
23. Declaraciones y rutinas generales.

243
APÉNDICE C

1. Descripción del formulario FPROPYAC y sus componentes principales.


El formulario FPROPYAC (Figura C. 1) se compone de objetos RefEdit para leer los datos
necesarios para la simulación de yacimientos, tiene dos botones para interactuar con el usuario,
los objetos restantes son Frame y etiquetas para ayuda visual. Las características principales de
los objetos numerados se encuentran en la Tabla C. 1.

Figura C. 1 Formulario FPROPYAC con sus


componentes principales.

Tabla C. 1 Descripción de los elementos principales del formulario FPROPYAC.


Número Objeto Descripción
1 RefEdit Propiedad name: RefEditNX
2 RefEdit Propiedad name: RefEditNY
3 RefEdit Propiedad name: RefEditDX
4 RefEdit Propiedad name: RefEditDY
5 RefEdit Propiedad name: RefEditH
6 RefEdit Propiedad name: RefEditKX
7 RefEdit Propiedad name: RefEditKY
8 RefEdit Propiedad name: RefEditCFORM
9 RefEdit Propiedad name: RefEdiTPORO
Botón llamado CommandButton2 que cierra el formulario si no se
10 CommandButton
realiza alguna acción.
Botón llamado CommandButton1 que lee los datos ingresados
11 CommandButton
por el usuario.

El código asociado al formulario FPROPYAC es el siguiente:


1. Private Sub CommandButton1_Click()
2. 'LEE DATOS DE PROPIEDADES DEL YACIMIENTO
3. Nx = VALOR(RefEditNX.Value)
4. Ny = VALOR(RefEditNY.Value)
5. deltaX = VALOR(RefEditDX.Value)
6. deltaY = VALOR(RefEditDY.Value)

244
APÉNDICE C

7. H = VALOR(RefEditH.Value)
8. kx = VALOR(RefEditKX.Value)
9. ky = VALOR(RefEditKY.Value)
10. Cf = VALOR(RefEditCFORM.Value)
11. Poro = VALOR(RefEdiToORO.Value)
12. kx = kx / 1000
13. ky = ky / 1000
14. Redim Presion(Nx * Ny)
15. Redim qsc(Nx * Ny)
16. Unload Me
17. End Sub
18.
19. Private Sub CommandButton2_Click()
20. Unload Me
21. End Sub

2. Descripción del formulario FPROPFLUI y sus componentes principales.


El formulario FPROPFLUI (Figura C. 2) se compone de objetos RefEdit para ingreso de datos y
CommandButton para aceptar los datos o cancelar principalmente, adicionalmente contiene Frame
y Label para ayuda visual. Las características principales de los objetos numerados se encuentran
en la Tabla C. 2.

Figura C. 2 Formulario FPROPFLUI con sus componentes principales.

Tabla C. 2 Descripción de los elementos principales del formulario FPROPFLUI.


Número Objeto Descripción
1 RefEdit Propiedad name: RefEditVISO
2 RefEdit Propiedad name: RefEditCFLUI
3 RefEdit Propiedad name: RefEditBO
Botón llamado CommandButton2 que cierra el formulario si no se
4 CommandButton
realiza alguna acción.
Botón llamado CommandButton1 que lee los datos ingresados
5 CommandButton
por el usuario.

El código asociado al formulario FPROPFLUI es:


1. Private Sub CommandButton1_Click()
2. 'LEE DATOS DE PROPIEDADES DEL FLUIDO
3. mu = VALOR(RefEditVISO.Value)
4. CO = VALOR(RefEditCFLUI.Value)
5. B = VALOR(RefEditBO.Value)
6. Unload Me
7. End Sub
8. Private Sub CommandButton2_Click()
9. Unload Me

245
APÉNDICE C

10. End Sub


3. Descripción del formulario FPOZO y sus componentes principales.
El formulario FPOZO (Figura C. 3) se compone de objetos RefEdit para ingreso de datos y
CommandButton para aceptar o cancelar principalmente, adicionalmente contiene Frame y Label
para ayuda visual. La descripción de los objetos principales se encuentra en la Tabla C. 3.

Figura C. 3 Formulario FPOZO con sus componentes principales.

Tabla C. 3 Descripción de los elementos principales del formulario FPOZO.


Número Objeto Descripción
OptionButton1 y OptionButton2 para seleccionar que variable se
1 OptionButton
conoce en el pozo
2 RefEdit RegEditQ almacena la variable de interés
3 ComboBox ComboBox1 para enlistar las celdas disponibles
Botón llamado CommandButton2 que cierra el formulario si no se
4 CommandButton
realiza alguna acción.
Botón llamado CommandButton1 que lee los datos ingresados
5 CommandButton
por el usuario.

El código asociado al formulario FPOZO es:


1. Private Sub CommandButton1_Click()
2. 'LEE DATOS Y COLOREA LA CELDA DONDE SE INSERTARÁ EL POZO (ROJO: PRODUCTOR _
3. VERDE: INYECTOR)
4. Dim Pos%
5. If ComboBox1.ListIndex = -1 Then
6. MsgBox "No se pudo registrar el pozo", vbExclamation, "Error"
7. Exit Sub
8. End If
9. Pos = ComboBox1.Value
10. If Pozo = -1 Then
11. If Pos Mod Nx = 0 Then
12. Range(Cells(16 + Int(Pos / Nx), 1 + Pos - (Int(Pos / Nx) - 1) * Nx), _
13. Cells(16 + Int(Pos / Nx), 1 + Pos - (Int(Pos / Nx) - 1) * Nx)). _
14. Interior.Color = RGB(255, 0, 0)
15. Else
16. Range(Cells(17 + Int(Pos / Nx), 1 + Pos - Int(Pos / Nx) * Nx), _
17. Cells(17 + Int(Pos / Nx), 1 + Pos - Int(Pos / Nx) * Nx)). _
18. Interior.Color = RGB(255, 0, 0)
19. End If
20. Else
20. If Pos Mod Nx = 0 Then
21. Range(Cells(16 + Int(Pos / Nx), 1 + Pos - (Int(Pos / Nx) - 1) * Nx), _

246
APÉNDICE C

22. Cells(16 + Int(Pos / Nx), 1 + Pos - (Int(Pos / Nx) - 1) * Nx)). _


23. Interior.Color = RGB(0, 255, 0)
24.
25. Else
26. Range(Cells(17 + Int(Pos / Nx), 1 + Pos - Int(Pos / Nx) * Nx), _
27. Cells(17 + Int(Pos / Nx), 1 + Pos - Int(Pos / Nx) * Nx)). _
28. Interior.Color = RGB(0, 255, 0)
29. End If
30. End If
31. If OptionButton1.Value = True Then
32. If Pozo = -1 Then
33. qsc(Pos) = Pozo * VALOR(RefEditQ.Value)
34. Inc(Pos) = 0
35. Else
36. qsc(Pos) = Pozo * VALOR(RefEditQ.Value)
37. Inc(Pos) = 0
38. End If
39. Else
40. Pres(Pos) = VALOR(RefEditQ.Value)
41. Inc(Pos) = 1
42. End If
43. Unload Me
44. Exit Sub
45. End Sub
46.
47. Private Sub CommandButton2_Click()
48. Unload Me
49. End Sub
50.
51. Private Sub OptionButton1_Click()
52. Label1.Caption = "Gasto (BPD) ="
53. End Sub
54.
55. Private Sub OptionButton2_Click()
56. Label1.Caption = "Presión (lpc) ="
57. End Sub
58.
59. Private Sub UserForm_Initialize()
60. For I = 1 To Nx * Ny
61. ComboBox1.AddItem I
62. Next I
63. OptionButton1.Value = True
64. End Sub

4. Descripción del formulario FCONDINI de la. y sus componentes principales.


El formulario FCONDINI (Figura C. 4) se compone de objetos RefEdit para ingreso de datos y
CommandButton para aceptar o cancelar principalmente, adicionalmente contiene Frame y Label
para ayuda visual. La descripción de los objetos principales se encuentra en la Tabla C. 4.

247
APÉNDICE C

Figura C. 4 Formulario FCONDINI con sus componentes principales.

Tabla C. 4 Descripción de los elementos principales del formulario FCONDINI.


Número Objeto Descripción
1 RefEdit Propiedad name: RefEditPI
2 RefEdit Propiedad name: RefEditPB
3 RefEdit Propiedad name: RefEditDT
4 RefEdit Propiedad name: RefEditInter
Botón llamado CommandButton2 que cierra el formulario si no se
4 CommandButton
realiza alguna acción.
Botón llamado CommandButton1 que lee los datos ingresados
5 CommandButton
por el usuario.

El código asociado al formulario FCONDINI es:


1. Option Explicit
2. Private Sub CommandButton1_Click()
3. 'ALMACENA LOS DATOS EN VARIABLES
4. Pi = VALOR(RefEditPI.Value)
5. PBB = VALOR(RefEditPB.Value)
6. deltat = VALOR(RefEditDT.Value)
7. Intervalos = VALOR(RefEditInter.Value)
8. Unload Me
9. End Sub
10.
11. Private Sub CommandButton2_Click()
12. Unload Me
13. End Sub

5. Lista de variables usadas y sus unidades.


1. '************************ VARIABLES DESCRIPCIÓN Y UNIDADES **************************
2. ' VARIABLE DESCRIPCIÓN
3. ' Nx NÚMERO DE CELDAS EN X
4. ' Ny NÚMERO DE CELDAS EN Y
5. ' deltaX TAMAÑO DE CELDAS EN X (FT)
6. ' deltaY TAMAÑP DE CELDA EN Y (FT)
7. ' H ESPESOR (FT)
8. ' kx PERMEABILIDAD EN X (MD)
9. ' ky PERMEABILIDAD EN Y (MD)

248
APÉNDICE C

10. ' Poro POROSIDAD (FRACCION)


11. ' mu VISCOSIDAD DEL FLUIDO (CP)
12. ' CO COMPRESIBILIDAD DEL FLUIDO (LPCA-1)
13. ' CF COMPRESIBILIDAD DE LA FORMACIÓN (LPCA-1)
14. ' B FACTOR DE VOLUMEN DEL FLUIDO (BL/BL)
15. ' qsc() VECTOR QUE ALMACENA GASTODE LOS POZOS PARA CADACELDA SI ES QUE _
16. ' EXISTE UN POZO (- PARA PRODUCTOR; + PARA INYECTOR)
17. ' Pozo VARIABLE QUE INDICA SI UN POZO ES PRODUCTOR O INYECTOR
18. ' Pi PRESIÓN INICIAL DEL YACIMIENTO (LPCA)
19. ' PBB PRESIÓN DE BURBUJA (LPCA)
20. ' VR() VECTOR QUE GUARDA LA PRESIÓN EN CADA CELDA EN CADA PASO DE TIEMPO
21. ' deltat INCREMENTO DE TIEMPO EN LA SIMULACIÓN
22. ' vecRGB(3, 26) VECTOR AUXILIAR EN LA CREACIÓN DE LA ESCALA DE COLORES
23. ' vecEscala(1 To 26)VECTOR AUXILIAR EN LA CREACIÓN DE LA ESCALA DE COLORES
24. ' NombreHojaSIM ALMACENA EL NOMBRE DE LA HOJA PARA INSERTAR RESULTADOS
25. ' HojaSIM OBJETO HOJA USADO PARA CREAR UNA NUEVA HOJA.

6. Declaración de variables principales.


1. Option Explicit
2. Public Nx#, Ny#, deltaX#, deltaY#, H#, kx#, ky#, Poro#, Cf#, mu#, CO#, Cf#, B#, _
3. qsc() As Double, Pozo#, Pb#, Pi#, PBB#, VR() As Double, deltat#, _
4. vecRGB(3, 26) As Integer, vecEscala(1 To 26) As Double, _
5. NombreHojaSIM As String, HojaSIM As Worksheet, Intervalos%

7. Subrutina ejecutada por el Botón Propiedades del yacimiento.


1. Sub BOTON_PROPYAC()
2. 'MUESTRA EL FORMULRIO FPROPYAC PARA INGRESAR LAS PROPIEDAES DEL YACIMIENTO
3. FPROPYAC.Show
4. End Sub

8. Subrutina del botón Propiedades del fluido.


1. Sub BOTON_PROPFLUI()
2. 'MUESTRA EL FORMULARIO FPROPFLUI PARA INGRESAR LAS PROPIEDAES DEL FLUIDO
3. FPROPFLUI.Show
4. End Sub

9. Subrutina del botón Crear modelo.


1. Sub BOTON_CREAMODELO()
2. 'LLAMA A LASIBRUTINA CREARYACIMIENTO PARA ESQUEMATIZAR EL YACIMIENTO EN UNA HOJA _
3. DE EXCEL
4. If Nx = 0 Or Ny = 0 Or deltaX = 0 Or deltaY = 0 Or H = 0 Or kx = 0 Or ky = 0 _
5. Or Poro = 0 Or mu = 0 Or B = 0 Then
6. MsgBox "Error en los datos alguno o varios son cero o no tienen valor", _
7. vbExclamation, "Error en los datos"
8. Exit Sub
9. Else
10. Call CREARYACIMIENTO
11. End If
12. End Sub

10. Subrutina del botón Insertar pozo inyector.


1. Sub BOTON_PINY()
2. 'MUESTRA EL FORMULARIO FPOZO PARA INSERTAR UN POZO INYECTOR (SIGNO POSITIVO)
3. Pozo = 1
4. FPOZO.Show
5. End Sub

11. Subrutina del botón Insertar pozo productor.

249
APÉNDICE C

1. Sub BOTON_PPROD()
2. 'MUESTRA EL FORMULARIO FPOZO PARA INSERTAR UN POZO PRODUCTOR (SIGNO NEGATIVO)
3. Pozo = -1
4. FPOZO.Show
5. End Sub

12. Subrutina del botón Condiciones iniciales.


1. Sub BOTON_CONDINI()
2. 'MUESTRA EL FORMULARIO FCONDINI PARA INSERTARLAS CONDICIONES INICIALES DE PRESIÓN _
3. Y LÍMITE DE PRESIÓN DE BURBUJA ASÍ COMO EL PASO EN EL TIEMPO.
4. FCONDINI.Show
5. End Sub

13. Subrutina del botón Simular.


1. Sub BOTON_SIMULAR()
2. 'LLAMA A LA SUBRUTINA SIMULAR.
3. If Nx = 1 Then
4. Nx = Ny
5. Ny = 1
6. End If
7. Call SIMULAR
8. End Sub

14. Subrutina del botón Gráfica Mapa distribución de presión.


1. Sub BOTON_MAPA()
2. 'LLAMA A LA SUBRUTINA INDICADA PARA CREAR UN MAPA DE DISTRIBUCIÓN DE PRESIÓN
3. If Nx = 1 Or Ny = 1 Then
4. Call MAPA2D(Nx, Ny, VR)
5. Else
6. Call SUPERFICIE3D(Nx, Ny, VR, 1)
7. End If
8. End Sub

15. Subrutina del botón Gráfica Distribución de presión 3D.


1. Sub BOTON_3D()
2. 'LLAMA A LA SUBRUTINA INDICADA PARA CREAR UNA SUPERFICIE DE DISTRIBUCIÓN DE PRESIÓN
3. If Nx = 1 Or Ny = 1 Then
4. MsgBox "No disponible para una dimensión", vbExclamation, "Simulacion numérica"
5. Else
6. Call SUPERFICIE3D(Nx, Ny, VR, 2)
7. End If
8. End Sub

16. Subrutina CREARYACIMIENTO.


1. Sub CREARYACIMIENTO()
2. 'CREA UNA REPRESENTACIÓN DEL YCIMIENTO COMO EL MOSTRADO EN LA FIGURA 5.30
3. Set HojaSIM = ActiveWorkbook.Sheets.Add
4. Application.Wait (Now + TimeValue("00:00:01"))
5. HojaSIM.Name = "Modelo de Yacimiento " & Format(Time, "HH") & ";" & _
6. Format(Time, "MM") & ";" & Format(Time, "SS")
7. With HojaSIM
8. .Cells(1, 1) = "Simulacion 2D: " & NombreHojaSIM
9. .Cells(2, 1) = "Propiedades del yacimiento y fluido"
10. .Cells(3, 1) = "Número de celdas en X ="
11. .Cells(4, 1) = "Número de celdas en Y ="
12. .Cells(5, 1) = "Tamaño de celda en X (pies) ="
13. .Cells(6, 1) = "Tamaño de celda en Y (pies) ="
14. .Cells(7, 1) = "Espesor (pies) ="

250
APÉNDICE C

15. .Cells(8, 1) = "Permeabilidad en X (mD) ="


16. .Cells(9, 1) = "Permeabilidad en Y (mD) ="
17. .Cells(10, 1) = "Compresibilidad de la formación (lpc-1) ="
18. .Cells(11, 1) = "Porosidad (fracción) ="
19. .Cells(12, 1) = "Viscosidad del fluido (cp) ="
20. .Cells(13, 1) = "Compresibilidad del fluido (lpc-1) ="
21. .Cells(14, 1) = "Factor de volumen (bl @cy/bl @ce) ="
22. Range(.Cells(1, 1), .Cells(1, 7)).Merge
23. Range(.Cells(1, 1), .Cells(1, 7)).HorizontalAlignment = xlCenter
24. Range(.Cells(2, 1), .Cells(2, 7)).Select
25. With Selection
26. .Merge
27. .HorizontalAlignment = xlCenter
28. .VerticalAlignment = xlCenter
29. .Rows.RowHeight = 5 * 5.66
30. .Borders(xlEdgeTop).LineStyle = xlContinuous
31. .Borders(xlEdgeBottom).LineStyle = xlContinuous
32. .Interior.Color = RGB(192, 192, 192)
33. End With
34. For I = 3 To 14
35. Range(.Cells(I, 1), .Cells(I, 6)).Merge
36. Range(.Cells(I, 1), .Cells(I, 6)).HorizontalAlignment = xlRight
37. Next I
38. .Cells(3, 7) = Nx
39. .Cells(4, 7) = Ny
40. .Cells(5, 7) = deltaX
41. .Cells(6, 7) = deltaY
42. .Cells(7, 7) = H
43. .Cells(8, 7) = kx
44. .Cells(9, 7) = ky
45. .Cells(10, 7) = Cf
46. .Cells(11, 7) = Poro
47. .Cells(12, 7) = mu
48. .Cells(13, 7) = CO
49. .Cells(14, 7) = B
50. .Cells(15, 1) = "Representación del yacimiento"
51. Range(.Cells(15, 1), .Cells(15, 1 + Nx)).Select
52. With Selection
53. .Merge
54. .HorizontalAlignment = xlCenter
55. .VerticalAlignment = xlCenter
56. .Rows.RowHeight = 5 * 5.66
57. .Borders(xlEdgeTop).LineStyle = xlContinuous
58. .Borders(xlEdgeBottom).LineStyle = xlContinuous
59. .Interior.Color = RGB(192, 192, 192)
60. End With
61. .Columns("A").ColumnWidth = 2.67
62. Range(.Cells(17, 2), .Cells(16 + Ny, 1 + Nx)).Select
63. With Selection
64. .Columns.ColumnWidth = 9
65. .Rows.RowHeight = 9 * 5.66
66. .Interior.Color = RGB(192, 192, 192)
67. .Borders(xlEdgeLeft).LineStyle = xlContinuous
68. .Borders(xlEdgeTop).LineStyle = xlContinuous
69. .Borders(xlEdgeBottom).LineStyle = xlContinuous
70. .Borders(xlEdgeRight).LineStyle = xlContinuous
71. .Borders(xlInsideVertical).LineStyle = xlContinuous
72. .Borders(xlInsideHorizontal).LineStyle = xlContinuous
73. End With
74. Range(.Cells(16, 1), .Cells(16 + Ny, 1 + Nx)).Select

251
APÉNDICE C

75. Selection.HorizontalAlignment = xlCenter


76. Selection.VerticalAlignment = xlCenter
77. For I = 1 To Nx
78. .Cells(16, 1 + I) = I
79. Next I
80. For I = 1 To Ny
81. .Cells(16 + I, 1) = I
82. Next I
83. For I = 1 To Nx
84. For J = 1 To Ny
85. .Cells(16 + J, 1 + I) = Nx * (J - 1) + I
86. Next J
87. Next I
88. End With
89. End Sub

17. Subrutina SIMULAR.


1. Sub SIMULAR()
2. 'RESUELVE EL PROBLEMA DE SIMULACIÓN NUMÉRICA DE YACIMIENTOS QUE DESCRIBE EL FLUJO _
3. BIDIRECCIONAL, MONOFÁSICO, EN RÉGIMEN TRANSITORIO (VARIABLE), DE UN FLUIDO _
4. LIGERAMENTE COMPRESIBLE Y DE VISCOSIDAD CONSTANTE, QUE FLUYE EN UN MEDIO POROSO _
5. HOMOGÉNEO DE ESPESOR CONSTANTE Y ANISÓTROPO Y EN DÓNDE NO EXISTE FLUJO EN LAS _
6. FRONTERAS. _
7. COLOCA LOS RESULTADOS EN UNA NUEVA HOJA EN FORMA DE TABLA.
8. Dim A(), x() As Double, vecB(), Ver%
9. 'Verificamos que existan pozos
10. AUX1 = 0
11. For I = 1 To Nx * Ny
12. If qsc(I) <> 0 Then AUX1 = 1
13. Next I
14. For I = 1 To Nx * Ny
15. If Pres(I) <> 0 Then AUX2 = 1
16. Next I
17. If AUX1 = 0 And AUX2 = 0 Then MsgBox "No hay pozos, inserte alguno.", , "Error": Exit
18. Sub
19. ReDim A(1 To Nx * Ny, 1 To Nx * Ny)
20. ReDim x(1 To Nx * Ny)
21. ReDim vecB(1 To Nx * Ny)
22. Dim SumaDeGastos#
23. Dim Alfa#, Beta#, Tx#, TY#
24. 'verificamos que la suma de gastos sea negativa o que existan presiones en el rango.
25.
26. For I = 1 To Nx * Ny
27. SumaDeGastos = SumaDeGastos + qsc(I)
28. Next I
29.
30. Ver = 0
31. For I = 1 To Nx * Ny
32. If Inc(I) = 1 Then
33. If Pres(I) < PBB Or Pres(I) > Pi Then
34. MsgBox "Alguna presión no está dentro del rango establecifo correcta", ,
35. "Error": Exit Sub
36. Else
37. Ver = 1
38. End If
39. End If
40. Next I
41.
42. If SumaDeGastos > 0 And Ver = 0 Then MsgBox "Error en gasto de pozos", , "Error":
43. Exit Sub

252
APÉNDICE C

44. ReDim VR(Nx * Ny, 1)


45. 'condiciones iniciales
46. For I = 1 To Nx * Ny
47. If Inc(I) = 1 Then
48. x(I) = Pres(I)
49. VR(I, 1) = Pres(I)
50. Else
51. x(I) = Pi
52. VR(I, 1) = Pi
53. End If
54.
55. Next I
56. Dim PresionMenor#, Contador#, deltat#
57. Dim Ss#, WW#, EE#, nn#
58. PresionMenor = Pi
59. Contador = 0
60. Beta = 1.127
61. Alfa = 5.615
62. Tx = Beta * deltaY * H * kx / (B * mu * deltaX)
63. TY = Beta * deltaX * H * ky / (B * mu * deltaY)
64. deltat = 15
65. Contador = 1
66. Do While PresionMenor > PBB And Intervalos > Contador
67. Contador = Contador + 1
68. ReDim Preserve VR(Nx * Ny, Contador)
69. 'Calculamos los coedicientes de la matriz A
70. For I = 1 To Nx * Ny
71. 'Aqui va eso
72. If Inc(I) = 0 Then
73. Ss = 0: WW = 0: EE = 0: nn = 0
74. For J = 1 To Nx * Ny
75. Select Case I
76. Case J - Nx 'Abajo
77. If J = Ny And I > ((Ny - 1) * Nx) Then
78. A(I, J) = 0
79. Else
80. A(I, J) = TY
81. End If
82. Ss = A(I, J)
83. Case J - 1 'Derecha Ok
84. If I Mod Nx = 0 Then 'si i es multiplo de nx
85. A(I, J) = 0
86. Else
87. A(I, J) = Tx
88. End If
89. WW = A(I, J)
90. Case J + 1 'izquierda
91. If (I - 1) Mod Nx = 0 Then
92. A(I, J) = 0
93. Else
94. A(I, J) = Tx
95. End If
96. EE = A(I, J)
97. Case J + Nx 'Arriba
98. If I = 1 Then
99. A(I, J) = 0
100. Else
101. A(I, J) = TY
102. End If
103. nn = A(I, J)

253
APÉNDICE C

104. Case Else


105. A(I, J) = 0
106. End Select
107. Next J
108. A(I, I) = -(Ss + WW + EE + nn + (deltaX * deltaY * H * Poro * (Cf + CO) / (Alfa
109. * B * deltat)))
110. vecB(I) = -(deltaX * deltaY * H * Poro * (Cf + CO) / (Alfa * B * deltat)) * x(I)
111. - qsc(I)
112.
113. Else
114. A(I, I) = 1 '-(Ss + WW + EE + nn + (deltaX * deltaY * H * Poro * (Cf + CO) /
115. (Alfa * B * deltat)))
116. vecB(I) = Pres(I) '-(deltaX * deltaY * H * Poro * (Cf + CO) / (Alfa * B * deltat))
117. * x(I) - qsc(I)
118.
119. 'Creamos el vector B
120. 'vecB(I) = -(deltaX * deltaY * H * Poro * (Cf + CO) / (Alfa * B * deltat)) * x(I)
121. - qsc(I)
122. End If
123. Next I
124. 'Resolvemos el sistema con DECOM y SOLVE
125. Dim ipvt() As Integer, work(), ncond As Double
126. ReDim ipvt(Nx * Ny)
127. ReDim work(Nx * Ny)
128. Call decomp(Nx * Ny, Nx * Ny, A(), ncond, ipvt(), work())
129. If ncond >= 1E+32 Then MsgBox ("no hay solución"): End
130. Call solve(Nx * Ny, Nx * Ny, A(), vecB(), ipvt())
131. ''Calculamos la menor presión :::::::::::::::::::::::::::::::::::::::::
132. Dim Efe As Single, celdapb As Integer
133. Efe = Pi
134. For I = 1 To Nx * Ny
135. If Efe > Abs(vecB(I)) Then
136. Efe = Abs(vecB(I))
137. Else
138. Efe = Efe
139. End If
140. Next I
141. PresionMenor = Efe
142. For I = 1 To Nx * Ny
143. VR(I, Contador) = vecB(I)
144. x(I) = vecB(I)
145. Next I
146. For I = 1 To Nx * Ny
147. vecB(I) = 0
148. Next I
149. For I = 1 To Nx * Ny
150. For J = 1 To Nx * Ny
151. A(I, J) = 0
152. Next J
153. Next I
154. Loop
155.
156. ' NombreHojaSIM = InputBox("Nombre de hoja de resultados", _
157. ' "Simulación de Yacimientos")
158. ' If NombreHojaSIM = "" Then Exit Sub
159. ' Set HojaSIM = ActiveWorkbook.Sheets.Add
160. Set HojaSIM = ActiveWorkbook.Sheets.Add
161. Application.Wait (Now + TimeValue("00:00:01"))
162. HojaSIM.Name = "Resultados Simulación " & Format(Time, "HH") & ";" & Format(Time,
163. "MM") _

254
APÉNDICE C

164. & ";" & Format(Time, "SS")


165.
166. ' HojaSIM.Name = NombreHojaSIM
167. With HojaSIM
168. .Cells(1, 1) = "Simulacion 2D: " & NombreHojaSIM
169. .Cells(2, 1) = "Resultados"
170. .Cells(3, 1) = "Presión (lpca)"
171. Range(.Cells(1, 1), .Cells(1, 1 + Nx * Ny)).Merge
172. Range(.Cells(1, 1), .Cells(1, 1 + Nx * Ny)).HorizontalAlignment = xlCenter
173. Range(.Cells(2, 1), .Cells(2, 1 + Nx * Ny)).Merge
174. Range(.Cells(2, 1), .Cells(2, 1 + Nx * Ny)).HorizontalAlignment = xlCenter
175. Range(.Cells(3, 1), .Cells(3, 1 + Nx * Ny)).Merge
176. Range(.Cells(3, 1), .Cells(3, 1 + Nx * Ny)).HorizontalAlignment = xlCenter
177. Range(.Cells(4, 1), .Cells(4, 1 + Nx * Ny)).Select
178. Selection.Rows.RowHeight = 5 * 5.66
179. Selection.HorizontalAlignment = xlCenter
180. Selection.VerticalAlignment = xlCenter
181. Selection.WrapText = True
182. Selection.Borders(xlEdgeTop).LineStyle = xlContinuous
183. Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous
184. Selection.Interior.Color = RGB(192, 192, 192)
185. .Cells(4, 1) = "Tiempo (Días)"
186. For I = 1 To Nx * Ny
187. .Cells(4, I + 1) = "Celda " & I
188. Next I
189. For I = 1 To UBound(VR, 2)
190. .Cells(4 + I, 1) = deltat * (I - 1)
191. For J = 1 To Nx * Ny
192. .Cells(4 + I, 1 + J) = VR(J, I)
193. Next J
194. Next I
195. End With
196. End Sub
197.

18. Subrutina MAPA2D.


1. Sub MAPA2D(Nx As Double, Ny As Double, VR() As Double)
2. 'CREA UN MAPA DE DISTRIBUCIÓN DE PRESIÓN EN 2D CON ESCALA DE COLOR.
3. Dim Serie() As Integer
4. ActiveSheet.Shapes.AddChart.Select
5. 'ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
6. Set C = ActiveChart
7. C.Legend.Delete
8. C.ChartType = xlColumnClustered
9. C.ChartArea.Height = 127.5590551181
10. If Nx = 1 Then Ele = Ny
11. If Ny = 1 Then Ele = Nx
12. Redim Serie(1 To Ele)
13. For I = 1 To Ele
14. Serie(I) = 1
15. Next I
16. C.SeriesCollection.NewSeries
17. C.FullSeriesCollection(1).name = "Mapa de distribución de presión"
18. C.FullSeriesCollection(1).Values = Serie
19. C.ChartGroups(1).GapWidth = 0
20. C.FullSeriesCollection(1).Format.Line.ForeColor.RGB = RGB(192, 192, 192)
21. C.SetElement (msoElemenTorimaryCategoryAxisTitleAdjacentToAxis)
22. C.Axes(xlCategory, xlPrimary).AxisTitle.Text = "Celdas"
23. C.Axes(xlValue).Delete
24. C.PlotArea.Top = 15

255
APÉNDICE C

25. C.PlotArea.Height = 90
26. C.Axes(xlCategory).AxisTitle.Format.TextFrame2.TextRange.Font.Size = 12
27. C.HasTitle = True
28. C.ChartTitle.Format.Fill.Solid
29. C.ChartTitle.Format.Fill.ForeColor.RGB = RGB(255, 255, 255)
30. C.FullSeriesCollection(1).Points(1).Format.Fill.ForeColor.RGB = RGB(255, 255, 51)
31. If Nx = 1 Then Ele = Ny
32. If Ny = 1 Then Ele = Nx
33. Call COLORESRGB
34. Dim incremento As Single
35. incremento = (Pi - PBB) / 25
36. vecEscala(1) = PBB
37. For I = 2 To 26
38. vecEscala(I) = vecEscala(I - 1) + incremento
39. Next I
40. For I = 1 To Ele 'VR(celda,tiempo)
41. For J = 1 To 26
42. If VR(I, Ubound(VR, 2)) < vecEscala(J) Then Exit For
43. Next J
44. C.FullSeriesCollection(1).Points(I).Format.Fill.ForeColor.RGB = _
45. RGB(vecRGB(1, J), vecRGB(2, J), vecRGB(3, J))
46. Next I
47. Call ESCALA(Pi, PBB, 1)
48. End Sub

19. Subrutina SUPERFICIE3D.


1. Sub SUPERFICIE3D(Nx As Double, Ny As Double, VR() As Double, TIPO As Integer)
2. 'CREA UNA GRÁFICA DE SUPERFICIE CON LA DISTRIBUCIÓN DE PRESIÓN, EN EL EJE X SE _
3. REPRESENTAN LAS CELDAS EN X; EN EL EJE Y, SE REPRESENTAN LAS CELDAS EN Y; EN EL _
4. EJE Z SE REPRESENTA LA PRESIÓN.
5. Dim Matriz() As Double
6. Redim Matriz(1 To Nx, 1 To Ny)
7. For I = 1 To Ny
8. For J = 1 To Nx
9. Matriz(J, (I - 1) + 1) = VR((I - 1) * Nx + J, Ubound(VR, 2))
10. Next J
11. Next I
12. Set HojaSIM = ActiveWorkbook.Sheets.Add
13. Application.Wait (Now + TimeValue("00:00:01"))
14. HojaSIM.Name = "Grafica sim. " & Format(Time, "HH") & ";" & Format(Time, "MM") _
15. & ";" & Format(Time, "SS") HojaSIM.name = NombreHojaSIM
16. With HojaSIM
17. .Cells(1, 1) = "Simulacion 2D: " & NombreHojaSIM
18. Range(.Cells(1, 1), .Cells(1, 1 + Nx)).Merge
19. .Cells(2, 1) = "Distribución de presión (lpc)"
20. Range(.Cells(2, 1), .Cells(2, 1 + Nx)).Select
21. With Selection
22. .Merge
23. .HorizontalAlignment = xlCenter
24. .VerticalAlignment = xlCenter
25. .Rows.RowHeight = 5 * 5.66
26. .Borders(xlEdgeTop).LineStyle = xlContinuous
27. .Borders(xlEdgeBottom).LineStyle = xlContinuous
28. .Interior.Color = RGB(192, 192, 192)
29. End With
30. .Columns("A").ColumnWidth = 2.67
31. Range(.Cells(4, 2), .Cells(3 + Ny, 1 + Nx)).Select
32. With Selection
33. .Columns.ColumnWidth = 9
34. .Rows.RowHeight = 9 * 5.66

256
APÉNDICE C

35. .Interior.Color = RGB(192, 192, 192)


36. .Borders(xlEdgeLeft).LineStyle = xlContinuous
37. .Borders(xlEdgeTop).LineStyle = xlContinuous
38. .Borders(xlEdgeBottom).LineStyle = xlContinuous
39. .Borders(xlEdgeRight).LineStyle = xlContinuous
40. .Borders(xlInsideVertical).LineStyle = xlContinuous
41. .Borders(xlInsideHorizontal).LineStyle = xlContinuous
42. End With
43. Range(.Cells(3, 1), .Cells(3 + Ny, 1 + Nx)).Select
44. Selection.HorizontalAlignment = xlCenter
45. Selection.VerticalAlignment = xlCenter
46. For I = 1 To Nx
47. .Cells(3, 1 + I) = I
48. Next I
49. For I = 1 To Ny
50. .Cells(3 + I, 1) = I
51. Next I
52. For I = 1 To Nx
53. For J = 1 To Ny
54. .Cells(3 + J, 1 + I) = Matriz(I, J)
55. Next J
56. Next I
57.
58. Dim Grafico As Chart
59. ActiveSheet.Shapes.AddChart.Select
60. Set Grafico = ActiveChart
61. With Grafico
62. If TIPO = 1 Then .ChartType = xlSurfaceTopView
63. If TIPO = 2 Then .ChartType = xlSurface
64. .Legend.Delete
65. .Axes(xlSeries).HasMajorGridlines = True
66. .Axes(xlCategory).HasMajorGridlines = True
67. .Axes(xlSeries).ReversePlotOrder = True
68. .HasTitle = True
69. .SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
70. .SetElement (msoElementSeriesAxisTitleRotated)
71. .Axes(xlCategory).AxisTitle.Text = "Celdas en X"
72. .Axes(xlSeries).AxisTitle.Text = "Celdas en Y"
73. .ChartTitle.Text = "Distribución de presión (lpc)"
74. .ChartArea.Width = 355
75. .ChartArea.Height = 355 '355
76. .PlotArea.Top = 30
77. .PlotArea.Height = 305
78. .PlotArea.Left = 0
79. .PlotArea.Width = 340
80. .Axes(xlValue).Select
81. .Axes(xlValue).MajorUnit = (.Axes(xlValue).MaximumScale -
82. .Axes(xlValue).MinimumScale) / 15
83. .HasLegend = True
84. Dim Max As Integer
85. Max = .Legend.LegendEntries.Count
86. Call COLORESRGB
87. For I = 1 To Max
88. .Legend.LegendEntries(I).LegendKey.Interior.Color = RGB(vecRGB(1, (26 /
89. Max) * I), _
90. vecRGB(2, (26 / Max) * I), vecRGB(3, (26 / Max) * I))
91. Next I
92. ActiveChart.Legend.Select
93. Selection.Delete
94. End With

257
APÉNDICE C

95. End With


96. Dim incremento As Single
97. incremento = (Grafico.Axes(xlValue).MaximumScale -
98. Grafico.Axes(xlValue).MinimumScale) / 25
99. vecEscala(1) = Grafico.Axes(xlValue).MinimumScale
100. For I = 2 To 26
101. vecEscala(I) = Int(vecEscala(I - 1) + incremento)
102. Next I
103. Max = Cells(Rows.Count, 1).End(xlUp).Row + 2
104. Cells(Max, 1).Select
105. Call ESCALA(Grafico.Axes(xlValue).MaximumScale, Grafico.Axes(xlValue).MinimumScale,
106. 2)
107. End Sub
108.

20. Subrutina ESCALA.


1. Sub ESCALA(N1#, N2#, Pos As Integer)
2. 'CREA UN VECTOR CON LOS VALORES DE LA ESCALA PARA REAR UNA GRÁFICA AUXILIAR PARA _
3. REPRESENTAR LOS VALORES DE PRESIÓN.
4. Dim I As Integer
5. Dim Grafico As Chart
6. ActiveSheet.Shapes.AddChart.Select
7. Set Grafico = ActiveChart
8. With Grafico
9. If Pos = 1 Then 'horizontal
10. .ChartType = xlColumnStacked100
11. .ChartArea.Width = 355
12. .ChartArea.Height = 60
13. Else
14. .ChartType = xlBarStacked100
15. .ChartArea.Width = 60
16. .ChartArea.Height = 355
17. End If
18. .SeriesCollection.NewSeries
19. .FullSeriesCollection(1).Values = vecEscala
20. .FullSeriesCollection(1).XValues = vecEscala
21. .Axes(xlValue).Delete
22. .ChartGroups(1).GapWidth = 0
23. .Legend.Delete
24. 'Call ColoresRGB
25. For I = 1 To 26
26. .FullSeriesCollection(1).Points(I).Select
27. With Selection.Format.Fill
28. .ForeColor.RGB = RGB(vecRGB(1, I), vecRGB(2, I), vecRGB(3, I))
29. End With
30. Next I
31. .ChartArea.Left = .ChartArea.Left + 355
32. End With
33. End Sub

21. Subrutina COLORESRGB.


1. Sub COLORESRGB()
2. 'CREA UNA ESCALA DE COLOR.
3. Dim colorR As Integer, colorG As Integer, colorB As Integer
4. For I = 1 To 26
5. Select Case I
6. Case Is < 6
7. vecRGB(1, I) = 255 - (I - 1) * 51
8. vecRGB(2, I) = 0
9. vecRGB(3, I) = 255

258
APÉNDICE C

10. Case Is < 11


11. vecRGB(1, I) = 0
12. vecRGB(2, I) = (I - 6) * 51
13. vecRGB(3, I) = 255
14. Case Is < 16
15. vecRGB(1, I) = 0
16. vecRGB(2, I) = 255
17. vecRGB(3, I) = 255 - (I - 11) * 51
18. Case Is < 21
19. vecRGB(1, I) = (I - 16) * 51
20. vecRGB(2, I) = 255
21. vecRGB(3, I) = 0
22. Case Else
23. vecRGB(1, I) = 255
24. vecRGB(2, I) = 255 - (I - 21) * 51
25. vecRGB(3, I) = 0
26. End Select
27. Next I
28. End Sub

22. Subrutina DECOMP Y SOLVE.


1. DefInt I-K, M-N
2. Sub decomp(NDIM, N, A(), cond As Double, ipvt(), work())
3. 'Descomposici¢n de una matriz real por Eliminaci¢n Gaussiana, adem s, se
4. 'estima su n£mero de condici¢n.
5. 'Con la subrutina SOLVE se obtiene la soluci¢n del sistema lineal.
6. 'Datos de entrada:
7. 'NDIM = Dimensionamiento del arreglo de la matriz A.
8. 'N = Orden de la matriz.
9. 'A = Matriz que ser triangularizada.
10. 'Datos de salida:
11. 'A = Contiene una matriz tri ngular superior (U) y una versi¢n
12. 'permutada de una tri ngular inferior (I-L), por lo tanto:
13. '(matriz permutada)*A = L*U.
14. 'COND = Valor estimado del n£mero de condici¢n de A. Para un sistema
15. 'lineal A*X = B, cambios en los valores de A y/o B, pueden
16. 'causar modificaciones a COND y a veces en X. Si COND+1 = COND,
17. 'A es una matriz singular a£n al trabajarla con precisi¢n,
18. 'entonces COND = 1.0D+32 si la singularidad exacta es detectada.
19. 'IPVT = Vector pivote.
20. 'IPVT(K) = El ¡ndice del k-‚simo rengl¢n pivote.
21. 'IPVT(N) = (-1)^(n£mero de intercambios).
22. 'Espacio de trabajo:
23. 'El vector WORK debe declararse e incluirse en la llamada a
24. 'esta subrutina. Su contenido de entrada se ignora (cero) y el
25. 'de salida no es relevante.
26. 'El determinante de A puede obtenerse mediante la expresi¢n:
27. 'Det(A) = IPVT(N) * A(1,1) * A(2,2) * ... * A(N,N)
28. ipvt(N) = 1
29. If N = 1 Then GoTo d80
30. NM1 = N - 1
31. 'C lculo de (1-NORMA) de A
32. ANORM = 0#
33. For J = 1 To N
34. T = 0#
35. For I = 1 To N
36. T = T + Abs(A(I, J))
37. Next I
38. If T > ANORM Then ANORM = T
39. Next J

259
APÉNDICE C

40. 'Eliminaci¢n Gaussiana con pivoteo parcial


41. For K = 1 To NM1
42. KP1 = K + 1
43. 'Se ubica el pivote
44. M = K
45. For I = KP1 To N
46. If Abs(A(I, K)) > Abs(A(M, K)) Then M = I
47. Next I
48. ipvt(K) = M
49. If M <> K Then ipvt(N) = -ipvt(N)
50. T = A(M, K)
51. A(M, K) = A(K, K)
52. A(K, K) = T
53. 'Si el pivote es cero se efect£a un salto
54. If T = 0# Then GoTo 35
55. 'C lculo de multiplicaciones
56. For I = KP1 To N
57. A(I, K) = -A(I, K) / T
58. Next I
59. 'Intercambio y eliminaci¢n por columnas
60. For J = KP1 To N
61. T = A(M, J)
62. A(M, J) = A(K, J)
63. A(K, J) = T
64. If T = 0# Then GoTo 30
65. For I = KP1 To N
66. A(I, J) = A(I, J) + A(I, K) * T
67. Next I
68. 30 Next J
69. 35 Next K
70. 'COND = (1-NORMA de A)*(estimaci¢n de 1-NORMA de la inversa de A)
71. 'La estimaci¢n se obtiene en un paso iterativo inverso para el vector
72. 'singular reducido. Esto involucra la soluci¢n de 2 sistemas de ecua-
73. 'ciones, (TRANSPUESTA de A)*Y = E y A*Z = Y, donde E es un vector de
74. 'elecci¢n (+1 ¢ -1) para adicionarse en Y.
75. 'Estimaci¢n = (1-NORMA de Z)/(1-NORMA de Y)
76. 'Resolviendo (TRANSPUESTA de A)*Y = E
77. For K = 1 To N
78. T = 0#
79. If K = 1 Then GoTo d45
80. KM1 = K - 1
81. For I = 1 To KM1
82. T = T + A(I, K) * work(I)
83. Next I
84. d45: EK = 1#
85. If T < 0# Then EK = -1#
86. If A(K, K) = 0# Then GoTo d90
87. work(K) = -(EK + T) / A(K, K)
88. Next K
89. For KB = 1 To NM1
90. K = N - KB
91. T = 0#
92. KP1 = K + 1
93. For I = KP1 To N
94. T = T + A(I, K) * work(K)
95. Next I
96. work(K) = T
97. M = ipvt(K)
98. If M = K Then GoTo d60
99. T = work(M)

260
APÉNDICE C

100. work(M) = work(K)


101. work(K) = T
102. d60: Next KB
103. YNORM = 0
104. For I = 1 To N
105. YNORM = YNORM + Abs(work(I))
106. Next I
107. 'Resolviendo A*Z = Y
108. Call solve(NDIM, N, A(), work(), ipvt())
109. ZNORM = 0#
110. For I = 1 To N
111. ZNORM = ZNORM + Abs(work(I))
112. Next I
113. 'Estimando la condici¢n
114. cond = ANORM * ZNORM / YNORM
115. If cond < 1# Then cond = 1#
116. Exit Sub
117. 'Sistema de 1 por 1
118. d80: cond = 1#
119. If A(1, 1) <> 0# Then Exit Sub
120. 'Singularidad exacta
121. d90: cond = 1E+32
122. End Sub
123. Sub solve(NDIM, N, A(), B(), ipvt())
124. 'Solución del sistema lineal, A*X = B.
125. 'Sí la subrutina DECOMP detecta singularidad se omite la ejecución de
126. 'este procedimiento.
127. 'Datos de entrada :
128. 'NDIM = Dimensionamiento del arreglo de la matriz A.
129. 'N = Orden de la matriz.
130. 'A = Matriz tri ngularizada, obtenida por DECOMP.
131. 'B = Vector de t‚rminos independientes.
132. 'IPVT = Vector pivote, obtenido por DECOMP.
133. 'Datos de salida :
134. 'B = Vector soluci¢n, X.
135. 'Eliminaci¢n hacia adelante
136. If N = 1 Then GoTo s50
137. NM1 = N - 1
138. For K = 1 To NM1
139. KP1 = K + 1
140. M = ipvt(K)
141. T = B(M)
142. B(M) = B(K)
143. B(K) = T
144. For I = KP1 To N
145. B(I) = B(I) + A(I, K) * T
146. Next I
147. Next K
148. 'Sustitución hacia atrás
149. For KB = 1 To NM1
150. KM1 = N - KB
151. K = KM1 + 1
152. B(K) = B(K) / A(K, K)
153. T = -B(K)
154. For I = 1 To KM1
155. B(I) = B(I) + A(I, K) * T
156. Next I
157. Next KB
158. s50: B(1) = B(1) / A(1, 1)
159. End Sub

261
APÉNDICE C

23. Declaraciones y rutinas generales.


1. Option Explicit
2. Public I%, J% , C As Chart
3. Function RangeExists(R As String) As Boolean
4. 'VERIFICA QUE UN RANGO EXISTA
5. Dim Test As Range
6. On Error Resume Next
7. Set Test = ActiveSheet.Range(R)
8. RangeExists = Err.Number = 0
9. End Function
10. Function VALOR(S As String)
11. 'CALCULA EL VALOR DE LO ESCRITO EN UNA CELDA
12. If RangeExists(S) = True Then
13. VALOR = Range(S).Value
14. Else
15. VALOR = Val(S)
16. End If
17. End Function

262
APÉNDICE D

Apéndice D
APÉNDICE D
Contenido del apéndice:

1. Descripción del formulario FDATOSNODAL y sus componentes principales.


2. Subrutina ejecutada por el botón Datos análisis nodal.
3. Subrutina ejecutada por el botón Separador como nodo solución.
4. Subrutina ejecutada por el botón Cabeza de pozo como nodo solución.
5. Subrutina ejecutada por el botón Fondo de pozo como nodo solución.
6. Subrutina ejecutada por el botón Yacimiento como nodo solución.
7. Subrutina ejecutada por el botón Resolver nodal.
8. Lista de variables usadas y sus unidades.
9. Declaración de variables principales: Se definen las variables generales (variables que
interactúan con el usuario) las variables usadas por cada subrutina se definen dentro de
las mismas.
10. Subrutina CALNODAL: Es la subrutina principal del método, en ella se calculan las curvas
de inflow y outflow dependiendo del nodo solución y se crea una gráfica que muestra los
resultados.
11. Función DPBEGBR: Calcula el perfil de presión con incrementos en longitud para una
tubería con la correlación de Beggs y Brill regresando la presión al final de la tubería.
12. Subrutina VELOCITY: subrutina para obtener gastos volumétricos, velocidades
superficiales y variables adimensionales para la correlación de Beggs y Brill.
13. Subrutina BEGBR: Calcula el gradiente de presión por fricción, aceleración, elevación y
total.
14. Subrutina CALRS: Calcula la relación gas aceite, relación gas agua, presión de burbuja y
densidades relativas del gas libre y disuelto.
15. Subrutina CALFVF: Calcula el factor de volumen del aceite.
16. Subrutina SURFT: Calcula la tensión superficial gas aceite y gas agua.
17. Subrutina LIQVIS: Calcula las viscosidades del agua y aceite.
18. Subrutina GASVIS: Calcula la viscosidad del gas.
19. Función CALQOMAX.
20. Función BO_STANDING
21. Función BW_GOULD
22. Función CO_VAZQUEZ
23. Función FRFAC.
24. Función GVIS_LEE.
25. Función PB_STANDING.
26. Función RS_STANDING.
27. Función RSW_MCCOY.
28. Función SURO_BAKER.
29. Función SURW_JENNINGS.
30. Función VISD_BEGGS.
31. Función VISO_BEGGS.

263
APÉNDICE D

32. Función VISO_VAZQUEZ.


33. Función VISW_VANWINGEN.
34. Función ZFACTOR.
35. Declaraciones y rutinas generales.

1. Descripción del formulario FDATOSNODAL de la Figura 5.45.


El formulario FDATOSNODAL de la Figura D. 1 es un UserForm que nos permite introducir los
datos necesarios para realizar el análisis nodal, las descripciones de los objetos principales se
muestran en la Tabla D. 1, los objetos restantes son Frame y Label que agrupan los datos y
muestran etiquetas, pero no realizan ninguna instrucción.

Figura D. 1 Formulario FDATOSNODAL con sus componentes principales.

Tabla D. 1 Descripción de los elementos principales de FDATOSNODAL.


Número Objeto Descripción
1 RefEdit Propiedad name: RefEditAPI
2 RefEdit Propiedad name: RefEditSGPG
3 RefEdit Propiedad name: RefEditSGPW
4 RefEdit Propiedad name: RefEdiTPWS
5 RefEdit Propiedad name: RefEdiTPWF
6 RefEdit Propiedad name: RefEdiTPSEP
7 RefEdit Propiedad name: RefEditTs
8 RefEdit Propiedad name: RefEditAPI
9 RefEdit Propiedad name: RefEditQO
10 RefEdit Propiedad name: RefEditQW
11 RefEdit Propiedad name: RefEditGOR
12 RefEdit Propiedad name: RefEditDTP
13 RefEdit Propiedad name: RefEditLTP
14 RefEdit Propiedad name: RefEditDLD
15 RefEdit Propiedad name: RefEditLLD

264
APÉNDICE D

Botón llamado CommandButton2 que cierra el formulario si no se


16 CommandButton
realiza alguna acción.
Botón llamado CommandButton1 que lee los datos ingresados
17 CommandButton
por el usuario.

El código asociado al formulario FDATOSNODAL es:


1. Private Sub CommandButton1_Click()
2. On Error GoTo ERROR
3. 'LEER LOS DATOS Y ASIGNARLOS A VARIABLES
4. PWS = VALOR(RefEditPWS.Value)
5. PWF = VALOR(RefEditPWF.Value)
6. PSEP = VALOR(RefEditPSEP.Value)
7. LTP = VALOR(RefEditLTP.Value)
8. DTP = VALOR(RefEditDTP.Value)
9. LLD = VALOR(RefEditLLD.Value)
10. DLD = VALOR(RefEditDLD.Value)
11. API = VALOR(RefEditAPI.Value)
12. SGPG = VALOR(RefEditSGPG.Value)
13. SGPW = VALOR(RefEditSGPW.Value)
14. QO = VALOR(RefEditQO.Value)
15. QW = VALOR(RefEditQW.Value)
16. GOR = VALOR(RefEditGOR.Value)
17. TS = VALOR(RefEditTs.Value)
18. TY = VALOR(RefEditTy.Value)
19. If PWS < PWF Then GoTo ERROR
20. If PWS <= 0 Or PWF <= 0 Or PSEP <= 0 Or LTP <= 0 Or DTP <= 0 Or LLD <= 0 Or DLD <= 0
21. Or _
22. API <= 0 Or SGPG <= 0 Or SGPW <= 0 Or QO <= 0 Or GOR <= 0 Or QW < 0 Then GoTo ERROR
23. Unload Me
24. Exit Sub
25. ERROR:
26. MsgBox "Error en los datos", vbExclamation, "Error"
27. End Sub
28.
29. Private Sub CommandButton2_Click()
30. Unload Me
31. End Sub

2. Subrutina ejecutada por el botón Datos análisis nodal.


1. Sub BOTON_DAN()
2. 'MUESTRA EL FORMULARIO FDATOSNODAL PARA INGRESAR LOS DATOS NECESARIOS EN EL _
3. ANÁLISIS NODAL
4. FDATOSNODAL.Show
5. End Sub

3. Subrutina ejecutada por el botón Separador como nodo solución.


1. Sub BOTON_SEP()
2. 'ELIGE EL SEPARADOR COMO NODO SOLUCIÓN
3. MsgBox "Se ha elegido el separador como nodo solución", vbInformation, _
4. "Nodo solución"
5. NODSOL = 1
6. End Sub

4. Subrutina ejecutada por el botón Cabeza de pozo como nodo solución.


1. Sub BOTON_CAB()
2. 'ELIGE LA CABEZA DE POZO COMO NODO SOLUCIÓN
3. MsgBox "Se ha elegido la cabeza del pozo como nodo solución", vbInformation, _

265
APÉNDICE D

4. "Nodo solución"
5. NODSOL = 2
6. End Sub

5. Subrutina ejecutada por el botón Fondo de pozo como nodo solución.


1. Sub BOTON_FON()
2. 'ELIGE EL FONDO DE POZO COMO NODO SOLUCIÓN
3. MsgBox "Se ha elegido el fondo del pozo como nodo solución", vbInformation, _
4. "Nodo solución"
5. NODSOL = 3
6. End Sub

6. Subrutina ejecutada por el botón Yacimiento como nodo solución.


1. Sub BOTON_YAC()
2. 'ELIGE EL YACIMIENTO COMO NODO SOLUCIÓN
3. MsgBox "Se ha elegido el yacimiento como nodo solución", vbInformation, _
4. "Nodo solución"
5. NODSOL = 4
6. End Sub

7. Subrutina ejecutada por el botón Resolver nodal.


1. Sub BOTON_RESOLVER_NODAL()
2. 'LLAMA A LA SUBRUTINA CALNODAL PARA RESOLVER EL ANÁLISIS.
3. If NODSOL > 0 And PWS > 0 And PSEP > 0 And LTP > 0 And DTP > 0 And LLD > 0 And _
4. DLD > 0 And API > 0 And SGPG > 0 And SGPW > 0 And QO > 0 And T > 0 Then
5. Call CALNODAL(PWS, PWF, PSEP, LTP, DTP, LLD, DLD, API, SGPG, SGPW, QO, QW, _
6. GOR, T, NODSOL)
7. Else
8. MsgBox "No se ha elegido nodo solución o no se han ingresado datos validos", _
9. vbExclamation, "Nodo solución"
10. End If
11. End Sub

8. Lista de variables usadas y sus unidades.


1. ' ***************************** VARIABLES USADAS Y UNIDADES ***********************
2. ' VARIABLE DESCRIPCIÓN UNIDADES
3. ' ACCGR GRADIENTE DE PRESIÓN POR ACELERACIÓN (LPCA/PIE)
4. ' ANG ÁNGULO DE FLUJO MEDIDO DESDE LA HORIZONTAL (GRADOS)
5. ' API DENSIDAD DEL ACEITE (°API)
6. ' BG FACTOR DE VOLUMEN DEL GAS (PIE3@CY/PIE3@CE)
7. ' BO FACTOR DE VOLUMEN DEL ACEITE (BL@CY/BL@CE)
8. ' BW FACTOR DE VOLUMEN DEL AGUA (BL@CY/BL@CE)
9. ' CO COMPRESIBILIDAD DEL ACEITE (1/LPCA)
10. ' DENG DENSIDAD DEL GAS (LIBRAS/PIE3)
11. ' DENL DENSIDAD DEL LÍQUIDO (LIBRAS/PIE3)
12. ' DENO DENSIDAD DEL ACEITE (LIBRAS/PIE3)
13. ' DENW DENSIDAD DEL AGUA (LIBRAS/PIE3)
14. ' DI DIÁMETRO (PIES)
15. ' DLD DIÁMETRO DE LA LÍNEA DE DESCARGA (PULGADAS)
16. ' DPDL GRADIENTE DE PRESIÓN TOTAL (LPCA/PIE)
17. ' DPE CAÍDA DE PRESIÓN ESTIMADA (LPCA)
18. ' DTP DIÁMETRO DE LA TUBERÍA DE PRODUCCIÓN (PULGADAS)
19. ' ED RUGOSIDAD DE LA TUBERÍA (-)
20. ' ELGR GRADIENTE DE PRESIÓN POR ELEVACIÓN (LPCA/PIE)
21. ' FF FACTOR DE FRICCIÓN (-)
22. ' FLUJO
23. ' FO FRACCIÓN DE ACEITE EN LA FASE LÍQUIDA (-)
24. ' FRGR GRADIENTE DE PRESIÓN POR FRICCIÓN (LPCA/PIE)
25. ' GOR RELACIÓN GAS ACEITE (PIE3/BL)

266
APÉNDICE D

26. ' GVIS VISCOSIDAD DEL GAS (CP)


27. ' HL COLGAMIENTO DE LÍQUIDO (-)
28. ' HLNS COLGAMIENTO DE LIQUIDO SIN RESBALAMIENTO (-)
29. ' ICRIT PARÁMETROFE FLUJO CRÍTICO: =0 SI EKK<0.95; =1 SI ELL>0.95
30. ' IREG INDICADOR DE RÉGIMEN DE FLUJO: 1 = LÍQUIDO; 2 = GAS;
31. ' 3 = BURBUJA O DISTRIBUIDO; 4 = BACHE O INTERMITENTE;
32. ' 5 = NIEBLA O SEGREGADO; 6 = TRANSICIÓN. (1,2,3,4,5,6)
33. ' LLD LONGITUD DE LA LÍNEA DE DESCARGA (PIES)
34. ' LT LONGITUD TOTAL (PIES)
35. ' LTP LONGITUD DE LA TUBERÍA DE PRODUCCIÓN (PIES)
36. ' NODSOL NODO SOLUCIÓN (DEPENDIENDO DEL NODO SOLUCIÓN)
37. ' 1: SEPARADOR COMO NODO SOLUCIÓN
38. ' 2: CABEZA DE POZO COMO NODO SOLUCIÓN
39. ' 3: FONDO DEL POZO COMO NODO SOLUCIÓN
40. ' 4: YACIMIENTO COMO NODO SOLUCIÓN (1,2,3,4)
41. ' P PRESIÓN (LPCA)
42. ' PB PRESIÓN DE BURBUJA (LPCA)
43. ' PSEP PRESIÓN EN EL SEPARADOR (LPCA)
44. ' PWF PRESIÓN DE FONDO FLUYENDO (LPCA)
45. ' PWS PRESIÓN DE FONDO ESTÁTICA (LPCA)
46. ' QGPT GASTO VOLÚMETRICO DE GAS (PIE3/SEG)
47. ' QO GASTO DE ACEITE (BPD)
48. ' QW GASTO DE AGUA (BPD)
49. ' QWPT GASTO VOLUMÉTRICO DE ACEITE (PIE3/SEG)
50. ' REY NÚMERO DE REYNOLDS (-)
51. ' RS RELACIÓN DE SOLUBILIDAD GAS-ACEITE (PIE3@CE/BL@CE)
52. ' RSW RELACIÓN DE SOLUBILIDAD GAS-AGUA (PIE3@CE/BL@CE)
53. ' SG100 DENSIDAD RELATIVA DEL GAS A 100 LPCG (-)
54. ' SGDG DENSIDAD RELATIVA DEL GAS DISUELTO (-)
55. ' SGFG DENSIDAD RELATIVA DEL GAS LIBRE (-)
56. ' SGPG DENSIDAD RELATIVA DEL GAS (-)
57. ' SGPW DENSIDAD RELATIVA DEL AGUA (-)
58. ' SURL TENSIÓN SUPERFICIAL GAS-LÍQUIDO (-)
59. ' SURO TENSIÓN SUPERFICIAL GAS-ACEITE (-)
60. ' SURW TENSIÓN SUPERFICIAL GAS-AGUA (-)
61. ' T TEMPERATURA DEL SISTEMA (°F)
62. ' TSEP TEMPERATURA DE SEPARACIÓN (°F)
63. ' VISL VISCOSIDAD DEL LÍQUIDO (CP)
64. ' VISO VISCOSIDAD DEL ACEITE (CP)
65. ' VISW VISCOSIDAD DEL AGUA (CP)
66. ' VM VELOCIDAD SUPERFICIAL DE LA MEZCLA (PIE/SEG)
67. ' VSG VELOCIDAD SUPERFICIAL DEL GAS (PIE/SEG)
68. ' VSL VELOCIDAD SUPERFICIALDEL LÍQUIDO (PIE/SEG)
69. ' XND DIÁMETRO ADIMENSIONAL (-)
70. ' XNGV VELOCIDAD DEL GAS ADIMENSIONAL (-)
71. ' XNL VISCOSIDAD DEL LÍQUIDO ADIMENSIONAL (-)
72. ' XNLV VELOCIDAD DELIQUIDO ADIMENSIONAL (-)
73. ' Z FACCTOR DE COMPRESIBILIDAD DEL GAS (-)

9. Declaración de variables principales.


1. Option Explicit 'OBLIGA A DECLARAR TODAS LAS VARIABLES USADAS.
2. Public PWS#, PWF#, PSEP#, LTP#, DTP#, LLD#, DLD#, API#, SGPG#, SGPW#, QO#, _
3. QW#, GOR#, T#, NODSOL%, Pb#

10. Subrutina CALNODAL.


1. Sub CALNODAL(PWS#, PWF#, PSEP#, LTP#, DTP#, LLD#, DLD#, API#, SGPG#, SGPW#, _
2. QO#, QW#, GOR#, T#, NODSOL%)
3. 'SUBRUTINA QUE RESUELVE EL ANÁLISIS NODAL
4. 'INSTRUCCIÓN PARA EVITAR ALGÚN ERROR NO CONTEMPLADO EN LA SUBRUTINA.
5. On Error Resume Next

267
APÉNDICE D

6. 'DECLARACIÓN DE VARIABLES USADAS INTERNAMENTE EN LA SUBRUTINA CALNODAL


7. Dim VECQ() As Double, VECPYAC() As Double, VECPFON() As Double, _
8. VECPCAB() As Double, VECPSEP() As Double, PINFLOW() As Double, _
9. POUTFLOW() As Double, ANGTP#, ANGLD#, ED#, QOMAX#, QPRON#, NDAT#, DPE#, _
10. DPC#, PENT#, INTQ() As Double, INTP() As Double, SIG1#, SIG2#, _
11. PEN1, PEN2 As Double, I%, J%, TITULO$, ANCHO#
12. 'CÓMO LA TUBERÍA DE PRODUCCIÓN Y DESCARGA SE CONSIDERAN TOTALMENTE VERTICAL _
13. Y HORIZONTAL RESPECTIVAMENTE LOS ÁNGULOS ASOCIADOS SON 90 Y 0°. SE _
14. CONVERTEN LOS DIÁMETROS A PIES Y SE ESTABLECE EL VALOR DE RUGOSIDAD _
15. RELATIVA EN 0.0006 PARA AMBAS TUBERÍAS
16. ANGTP = 90: ANGLD = 0: DTP = DTP / 12: DLD = DLD / 12: ED = 0.0006
17. 'CALCULAR EL GASTO MÁXIMO
18. QOMAX = CALQOMAX(QO, PWF, PWS)
19. 'ESTABLECER PRESIÓN EN EL YACIMIENTO Y SEPARADOR CONSTANTES
20. I = 0: QPRON = 0
21. Do While QPRON < QOMAX + 10
22. Redim Preserve VECPYAC(1 To I + 1)
23. Redim Preserve VECPSEP(1 To I + 1)
24. Redim Preserve VECQ(1 To I + 1)
25. QPRON = QPRON + 10
26. VECQ(I + 1) = QPRON
27. VECPYAC(I + 1) = PWS
28. VECPSEP(I + 1) = PSEP
29. I = I + 1
30. NDAT = I
31. Loop
32. VECQ(I) = QOMAX: VECPYAC(I) = PWS
33. 'REDIMENSIONAR LOS VECTORES DE DATOS PARA CALCULO DE CAÍDAS DE PRESIÓN.
34. Redim VECPCAB(1 To NDAT)
35. Redim VECPFON(1 To NDAT)
36. Redim PINFLOW(1 To NDAT)
37. Redim POUTFLOW(1 To NDAT)
38. 'SE SELECCIONA EL CASO DEPENDIENDO DEL NODO SOLUCIÓN: 1 SEPARADOR; 2 CABEZA;
39. '3 FONDO; 4 YACIMIENTO
40. Select Case NODSOL
41. Case 1 'SEPARADOR COMO NODO SOLUCIÓN.
42. TITULO = "Separador como nodo solución"
43. '***** CURVA DE INFLOW *****
44. For I = 1 To NDAT
45. 'CAÍDA DE PRESIÓN DEL YACIMIENTO AL FONDO DEL POZO
46. VECPFON(I) = 0.125 * (-1 + Sqr(81 - (80 * (VECQ(I) / QOMAX)))) * PWS
47. 'CAÍDA DE PRESIÓN DEL FONDO A LA CABEZA DEL POZO
48. PENT = VECPYAC(I) - (VECPYAC(I) - VECPFON(I))
49. VECPCAB(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, SGPG, _
50. DTP, SGPW, ANGTP, ED, LTP, 1, 1)
51. 'CAÍDA DE PRESIÓN DE LA CABEZA DE POZO AL SEPARADOR
52. PENT = VECPCAB(I)
53. VECPSEP(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, SGPG, _
54. DLD, SGPW, ANGLD, ED, LLD, 1, 1)
55. 'CALCULAR CURVA DE INFLOW
56. PINFLOW(I) = VECPSEP(I)
57. Next I
58. '***** CURVA DE OUTFLOW *****
59. For I = 1 To NDAT
60. 'LA PRESIÓN EN EL SEPARADOR ES CONSTANTE
61. POUTFLOW(I) = PSEP
62. Next I
63. Case 2 '***** CABEZA DEL POZO *****
64. TITULO = "Cabeza de pozo como nodo solución"
65. '***** CURVA DE INFLOW *****

268
APÉNDICE D

66. For I = 1 To NDAT


67. 'CAÍDA DE PRESIÓN DEL YACIMIENTO AL FONDO DEL POZO
68. VECPFON(I) = 0.125 * (-1 + Sqr(81 - (80 * (VECQ(I) / QOMAX)))) * PWS
69. 'CAÍDA DE PRESIÓN DEL FONDO A LA CABEZA DEL POZO
70. PENT = VECPFON(I)
71. VECPCAB(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, _
72. SGPG, DTP SGPW, ANGTP, ED, LTP, 1, 1)
73. 'CALCULAR CURVA DE INFLOW
74. PINFLOW(I) = VECPCAB(I)
75. Next I
76. '***** CURVA DE OUTFLOW *****
77. For I = 1 To NDAT
78. 'CAÍDA DE PRESIÓN DEL SEPARADOR A LA CABEZA DEL POZO
79. PENT = VECPSEP(I)
80. VECPCAB(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, _
81. SGPG, DLD, SGPW, ANGLD, ED, LLD, 2, 1)
82. 'CALCULAR CAURVA DE OUTFLOW
83. POUTFLOW(I) = VECPCAB(I)
84. Next I
85. Case 3 '***** FONDO DEL POZO *****
86. TITULO = "Fondo de pozo como nodo solución"
87. '***** CURVA DE INFLOW *****
88. For I = 1 To NDAT
89. 'CAÍDA DE PRESIÓN DEL YACIMIENTO AL FONDO DEL POZO
90. VECPFON(I) = 0.125 * (-1 + Sqr(81 - (80 * (VECQ(I) / QOMAX)))) * PWS
91. PINFLOW(I) = VECPFON(I)
92. Next I
93. '***** CURVA DE OUTFLOW *****
94. For I = 1 To NDAT
95. 'CAÍDA DE PRESIÓN DEL SEPARADOR A LA CABEZA DEL POZO
96. PENT = VECPSEP(I)
97. VECPCAB(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, SGPG, _
98. DLD, SGPW, ANGLD, ED, LLD, 2, 1)
99. 'CAÍDA DE PRESIÓN DE LA CABEZA AL FONDO DEL POZO
100. PENT = VECPCAB(I)
101. VECPFON(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, SGPG, _
102. DTP, SGPW, ANGTP, ED, LTP, 2, 1)
103. 'CALCULAR CAURVA DE OUTFLOW
104. POUTFLOW(I) = VECPFON(I)
105. Next I
106. Case 4 '"Yacimiento"
107. TITULO = "Yacimiento como nodo solución"
108. '***** CURVA DE INFLOW *****
109. For I = 1 To NDAT
110. 'CALCULAR CURVA DE INFLOW, PRESIÓN DE YACIMIENTO CONSTANTE
111. PINFLOW(I) = PWS
112. Next I
113. '***** CURVA DE OUTFLOW *****
114. For I = 1 To NDAT
115. 'CAÍDA DE PRESIÓN DEL SEPARADOR A LA CABEZA DEL POZO
116. PENT = VECPSEP(I)
117. VECPCAB(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, SGPG, _
118. DLD, SGPW, ANGLD, ED, LLD, 2, 1)
119. 'CAÍDA DE PRESIÓN DE LA CABEZA AL FONDO DEL POZO
120. PENT = VECPCAB(I)
121. VECPFON(I) = DPBEGBR(PENT, T, PSEP, T, VECQ(I), QW, GOR, API, SGPG, _
122. DTO, SGPW, ANGTP, ED, LTP, 2, 1)
123. Next I
124. 'CAÍDA DE PRESIÓN DEL FONDO DEL POZO AL YACIMIENTO
125. I = 1

269
APÉNDICE D

126. Do While VECPYAC(I - 1) < PWS * 1.5 'JJ > 0


127. VECPYAC(I) = VECPFON(I) / (0.125 * (-1 + Sqr(81 - (80 * (VECQ(I) / _
128. QOMAX)))))
129. I = I + 1
130. Loop
131. Redim Preserve VECPYAC(1 To I - 1)
132. Redim Preserve POUTFLOW(1 To I - 1)
133. For I = 1 To Ubound(VECPYAC)
134. 'CALCULAR CAURVA DE OUTFLOW
135. POUTFLOW(I) = VECPYAC(I)
136. Next I
137. End Select
138.
139. 'ENCONTRAR LOS PUNTOS DE INTERSECCIÓN DE LAS CURVAS DE INFLOW Y OUTFLOW _
140. Y ENCONTRAR EL PUNTO DE INTERSECCIÓN MEDIANTE LA ECUACIÓN PUNTO PENDIENTE.
141. J = 0
142. SIG1 = (PINFLOW(1) - POUTFLOW(1)) / Abs(PINFLOW(1) - POUTFLOW(1))
143. For I = 1 To Ubound(POUTFLOW)
144. SIG2 = (PINFLOW(I) - POUTFLOW(I)) / Abs(PINFLOW(I) - POUTFLOW(I))
145. If SIG1 <> SIG2 Then
146. J = J + 1
147. Redim Preserve INTQ(1 To J): Redim Preserve INTO(1 To J)
148. PEN1 = (PINFLOW(I) - PINFLOW(I - 1)) / (VECQ(I) - VECQ(I - 1))
149. PEN2 = (POUTFLOW(I) - POUTFLOW(I - 1)) / (VECQ(I) - VECQ(I - 1))
150. INTQ(J) = (PINFLOW(I) - POUTFLOW(I) + PEN2 * VECQ(I) - PEN1 * VECQ(I)) / _
151. (PEN2 - PEN1)
152. INTO(J) = PINFLOW(I) + PEN1 * (INTQ(J) - VECQ(I))
153. SIG1 = SIG2
154. End If
155. Next I
156.
157. ‘Dibujo del SIP
158. Set Hoja = ActiveWorkbook.Sheets.Add
159. Application.Wait (Now + TimeValue("00:00:01"))
160. Hoja.Name = "Resultados AN " & Format(Time, "HH") & ";" & Format(Time, "MM") _
161. & ";" & Format(Time, "SS")
162.
163. With Hoja
164. .Cells(1, 1) = "Análisis nodal " & Format(Time, "HH") & ";" & _
165. Format(Time, "MM") & ";" & Format(Time, "SS")
166. Range(.Cells(1, 1), .Cells(1, 2)).Merge
167. Range(.Cells(1, 1), .Cells(1, 6)).HorizontalAlignment = xlCenter
168. .Cells(2, 1) = "Datos"
169. .Cells(2, 3) = "Nodo solución"
170. .Cells(2, 4) = "Gráfica"
171.
172. Range(.Cells(2, 1), .Cells(2, 2)).Merge
173.
174.
175. .Cells(3, 1) = "API (°API) ="
176. .Cells(4, 1) = "Densidad relativa del gas (-) ="
177. .Cells(5, 1) = "Densidad relativa del agua (-) ="
178. .Cells(6, 1) = "Presión de fondo estática Pws (lpca) ="
179. .Cells(7, 1) = "Presión de fondo fluyendo Pwf (lpca) ="
180. .Cells(8, 1) = "Presión de separación Psep (lpca) ="
181. .Cells(9, 1) = "Temperatura en superficie (°F) ="
182. .Cells(10, 1) = "Temperatura de yacimiento (°F) ="
183. .Cells(11, 1) = "Gasto de aceite (BPD) ="
184. .Cells(12, 1) = "Gasto de agua (BPD) ="
185. .Cells(13, 1) = "Relación gas-aceite (pie3/bl) ="

270
APÉNDICE D

186. .Cells(14, 1) = "Diámetro de la tubería de producción (pg) ="


187. .Cells(15, 1) = "Longitud de la tubería de producción (pies) ="
188. .Cells(16, 1) = "Diámetro de la línea de descarga (pg) ="
189. .Cells(17, 1) = "Longitud de la línea de descarga (pies) ="
190. .Columns(1).ColumnWidth = 40
191. .Columns(3).ColumnWidth = 42
192. .Columns(4).ColumnWidth = 70
193. Range(.Cells(3, 1), .Cells(17, 2)).HorizontalAlignment = xlRight
194.
195. Range(.Cells(2, 1), .Cells(2, 4)).Select
196. With Selection
197.
198. .HorizontalAlignment = xlCenter
199. .VerticalAlignment = xlCenter
200. .Rows.RowHeight = 5 * 5.66
201. .Borders(xlEdgeTop).LineStyle = xlContinuous
202. .Borders(xlEdgeBottom).LineStyle = xlContinuous
203. .Interior.Color = RGB(192, 192, 192)
204. .WrapText = True
205. End With
206. 'For I = 1 To UBound(P)
207. .Cells(3, 2) = API
208. .Cells(4, 2) = SGPG
209. .Cells(5, 2) = SGPW
210. .Cells(6, 2) = PWS
211. .Cells(7, 2) = PWF
212. .Cells(8, 2) = PSEP
213. .Cells(9, 2) = TY
214. .Cells(10, 2) = TS
215. .Cells(11, 2) = QO
216. .Cells(12, 2) = QW
217. .Cells(13, 2) = GOR
218. .Cells(14, 2) = DTP
219. .Cells(15, 2) = LTP
220. .Cells(16, 2) = DLD
221. .Cells(17, 2) = LLD
222. 'Next I
223. End With
224.
225. ActiveSheet.Shapes.AddChart.Select
226. ActiveChart.Parent.Left = Range("C3").Left + 5
227. ActiveChart.Parent.Top = Range("C3").Top + 5
228. ActiveChart.Parent.Height = 216
229. ActiveChart.Parent.Width = 216
230. ActiveChart.ChartArea.ClearContents
231. ActiveChart.Shapes.AddConnector(msoConnectorStraight, 8, 50, 200, 50).Select
232. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
233. Selection.ShapeRange.Line.Weight = 3
234.
235. With ActiveChart.Shapes.BuildFreeform(msoEditingAuto, 8, 180)
236. .AddNodes msoSegmentLine, msoEditingAuto, 160, 180
236. .AddNodes msoSegmentLine, msoEditingAuto, 155, 185
237. .AddNodes msoSegmentLine, msoEditingAuto, 160, 190
238. .AddNodes msoSegmentLine, msoEditingAuto, 155, 195
239. .AddNodes msoSegmentLine, msoEditingAuto, 160, 200
240. .AddNodes msoSegmentLine, msoEditingAuto, 8, 200
241. .AddNodes msoSegmentLine, msoEditingAuto, 13, 195
242. .AddNodes msoSegmentLine, msoEditingAuto, 8, 190
243. .AddNodes msoSegmentLine, msoEditingAuto, 13, 185
244. .AddNodes msoSegmentLine, msoEditingAuto, 8, 180

271
APÉNDICE D

245. .ConvertToShape.Select
246. End With
247. Selection.ShapeRange.Fill.Patterned msoPattern20Percent
248. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
249. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
250.
251.
252.
253. With ActiveChart.Shapes.BuildFreeform(msoEditingAuto, 50, 170)
254. .AddNodes msoSegmentLine, msoEditingAuto, 70, 170
255.
256. .AddNodes msoSegmentLine, msoEditingAuto, 70, 185
257. .AddNodes msoSegmentLine, msoEditingAuto, 75, 186
258. .AddNodes msoSegmentLine, msoEditingAuto, 70, 187
259.
260. .AddNodes msoSegmentLine, msoEditingAuto, 70, 189
261. .AddNodes msoSegmentLine, msoEditingAuto, 75, 190
262. .AddNodes msoSegmentLine, msoEditingAuto, 70, 191
263.
264. .AddNodes msoSegmentLine, msoEditingAuto, 70, 193
265. .AddNodes msoSegmentLine, msoEditingAuto, 75, 194
266. .AddNodes msoSegmentLine, msoEditingAuto, 70, 195
267.
268. .AddNodes msoSegmentLine, msoEditingAuto, 70, 200
269. .AddNodes msoSegmentLine, msoEditingAuto, 50, 200
270.
271. .AddNodes msoSegmentLine, msoEditingAuto, 50, 195
272. .AddNodes msoSegmentLine, msoEditingAuto, 45, 194
273. .AddNodes msoSegmentLine, msoEditingAuto, 50, 193
274.
275. .AddNodes msoSegmentLine, msoEditingAuto, 50, 191
276. .AddNodes msoSegmentLine, msoEditingAuto, 45, 190
277. .AddNodes msoSegmentLine, msoEditingAuto, 50, 189
278.
279. .AddNodes msoSegmentLine, msoEditingAuto, 50, 187
280. .AddNodes msoSegmentLine, msoEditingAuto, 45, 186
281. .AddNodes msoSegmentLine, msoEditingAuto, 50, 185
282.
283. .AddNodes msoSegmentLine, msoEditingAuto, 50, 170
284. .ConvertToShape.Select
285. End With
286. 'Selection.ShapeRange.Fill.Patterned msoPattern20Percent
287. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
288. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
289.
290. 'Empacadores
291. With ActiveChart.Shapes.BuildFreeform(msoEditingAuto, 50, 165)
292. .AddNodes msoSegmentLine, msoEditingAuto, 70, 165
293. .AddNodes msoSegmentLine, msoEditingAuto, 70, 170
294. .AddNodes msoSegmentLine, msoEditingAuto, 50, 170
295. .AddNodes msoSegmentLine, msoEditingAuto, 50, 165
296. .ConvertToShape.Select
297. End With
298. 'Selection.ShapeRange.Fill.Patterned msoPattern20Percent
299. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
300. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
301.
302. 'Pozo
303. With ActiveChart.Shapes.BuildFreeform(msoEditingAuto, 50, 45)
304. .AddNodes msoSegmentLine, msoEditingAuto, 70, 45

272
APÉNDICE D

305. .AddNodes msoSegmentLine, msoEditingAuto, 70, 165


306. .AddNodes msoSegmentLine, msoEditingAuto, 50, 165
307. .AddNodes msoSegmentLine, msoEditingAuto, 50, 45
308. .ConvertToShape.Select
309. End With
310. 'Selection.ShapeRange.Fill.Patterned msoPattern20Percent
311. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
312. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
313.
314. 'Tuberías
315. With ActiveChart.Shapes.BuildFreeform(msoEditingAuto, 56, 27)
316. .AddNodes msoSegmentLine, msoEditingAuto, 140, 27
317. .AddNodes msoSegmentLine, msoEditingAuto, 140, 35
318. .AddNodes msoSegmentLine, msoEditingAuto, 64, 35
319. .AddNodes msoSegmentLine, msoEditingAuto, 64, 175
320. .AddNodes msoSegmentLine, msoEditingAuto, 56, 175
321. .AddNodes msoSegmentLine, msoEditingAuto, 56, 27
322. .ConvertToShape.Select
323. End With
324. Selection.ShapeRange.Fill.Patterned msoPatternLightUpwardDiagonal
325. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
326. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
327. Selection.ShapeRange.Fill
328.
329. 'Separador
330. ActiveChart.Shapes.AddShape(msoShapeFlowchartDelay, 140, 9, 40, 40).Select
331. Selection.ShapeRange.IncrementRotation 270
332. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(255, 255, 255)
333. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
334.
335. 'Nodos
336.
337. ActiveChart.Shapes.AddShape(msoShapeOval, 143.25, 186.75, 6, 6).Select
338. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
339. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
340.
341. ActiveChart.Shapes.AddShape(msoShapeOval, 58, 186.75, 6, 6).Select
342. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
343. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
344.
345. ActiveChart.Shapes.AddShape(msoShapeOval, 58, 29, 6, 6).Select
346. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
347. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
348.
349. ActiveChart.Shapes.AddShape(msoShapeOval, 157, 29, 6, 6).Select
350. Selection.ShapeRange.Fill.ForeColor.RGB = RGB(0, 0, 0)
351. Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
352.
353. ActiveChart.Shapes.AddTextbox(msoTextOrientationHorizontal, 90, 100, 110, 40). _
354. Select
355. Select Case NODSOL
356. Case 1
357. Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
358. "Nodo seleccionado: Separador"
359. Case 2
360. Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
361. "Nodo seleccionado: Cabeza de pozo"
362. Case 3
363. Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
364. "Nodo seleccionado: Fondo de pozo"

273
APÉNDICE D

365. Case 4
366. Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
367. "Nodo seleccionado: Yacimiento"
368. End Select
369.
370. Selection.ShapeRange.TextFrame2.TextRange.ParagraphFormat.Alignment = _
371. msoAlignCenter
372. Selection.ShapeRange.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = _
373. RGB(255, 0, 0)
374.
375. Select Case NODSOL
376. Case 1
377. ActiveChart.Shapes.AddShape(msoShapeOval, 145.5, 17, 30, 30).Select
378. Case 2
379. ActiveChart.Shapes.AddShape(msoShapeOval, 46, 17, 30, 30).Select
380. Case 3
381. ActiveChart.Shapes.AddShape(msoShapeOval, 46, 176, 30, 30).Select
382. Case 4
383. ActiveChart.Shapes.AddShape(msoShapeOval, 131, 176, 30, 30).Select
384. End Select
385. Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0)
386. Selection.ShapeRange.Fill.Visible = msoFalse
387. Selection.ShapeRange.Line.Weight = 1.5
388. Selection.ShapeRange.Line.DashStyle = msoLineDash 'CREAR LA GRÁFICA, LAS SIGUIENTES
389. INSTRUCCIONES CREAN UNA GRÁFICA SIMILAR A _
390. LAS MOSTRADAS EN EL CAPÍTULO 5, EL FORMATO ES LIBRE Y PUEDE OMITIRSE DE _
391. SER NECESARIO.
392. ActiveSheet.Shapes.AddChart.Select
393. Set C = ActiveChart
394. C.ChartType = xlXYScatterSmooth
395. C.Axes(xlValue).MinimumScale = 0
396. 'FORMATO DE LÍNEA Y DATOS DE LA SERIE 1 (CURVA DE INFLOW)
397. If C.SeriesCollection.Count = 0 Then C.SeriesCollection.NewSeries
398. With C.FullSeriesCollection(1) 'SERIE 1 CURVA INFLOW
399. .name = "Inflow"
400. .XValues = VECQ 'DATOS EJE X
401. .Values = PINFLOW 'DATOS EJE Y
402. .MarkerStyle = xlMarkerStyleNone
403. .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
404. .Format.Line.Weight = 2
405. .Format.Line.DashStyle = msoLineSysDash
406. End With
407. 'FORMATO DE LÍNEA Y DATOS DE LA SERIE 2 (CURVA DE OUTFLOW)
408. C.SeriesCollection.NewSeries
409. With C.FullSeriesCollection(2) 'SERIE 2 CURVA OUTFLOW
410. .name = "Outflow"
411. .XValues = VECQ 'DATOS EJE X
412. .Values = POUTFLOW 'DATOS EJE Y
413. .MarkerStyle = xlMarkerStyleNone
414. .Format.Line.ForeColor.RGB = RGB(255, 0, 0)
415. .Format.Line.Weight = 2
416. End With
417. 'FORMATO DE LÍNEA Y DATOS DE LA SERIE 3 (INTERSECCIÓN)
418. C.SeriesCollection.NewSeries
419. With C.FullSeriesCollection(3) 'SERIE 3 INTERSECCIÓN DE LAS CURVAS
420. .name = "Solución"
421. .XValues = INTQ 'DATOS EJE X
422. .Values = INTO 'DATOS EJE Y
423. .MarkerStyle = xlMarkerStyleCircle
424. .MarkerSize = 5

274
APÉNDICE D

425. .Format.Line.ForeColor.RGB = RGB(0, 0, 0)


426. .Format.Line.Weight = 2
427. End With
428. 'FORMATO DE LA GRÁFICA (PUEDE OMITIRSE)
429. C.PlotArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
430. C.PlotArea.Format.Line.Weight = 2
431. 'FORMATO DE TITULO
432. C.HasTitle = True
433. C.ChartTitle.Font.name = "Arial"
434. C.ChartTitle.Font.Size = 12
435. C.ChartTitle.Font.Color = RGB(250, 0, 0)
436. C.ChartTitle.Characters.Text = TITULO
437. 'FORMATO DE EJE X
438. C.Axes(xlCategory).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
439. C.Axes(xlCategory).HasMajorGridlines = True
440. C.Axes(xlCategory).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
441. C.Axes(xlCategory).TickLabels.Font.Color = RGB(0, 0, 0)
442. C.Axes(xlCategory).TickLabels.Font.name = "Arial"
443. C.Axes(xlCategory).HasTitle = True
444. C.Axes(xlCategory).AxisTitle.Characters.Text = "Gasto (BPD)" '"Eje x"
445. C.Axes(xlCategory).AxisTitle.Font.name = "Arial"
446. C.Axes(xlCategory).AxisTitle.Font.Color = RGB(0, 0, 0)
447. 'FORMATO DE EJE Y
448. C.Axes(xlValue).Format.Line.ForeColor.RGB = RGB(0, 0, 0)
449. C.Axes(xlValue).HasMajorGridlines = True
450. C.Axes(xlValue).MajorGridlines.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
451. C.Axes(xlValue).TickLabels.Font.Color = RGB(0, 0, 0)
452. C.Axes(xlValue).TickLabels.Font.name = "Arial"
453. C.Axes(xlValue).HasTitle = True
454. C.Axes(xlValue).AxisTitle.Characters.Text = "Presión (lpca)" '"Eje Y"
455. C.Axes(xlValue).AxisTitle.Font.name = "Arial"
456. C.Axes(xlValue).AxisTitle.Font.Color = RGB(0, 0, 0)
457. C.Legend.Delete
458. 'COLOCAR LEYENDAS DENTRO DE LA GRÁFICA.
459. ANCHO = C.PlotArea.Width
460. C.HasLegend = True
461. C.PlotArea.Width = ANCHO
462. C.Legend.Left = C.PlotArea.InsideWidth + C.PlotArea.InsideLeft - _
463. C.Legend.Width - 5
464. C.Legend.Top = C.PlotArea.InsideTop + 5
465. C.Legend.Format.Fill.ForeColor.RGB = RGB(256, 256, 256)
566. C.Legend.Format.Line.ForeColor.RGB = RGB(0, 0, 0)
467. 'ACTUALIZAR LA GRÁFICA
468. C.Refresh
468. End Sub

11. Función DPBEGBR.


1. Function DPBEGBR(P#, T#, PSEP#, TSEP#, QO#, QW#, GOR#, API#, SGPG#, DI#, _
2. SGPW#, ANG#, ED#, LT#, FLUJO%, DPE#)
3. 'CALCULA EL GRADIENTE DE PRESIÓN CON LA CORRELACIÓN DE BEGGSY BRILL.
4. On Error Resume Next
5. Dim RS#, RSW#, SGDG#, SGFG#, SG100#, CO#, BO#, BW#, VSL#, VSG#, VM#, HLNS#, _
6. FO#, QOPT#, QWPT#, QGPT#, Z#, SURO#, SURW#, SURL#, VISO#, VISW#, VISL#, _
7. GVIS#, DENO#, DENW#, DENL#, BG#, DENG#, XNLV#, XNGV#, XNL#, XND#, QLPT#, _
8. HL#, FRGR#, ELGR#, ACCGR#, DPDL#, IREG#, ICRIT#, ITER%, L1#, P1#, DL#, _
9. DPC#, PPROM#, L#, PAR#
10. L1 = 0: P1 = P
11. DL = LT * 0.1
12. DPE = 0: DPC = 0
13. Do

275
APÉNDICE D

14. ITER = 0
15. Do
16. ITER = ITER + 1
17. DPE = DPC
18. If FLUJO = 1 Then PPROM = P1 - DPE / 2
19. If FLUJO = 2 Then PPROM = P1 + DPE / 2
20. Call VELOCITY(PPROM, T, PSEP, TSEP, QO, QW, GOR, API, SGPG, DI, SGPW, _
21. RS, RSW, SGDG, SGFG, SG100, Pb, CO, BO, BW, VSL, VSG, VM, HLNS, _
22. FO, QOPT, QWPT, QGPT, Z, SURO, SURW, SURL, VISO, VISW, VISL, _
23. GVIS, DENO, DENW, DENL, BG, DENG, XNLV, XNGV, XNL, XND)
24. Call BEGBR(ANG, DI, ED, PPROM, VM, HLNS, DENG, DENL, GVIS, VISL, _
25. XNLV, HL, FRGR, ELGR, ACCGR, DPDL, IREG, ICRIT)
26. DPC = DL * DPDL
27. Loop While Abs(DPE - DPC) > 0.00001 And ITER < 50
28. L1 = L1 + DL
29. If FLUJO = 1 Then P1 = P1 - DPC
30. If FLUJO = 2 Then P1 = P1 + DPC
31. Loop Until L1 >= LT
32. DPBEGBR = P1
33. End Function

12. Subrutina VELOCITY.


1. Sub VELOCITY(P#, T#, PSEP#, TSEP#, QO#, QW#, GOR#, API#, SGPG#, DI#, SGPW#, _
2. RS#, RSW#, SGDG#, SGFG#, SG100#, Pb#, CO#, BO#, BW#, VSL#, VSG#, VM#, _
3. HLNS#, FO#, QOPT#, QWPT#, QGPT#, Z#, SURO#, SURW#, SURL#, VISO#, _
4. VISW#, VISL#, GVIS#, DENO#, DENW#, DENL#, BG#, DENG#, XNLV#, XNGV#, _
5. XNL#, XND#)
6. ' CALCULA TODAS LAS PROPIEDADES FÍSICAS DE LOS FLUIDOS NECESARIAS, GASTOS _
7. VOLUMÉTRICOS PARA GAS, ACEITE Y AGUA, VELOCIDADES SUPERFICIALES DE GAS, _
8. LIQUIDO Y MEZCLA Y GRUPOS ADIMENSIONALES EN UNA SOLA RUTINA PARA SU USO EN _
9. EL CÁLCULO DE GRADIENTES DE PRESIÓN Y PATRONES DE FLUJO.
10. Dim AP#, QLPT#, FW#, VISD#, SGO#
11. ' CÁLCULO DE PROPIEDADES DE MODELO DE ACEITE NEGRO.
12. Call CALRS(P, T, SGPG, PSEP, TSEP, API, QO, QW, GOR, RS, RSW, SGDG, SGFG, _
13. SG100, Pb)
14. Call CALFVF(T, P, API, SGPG, SG100, Pb, GOR, RS, CO, BO, BW)
15. Z = ZFACTOR(T, P, SGPG)
16. BG = (14.7 / 520) * ((T + 460) * Z / P)
17. ' CÁLCULO DE GASTOS VOLUMÉTRICOS DE GAS, ACEITE Y AGUA.
18. QOPT = QO * BO * 5.615 / 86400
19. QWPT = QW * BW * 5.615 / 86400
20. QGPT = (QO * (GOR - RS) - QW * RSW) * BG / 86400
21. QLPT = QOPT + QWPT
22. ' CÁLCULO DE VELOCIDADES SUPERFICIALES DE LÍQUIDO GAS Y MEZCLA Y COLGAMIENTO _
23. SIN RESBALAMIENTO.
24. AP = (3.1416 * (DI) ^ 2) / 4
25. VSL = QLPT / AP
26. VSG = QGPT / AP
27. VM = VSL + VSG
28. HLNS = VSL / VM
29. ' FRACCIONES DE ACEITE Y AGUA EN LA FASE LÍQUIDA.
30. FO = QOPT / QLPT
31. FW = 1 - FO
32. ' PROPIEDADES FÍSICAS DEL FLUIDO.
33. Call SURFT(API, T, P, FO, FW, SURO, SURW, SURL)
34. Call LIQVIS(T, API, RS, P, Pb, VISD, VISO, VISW)
35. Call GASVIS(T, SGPG, P, GVIS)
36. VISL = VISO * FO + VISW * FW
37. SGO = 141.5 / (131.5 + API)
38. DENO = (SGO * 62.4 + (SGDG * 0.0764 * RS / 5.615)) / BO

276
APÉNDICE D

39. DENW = SGPW * 62.4


40. DENL = DENO * FO + DENW * FW
41. DENG = SGFG * 0.0764 / BG
42. ' GRUPOS ADIMENSIONALES
43. XNLV = 1.938 * VSL * (DENL / SURL) ^ 0.25
44. XNGV = XNLV * VSG / VSL
45. XNL = 0.15726 * VISL * (1 / (DENL * (SURL) ^ 3)) ^ 0.25
46. XND = 120.872 * DI * (DENL / SURL) ^ 0.5
47. End Sub

13. Subrutina BEGBR.


1. Sub BEGBR(ANG#, DI#, ED#, P#, VM#, HLNS#, DENG#, DENL#, GVIS#, VISL#, XNLV, _
2. HL#, FRGR#, ELGR#, ACCGR#, DPDL#, IREG#, ICRIT#)
3. 'SUBRUTINA PARA CALCULAR EL COLGAMIENTO DE LÍQUIDO, REGIMEN DE FLUJO Y _
4. GRADIENTE DE PRESIÓN EN (PSI/FT) USANDO LA CORRELACIÓN DE BEGGS Y BRILL. _
5. UN MAPA DE REGÍMENES DE FLUJO MODIFICADO ES USADO.
6.
7. Dim D#, C#, x#, S#, A#, VSL#, VSG#, XNFR#, ITRAN#, XL1#, XL2#, XL3#, XL4#, _
8. XDD#, HLO#, E#, F#, G#, XX#, FAC#, HLI#, AA#, B#, HLS#, DENNS#, DENS#, _
9. VISNS#, REYN#, FF#, y#, EKK#
10. 'CONVERTIR EL ÁNGULO DE INCLINACIÓN DE GRADOS A RADIANES
11. A = ANG * 3.1416 / 180
12. 'CALCULAR LAS VELOCIDADES SUPERFICIALES DE LA MEZCLA.
13. VSL = VM * HLNS
14. VSG = VM - VSL
15. XNFR = (VM) ^ 2 / (32.2 * DI)
16. 'VERIFICAR SI ES FLUJO DE UNA SOLA FASE
17. IREG = 5
18. If HLNS <= 0.99999 And HLNS >= 0.00001 Then 'DOS FASES
19. 'DETERMINAR EL RÉGIMEN DE FLUJO USANDO EN MAPA DE PATRONES DE FLUJO.
20. ITRAN = 0
21. XL1 = 316 * HLNS ^ 0.302: XL2 = 0.0009252 * HLNS ^ -2.4684
22. XL3 = 0.1 * HLNS ^ -1.4516: XL4 = 0.5 * HLNS ^ -6.738: XDD = XL1
23. If HLNS < 0.01 Then
24. If XNFR >= XL1 Then IREG = 3
25. Else
26. If HLNS > 0.4 Then XDD = XL4
27. If XNFR >= XL2 And XNFR < XL3 Then ITRAN = 1
28. If XNFR >= XL3 And XNFR < XDD Then IREG = 4
29. If XNFR >= XDD Then IREG = 3
30. End If
31. 3:
32. Select Case IREG
33. Case 3
34. '***** DISTRIBUIDO *****
35. HLO = (1.065 * HLNS ^ 0.5824) / (XNFR ^ 0.0609)
36. D = 1: E = 0: F = 0: G = 0
37. Case 4
38. '***** INTERMITENTE *****
39. HLO = (0.845 * HLNS ^ 0.5351) / (XNFR ^ 0.0173)
40. D = 2.96: E = 0.305: F = -0.4473: G = 0.0978
41. Case 5
42. '***** SEGREGADO *****
43. HLO = (0.98 * HLNS ^ 0.4846) / (XNFR ^ 0.0868)
44. D = 0.011: E = -3.768: F = 3.539: G = -1.614
45. End Select
46. 'RESTRINGIR EL VALOR MÍNIMO DE HLO
47. If HLO < HLNS Then HLO = HLNS
48. 'VERIFICAR SI ES FLUJO HORIZONTAL
49. If A <> 0 Then

277
APÉNDICE D

50. 'FACTOR DE FLUJO INCLINADO


51. If A <= 0 Then
52. D = 4.7: E = -0.3692: F = 0.1244: G = -0.5056
53. End If
54. C = (1 - HLNS) * Log((D * ((HLNS) ^ E) * ((XNLV) ^ F) * ((XNFR) ^ G)))
55. If C < 0 Then C = 0
56. XX = Sin(1.8 * A)
57. FAC = (1 + C * (XX - 0.333 * XX ^ 3))
58. HL = HLO * FAC
59. If HL > 1 Then HL = 1
60. If HL <= 0 Then HL = 0.00001
61. Else
62. HL = HLO
63. End If
64. Else 'FLUJO DE GAS O LÍQUIDO
65. If HLNS > 0.99999 Then IREG = 1
66. If HLNS < 0.00001 Then IREG = 2
67. HL = HLNS
68. GoTo 12
69. End If
70. 10:
71. 'NOTESE QUE PARA ÁNGULOS NEGATIVOS GRANDES Y BAJAS VELOCIDADES, FAC _
72. PUEDE SER NEGATIVO, LO QUE HARIA QUE HL=0.00001
73. If ITRAN = 1 Then
74. If IREG < 5 Then
75. HLI = HL
76. AA = (XL3 - XNFR) / (XL3 - XL2)
77. B = 1 - AA
78. HL = HLS * AA + HLI * B
79. IREG = 6
80. Else
81. HLS = HL
82. IREG = 4
83. GoTo 3
84. End If
85. End If
86. 12:
87. 'CALCULAR LAS PROPIEDAEDS DE LA MEZCLA
88. DENNS = DENL * HLNS + DENG * (1 - HLNS)
89. DENS = DENL * HL + DENG * (1 - HL)
90. VISNS = VISL * HLNS + GVIS * (1 - HLNS)
91. 'CALCULAR EL FACTOR DE FRICCIÓN DEL DIAGRAMA DE MOODY
92. REYN = 1488 * DENNS * VM * DI / VISNS
93. FF = FRFAC(REYN, ED, FF)
94. 'FF = 1 / (2 * LOG10(REYN / (4.5223 * LOG10(REYN) - 3.8215))) ^ 2
95. If HLNS > 0.0001 And HLNS < 0.99999 Then
96. 'CALCULAR EL FACTOR DE FRICCIÓN DE DOS FASES
97. y = HLNS / (HL) ^ 2
98. x = Log(y)
99. S = x / (-0.0523 + 3.182 * x - 0.8725 * (x) ^ 2 + 0.01853 * (x) ^ 4)
100. If y > 1 And y < 1.2 Then S = Log(2.2 * y - 1.2)
101. FF = FF * Exp(S)
102. End If
103. 'CALCULAR EL FACTORDE FRICCIÓN, ELEVACIÓN, ACELERACIÓN Y EL GRADIENTE DE _
104. PRESION TOTAL.
105. FRGR = FF * DENNS * (VM) ^ 2 / (2 * 32.2 * DI * 144)
106. ELGR = DENS * Sin(A) / 144
107. EKK = DENS * VM * VSG / (32.2 * P * 144)
108. ICRIT = 0
109. If EKK > 0.95 Then ICRIT = 1

278
APÉNDICE D

110. If ICRIT = 1 Then EKK = 0.95


111. DPDL = (FRGR + ELGR) / (1 - EKK)
112. ACCGR = EKK * DPDL
113. End Sub
114.
115.
116.

14. Subrutina CALRS.


1. Sub CALRS(P#, T#, SGPG#, PSEP#, TSEP#, API#, QO#, QW#, GOR#, RS#, RSW#, _
2. SGDG#, SGFG#, SG100#, Pb#)
3. 'CALCULA LA RELACIÓN GAS-ACEITE (SCF/STBO), RELACIÓN GAS-AGUA (SCF/STBW),
4. 'DENSIDAD RELATIVA DEL GAS DISUELTO Y LIBRE, Y LA PRESIÓN DE BURBUJA (PSIA).
5. Dim QG#, TEMR#, SGO#, QGS#, WTGAST#, WTGASD#, WTGASF#
6. 'VERIFICAR SI ES FLUJO DE UNA SOLA FASE
7. If GOR <= 0 Then
8. If SGPG < 0.56 Then SGPG = 0.7
9. SG100 = SGPG
10. TEMR = T + 460
11. SGO = 141.5 / (131.5 + API)
12. 'RELACIÓN GAS ACEIRE.
13. '***** RELACIÓN GAS ACEITE CON LA CORRELACIÓN DE STANDING *****
14. RS = RS_STANDING(P, T, SGPG, API)
15. Pb = PB_STANDING(T, SGPG, API, GOR)
16. 'VERIFICAR QUE LA RELACIÓN DE SOLUBILIDAD ES POSITIVA PERO NO MAYOR A LA _
17. RELACIÓN GAS-ACEITE PRODUCIDA.
18. If RS < 0 Then RS = 0
19. If RS < GOR Then
20. 'CALCULAR LA RELACIÓN DE SOLUBILIDAD GAS-AGUA
21. RSW = RSW_MCCOY(P, T)
22. 'VERIFICAR QUE LA RELACIÓN DE SOLUBILIDAD GAS-AGUA NO ES MAYOR AL GAS _
23. DISPONIBLE, SI LO ES, RSW ES DISMINUIDO Y EL GAS ES PREFERENCIALMENTE _
24. DISUELTO EN EL ACEITE.
25. QG = QO * GOR
26. QGS = QO * RS + QW * RSW
27. If QG > QGS Then
28. 'DETERMINAR LA DENSIDAD RELATIVA DEL GAS DISUELTO Y RESTRINGIR LOS _
29. VALORES A SER MAYORES A 0.56 (METANO) Y SGPG.
30. SGDG = ((API + 12.5) / 50) - 0.0000035715 * API * RS
31. If SGDG < 0.56 Then SGDG = 0.56
32. If SGDG < SGPG Then SGDG = SGPG
33. 'BALANCE DE MATERIA PARA CALCULAR LA DENSIDAD RELATIVA DEL GAS LIBRE.
34. WTGAST = QO * GOR * 0.0764 * SGPG
35. WTGASD = 0.0764 * SGDG * (RS * QO + RSW * QW)
36. WTGASF = WTGAST - WTGASD
37. 'DETERMINAR LA DENSIDAD RELATIVA DEL GAS LIBRE Y RESTRINGIR LOS _
38. VALORES A SER MAYORES A 0.56 (METANO) Y SGPG.
39. SGFG = WTGASF / (0.0764 * (QO * (GOR - RS) - QW * RSW))
40. If SGFG < 0.56 Then SGFG = 0.56
41. If SGFG > SGPG Then SGFG = SGPG
42. Exit Sub
43. Else
44. RSW = (QG - QO * RS) / QW: SGFG = SGPG: SGDG = SGPG
45. Exit Sub
46. End If
47. Else
48. RS = GOR
49. 'SI TODO EL GAS ESTÁEN SOLUCIÓN, ESTABLECER LA DENSIDAD RELATIVA DEL GAS _
50. LIBRE Y DISUELTO IGUALES A LA DEL GAS PRODUCIDO.
51. SGFG = SGPG: SGDG = SGPG: RSW = 0

279
APÉNDICE D

52. Exit Sub


53. End If
54. Else
55. RS = 0: RSW = 0: SGDG = SGPG: SGFG = SGPG: SG100 = SGPG: Pb = 14.7
56. End If
57. End Sub

15. Subrutina CALFVF.


1. Sub CALFVF(T#, P#, API#, SGPG#, SG100#, Pb#, GOR#, RS#, CO#, BO#, BW#)
2. 'CALCULA EL FACTOR DE VOLUMEN DEL ACEITE.
3. 'LA CORRELACIÓN DE STANDING ES USADA PARA EL CÁLCULO DE BO POR DEBAJO DE LA _
4. PRESIÓN DE BURBUJA. POR ARRIBA DEL LA PRESION DE BURBUJA, BO ES CALCULADO _
5. DE LA DEFINICIÓN DE COMPRESIBILIDAD ISOTÉRMICA DE DE UN FLUIDO, USANDO LA _
6. CORRELACIÓN DE VAZQUEZ Y BEGGS. EL FACTOR DE VOLUMEN DEL AGUA ES CALCULADO _
7. CON LA CORRELACIÓN DE GOULD.
8. Dim SGO#
9. SGO = 141.5 / (131.5 + API)
10. '********** CORRELACIÓN DE STANDING **********
11. BO = BO_STANDING(P, T, SGPG, API, Pb, RS)
12. 'SI P>PB CALCULAR LA COMPRESIBILIDAD
13. If P > Pb Then CO = CO_VAZQUEZ(T, P, SGPG, API, RS)
14. 'RESTRINGIR LOS VALORES DE BO A SER MAYORES A 1
15. If BO < 1 Then BO = 1
16. 'CALCULAR EL FACTOR DE VOLUMEN DEL AGUA
17. BW = BW_GOULD(T, P)
18. End Sub

16. Subrutina SURFT.


1. Sub SURFT(API#, T#, P#, FO#, FW#, SURO#, SURW#, SURL#)
2. 'CALCULA LA TENSIÓN SUPERFICIAL GAS-ACEITE (DINAS/CM) USANDO LA CORRELACIÓN _
3. DE BAKER Y SWERLDLOFF Y CALCULA LA TENSIÓN SUPERFICIAL METANO-AGUA _
4. (DINAS/CM) USANDO LA CORRELACIÓN DE JENNINGS Y NEWMAN.
5. SURO = SURO_BAKER(P, T, API)
6. If FW <> 0 Then SURW = SURW_JENNINGS(P, T)
7. SURL = SURO * FO + SURW * FW
8. End Sub

17. Subrutina LIQVIS.


1. Sub LIQVIS(T#, API#, RS#, P#, Pb#, VISD#, VISO#, VISW#)
2. 'CALCULA LA VISCOSIDAD DEL ACEITE MUERTO (CP) CON LA CORRELACIÓN DE BEGGS Y _
3. ROBINSON; LA VISCOSIDAD DEL ACEITE (CP) POR DEBAJO DE LA PRESIÓN DE BURBUJA CON _
4. LA CORRELACIÓN DE BEGGS Y ROBINSON; LA VISCOSIDAD DEL ACEITE (CP) POR ARRIBA DE _
5. LA PRESIÓN DE BURBUJA CON LA CORRELACIÓN DE VAZQUEZ Y BEGGS; LA VISCOSIDAD DEL _
6. AGUA COMO FUNCIÓN DE LA TEMPERATURA USANDO LA CORRELACIÓN DE VAN WINGEN.
7. VISD = VISD_BEGGS(T, API)
8. If P < Pb Then
9. VISO = VISO_BEGGS(RS, VISD)
10. Else
11. VISO = VISO_VAZQUEZ(P, Pb, VISD, RS)
12. End If
13. VISW = VISW_VANWINGEN(T)
14. End Sub

18. Subrutina GASVIS.


1. Sub GASVIS(T#, SGPG#, P#, GVIS#)
2. 'CALCULA LA VISCOSIDAD DEL GAS CON LA CORRELACIÓN DE LEE ET AL Y EL FACTOR Z DEL _
3. GAS CON LA CORRELACIÓN DE DRANCHUCK Y ABU-KASSEM.
4. Dim Z#
5. Z = ZFACTOR(T, P, SGPG)

280
APÉNDICE D

6. GVIS = GVIS_LEE(T, P, SGPG, Z)


7. End Sub

19. Función CALQOMAX.


1. Function CALQOMAX(QO#, PWF#, PWS#)
2. 'CALCULA EL GASTO MÁXIMO CON EL MÉTODO DE VOGUEL
3. CALQOMAX = QO / (1 + (-0.2 * (PWF / PWS)) + (-0.8 * (PWF / PWS) ^ 2))
4. End Function

20. Función BO_STANDING.


1. Function BO_STANDING(P#, T#, SGPG#, API#, Pb#, RS#) 'VERIFICADA OK
2. '***** CORRELACIÓN DE STANDING PARA BO *****
3. Dim F#, BOB#, CO#
4. If P < Pb Then
5. F = RS * ((SGPG / (141.5 / (131.5 + API))) ^ 0.5) + 1.25 * T
6. BO_STANDING = 0.972 + 0.000147 * (F) ^ 1.175
7. Else
8. F = RS * ((SGPG / (141.5 / (131.5 + API))) ^ 0.5) + 1.25 * T
9. BOB = 0.972 + 0.000147 * (F) ^ 1.175
10. CO = CO_VAZQUEZ(T, P, SGPG, API, RS)
11. BO_STANDING = BOB * Exp(CO * (Pb - P))
12. End If
13. End Function

21. Función BW_GOULD.


1. Function BW_GOULD(T#, P#)
2. 'CALCULA EL FACTOR DE VOLUMEN DEL AGUA CON LA CORRELACIÓN DE GOULD
3. BW_GOULD = 1# + 1.2 * ((10) ^ -4) * (T - 60) + ((10) ^ -6) * _
4. ((T - 60) ^ 2) - 3.33 * ((10) ^ -6) * P
5. End Function

22. Función CO_VAZQUEZ.


1. Function CO_VAZQUEZ(T#, P#, SGPG#, API#, RS#)
2. 'CALCULA LA COMPRESIBILIDAD DEL ACEITE CON LA CORRELACIÓN DE VAZQUEZ.
3. CO_VAZQUEZ = (5 * RS + 17.2 * T - 1180 * SGPG + 12.61 * API - 1433) / _
4. (P * (10) ^ 5)
5. End Function

23. Función FRFAC.


1. Function FRFAC(REY#, ED#, FF#)
2. 'CALCULA EL FACTOR DE FRICCIÓN DEL DIAFRAMA DE MOODY USANDO LAS ECUACIONES _
3. DE COLEBROOK PARA FLUJO LAMINAR, SI EL FLUJO NO ES LAMINAR (REY<2000) _
4. USA EL FACTOR DE FRICCIÓN DE JAIN PARA LA PRIMERA SUPOSICIÓN EN LA _
5. ECUACIÓN DE COLEBROOK.
6. Dim I#, DEN#, GFI#, FGI#
7. If REY > 2000 Then
8. FGI = 1 / (1.14 - 2 * LOG10(ED + 21.25 / (REY) ^ 0.9)) ^ 2
9. I = 0
10. Do
11. If I > 1 Then GFI = (FGI + FF) / 2
12. DEN = 1.14 - 2 * LOG10(ED + 9.34 / (REY * (FGI) ^ 0.5))
13. FF = (1 / DEN) ^ 2
14. I = I + 1
15. If I = 10 Then Exit Do
16. Loop While Abs(FGI - FF) > 0.0001
17. Else
18. FF = 64 / REY
19. End If

281
APÉNDICE D

20. FRFAC = FF
21. End Function

24. Función GVIS_LEE.


1. Function GVIS_LEE(T#, P#, SGPG#, Z#)
2. 'CALCULA LA VISCOSIDAD DEL GAS CON LA CORRELACIÓN DE LEE ET AL.
3. Dim M#, K#, x#, y#, RHOG#
4. M = 28.97 * SGPG
5. K = ((9.4 + 0.02 * 28.97 * SGPG) * (T + 460) ^ 1.5) / _
6. (209 + 19 * M + (T + 460))
7. x = 3.5 + (986 / (T + 460)) + 0.01 * M
8. y = 2.4 - 0.2 * x
9. RHOG = 1.4935 * (10) ^ -3 * P * M / (Z * (T + 460))
10. GVIS_LEE = K * Exp(x * (RHOG) ^ y) / (10) ^ 4
11. End Function

25. Función PB_STANDING.


1. Function PB_STANDING(T#, SGPG#, API#, GOR#)
2. '***** CORRELACIÓN DE STANDING PARA PRESIÓN DE BURBUJA *****
3. Dim YG#
4. YG = 0.00091 * T - 0.0125 * API
5. PB_STANDING = 18 * (GOR / SGPG) ^ (0.83) * (10) ^ (YG)
6. End Function

26. Función RS_STANDING.


1. Function RS_STANDING(P#, T#, SGPG#, API#)
2. '***** CORRELACIÓN DE STANDING PARA RELACIÓN DE SOLUBILIDAD *****
3. Dim YG#
4. YG = 0.00091 * T - 0.0125 * API
5. RS_STANDING = SGPG * (P / (18 * (10) ^ YG)) ^ 1.204
6. End Function

27. Función RSW_MCCOY.


1. Function RSW_MCCOY(P#, T#)
2. '***** CORRELACIÓN DE MCCOY PARA RSW *****
3. Dim A#, B#, C#
4. A = 8.15839 - (6.12265 * (10) ^ -2) * T + (1.91633 * (10) ^ -4) * (T) ^ 2 _
5. - (2.1654 * (10) ^ -7) * (T) ^ 3
6. B = (1.01021 * (10) ^ -2) - (7.44241 * (10) ^ -5) * T + (3.05553 * (10) ^ _
7. -7) * (T) ^ 2 - (2.94883 * (10) ^ -10) * (T) ^ 3
8. C = -((10) ^ -7) * (9.02505 - 0.130237 * T + (8.53425 * (10) ^ -4) * _
9. (T) ^ 2 - (2.34122 * (10) ^ -6) * (T) ^ 3 + (2.37049 * (10) ^ -9) * _
10. (T) ^ 4)
11. RSW_MCCOY = A + B * P + C * (P) ^ 2
12. End Function

28. Función SURO_BAKER.


1. Function SURO_BAKER(P#, T#, API#)
2. 'CALCULA LA TENSIÓN SUPERFICIAL GAS-ACEITE CON LA CORRELACIÓN DE BAKER.
3. Dim SUR68#, SUR100#, SUR1#
4. SUR68 = 39 - 0.2571 * API
5. SUR100 = 37.5 - 0.2571 * API
6. SUR1 = SUR68 - (((T - 60) * (SUR68 - SUR100)) / 32)
7. If T < 68 Then SUR1 = SUR68
8. If T > 100 Then SUR1 = SUR100
9. SURO_BAKER = SUR1 * Exp(-0.0007 * P)
10. End Function

282
APÉNDICE D

29. Función SURW_JENNINGS.


1. Function SURW_JENNINGS(P#, T#)
2. 'CALCULA LA TENSIÓN SUPERFICIAL GAS-AGU CON LA CORRELACIÓN DE JENNINGS.
3. Dim A#, B#, C#
4. A = 79.1618 - 0.118978 * T
5. B = -5.28473 * ((10) ^ -3) + (9.87913 * (10) ^ -6) * T
6. C = ((10) ^ -7) * (2.33814 - (4.57914 * (10) ^ -4) * T _
7. - (7.52678 * (10) ^ -6) * (T) ^ 2)
8. SURW_JENNINGS = A + B * P + C * (P) ^ 2
9. End Function

30. Función VISD_BEGGS.


1. Function VISD_BEGGS(T#, API#) 'VERIFICADA OK
2. 'CALCULA LA VISCOSIDAD DEL ACEITE MUERTO CON LA CORRELACIÓN DE BEGGS
3. Dim Z#, y#, x#
4. Z = 3.0324 - 0.02023 * API
5. y = (10) ^ Z
6. x = y / ((T) ^ 1.163)
7. VISD_BEGGS = (10) ^ x - 1
8. End Function

31. Función VISO_BEGGS.


1. Function VISO_BEGGS(RS#, VISD#)
2. 'CALCULA LA VISCOSIDAD DEL ACEITE CON LA CORRELACIÓN DE BEGGS
3. Dim A#, B#
4. A = 10.715 / (RS + 100) ^ 0.515
5. B = 5.44 / (RS + 150) ^ 0.338
6. VISO_BEGGS = A * (VISD) ^ B
7. End Function

32. Función VISO_VAZQUEZ.


1. Function VISO_VAZQUEZ(P#, Pb#, VISD#, RS#)
2. 'CALCULA LA VISCOSIDAD DEL ACEITE CON LA CORRELACIÓN DE VAZQUEZ
3. Dim A#, B#, M#
4. A = 10.715 / (RS + 100) ^ 0.515
5. B = 5.44 / (RS + 150) ^ 0.338
6. M = 2.6 * (P) ^ 1.187 * Exp(-11.513 - 8.98 * (10) ^ -5 * P)
7. VISO_VAZQUEZ = (A * (VISD) ^ B) * (P / Pb) ^ M
8. End Function

33. Función VISW_VANWINGEN.


1. Function VISW_VANWINGEN(T#)
2. 'CALCULA LA VISCOSIDAD DEL AGUUA CON LA CORRELACIÓN DE VAN WINGEN
3. VISW_VANWINGEN = Exp(1.003 - 1.479 * (10) ^ -2 * T + 1.982 * (10) ^ -5 * (T) ^ 2)
4. End Function

34. Función ZFACTOR.


1. Function ZFACTOR(T#, P#, DENRG#)
2. 'CORELACIÓN DE DRANCHUCK Y ABU-KASSEM PARA EL FACTOR Z DEL GAS
3. Dim PPC#, TOC#, PR#, TR#, I%, DZ#, A(1 To 11) As Double, C1#, C2#, C3#, C4#, _
4. RHO#, Z#, Count%, ZN#, FOFZ#, DFDZ#
5. PPC = 677 + 15 * DENRG - 37.5 * DENRG ^ 2
6. TOC = 168 + 325 * DENRG - 12.5 * DENRG ^ 2
7. PR = (P) / PPC
8. TR = (T + 460) / TOC
9. 'CONSTANTES DE LA ECUACIÓN DE ESTADO
10. A(1) = 0.3265: A(2) = -1.07: A(3) = -0.5339: A(4) = 0.01569: A(5) = -0.05165
11. A(6) = 0.5475: A(7) = -0.7361: A(8) = 0.1844: A(9) = 0.1056: A(10) = 0.6134

283
APÉNDICE D

12. A(11) = 0.721


13. 'VALOR INICIAL DE Z
14. Z = 1#
15. 'CÁLCULO DE DENSIDAD
16. RHO = 0.27 * PR / (Z * TR)
17. 'CÁLCUO DE CONSTANTES C
18. C1 = A(1) + A(2) / TR + A(3) / TR ^ 3 + A(4) / TR ^ 4 + A(5) / TR ^ 5
19. C2 = A(6) + A(7) / TR + A(8) / TR ^ 2
20. C3 = A(9) * (A(7) / TR + A(8) / TR ^ 2)
21. C4 = A(10) * (1 + A(11) * RHO ^ 2) * (RHO ^ 2 / TR ^ 3) * Exp(-A(11) * _
22. RHO ^ 2)
23. Count = 0
24. 'ITERACIÓN USANDO EL MÉTODO DE NEWTON-RAPHSON CICLO DE 100 ITERACIONES _
25. MÁXIMAS
26. For I = 1 To 100
27. ZN = 1 + (C1 * RHO) + (C2 * RHO ^ 2) - (C3 * RHO ^ 5) + C4
28. FOFZ = Z - ZN
29. 'Derivada de la función con respecto a z
30. DFDZ = 1 + C1 * RHO / ZN + 2 * C2 * RHO ^ 2 / ZN + 5 * C3 * RHO ^ 5 / _
31. ZN + 2 * A(10) * RHO ^ 2 / (ZN * TR ^ 3) * _
32. (1 + A(11) * RHO ^ 2 - ((A(11) * RHO ^ 2) ^ 2) * Exp(-A(11) * RHO ^ 2))
33. DZ = -FOFZ / DFDZ
34. Z = Z + DZ
35. If Abs(Z - ZN) > 0.00001 Then
36. RHO = 0.27 * PR / (Z * TR)
37. C4 = A(10) * (1 + A(11) * RHO ^ 2) * (RHO ^ 2 / TR ^ 3) * _
38. Exp(-A(11) * RHO ^ 2)
39. Count = Count + 1
40. Else
41. Exit For
42. End If
43. Next I
44. ZFACTOR = Z
45. End Function

35. Declaraciones y rutinas generales.


1. Option Explicit
2. Public I%, J% , C As Chart
3. Function LOG10(x#)
4. LOG10 = Log(x#) / Log(10)
5. End Function
6. Function RangeExists(R As String) As Boolean
7. 'VERIFICA QUE UN RANGO EXISTA
8. Dim Test As Range
9. On Error Resume Next
10. Set Test = ActiveSheet.Range(R)
11. RangeExists = Err.Number = 0
12. End Function
13. Function VALOR(S As String)
14. 'CALCULA EL VALOR DE LO ESCRITO EN UNA CELDA
15. If RangeExists(S) = True Then
16. VALOR = Range(S).Value
17. Else
18. VALOR = Val(S)
19. End If
20. End Function

284

También podría gustarte