- Glosario
- Resumen Ejecutivo
- Antecedentes de la Tesina
- Introducción a la Hidrogeología y la Simulación
- El Ciclo del Agua y el Agua Subterránea
- Fundamentos teóricos y aplicación en el modelo numérico
- Enfoque económico
- Herramientas empleadas en la Teoría
- Caso de Evaluación en Laboratorio
- Presentación del caso práctico de explotación para riego
- Anexos
- Bibliografía y Referencias Profesionales
- Acuífero: Formación geológica subterránea con capacidad de almacenamiento de agua. / Capa, zona o veta del terreno que contiene agua.
- Base de Datos Relacional: Conjunto de datos y métodos para soporte de aplicaciones informáticas, compuesto por un sistema administrador de datos que cumple con los enunciados del álgebra relacional de base de datos, proveyendo funciones de definición y manipulación sobre aquellos, y un conjunto de datos de tipos predefinidos, que se mantienen grabados en forma estructurada. Generalmente compuesto por un motor de base de datos que implementa estructuras arbóreas, y herramientas de definición, consulta y manipulación de datos y relaciones entre sí, cada una con un lenguaje de interpretación específico (DDL, DML, SQL).
- Caudales de bombeo constante = (m3/día) = metros cúbicos x día
- Densidad: Relación entre masa y volumen de un cuerpo.
- Encamisado de tramo: Sección de una perforación para explotación de agua subterránea a la que se le coloca un tubo de material rígido para reforzarla.
- Ensayo de bombeo: Prueba de extracción de agua mediante bombas en un pozo de explotación de agua subterránea, que determina su viabilidad dentro de ciertos parámetros de utilización.
- Factor de almacenamiento (confinado) = (m3/m) = metros cúbicos x metro lineal
- Fractales: Figuras geométricas virtuales, formadas por un número infinito de elementos, infinitamente pequeños, contenidos en una superficie finita.
- Grava: Guijas, guijarros, arena y arcilla que se halla en yacimientos geológicos.
- Hidrogeología: Rama de la geología que estudia las aguas dulces, en particular la subterránea, y su aprovechamiento.
- Litología: Parte de la geología que trata de la composición de las rocas.
- Medio anisótropo: Medio que no posee direcciones predeterminadas o privilegiadas con respecto a alguna de sus propiedades. Con respecto a un acuífero, medio que no presenta direcciones de flujo en el estudio del movimiento del agua.
- Método de diferencias finitas: Método algorítmico consistente en la determinación de valores finales aproximados a partir de valores iniciales ciertos, aplicados a una función no diferenciable, mediante el cálculo en etapas ciertas o finitas, hasta alcanzar un error máximo aceptable, discretizando un área en matrices de 2 dimensiones.
- Modelo matemático: Abstracciones de representaciones del mundo real aplicadas al tratamiento predictivo, que discretizan áreas o cuerpos en 2 o 3 dimensiones respectivamente, aplicando funciones aproximadas del comportamiento de las propiedades que se quieren estudiar.
- Niveles piezométricos: profundidad desde la superficie del terreno hacia el primer nivel de agua subterránea. Asimismo aplicado a los niveles subsiguientes.
- Permeabilidad: Propiedad de ser penetrado por el agua, o de dejar salir la misma, con respecto a un acuífero y sus límites con otras formaciones geológicas.
- Porosidad: Propiedad de poroso, con respecto al tamaño de las partículas de las rocas de un acuífero, que indica el espacio libre entre las mismas y la viabilidad para almacenar agua.
- Prefiltro de perforación: Filtro antepuesto al filtro principal, en un pozo de explotación de agua subterránea, generalmente constituido de grava y gravilla.
- Regresión no lineal: Es una técnica para resolver las relaciones entre variables independientes (o de regresión) en la definición de un modelo, mediante ecuaciones no lineales. Estas variables no son aleatorias y por ende no tienen propiedades distribucionales.
- Método de Gauss Newton: Consiste en minimizar una función objetivo de potencias cuadradas, tal que la suma de los cuadrados de los residuos (o errores) sea mínima.
- Transmisividad: Propiedad de dejar fluir el agua, con respecto a un acuífero, entre 2 puntos cualesquiera (m3/día/m) = metros cúbico x día x metro lineal.
En este trabajo se trata la aplicación de técnicas estocásticas en el campo de la simulación en hidrogeología para predecir niveles de agua subterránea a través del tiempo.
Para ello, se abordarán los conceptos de modelos numéricos tradicionales en el área en cuestión, y se planteará la necesidad de modificar los mismos cuando se carece de información cierta o valedera para su ejecución satisfactoria, o ajuste posterior.
Una vez desarrollados los conceptos básicos del tema, se realiza una introducción a los modelos numéricos tradicionalmente empleados en hidrogeología. Aquí se planteará el caso híbrido: sobre un modelo analítico y certero, se desarrollará una inicialización simulada, estocástica, sobre las variables desconocidas al momento inicial del desarrollo, y también en aquellos casos puntuales donde no tengan solución las ecuaciones diferenciales tradicionales.
Finalmente, y contrastando contra los resultados de un modelo analítico original, se verificará el modificado, y se concluirá sobre si es aplicable o no y en que medida.
Técnicamente hablando, y sobre los detalles del trabajo, el mismo genera como resultado de la investigación y desarrollo, un software de simulación para explotación de aguas subterráneas, empleando métodos estocásticos para la inicialización o generalización de las propiedades físicas en el momento de la corrida o ejecución del mismo.
Para una usabilidad del software mas eficiente, se desarrolló una interfase visual en 3 dimensiones para el sistema operativo Ms-Windows95/98/NT, y una serie de funciones de exportación de resultados, en formato de grilla y DXF de AutoCad. La visualización 3D incorpora un componente ActiveX de un laboratorio de software, el ESRI, dedicado justamente a mapeo y extrapolación de objetos en 3 dimensiones.
La inquietud sobre el tema surge ya hace algunos años en mi experiencia como becario del Programa Nacional de Desarrollo Sustentable en Aguas Subterráneas (PNDSAS), perteneciente al Instituto Nacional de Ciencias y Técnicas Hídricas (INCYTH), entre los años 1994 y 1996. Allí, como personal de apoyo a los geólogos, me introduje en la teoría que sustenta los modelos numéricos del área, y desarrollamos en conjunto una actualización de las herramientas en uso desde la década del ´70, básicamente un software de simulación escrito en un lenguaje de programación ya fuera de uso, Fortran 77, el cual fue migrado por razones de compilación, mejor abstracción y de mas actualidad técnica, hacia el lenguaje orientado a objetos C / C++ . Es sobre la base de este trabajo que se extiende ahora el campo teórico, recurriendo a métodos estocásticos.
Luego de finalizado en su momento el desarrollo de programación, se adicionó al mismo una base de datos de perforaciones hídricas de toda la República Argentina, sobre las cuales el Instituto tenía registros y eran de interés específico o de representatividad de alguna cuenca o región hídrica. Con los registros así obtenidos en diversas campañas de recolección, se desarrolló una interfase visual con la herramienta Microsoft Access, y posteriormente se publicó en la World Wide Web para mayor difusión. Fue una tarea pionera en su área en el país, que reunió mas de 1500 perforaciones e informaciones conexas.
Este desarrollo no hubiese sido posible sin los profesionales geólogos del Programa, el Dr. Jorge Santa Cruz y el Dr. Adrián Silva, ambos referentes obligados en su área. A pesar de los recursos económicos, tan escasos que luego llevarían a discontinuar el proceso de desarrollo y focalizar al Programa en tareas de prospección y trabajos científicos, vale reconocer un esfuerzo que dio resultados mas que positivos y concretos, que hoy día se siguen aplicando para determinar, por ejemplo, la mejor ubicación y niveles de producción de nuevas perforaciones hídricas.
Ese trabajo resultó en un aporte concreto a la economía nacional, tanto en el sector público como privado. Y es una prueba de que la investigación teórica y la aplicación práctica en la ciencia y técnica de un país en vías de desarrollo, son necesarias y útiles, produciendo resultados palpables.
Esto vale mas allá de la perspectiva financista de caja chica que pudiera tener algún Ministro de Economía circunstancial, que siempre recorta los presupuestos, cuando no elimina completamente la educación y la investigación aplicada, relegando al país a ser un mercado de consumo de productos tecnológicos de avanzada de países dominantes.
1. Introducción a la Hidrogeología y la Simulación
1.1_Introducción a la Hidrogeología
Para comprender el problema que atacaremos, debemos comprender primero de qué estamos hablando. Y para ello, introduciremos conceptos y definiremos términos.
La hidrogeología es la ciencia que estudia las aguas dulces del planeta, especialmente las aguas subterráneas, y en sus diversas dimensiones, sean éstas tanto geológicas y físicas, como económicas e industriales. Muy frecuentemente ese estudio incluye la litología, o lo que es lo mismo, el estudio de las rocas subyacentes.
Un acuífero es una formación geológica subterránea con capacidad de almacenamiento de agua. Los acuíferos pueden ser confinados, en cuyo caso están rodeados por una formación geológica generalmente impermeable, y se comportan como una botella cerrada, como también pueden ser libres, en cuyo caso no están limitados por formaciones geológicas, ni poseen un techo, sino que el flujo de agua interno es libre, y posee contacto con el exterior, produciéndose evaporaciones por calor o incidencia del sol directamente, conocidas como evapotranspiraciones. Asimismo, otra suerte de acuífero es el semiconfinado, que es una mezcla de los dos anteriores.
El acuífero posee diversas propiedades físicas. La permeabilidad es una de ellas, y significa el poder ser penetrado por el agua, o de dejar salir la misma, con respecto a sus límites con otras formaciones geológicas.
Otra de sus propiedades físicas es ser un medio anisótropo, o sea, es un medio que no presenta direcciones de flujo en el estudio del movimiento del agua.
También se tiene en cuenta la porosidad con respecto al tamaño de las partículas de las rocas del acuífero, que indica el espacio libre entre las mismas y la viabilidad para almacenar agua. De ella surge el factor de almacenamiento, que para acuíferos confinados se mide en metros cúbicos por metro lineal.
Muy vinculada a ésta última se halla otra propiedad, la transmisividad: es la capacidad de dejar fluir el agua entre dos (2) puntos cualesquiera, que generalmente se mide en metros cúbicos por día por metro lineal, usando el sistema métrico.
Para hacer esos estudios, la herramienta principal de acceso al agua subterránea es la perforación. La misma cuenta con diversas etapas, desde la exploratoria, hasta la productiva comercialmente, pasando por el desarrollo in situ.
Una perforación cuenta con diversos elementos constitutivos:
Un encamisado de tramo, que es la sección a la que se le coloca un tubo de material rígido para reforzarla y evitar desmoronamientos internos. Un filtro principal para dejar pasar solo el agua y retener los materiales gruesos y finos del acuífero, hecho de una malla o similar, de acero inoxidable usualmente, más un prefiltro de perforación, que es el filtro antepuesto al filtro principal, generalmente constituido de guijas, guijarros, arena y arcilla. Y la válvula principal en la boca del pozo para abrir o cerrar el paso del agua. Suele ir acompañada de una bomba de extracción que aspira el agua subterránea cuando ésta no es capaz de surgir libremente al exterior, o si lo es, no en los caudales necesarios.
En la perforación se practican ensayos de bombeo, que son las pruebas de extracción de agua mediante bombas, que determina su viabilidad dentro de ciertos parámetros de utilización (tiempos y caudales máximos). De ellos se desprende la capacidad de recuperar sus niveles freáticos, o sea los niveles de las napas de agua, que es capaz un acuífero en determinado momento.
De la necesidad de predecir niveles freáticos futuros dado un caso de estudio comercial o industrial, sobre la base de parámetros de explotación, es que intervienen los modelos matemáticos, ya que no se podrían realizar ensayos de bombeo en forma continua, sin perjudicar al acuífero o a la inversión económica, puesto que los ensayos cuestan tiempo y dinero.
Introducción a la Simulación
La simulación es una técnica muy poderosa y ampliamente utilizada para analizar y estudiar sistemas complejos, como lo es el hidrogeológico. Se puede definir como la técnica que imita el funcionamiento de un sistema del mundo real cuando evoluciona en el tiempo.
Un modelo de simulación comúnmente toma la forma de un conjunto de hipótesis acerca del funcionamiento del sistema, expresado como relaciones matemáticas o lógicas entre los objetos de interés del sistema. En contraste con las soluciones matemáticas exactas disponibles en la mayoría de los modelos analíticos, el proceso de simulación incluye la ejecución del modelo a través del tiempo para generar muestras representativas de las mediciones del desempeño o funcionamiento. En este aspecto, se puede considerar a la simulación como un experimento de muestreo acerca del sistema real, cuyos resultados son puntos de muestra.
Es evidente que cuanto más puntos de muestra generemos, mejor será nuestra estimación. Sin embargo, hay otros factores que tienen influencia sobre la bondad de nuestra estimación final, como las condiciones iniciales de la simulación, la longitud del intervalo que se simula y la exactitud del modelo mismo.
¿Qué es un modelo matemático? Es una abstracción de representación del mundo real aplicadas al tratamiento predictivo, que discretizan áreas o cuerpos en 2 o 3 dimensiones respectivamente, aplicando funciones aproximadas del comportamiento de las propiedades que se quieren estudiar.
Un método de aplicación de modelos matemáticos en hidrogeología es el método de diferencias finitas, que consiste en la determinación de valores finales aproximados a partir de valores iniciales ciertos, aplicados a una función no diferenciable, mediante el cálculo en etapas finitas.
Es sobre este método y la forma de aplicar soluciones estocásticas en donde se centrará el presente trabajo .
2. El Ciclo del Agua y el Agua Subterránea
El agua subterránea es el agua que se encuentra entre las partículas del suelo y las rocas y entre las grietas del lecho rocoso. Debido a su disponibilidad y buena calidad, en general, el agua subterránea es usada ampliamente para uso doméstico y otros propósitos.
Figura 1. El ciclo del agua |
2.2 El Agua Subterránea dentro del Ciclo del Agua
El agua subterránea es una parte integral del ciclo del agua (figura 1) . El ciclo empieza con la precipitación sobre la superficie. Los escurrimientos de la lluvia van directamente a los lagos y arroyos. Algo del agua que se filtra en la tierra es usada por las plantas para la transpiración. El agua restante, llamada agua de recarga, es llevada a través del suelo a la zona saturada, donde el agua llena todos los espacios entre las partículas del suelo y las rocas.
Lo más alto de la zona saturada es la capa o manto freático que, si la geología local no es complicada, es el nivel al cual el agua se mantiene en un pozo. El agua se mueve dentro de la zona saturada desde áreas donde la capa de agua es alta hacia áreas donde ésta es baja, por lo que el agua subterránea se transforma en lagos, arroyos u océanos. Esta sale del subsuelo y forma el agua superficial, cuando esta agua se evapora a la atmósfera y se condensa, viene la precipitación completando el ciclo del agua.
2.3 ¿Dónde se halla el Agua Subterránea?
El agua puede ser encontrada debajo de la tierra casi en cualquier sitio. Cerca del 97 por ciento del agua dulce del mundo es agua subterránea. La calidad y cantidad del agua subterránea disponible varía de sitio a sitio. Las reservas mayores de agua subterránea son llamadas acuíferos.
Los acuíferos ocurren en dos tipos de formaciones geológicas. Las formaciones consolidadas son aquellas compuestas de rocas sólidas, donde el agua subterránea se encuentra en las grietas que estas poseen. La cantidad de agua en una formación consolidada depende de la cantidad de grietas que existen y del tamaño de éstas. Por ejemplo, las formaciones calizas frecuentemente contienen cavernas con mucha agua en su interior.
Las formaciones no consolidadas están compuestas de arena, grava, piedras, tierra suelta o material de suelos. La cantidad de agua subterránea en una formación consolidada varía en dependencia de la compactación del material sólido y la finura de sus granos. Las formaciones de arena, grava, y piedras generalmente producen acuíferos de gran capacidad, sin embargo, los suelos formados por partículas muy finas suelen tener bajas cantidades de agua.
El agua subterránea puede salir espontáneamente formando manantiales o puede ser extraída a través de un pozo. Un manantial ocurre cuando la capa de agua alcanza la superficie de la tierra ( figura 2) .
Figura 2. Relación de la capa freatica. |
2.4 Agua Subterránea y Agua Superficial
La mayoría de las personas está más familiarizada con el agua superficial que con el agua subterránea. Los depósitos de agua superficial como lagos, arroyos y mares pueden ser vistos en los alrededores, pero no así los depósitos de agua subterránea. Existen algunas diferencias entre el agua subterránea y el agua superficial que vale la pena aclarar.
El agua subterránea usualmente se mueve mucho más lentamente que el agua superficial. El agua en un arroyo puede moverse a varios metros por minuto, mientras que el agua subterránea puede moverse sólo a varios metros por mes. Esto es debido a que el agua subterránea encuentra una fricción o resistencia mayor al moverse a través de los espacios pequeños de las rocas y del suelo. Existen excepciones a esta regla, un ejemplo son los ríos subterráneos en cavernas de roca caliza donde el agua puede moverse relativamente más rápido.
Figura 3. Perdida y ganancia de corriente. |
Los intercambios de agua entre los depósitos de agua superficial y los acuíferos son importantes. Los ríos usualmente empiezan como pequeños arroyos y aumentan el caudal a medida que fluyen hacia el mar. El agua que ellos ganan frecuentemente viene del agua subterránea. Esta corriente se denomina corriente ganante. Es posible que las corrientes viertan agua al subsuelo en algunos puntos. En estos casos, los acuíferos son rellenados o recargados por agua de corrientes de pérdida. Un arroyo que fluye cerca de la superficie de un acuífero perderá agua hacia el acuífero sí la superficie de agua del arroyo es más alta que la capa de agua del acuífero en la tierra adyacente. (figuras 3a y 3b)
2.5 Contaminación y Sobreexplotación : Amenazas para el Agua Subterránea
El agua subterránea se contamina cuando algunas sustancias tóxicas se disuelven en el agua superficial y son acarreadas o lixiviadas a acuíferos con el agua percolada. Se deben considerar las propiedades y cantidades de las sustancias tóxicas y del suelo encima del acuífero para determinar si una sustancia en particular contaminará a un acuífero específico.
Algunas veces la contaminación del agua subterránea ocurre en forma natural, pero la contaminación aguda es usualmente el resultado de las actividades humanas en la superficie de la tierra. Un acuífero provée una gran cantidad de agua que frecuentemente atrae a una gran cantidad de personas en sus alrededores.
El agua es usada en actividades tales como beber, higiene personal, mantenimiento residencial y con propósitos industriales o agrícolas. Muchas de estas actividades involucran el uso y desecho de productos químicos que son potencialmente contaminantes. Cuando estos productos químicos son usados o desechados en forma incorrecta y en cantidades inaceptables, pueden llegar al agua subterránea y contaminarla.
Debido a que el agua subterránea se mueve lentamente, pueden pasar varios años antes de que un contaminante, liberado en la superficie de la tierra encima del acuífero, sea detectado en el agua del acuífero a cierta distancia del sitio de contaminación. Desafortunadamente, esto significa que la contaminación ocurre antes de que sea detectada. Aun si se ha detenido la liberación del contaminante, pueden pasar varios años antes de que el acuífero se purifique en forma natural.
Figura 4. Intrusión del agua salada |
Aunque el agua puede ser tratada para remover los contaminantes, esto puede ser muy costoso. La mejor protección contra la contaminación es la prevención.
El agua subterránea se agota en un área cuando se consume más agua de la que ingresa al acuífero. Esto causa que el manto freático disminuya, por lo que el agua subterránea se hace más difícil y cara de extraer. Puede suceder que se bombee una gran cantidad de agua de un acuífero pequeño y esto cause que el pozo del vecino se seque (el manto freático queda por debajo del nivel del pozo). La rápida expansión de las áreas urbanas resulta en el sobreuso de los suministros del agua subterránea y provoca su agotamiento y contaminación. En las áreas costeras, el sobrebombeo crónico puede causar la intrusión de agua salada ( figura 4) . La intrusión de agua salada ocurre en las zonas costeras donde la extracción excesiva de agua dulce permite que el agua salada del mar se introduzca dentro del acuífero.
2.6 Causas de la contaminación del Agua Subterránea
Muchas actividades humanas en la superficie de la tierra causan cambios en la calidad del acuífero. La importancia del efecto de una actividad en particular está relacionada con la habilidad del suelo y del sistema hídrico subterráneo de degradar o diluir los contaminantes así como del grado en que los contaminantes interfieran con el uso del agua. La contaminación es más aguda en las reservas de agua potable que en el agua para otros usos.
Todos los contaminantes del agua subterránea entran al acuífero, esencialmente, a través del agua de recarga de la superficie, con excepción de aquellos casos en que el agua contaminada es inyectada directamente en el acuífero. Algunos ejemplos de contaminantes son:
- Productos químicos orgánicos sintéticos (pesticidas y productos del petróleo)
- Metales pesados como el mercurio, arsénico, cadmio, cromo y plomo
- Nitratos
- Bacterias y virus
- Residuos del petróleo y productos de la combustión de motores
Estos son considerados dañinos sí se ingieren con el agua potable, y pueden ser acarreados al agua superficial por el agua subterránea.
Cada actividad humana tiene un aspecto particular en el agua subterránea. Algunas actividades agrícolas añaden nitratos y pesticidas al agua subterránea.
Las áreas residenciales con tanques sépticos usualment adicionan nitratos, bacterias, virus y productos orgánicos sintéticos de limpieza usados en la limpieza casera y limpiadores de tanques sépticos.
Las actividades industriales tienden a añadir productos químicos orgánicos y metales en variadas cantidades. Las áreas de almacenamiento de gasolina (incluyendo las estaciones de servicio) pueden tener fugas y derramar los productos derivados del petróleo.
Las carreteras contribuyen a la contaminación debido al petróleo que es derramado por los vehículos y los metales que salen del escape. El impacto mayor viene de los basureros antiguos cubiertos cuyas filtraciones pueden contener diferentes sustancias químicas en una concentración relativamente alta ( Figura 5) .
Figura 5. Contaminación del Agua Subterránea por Basurero Cubierto |
2.7 Protección de las Aguas Subterráneas
La protección contra la contaminación de nuestra agua subterránea requerirá un manejo conciente y la cooperación por parte de los ciudadanos y de varias instancias gubernamentales. En varios casos, la planificación del uso del suelo es la mejor medida disponible para proteger los acuíferos que aún contienen agua de buena calidad. Si se planifica la localización de fuentes potenciales de contaminación y se les ubica lejos de las áreas críticas de recarga, el riesgo de contaminación se reducirá notablemente.
El uso cuidadoso y la eliminación apropiada de los productos químicos que causan contaminación son también necesarios. Las industrias, las granjas y los vecinos asentados encima de las reservas de aguas subterráneas necesitan practicar un buen manejo con respecto al uso y eliminación de productos químicos.
Los reglamentos gubernamentales para el uso y eliminación de materiales tóxicos tienen que cumplirse. Un paso igualmente importante es hacer que las personas estén concientes del impacto potencial que ellos pudieran tener en el agua subterránea.
3. Fundamentos teóricos y aplicación en el modelo numérico
En el año 1856, Darcy confirmó la aplicabilidad de los principios de tubos capilares, desarrollados años antes por Hagen y Poiseuille, al flujo de agua a través de medios porosos. La llamada Ley de Darcy se expresa como :
v = k s
siendo v la velocidad del flujo, s la pendiente del gradiente hidráulico y k es un coeficiente que tiene unidades de velocidad, generalmente metros por día. El caudal, q, es el producto del área A de la sección transversal y la velocidad. El área efectiva es el área total multiplicado por la porosidad del medio, p. Por lo tanto,
q = kpAs = K(p)As
El coeficiente K(p) se denomina coeficiente de permeabilidad o conductividad hidráulica. Depende las propiedades del fluido y del medio poroso y se puede expresar como:
K(p) = k(w/u) = Cd²(w/u)
donde k es la permeabilidad intrínseca, w es el peso específico del fluido, u es la viscosidad absoluta, C es un factor que describe la forma, porosidad y otras características del medio, y d es el tamaño promedio de los poros del material.
Es conveniente utilizar la transmisividad T para representar el flujo, en metros cúbicos por día, a través de una sección de 1 metro y una altura igual al espesor del acuífero bajo la acción de un gradiente unitario:
T = K(p)Y
donde Y es el espesor saturado del acuífero. Con este nuevo coeficiente, la ecuación pasa a ser
q = TBs
donde B es el ancho del acuífero.
Esta Ley de Darcy (Ley del Movimiento de Fluido) se aplica en modelos numéricos para abstraer y modelar el comportamiento de acuíferos.
3.2 Equilibrio Hidráulico en Pozos
Las perforaciones en el terreno, tubulares y con una bomba mecánica en la mayoría de los casos, y que penetran perpendicularmente al manto freático y son de utilidad hogareña, comercial o industrial, se conocen como pozos de extracción, o simplemente pozos.
Para que se establezca un flujo de agua hacia el pozo, es necesario que exista un gradiente hidráulico en la dirección del pozo. La forma inconfinada resultante se denomina cono de depresión. Si el abatimiento o descenso de la capa freática es pequeño con respecto al espesor del acuífero, se puede deducir una fórmula aproximada que relacione el caudal del pozo con las características del acuífero .
q = 2ПxyK(p)(dy/dx)
donde 2Пxy es el бrea del cilindro y dy es la pendiente de la tabla de agua. Integrando con respecto a x , distancia a la perforaciуn desde dos puntos de observación, r1 y r2, y desde la base del acuífero hasta el nivel freático medido en esos puntos de observación, h1 y h2, se obtiene
q = ПK(p)( h1І – h2І )
ln(r1 / r2)
donde h es la altura de la tabla de agua sobre la base del acuífero, a una distancia r del eje del pozo de bombeo y ln es el logaritmo de base e. Ésta es la ecuación propuesta por Dupuit en el año 1863, justamente para medir el caudal (*).
(*) LINSLEY, KOHLER y PAULUS, "Hidrología para Ingenieros", 2da. Edición, McGraw-Hill de México S.A., México, 1977.
3.3 Desequilibrio Hidráulico en Pozos
Existe una sobreestimación del caudal hipotético del pozo aplicando la ecuación de Dupuit. Esto se debe a que durante el período inicial de bombeo de un pozo nuevo, la mayoría del caudal se obtiene del almacenamiento contenido en la parte del acuífero que se deseca a medida que se desarrolla el cono de depresión. Y el análisis en condiciones de equilibrio producen valores muy altos de la permeabilidad, cuando se calcula el caudal potencial.
Para corregir eso, en 1935, Theis, presentó una fórmula basada en una analogía de transmisión del calor, que tiene en cuenta el efecto del tiempo y las características de almacenamiento del acuífero.
W(u) = Z(r) = q ò (e^-u / u)du
4ПT
donde Z(r) es el abatimiento o depresión de un pozo de observación a una distancia r del pozo de bombeo, q el caudal en metros cúbicos por día, T es la transmisividad en metros cúbicos por día por metro, y u está dada por
u = r²S(c)
4Tt
donde t es el tiempo en días desde el inicio del bombeo, y S(c) es la constante de almacenamiento del acuífero o el volumen de agua desplazada en una columna del acuífero de 1 (un) metro cuadrado, cuando la superficie piezométrica desciende 1 metro. La integral de la función W(u) o Función del Pozo, puede resolverse por series (*) :
W(u) = -0.5772 – ln(u) + u – u²/2.2! + u³/3.3! ….
(*) LINSLEY y otros,Op. Cit.
Los procedimientos de Dupuit, Theis y demás son valederos para pozos individuales. Cuando se quiere estudiar un acuífero, se debe recurrir a técnicas mas sofisticadas.
Si el estudio requerido implica analizar el acuífero en forma bidimensional, se puede recurrir a un aparato de Hele-Shaw, que consta de dos láminas de vidrio y una separación muy pequeña, con un líquido viscoso entre ambas láminas. Las ecuaciones que gobiernan el flujo viscoso son las mismas que para agua subterránea.
Cuando se requiere el estudio tridimensional de los acuíferos, es solo posible con el uso de modelos analógicos o digitales (computadores).
Cuando se plantea un modelo analógico, se fabrica una red de resistores y capacitores en el cual el voltaje es análogo al potencial del flujo y el caudal es análogo a la corriente eléctrica; la permeabilidad se simula por medio de la resistividad.
Para el modelo en computadores digitales modernos, se recurre a la solución de la ecuación básica de flujo de aguas subterráneas:
δ²h + δ²h = S(c)δh
δx² δy² T δt
En términos de diferencias finitas, que es la forma de representar esta ecuación para un modelo numérico digital, la misma es:
h2 + h4 – 2h1 + h3 + h5 –2h1 = h2 + h4 + h3 + h5 – 4h1 = S(c) h
a² a² a² T δT
donde a es la separación de las celdas de la red. Los tamaños de la red van desde los 30 a los 3.000 metros de acuerdo con la naturaleza del problema. Las propiedades del acuífero se deben suministrar en cada punto de la red (espesor, permeabilidad, y el coeficiente de almacenamiento). Si estas propiedades no se definen con precisión, la solución obtenida estará errada. (*)
(*) LINSLEY y otros,Op. Cit.
3.5 Distribuciones Fractales para valores iniciales del modelo
La Teoría del Caos hace su aporte a la simulación en el campo de la hidrogeología , al aportar patrones de distribución de aportes de agua (lluvias o también sequías) , en forma no uniforme, a lo largo y ancho del área que se desea simular.
Es muy conveniente contar con una distribución de este tipo al iniciar un modelo de simulación, para no observar patrones constantes ni uniformes que luego jamás son verificados en la realidad del campo de trabajo.
El aporte significativo se hace con tres tipos de métodos que figuran otros tantos tipos de superficies u obstáculos en el terreno : Lorenz, Henon y Sierpinski.
El método de Lorenz inicializa un volumen y/o superficie sobre la base de tres ecuaciones con polinomios, siguiendo un patrón de generación de tipo fractal.
El "Atractor de Lorenz" es un conjunto simple de tres ecuaciones deterministas desarrolladas por Eduard Lorenz mientras estudiaba patrones climáticos no repetitivos. El problema básico en la predicción del clima es que ante cambios pequeñísimos en las condiciones iniciales, eventualmente reduce la mejor predicción a nada.
El atractor de Lorenz es la órbita de un sistema dinámico consistente en tres ecuaciones diferenciales de primer orden. La solución a la ecuación diferencial es una función de parámetro vectorial de una variable. Si se piensa en términos de tiempo, la solución traza una órbita, la cual está dibujada de dos espirales a cierto ángulo una de otra en tres dimensiones.
Las ecuaciones son :
dx/dt = -a*x + a*y
dy/dt = b*x – y -z*x
dz/dt = -c*z + x*y
Este método representa muy bien las distribuciones iniciales ( de lluvia por ejemplo) en un terreno donde existen por ejemplo lagunas o montes enfrentados.
El método de Henon inicializa una superficie sobre la base de dos ecuaciones de polinomios, siguiendo un patrón de generación de tipo fractal.
Michel Henon fue un astrónomo en el observatorio de Niza, en Francia. Él llegó al tema de los fractales a través de investigaciones en las órbitas de objetos astronómicos. El atractor extraño, nombrado en honor a Henon, no se inicia en ecuaciones diferenciales, sino en el mundo de las matemáticas discretas.
El mapa de Henon es un ejemplo de un sistema simple que exhibe un comportamiento extraño. La órbita se traza con la característica de contorno de una banana, pero si se inspecciona mas y más detalladamente, está hecho de partes gruesas y finas. A través de un detalle mayor, las partes gruesas se resuelven en otros componentes gruesos y finos. Y así indefinidamente.
dimX = 1 + y – a*x*x
dimY = b*x
Los parámetros por omisión son a=1.4 y b=0.3.
El método de Sierpinski inicializa una superficie sobre la base de dos ecuaciones de polinomios, inicializados en forma aleatoria en arreglos vectoriales, y siguiendo un patrón de generación de tipo fractal.
Es otro modelo clásico previo al clásico Mandelbrot, y fue hallado por W. Sierpinski en los tiempos de la Primera Guerra Mundial. Es generado a través de la división de un triángulo en cuatro triángulos más pequeños y congruentes, repitiéndolo lo mismo una y otra vez, hasta el infinito.
No hay parámetros para ejecutar este patrón, ni ecuaciones complicadas.
La simulación de Monte Carlo fue creada para resolver integrales que no se pueden resolver por métodos analíticos : para resolver estas integrales se usaron números aleatorios. Posteriormente se utilizó para cualquier esquema que emplee números aleatorios, usando variables aleatorias con distribuciones de probabilidad conocidas, el cual es usado para resolver ciertos problemas estocásticos.
Por lo tanto es un proceso computacional que utiliza números aleatorios para derivar una salida, por lo que en vez de tener entradas con puntos dados, se asignan distribuciones de probabilidad a alguna o todas las variables de entrada. Esto generará una distribución de probabilidad para una salida después de una corrida de la simulación.
Muestreo de Monte Carlo
El principio para hacer un muestreo en el caso de distribuciones discretas se basa en la representación de las frecuencias según su ley de probabilidad, que implica que los resultados se presentaran con las frecuencias especificadas por la distribución de probabilidades. Pero además de obtener las frecuencias correctas, el procedimiento de muestreo debe ser independiente; esto es, cada evento que se genera debe ser independiente de los eventos que le anteceden y que le siguen.
Una sucesión de números enteros aleatorios es tal que cada numero en la secuencia tiene la misma probabilidad de ocurrir, y cada numero aleatorio es independiente de los números anteriores y posteriores de él. Técnicamente, un numero aleatorio, Ri se define como una muestra aleatoria independiente tomada de una distribución continua uniforme cuya función de densidad de probabilidad esta dada por
- 0 =< x =< 1
F(x) =
- en cualquier otro caso
Así, cada numero aleatorio estará distribuido uniformemente sobre el intervalo entre 0 y 1. En consecuencia, es común referirse a estos números como números aleatorios U(0,1), o simplemente como números aleatorios uniformes (equiprobables).
Se pueden generar números aleatorios uniformes de muchos modos distintos. Como nuestro interés sobre los números aleatorios es para usarlos en simulación, necesitamos poder generarlos en una computadora. Esto se hace mediante funciones matemáticas llamadas generadores de números aleatorios. Algunos de esos generadores comprenden el generador congruente lineal, el generador multiplicativo y el generador mixto.
Además de las propiedades estadísticas, los generadores de números aleatorios deben tener otras características importantes si se van a usar en forma eficaz en simulaciones con computadora. Algunas de estas características son:
- La rutina debe ser rápida
- La rutina no debe necesitar un gran espacio de almacenamiento.
- Los números aleatorios deben ser reproducibles
- La rutina debe tener un ciclo suficientemente largo; esto es, debemos poder generar una sucesión larga sin repetir los números aleatorios.
El procedimiento para generar números aleatorios consta de dos pasos:
- Se elabora la distribución de probabilidad acumulada para la variable aleatoria dada.
- Se usa esa distribución para asignar los números aleatorios enteros en forma directa a los diversos valores de la variable aleatoria.
La hidrogeología contiene un componente económico fundamental, ya que realiza investigación y provee información sobre el agua del subsuelo, su composición, calidad, disponibilidad, magnitud de reserva, y algo fundamental, la viabilidad de explotación de esas aguas, que en términos económicos, significa evaluar si su extracción es posible, cómo, cuándo y dónde.
El cómo implica calcular las magnitudes de volúmenes posibles de agua a extraer, sin afectar en el futuro esa explotación . Se conoce como explotación sustentable. Es donde los modelos numéricos entran a jugar, y es donde también su eficacia (certeza) en la predicción se hace fundamental.
El cuándo implica determinar períodos de espera si se ha saturado la explotación, si se ha agotado, si el cono de depresión formado por la extracción exagerada es muy pronunciado, y demás. Está muy relacionado con el punto anterior, del cómo. Y depende también mucho, de cómo se planifica el modelo numérico a través del tiempo.
El dónde implica realizar perforaciones del suelo y analizar sus componentes. Se utilizan métodos analíticos y técnicas geológicas modernas.
4.1 Diferencia entre el mundo real y el simulado
Los modelos son abstracciones de la realidad, nunca son la realidad que representan, y por ello tienen errores al intentar simularla.
Siempre existen desviaciones entre lo simulado y lo real, que se corrigen a medida que las simulaciones avanzan y se contrastan contra lo real, ajustando a posteriori los datos, y volviendo a ejecutar las simulaciones. Es un proceso de retroalimentación, sin el cual, sería muy imprudente tomar como certeras las predicciones realizadas.
Para ello, el trabajo del hidrogeólogo en el campo o en el laboratorio, es disciplinado. Cada simulación se verifica y corrige. Para ello, dispone de diversos modelos numéricos, de los cuales, los mas aplicados, Prickett-Lonnquist y ModFlow, se presentan mas adelante. De ellos, el modelo Prickett-Lonnquist, es el mas utilizado y difundido en nuestro país, y sobre el cual el Instituto de Aguas, a través del Programa Nacional de Desarrollo Sustentable en Aguas Subterráneas, ha desarrollado las políticas científicas y económicas tendientes a su mayor aplicación.
4.2 Políticas Científico – Económicas
Dentro de las políticas científico-económicas, se encuentran el relevamiento en el ámbito nacional de todas las perforaciones de explotación de aguas subterráneas, su compilación y publicación como banco de datos, como también el dictado de cátedras en la Universidad de Buenos Aires, y presentaciones en Ferias del Agro, donde se publicita y explica el uso de los modelos numéricos.
Como necesidad de contar con modelos numéricos más certeros y aproximados a lo real, y por ende, económicamente mas ajustados, se plantea el ajuste de los tradicionales modelos numéricos de diferencias finitas, usando técnicas estocásticas.
¿Porqué técnicas estocásticas y fractales? La respuesta está en los datos y no en las ecuaciones de diferencias finitas de los modelos. No existen suficientes datos para correr los modelos numéricos en todas las zonas del país, y si existen, no son absolutamente confiables, o si lo son, no fueron recopilados en forma estadística en un largo período de tiempo.
Allí donde son necesarios, los datos son generados en forma estocástica, y donde las ecuaciones de diferencias finitas no tienen solución, también. Ese es el aporte que realiza este trabajo, que tienen una implicancia económica importante.
5. Herramientas empleadas en la Teoría
En el campo de la hidrogeología, se dispone de dos (2) modelos numéricos de predicción de niveles freáticos, Prickett-Lonnquist y ModFlow. Ambos desarrollan ecuaciones diferenciales, bien conocidas y con solución, razón por la cual no es necesario una modelación estocástica completa y pura.
El ModFlow es invención del United States Geological Survey, y data de 1984 con sucesivas adaptaciones y mejoras hasta 1990 inclusive. Es el modelo numérico en uso actualmente en ese país, el mas ampliamente aceptado y documentado. Su uso es complejo y requiere mucho trabajo de campo para relevar los parámetros iniciales y ajustes posteriores.
El Prickett-Lonnquist es invención asimismo del Illinois State Water Survey, también de los EE.UU., y data de 1971. Si bien ya casi no posee difusión ni uso en los EE.UU., es el modelo matemático mas ampliamente difundido y sobre el cual se han capacitado los especialistas de nuestro país. Su uso es mucho más sencillo que el ModFlow en cuanto al trabajo de campo requerido.
Debido a esto último, al uso en nuestro país y su capacitación y aceptación entre los profesionales del área, se ha decidido implementar la programación de los módulos estocásticos sobre este primer modelo, para luego de probar y aceptar su validación.
A continuación, una resumen funcional-matemático de los mismos.
El modelo en uso por la United States Geological Survey (USGS) es conocido como MODFLOW, de medio de aplicación terrestre (*), usado para hidrogeología, siendo un tipo de modelo de ecuaciones diferenciales parciales (diferencias finitas y tridimensional) junto a ecuaciones algebraicas estáticas, principalmente para investigación. Utiliza regresión no lineal para estimar los parámetros de entrada. Los parámetros son estimados por minimización de una función objetivo de potencias cuadradas mediante Gauss-Newton.
La regresión no lineal es una técnica para resolver las relaciones entre variables independientes (o de regresión) en la definición de un modelo, mediante ecuaciones no lineales.
El método de Gauss Newton consiste en minimizar una función objetivo de potencias cuadradas, tal que la suma de los cuadrados de los residuos (o errores) sea mínima.
Otro modelo usado hoy día por los expertos en la materia es el PLASM, o Prickett Lonnquist Aquifer Simulation Model, aunque el mismo es anterior al MODFLOW. El mismo también es de medio terrestre (*), aplicado en hidrogeología, con una organización orientada al ecosistema, y al igual que el ModFlow, resuelve ecuaciones diferenciales parciales (diferencias finitas tridimensionales).
Las adaptaciones estocásticas a los modelos numéricos tradicionales se programarán sobre el modelo PRICKETT. Esas adaptaciones implica incorporar simulaciones al estado inicial del modelo (donde generalmente se desconocen los parámetros iniciales) usando los algoritmos de generación de fractales de Sierpinski, Lorenz y Henon para la distribución aleatoria de valores iniciales y generación de valores desconocidos al inicio de la corrida del modelo. También se usa Monte Carlo para los mismos fines.
(*) Clasificación adoptada por el Proyecto ECOBAS (base ecológica de modelos numéricos), Universidad de Kassel, Dinamarca ( ) Incluye también otros medios de aplicación, como ser acuáticos, y aéreos. Y no solo se clasifica el medio de aplicación, sino la teoría matemática utilizada para resolverlos. Es una clasificación realmente ejemplar.
6. Caso de Evaluación en Laboratorio
6.0 Interfase del software para modelizar : ¿Como ejecutar el modelo?
Para todos los casos de evaluación del modelo, se utilizó el software desarrollado. La interfase gráfica y su nomenclatura, se explican a continuación, en forma breve, y puede hallarse una ampliación de la misma en el anexo 8.2
Una vez ejecutado el programa "Prickett.Exe", se presenta el menú de selección para ejecutar el modelo en cuestión.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
La nomenclatura que hallamos es la siguiente:
- Niveles piezométricos = (m) metros
- Factor de almacenamiento (confinado) (m3 / m) = metros cúbicos x metro lineal
- Caudales de bombeo constante (m3 / día) = metros cúbicos x día
Transmisividad entre 2 nodos cualesquiera (m3 / día / m) = metros cúbico x día x metro lineal
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
- Cantidad de filas / columnas: Número de nodos laterales que contendrá la superficie a modelizar.
- Cantidad de Ciclos: Iteraciones del modelo antes de la convergencia del error máximo admitido.
- Delta del tiempo: Tiempo referencial entre cada iteración.
- Incremento del delta: Incremento del delta del tiempo referencial.
- Error admisible: Error máximo acumulado admisible por las iteraciones del modelo.
- Transmisividad inicial: indicador de esta propiedad al inicio del modelo, en m3/día/m.
- Nivel freático inicial: valor por omisión de iniciación de la superficie, en cierto nivel freático, en m.
- Almacenamiento inicial: indicador de esta propiedad al inicio del modelo, en m3/m.
- Bombeo inicial: indicador de esta propiedad al inicio del modelo, generalmente representativo de una explotación artificial (planta de bombeo de agua), en m3/día.
- Evaporación inicial : indicador de esta propiedad al inicio del modelo, en m3/día.
6.1 Presentación del caso de laboratorio
Para el primer caso de evaluación y ajuste, se tomó como sistema real a una perforación de laboratorio, en la zona propiedad del Instituto Nacional de Aguas, AU Ezeiza-Cañuelas, Tramo J. Newbery, Km 1,620 (B1804) Ezeiza, Pcia. Buenos Aires, Argentina
La zona cuenta con una única bomba para extracción de agua, y es un terreno llano de la típica Pampa Húmeda bonaerense, sobre un área de campo de 100 x 100 m (1 hectárea), simulada en una grilla de 20 x 20 celdas (separación de 5 m entre celdas), al aire libre.
Para comparación de los métodos de iniciación, se ejecutó el modelo PRICKETT en las 4 variantes posibles de distribución fractal inicial.
Los parámetros de ejecución del modelo se definieron en todos los casos como:
- Grilla de 20 x 20 celdas
- 10 ciclos de simulación representando 10 días
- Error admisible acumulado de 1 en cada ciclo
- Transmisividad de 0,5 m3/ día /m
- Niveles de agua originalmente en 0 metros
- Almacenamiento inicial 0,1 m3/m
- Evaporación inicial 0.01 m3/día, no uniforme, sino según distribución inicial
- Bomba de explotación en el centro del área, posición [10,10]
- Caudal de explotación de 2,5 m3/día
A continuación se presentan los resultados en diversas grillas, según muestra el software desarrollado, contando una grilla para cada caso de iniciación estocástica y por Monte Carlo.
6.2 Prickett estándar, inicialización uniforme de estados
Para la iniciación estándar, en forma uniforme, se observa que al cabo de los 10 ciclos del modelo, en la posición de la bomba de extracción se halla una depresión del nivel freático de 2,203m con respecto al nivel inicial, y en un radio de 5m, la depresión es mayor a 1m, siendo aceptable entonces la incidencia del bombeo sobre el terreno.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
6.3 Prickett utilizando el método de Lorenz para iniciación
Para la iniciación con el método de Lorenz, se observa que al cabo de los 10 ciclos del modelo, en la posición de la bomba de extracción se halla una depresión del nivel freático de 2,047m con respecto al nivel inicial, y en un radio de 5m, la depresión es menor a 87cm, siendo aceptable entonces la incidencia del bombeo sobre el terreno.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
6.4 Prickett utilizando el método de Henon para iniciación
Para la iniciación con el método de Henon, se observa que al cabo de los 10 ciclos del modelo, en la posición de la bomba de extracción se halla una depresión del nivel freático de 2,095m con respecto al nivel inicial, y en un radio de 5m, la depresión es menor a 90cm, siendo aceptable entonces la incidencia del bombeo sobre el terreno.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
6.5 Prickett utilizando el método de Sierpinski para iniciación
Para la iniciación con el método de Sierpinski, se observa que al cabo de los 10 ciclos del modelo, en la posición de la bomba de extracción se halla una depresión del nivel freático de 2,025m con respecto al nivel inicial, y en un radio de 5m, la depresión es menor a 85cm, siendo aceptable entonces la incidencia del bombeo sobre el terreno.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
6.6 Prickett utilizando el método de Monte Carlo para iniciación
Para la iniciación con el método de Sierpinski, se observa que al cabo de los 10 ciclos del modelo, en la posición de la bomba de extracción se halla una depresión del nivel freático de 2,006m con respecto al nivel inicial, y en un radio de 5m, la depresión es menor a 82cm, siendo aceptable entonces la incidencia del bombeo sobre el terreno.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
6.7 Correcciones al modelo de evaluación en laboratorio
Contrastando los resultados obtenidos contra las observaciones posteriores, al cabo de los 10 días, se pudo verificar que:
- La transmisividad inicial de 0,5 m3/día/m es correcta . La misma fue obtenida con un ensayo de bombeo previo, mediante el método de Theis-Dupuit.
- El nivel freático inicial de 0 m , relativo a nivel del mar, y relativo al primer nivel de agua encontrado en las napas, es correcto. Terreno nivelado , acuífero también.
- La evaporación inicial de 0,01 m3/día debido a la incidencia de rayos solares y temperaturas por la estación climática del año, fué adecuada, ya que se registraron descensos uniformes en toda la zona demarcada
- El almacenamiento inicial de 0,25 m3/día es en general correcto, aunque puede ser mayor según reflejó un segundo ensayo de bombeo, posterior a la corrida del modelo, donde se observaba una recuperación más rápida del nivel de agua.
Las correcciones al modelo del caso real, entonces, deben hacerse sobre el parámetro inicial de almacenamiento del acuífero.
En la nueva ejecución, se observan los mismos parámetros pero con un almacenamiento duplicado . Como resultado se obtuvo que la profundidad máxima luego de 10 días, es de 1,85m, y en un radio de 5m, alcanza a 71 cm., tomando como nivel inicial los cero metros (0m) , siempre en forma relativa a nivel del mar, para la primera napa de agua observada.
Este nivel de profundidad del cono de depresión refleja mejor lo realmente observado en la explotación, donde la medición indicó 1,80 m de profundidad, y luego, en el resto del acuífero, se ubicó una depresión uniforme por evapotranspiración, prácticamente nula.
6.8 Conclusiones para el caso de evaluación en laboratorio
Como comparación entre métodos de iniciación, siempre se ha observado que la distribución uniforme en el modelo PRICKETT generaba resultados que excedían lo registrado luego en la realidad. Con las distribuciones aplicadas, tenemos una corrección (Ajustado), que da como resultado, valores menores a los obtenidos en forma estándar uniforme y más ajustados a la contrastación posterior (Realidad).
Método | Máximo Profundidad | Profundidad en radio 5m | Variación porcentual |
Estándar | 2,203 | 1,01 | N / A |
Lorenz | 2,047 | 0,87 | -7,0 |
Henon | 2,095 | 0,90 | -4,9 |
Sierpinski | 2,025 | 0,84 | -8,0 |
MonteCarlo | 2,006 | 0,82 | -8,9 |
Ajustado | 1,85 | 0,71 | N/A |
Realidad | 1,80 | 0,71 | N/A |
7. Presentación del caso práctico de explotación para riego
Para el caso de aplicación práctica, se ejecutó sobre una perforación de explotación para riego en la filial del INTA en la zona de Tandil, Pcia. de Buenos Aires, Argentina, con una única bomba para extracción de agua del acuífero, y de terreno llano, sin observar depresiones ni lomadas, sobre un área de campo de 200 x 200 m (4 hectáreas), simulada en una grilla de 100 x 100 celdas (separación de 20 m entre celdas).
La bomba se utiliza para alimentar la red de riego del establecimiento agrícola, y el estudio en concreto se hace para evaluar la viabilidad de hacer trabajar la misma a un caudal de extracción importante, o si el impacto registrado hace necesario establecer una segunda bomba para no producir un cono de depresión muy pronunciado, sino más leve y más recuperable en menor tiempo.
Los parámetros de ejecución del modelo se definieron sobre la base de lo necesitado por el establecimiento dueño de la perforación, una proyección trimestral del estado de las napas freáticas.
- Grilla de 100 x 100
- 10 ciclos de simulación representando 10 días de extracción de agua
- Error admisible acumulado de 1 en cada ciclo
- Transmisividad de 0,5
- Niveles de agua originalmente en 0 m, según inicialización MonteCarlo
- Almacenamiento inicial 0,25, según inicialización MonteCarlo
- Evaporación inicial 0,02 según iniciación MonteCarlo
- Bomba de explotación en el cuadrante 1, posición [10,10]
- Caudal de explotación de 5 ,0
Como resultado se obtuvo que la profundidad máxima luego de 10 días, es de 3,48m, y en un radio de 20m, alcanza a 1,25m, tomando como nivel inicial los cero metros (0m) , siempre en forma relativa a nivel del mar, para la primera napa de agua observada.
A continuación, el resultado luego de la ejecución del modelo tal como lo refleja el software desarrollado al efecto.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
7.3 Correcciones al modelo para explotación para riego
Contrastando los resultados obtenidos contra las observaciones posteriores, al cabo de los 10 días, se pudo verificar que:
- La transmisividad inicial de 0,5 m3/día/m es correcta ( fue obtenida con un ensayo de bombeo )
- El nivel freático inicial de 0 m , relativo a nivel del mar, y relativo al primer nivel de agua encontrado en las napas, es correcto, ya que se verifica un terreno nivelado , lo mismo que el acuífero subyacente.
- La evaporación inicial de 0,02 m3/día debido a la incidencia de rayos solares y temperaturas por la estación climática del año, posiblemente haya resultado inferior a lo real, ya que los niveles de profundidad de la napa cayeron uniformemente en toda la zona demarcada
- El almacenamiento inicial de 0,25 m3/día es en general correcto, aunque puede ser mayor según reflejó un segundo ensayo de bombeo, posterior a la corrida del modelo, donde se observaba una recuperación más rápida del nivel de agua.
Las correcciones al modelo del caso real, entonces, deben hacerse sobre el parámetro inicial de evapotranspiración (caída uniforme del nivel de agua en todo el acuífero , sin mediar bombeos), tentativamente triplicándolo, y asignar un 50% mas de capacidad de almacenamiento al acuífero en líneas generales.
En la nueva ejecución, se tiene :
- Grilla de 100 x 100
- 10 ciclos de simulación representando 10 días de extracción de agua
- Error admisible acumulado de 1 en cada ciclo
- Transmisividad de 0,5
- Niveles de agua originalmente en 0 m, según inicialización MonteCarlo
- Almacenamiento inicial 0,375, según inicialización MonteCarlo
- Evaporación inicial 0,06 según iniciación MonteCarlo
- Bomba de explotación en el cuadrante 1, posición [10,10]
- Caudal de explotación de 5,0 m3/día
Como resultado se obtuvo que la profundidad máxima luego de 10 días, es de 3,033m, y en un radio de 20m, alcanza a 0,91 cm, tomando como nivel inicial los cero metros (0m) , siempre en forma relativa a nivel del mar, para la primera napa de agua observada.
Este nivel de profundidad del cono de depresión refleja mejor lo realmente observado en la explotación, donde la medición indicó 3.0 m de profundidad, y luego, en el resto del acuífero, se ubicó una depresión uniforme por evapotranspiración de 15cm.
A continuación, el resultado de la ejecución corregida.
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
7.4 Caso de Máxima explotación estimada
Para el caso de máxima explotación posible para este pozo de extracción de agua, se plantea el caso de conocer la profundidad máxima del cono de depresión. En función de ello, se calcula que diariamente se extraerán 50.000 litros de agua para riego, o lo que es lo mismo, 50 m3/día, y con los mismos parámetros corregidos del punto anterior.
- Grilla de 100 x 100
- 10 ciclos de simulación representando 10 días de extracción de agua
- Error admisible acumulado de 1 en cada ciclo
- Transmisividad de 0,5
- Niveles de agua originalmente en 0 m, según inicialización MonteCarlo
- Almacenamiento inicial 0,375, según inicialización MonteCarlo
- Evaporación inicial 0,06 según iniciación MonteCarlo
- Bomba de explotación en el centro geográfico, posición [50,50]
- Caudal de explotación de 50,0 m3/día
Como resultado se obtuvo que la profundidad máxima luego de 10 días, es de 30.1 m, y en un radio de 20m, alcanza a 9.30 m, tomando como nivel inicial los cero metros (0m) .
Este nivel de profundidad del cono de depresión refleja aproximadamente lo observado en la explotación, donde la medición indicó en realidad 28.0 m de profundidad. Esto es atribuible a que no se contrastó durante los 10 días de extracciones, sino solamente en la primera jornada, debido a no poder disponer del equipo y de lo costoso de la operación.
7.5 Conclusiones para el caso de explotación para riego
Al igual que para el caso del modelo de laboratorio, la comparación entre métodos de iniciación siempre arroja que la distribución uniforme en el modelo PRICKETT genera resultados que exceden lo registrado luego en la realidad. Aplicando la distribución de Monte Carlo, que es la mas conservadora para descensos de niveles, se obtiene una excelente aproximación a lo posteriormente contrastado desde los puntos de observación y control.
Método | Máximo de Profundidad | Profundidad en un radio de 5m |
MonteCarlo (primer corrida) | 3,48 | 1,25 |
MonteCarlo (corrida ajustada) | 3,03 | 0,91 |
Realidad | 3,00 | 0,90 |
8.1 Anexo 1 : Desarrollo de la teoría para el Modelo Prickett-Lonnquist
El modelo Prickett-Lonnquist simula en medio anisótropo bidimensional el flujo subterráneo originado por la explotación en régimen transitorio de acuíferos libres o confinados. La resolución de la ecuación diferencial del flujo es aproximada en diferencias finitas. (*)
Para poder definir un modelo así se necesitan :
- Descripción de la geometría del terreno a aplicar
- Descripción de las propiedades físicas del medio en cada punto del dominio. Permeabilidad, transmisividad, coeficiente de almacenamiento, etc.
- Ley de Darcy que rige el movimiento del agua. Teorema de la Continuidad.
- Condiciones de los límites del sistema
- Condiciones en un tiempo inicial t0
- Descripción de las acciones exteriores al sistema
Con todo esto se tiene la ecuación diferencial que describe el movimiento del agua para el caso bidimensional (*) :
d (Txd h) + d (Tyd h) + q' = – Sd h
d x d x d y d y d t
siendo T y h funciones de x e y (coordenadas rectangulares en un punto) , T, función transmisividad, y h el nivel del acuífero o napa de agua, en el instante t.
El balance instantáneo de volúmenes en un elemento infinitesimal del acuífero para un punto [x,y] en un momento dado (considerando a las propiedades físicas del cuerpo de agua como constantes verticalmente y que la velocidad es constante horizontalmente con un valor dado por la Ley de Dupuit) se representa por:
V = – K grad h
siendo K la permeabilidad del suelo o medio.
Este es el problema general para caudales. Si se pretende resolver el movimiento y la concentración de los cuerpos disueltos habría que considerar además la ecuación del transporte de masa o la de la dispersión hidrodinámica, resolviéndolas conjuntamente con la anterior.
Si suponemos un esquema de acuífero constituido por una malla de prismas rectangulares (matriz) de base D x, D y, entonces el desarrollo del esquema numérico se presenta a continuación.
(*) PRICKET & LONNQUIST, "Selected Digital Computer Techniques for Groundwater Resource Evaluation", Illinois State Water Supply, Bulletin 55, EE.UU., 1971.
a) Para representar las derivadas parciales, el esquema a emplear será:
d f = f(x + D x) – f(x – D x) = f(x) – f(x – D x)
d x 2D x D x
con un error K*D x^2.
b) Las expresiones en diferencias finitas para el punto [x,y] son:
d T = T(x + D x,y) – T(x – D x,y)
d x 2D x
d T = T(x,y + D y) – T(x, y – D y)
d y 2D y
lo mismo para la función h.
c) El modelo utiliza un factor de almacenamiento que se define como
SF1[i, j] = S*D X*D Y
donde SF1[i, j] es el factor de almacenamiento para la celda de la grilla [i, j], en m3/m, S es el coeficiente de almacenamiento de la napa de agua subterránea en condiciones de confinamiento (adimensional) y D X y D Y son las dimensiones de la grilla o malla, en metros.
El primer paso es la discretización de las propiedades físicas del acuífero o napa de agua subterránea. A cada celda de la grilla se le asignan las propiedades o valores de transmisividad, factor de almacenamiento, nivel inicial y final del agua, y caudal de bombeo. Estas propiedades físicas se representan por medio de matrices, donde cada celda es la abstracción de un cuadrado en el terreno, de N x M metros, siendo las mismas:
- La matriz t0 representa la transmisividad inicial, en m3/día/m.
- La matriz t1 representa la transmisividad actual, en m3/día/m.
- La matriz h representa los niveles de agua actuales, en m.
- La matriz h0 representa los niveles de agua iniciales, en m.
- La matriz sf1 representa el factor de almacenamiento actual, en m3/m.
- La matriz q representa el bombeo o extracción actual, en m3/día.
- La matriz dl representa las diferencias de incremento de niveles de agua, en m.
La resolución consta de tres partes principales: Entrada de datos, simulación propiamente dicha, y exportación de resultados en formato coordenado (i, j , valor).
Las dimensiones de filas y columnas están dadas dinámicamente, y limitan el área de cálculo. La variable time (tiempo) es puesta a cero e incrementada con su delta. No forma parte de la simulación sino de la salida o resultados por conjuntos de tiempos.
La predicción de niveles freáticos o de agua, predice el comportamiento del modelo en el futuro de acuerdo a sus comportamientos en períodos de tiempo anteriores.
La inclusión de la predicción aumenta la convergencia de la solución: se hacen hipótesis entre los niveles presentes y anteriores, siendo su ecuación (*):
h[i, j] = h[i, j]+D*F / F = D/DL[i, j] , D = h[i, j] – h0[i, j]
Siendo D la diferencia de niveles entre la corrida anterior y la actual, y F un factor multiplicador según la capacidad de bombeo en ese punto [i,j]. Cuando F no es calculable o predecible, se la asume con el valor 1.0: También se contempla la división por cero y se acota F en límites razonables, entre 0.0 y 5.0.
Los últimos niveles freáticos calculados en el último intervalo de tiempo se hallan en la matriz h[i, j] y son trasladados a la matriz h0[i, j], para preparación del siguiente intervalo de tiempo.
Luego, se realizan los cálculos por columnas, calculando el nivel como h[i, j]+D*F, donde D es h[i, j] – h0[i, j]. Durante las iteraciones impares, se procesan las columnas en orden creciente, mientras que en las impares se lo hace en forma decreciente. Los términos AA, BB, CC y DD son variables de soporte auxiliar de resultados de ecuaciones.
En los vectores de soporte de cálculos G y B, se hallan los niveles de agua en cada celda para cada columna siguiendo un orden contrario al llevado para su cálculo. En el término E, que es el error de cálculo en la iteración actual, se añade la suma de los valores de dichos cambios. Al final del cálculo de todas las columnas, el programa calcula por filas los niveles en las celdas o nudos de la matriz. Este último paso es exactamente el mismo que el utilizado para las columnas, excepto por el cambio de índices necesario.
Concluido esto, se comparan E y ERROR, donde esta última es el error acumulado para todas las iteraciones. Si E es mayor a ERROR, la solución obtenida no es satisfactoriamente convergente, y se recomienza una nueva iteración.
Cuando se satisface la condición de convergencia, termina la simulación.
La condición de ERROR se elige en aquel punto donde su valor no hace variar significativamente la solución, y para esto se plantea una regla práctica :
ERROR=Q*DELTA/10*SF1
Donde Q es el caudal en m3/día, DELTA es el incremento de tiempo inicial, en días, SF1 es el factor de almacenamiento medio de agua, en m3/m.
(*) PRICKET & LONNQUIST, Op. Cit.
8.2 Anexo 2: Modelo Prickett-Lonnquist en lenguaje C/C++
La implementación programática del modelo original, escrito es Fortran77, fue migrada a lenguaje C/C++ en clases y módulos, e implementada en Sistema Operativo Ms.Windows y Linux.
Lo que sigue a continuación, es la definición formal en lenguaje C++ de la clase que implementa al modelo Prickett-Lonnquist, junto a las clases bases de soporte :
// notación acordada previamente para designar elementos en el modelo:
// h0[i][j : niveles piezométricos iniciales (m)
// h[i][j] : niveles piezométricos terminales (m)
// sf1[i][j] : factor de almacenamiento (confinado) (m3/m)
// q[i][j] : caudales de bombeo constante (m3/día)
// t0[i][j] : transmisividad entre i,j y i,j+1 (m3/día/m)
// t1[i][j] : transmisividad entre i,j y i+1,j (m3/día/m)
// Modelo Matemático con Teoría del Caos
class ChaosMModel
{
public:
// Constructor
ChaosMModel(int x_dim=0,int y_dim=0);
// Lorenz method // Metodo de Lorenz
void Initialize_Lorenz(float a,float b,float c,float dt, BaseReal **matrix, BaseReal value);
// Henon method // Metodo de Henon
void Initialize_Henon(float a,float b, BaseReal **matrix, BaseReal value);
// Sierpinski method // Metodo de Sierpinski
void Initialize_Sierpinski(BaseReal **matrix, BaseReal value);
// MonteCarlo method // Metodo MonteCarlo
void Initialize_MonteCarlo(BaseReal **matrix, BaseReal value, UInt ix, UInt jx);
// Set Dimensions // Establecer dimensiones
void SetDimensions(int x_dim,int y_dim);
private:
// Matrix Dimensions // Dimensiones de matriz
UInt dimx, dimy;
};
// clase prickett-lonnquist derivado de un modelo matricial base y unidad de punto flotante, y de otro de caos (estocástico)
class PricketLonnquist : public BaseMModel, public ChaosMModel
{
public:
PricketLonnquist(void); // constructor
~PricketLonnquist(void); // destructor
// Modelization for 1 pump // modelizacion para un punto de bombeo
USInt Modelization(Int dimrows, Int dimcols, USInt steps, BaseReal delta, BaseReal deltainc, BaseReal error, Byte format, Int r, Int c, BaseReal vt0, BaseReal vt1, BaseReal vsf1, BaseReal vh, BaseReal vq, ChaosType ctType=Chaos_NoInit);
// Modelization for 1 pump // modelizacion para un punto de bombeo
USInt Modelization(Int dimrows, Int dimcols, USInt steps, BaseReal delta, BaseReal deltainc, BaseReal error, Byte format,BaseReal ivt0, BaseReal ivsf1, BaseReal ivh, BaseReal ivq, Int r, Int c, BaseReal vt0, BaseReal vt1, BaseReal vsf1, BaseReal vh, BaseReal vq, ChaosType ctType=Chaos_NoInit);
USInt Modelization(ChString nodesinfilename); // modelizacion
inline USInt TotalIterations(void) { return totaliter; } // iteraciones
inline Real TotalTime(void) { return totaltime; } // tiempo
protected:
BaseReal **t0; // transmisivity m3/day/m // transmisividad m3/día/m
BaseReal **t1; // transmisivity m3/day/m // transmisividad m3/día/m
BaseReal **h; // ending piezometric level m // nivel piezometrico final
BaseReal **h0; // piezometric level m // nivel piezometrico m
BaseReal **sf1; // capacity m3/m // almacenamiento m3/m
BaseReal **q; // pumping m3/day // bombeo m3/día
BaseReal **dl; // ?
BaseReal *g, *b; // equations processing hold vectors // vectores soporte de procesamiento de ecuaciones
USInt totaliter; // total iterations // total de iteraciones
Real totaltime; // total time // tiempo total
USInt ncount; // print-output ncount // cuenta de salidas impresas
inline Dim Cols(void) { return nc; } // columns // columnas
inline Dim Rows(void) { return nr; } // rows // filas
inline void Cols(Dim ncols){ nc = ncols; } // columns // columnas
inline void Rows(Dim nrows){ nr = nrows; } // rows // filas
inline Dim MinCols(void) { return 0; } // min col // columna minima
inline Dim MinRows(void) { return 0; } // min row // fila minima
inline Dim MaxCols(void) { return nc-1; } // max col // columna maxima
inline Dim MaxRows(void) { return nr-1; } // max row // fila maxima
inline Boolean Precondition(void)
{
return ((h != NULL) && (h0 != NULL) && (sf1 != NULL) && (q != NULL) && dl != NULL) && (g != NULL) && (b != NULL) && (t0 != NULL) && t0 != NULL));
}
virtual void MatricesAllocation(void); // matrices allocation // alojamiento de matrices
virtual void OutPut(Byte format); // external nodes // nodos externos
virtual void Initialization(BaseReal tt, BaseReal s1, BaseReal hh, BaseReal qq, ChaosType ctType=Chaos_NoInit); // initialization // inicializacion
virtual void Prediction(USInt istep); // prediction // prediccion
virtual void RowsProcess(USInt istep, USInt liter, BaseReal ldelta, BaseReal *lerror);
virtual void ColumnsProcess(USInt istep, USInt liter, BaseReal ldelta, BaseReal *lerror);
virtual void Simulation(USInt nsteps, BaseReal delta, BaseReal deltainc, BaseReal error, Byte format); // simulation // simulacion
private:
Dim nc; // number of columns // numero de columnas
Dim nr; // number of rows // numero de filas
};
////////////////////////////////////////
// Constructor de clase
////////////////////////////////////////
PricketLonnquist::PricketLonnquist(void)
{
t0 = NULL; // no matrices or vectors // sin matrices ni vectores
t1 = NULL;
h = NULL;
h0 = NULL;
sf1 = NULL;
q = NULL;
dl = NULL;
g = NULL;
b = NULL;
totaltime = 0.0; // no statics // sin estadisticas
totaliter = 0;
Cols(0); // assign the columns // asignar las columnas
Rows(0); // assign the rows // asignar las filas
ncount = 0; // output count to zero // salidas impresas en cero
}
////////////////////////////////////////
// Destructor de clase
////////////////////////////////////////
PricketLonnquist::~PricketLonnquist(void)
{
if ( Precondition() )
{
Deallocation(t0 , Cols(), Rows()); // deallocate // desalojar
Deallocation(t1 , Cols(), Rows());
Deallocation(h , Cols(), Rows());
Deallocation(h0 , Cols(), Rows());
Deallocation(sf1, Cols(), Rows());
Deallocation(q , Cols(), Rows());
Deallocation(dl , Cols(), Rows());
if (Cols() >= Rows()) // verificar el maximo requerido
{
Deallocation(g, Cols());
Deallocation(b, Cols());
}
else
{
Deallocation(g, Rows());
Deallocation(b, Rows());
}
t0 = NULL; // no matrices or vectors // sin matrices/vectores
t1 = NULL;
h = NULL;
h0 = NULL;
sf1 = NULL;
q = NULL;
dl = NULL;
g = NULL;
b = NULL;
}
ncount = 0; // output count to zero // salidas impresas en cero
}
////////////////////////////////////////////////
// Alojamiento de la matriz
////////////////////////////////////////////////
void PricketLonnquist::MatricesAllocation(void)
{
t0 = Allocation(Cols(), Rows()); // alojar matrices y vectores
t1 = Allocation(Cols(), Rows());
h = Allocation(Cols(), Rows());
h0 = Allocation(Cols(), Rows());
sf1 = Allocation(Cols(), Rows());
q = Allocation(Cols(), Rows());
dl = Allocation(Cols(), Rows());
if (Cols() >= Rows())// verificar el maximo requerido
{
g = Allocation(Cols());
b = Allocation(Cols());
}
else
{
g = Allocation(Rows());
b = Allocation(Rows());
}
if ( !Precondition() )
throw (-1); // verify // verificar
}
/////////////////////////////////////////////////////////////////////////// Inicializacion de toda la matriz con los parametros de transmisividad,
// almacenamiento, niveles iniciales y bombeo
/////////////////////////////////////////////////////////////////////////void PricketLonnquist::Initialization(BaseReal tt, BaseReal s1, BaseReal hh, BaseReal qq)
{
Int i, j;
// matrix initialization // inicializacion de la matriz
for (i = MinCols(); i <= MaxCols(); i++) // para cada columna
{
for (j = MinRows(); j <= MaxRows(); j++) // para cada fila
{
t0[i][j] = tt; // asignar valores por omision
t1[i][j] = tt;
sf1[i][j] = s1;
h[i][j] = hh;
h0[i][j] = hh;
q[i][j] = qq;
}
}
}
////////////////////////////////////////////////
// Prediccion para el paso actual
// istep=paso actual de procesamiento
////////////////////////////////////////////////
void PricketLonnquist::Prediction(USInt istep)
{
// aux vars/ // variables auxiliares
Int i = 0.0, j = 0.0;
BaseReal d = 0.0, f = 0.0;
// prediction // prediccion
for (i = MinCols(); i <= MaxCols(); i++) // para cada columna
{
for (j = MinRows(); j <= MaxRows(); j++) // para cada fila
{
d = h[i][j] – h0[i][j];
h0[i][j] = h[i][j];
f = 1.0;
if (istep > 2)
{
if (dl[i][j] != 0.0) f = d/dl[i][j];
else f = d/ZERODIVIDE_REPLACE;
}
if (f > 5.0) f = 5.0;
if (f < 0.0) f = 0.0;
dl[i][j] = d;
h[i][j] += d*f;
} // endfor-byrow
} // endfor-byrow-prediction
}
/////////////////////////////////////////////////////////////////////
// Procesamiento por Columnas
// istep=indicador de paso o ciclo (input)
// liter=iteraccion actual (input)
// ldelta=tiempo acumulado (input)
// *lerror=error acumulado (output)
/////////////////////////////////////////////////////////////////////
void PricketLonnquist::ColumnsProcess(USInt istep, USInt liter,
BaseReal ldelta, BaseReal *lerror)
{
// aux vars/ // variables auxiliares
Int ii = 0 , i = 0 , j = 0 , n = 0;
BaseReal aa = 0.0, bb = 0.0, cc = 0.0,
dd = 0.0, ha = 0.0, w = 0.0;
// column calculation process // proceso de calculo de columnas
for (ii = MinCols(); ii <= MaxCols(); ii++)
{
if (((istep+liter)%2) == 1) i = MaxCols()-ii+MinCols();
else i = ii;
for (j = MinRows(); j <= MaxRows(); j++)
{
// row initialization // inicializacion para fila
aa = 0.0;
bb = 0.0;
cc = 0.0;
dd = 0.0;
if (ldelta != 0.0) // si hay un error acumulado (delta)
{
bb = sf1[i][j]/ldelta;
dd = h0[i][j]*sf1[i][j]/ldelta-q[i][j];
}
else
{
bb = sf1[i][j]/ZERODIVIDE_REPLACE;
dd = h0[i][j]*sf1[i][j]/ZERODIVIDE_REPLACE-q[i][j];
}
if ((j-MinRows()) != 0) // si no esta en limite
{
aa = -t0[i][j-1];
bb += t0[i][j-1];
}
if ((j-MaxRows()) != 0) // si no esta en limite
{
bb += t0[i][j];
cc = -t0[i][j];
}
if ((i-MinCols()) != 0) // si no esta en limite
{
bb += t1[i-1][j];
dd += h[i-1][j]*t1[i-1][j];
}
if ((i-MaxCols()) != 0) // si no esta en limite
{
bb += t1[i][j];
dd += h[i+1][j]*t1[i][j];
}
if ((j-MinRows()) != 0) // si no esta en limite
{
w = bb-aa*b[j-1];
if (w != 0.0)
{
b[j] = cc/w;
g[j] = (dd-aa*g[j-1])/w;
}
else
{
b[j] = cc/ZERODIVIDE_REPLACE;
g[j] = (dd-aa*g[j-1])/ZERODIVIDE_REPLACE;
}
}
else
{
w = bb;
if (w != 0.0)
{
b[j] = cc/w;
g[j] = dd/w;
}
else
{
b[j] = cc/ZERODIVIDE_REPLACE;
g[j] = dd/ZERODIVIDE_REPLACE;
}
}
} // endfor-column-calculations
// error reestimation // reestimación del error acumulado
*lerror += Absolute(h[i][MaxRows()]-g[MaxRows()]);
h[i][MaxRows()] = g[MaxRows()];
for (n = MaxRows()-1; n >= MinRows(); n–)
{
ha = g[n]-b[n]*h[i][n+1];
*lerror += Absolute(ha-h[i][n]);
h[i][n] = ha;
}// endfor-reestimation
} // endfor-column-process
}
/////////////////////////////////////////////////////////////////////
// Procesamiento por Filas
// istep=indicador de paso o ciclo (input)
// liter=iteraccion actual (input)
// ldelta=desvio acumulado (input)
// *lerror=error acumulado (output)
/////////////////////////////////////////////////////////////////////
void PricketLonnquist::RowsProcess(USInt istep, USInt liter,
BaseReal ldelta, BaseReal *lerror)
{
// aux vars/ // variables auxiliares
Int i = 0 , j = 0 , jj = 0 , n = 0;
BaseReal aa = 0.0, bb = 0.0, cc = 0.0,
dd = 0.0, ha = 0.0, w = 0.0;
// rows calculations process // proceso de calculos de filas
for (jj = MinRows(); jj <= MaxRows(); jj++)
{
if (((istep+liter)%2) == 1) j = MaxRows()-jj+MinRows();
else j = jj;
for (i = MinCols(); i <= MaxCols(); i++)
{
// column initialization // inicializacion para columna
aa = 0.0;
bb = 0.0;
cc = 0.0;
dd = 0.0;
if (ldelta != 0.0) // si hay un error acumulado (delta)
{
bb = sf1[i][j]/ldelta;
dd = h0[i][j]*sf1[i][j]/ldelta-q[i][j];
}
else
{
bb = sf1[i][j]/ZERODIVIDE_REPLACE;
dd = h0[i][j]*sf1[i][j]/ZERODIVIDE_REPLACE-q[i][j];
}
if ((j-MinRows()) != 0) // si no esta en limite
{
bb += t0[i][j-1];
dd += h[i][j-1]*t0[i][j-1];
}
if ((j-MaxRows()) != 0) // si no esta en limite
{
bb += t0[i][j];
dd += h[i][j+1]*t0[i][j];
}
if ((i-MinCols()) != 0) // si no esta en limite
{
aa += -t1[i-1][j];
bb += t1[i-1][j];
}
if ((i-MaxCols()) != 0) // si no esta en limite
{
bb += t1[i][j];
cc += -t1[i][j];
}
if ((i-MinCols()) != 0) // si no esta en limite
{
w = bb-aa*b[i-1];
if (w != 0.0)
{
b[i] = cc/w;
g[i] = (dd-aa*g[i-1])/w;
}
else
{
b[i] = cc/ZERODIVIDE_REPLACE;
g[i] = (dd-aa*g[i-1])/ZERODIVIDE_REPLACE;
}
}
else
{
w = bb;
if (w != 0.0)
{
b[i] = cc/w;
g[i] = dd/w;
}
else
{
b[i] = cc/ZERODIVIDE_REPLACE;
g[i] = dd/ZERODIVIDE_REPLACE;
}
}
} // endfor-row-calculations
// reestimation // reestimacion
*lerror += Absolute(h[MaxCols()][j]-g[MaxCols()]);
h[MaxCols()][j] = g[MaxCols()];
for (n = MaxCols()-1; n >= MinCols(); n–)
{
ha = g[n]-b[n]*h[n+1][j];
*lerror += Absolute(h[n][j]-ha);
h[n][j] = ha;
} // endfor-reestimation
} // endfor-row-process
}
//////////////////////////////////////////////////////////////////////
// Proceso de Simulacion parametrizado
// nsteps=cantidad de pasos minimos y necesarios (input)
// delta=tiempo acumulado maximo aceptable (input)
// deltainc=incremento del delta (input)
// error=error acumulado maximo aceptable (input)
// format=tipo de formato de salida {matricial,o por puntos} (input)
//////////////////////////////////////////////////////////////////////
void PricketLonnquist::Simulation(USInt nsteps, BaseReal delta,
BaseReal deltainc, BaseReal error,
Byte format)
{
USInt istep = 0, liter = 0;
BaseReal lerror = 0.0, perror = 0.0, ltime = 0.0, ldelta = 0.0;
// prediction cicle up to N steps // ciclo de prediccion hasta N pasos
for (ldelta = delta, ltime = ldelta, istep = 1;
istep <= nsteps;
istep++, ldelta *= deltainc, ltime += ldelta) // simulation
{
Prediction(istep); // prediccion
liter = 0; // contar iteraciones
lerror = MAX_REAL; // limite del ciclo de refinado
do // refinning // refinamiento
{
liter++;
perror = lerror; // keep previous error
lerror = 0.0; // null error
ColumnsProcess(istep, liter, ldelta, &lerror);
RowsProcess(istep, liter, ldelta, &lerror);
} while ((lerror > error) && (lerror < perror));
// endwhile-refining
if (lerror < perror) // verificar error menor al previo
{
OutPut(format); // print output // imprimir salida
}
else
{
throw ("No converge, incrementar error");
break; // exit loop // salir del ciclo
}
} // endfor-simulation
totaltime = ltime; // statics // estadisticas
totaliter = istep-1; // statics // estadisticas
}
/////////////////////////////////////////////////////////////////////////
// Proceso de modelizacion con archivo de entrada de nodos inicializados
// nodesfilename=archivo de nodos inicializados
//////////////////////////////////////////////////////////////////////
USInt PricketLonnquist::Modelization(ChString nodesfilename)
{
ifstream nodestream;
Char inbuffer[256+1];
Char format[256+1];
USInt steps;
Int dimrows, dimcols, r, c;
BaseReal delta, deltainc, error, vt0, vt1, vsf1, vh, vq;
nodestream.open(nodesfilename); // abrir flujo entrada
for (nodestream.getline(inbuffer, sizeof(inbuffer)-1);
(inbuffer[0] == '/') && (nodestream.fail() == 0);
nodestream.getline(inbuffer, sizeof(inbuffer)-1));
// tomar primer linea valida
// buscar, convertir y guardar las 11 variables
if (sscanf(inbuffer, COMMON_SCANNING, &steps , &delta , &deltainc,
&error, &dimcols, &dimrows, &vt0, &vsf1, &vh , &vq, &format)
!= 11)
{
throw ("Error COMMON_SCANNING | Argumentos iniciales ");
return (-1);
}
if ( (dimcols != 0) && (dimrows != 0) )
{
Cols(dimcols);
Rows(dimrows);
MatricesAllocation(); // allocate matrices // alojar matrices
Initialization(vt0, vsf1, vh, vq); // inicializarlas
for (nodestream.getline(inbuffer, sizeof(inbuffer)-1);
(nodestream.fail() == 0) && (nodestream.gcount() > 1);
nodestream.getline(inbuffer, sizeof(inbuffer)-1))
{
// check validity // verificar validéz
if (inbuffer[0] == '/')
{
}
// buscar, convertir y guardar las 7 variables
else if (sscanf(inbuffer, SPECIFIC_SCANNING,
&c , &r , &vt0, &vt1, &vsf1, &vh , &vq) == 7)
{
if ( (c >= MinCols() && c <= MaxCols()) && (r >= MinRows() && r <= MaxRows()) )
{
t0[c][r] = vt0;
t1[c][r] = vt1;
sf1[c][r] = vsf1;
h[c][r] = vh;
q[c][r] = vq;
}
else
{
throw("Error SPECIFIC_SCANNING");
}
}
else
{
throw("Error SPECIFIC_SCANNING y scanf()!=7");
}
}
nodestream.close(); // close input stream // cerrar flujo entrada
Simulation(steps, delta, deltainc, error, (Byte)format[0]); // simulation // simulación
}
// Total number of iterations // Numero total de iteraciones
return (totaliter);
}
///////////////////////////////////////////////////////////////////////////
// Proceso de modelizacion con parametros indicativos de cantidad de pasos,
// dimensiones fila-columna de la matriz, delta de tiempo acumulado,
// acumulado de error maximo, etc.
// dimrows=filas
// dimcols=columnas
// steps=pasos de ciclado
// delta=delta de tiempo inicial
// deltainc=incremento del tiempo en cada paso
// error=error maximo acumulado adminsible
// format=formato matriz o encolumnado x-y-value
// ivt0=transmisividad inicial en la matriz
// ivsf1=almacenamiento incial en la matriz
// ivh=nivel inicial uniforme en la matriz
// ivq=bombeo inicial uniforme en la matriz
// r=fila del punto de bombeo
// c=columa del punto de bombeo
// vt0=transmisividad en el punto
// vt1=transmisividad en el punto
// vsf1=almcacenamiento en el punto
// vh=nivel inicial en el punto
// vq=bombeo en el punto
//////////////////////////////////////////////////////////////////////////
USInt PricketLonnquist::Modelization(Int dimrows, Int dimcols, USInt steps, BaseReal delta,
BaseReal deltainc, BaseReal error, Byte format,
BaseReal ivt0, BaseReal ivsf1, BaseReal ivh, BaseReal ivq,
Int r, Int c,
BaseReal vt0, BaseReal vt1, BaseReal vsf1,
BaseReal vh, BaseReal vq)
{
// Precondition // Precondicion
if ( (dimcols != 0) && (dimrows != 0) )
{
Cols(dimcols);
Rows(dimrows);
MatricesAllocation(); // allocate matrices // alojar matrices
Initialization(ivt0, ivsf1, ivh, ivq); // inicializarlas
// pumpin point // punto de bombeo
if ( (c >= MinCols() && c <= MaxCols()) && (r >= MinRows() && r <= MaxRows()) )
{
t0[c][r] = vt0;
t1[c][r] = vt1;
sf1[c][r] = vsf1;
h[c][r] = vh;
q[c][r] = vq;
}
else
{
cout<<"Error en el Punto de Bombeo ";
}
// Simulation itself // Simalacion en si misma
Simulation(steps, delta, deltainc, error, format); // simulación
}
// Total number of iterations // Total de iteraciones
return (totaliter);
}
///////////////////////////////////////////////////////////////////////////
// Proceso de modelizacion con parametros indicativos de cantidad de pasos,
// dimensiones fila-columna de la matriz, delta de tiempo acumulado,
// acumulado de error maximo, etc.
// dimrows=filas
// dimcols=columnas
// steps=pasos de ciclado
// delta=delta de tiempo inicial
// deltainc=incremento del tiempo en cada paso
// error=error maximo acumulado adminsible
// format=formato matriz o encolumnado x-y-value
// r=fila del punto de bombeo
// c=columa del punto de bombeo
// vt0=transmisividad en el punto
// vt1=transmisividad en el punto
// vsf1=almcacenamiento en el punto
// vh=nivel inicial en el punto
// vq=bombeo en el punto
//////////////////////////////////////////////////////////////////////////
USInt PricketLonnquist::Modelization(Int dimrows, Int dimcols, USInt steps, BaseReal delta,
BaseReal deltainc, BaseReal error, Byte format,
Int r, Int c,
BaseReal vt0, BaseReal vt1, BaseReal vsf1,
BaseReal vh, BaseReal vq)
{
// Precondition // Precondicion
if ( (dimcols != 0) && (dimrows != 0) )
{
Cols(dimcols);
Rows(dimrows);
MatricesAllocation(); // allocate matrices // alojar matrices
Initialization(vt0, vsf1, vh, 0.0); // inicializarlas
// pumpin point // punto de bombeo
if ( (c >= MinCols() && c <= MaxCols()) && (r >= MinRows() && r <= MaxRows()) )
{
t0[c][r] = vt0;
t1[c][r] = vt1;
sf1[c][r] = vsf1;
h[c][r] = vh;
q[c][r] = vq;
}
else
{
cout<<"Error en el Punto de Bombeo";
}
// Simulation itself // Simalacion en si misma
Simulation(steps, delta, deltainc, error, format); // simulation
}
// Total number of iterations // Total de iteraciones
return (totaliter);
}
8.3 Anexo 3: Algoritmos de inicialización del Modelo Prickett-Lonnquist
Lo que sigue a continuación, es la implementación completa en lenguaje C++ de la clase modelo Chaos , con los algoritmos de iniciación implementados, estocásticos y de fractales.
Primeramente, se describe el generador de números aleatorios utilizado en esta implementación, el cual, parte de un numero base o semilla, y luego arma vectores de acumulación .
/////////////////////////////////////////////////////////////////////////
// Numero Base de generacion aleatoria
#define __SEED 161803398
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Random Generator class // Clase Generador Random
class __random_generator {
protected:
unsigned long table[55];
size_t index1;
size_t index2;
public:
unsigned long operator()(unsigned long limit) {
index1 = (index1 + 1) % 55;
index2 = (index2 + 1) % 55;
table[index1] = table[index1] – table[index2];
return table[index1] % limit;
}
void seed(unsigned long j);
__random_generator(unsigned long j) { seed(j); }
};
// Seed assign method // Metodo de asignacion de base aleatoria
void __random_generator::seed(unsigned long j) {
unsigned long k = 1;
table[54] = j;
for (size_t i = 0; i < 55; i++) {
size_t ii = 21 * i % 55;
table[ii] = k;
k = j – k;
j = table[ii];
}
for (int loop = 0; loop < 4; loop++) {
for (i = 0; i < 55; i++)
table[i] = table[i] – table[1 + (i + 30) % 55];
}
index1 = 0;
index2 = 31;
};
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Random generator instance // Instancia de Generador Aleatorio
__random_generator rd(__SEED);
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Propietary random number function // Funcion propietaria de numero aleatorio
unsigned long __long_random(unsigned long limit) {
return rd(limit);
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Constructot
ChaosMModel::ChaosMModel(int x_dim,int y_dim)
{
// Matrix dimension // Dimension de la matriz
dimx = x_dim;
dimy = y_dim;
};
// Set Dimensiones // Establecer dimensiones de Matriz
void ChaosMModel::SetDimensions(int x_dim,int y_dim)
{
// Matrix dimension // Dimension de la matriz
dimx = x_dim;
dimy = y_dim;
};
El método de Lorenz inicializa un volumen y/o superficie en base a tres ecuaciones con polinomios, siguiendo un patrón de generación de tipo fractal.
void ChaosMModel::Initialize_Lorenz(float a,float b,float c,float dt,BaseReal **matrix, BaseReal value)
{
double x = 0.0, y = 0.0, z = 0.0,
dx = 0.0, dy = 0.0, dz = 0.0;
long cont = 0;
unsigned int xx = 0, yy = 0;
const long limit = min(10000,dimx*dimy);
for(x = y = z = 1 ; cont < limit ; cont++)
{
dx = a*(y-x);
dy = x*(b-z)-y;
dz = x*y-c*z;
x += dt*dx;
y += dt*dy;
z += dt*dz;
xx = (long)(x*16) % dimx;
yy = (long)(z*16) % dimy;
if(xx < dimx && yy < dimy && xx >= 0 && yy >= 0)
matrix[xx][yy] = value;
}
};
El método de Henon inicializa una superficie en base a dos ecuaciones de polinomios, siguiendo un patrón de generación de tipo fractal.
void ChaosMModel::Initialize_Henon(float a,float b,BaseReal **matrix, BaseReal value)
{
long i = 0;
unsigned int xp = 0, yp = 0;
double x = 0.0, y = 0.0, xx = 0.0, yy = 0.0;
const long limit = min(10000,dimx*dimy);
for(i = 0 ; i < limit ; i++)
{
xx = 1+y-a*x*x;
yy = b*x;
x = xx;
y = yy;
xp = (long)x % dimx;
yp = (long)y % dimy;
if(xp < dimx && yp < dimy && xp >= 0 && yp >= 0)
matrix[xp][yp] = value;
}
};
El método de Sierpinski inicializa una superficie en base a dos ecuaciones de polinomios, inicializados en forma aleatoria en arreglos vectoriales, y siguiendo un patrón de generación de tipo fractal.
void ChaosMModel::Initialize_Sierpinski(BaseReal **matrix, BaseReal value)
{
float a[3]={0.5,0.5,0.5};
float b[3]={0,0,0};
float c[3]={0,0,0};
float d[3]={0.5,0.5,0.5};
float e[3]={1,50,50};
float f[3]={1,1,50};
float xx = 0.0, x = 0.0,
yy = 0.0, y = 0.0;
unsigned long i = 0;
long k = 0;
unsigned int xp = 0, yp = 0;
const unsigned long limit = min(10000,dimx*dimy);
for(i = 0 ; i < limit ; i++)
{
k = __long_random( sizeof(a)/sizeof(a[0]) );
xx = a[k]*x+b[k]*y+e[k];
yy = c[k]*x+d[k]*y+f[k];
x = xx;
y = yy;
xp = (long)(x * 4.5 + 0.5) % dimx;
yp = (long)(y * 4.5 + 0.5) % dimy;
if(xp < dimx && yp < dimy && xp >= 0 && yp >= 0)
matrix[xp][yp] = value;
}
};
El método de Monte Carlo inicializa una superficie en base a una iteración aleatoria de posicionamiento dentro de la misma, con valores predeterminados, siguiendo un patrón estocástico.
void ChaosMModel::Initialize_MonteCarlo(BaseReal **matrix, BaseReal value, UInt ix, UInt jx)
{
UInt i, j, in, jn, // indices de matrices
n, // indice de ciclo
middlex, middley, // puntos medios de los ejes
quadrx, quadry; // cuadrante actual
Boolean end; // indicador para terminar ciclo
const unsigned long limit = min(10000,dimx*dimy);
// ciclo principal de generación de base aleatoria y posicionamiento
for (middlex = dimx/2, middley = dimy/2,
n = 0;
n < limit;
n++)
{
// posiciones resguardadas en la matriz (i,j)
i = in = ix;
j = jn = jx;
// señal de fin de ciclado a FALSO
end = FALSE;
// ciclado SET de nodos según posiciones aleatorias generadas
while (end == FALSE)
{
quadrx = (UInt)__long_random(dimx);
quadry = (UInt)__long_random(dimy);
if ((quadrx > middlex) && (quadry > middley)) // cuadrante 1
{
if ((i+1) < dimx && matrix[i+1][j] != value)
in = i + 1;
else
{
matrix[i][j] = value;
end = TRUE;
}
}
else if ((quadrx > middlex) && (quadry < middley)) // cuad. 2
{
if ((j-1) < dimy && (j-1) > 0 && matrix[i][j-1] != value)
jn = j – 1;
else
{
matrix[i][j] = value;
end = TRUE;
}
}
else if ((quadrx < middlex) && (quadry < middley)) // cuad. 3
{
if ((i-1) < dimx && (i-1) >= 0 && matrix[i-1][j] != value)
in = i – 1;
else
{
matrix[i][j] = value;
end = TRUE;
}
}
else // cuadrante 4
{
if ((j+1) < dimy && matrix[i][j+1] != value)
jn = j + 1;
else
{
matrix[i][j] = value;
end = TRUE;
}
}
i = in;
j = jn;
}
}
};
/////////////////////////////////////////////////////////////////////////
8.4 Anexo 4: Diálogo Principal de la aplicación modelo Prickett-Lonnquist con iniciación estocástica / fractal
MENU DE SELECCIÓN PARA EJECUTAR EL MODELO PRICKETT-LONQUIST
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
NOMENCLATURA DE PARAMETROS para 2 DIMENSIONES
- Niveles piezométricos = (m) metros
- Factor de almacenamiento (confinado) (m3 / m) = metros cúbicos x metro lineal
- Caudales de bombeo constante (m3 / día) = metros cúbicos x día
Transmisividad entre 2 nodos cualesquiera (m3 / día / m) = metros cúbico x día x metro lineal
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
NOMENCLATURA DE PARAMETROS INCLUYENDO METODOS ESTOCASTICOS
Para ver el gráfico completo seleccione la opción "Descargar" del menú superior
- Cantidad de filas / columnas: Número de nodos laterales que contendrá la superficie a modelizar.
- Cantidad de Ciclos: Iteraciones del modelo antes de la convergencia del error máximo admitido.
- Delta del tiempo: Tiempo referencial entre cada iteración. Representativo.
- Incremento del delta: Incremento del delta del tiempo referencial. Representativo.
- Error admisible: Error máximo acumulado admisible por las iteraciones del modelo.
- Transmisividad inicial: indicador de esta propiedad al inicio del modelo, en m3/día/m.
- Nivel freático inicial: valor por omisión de iniciación de la superficie, en cierto nivel freático. En metros.
- Almacenamiento inicial: indicador de esta propiedad al inicio del modelo. En m3/m.
- Bombeo inicial: indicador de esta propiedad al inicio del modelo, generalmente representativo de una explotación artificial (planta de bombeo de agua). En m3/día.
- Evaporación inicial : indicador de esta propiedad al inicio del modelo. En m3/día.
8.5 Anexo 5: Aplicación Comercial "Visual ModFlow"
Visual MODFLOW es el estándar americano en el área de modelización para transporte de contaminantes y flujo de agua subterránea en 3-D. Combina una interfase poderosa e intuitiva, soportando calibración automática. Permite al usuario:
- Diseñar gráficamente la grilla de modelación.
- Digitalizar y visualizar los parámetros del modelo.
- Ejecutar el modelo.
- Calibrar el modelo manual o automáticamente.
- Mostrar e interpretar los resultados.
[A] Vistas superficiales y por cortes longitudinales en la grilla
Característica principales de Visual ModFlow
- Interfase gráfica poderosa y facil de usar
- Vista interactiva superficial y por cortes
- Importación de mapas bases en formato AutoCAD
- Rotación y alineación de modelos con respecto a los mapas bases
- Diseño automático de grillas y correcciones
- Niveles del terreno importados directamente desde archivos
- Soporta los modelos de contaminantes denominados MT3DMS, RT3D, MT3D99 y WinPEST
- Integración directa con Win32 MODFLOW del USGS
- Vista previa interactiva para convergencia de la solucion del modelo
- Incluye el solucionador de ecuaciones WHS Solver
- Procesamiento por lotes para simulaciones pesadas y de larga ejecución
[B] Contornos y depresiones con matices de colores
- Selección de puntos de calibración y estadísticas
- Calibración automática mediante WinPEST
- Contorneado mediante matices de colores, de resultados y puntos de referencia
- Detalles gráficos detallados
- Impresión en alta resolución en cualquier impresora o plotter
- Exportación de visualizaciones a formatos gráficos AutoCad, ESRI y Windows
- Animación 3-D de avanzada
[C] Visualización y animación 3D
Aplicaciones profesionales de Visual ModFlow
- Evaluación de Sistemas de Aguas Subterráneas
- Delimitar zonas de captura para perforaciones de explotación de aguas subterráneas
- Simular la atenuación natural en la contaminación del agua subterránea
- Diseñar y optimizar las localizaciones de perforaciones para proyectos comerciales
- Determinar los contaminantes y su exposición para evaluación de riesgos
Visual MODFLOW fue lanzado por primera vez al mercado en Agosto de 1994 y actualmente está siendo usado por mas de 5.000 consultores, reguladores y educadores en todo el mundo.
9. Bibliografía y Referencias Profesionales
- Dr. Jorge Santa Cruz, Geólogo de la Universidad de Buenos Aires, Argentina. Doctor en Gestión de Aguas Subterráneas de la Universidad Complutense de Madrid, España. Director del Programa Nacional de Tecnología Sustentable en Aguas Subterráneas (PNTSAS) del Instituto Nacional del Agua, Argentina. (*)
- Dr. Adrián A. Silva Busso, Geólogo de la Universidad de Buenos Aires, Argentina. Especialista en hidrogeología de la Universidad Complutense de Madrid, España. Miembro del Programa Nacional de Tecnología Sustentable en Aguas Subterráneas (PNTSAS) del Instituto Nacional del Agua, Argentina. (*)
(*) Instituto Nacional del Agua, AU Ezeiza-Cañuelas, Tramo J. Newbery Km 1,620 (1804) Ezeiza, Pcia. Buenos Aires, Argentina. TE: (54 11) 4480-9219/25 Fax: (54 11) 4480-0094 . PNTSAS : (54 11)4480-0295.
LIBROS, TESIS, INFORMES y PORCIONES DE SOFTWARE
- ANGUITA, CUSTODIO y otros, "Teoría Básica de Modelos Analógicos y Digitales de Acuíferos", Servicio Geológico de Obras Públicas y Gabinete de Cálculo del Ministerio de Obras Públicas y Transportes, España, 1976.
- BIERMAN, BONNINI y otros. "Análisis Cuantitativo para la Toma de Decisiones", IRWIN, 8va. Edición, México, 1999.
- CERNADAS, Martín. "Sistema Nacional de Aguas Subterráneas (SIAS)", Informe Final de Beca del PNTSAS, INA. Librería del Instituto Nacional del Agua, Argentina, 1996.
- LINSLEY, KOHLER y PAULUS, "Hidrología para Ingenieros", 2da. Edición, traducida al castellano, McGraw-Hill de México S.A., México, 1977.
- PRICKET y LONNQUIST, "Selected Digital Computer Techniques for Groundwater Resource Evaluation", Illinois State Water Supply, Bulletin 55, EE.UU., 1971.
- SANTA CRUZ, Jorge. "Estudio del Acuífero Puelches", Librería del Instituto Nacional de Agua, Argentina, 1975.
- SILVA BUSSO, Adrián. "Estudio del Acuífero Puelches, Argentina", Librería del Instituto Nacional de Agua, Argentina, 1995.
- STEVENS, "Object-Oriented Graphics Programming in C++", Academic Press Inc., EE.UU., 1994.
- WALPONE Y MYERS, "Probabilidad y Estadística", 4ta Edición, Editorial McGraw-Hill, México-USA, 1992.
- WALTON, "Selected Analytical Methods for Well and Aquifer Evaluation", Illinois State Water Supply, Bulletin 49, EE.UU., 1962.
- HORNSBY, "Agua Subterránea : El Recurso Oculto", documento SL48S, Instituto de Ciencias Alimenticias y Agrícolas, Universidad de Florida. Primera Impresión, Enero de 1986.
- ESRI, "Map Objects LT 2.0", Environmental Systems Research Institute, Inc., 380 New York Street, Redlands, CA 92373-8100 USA.
- Banco de datos de modelos numéricos. Universidad de Hannover. http://www.fi.uni-hannover.de/~am/isess97/isess1997.html
- CSEP (Computational Science Education Project), email , referencias sobre método Monte Carlo y modelización en aguas subterráneas http://www.cped.ornl.gov/cad_cp/text/imy.html
- Interfase visual para el modelo ModFlow. http://www.visual-modflow.com, por la Waterloo Hydrogeologic.
- InquiMap. Software modular para la Modelación y análisis de acuíferos. http://www.geoandsoft.com/espanol/ground_water.htm
- Instituto Nacional de Agua : http://www.ina.gov.ar .
- Modelo de Simulación de Acuíferos. Universidad de Kassel, Dinamarca. http://www.wiz.uni-kassel.de/model_db/mdb/asm.htmls y Proyecto ECOBAS (base ecológica de modelos numéricos) : http://eco.wiz.uni-kassel.de/ecobas.html
- Paradigm. Componentes estocásticos del modelo Paradigm para modelado de sistemas de acuíferos. http://ncl.ac.uk/wrgi/wrsl/gwms/gwms.pdf
- Prickett – Lonnquist Acuifer Simulation Model, en el banco de datos de modelos numéricos de la Universidad de Kassel. http://www.wiz.uni-kassel.de/model_db/mdb/plasm.html
- Programa Nacional de Tecnología Sustentable en Aguas Subterráneas (PNTSAS), . (Perteneciente al Instituto Nacional de Agua) AU Ezeiza-Cañuelas, Tramo J. Newbery Km 1,620 (1804) Ezeiza, Pcia. Buenos Aires, Argentina. TE: (54 11) 4480-0295. http://www.ina.gov.ar
- Revistas Técnicas CPRM, Brasil. URL: http://www.cprm.gov.br/rev/agua0401.html
- Sistema Nacional de Aguas Subterráneas (SIAS) : http://www.sias.freeservers.com . Sobre banco de registros hidrogeológicos en el ámbito de la República Argentina, actualizados hasta el año 1995. Producto del PNTSAS, del Inst. Nacional del Agua, de la RR. AA.
- Departamento de Ciencias de Suelos y Agua. Servicio Cooperativo de Extensión del Instituto de Ciencias Alimenticias y Agrícolas, Universidad de Florida, http://edis.ifas.ufl.edu
LICENCIAS DE SOFTWARE Y AVISOS LEGALES
Sobre MAP OBJECTS LT 2.0 , "U.S. Government Restricted/Limited Rights: Use, duplication, and disclosure by the U.S. Government are subject to restrictions as set forth in FAR section 52.227-14 Alternate III (g)(3) (JUN 1987), FAR section 52.227-19 (JUN 1987), DFARS section 252.227-7015 (NOV 1995) [Technical Data], and/or DFARS section 227.7202 [Computer Software], as applicable. Contractor/Manufacturer is Environmental Systems Research Institute, Inc., 380 New York Street, Redlands, CA 92373-8100 USA."
Sobre este documento, "Queda prohibida la reproducción total o parcial por cualquier medio y para cualquier destino, sin el permiso del autor. Copyright @2002 , Martín D. Cernadas. Hecho el depósito que marca la Ley de Derecho de Autor, 11.723"
Sobre el software adjunto, Modelo Prickett Estocástico, versión 2.0, "Queda autorizada la distribución en formato binario ejecutable, sin restricciones. Copyright @2002 , Martín D. Cernadas. Hecho el depósito que marca la Ley de Derecho de Autor, 11.723, y sucesivos decretos y leyes modificatorios."
Dedicatoria
A mi esposa Roxana, y a mi hijo Nicolás, que son lo mejor de la vida.
Agradecimientos
Al estimado profesor Ing. Víctor Rodríguez Carro, tutor de la presente tesina, que dedicó muchas horas y reuniones para las sucesivas correcciones que parecían no tener fin.
Martin Cernadas