desarrollo de un modelo bidimensional hidrodinÁmico y de …
TRANSCRIPT
DESARROLLO DE UN MODELO BIDIMENSIONAL HIDRODINÁMICO Y DE
CALIDAD EN CUERPOS DE AGUA POCO PROFUNDOS
Ing. JUAN CARLOS LOZANO SIERRA
UNIVERSIDAD DE LOS ANDES
DEPARTAMENTO DE INGENIERÍA CIVIL Y AMBIENTAL
BOGOTÁ
2003
DESARROLLO DE UN MODELO BIDIMENSIONAL HIDRODINÁMICO Y DE
CALIDAD EN CUERPOS DE AGUA POCO PROFUNDOS
Ing. JUAN CARLOS LOZANO SIERRA
Tesis de grado
M.Sc. Ingeniería Civil
Director
Ph.D. LUIS ALEJANDRO CAMACHO BOTERO
UNIVERSIDAD DE LOS ANDES
DEPARTAMENTO DE INGENIERÍA CIVIL Y AMBIENTAL
BOGOTÁ
2003
MIC 2003-II-46 1
CONTENIDO
CONTENIDO...................................................................................................................................................................... 1
LISTA DE TABLAS ......................................................................................................................................................... 4
LISTA DE FIGURAS ....................................................................................................................................................... 5
1 INTRODUCCIÓN................................................................................................................................................... 9
1.1 DEFINICIÓN DEL PROBLEMA.................................................................................................................9
1.2 OBJETIVOS...................................................................................................................................................10
1.3 METODOLOGÍA ..........................................................................................................................................11
1.4 DATOS UTILIZADOS.................................................................................................................................13
1.5 RESULTADOS PRINCIPALES.................................................................................................................17
1.6 RESUMEN DE CONTENIDO....................................................................................................................18
2 ANTECEDENTES DEL MODELO HIDRODINÁMICO BIDIMENS IONAL..................................20
2.1 EL CARÁCTER BIDIMENSIONAL DEL MODELO ...........................................................................22
2.2 EL ESQUEMA DE DIFERENCIAS FINITAS ........................................................................................25
2.3 LA PRECISIÓN DEL ESQUEMA UTILIZADO....................................................................................25
2.4 MODELACIÓN HIDRODINÁMICA EN DOS DIMENSIONES (2D) ..............................................27
2.4.1 Ecuaciones Diferenciales Parciales básicas......................................................................................27
2.4.2 Sistema de ecuaciones en Diferencia Finitas.....................................................................................33
2.4.3 Esquema de solución del sistema de ecuaciones en Diferencias Finitas......................................38
2.5 RESULTADOS DE CALIBRACIÓN, OCTUBRE DE 1989 ................................................................41
2.6 RESULTADOS PARA ESPACIAMIENTO VARIABLE.....................................................................43
2.7 PROBLEMA A RESOLVER ......................................................................................................................46
MIC 2003-II-46 2
3 PLANTEAMIENTO DEL MODELO BIDIMENSIONAL DE CALIDAD..........................................47
3.1 ECUACIONES PARA MODELACIÓN DE LA CALIDAD DEL AGUA)........................................48
3.1.1 Oxígeno Disuelto.....................................................................................................................................49
3.1.2 Demanda Bioquímica de Oxígeno........................................................................................................55
3.1.3 Nitrógeno Orgánico................................................................................................................................55
3.1.4 Nitrógeno Amoniacal..............................................................................................................................56
3.1.5 Nitritos.......................................................................................................................................................57
3.1.6 Nitratos......................................................................................................................................................58
3.1.7 Sustancia Conservativa (Salinidad).....................................................................................................58
3.2 ACOPLE DE LOS MODELOS HIDRODINÁMICO Y DE CALIDAD .............................................59
4 IMPLEMENTACIÓN DEL MODELO ..........................................................................................................61
4.1 DESCRIPCIÓN GENERAL DEL PROGRAMA ....................................................................................61
4.1.1 Alcance y Limitaciones...........................................................................................................................61
4.1.2 Equipo.......................................................................................................................................................63
4.1.3 Lenguaje y estructura .............................................................................................................................63
4.2 PROGRAMA PRINCIPAL..........................................................................................................................64
4.3 PROCEDIMIENTOS PRINCIPALES.......................................................................................................66
4.4 MANUAL DEL USUARIO.........................................................................................................................68
4.4.1 Instalación Sugerida...............................................................................................................................68
4.4.2 Arquitectura..............................................................................................................................................69
5 VERIFICACIÓN SINTÉTICA DEL MODELO ACOPLADO) .............................................................76
5.1 RESULTADOS PARA UN PULSO DE CONTAMINACIÓN.............................................................79
5.1.1 Salinidad...................................................................................................................................................83
5.1.2 Demanda Bioquímica de Oxigeno........................................................................................................83
5.1.3 Nitrógeno Orgánico................................................................................................................................85
5.1.4 Nitrógeno Amoniacal..............................................................................................................................86
5.1.5 Nitritos.......................................................................................................................................................87
MIC 2003-II-46 3
5.1.6 Nitratos......................................................................................................................................................87
5.2 RESULTADOS PARA UN ESCALÓN DE CONTAMINANTE.........................................................89
5.2.1 Salinidad...................................................................................................................................................92
5.2.2 Demanda Bioquímica de Oxigeno........................................................................................................93
5.2.3 Nitrógeno Orgánico................................................................................................................................93
5.2.4 Nitrógeno Amoniacal..............................................................................................................................93
5.2.5 Nitritos.......................................................................................................................................................94
5.2.6 Nitratos......................................................................................................................................................94
6 APLICACIÓN DEL MODELO A CASOS DE ESTUDIO .......................................................................95
6.1 CONFIGURACIÓN DE CANAL CURVILÍNEO PARA FLUJO EN 2D...........................................95
6.2 CIÉNAGA GRANDE DE SANTA MARTA ......................................................................................... 104
7 CONCLUSIONES Y RECOMENDACIONES ...........................................................................................113
7.1 PLANTEAMIENTO DEL MODELO BIDIMENSIONAL DE CALIDAD..................................... 113
7.2 IMPLEMENTACIÓN DEL MODELO .................................................................................................. 114
7.3 VERIFICACIÓN SINTÉTICA DEL MODELO ACOPLADO (CANAL RECTO) ....................... 114
7.4 APLICACIÓN DEL MODELO A CASOS DE ESTUDIO ................................................................. 115
8 BIBLIOGRAFÍA .................................................................................................................................................118
ANEXO A: CÓDIGO DE COMPUTADOR (ANUBIS.EXE)............................................................................120
ANEXO B: CÓDIGO DE COMPUTADOR (LECDATOS.M ) ..........................................................................148
ANEXO C: CÓDIGO DE COMPUTADOR (MOVIE3D.M) .............................................................................150
MIC 2003-II-46 4
LISTA DE TABLAS
Tabla 4.1: Archivos de entrada para calidad del agua ................................................71
Tabla 4.2: Archivos de salida modelo bidimensional...................................................73
Tabla 5.1: Datos de entrada esquema de Flujo a pistón.............................................78
Tabla 5.2: Datos de entrada Pulso de contaminación (mg/L) ....................................79
Tabla 5.3: Datos de entrada Escalón de contaminación (mg/L) ................................89
Tabla 6.1: Datos de entrada esquema 2D.....................................................................96
Tabla 6.2: Datos corriente de entrada Pulso de contaminación (mg/L) ....................98
Tabla 6.3: Datos Ciénaga Grande Octubre 1989 ...................................................... 105
MIC 2003-II-46 5
LISTA DE FIGURAS
Figura 1.1: Protocolo para el desarrollo y aplicación de un modelo ..........................11
Figura 1.2: Ciénaga Grande de Santa Marta ................................................................15
Figura 2.1: Esquema Espacial de Diferencias Finitas .................................................34
Figura 2.2: Variación de Niveles Estación Centro – Boca ..........................................42
Figura 2.3: Variación de Niveles Estación Centro – Centro........................................42
Figura 2.4: Variación de Niveles Estación Fundación .................................................43
Figura 2.5: Salinidad Estación Tasajera.........................................................................45
Figura 2.6: Salinidad Estación Cataca ...........................................................................45
Figura 3.1: Acople modelos Hidrodinámico y de Calidad............................................60
Figura 4.1: Estructura General del Programa ...............................................................64
Figura 4.2: Macro-algoritmo Programa principal...........................................................65
Figura 4.3: Archivo de datos Entrada.txt ........................................................................70
Figura 4.4: Estructura de entrada datos de calidad .....................................................71
Figura 4.5: Ejecución programa principal, Anubis.exe.................................................72
MIC 2003-II-46 6
Figura 4.6: Modelo de archivo tipo de salida “DBO4” ..................................................73
Figura 4.7: Visualización de resultados mediante Matlab ...........................................74
Figura 5.1 : Vista en planta del esquema para Flujo Pistón ........................................77
Figura 5.2: Detalle esquema para Flujo a pistón ..........................................................77
Figura 5.3: Resultados pulso de contaminación...........................................................80
Figura 5.4: Resultados pulso de contaminación t = 19.8 horas .................................81
Figura 5.5: Perfil transversal de concentración, t = 6.6 horas ....................................82
Figura 5.6: Resultados del modelo Vs la solución analítica para DBO (t=20h) .......84
Figura 5.7: Resultados del modelo Vs la solución analítica para NO (t=20h) .........85
Figura 5.8: Resultados del modelo Vs la solución analítica para NA (t=20h) ..........86
Figura 5.9: Resultados del modelo Vs la solución analítica para NI (t=20h) ...........87
Figura 5.10: Resultados del modelo Vs la solución analítica para NN (t=20h) .......88
Figura 5.11: Resultados escalón de contaminación ....................................................90
Figura 5.12: Resultados escalón de contaminación t = 20.0 horas ...........................91
Figura 5.13: Resultados del modelo Vs la solución analítica para DBO (t=20h).....93
Figura 5.14: Resultados del modelo Vs la solución analítica para NO (t=20h) .......93
Figura 5.15: Resultados del modelo Vs la solución analítica para NA (t=20h)........93
MIC 2003-II-46 7
Figura 5.16: Resultados del modelo Vs la solución analítica para NI (t=20h) .........94
Figura 5.17: Resultados del modelo Vs la solución analítica para NN (t=20h) .......94
Figura 6.1: Configuración curvilínea para flujo en 2D..................................................95
Figura 6.2: Resultados Hidrodinámicos 2D ...................................................................97
Figura 6.3: Resultados pulso contaminación 2D (Salinidad) ......................................99
Figura 6.4: Resultados pulso contaminación 2D (Salinidad) t = 19.8 horas ........ 100
Figura 6.5: Resultados pulso contaminación 2D (D.B.O.)........................................ 101
Figura 6.6: Resultados pulso contaminación 2D (D.B.O.) t = 19.8 horas .............. 102
Figura 6.7: Resultados pulso contaminación 2D (Nitrógeno) t = 19.8 horas ........ 103
Figura 6.8: Esquema de Diferencias Finitas Ciénaga Grande ................................ 105
Figura 6.9: Variación de Nivel Estación Centro - Boca............................................. 106
Figura 6.10: Variación de Nivel Estación Centro - Centro........................................ 106
Figura 6.11: Variación de Nivel Estación Fundación ................................................ 106
Figura 6.12: Salinidad Estación Tasajera ................................................................... 107
Figura 6.13: Salinidad Estación Cataca ...................................................................... 107
Figura 6.14: Salinidad Estación Centro - Boca .......................................................... 107
Figura 6.15: Salinidad Ciénaga Grande (Octubre 18/1989, 4:00 P.M.) 2 Ciclos.. 109
MIC 2003-II-46 8
Figura 6.16: Salinidad Ciénaga Grande (Octubre 18/1989, 4:00 P.M.) 10 Ciclos 110
Figura 6.17: Salinidad Ciénaga Grande (Octubre 20/1989, 10:00 A.M.) ............... 111
Figura 6.18: D.B.O. Ciénaga Grande (Octubre 20/1989, 10:00 A.M.) ................... 112
MIC 2003-II-46 9
1 INTRODUCCIÓN
1.1 DEFINICIÓN DEL PROBLEMA
La modelación hidrodinámica de corrientes y cuerpos de agua es una herramienta
útil en la toma de decisiones. En la actualidad, se ha intensificado el desarrollo de
modelos computacionales que permitan predecir el grado de afectación por
actividad antropogénica, que no solo afecta la calidad del agua, sino la calidad de
vida y la salud de la población. En el caso de fuentes superficiales deterioradas, ya
sea por descarga de aguas residuales domésticas en ríos, o por incremento del
estado trófico en lagunas o embalses, la recuperación de éstas requiere de la
inversión de grandes sumas de dinero.
De la gran variedad de modelos matemáticos disponibles, aquellos que permiten
realizar análisis predictivos confiables, utilizando la menor cantidad de datos, son
los de mayor aceptabilidad. Adicionalmente, se desea que los modelos sean
eficientes tanto numérica como gráficamente, lo cual permite obtener resultados
en un tiempo razonable .
El desarrollo un modelo bidimensional de calidad para cuerpos de agua poco
profundos, es decir, aquellos donde no se presentan variaciones significativas de
concentración, temperatura y velocidad en el eje vertical, no sólo facilita el
entendimiento del problema de ingeniería, sino que ayuda en la toma de
MIC 2003-II-46 10
decisiones basadas en el análisis de alternativas, en donde se logre una óptima
relación costo-beneficio.
Este modelo es una herramienta indispensable en el planeamiento de políticas de
descontaminación de ciénagas ó estuarios, y permite decidir sobre la conveniencia
de obras de ingeniería en sistemas de tratamiento de aguas residuales como
lagunas de estabilización ó humedales.
1.2 OBJETIVOS
El presente trabajo de Tesis tiene como propósito desarrollar una herramienta
computacional que mejore la capacidad predictiva de los modelos de transporte de
solutos en cuerpos de agua poco profundos y sea un avance en el estado del arte
en esta rama. Para lograr esta meta, se realiza un acoplamiento entre un modelo
hidrodinámico, cuya confiabilidad ha sido comprobada previamente, y la
componente de calidad en donde se incluyen parámetros como Salinidad,
Demanda Bioquímica de Oxígeno y Nitrógeno. Adicionalmente se plantean los
siguientes objetivos específicos:
• Evaluar el comportamiento hidrodinámico de un cuerpo de agua poco profundo
resolviendo las ecuaciones diferenciales gobernantes para flujo en dos
dimensiones.
• Incorporar el componente conservativo y no conservativo en el modelo
hidrodinámico.
MIC 2003-II-46 11
• Aplicar el modelo computacional para el caso de La Cienaga Grande de Santa
Marta y calibrar el modelo a partir de datos de nivel, velocidad y salinidad
observados.
1.3 METODOLOGÍA
Aunque existen diferentes protocolos de modelación, a continuación se describen
los pasos más importantes que se requieren para desarrollar adecuadamente un
modelo y la aplicación del mismo a datos obtenidos en campo. Esta metodología
fue aplicada en el desarrollo del presente trabajo de Tesis.
Figura 1.1: Protocolo para el desarrollo y aplicación de un modelo
Conceptualizacióndel modelo matemático
Formulación numérica
Desarrollo del código de computador
Verificacióndel
Código
Aplicación al casode estudio
Calibración del Modelo
Verificación del Modelo
Simulación
Soluciones analíticas:•Ejemplos sintéticos•Pruebas post-modelación
Datos de Campo
Comparación conuna serie de datos
independientesAnálisis de sensibilidad
Si
No
Conceptualizacióndel modelo matemático
Formulación numérica
Desarrollo del código de computador
Verificacióndel
Código
Aplicación al casode estudio
Calibración del Modelo
Verificación del Modelo
Simulación
Soluciones analíticas:•Ejemplos sintéticos•Pruebas post-modelación
Datos de Campo
Comparación conuna serie de datos
independientesAnálisis de sensibilidad
Si
No
MIC 2003-II-46 12
El propósito de definir un modelo conceptual es el de crear un modelo teórico del
sistema ha ser modelado, para lo cual se consideraron los aspectos más
relevantes del fenómeno, las ecuaciones gobernantes y los procesos a simplificar
o despreciar. Características tales como condiciones de frontera y geométricas y
las escalas de tiempo y espacio deben ser descritas por completo a la hora de
utilizar los datos de campo.
En este trabajo, el código de computador que representa los procesos de
transporte de solutos ha sido desarrollado completamente, para lo cual se requiere
de un entendimiento claro y preciso de los procesos y sistemas que se están
modelando y de las diferentes suposiciones realizadas.
Una de los principales inconvenientes encontrados por Camacho (1991) es la
poca capacidad computacional de la época y el tamaño del cuerpo de agua
estudiado. Para solucionar este problema, se utilizó un programa de alta eficiencia
numérica (Fortran), el cual fue ensamblado con un programa grafico que permite
la presentación de los resultados fácilmente (Matlab). Esto programas se ejecutan
sencillamente en computadores personales.
Para la verificación del código y de las rutinas de programación se generaron
escenarios sintéticos, los cuales permiten comparar los resultados obtenidos a
partir del modelo con la solución analítica que represente condiciones semejantes.
Una vez el paso anterior fue superado satisfactoriamente, se procedió a la
aplicación del modelo al caso de estudio, para lo cual se generó la información de
entrada el modelo, así como las condiciones de frontera y condiciones iniciales. En
MIC 2003-II-46 13
una primera corrida del modelo se evaluó el tiempo de ejecución el cual depende
de la velocidad del computador, el tamaño del modelo, la eficiencia del compilador
y el tipo de salida de los resultados.
Se hicieron corridas simultáneas reduciendo el tamaño de las celdas de
diferencias finitas y el delta de tiempo de simulación, registrando el tiempo de
ejecución del programa hasta encontrar la combinación óptima entre precisión y
costo computacional.
Con relación a la calibración del modelo, se realizaron nuevas corridas, en las
cuales se modificaron algunos de los parámetros con el fin de minimizar la
diferencia encontrada entre los valores de campo y los resultados del modelo.
Una vez se ha demostrado que los resultados de la calibración reproducen la
realidad, el objetivo último de la modelación es predecir condiciones futuras de las
cuales no se cuenta con información.
1.4 DATOS UTILIZADOS
Una revisión critica de los diferentes modelos de trasporte de solutos, realizada al
comienzo de esta investigación, permitió definir los requerimientos de información
necesaria para una correcta implementación, calibración y verificación del modelo
a desarrollar.
Como conclusión de esto, se estableció que es preciso disponer de datos de
campo de parámetros hidrodinámicos (profundidad y velocidades) y de calidad
(salinidad, demanda bioquímica de oxígeno y nitrógeno) para un cuerpo de agua
MIC 2003-II-46 14
con condiciones bidimensionales de flujo . Esta información debe estar dada a nivel
horario, con una duración superior a las 48 horas y distribuidas estratégicamente
en toda la masa de agua.
En este sentido, la Universidad de los Andes participó en el proyecto de la
modelación hidrodinámica de la Cienaga Grande de Santa Marta son el apoyo de
COLCIENCIAS y la colaboración del Instituto de Investigaciones Marítimas de
Punta Betín – INVEMAR (CIFI-COLCIENCIAS, 1991). En dicho proyecto se
implementó un modelo hidrodinámico cuyos requerimientos de información fueron
semejantes a los establecidos previamente.
Uno de los principales objetivos planteados por el proyecto, fue el de planear y
ejecutar un programa adecuado de mediciones de campo, con el fin primordial de
calibrar los modelos matemáticos a desarrollar. La Figura 1.2 muestra la
localización general de los diferentes puntos de medición cuya lectura periódica se
realizó de la siguiente forma:
• Observaciones diarias sobre la Orilla: A partir del mes de Mayo de 1989 se
instalaron lectores diarios para las estaciones 1, 2, 3, 7 y 10 los cuales medían
niveles máximo , mínimo y medio, tres veces por día. A partir de Octubre de
1989 se incorpora un nuevo lector en la Estación 12 y se inició la toma de
datos de salinidad a las 6 am. Adicionalmente se aumentaron las lecturas para
nivel a las 21 y 24 horas en aquellas estaciones donde los operadores lo
pudieron hacer. Estas mediciones se continuaron hasta Mayo de 1990.
MIC 2003-II-46 15
Figura 1.2: Ciénaga Grande de Santa Marta
• Mediciones Continuas de 48 horas: El programa original de trabajo incluía la
elaboración periódica (cada 3 meses), de campañas continuas de medición
durante un periodo de 24 horas consecutivas. La primera de estas campañas
se realizó con buen éxito en junio de 1989 y cambió radicalmente el énfasis del
programa de mediciones, particularmente a partir de Agosto de 1989 cuando
se extendió a 48 horas continuas y se desarrollaron estaciones o plataformas
móviles en varios puntos del interior de la Ciénaga.
1
23
7
10
5
9
16
17
198
Tabla de Convenciones
Estaciones Perimetrales1: Barra2: Embarcadero3: Tasajera7: Buenavista10: Cataca
Estaciones dentro de la Cienaga5: Clarin8: Bodega9: Fundación16: Centro Boca17: centro Centro19: Sevilla
MIC 2003-II-46 16
• Estaciones Móviles: Durante la primera campaña de mediciones continuas de
24 horas, se llegó a la conclusión de que las estaciones más adecuadas para
medir ciertos parámetros, especialmente niveles, salinidad y velocidad del
agua, debían estar situadas dentro de la laguna y no en la orilla , ya que los
efectos de baja profundidad, la obstrucción de la vegetación y la abundancia
de mosquitos y otras alimañas hacían muy difícil la operación.
Los esfuerzos del grupo de campo dieron finalmente como resultado el diseño
y experimentación exitosa de una estación móvil bautizada con el nombre local
de "Troja", consistente en una plataforma de madera hincada en el fondo
relativamente blando de la Ciénaga. Alrededor de la plataforma se emplazaron
varas marcadas en las 8 direcciones principales de la Rosa de los Vientos (N,
NE, E, SE, S, SW, W, NW), y a 20 m de distancia del centro de la plataforma,
con el fin de medir fácilmente la magnitud y dirección de la velocidad de un
flotador arrojado por el operario y recolectado cada vez por el celador. Frente a
cada estación se dispuso otro paral para la mira limnimétrica.
Dado que la información recolectada en las campañas de medición realizadas en
el proyecto CIFI-COLCIENCIAS (1991) es suficiente para la implementación y
calibración del modelo bidimensional desarrollado en el presente trabajo de Tesis,
no se consideró necesaria la realización de nuevos monitoreos, ya que ésta
representa en forma precisa el comportamiento hidrodinámico y de trasporte de
solutos a lo largo de la Ciénaga Grande de Santa Marta.
MIC 2003-II-46 17
1.5 RESULTADOS PRINCIPALES
El modelo computacional desarrollado en este trabajo de Tesis, que integra la
componente hidrodinámica con un modelo de transporte de solutos, puede ser
usado en un amplio rango aplicaciones donde no se presenten variaciones
significativas de concentración, temperatura y velocidad en el eje vertical.
Ésta herramienta incluye el modelamiento de componentes de tipo hidrodinámico
como son la profundidad y la velocidad de la corriente, y de calidad de agua en el
cual se evalúa la concentración de contaminantes como salinidad, demanda
bioquímica de oxigeno y nitrógeno en sus diferentes especies (Orgánico,
Amoniacal, Nitritos y Nitratos).
Adicionalmente, dado que la herramienta es eficiente numéricamente, permite
predecir el efecto a corto, mediano y largo plazo de procesos de contaminación
antropogénicos, y la eficacia de la implementación de sistemas de tratamiento y de
políticas de manejo, sobre la calidad final de cuerpos de agua de gran magnitud
como Ciénagas, Bahías, Lagos y Lagunas.
La combinación de un modelo hidrodinámico con un modelo de transporte de
solutos tiene un gran potencial, ya que con esto se da un paso importante de en el
desarrollo de modelos que permitan predecir la capacidad autodepurativa de
grandes cuerpos de agua, así como la calidad de los efluentes bajo diferentes
escenarios de contaminación.
MIC 2003-II-46 18
En cuanto al código de computador, se puede decir que la combinación de los
programas Fortran y Matlab permiten realizar modelación de cuerpos
relativamente grandes, con un alto grado de precisión y con un costo
computacional bajo, requiriendo para su ejecución de periodos de tiempo
inferiores a una (1) hora y necesidad de hardware de fácil consecución, como
computadores de escritorio con procesador Pentium IV o superior y memoria RAM
superior a 124 MHz.
1.6 RESUMEN DE CONTENIDO
En el Capitulo 2 se presentan en forma resumida los antecedentes del modelo
hidrodinámico desarrollado por la Universidad de los Andes (CIFI-COLCIENCIAS,
1991), los casos de estudio donde ha sido aplicado y las ventajas y desventajas
encontradas durante su utilización.
El Capitulo 3 presenta las ecuaciones desarrolladas para el modelo hidrodinámico
y de calidad con un esquema de diferencias finitas con tamaño de celda
constante.
El Capitulo 4 muestra los detalles de la implementación computacional del modelo
tanto en su procesamiento matemático (Fortran), como en la presentación gráfica
de resultados (Matlab).
En el Capitulo 5 se aplica el modelo para el caso de una celda relativamente larga
y los resultados obtenidos se comparan con la solución analítica obtenida para
flujo a pistón.
MIC 2003-II-46 19
En el Capitulo 6 se presentan los resultados obtenidos de la modelación para dos
escenarios distintos (Configuración de canal curvilíneo y Ciénaga Grande de
Santa Marta), los cuales permiten evaluar cualitativamente el comportamiento
bidimensional del modelo, el transporte de contaminantes, la presencia de zonas
muertas y el grado de predictividad del mismo.
En los Anexos se adjuntan los datos de entrada utilizados para las diferentes
modelaciones, el Código de Computador del modelo de calidad y de la
herramienta gráfica que permite la visualización de los resultados y el Manual del
Usuario para la ejecución del programa.
MIC 2003-II-46 20
2 ANTECEDENTES DEL MODELO HIDRODINÁMICO BIDIMENSIONAL
El desarrollo de un modelo general que permita evaluar el comportamiento
hidrodinámico y de calidad de agua es fundamental. El análisis de alternativas
para la ejecución de obras de mejoramiento de la calidad del agua ayudan a la
selección de aquellas que tengan óptima relación costo beneficio.
En el mercado hay disponibles un gran número de modelos de calidad, los cuales
debido a los elevados requerimientos de información en cuanto a climatología,
hidrología, hidrodinámica, batimétrica y calidad, y en algunos casos altos costos
económicos, no son de gran utilidad para el análisis de las condiciones de nuestro
país. Por lo tanto, un modelo aplicable a diferentes sistemas (Ej.: Ciénagas,
Lagunas, Estuarios) es un herramienta útil que no solo facilita el entendimiento del
problema, sino que ayuda en la toma de decisiones.
El caso de la Ciénaga Grande de Santa Marta ha sido tema estudio por mas de 10
años por parte de la Facultad de Ingeniería de la Universidad de los Andes. La
circulación del agua en la laguna es de especial interés para conocer los
mecanismos de transporte de nutrientes, las zonas de estancamiento o retención
de agua, donde puede ocasionalmente producirse déficit en el abastecimiento de
estas sustancias, y los cambios locales de salinidad.
MIC 2003-II-46 21
Las investigaciones realizadas a la fecha (Camacho, 1991), han arrojado buenos
resultados en el caso de comportamiento hidrodinámico, pero debido a
limitaciones de tipo computacional, no ha sido posible incorporar la componente
conservativa y no conservativa.
La selección de un modelo bidimensional, específicamente el modelo de Fisher
(Fisher, 1981), ha demostrado ser una herramienta confiable en el estudio de
cuerpos de agua poco profundos, específicamente para el caso de la Ciénaga
Grande de Santa Marta. En la Universidad de los Andes se tiene experiencia en
las capacidades del modelo, lo cual facilita la incorporación de los nuevos
componentes.
El modelo de Fisher, fue desarrollado en la década de 1970 por Hugo B. Fisher,
profesor de la Universidad de California en Berkeley. Este modelo tiene una serie
de características que lo hacen de particular interés para la modelación de
cuerpos poco profundos:
1. Tiene la estructura general de los modelos matemáticos más modernos,
con los cálculos hidráulicos separados de los cálculos de transporte de
sustancias en el agua (modelo hidrodinámico separado del modelo de
transporte).
2. Contiene sin embargo, una metodología y un algoritmo de cálculo de
transporte de sustancias, que permite una eventual ampliación de la
investigación puramente hidrodinámica a la del transporte de nutrientes y de
contaminantes.
MIC 2003-II-46 22
3. El núcleo del cálculo hidrodinámico es el modelo de Lendertsee
(Lendertsee, 1967), un investigador holandés de conocida reputación.
4. El modelo de Fisher está publicado, con lo cual su costo es únicamente el
de su transferencia y adaptación al caso particular de cuerpos poco
profundos.
5. El modelo de Fisher y su algoritmo de transporte fueron desarrollados
directamente para el caso de la laguna de Bolinas de California y por lo
tanto está calibrado para un cuerpo poco profundo, de poca extensión y
complejidad hidrológica.
En este punto es conveniente también, discutir brevemente sobre el carácter
bidimensional del modelo; sobre el esquema de cálculo por diferencias finitas, y
sobre la precisión del modelo.
2.1 EL CARÁCTER BIDIMENSIONAL DEL MODELO
Todos los procesos físicos en la naturaleza ocurren en general en tres
dimensiones de espacio y una de tiempo. La variable tiempo es de especial interés
en problemas de flujo no-permanente como los flujos de estuarios aquí tratados,
de modo que resulta imprescindible incluirla en cualquier modelo que se proponga.
En cuanto hace a las dimensiones espaciales, los problemas pueden tratarse con
modelos de 0, 1, 2, ó 3 dimensiones según el grado de simplificación que se
desee.
MIC 2003-II-46 23
Los modelos uni-dimensionales (1D) consideran únicamente la variabilidad de los
parámetros de flujo y del movimiento de las partículas de agua a la largo de una
trayectoria lineal, y no permiten discernir las variaciones que puedan ocurrir en
direcciones normales a la dirección principal de movimiento. Tales modelos son
una aproximación válida en aquellos casos donde existe una sola dirección
principal de movimiento, debido a restricciones físicas del campo de flujo . Se usan
principalmente en el caso de canales, tuberías, y en general de conductos de
sección angosta.
Los modelos bidimensionales (2D), se utilizan donde quiera que resulta imposible
definir una dirección preferencial de movimiento en el plano horizontal XY. Si bien
existe una notable clase de modelos que son bidimensisonales en el plano XZ, en
hidráulica de lagunas, estuarios y conductos de sección ancha, la
bidimensionalidad se establece generalmente como la posibilidad del flujo de
cambiar de dirección en el plano XY. Debe anotarse que los modelos
bidimensionales XZ son en general modelos de flujo paralelo , que no permiten
realmente trayectorias de flujo oblicuas y por lo tanto no pertenecen realmente a
una clase general de modelos bidimensionales.
A su vez, los modelos tridimensionales (3D) son modelos que permiten
variaciones en las tres dimensiones espaciales.
Es frecuente confundir el orden dimensional de los modelos con el orden de
precisión de los mismos. Por esta razón conviene aquí establecer con claridad que
MIC 2003-II-46 24
no es cierto que los modelos 3D sean más precisos que los modelos 2D, o que
éstos sean más adecuados que los modelos 1D ó aún 0D.
En general, todos los modelos físicos hasta el presente, adolecen de problemas
de precisión similares, debido a la imposibilidad física y matemática de incluir
todos los posibles efectos e interacciones que están implícitos en la liberación
sucesiva de las diferentes restricciones dimensionales. Es valido anotar que entre
menos dimensiones se incluyan, mayor es el grado de simplificación, más fácil es
la interpretación los resultados obtenidos, y más simple el proceso de calibración y
las mediciones de campo necesarias para comprobación.
Dado que en todos los casos es necesario simplificar las ecuaciones y los
sistemas de cálculo, la precisión del modelo depende de que tan bien se adapta
cada condición al fenómeno real a modelar, y no, qué tantas dimensiones se
incluyen. Es también claro que los modelos más comunes y más conocidos
resultan usualmente más precisos puesto que se han podido verificar para un
mayor rango de condiciones. En este sentido los modelos 0D, 1D y 2D son muy
superiores a los modelos 3D, con los cuales existe en la actualidad poca
experiencia práctica. La mayoría de los investigadores serios están de acuerdo en
que en cuestiones de hidrodinámica del flujo y del transporte es preferible trabajar
con el modelo más simple que pueda dar solución al problema propuesto. Lo más
complejo no es necesariamente lo mejor.
Finalmente, vale la pena mencionar que un simple contraste o diferencia en
concentración en la vertical no implica la inutilidad de un modelo 1D o 2D versus la
MIC 2003-II-46 25
necesidad de un modelo 3D. Los contrastes de salinidad o de concentración de
sustancias miscibles en la vertical, en lagunas y sistemas estuarinos de baja
profundidad, están asociados normalmente con fenómenos difusivos debidos a la
turbulencia y no con fenómenos advectivos, debido a corrientes verticales, que
son de muy baja intensidad. Por esta razón, estos contrastes verticales pueden
obtenerse una vez determinado el campo de velocidades mediante un modelo 1D
o 2D, mediante ecuaciones conocidas para la distribución vertical de velocidad y
concentración en flujos turbulentos de tipo friccional.
2.2 EL ESQUEMA DE DIFERENCIAS FINITAS
Como ya se ha dicho, el creciente desarrollo de los computadores ha despertado
un renovado interés en el uso de modelos numéricos y el mejoramiento de los
procedimientos de cálculo. Los esquemas de solución basados en diferencias
finitas tienden a ser reemplazados hoy por esquemas con elementos finitos que
presentan algunas ventajas de cálculo, incluyendo la posibilidad de tener
elementos poligonales no cuadrados, que permiten la mejor definición de ciertos
contornos irregulares.
2.3 LA PRECISIÓN DEL ESQUEMA UTILIZADO
La precisión de un modelo no puede ser evaluada a priori, independientemente de
los datos de campo para cada caso particular, dado que la modelación matemática
es aún un arte más que una ciencia exacta. Cada modelador introduce su propia
MIC 2003-II-46 26
síntesis de los procesos físicos y su propio esquema computacional para
reproducir fenómenos en extremo complejos.
En general, sin embargo, se puede prever que la componente bidimensional del
presente modelo está bastante bien comprobada por numerosas aplicaciones en
sistemas estuarinos de baja profundidad con condiciones de mezcla completa en
la vertical, es decir sin estratificación de densidad. Esto quiere decir que en cuanto
hace a niveles, profundidades y posiblemente campos de velocidad en el plano
XY, debe poderse lograr una calibración bastante exacta.
Los aspectos de transporte y mezcla de sustancias miscibles deben ser
examinados con mayor detenimiento para lograr una buena calibración. En
particular, es necesario mejorar la toma de datos en el terreno, y desarrollar una
mayor precisión en la localización de las estaciones dentro del sistema de
coordenadas espaciales del cuerpo.
A nivel teórico no puede esperarse mejoría alguna en los resultados con base en
la extensión del modelo al campo tridimensional, pues es bien sabido que para
ambientes de tan baja profundidad, las componentes verticales de aceleración no
son importantes, ni lo son los efectos de circulación producidos por cambios de
densidad. En estas condiciones, el exceso de costo en dinero y en tiempo de
operación no justificaría la utilización de modelos 3D para cuerpos poco
profundos.
Por otra parte, es también sabido que, si las circulaciones de tipo densimétrico
fuesen importantes, no sería posible separar los cálculos hidrodinámicos de los de
MIC 2003-II-46 27
transporte, con lo cual se perdería eficiencia y rapidez de cálculo, la cual también
se vería afectada por la mayor cantidad de elementos necesarios en la red de
diferencias finitas.
Se considera en cambio que el modelo seleccionado puede simular con suficiente
precisión la mayoría de los procesos que causan dispersión y transporte de
sustancias en un cuerpo poco profundo, como son la turbulencia de los flujos
generados por mareas, ríos y oleajes, y los efectos transversales de "Bombeo" o
circulación residual por los flujos de marea, y los de "atrapamiento" del flujo en
zonas muertas o de circulación estable dentro del sistema.
2.4 MODELACIÓN HIDRODINÁMICA EN DOS DIMENSIONES (2D)
2.4.1 Ecuaciones Diferenciales Parciales básicas
En el presente numeral se hace la deducción de las ecuaciones parciales del
movimiento en el estado no estable. Posteriormente se introducen los efectos de
viscosidad de la rugosidad del fondo y del esfuerzo cortante del viento en la
superficie del agua.
Las variables de interés son las velocidades y las presiones en un sistema fijo de
coordenadas. Los ejes cartesianos X, Y se toman en el sentido de las manecillas
del reloj en el plano horizontal no distorsionado de la superficie del agua. El eje Z
se toma verticalmente hacia arriba.
La distancia entre el plano de referencia y el fondo se indica por H y la distancia
entre el mismo plano y la superficie del agua a un tiempo determinado se indica
MIC 2003-II-46 28
por ξ , que es el nivel del agua que esta sujeto a oscilación. Las componentes de
velocidad son u, v y w paralelas a los ejes de coordenadas en el punto (x, y, z).
Para flujo no viscoso las ecuaciones dinámicas son:
XxP
zu
wyu
vxu
udtu
=∂∂
+∂∂
+∂∂
+∂∂
+∂
ρ1
(2.1)
YyP
zu
wyu
vxu
udtv
=∂∂
+∂∂
+∂∂
+∂∂
+∂
ρ1
(2.2)
ZzP
zu
wyu
vxu
udtz
=∂∂
+∂∂
+∂∂
+∂∂
+∂
ρ1
(2.3)
Donde: P: Presión
ρ Densidad
X, Y y Z: Componentes de fuerzas externas por unidad de masa
Las fuerzas externas son generadas por la rotación de la tierra (efecto Coriolis),
las fuerzas generadoras de marea causadas por los astros y la fuerza
gravitacional en la dirección z. Estas fuerzas se pueden expresar como:
xKfvX += (2.4)
yKfuY +−= (2.5)
Donde: f : Parámetro de Coriolis, función de la latitud ΘΩ= Sinf 2
Ω Velocidad angular de la tierra
Θ Latitud ([+] al norte del Ecuador)
yx KK , : Fuerza generadora de marea
En la dirección vertical la fuerza más importante es la gravitacional. Se desprecian
los efectos de las demás fuerzas en esta dirección en el caso de aguas poco
profundas en las que la profundidad es una fracción de la longitud de onda.
MIC 2003-II-46 29
La ecuación de continuidad para flujo incompresible utilizada es:
0=∂∂
+∂∂
+∂∂
zw
yv
xu
(2.6)
En el análisis en dos dimensiones se introducen componentes de velocidad
promediadas en la vertical:
∫−+
=ξ
ξ h
udzh
U1
(2.7)
∫−+
=ξ
ξ h
vdzh
V1
(2.8)
Las distribuciones verticales de velocidad de las componentes u y v en un lugar
determinado pueden expresarse como una función de la velocidad promedio
mediante la introducción de unos coeficientes de distribución de la siguiente forma:
( ) ( )[ ]zuUzu '1+= (2.9)
( ) ( )[ ]zvVzv '1+= (2.10)
Para estos coeficientes se cumplen las siguientes relaciones:
( ) 0' =∫−
ξ
h
dzzu
(2.11)
( ) 0' =∫−
ξ
h
dzzv (2.12)
En la teoría clásica de ondas largas, la aceleración vertical de las partículas del
fluido se desprecia por su pequeño valor en comparación a la aceleración del
MIC 2003-II-46 30
campo gravitacional. La velocidad vertical w del fluido también se considera
despreciable. Debido a lo anterior la Ecuación (2.3) se reduce a:
ZzP
=∂∂
ρ1
(2.13)
Al integrar la última ecuación, asumiendo que la densidad es uniforme en la
profundidad, se obtiene que la presión es hidrostática y una función lineal de la
profundidad:
( ) ( ) 0PzgzP +−= ξ (2.14)
Donde P0 es la presión atmosférica.
Las derivadas de la presión en las direcciones horizontales pueden expresarse
entonces como función del nivel de agua y de la presión atmosférica:
xP
xg
xP
∂∂
+∂∂
=∂∂ 0ξ
ρ
(2.15)
yP
yg
yP
∂∂
+∂∂
=∂∂ 0ξ
ρ (2.16)
Al integrar las Ecuaciones (2.1) y (2.2) en la región z=-h(x,y) hasta z= ?(x,y) e
introducir las Ecuaciones (2.4), (2.5), (2.7), (2.8), (2.9), (2.10), (2.11), (2.12), (2.15)
y (2.16) se obtiene:
AxxP
xgfV
yU
VxU
UdtU
+∂∂
−=∂∂
+−∂∂
+∂∂
+∂ 01
ρξ
(2.17)
AyyP
ygfU
yV
VxV
UdtV
+∂∂
−=∂∂
+−∂∂
+∂∂
+∂ 01
ρξ
(2.18)
MIC 2003-II-46 31
Los términos Ax y Ay contienen los efectos de las fuerzas generadoras de marea y
de derivadas introducidas al promediar verticalmente la velocidad. Cálculos
numéricos y estimativos basados en consideraciones teóricas han demostrado
que estos términos pueden omitirse. Sin embargo es necesario que las
distribuciones de velocidad sobre la vertical sean constantes.
Si se tiene en cuenta la viscosidad, se pueden derivar términos de esfuerzo
cortante de la viscosidad vertical de Hedí en la ecuación de movimiento. Estos
términos pueden representar el efecto del viento en la superficie y de la fricción en
el fondo.
El esfuerzo del fondo (tb) es proporcional al cuadrado de la velocidad. El factor de
fricción depende de la rugosidad del fondo, del material del fondo y de la
profundidad. De acuerdo a Dronkers (Dronkers, 1969) la relación para flujo en una
dirección se puede expresar como:
VVgCtb2−=
(2.19)
Donde C: Coeficiente de Chezy
La introducción del término de esfuerzo del fondo en el sistema bidimensional
resulta en:
( )( ) xFhC
VUUg
xgfV
yU
VxU
UdtU
=+
++
∂∂
+−∂∂
+∂∂
+∂
ξξ
2
21
22
(2.20)
( )( ) yFhC
VUVg
ygfU
yV
VxV
UdtV
=+
++
∂∂
+−∂∂
+∂∂
+∂
ξξ
2
2122
(2.21)
MIC 2003-II-46 32
Donde: Fx y Fy son las funciones del esfuerzo cortante del viento y de
presiones barométricas en las direcciones x e y.
Fx y Fy pueden expresarse como:
hT
F xx ρ
=
(2.22)
h
TF y
y ρ=
(2.23)
Donde Tx y Ty son las funciones del esfuerzo cortante del viento sobre la
superficie:
2vadx UcT ρ=
(2.24)
2vady VcT ρ=
(2.25)
Donde aρ : Densidad del aire
cd: Coeficiente de arrastre del aire
Uv,Vv: Velocidad del viento en la dirección x e y respectivamente.
La ecuación de continuidad puede integrarse también en la vertical. La condición
de frontera para la superficie libre es:
( )y
vx
ut
w∂∂
+∂∂
+∂∂
=ξξξ
ξ
(2.26)
y en el fondo es:
( ) 0=∂∂
+∂∂
+−yh
vxh
uhw (2.27)
MIC 2003-II-46 33
Con estas fronteras, la integración vertical de la ecuación de continuidad resulta
en:
( )[ ] ( )[ ]0=
∂+∂
+∂+∂
+∂∂
yVh
xUh
tξξξ
(2.28)
En resumen, el problema de determinar las variables de interés ξ , U y V en
determinado campo de flujo es dos dimensiones se resuelve al solucionar el
sistema de ecuaciones diferenciales (2.20), (2.21) y (2.28). Dado que este sistema
no tiene solución analítica posible, deben emplearse métodos numéricos de
diferencias finitas o elementos finitos.
2.4.2 Sistema de ecuaciones en Diferencia Finitas
Para la solución del sistema de ecuaciones diferenciales (2.20), (2.21) y (2.28) en
las variables de interés ξ , U y V, se utilizará un esquema de diferencias finitas. En
el esquema espacial utilizado las velocidades, el nivel del agua y la profundidad se
describen en puntos diferentes de la malla, de acuerdo a la Figura 2.1.
El método de diferencias finitas utilizado es el “método multioperacional implícito-
explícito (Lendertsee, 1967)”. El proceso de cálculo consiste en la aplicación de
dos operaciones sucesivas en el tiempo. Mediante una operación que es implícita
para el nivel y la velocidad en la dirección x y explícita en la dirección y, se
calculan valores de 'ξ , U’ y V’ a partir de los valores de ξ , U y V de una iteración
anterior. Posteriormente, mediante una operación implícita para el nivel y la
velocidad en la dirección y y explícita en la velocidad en la dirección x, se calculan
valores de ''ξ , U’’ y V’’ a partir de los valores de 'ξ , U’ y V’.
MIC 2003-II-46 34
Figura 2.1: Esquema Espacial de Diferencias Finitas
nn-1 n+1
m+1
m
m-1
dx
dy
l
Dato de Profundidad h
Cálculo de Nivel ?
Cálculo de Velocidad V
Cálculo de Velocidad U
Cálculo de Sustancia Conservativa
Cálculo de Sustancia No Conservativa
TABLA DE CONVENCIONES
MIC 2003-II-46 35
Leendertsee verificó analíticamente, mediante algunas simplificaciones, la
estabilidad, convergencia y conservación de masa y momentum del esquema. Así
mismo analizó la influencia de los términos no lineales y el efecto del esfuerzo
cortante del fondo. La conclusión del estudio es que el método es “robusto”,
siendo muy estable y de correcto funcionamiento.
A continuación se escriben las dos series de ecuaciones de diferencias finitas del
método multioperacional para las Ecuaciones (2.20), (2.21) y (2.28). La Ecuación
de continuidad (2.28) es la segunda ecuación de cada serie. Por comodidad se
mantienen los gradientes de velocidad en los términos inerciales en forma
diferencial, entre paréntesis angulares “ ”. Los efectos de la rugosidad del viento
se indican por una función R y la influencia del viento y la presión atmosférica por
una función F. Adicionalmente se han marcado los términos no lineales con un
asterisco “*” ya que éstos tiene un tratamiento especial. En todas las ecuaciones
se ha usado el siguiente sistema de promedios y diferencias expresado para la
variable ξ , las cuales son evaluadas en (m,n).
( )nmnmxnm ,1,, 2
1−
− += ξξξ
(2.29)
( )1,,, 21
−− += nmnm
ynm ξξξ
(2.30)
( )nmnmx ,1, −+= ξξξ (2.31)
( )1,, −+= nmnmy ξξξ (2.32)
( )nmnmnmnmnm ,1,,11,1, 41
ξξξξξ +++= −−−− (2.33)
MIC 2003-II-46
36
Primera Operación:
xxx FRgdxdt
dydU
VdtdxdU
UdtVdtfUU ′+−′−−′−+=′ ξ12
121
21
21
(2.34)
( )[ ] ( )[ ]yyx
xxy Vh
dydt
Uhdxdt −−−− +−′+−=′ ξξξξ
1
*
1 21
21
(2.35)
yyy FRgdydt
dydV
dtVdxdV
UdtUdtfVV +′
−′−′−′
−′
−=′ *
121
21
21
21
ξ
(2.36)
Segunda Operación:
″+″
−′′−′″
−′′−″
+′=′′ xxx FRgdxdt
dyUd
VdtdxdU
UdtVdtfUU *
121
21
21
21
ξ
(2.37)
( )[ ] ( )[ ] ″+−′+−′=′′ −−−−y
yxx
xy Vhdydt
Uhdxdt *
11 21
21
ξξξξ
(2.38)
yyy FRgdydt
dydV
VdtdxdV
UdtUdtfVV ′+′−′′−″
−′
−′
−′=′′ ξ12
121
21
21
(2.39)
Donde dt: Intervalo de tiempo en segundos
dxm-1 Espaciamiento de la malla en la fila m-1 en metros
dym-1 Espaciamiento de la malla en la Columna n-1 en metros
MIC 2003-II-46
37
Los términos correspondientes a los gradientes de velocidad en los términos
inerciales están dados por:
( )( ) mm
nmmnmmnm
nm dxr
UrUrU
dxdU
1
1 ,12
,2
,1
, +
−−+= −+
(2.40)
( )( ) nn
nmnnmnnm
nm dyr
UrUrU
dydU
1
1 1,2
,2
1,
, +
−−+= −+
(2.41)
( )( ) mm
nmmnmmnm
nm dxr
VrVrV
dxdV
1
1 ,12
,2
,1
, +
−−+= −+
(2.42)
( )( ) nn
nmnnmnnm
nm dyr
VrVrV
dydV
1
1 1,2
,2
1,
, +
−−+= −+
(2.43)
Donde 1−= mmm dxdxr y 1−= mmn dydyr
La función R que contiene los efectos de la rugosidad del fondo esta dada por:
( ) [ ]( ) ( )2*
2122*
21
xxy Ch
VUdtgUxR
−−− +
+=
ξ
(2.44)
( ) [ ]( ) ( )2*
2122**
21
yyx Ch
VUdtgVyR
−−− +
+′=
′
ξ
(2.45)
( ) [ ]( )2
*
2122**
21
xxy Ch
VUdtgUxR
−−−
″
+
+″=
″
ξ
(2.46)
( ) [ ]( ) ( )2*
2122*
21
yyx Ch
VUdtgVyR
−−− +
+′=′
ξ
(2.47)
La función F esta dada a su vez por:
MIC 2003-II-46
38
( )xyvad
x hUC
F−− +
=ξ
ρ 2
(2.48)
( )yxvad
y hVC
F−− +
=ξ
ρ 2
(2.49)
2.4.3 Esquema de solución del sistema de ecuaciones en Diferencias Finitas
A continuación se presenta la forma esquemática de solución del sistema de
ecuaciones en diferencias finitas (2.34), (2.35) y (2.36)en las variables ξ ′ , U’ y V’
de la primera operación. Realizando un proceso matemático simple de reescritura
de las ecuaciones (2.34) y (2.35) en términos de las incógnitas ξ ′ , U’ en función
de variables calculables, Am, y Bm, se obtiene para una columna n:
( )[ ] ( )[ ] AUhdxdt
Uhdxdt
mxy
mxy =
′+−
′++′ −
−−−−1
*
2
*
1 21
21
ξξξ (2.50)
mmm
mm
Bgdxdt
gdxdt
dxdU
UdtU =′−′+′+′ + ξξ21
21
21
1 (2.51)
Donde: ( )[ ]yyx
m Vhdydt
A −− +−= ξξ12
1
(2.52)
′+−−+= xxm FRdydU
VdtVdtfUB21
21
(2.53)
Nótese que Am, y Bm son calculables por depender únicamente de valores de U, V
y ξ de una iteración anterior. Haciendo:
( )*
12
1 21
−−−− +=mxym h
dxdt
r ξ 22 −= mdxdx (2.54)
( )*
121
mxy
m hdxdt
r −− += ξ (2.55)
gdxdt
tm
m 21
1 =+ gdxdt
tm12
1=
(2.56)
MIC 2003-II-46
39
mm dx
dUdtw 21= o escrito en forma completa:
( )( )( )( )mm
nmmnmmnmm dxr
UrUrUdtw
1
,12
,2
,1
2
1
+
−+ −−+=
(2.57)
Es posible escribir las ecuaciones (2.50) y (2.51) en forma matricial para todos los
nodos de una columna n en la forma siguiente:
−
+=
×
−
−−
−
+
+
−
+
+
−
+
+
ii
jj
i
i
m
m
j
j
j
j
i
i
m
m
j
j
j
j
i
jj
jj
j
Ur
Ur
AB
BA
BABA
U
U
U
U
r
rrtt
r
0.00.000
.
.
.
.
1.000..............................0.....0.100.010.001 11
1
1
1
1
1
1
1
1
1
ξ
ξ
ξ
ξ
Donde el subíndice j indica la fila correspondiente al campo de agua a la izquierda
y el subíndice i , la fila correspondiente al campo de agua a la derecha. Obsérvese
que tanto 1−jU como iU son velocidades conocidas por corresponder a las
velocidades de las fronteras. Si la frontera es un río que llega a la laguna se
conoce la velocidad de entrada o el caudal; si es tierra la velocidad en la dirección
perpendicular es cero y si es una frontera de nivel o marea la velocidad se puede
calcular.
Se puede demostrar fácilmente (Lendertsee, 1967) que, mediante un proceso de
eliminación de incógnitas y un número finito de pasos, la solución del sistema
consiste en la aplicación alterna de las siguientes fórmulas recursivas:
MIC 2003-II-46
40
mmmm QUP +′×−=′ξ (2.58)
111 −−− +′×−=′ mmmm SRU ξ (2.59)
Donde el subíndice m corresponde a una determinada columna en la fila n de la
malla de diferencias finitas, y varía desde la frontera izquierda del campo de agua
(fila J) hasta la frontera derecha (fila I).
( )111 −− ×+=
mm
mm Rr
rP
(2.60)
( )( )11
111 −−
−−×+
×+=mm
mmmm Rr
SrAQ (2.61)
( )( )mmm
mm wPt
tR +×+= +1
1 (2.62)
( )mmm
mmmm wPt
QtBS +×+×+= 1
(2.63)
Los factores recursivos Pm, Qm, Rm y Sm se pueden calcular en sucesiones
desde la frontera de la izquierda hasta la frontera de la derecha, almacenando los
respectivos valores en vectores.
En la frontera derecha se conoce mξ ′ si se trata de una frontera de marea o se
conoce mU ′ si se trata de otro tipo de frontera. Al calcular mU ′ en el primer caso es
posible devolverse desde la frontera derecha hasta la frontera izquierda aplicando
alternativamente las formulas recursivas (2.58) y (2.59).
Se obtiene así los valores de mξ ′ y mU ′ en todos los nodos de una columna n de la
malla de diferencias finitas. El proceso se repite para cada columna del esquema
(n=1 hasta el número total de columnas).
MIC 2003-II-46
41
Con los valores de mξ ′ y mU ′ en toda la malla se calcula explícitamente el valor de
mV ′ de la Ecuación (2.36) al recorrer todos los nodos.
Se ha presentado la primera operación implícita para mξ ′ y mU ′ y explícita para mV ′ .
El esquema de solución para la segunda operación es casi idéntico al de la
primera, la diferencia corresponde a recorrer fila por fila la malla calculando
implícitamente ″nξ y ″
nV para posteriormente calcular explícitamente ″nU .
2.5 RESULTADOS DE CALIBRACIÓN, OCTUBRE DE 1989
En el proceso de modelación hidrodinámica de la Ciénaga Grande de Santa Marta
realizado por la Universidad de los Andes (CIFI-COLCIENCIAS, 1991), se verificó
el correcto funcionamiento del programa y se encontró que el método numérico de
solución era muy estable y eficiente. Se logró adicionalmente una buena
calibración del modelo, utilizando los datos obtenidos en las campañas de
medición. Sin embargo, a pesar de lo anterior, no se pudo representar
correctamente el campo de velocidad de la Ciénaga medido en campo.
En la Figura 1.2 se observa un esquema de la Ciénaga Grande de Santa Marta,
en el cual se han localizado las estaciones de medición utilizadas en el proyecto
CIFI-COLCIENCIAS. En estas estaciones se midió la superficie del nivel del agua
con miras, la velocidad de la corriente mediante flotadores, la salinidad de
muestras superficiales y en algunos casos la velocidad del viento con
anemómetros. Los parámetros se tomaron cada hora durante periodos de 48
horas en varios meses del año.
MIC 2003-II-46
42
La Figura 2.2, la Figura 2.3 y la Figura 2.4 representan los resultados obtenidos en
la calibración final del modelo junto con los datos de las campañas de medición de
Octubre de 1989 para las estaciones Centro-Boca, Centro-Centro y Fundación.
Con relación a los niveles medidos y los valores obtenidos con el modelo se
observa una buena correlación. Para el caso de la velocidad, los valores
modelados son inferiores en algunos casos hasta en un orden de magnitud.
0
2
4
6
8
10
12
11 14 17 20 23 2 5 8 11 14 17 20 23 2 5 8
Hora del Día
cm
Medido Oct/89 Modelo CIFI
Figura 2.2: Variación de Niveles Estación Centro – Boca
0
2
4
6
8
10
12
12 15 18 21 0 3 6 9 12 15 18 21 0 3 6 9
Hora del Día
cm
Medido Oct/89 Modelo CIFI
Figura 2.3: Variación de Niveles Estación Centro – Centro
MIC 2003-II-46
43
0
2
4
6
8
10
12
14
16
18
14 17 20 23 2 5 8 11 14 17 20 23 2 5 8
Hora del Día
cm
Medido Oct/89 Modelo CIFI
Figura 2.4: Variación de Niveles Estación Fundación
2.6 RESULTADOS PARA ESPACIAMIENTO VARIABLE
Teniendo en cuenta las limitaciones en la reproducción de la velocidad observada,
investigaciones posteriores (Camacho, 1991) analizaron la influencia del tamaño
de la malla y la exactitud en las condiciones de frontera sobre el comportamiento
de la velocidad. Dicho estudio arrojó entre otras las siguientes conclusiones:
• Se cuenta con un modelo hidrodinámico capaz de simular correctamente zonas
de concentración de flujo mediante el uso de una malla de espaciamiento
variable. Las ecuaciones del modelo han sido probadas y son correctas y el
esquema de malla variable es el apropiado.
• Sin embargo, reducir la malla tiene un costo computacional alto, pues el tiempo
de simulación puede aumentar considerablemente para mantener la estabilidad
numérica y la confiabilidad de los resultados.
• Se considera que la calibración obtenida mediante el modelo hidrodinámico
modificado para la Ciénaga Grande de Santa Marta no es óptima y se puede
MIC 2003-II-46
44
mejorar aún más. No se hizo esto por los tiempos de modelación tan largos (15
horas cada corrida).
• El modelo de transporte de contaminantes de Hugo Fisher (Fisher, 1981)
implementado está funcionando correctamente en forma general y las
modificaciones realizadas al modelo original están operando bien.
• Se considera que no se ha logrado una calibración satisfactoria para el caso
específico de intrusión salina en la Ciénaga Grande. Sin embargo se ha hecho
el primer esfuerzo en simular el transporte de contaminantes en este cuerpo de
agua, así como de colgar del modelo hidrodinámico un procedimiento de
transporte.
• Se recomienda en el futuro analizar y estudiar más el modelo de transporte
antes de dar un juicio positivo o negativo de sus ventajas y desventajas.
Aunque es un modelo sencillo y empírico, conceptualmente basado, se
considera que puede dar resultados muy buenos después de un proceso largo
y cuidadoso de calibración.
• Se piensa que se ha abierto un campo de investigación en este proyecto en la
Universidad de los Andes. Se ha dado el primer paso en desarrollar un modelo
bidimensional de transporte de contaminantes aplicable al caso de bahías,
lagos y ciénagas de escasa profundidad, donde no haya considerable
estratificación.
MIC 2003-II-46
45
Adicionalmente, en esta investigación se implementó un modelo de transporte con
el fin de determinar el comportamiento de la intrusión salina. La Figura 2.5 y la
Figura 2.6, muestran los resultados obtenidos durante el proceso de calibración
para la Ciénaga Grande de Santa Marta, comparando los resultados con los
obtenidos durante una compaña de medición realizada entre los días 18 y 20 de
Octubre de 1989.
0
5
10
15
20
25
10 13 16 19 22 1 4 7 10 13 16 19 22 1 4 7 10
Hora del Día
Sal
inid
ad (P
/Mil)
Medida C.31 C.33
Figura 2.5: Salinidad Estación Tasajera
0
2
4
6
8
10
12
14
10 13 16 19 22 1 4 7 10 13 16 19 22 1 4 7 10
Hora del Día
Sal
inid
ad (P
/Mil)
Medida C.31 C,33
Figura 2.6: Salinidad Estación Cataca
MIC 2003-II-46
46
2.7 PROBLEMA A RESOLVER
Las investigaciones realizadas a la fecha (CIFI-COLCIENCIAS, 1991 y Camacho,
1991), han arrojado buenos resultados en el caso de comportamiento
hidrodinámico, pero debido a limitaciones de tipo computacional, no fue posible
incorporar la componente de calidad del agua.
El propósito de esta investigación es retomar el trabajo realizado hasta ahora, y
aprovechando el avance en la velocidad de procesamiento de los computadores,
desarrollar un modelo completo de calidad de agua, con la precisión suficiente
requerida para el análisis de cuerpos de agua extensos y poco profundos, como lo
es la Ciénaga Grande de Santa Marta. En la modelación de la calidad del agua es
útil incluir sustancias no conservativas tales como Demanda Bioquímica de
Oxígeno y Nitrógeno en sus diferentes formas (Nitrógeno Orgánico, Nitrógeno
Amoniacal, Nitratos y Nitritos) y la Salinidad como sustancia de tipo conservativo .
En este trabajo, las ecuaciones diferenciales que rigen el comportamiento de estas
sustancias se incorporan en el modelo. La verificación de la modelación de estas
sustancias se realiza mediante pruebas analíticas y criterios de conservación de
masa únicamente, ya que no se dispone de datos de campo apropiados, y se sale
del alcance del proyecto la obtención de los mismos.
El modelo se aplica al caso de la Ciénaga Grande de Santa Marta, se hace una
evaluación del transporte de sustancias conservativas, y se comparan los
resultados con datos obtenidos en campo en campañas de muestreo realizadas
durante 1989.
MIC 2003-II-46
47
3 PLANTEAMIENTO DEL MODELO BIDIMENSIONAL DE CALIDAD
Para lograr la implementación del modelo en forma adecuada se obtuvieron copias
de los listados de las diversas subrutinas y programas del modelo original (CIFI-
COLCIENCIAS, 1991 y Camacho, 1991), las cuales fueron adaptadas del código
en el que fue elaborado inicialmente (lenguaje PASCAL).
Una de los principales inconvenientes encontrados por Camacho (1991) es la
poca capacidad computacional de la época y el tamaño del cuerpo de agua
estudiado. Para solucionar este problema, se decidió utilizar un programa de alta
eficiencia (Fortran), el cual fue ensamblado con un programa gráfico que permita
la presentación de los resultados fácilmente (Matlab). Estos programas se
ejecutan fácilmente en computadores personales.
Se decidió conservar el esquema original de diferencias finitas, en el cual fue
ensamblado el modelo de calidad del agua (ver Figura 2.1). La modelación se
realiza de manera simultánea, obteniendo inicialmente las condiciones
hidrodinámicas del cuerpo de agua y posteriormente lo relacionado con la
concentraciones de cada uno de los contaminantes. Este procedimiento se realiza
para cada intervalo de tiempo durante la simulación.
El programa se hizo general, de manera que puede ser utilizado para cualquier
cuerpo de agua donde sea válida la aproximación bidimensional, y los contornos
MIC 2003-II-46
48
físicos se especifican directamente en el archivo de datos. No hay limitación
alguna en las fronteras bien sea de marea, (mar), o de caudal (ríos), y el cambio
en las fronteras es de muy simple realización por el usuario.
El modelo está adaptado para reproducir también el efecto del viento en la
hidrodinámica de los cuerpos de agua, y permite la utilización de coeficientes de
arrastre variables en el tiempo para toda la malla de diferencias finitas. Otra
característica de importancia en el programa es el coeficiente de rugosidad del
fondo de la laguna, el cual puede variarse espacialmente para cada celda de la
malla de diferencias finitas.
3.1 ECUACIONES PARA MODELACIÓN DE LA CALIDAD DEL AGUA)
Alcanzar una meta de calidad de agua, generalmente requiere la inversión de
grandes sumas de dinero y un cambio de actitud con respecto a la inversión de los
recursos. Los impactos económicos pueden representar desde el costo de
construcción y mantenimiento de instalaciones para reducción de descargas de
contaminantes en corrientes naturales o para mejoramiento de la calidad de los
cuerpos receptores, hasta las limitaciones en el desarrollo económico en una
región o cuenca en particular.
Los responsables de la formulación y aprobación de las políticas y planes de
manejo en el área de la calidad del agua requieren de mecanismos para estimar y
evaluar temporal y espacialmente los impactos económicos, ambientales o
ecológicos de dichas políticas y planes. Ésta necesidad ha estimulado el
desarrollo y aplicación de un amplio rango de técnicas de modelación matemática
MIC 2003-II-46
49
que permiten predecir el impacto producido por las diferentes alternativas de
control de contaminación.
3.1.1 Oxígeno Disuelto
En relación con el estudio del Río Ohio, Streeter y Phelps (1925) desarrollaron el
primer modelo de calidad de agua, el cual describe la relación DBO-OD en una
corriente. En su trabajo, se consideró el sistema más simple en el cual el material
biodegradable es descargado a una corriente generando un consumo de oxígeno.
En este caso, se considera la reaireación atmosférica como única fuente de
oxígeno. La velocidad de cambio en el déficit de Oxígeno Disuelto, dD/dt, se
asume que es directamente proporcional a la Demanda de Oxígeno y al déficit de
oxígeno en la corriente. Por lo tanto, la ecuación diferencial para este proceso
puede ser escrita de la siguiente forma:
DKLKdtdD
ad −= (3.1)
Donde:
D Déficit en el Oxígeno de Saturación [M L-3] o la diferencia entre la
concentración de saturación de OD y la concentración para un tiempo t [T],
L Demanda Bioquímica de Oxígeno (Carbonacea) DBOc [M L-3],
Kd Coeficiente de Descomposición o Tasa de decaimiento [T-1],
Ka Coeficiente de reaireación o Tasa de reaireación [T-1].
En el modelo de Streeter – Phelps se asume que las reacciones de
desoxigenación y reaireación son de primer orden, que las velocidades de
reacción son constantes y que el cambio neto en el déficit de oxígeno es función
únicamente de la desoxigenación y de la reaireación atmosférica a través de la
MIC 2003-II-46
50
interfase líquido – gas. Mientras que en muchos casos la cinética de la reacción de
DBO se describe mejor por medio de un modelo de segundo orden, la suposición
de una cinética de primer orden es razonablemente exacta para muchas
corrientes.
Junto a la oxidación bacteriana de la materia orgánica y la reaireación atmosférica
consideradas en el modelo de Streeter – Phelps, numerosos procesos se llevan a
cabo en corrientes naturales. Dobbins (1964) resumió algunos de estos procesos:
1. La reducción de DBO por sedimentación y adsorción.
2. El incremento de DBO debido a la resuspensión de los sedimentos del lecho o
a la difusión de compuestos orgánicos parcialmente descompuestos desde la
capa béntica hacia el cuerpo de agua.
3. El incremento de DBO a lo largo de la corriente debido a la escorrentía
superficial.
4. La remoción de oxígeno del agua por la difusión dentro de la capa béntica para
satisfacer la demanda de oxígeno en la zona aerobia de ésta.
5. La remoción de oxígeno del agua por la acción de los gases que ascienden
desde la capa béntica.
6. La adición de oxígeno por la acción fotosintética del plankton y plantas fijas.
7. La remoción de oxígeno debida a la respiración del plankton y plantas fijas.
MIC 2003-II-46
51
8. La continua redistribución de la DBO y el OD debida a la dispersión
longitudinal.
Frankel y Hansen (1968) establecieron los siguientes factores a ser considerados:
9. La variación de Kd con el tiempo, específicamente durante la aparición de
procesos de nitrificación, en los cuales no es correcto asumir Kd constante
durante largos valores de tiempo de viaje.
10. Cambios en la configuración del canal, que altera las características
turbulentas de la superficie y consecuentemente la velocidad de transferencia
de oxígeno desde la atmósfera.
11. El efecto de sustancias suspendidas y disueltas sobre la velocidad de difusión
de oxigeno desde la superficie hacia el cuerpo principal de la corriente.
12. Variación diaria en el contenido de oxígeno, DBO, temperatura y velocidad de
flujo en las descargas.
Varias modificaciones al modelo de Streeter – Phelps han sido propuestas para
tener en cuenta algunos de estos procesos. Para los propósitos de la presentan
investigación se tendrán en cuenta los efectos debidos a reaireación y las
demandas tanto Béntica como debida a procesos de nitrificación. La ecuación
diferencial que tiene en cuenta estos factores es (Chapra, 1997):
( ) iinoiaaioabdsa NKrNKrAOKLKOOKdtdO
−−−−−= (3.2)
Donde:
MIC 2003-II-46
52
Os es la Concentración de saturación de OD [M L-3],
O Concentración de Oxígeno Disuelto [M L-3],
Kb Coeficiente de demanda béntica de oxígeno [L-2 T-1],
A Área de la sección transversal [L-2]
roa Relación Nitrógeno a Oxígeno para la reacción de Nitrógeno Amoniacal a
Nitrito (3.43 gO/gNa)
Kai Coeficiente de decaimiento de Nitrógeno Amoniacal a Nitritos [T-1]
Na Concentración de Nitrógeno Amoniacal [M L-3]
roi Relación Nitrógeno a Oxígeno para la reacción de Nitrito a Nitrato (1.14
gO/gN)
Kin Coeficiente de decaimiento de Nitrito a Nitrato [T-1]
Ni Concentración de Nitritos [M L-3]
En estuarios, lagunas y ciénagas, la variación en la concentración de oxígeno
disuelto debe incluir el efecto de advección y dispersión. Teniendo en cuenta esto,
la siguiente ecuación describe la distribución espacial del OD en el cuerpo de
agua.
( ) iinoiaaioabdsayx NKrNKrAOKLKOOKdy
OdE
dxOd
EdydO
VdxdO
UdtdO
−−−−−+++−−=22
22
Donde:
U y V Velocidad neta de la corriente en las direcciones x e y [L-1 T],
E Coeficiente de Dispersión (Mezcla Longitudinal) [L2 T-1]
Mediante la discretización por diferencias finitas, la ecuación anterior puede ser
resuelta apropiadamente para cada elemento (m,n) del sistema. A continuación se
(3.3)
MIC 2003-II-46
53
realiza la discretización numérica de cada una de sus componentes multiplicando
previamente por su volumen ( ∀ ).
Comenzando con el término de la izquierda de la ecuación, la derivada con
respecto al tiempo es estimada usando una aproximación de diferencia centrada
evaluada entre el tiempo anterior k-1 y el tiempo k,
( ) ( )t
OO
dtOd k
nmk
nm
∆
∀−∀≈
∀ −1,,
(3.4)
El proceso de discretización del término de la derecha de la Ecuación (3.3) se
realiza utilizando un método explicito, es decir, utilizando los valores de
concentración para el tiempo k-1.
La solución implícita de este término no es viable, ya que en el proceso de
evaluación de la concentración para un nodo (m,n) en el tiempo k, es preciso
conocer las concentraciones de los nodos adyacentes para el mismo tiempo, lo
cual genera un sistema de ecuaciones de difícil solución. Adicionalmente, se
genera un costo computacional muy grande, sin generar un incremento
significativo en la calidad de los resultados, ya que se considera que para los
intervalos de tiempo utilizados, los valores de concentración no varían
significativamente.
Adoptando la misma notación presentada en la Figura 2.1 y resolviendo
explícitamente, la Ecuación (3.3) puede ser escrita tal como se presenta en la
Ecuación (3.5). Las Ecuaciones (3.6) a (3.10) presentan las equivalencias de cada
uno de los términos genéricos que se encuentran en la Ecuación (3.5).
MIC 2003-II-46
54
( ) ( ) ( ) ∑∑∑ −−−−−−−−
∀−−∀−−∀+∆+=∆
∀−∀ 11111111
,, kkno
kb
kkd
kks
ka
kk
kkk
nmk
nm NKrAOKLKOOKOl
EAOQ
tOO
(3.5)
Donde para cualquier sustancia de análisis C, los anteriores términos genéricos están dados por:
14
,1,,
13
,11,1,1
12
,,1,
11
1,1,11,
1
2222−−−−−−
−−−−−−−
−− +
∆−+
∆++
∆−+
∆=∑ kk
nmk
nmknm
kk
nmk
nmknm
kk
nmk
nmknm
kk
nmk
nmknm
kk Chh
xUChh
xUChh
yVChh
yVCQ
(3.6)
( ) ( ) ( ) ( )
−+
∆−−+
∆+−+
∆−−+
∆=∆ −−+
−−−−
−−−−−+
−−−−
−−−−∑ 1,
1,1
,1,1,
1,1
,11,11,
11,
,,11,
11,
1,1,11
2222k
nmk
nm
knm
knmk
nmk
nm
knm
knmk
nmk
nm
knm
knmk
nmk
nm
knm
knmk
k
CChh
xCChh
xCChh
yCChh
ylD
Cl
EA
(3.7)
111 −−− ∀+∀=∀∑ ki
kinoi
ka
kaioa
kkno NKrNKrNKr
(3.8)
+
+++∆∆=∀ −−−−
nm
knm
knm
knm
knmk hyx ,
1,1,11,,
4
ξξξξ
(3.9)
Para nmnm
nmnm
CCV
CCV
,11,
1,11,
,0
,0
=<
=≥
−
−− , 1,2,
,2,
,0
,0
+=<
=≥
nmnm
nmnm
CCV
CCV,
nmnm
nmnm
CCU
CCU
,3,1
,13,1
,0
,0
=<
=≥
−
−− y nmnm
nmnm
CCU
CCU
,14,
,4,
,0
,0
+=<
=≥
(3.10)
Despejando la Ecuación (3.5) para kO se tiene:
( ) ( )k
nm
knm
kkno
kb
kkd
kks
ka
kk
kk
knm
OtNKrAOKLKOOKOl
EAOQ
O,
1,
1111111
, ∀
∀+∆
∀−−∀−−∀+∆+
=
−−−−−−−− ∑∑∑
(3.11)
MIC 2003-II-46
55
Mediante la Ecuación (3.11) es posible determinar la concentración de Oxígeno
Disuelto para el tiempo k, en función de concentraciones establecidas para el
tiempo k-1 y condiciones hidrodinámicas para el tiempo k, las cuales han sido
determinadas previamente para la totalidad de los elementos de la malla.
3.1.2 Demanda Bioquímica de Oxígeno
Para el caso de la D.B.O., un análisis semejante al realizado para Oxígeno
Disuelto, en el que únicamente se considerando la reducción en la concentración
debido a la oxidación bacteriana y a procesos de sedimentación, permite deducir
la Ecuación (3.12), la cual describe la distribución espacial en el cuerpo de agua.
LKLKdy
LdE
dxLd
EdydL
VdxdL
UdtdL
sdyx −−++−−= 22
22
(3.12)
La cual se puede expresar como:
( ) ( ) 11111
,, −−−−−
−∀−∆+=∆
∀−∀∑∑ k
skk
dk
kkk
knm
knm AOKLKL
lEA
LQt
LL (3.13)
Despejando para kL se tiene:
( )k
nm
knm
ks
kkd
kk
kk
knm
LtAOKLKLl
EALQ
L,
1,
1111
, ∀
∀+∆
−∀−∆+
=
−−−−− ∑∑
(3.14)
3.1.3 Nitrógeno Orgánico
Al igual que la D.B.O. Carbonacea, los compuestos nitrogenados afectan la
disponibilidad de oxígeno en los cuerpos de agua. El contenido de nitrógeno en las
aguas residuales (Proteínas y Urea) puede ser hidrolizado hasta amonio mediante
MIC 2003-II-46
56
procesos de amonificación, los cuales se presentan naturalmente. Considerando
una cinética de primer orden para la transformación de Nitrógeno orgánico (No) a
Nitrógeno Amoniacal (Na), la siguiente expresión describe la distribución espacial
del Nitrógeno Orgánico en el cuerpo de agua.
ooao
yo
xooo NK
dyNd
Edx
NdE
dydN
Vdx
dNU
dtdN
−++−−= 22
22
(3.15)
La cual se puede expresar como:
( ) ( )111
1,, −−−−
∀−∆+=∆
∀−∀∑∑ k
ok
oak
o
kk
ok
knmo
knmo NKN
lEA
NQt
NN
(3.16)
Despejando para koN se tiene:
( )k
nm
knmo
ko
koa
ko
kk
ok
knmo
NtNKNl
EANQ
N,
1,
111
, ∀
∀+∆
∀−∆+
=
−−−− ∑∑
(3.17)
3.1.4 Nitrógeno Amoniacal
Bacterias autotróficas son capaces de asimilar el amonio disponible en el agua y
convertirlo a Nitrito ( −2NO ) y Nitrato ( −
3NO ). El proceso de transformación de amonio
a nitrato se denomina nitrificación. Esta puede ser representada por una serie de
reacciones, la primera de ellas, llevada a cabo por una bacteria del genero
Nitrosomona la cual convierte el ión amonio a nitrito,
−+− ++⇒+ 2224 25.1 NOOHHONH (3.18)
Posteriormente, una bacteria del genero Nitrobacter convierte el nitrito a nitrato,
MIC 2003-II-46
57
−− ⇒+ 322 5.0 NOONO (3.19)
El proceso completo requiere de 4,57 g de oxígeno para llevarse a cabo. La
siguiente es la ecuación diferencial que representa el comportamiento del
contenido de Nitrógeno Amoniacal en un cuerpo de agua:
aaiooaa
ya
xaaa NKNK
dyNd
Edx
NdE
dydN
Vdx
dNU
dtdN
−+++−−= 22
22
(3.20)
La cual se puede expresar como:
( ) ( )1111
1,, −−−−−
∀−∀+∆+=∆
∀−∀∑∑ k
ak
aik
ok
oak
a
kk
ak
knma
knma NKNKN
lEA
NQt
NN
(3.21)
Despejando para kaN se tiene:
( )k
nm
knma
ka
kai
ko
koa
ka
kk
ak
knma
NtNKNKNl
EANQ
N,
1,
1111
, ∀
∀+∆
∀−∀+∆+
=
−−−−− ∑∑
(3.22)
3.1.5 Nitritos
La ecuación diferencial que representa el contenido de Nitritos es:
iinaaii
yi
xiii NKNK
dyNd
Edx
NdE
dydN
VdxdN
Udt
dN−+++−−= 22
22
(3.23)
Realizando el mismo procedimiento se obtiene:
( ) ( )1111
1,, −−−−−
∀−∀+∆+=∆
∀−∀∑∑ k
ik
ink
ak
aik
i
kk
ik
knmi
knmi NKNKN
lEA
NQt
NN
(3.24)
Despejando para kiN se tiene:
MIC 2003-II-46
58
( )k
nm
knmi
ki
kin
ka
kai
ki
kk
ik
knmi
NtNKNKNl
EANQ
N,
1,
1111
, ∀
∀+∆
∀−∀+∆+
=
−−−−− ∑∑
(3.25)
3.1.6 Nitratos
La ecuación diferencial que representa el contenido de Nitratos es:
iinn
yn
xnnn NK
dyNdE
dxNdE
dydNV
dxdNU
dtdN +++−−= 22
22
(3.26)
De igual forma para el caso de nitritos se obtiene:
( ) ( )111
1,, −−−−
∀+∆+=∆
∀−∀∑∑ k
ik
ink
n
kk
nk
knmn
knmn NKN
lEA
NQt
NN
(3.27)
Despejando para kiN se tiene:
( )k
nm
knmi
ki
kin
ki
kk
ik
knmi
NtNKNl
EANQ
N,
1,
111
, ∀
∀+∆
∀+∆+
=
−−−− ∑∑
(3.28)
Donde los subíndices o, a, i y n representan las diferentes especies del nitrógeno,
a saber Orgánico, Amoniacal, Nitrito y Nitrato respectivamente.
3.1.7 Sustancia Conservativa (Salinidad)
Utilizando el mismo planteamiento realizado para sustancias no conservativas,
pero eliminando los componentes de decaimiento y formación se obtienen
expresiones semejantes para el caso de la salinidad (S):
22
22
dySd
Edx
SdE
dydS
VdxdS
UdtdS
yx ++−−=
(3.29)
La cual se puede expresar como:
MIC 2003-II-46
59
( ) ( ) 111
,, −−−
∆+=∆
∀−∀∑∑ k
kkk
knm
knm S
lEA
SQt
SS (3.30)
Despejando para kS se tiene:
( )k
nm
knm
kk
kk
knm
StSl
EASQ
S,
1,
11
, ∀
∀+∆
∆+
=
−−− ∑∑
(3.31)
3.2 ACOPLE DE LOS MODELOS HIDRODINÁMICO Y DE CALIDAD
Generalmente, las variaciones en las condiciones de flujo del agua tienen un
impacto muy grande en la calidad de ésta. Por el contrario, para la mayoría de
los casos la calidad del agua no afecta significativamente las condiciones de
flujo. Por ejemplo, la variación en la densidad causada por cambios en la
calidad del agua generalmente son insignificantes en comparación con otros
términos en la ecuación de momentum.
Esta condición permite separar las predicciones del comportamiento
hidrodinámico y de calidad de agua. Para la mayoría de los casos es posible
simular inicialmente la hidráulica o la hidrodinámica y luego los resultados
obtenidos utilizarlos en las simulaciones de calidad del agua.
El acople de los modelos hidrodinámico y de calidad se puede ilustrar
reescribiendo la ecuación que representa la concentración de la D.B.O. en el
cuerpo de agua
( )k
nm
knm
ks
kkd
kk
kk
knm
LtAOKLKLl
EALQ
L,
1,
1111
, ∀
∀+∆
−∀−∆+
=
−−−−− ∑∑
(3.14)
MIC 2003-II-46
60
Para resolver esta ecuación, es preciso conocer las condiciones
hidrodinámicas del nodo (n,m) en el tiempo k y la concentración de éste y los
nodos adyacentes en el tiempo (k-1). La Figura 3.1 ilustra el procedimiento de
cálculo para la determinación de las variables hidrodinámicas (profundidad y
velocidades) y de calidad (Demanda Bioquímica de Oxigeno, Nitrógeno y
Salinidad).
Figura 3.1: Acople modelos Hidrodinámico y de Calidad
Dato de Profundidad h
Cálculo de Nivel ?
Cálculo de Velocidad V
Cálculo de Velocidad U
Cálculo de Calidad
TABLA DE CONVENCIONES
k
k+1
k-1
Evaluación Hidrodinámica
Evaluación Calida de Agua
t
MIC 2003-II-46
61
4 IMPLEMENTACIÓN DEL MODELO
En el presente capítulo se presentan el alcance y las limitaciones del modelo
hidrodinámico y de calidad implementado en el computador. Se hace una
descripción general del programa, de los procedimientos y variables principales y
de los archivos de entrada y salida requeridos para la operación del mismo. El
Numeral 4.4 contiene el manual de usuario del programa y en el Anexo A se
presenta el código de computador.
4.1 DESCRIPCIÓN GENERAL DEL PROGRAMA
4.1.1 Alcance y Limitaciones
El programa de computador implementado es una versión adaptada y en parte
transformada del programa hidrodinámico y de transporte de contaminantes
desarrollado por Hugo Fischer (1981) con el modelo matemático de Leendertsee
(1967).
El programa es aplicable para cualquier estuario de poca profundidad en donde es
válido el modelo matemático presentado en los capítulos anteriores. La geometría
del estuario y las fronteras se describen en el archivo de datos mediante códigos,
por lo cual, no se requiere modificar el programa para ser aplicado a otras
ciénagas.
MIC 2003-II-46
62
Se ha verificado el correcto funcionamiento del programa. Se considera que el
método numérico de solución es muy estable y el proceso de cálculo es eficiente.
No se ha limitado el número y localización de fronteras de marea y fronteras de
caudal. El usuario puede cambiar rápidamente la geometría del estuario, agregar o
quitar fronteras de marea y/o caudal fácilmente y hacer el tipo de simulación que
desee.
El modelo sirve para modelar el efecto del viento en la hidrodinámica de las
corrientes. Se puede considerar un coeficiente de arrastre de viento variable en el
tiempo en toda la malla de diferencias finitas. En algunos casos de estuarios
grandes se requiere variar espacialmente este coeficiente en la malla ya que el
viento puede no actuar uniformemente. El programa está limitado al respecto
actualmente y se requiere de programación adicional para su modificación.
El coeficiente de rugosidad del fondo puede considerarse variable espacialmente
en cada celda de la malla de diferencias finitas. Esto permite considerar al usuario
zonas de diferente rugosidad en el estuario debidas a materiales de fondo
diferentes.
En general el programa es manejable y se ha elaborado un sistema de archivos
flexible, sin formatos especiales complicados. Junto al programa hidrodinámico y
de calidad, se ha elaborado un programa de ayudas gráficas, que permiten
presentar los resultados en tres dimensiones y visualizar el comportamiento
temporal de los diferentes parámetros de análisis.
MIC 2003-II-46
63
4.1.2 Equipo
El programa se desarrolló y ejecutó en un Computador Portátil Compaq Presario
720 LA con procesador Mobile AMD Duron de 1.1 GHz y 112 MB de memoria
RAM. El programa puede ser ejecutado fácilmente en computadores de escritorio
con características semejantes, sin embargo, la utilización del modelo se restringe
a mallas de diferencias finitas inferiores a 500 x 500 nodos, debido al alto tiempo
requerido para el procesamiento matemático de la totalidad de los parámetros,
que puede superar las 72 horas de modelación.
Para la presentación de los resultados en forma gráfica, adicionalmente se
requiere tener instalado el programa MATLAB, que es la plataforma bajo la cual se
ejecutan las rutinas de visualización en 3D.
4.1.3 Lenguaje y estructura
El programa está escrito en lenguaje FORTRAN y se ha estructurado por módulos
o subrutinas cortas. El programa no es interactivo, todas las entradas y salidas se
hacen a través de archivos tipo texto ya que se requiere de la ejecución continua
del mismo y el alto volumen de datos tanto de entrada como de salida, dificulta su
manejo e interpretación. La estructura general del programa puede verse en la
Figura 4.1.
MIC 2003-II-46
64
Figura 4.1: Estructura General del Programa
4.2 PROGRAMA PRINCIPAL
El funcionamiento del programa principal se puede resumir como sigue:
• inicialización
• lectura de los datos a partir de los archivos creados con anterioridad a la
ejecución del programa
• ciclo de cálculos matemáticos del primer intervalo de tiempo al último intervalo,
e impresión de resultados a archivos en iteraciones específicas determinadas
por el usuario
• finalización
NOMBRE DEL PROGRAMA
DECLARACIÓN DE VARIABLESReal, Entero, Caracter, Doble
DECLARACIÓN DE CONSTANTES
PROGRAMA PRINCIPAL
ARCHIVOS DE DATOSEntrada.txt,, SusCon.txt,DatDBO.txt , DatNO.txt,
DatNA.txt, DatNI.txt, DatNN.txt, DatOD.txt,
SUBRUTINASAberturaarch, Lea,
Codigos, Leacalidad,Imprimadat, Imprimares,
Imprimaest , Datosit,Fronteras, Escriba,
Direccion, Defparameter
ARCHIVOS RESULTADOSDatos4, Velx4,Vely4, Nivel4
Salinidad4.txt, DBO4.txt,NitOrg4.txt, NitNH4.txtNitrito4.txt, Nitrato4.txt,
OxiDis4.txt
MIC 2003-II-46
65
El macro-algoritmo del programa principal del modelo hidrodinámico y de calidad
se presenta en la Figura 4.2 en la cual se han incluido los procedimientos
principales.
Figura 4.2: Macro-algoritmo Programa principal
DECLARACIÓN DE VARIABLESReal, Entero, Caracter, Doble
DECLARACIÓN DE CONSTANTES
LECTURA DE DATOS CALIDADSusCon.txt,DatDBO.txt, DatNO.txt,
DatNA.txt, DatNI.txt, DatNN.txt, DatOD.txt
DESEA MODELARCALIDAD?
Calidad =Y/N
LECTURA DE DATOS HIDRODINÁMICO
Entrada.txt
ITERACIÓN = 1
N Y
PROCEDIMIENTO DE CALCULOHIDRODINÁMICO
ITERACIÓN= # MAX
ITERACIONES
CERRAR ARCHIVOSF I N
N Y
Calidad = YPROCEDIMIENTO
DE CALCULO PARA CALIDAD
Y
N
Calidad = YIMPRIMA
Datos4, Velx4, Vely4, NivelN
Y
SE IMPRIMEN RESULTADOS
EN ESTA ITERACIÓN?
N Y
ITERACIÓN = ITERACIÓN + 1
IMPRIMASalinidad4.txt, DBO4.txt,
NitOrg4.txt, NitNH4.txtNitrito4.txt, Nitrato4.txt,
OxiDis4.txt
MIC 2003-II-46
66
4.3 PROCEDIMIENTOS PRINCIPALES
A continuación se hace una descripción general de los procedimientos más
importantes del modelo bidimensional hidrodinámico y de calidad.
• Aberturaarch: en este procedimiento se abren el archivo de datos (Entrada.txt,,
SusCon.txt, DatDBO.txt, DatNO.txt, DatNA.txt, DatNI.txt, DatNN.txt, DatOD.txt )
y los archivos de resultados (Datos4, Velx4, Vely4, Nivel4, Salinidad4.txt,
DBO4.txt, NitOrg4.txt, NitNH4.txt , Nitrito4.txt, Nitrato4.txt, OxiDis4.txt) Estos
archivos constituyen la entrada y salida del programa y se describen
detalladamente más adelante.
• Lea: se leen todos los datos requeridos para la ejecución del programa del
archivo de datos tipo texto.
• Inicialicebot: en el procedimiento se inicializan todas las variables y constantes
requeridas por el procedimiento matemático "Botony".
• Datosit: se leen o determinan por interpolación los datos variables de cada
iteración. Estos datos son los valores del nivel de la marea y la velocidad en las
fronteras respectivas y el esfuerzo cortante del viento en toda la malla. El
usuario puede utilizar si lo desea una ecuación para representar la marea. En
este caso mediante los procedimientos Tiempo y Ecuación se determina el
valor del nivel en la iteración correspondiente. Otra opción es especificar
directamente los valores de la marea en el tiempo en el archivo de datos.
MIC 2003-II-46
67
• Tiempo: se determina el tiempo de modelación en horas correspondiente a la
n-ésima iteración.
• Ecuación:se determina mediante una ecuación, cuyos parámetros son algunas
constantes y el tiempo en horas, el nivel de la marea correspondiente.
• Fronteras: se asignan los valores de marea y velocidad determinados en el
procedimiento Datosit en las fronteras respectivas.
• Botony: el procedimiento consiste en la solución matemática del sistema de
ecuaciones en diferencias finitas descrito en los numerales 2.4.3 y 3.2. En la
Figura 4.2 puede verse el macro-algoritmo del procedimiento. Como resultado
del procedimiento se obtienen las matrices sep, up y vp que contienen
respectivamente, el nivel y la velocidad en las dos direcciones x e y en todos
los nodos de la malla de diferencias finitas. Con relación a calidad se obtienen
las matrices salp, dbop, nop, namop, nitrip, nitrap y OxiDisp que almacenan la
información de Salinidad, Demanda Bioquímica de Oxígeno, Nitrógeno
Orgánico, Nitrógeno Amoniacal, Nitritos, Nitratos y Oxigeno Disuelto.
• Imprimares: se imprimen en archivos las matrices sep, up y vp a algunas
iteraciones específicas, con el fin de obtener salidas gráficas de curvas de igual
nivel y vectores de velocidad.
• Imprimaest: se imprime a archivos, a nivel horario, el nivel y la velocidad de la
corriente de algunos nodos fijos o estaciones de interés para el usuario.
MIC 2003-II-46
68
• Defparameter: calcula variables temporales de los parámetros de
concentración para cada uno de los contaminantes evaluados.
4.4 MANUAL DEL USUARIO
A continuación se describe los procedimientos básicos para la instalación y
operación del Modelo Bidimensional Hidrodinámico y de Calidad para
cuerpos de Agua poco Profundos.
4.4.1 Instalación Sugerida
Como ya se mencionó anteriormente, la instalación y ejecución del programa de
modelación no exige requerimientos especiales de hardware o software, por lo
cual éste puede ser ejecutado desde cualquier computador de escritorio.
Para instalar el programa para modelación hidrodinámica y de calidad de cuerpos
de agua poco profundos, el usuario debe crear una carpeta con el nombre del
cuerpo de agua a modelar. En esta carpeta, se deben crear o copiar los siguientes
archivos, que forman parte integral del programa y son fundamentales para su
ejecución:
1. Anubis.exe
2. Entrada.txt
3. SusCon.txt :
4. DatDBO.txt
5. DatNO.txt
6. DatNA.txt
7. DatNI.txt
8. DatNN.txt
9. DatOD.txt
10. Datos4
11. Velx4
12. Vely4
13. Nivel4
14. Salinidad4.txt
15. DBO4.txt
16. NitOrg4.txt
17. NitNH4.txt
18. Nitrito4.txt
19. Nitrato4.txt
20. OxiDis4.txt .
El programa de visualización de resultados es una rutina elaborado en lenguaje
Matlab, por lo cual el usuario debe instalar previamente este programa. Los
MIC 2003-II-46
69
archivos en lenguaje Matlab que permiten la representación gráfica de los
resultados de la modelación son los siguientes, los cuales deben ser copiados en
esta misma carpeta:
21. Mvinit.m 22. Movie3d.m 23. Lecdatos.m
Adicionalmente, el usuario debe iniciar el programa Matlab y establecer la carpeta
que contiene la totalidad de los archivos como directorio actual.
4.4.2 Arquitectura
A continuación se presenta la forma como el usuario debe crear los archivos de
entrada para el modelo, la ejecución del principal y la forma en que éste genera
los archivos de salida.
4.4.2.1 Archivos de entrada
Los archivos de datos son de tipo texto, esto quiere decir que pueden ser creados
y modificados mediante cualquier procesador de palabras o editor de texto. Los
datos se teclean por registros o renglones con un formato preestablecido, el cual
debe ser conservado. En caso contrario, el programa generará errores durante su
ejecución.
El archivo Entrada.txt contiene la totalidad de la información relacionada con la
hidrodinámica del cuerpo de agua, en este archivo se definen el tipo de fronteras y
el número de ellas, las condiciones iniciales y el tiempo de modelación. Para el
diseño de este archivo de datos, se utilizó la misma descripción dada por CIFI-
COLCIENCIAS (1991) a cada una de las variables de entrada. En la Figura 4.3 se
MIC 2003-II-46
70
muestra un ejemplo de este archivo y la forma como se alimentan al programa
algunas de las variables.
Figura 4.3: Archivo de datos Entrada.txt
Para el modelamiento de la calidad del cuerpo de agua, se dispone de un archivo
de entrada para cada uno de los contaminantes. En este archivo se especifica la
concentración inicial de la masa de agua, la concentración de las diferentes
fronteras en función del tiempo y los coeficientes de difusión y decaimiento en los
casos que se requiera. En la Tabla 4.1 se indica a que tipo de contaminante
corresponde cada uno de los archivos de entrada, cuya estructura de entrada de
datos es muy semejante. En la Figura 4.4 se presenta el modelo de los archivos
de entrada para calidad del agua.
MIC 2003-II-46
71
Tabla 4.1: Archivos de entrada para calidad del agua
PARÁMETRO ARCHIVO
Salinidad SusCon.txt:
Demanda bioquímica de Oxigeno DatDBO.txt
Nitrógeno Orgánico DatNO.txt
Nitrógeno Amoniacal DatNA.txt
Nitritos DatNI.txt
Nitratos DatNN.txt
Oxigeno Disuelto DatOD.txt
Figura 4.4: Estructura de entrada datos de calidad
4.4.2.2 Ejecución del Programa principal “Anubis.exe”
Una el usuario haya generado en forma correcta los archivos de datos de entrada
del modelo, se inicia la ejecución del programa principal Anubis.exe el cual, si no
se encuentran errores, comienza el procesamiento matemático continuando
ininterrumpidamente hasta la última iteración. El usuario ve permanentemente en
pantalla la iteración en que se encuentra la ejecución. En la Figura 4.5 se muestra
en ejecución el programa ANubis.exe, el cual fue desarrollado en lenguaje Fortran.
MIC 2003-II-46
72
Figura 4.5: Ejecución programa principal, Anubis.exe
4.4.2.3 Archivos de salida
Una vez se ha finalizado satisfactoriamente la ejecución del programa, en la
carpeta del usuario se encuentran los archivos planos que contienen los
resultados de la modelación. En la Tabla 4.2 se indica que tipo de información
almacena cada uno de estos archivos. Se imprimen datos a intervalos de tiempo
preestablecido por el usuario. Los resultados se presentan en filas de máximo 60
columnas, los cuales van separados por el valor del tiempo, en horas,
transcurridos desde el inicio de la modelación. La Figura 4.6 muestra un archivo
MIC 2003-II-46
73
tipo de impresión de resultados, en el cual se muestra el tiempo de impresión de
resultado.
Tabla 4.2: Archivos de salida modelo bidimensional
PARÁMETRO ARCHIVO
Profundidad Nivel4.txt:
Velocidad en la dirección Norte-Sur Vely4.txt
Velocidad en la dirección Occidente-Oriente Velx4.txt
Salinidad Salinidada4.txt
Demanda bioquímica de Oxigeno DBO4.txt
Nitrógeno Orgánico NitOrg4.txt
Nitrógeno Amoniacal NitNHA.txt
Nitritos Nitrito4.txt
Nitratos Nitrato4.txt
Oxigeno Disuelto OxiDis4.txt
Figura 4.6: Modelo de archivo tipo de salida “DBO4”
MIC 2003-II-46
74
4.4.2.4 Presentación gráfica de resultados
Para la visualización de los resultados es preciso ejecutar dos rutinas
independientes desde el programa Matlab. La primera de ellas “Lecdatos.m”
recoge la información almacenada en los archivos de salida tipo texto y los
almacena como en forma matricial en un archivo denominado “Datos.mat”. El
programa “Movie3d.m” presenta gráficamente la información almacenada en este
archivo. La Figura 4.7 muestra la presentación de los resultados mediante el
programa Matlab y la forma de establecer el directorio en el cual se realizó la
modelación.
Figura 4.7: Visualización de resultados mediante Matlab
MIC 2003-II-46
75
4.4.2.5 Códigos fuentes
En el Anexo A se presentan los códigos del programa principal “Anubis.exe”. Los
Anexos B y C presentan las rutinas de Matlab para la visualización de los
resultados “Lecdatos.m” y “Movie3d.m”
MIC 2003-II-46
76
5 VERIFICACIÓN SINTÉTICA DEL MODELO ACOPLADO)
En este capítulo se hace la verificación sintética del modelo acoplado, la cual es
un procedimiento fundamental en el protocolo de desarrollo del modelo (Ver Figura
1.1), que permite comprobar la programación del mismo y decidir si los resultados
obtenidos a partir de éste, son una representación de la realidad que se esta
modelando. En este punto, es fundamental la utilización de soluciones analíticas
del problema.
El primer paso para la verificación del programa, consiste en aplicar el modelo a
un caso en donde las ecuaciones diferenciales que representan el problema sean
fácilmente resueltas matemáticamente y de esta forma, el resultado obtenido se
compara con los resultados arrojados por el modelo. Para las condiciones del
modelo desarrollado, se considera que el mejor caso de estudio es el de un
cuerpo de agua cuyas condiciones de flujo sean muy semejantes a las
condiciones de flujo sin dispersión.
Caso de flujo a Pistón
En condiciones ideales, el flujo a pistón se caracteriza porque el flujo de fluidos a
través de él es ordenado, sin que ningún elemento del mismo sobrepase o se
mezcle con cualquier otro elemento situado antes o después de aquel. En
realidad, en este reactor puede haber mezcla lateral de fluido, pero nunca ha de
MIC 2003-II-46
77
existir mezcla o difusión a lo largo de la trayectoria de flujo bajo condiciones de
flujo uniforme. La condición necesaria y suficiente para que exista flujo a pistón es
que el tiempo de residencia en el reactor sea el mismo para todos los elementos
del fluido y el flujo sea uniforme.
Teniendo en cuenta esto y con el fin de simular las condiciones de flujo
establecidas para un reactor de tipo pistón, se alimentó al programa de
computador un esquema tal como se presenta en la Figura 5.1.
Figura 5.1: Vista en planta del esquema para Flujo Pistón
Este esquema esta constituido por una malla de 20 x 200 elementos, con lo que
se pretende evitar la mezcla a lo largo de la trayectoria de flujo. Las dimensiones
de cada una de las celdas se presentan en la Figura 5.2.
Figura 5.2: Detalle esquema para Flujo a pistón
2000 m
20.000 m
A A’
B’
B
100 m
100 m
h = 0.5 m
? ˜ 1.0 m
MIC 2003-II-46
78
En la Tabla 5.1 se presentan los datos de entrada para la evaluación de las
condiciones tanto hidrodinámicas como de calidad para el esquema de flujo a
pistón.
Tabla 5.1: Datos de entrada esquema de Flujo a pistón
PARÁMETRO VARIABLE UNIDADES VALOR
Tiempo de cada iteración dt Segundos 1.0
Tamaño de la Celda dx Metros 100.0
Tiempo al que inicia modelación itime Segundos 1.0
Número de iteraciones maxtime 72000
Número de meses durante la modelación nmes Mes 1
Número de impresi ones de los datos numres 100
Número de Columnas de la configuración ncol 200
Número de filas de la Configuración mfil 20
Número de fronteras de marea por columnas nfrmcol 0
Número de fronteras de marea por filas nfrmfil 0
Número de fronteras de caudal por columnas nfrqcol 2
Número de fronteras de caudal por filas nfrqfil 0
Nombre de la Corrida Id Pistón
Tipo de entrada de datos de nivel de la malla nivinicial 0
Nivel inicial de toda la malla SE seinv Metros 1.0
Profundidad H de la malla H Metros 0.5
Coeficiente de Rugosidad C de Chezy C 125
Número de ríos numrios 2
Velocidad Río 1 caud(1) M/s 0.29
Velocidad Río 2 caud(2) M/s 0.31
Número de Estaciones para impresión nest 0
Bajo las condiciones presentadas en la Tabla 5.1 se realizaron dos tipos de
modelación. La primera cuando se aplica una carga contaminante mediante un
pulso, con una duración aproximada de 30 minutos y la última, cuando la
contaminación se incrementa repentinamente y se mantiene constante en el
tiempo (Escalón).
MIC 2003-II-46
79
5.1 RESULTADOS PARA UN PULSO DE CONTAMINACIÓN
Se alimentó al programa un pulso de contaminación con una duración de 33
minutos, periodo luego del cual se regresó a las condiciones previas al evento de
contaminación. Los contaminantes incluidos en la corriente fueron Demanda
Bioquímica de Oxígeno, Nitrógeno Orgánico y Salinidad. Durante la modelación se
analizó el comportamiento de éstos contaminantes y se verificó la formación de
sustancias como Nitrógeno Amoniacal, Nitritos y Nitratos.
En la Tabla 5.2 se resumen las condiciones en la corriente de entrada de cada uno
de los contaminantes antes, durante y después de pulso de contaminación.
Tabla 5.2: Datos de entrada Pulso de contaminación (mg/L)
PARÁMETRO INICIAL PULSO FINAL Kd (s-1)
SALINIDAD 1.0 9.0 1.0 0.0
DEMANDA BIOQUÍMICA DE OXÍGENO 2.0 25.0 2.0 2.89x10-5
NITRÓGENO ORGÁNICO 1.0 15.0 1.0 3.30 x10-5
NITRÓGENO AMONIACAL 0.0 0.0 0.0 2.30 x10-5
NITRITOS 0.0 0.0 0.0 5.80 x10-5
NITRATOS 0.0 0.0 0.0 0.0
En la Figura 5.3 se presentan los resultados de la modelación para los diferentes
contaminantes en los tiempos t = 1.0 hora, t = 5.0 horas, t = 10.0 horas y t = 16.0
horas. La Figura 5.4 presenta los resultados para t = 19.8 horas, cuando el pulso
ha superado casi la totalidad del cuerpo de agua. Los resultados mostrados
representan un corte longitudinal en el centro del canal (Corte A-A’, Figura 5.1).
MIC 2003-II-46
80
Figura 5.3: Resultados pulso de contaminación
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 1 Horas
0.25
0.3
0.35V
eloc
idad
(m/s
)
0
5
Sal
inid
ad (m
g/L)
0
5
DB
O (m
g/L)
0
5
Nit.
Org
. (m
g/L)
0
1
2
Nit.
NH
4 (m
g/L)
0
0.5
1
Nitr
itos
(mg/
L)
20 40 60 80 100 120 140 160 1800
0.5
1
Nitr
atos
(mg/
L)
Distancia en Metros x 10E+2
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 5 Horas
0.25
0.3
0.35
Vel
ocid
ad (m
/s)
0
5
Sal
inid
ad (m
g/L)
0
5
DB
O (m
g/L)
0
5
Nit.
Org
. (m
g/L)
0
1
2
Nit.
NH
4 (m
g/L)
0
0.5
1
Nitr
itos
(mg/
L)
20 4 0 60 80 100 120 140 160 1800
0.5
1
Nitr
atos
(mg/
L)
Distancia en Metros x 10E+2
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 10 Horas
0.25
0.3
0.35
Vel
ocid
ad (m
/s)
0
5
Sal
inid
ad (m
g/L)
0
5
DB
O (m
g/L)
0
5
Nit.
Org
. (m
g/L)
0
1
2
Nit.
NH
4 (m
g/L)
0
0.5
1
Nitr
itos
(mg/
L)
20 40 60 80 100 120 140 160 1800
0.5
1
Nitr
atos
(mg/
L)
Distancia en Metros x 10E+2
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 16 Horas
0.25
0.3
0.35
Vel
ocid
ad (m
/s)
0
5
Sal
inid
ad (m
g/L)
0
5
DB
O (m
g/L)
0
5
Nit.
Org
. (m
g/L)
0
1
2N
it. N
H4
(mg/
L)
0
0.5
1
Nitr
itos
(mg/
L)
20 4 0 60 80 100 120 140 160 1800
0.5
1
Nitr
atos
(mg/
L)
Distancia en Metros x 10E+2
MIC 2003-II-46
81
Figura 5.4: Resultados pulso de contaminación t = 19.8 horas
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 19.8 Horas
0.25
0.3
0.35
Vel
ocid
ad (
m/s
)
0
5S
alin
idad
(mg/
L)
0
5
DB
O (m
g/L)
0
5
Nit.
Org
. (m
g/L)
0
1
2
Nit.
NH
4 (m
g/L)
0
0.5
1
Nitr
itos
(mg/
L)
20 40 60 80 100 120 140 160 1800
0.5
1
Nitr
atos
(mg/
L)
Distancia en Metros x 10E+2
MIC 2003-II-46
82
En la Figura 5.3 se observa como el pulso de concentración se amortigua
lentamente a medida que éste transita a lo largo del canal. Una explicación de
esto es la condición de flujo no uniforme (velocidad variable) establecida en el
ejercicio de modelación, lo que genera gradientes longitudinales de velocidad y
por consiguiente dispersión de los contaminantes.
En la Figura 5.5 se presenta el perfil transversal de cada uno de los contaminantes
(Corte B – B’, Figura 5.1) para un tiempo de modelación de 6.6 horas. Como se
puede observar, el modelo predice una leve disminución de los diferentes
parámetros en las paredes del canal. El perfil de velocidad mostrado corresponde
a la dirección del flujo. No se presenta perfil de velocidad en la dirección
perpendicular al flujo, ya que las velocidades en este sentido son iguales a cero
(0.0) para todos los nodos del canal.
0,0
0,5
1,0
1,5
2,0
2,5
3,0
3,5
4,0
4,5
5,0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Ancho del Canal (x10E2 m)
Co
nce
ntr
ació
n (
mg
/L)
Nivel (m) Velocidad (m/s) Salinidad DBO Nit, Org Nit NH4 Nitrito Nitrato
Figura 5.5: Perfil transversal de concentración, t = 6.6 horas
MIC 2003-II-46
83
A continuación se presentan las ecuaciones diferenciales que representan el
decaimiento para las sustancias no conservativas para un reactor de flujo pistón:
5.1.1 Salinidad
Con relación a este parámetro, a simple vista se puede decir que hay
conservación del mismo, ya que tal como se observa en la Figura 5.3 y en la
Figura 5.4, luego del evento de contaminación la concentración regresa a su valor
inicial, es decir la concentración de la corriente de entrada.
5.1.2 Demanda Bioquímica de Oxigeno
La ecuación diferencial que representa la concentración de este contaminante a lo
largo del canal es:
LKdtdL
d∀−=∀ (5.1)
Si la concentración en la corriente de entrada es L0 y se consideran condiciones
ideales de flujo sin difusión ni mezcla lateral a lo largo del canal, esta ecuación se
puede resolver como:
tKdeLL −= 0 (5.2)
Para los propósitos prácticos de la presente investigación, y dado que lo que se
pretende es determinar el grado de similitud de los resultados obtenidos a partir
del modelo con lo obtenido mediante la solución de las ecuaciones diferenciales
que representan el sistema, se considera que las condiciones del modelo son de
flujo pistón ideal, y por consiguiente el tiempo de residencia se calcula a partir de
los datos de velocidad alimentados al modelo . Esto se realiza entre otras razones
MIC 2003-II-46
84
porque la condición hidrodinámica de flujo no uniforme impuesta dificulta en gran
medida la solución analítica completa.
Por lo tanto, según la ecuación vxt = y dado que se consideró una velocidad
promedio de 0.3 m/s (Figura 5.4), el perfil de la D.B.O. a lo largo del cuerpo de
agua se puede representar como:
( ) ( )3.0
1089.20
5
2x
vxK
eeLL d−×−−
×== (5.3)
La Ecuación (5.3) representa el comportamiento ideal para la Demanda
Bioquímica de Oxígeno en un reactor de flujo pistón bajo condiciones semejantes
a las alimentadas al modelo. En la Figura 5.6 se presenta comparativamente los
resultados del modelo junto a los valores obtenidos mediante la Ecuación (5.3)
para un tiempo de modelación de 20 horas desde la aplicación del contaminante.
0,00
0,50
1,00
1,50
2,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
DB
O (m
g/L
)
Modelo Ecuación
Figura 5.6: Resultados del modelo Vs la solución analítica para DBO (t=20h)
Como se puede observar en la Figura 5.6, el modelo para las condiciones de flujo
pistón representa adecuadamente el comportamiento ideal, lo cual indica que el
programa de computador representa este tipo de procesos, tanto en la parte
hidrodinámica, como en calidad, como es el caso de la D.B.O. El incremento en la
MIC 2003-II-46
85
concentración en el último sector de la corriente de agua corresponde a la cola
remanente del pulso de contaminación alimentado al modelo.
A continuación se presentan las ecuaciones diferencial que representan el
comportamiento del Nitrógeno es sus diferentes especies a lo largo del canal.
5.1.3 Nitrógeno Orgánico
ooao NK
dtdN
∀−=∀ (5.4)
Si la concentración de entrada es No0, esta ecuación se puede resolver como:
tKoo
oaeNN −= 0 (5.5)
Utilizando la misma metodología que en el numeral anterior se tiene:
( ) ( )3.01030.30
5
1x
vxK
oo eeNN d−×−−
×== (5.6)
En la Figura 5.7 se presenta comparativamente los resultados del modelo junto a
los valores obtenidos mediante la Ecuación (5.6) para un tiempo de modelación de
20 horas desde la aplicación del contaminante.
0,00
0,50
1,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NO
(m
g/L
)
Modelo Ecuación
Figura 5.7: Resultados del modelo Vs la solución analítica para NO (t=20h)
MIC 2003-II-46
86
Nuevamente observamos un alto grado de similitud de los resultados obtenidos
por ambos métodos.
5.1.4 Nitrógeno Amoniacal
aaiooaa NKNK
dtdN
∀−∀+=∀ (5.7)
Si la concentración en la corriente de entrada es Na0, esta ecuación se puede
resolver como:
( )tktk
oaai
ooatKaa
a ioaa i eekk
NkeNN −−− −
−+= 0
0 (5.8)
Reemplazando por los valores de la Tabla 5.2 se tiene:
( ) ( )
−
×−×××
=−− ×−×−
−−
−3.0103.23.0103.3
55
5 55
103.3103.21103.3 xx
a eeN (5.9)
En la Figura 5.8 se presenta comparativamente los resultados del modelo junto a
los valores obtenidos mediante la Ecuación (5.9) para un tiempo de modelación de
20 horas desde la aplicación del contaminante.
0,00
0,50
1,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NA
(m
g/L
)
Modelo Ecuación
Figura 5.8: Resultados del modelo Vs la solución analítica para NA (t=20h)
MIC 2003-II-46
87
5.1.5 Nitritos
iinaaii NKNK
dtdN
∀−∀+=∀ (5.10)
La solución para esta ecuación es:
( )
−−
−−−
−+−
−=
−−−−−−
aiin
tktk
oain
tktk
oaai
ooaaitktk
aiin
aaii kk
eekkee
kkNkk
eekk
NkN
ina iinoaina i 00
(5.11)
Reemplazando por los valores de la Tabla 5.2 se tiene:
( ) ( ) ( ) ( )
×−×−
−×−×
−×−×
××××= −−
×−×−
−−
×−×−
−−
−−−−−−
55
3.0108.53.0103.2
55
3.0108.53.0103.3
55
55
103.2108.5103.3108.5103.3103.21103.3103.2
5555 vvvv
ieeee
N (5.12)
En la Figura 5.9 se presenta comparativamente los resultados del modelo junto a
los valores obtenidos mediante la Ecuación (5.12) para un tiempo de modelación
de 20 horas desde la aplicación del contaminante.
0,00
0,25
0,50
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NI (
mg
/L)
Modelo Ecuación
Figura 5.9: Resultados del modelo Vs la solución analítica para NI (t=20h)
5.1.6 Nitratos
iinn NK
dtdN
∀+=∀ (5.13)
Resolviendo se tiene:
MIC 2003-II-46
88
( ) ( )
−−
−−−
−−−
−−−
−−−−+=
−−−−−−−−−−
aiin
tktk
oain
tktk
oaai
ooaaitktk
aiin
aaitktk
oaai
ooatka
tkoaon kk
eekkee
kkNkk
eekk
Nkee
kkNk
eNeNNNNinaiinoa
inaiaioaaioa 0000000
Reemplazando por los valores de la Tabla 5.2 se tiene:
( ) ( ) ( ) ( ) ( ) ( ) ( )
×−×−
−×−×
−×−×
××××−
−
×−×××
−−=−−
×−×−
−−
×−×−
−−
−−×−×−
−−
−×−
−−−−
−−−
55
3.0108.53.0103.2
55
3.0108.53.0103.3
55
553.0103.23.0103.3
55
53.0103.3
103.2108.5103.3108.5103.3103.21103.3103.2
103.3103.21103.3
115555
555vvvv
xxv
a
eeeeeeeN
En la Figura 5.10 se presenta comparativamente los resultados del modelo junto a
los valores obtenidos mediante la Ecuación (5.15) para un tiempo de modelación
de 20 horas desde la aplicación del contaminante.
0,00
0,50
1,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NN
(mg
/L)
Modelo Ecuación
Figura 5.10: Resultados del modelo Vs la solución analítica para NN (t=20h)
Del análisis de la Figura 5.6 hasta la Figura 5.10 se puede concluir que el modelo
representa en forma correcta el comportamiento hidrodinámico y de calidad para
los diferentes contaminantes para una configuración de flujo a pistón cuando en la
corriente de entrada se alimenta un pulso de contaminación. Se observa una leve
desviación en la parte final de las curvas, lo cual puede se explicado por un
remanente del pulso de contaminación, que aún no ha transitado totalmente el
canal.
(5.14)
(5.15)
MIC 2003-II-46
89
5.2 RESULTADOS PARA UN ESCALÓN DE CONTAMINANTE
Con el ánimo de verificar aún más el comportamiento del modelo y su capacidad
de representar la realidad se realizó un nuevo análisis, semejante al realizado para
un pulso de contaminación, considerando un escalón de contaminación en la
corriente de entrada del reactor de flujo a pistón. En la Tabla 5.3 se resumen las
condiciones en la corriente de entrada de cada uno de los contaminantes antes, y
después del escalón de contaminación.
Tabla 5.3: Datos de entrada Escalón de contaminación (mg/L)
PARÁMETRO INICIAL FINAL Kd (s-1) SALINIDAD 1.0 4.0 0.0 DEMANDA BIOQUÍMICA DE OXÍGENO 2.0 20.0 2.89x10-5 NITRÓGENO ORGÁNICO 1.0 15.0 3.30 x10-5 NITRÓGENO AMONIACAL 0.0 0.0 2.30 x10-5 NITRITOS 0.0 0.0 5.80 x10-5 NITRATOS 0.0 0.0 0.0
En la Figura 5.11 se presentan los resultados de la modelación para los diferentes
contaminantes en los tiempos t = 1.0 hora, t = 5.0 horas, t = 10.0 horas y t = 16.0
horas. La Figura 5.12 presenta los resultados para t = 20.0 horas, cuando el pulso
ha superado casi la totalidad del cuerpo de agua. Los resultados mostrados, al
igual que para el caso del Pulso de Contaminación, representan un corte
longitudinal en el centro del canal (Corte A-A’, Figura 5.1)
En la Figura 5.11 se observa como el escalón de contaminante se dispersa
lentamente a medida que éste transita a lo largo del canal. La condición de flujo no
uniforme (velocidad variable) establecida en el ejercicio de modelación genera
gradientes longitudinales de velocidad y por consiguiente dispersión de los
contaminantes.
MIC 2003-II-46
90
Figura 5.11: Resultados escalón de contaminación
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 1 Horas
0.25
0.3
0.35V
eloc
idad
(m/s
)
0
5
Sal
inid
ad (m
g/L)
0
10
20
DB
O (m
g/L)
05
1015
Nit.
Org
. (m
g/L)
0
5
Nit.
NH
4 (m
g/L)
0123
Nitr
itos
(mg/
L)
20 40 60 80 100 120 140 160 1800
5
Nitr
itos
(mg/
L)
Distancia en Metros x 10E+2
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 5 Horas
0.25
0.3
0.35
Vel
ocid
ad (m
/s)
0
5
Sal
inid
ad (m
g/L)
0
10
20
DB
O (m
g/L)
05
1015
Nit.
Org
. (m
g/L)
0
5
Nit.
NH
4 (m
g/L)
0123
Nitr
itos
(mg/
L)
20 4 0 60 80 100 120 140 160 1800
5
Nitr
itos
(mg/
L)
Distancia en Metros x 10E+2
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 10 Horas
0.25
0.3
0.35
Vel
ocid
ad (m
/s)
0
5
Sal
inid
ad (m
g/L)
0
10
20
DB
O (m
g/L)
05
1015
Nit.
Org
. (m
g/L)
0
5
Nit.
NH
4 (m
g/L)
0123
Nitr
itos
(mg/
L)
20 40 60 80 100 120 140 160 1800
5
Nitr
itos
(mg/
L)
Distancia en Metros x 10E+2
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 16 Horas
0.25
0.3
0.35
Vel
ocid
ad (m
/s)
0
5
Sal
inid
ad (m
g/L)
0
10
20
DB
O (m
g/L)
05
1015
Nit.
Org
. (m
g/L)
0
5N
it. N
H4
(mg/
L)
0123
Nitr
itos
(mg/
L)
20 4 0 60 80 100 120 140 160 1800
5
Nitr
itos
(mg/
L)
Distancia en Metros x 10E+2
MIC 2003-II-46
91
Figura 5.12: Resultados escalón de contaminación t = 20.0 horas
0.8
1
1.2
Pro
fund
idad
(m)
Tiempo Modelado = 20 Horas
0.25
0.3
0.35V
eloc
idad
(m
/s)
0
5
Sal
inid
ad (m
g/L)
0
10
20
DB
O (m
g/L)
05
1015
Nit.
Org
. (m
g/L)
0
5
Nit.
NH
4 (m
g/L)
0123
Nitr
itos
(mg/
L)
20 40 60 80 100 120 140 160 1800
5
Nitr
itos
(mg/
L)
Distancia en Metros x 10E+2
MIC 2003-II-46
92
La evaluación de los perfiles transversales de los diferentes contaminantes
produce resultados semejantes a los obtenidos para el caso de pulso de
contaminación, observándose valores ligeramente inferiores en las paredes del
canal. El perfil de velocidad en la dirección perpendicular al flujo, es semejante al
caso anterior e igual a cero (0.0) para el ancho del canal.
A continuación se presenta el análisis comparativo entre los resultados arrojados
por el modelo y la solución analítica, equivalente para el caso de pulso de
contaminación.
En las siguientes Figuras se presentan los resultados obtenidos durante la
modelación para los diferentes contaminantes, utilizando los valores de entrada
presentados en la Tabla 5.3, junto a los valores de concentración calculados
mediante las Ecuaciones (5.2), (5.5), (5.8), (5.11) y (5.14), todos estos para un
tiempo de modelación de 20 Horas (72000 Segundos).
5.2.1 Salinidad
Con relación a este parámetro, al igual que en el caso anterior se puede decir que
hay conservación del mismo, ya que tal como se observa en la Figura 5.11 y en la
Figura 5.12, luego del evento de contaminación la concentración incrementa hasta
un valor equivalente a la concentración de la corriente de entrada, manteniéndose
así hasta el final de la modelación.
MIC 2003-II-46
93
5.2.2 Demanda Bioquímica de Oxigeno
0,00
5,00
10,00
15,00
20,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
DB
O (m
g/L
)
Modelo Ecuación
Figura 5.13: Resultados del modelo Vs la solución analítica para DBO (t=20h)
5.2.3 Nitrógeno Orgánico
0,00
5,00
10,00
15,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NO
(mg
/L)
Modelo Ecuación
Figura 5.14: Resultados del modelo Vs la solución analítica para NO (t=20h)
5.2.4 Nitrógeno Amoniacal
0,00
2,00
4,00
6,00
8,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NA
(mg
/L)
Modelo Ecuación
Figura 5.15: Resultados del modelo Vs la solución analítica para NA (t=20h)
MIC 2003-II-46
94
5.2.5 Nitritos
0,00
1,00
2,00
3,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NI (
mg
/L)
Modelo Ecuación
Figura 5.16: Resultados del modelo Vs la solución analítica para NI (t=20h)
5.2.6 Nitratos
0,00
2,00
4,00
6,00
0 2000 4000 6000 8000 10000 12000 14000 16000 18000 20000
Distancia (metros)
NN
(m
g/L
)
Modelo Ecuación
Figura 5.17: Resultados del modelo Vs la solución analítica para NN (t=20h)
Para la totalidad de los contaminantes se observa un alto grado de correlación.
Las diferencias observadas en la parte final de esquema, corresponden al frente
de avance del escalón, el cual no ha superado totalmente el cuerpo de agua.
MIC 2003-II-46
95
6 APLICACIÓN DEL MODELO A CASOS DE ESTUDIO
Una vez se ha verificado que el código funciona en forma correcta y además se ha
comprobado que los resultados obtenidos a partir de éste, son una representación
de la realidad que se esta modelando, es preciso analizar el comportamiento del
mismo bajo condiciones diferentes que permitan ver efectos bi-dimensionales de
mezcla (por ejemplo solo salinidad).
6.1 CONFIGURACIÓN DE CANAL CURVILÍNEO PARA FLUJO EN 2D
En la Figura 6.1 se presenta la vista en planta de un nuevo esquema de
modelación, el cual permite verificar efectos bidimensionales para los diferentes
contaminantes.
Figura 6.1: Configuración curvilínea para flujo en 2D
MIC 2003-II-46
96
En la Tabla 6.1 se presentan algunos de los datos de entrada para la evaluación
de las condiciones tanto hidrodinámicas como de calidad para el esquema de flujo
en dos dimensiones - 2D.
Tabla 6.1: Datos de entrada esquema 2D
PARÁMETRO VARIABLE UNIDADES VALOR
Tiempo de cada iteración dt Segundos 1.0
Tamaño de la Celda dx Metros 100.0
Tiempo al que inicia modelación itime Segundos 1.0
Número de iteraciones maxtime 72000
Número de meses durante la modelación nmes Mes 1
Número de impresi ones de los datos numres 100
Número de Columnas de la configuración ncol 200
Número de filas de la Configuración mfil 60
Número de fronteras de marea por columnas nfrmcol 0
Número de fronteras de marea por filas nfrmfil 0
Número de fronteras de caudal por columnas nfrqcol 2
Número de fronteras de caudal por filas nfrqfil 0
Nombre de la Corrida Id Pistón
Tipo de entrada de datos de nivel de la malla nivinicial 0
Nivel inicial de toda la malla SE seinv Metros 1.0
Profundidad H de la malla H Metros 0.5
Coeficiente de Rugosidad C de Chezy C 125
Número de ríos numrios 2
Velocidad Río 1 caud(1) M/s 0.29
Velocidad Río 2 caud(2) M/s 0.31
Número de Estaciones para impresión nest 0
En la Figura 6.2 se presentan los resultados del modelo en cuanto a la parte
hidrodinámica. En la parte baja de la misma, se muestran las líneas de contorno
para la profundidad a cada 0.01 m. Dado que las condiciones de velocidad en las
corrientes de entrada y salida se mantienen constantes durante toda la
MIC 2003-II-46
97
modelación, el nivel del agua a lo largo del cuerpo no varía significativamente,
manteniéndose semejante al mostrado en la Figura 6.2
Figura 6.2: Resultados Hidrodinámicos 2D
Del análisis cualitativo de esta figura, se puede concluir que el modelo representa
adecuadamente este tipo de configuración, ya que se genera un perfil hidráulico
cuyo comportamiento esta de acuerdo con lo esperado. En las zonas rectas del
canal se observa flujo uniforme, el cual se ve afectado por la presencia del
obstáculo, generando así zonas muertas en los puntos más alejados de la
dirección predominante de flujo. Adicionalmente, en la parte interna del canal se
evidencian zonas de remolinos debido a las altas velocidades que predominan en
este sector.
MIC 2003-II-46
98
Para este escenario se modeló un pulso de contaminación bajo las condiciones
presentadas en la Tabla 6.2 y una duración aproximada de 33 minutos.
Tabla 6.2: Datos corriente de entrada Pulso de contaminación (mg/L)
PARÁMETRO INICIAL PULSO FINAL Kd (s-1) SALINIDAD 1.0 9.0 1.0 0.0 DEMANDA BIOQUÍMICA DE OXÍGENO 2.0 25.0 2.0 2.89x10-5 NITRÓGENO ORGÁNICO 1.0 15.0 1.0 3.30 x10-5 NITRÓGENO AMONIACAL 0.0 0.0 0.0 2.30 x10-5 NITRITOS 0.0 0.0 0.0 5.80 x10-5 NITRATOS 0.0 0.0 0.0 0.0
En la Figura 6.3 y en la Figura 6.4 se presenta el comportamiento temporal para la
modelación de un pulso de Salinidad. Se hace evidente la dispersión del
contaminante a medida que ésta viaja por el canal, la cual se incrementa
significativamente una vez se alcanza la primera curva. Una vez el frente de la
onda alcanza el segundo cambio de dirección, la masa se desplaza bajo
condiciones semejantes a las observadas para el canal recto.
La presencia de zonas muertas se hace evidente, ya que se encuentran
concentraciones relativamente altas, una vez el pulso ha superado estos sectores
totalmente. Nuevamente, al igual que para el caso de flujo a pistón, las
concentraciones en las paredes son inferiores a las del centro del canal,
pronunciando este efecto en la salida del mismo.
Con relación a la Demanda bioquímica de Oxígeno (Figura 6.5 y Figura 6.6), la
concentración del canal disminuye gradualmente debido al decaimiento natural
que sufre esta sustancia mientras permanece retenida al interior de éste. Análisis
de estas figuras confirma los resultados observados para el pulso de salinidad.
MIC 2003-II-46
99
Figura 6.3: Resultados pulso contaminación 2D (Salinidad)
MIC 2003-II-46
100
Figura 6.4: Resultados pulso contaminación 2D (Salinidad) t = 19.8 horas
MIC 2003-II-46
101
Figura 6.5: Resultados pulso contaminación 2D (D.B.O.)
MIC 2003-II-46
102
Figura 6.6: Resultados pulso contaminación 2D (D.B.O.) t = 19.8 horas
MIC 2003-II-46
103
Figura 6.7: Resultados pulso contaminación 2D (Nitrógeno) t = 19.8 horas
MIC 2003-II-46
104
Una vez el pulso ha superado el primer sector del canal, se genera un perfil de
concentración decreciente, muy semejante al observado en el canal recto, lo que
confirma el flujo uniforme en esta zona. Por otro lado, se evidencia también, una
trayectoria predominante de flujo por la cual transite el frente de la onda. Los
sectores aledaños a las paredes alcanzan tiempos de residencia superiores a los
del centro del canal, ya que las concentraciones en los primeros son mucho
menores a las reportadas para estos últimos.
Con relación a los demás contaminantes, la Figura 6.7 presenta los resultados una
vez el frente de onda ha alcanzado la salida del canal. Una vez más se confirman
las observaciones realizadas para Salinidad y DBO con respecto a las zonas
muertas y trayectorias predominantes de flujo.
Como conclusión general de esta simulación, se puede afirmar que el modelo es
numéricamente estable y el análisis cualitativo de los resultados permite asegurar
que éste es una representación de la realidad que se esta modelando.
6.2 CIÉNAGA GRANDE DE SANTA MARTA
Dado que en el proyecto CIFI-COLCIENCIAS (1991) de la “Modelación
hidrodinámica de la Ciénaga Grande de Santa Marta” se tomaron datos de campo
de salinidad en las orilla y dentro de la ciénaga durante las campañas de medición
de 48 horas, se decidió en este proyecto modelar el comportamiento de la
Salinidad con el fin de verificar los resultados del modelo y determinar sus
bondades y desventajas. En la Figura 6.8 se presenta el esquema de diferencias
finitas utilizado durante la modelación.
MIC 2003-II-46
105
Figura 6.8: Esquema de Diferencias Finitas Ciénaga Grande
El tamaño de celda utilizado es de 500 metros y el intervalo de tiempo para cada
iteración es de 180 segundo. En la Tabla 6.3 se presentan las condiciones de
calidad de las diferentes entradas de la Ciénaga utilizadas en la modelación del
comportamiento de la Ciénaga Grande de Santa Marta para el periodo
comprendido entre los días 18 al 20 de Octubre de 1989.
Tabla 6.3: Datos Ciénaga Grande Octubre 1989
PARÁMETRO VALOR Salinidad inicial Global 12.0 Salinidad Constante del Mar 31.0 Salinidad Constante Pajaral 14.0 Salinidad Constante Ríos 0.0
La Figura 6.9, la Figura 6.10 y la Figura 6.11 presentan la variación de profundidad
obtenidos durante la modelación de la calidad Ciénaga Grande de Santa Marta,
junto a los valores medidos durante la campaña de Octubre de 1989 y los
resultados del proyecto CIFI-COLCIENCIAS (1991).
MIC 2003-II-46
106
0
2
4
6
8
10
12
11 14 17 20 23 2 5 8 11 14 17 20 23 2 5 8
Hora del Día
cmModelo 2003 Medido Oct/89 Modelo CIFI
Figura 6.9: Variación de Nivel Estación Centro - Boca
0
2
4
6
8
10
12
12 15 18 21 0 3 6 9 12 15 18 21 0 3 6 9
Hora del Día
cm
Modelo 2003 Medido Oct/89 Modelo CIFI
Figura 6.10: Variación de Nivel Estación Centro - Centro
0
2
4
6
8
10
12
14
16
18
14 17 20 23 2 5 8 11 14 17 20 23 2 5 8
Hora del Día
cm
Modelo 2003 Medido Oct/89 Modelo CIFI
Figura 6.11: Variación de Nivel Estación Fundación
MIC 2003-II-46
107
La Figura 6.12, la Figura 6.13 y la Figura 6.14 presentan los valores de salinidad
modelados para este mismo caso junto a los resultados obtenidos durante la
modelación de la instrucción salina realizada por Camacho (1991) y los valores
medidos entre los días 18 al 20 de Octubre de 1989.
0
5
10
15
20
25
10 13 16 19 22 1 4 7 10 13 16 19 22 1 4 7 10
Hora del Día
Sal
inid
ad (P
/Mil)
Medida C.31 C.33 Modelo 2003
Figura 6.12: Salinidad Estación Tasajera
0
2
4
6
8
10
12
14
10 13 16 19 22 1 4 7 10 13 16 19 22 1 4 7 10
Hora del Día
Sal
inid
ad (P
/Mil)
Medida C.31 C,33 Modelo 2003
Figura 6.13: Salinidad Estación Cataca
5
5,5
6
6,5
7
7,5
8
8,5
9
11 14 17 20 23 2 5 8 11 14 17 20 23 2 5 8
Hora del Día
Sal
inid
ad (P
/Mil)
Modelo 2003 Medido
Figura 6.14: Salinidad Estación Centro - Boca
MIC 2003-II-46
108
Analizando los resultados obtenidos durante la corrida para Ciénaga Grande de
Santa Marta, se hicieron las siguientes observaciones:
• En ningún caso el programa presentó errores lógicos que terminaran la
ejecución,
• Para el sistema tan grande como la Ciénaga Grande de Santa Marta, cada
corrida de simulación de 100 horas en tiempo real e intervalos de tiempo para
cada iteración de 1 segundo, tomó alrededor de 40 minutos.
• Los resultados en cuanto a variación de niveles son similares a los obtenidos
en las simulaciones realizadas por CIFI- COLCIENCIAS (1991) y son muy
semejantes a los obtenidos en la campaña de medición, lo cual permite
confirmar la correcta implementación del modelo y de las ecuaciones
gobernantes en los procesos Hidrodinámicos.
• Con relación a la Salinidad, el modelo es capaz de predecir el comportamiento
temporal del parámetro, y predice concentraciones muy semejantes a los
valores medidos en campo.
En la Figura 6.15 se observa el comportamiento de la Ciénaga durante un periodo
de marea, en el cual la corriente proveniente del mar afecta significativamente las
concentraciones en zona cercana a la Boca de la Barra. 4:00 de la tarde del día 18
de Octubre de 1989, La Figura 6.16 presenta los resultados para las mismas
condiciones, luego que el modelo se ha dejado correr durante 10 ciclos, con el fin
de evaluar las condiciones de estado estable del sistema.
MIC 2003-II-46
109
Figura 6.15: Salinidad Ciénaga Grande (Octubre 18/1989, 4:00 P.M.) 2 Ciclos
MIC 2003-II-46
110
Figura 6.16: Salinidad Ciénaga Grande (Octubre 18/1989, 4:00 P.M.) 10 Ciclos
MIC 2003-II-46
111
Figura 6.17: Salinidad Ciénaga Grande (Octubre 20/1989, 10:00 A.M.)
MIC 2003-II-46
112
Del análisis comparativo entre la Figura 6.15 y Figura 6.16, se puede concluir que
la velocidad de respuesta de la masa es baja, ya que se requiere de largos
periodos de modelación de calidad del agua, para obtener condiciones de estado
estable. Adicionalmente, se observa que aunque las velocidades de los ríos de
entrada a la ciénaga son relativamente bajos (0.066 m/s) en comparación con la
Boca Barra que alcanza valores cercanos a 1m/s, la salinidad de casi la totalidad
del cuerpo de agua se ve influenciada por estas corrientes.
En la concentración en la zona centro y nor-occidental de la ciénaga se mantiene
por encima de los 10 g/L, debido a la influencia de las corrientes de agua
provenientes de la Boca Barra.
A modo de ilustración, en la Figura 6.18 se presentan los resultados de la
simulación de la Ciénaga Grande de Santa Marta para el caso de la Demanda
Bioquímica de Oxígeno, obsérvese nuevamente, la influencia de las corrientes de
entrada (Ríos) en el comportamiento general de la misma.
Figura 6.18: D.B.O. Ciénaga Grande (Octubre 20/1989, 10:00 A.M.)
MIC 2003-II-46
113
7 CONCLUSIONES Y RECOMENDACIONES
El protocolo de modelación utilizado durante el desarrollo del Modelo
Bidimensional Hidrodinámico y de Calidad para Cuerpos de Agua Poco Profundos
fue una herramienta fundamental, que facilitó la ejecución del proyecto de una
manera eficiente, en la que el desarrollo cronológico del mismo, permitió dar
solución inmediata a las diferentes dificultades que se presentaron a lo largo de
éste. Como conclusiones de cada una de las etapas de dicho protocolo se pueden
mencionar:
7.1 PLANTEAMIENTO DEL MODELO BIDIMENSIONAL DE CALIDAD
• La selección del modelo bidimensional hidrodinámico, específicamente el
modelo de Fisher (Fisher, 1981), demostró ser una herramienta confiable en el
estudio de cuerpos de agua poco profundos.
• El desarrollo de las ecuaciones diferenciales que controlan el transporte de
solutos se realizó de manera explicita, lo que genera una disminución
significativa en el número de operaciones a realizar durante el procesamiento
de datos.
MIC 2003-II-46
114
7.2 IMPLEMENTACIÓN DEL MODELO
• La combinación de los programas Fortran y Matlab permiten realizan
modelación de cuerpos relativamente grandes, con un alto grado de precisión y
con un costo computacional bajo. Para un tamaño de celda de 60 x 200, y un
intervalo entre iteraciones de un (1) segundo, la modelación de 20 horas
(72000 segundos) para la totalidad de los contaminantes tarda alrededor de
120 minutos. Para el caso en que no se realiza modelación de la calidad, el
cálculo de las condiciones hidrodinámicas requiere de unos 20 minutos bajo el
mismo escenario planteadas anteriormente.
7.3 VERIFICACIÓN SINTÉTICA DEL MODELO ACOPLADO (CANAL RECTO)
• El modelo representa en forma correcta el comportamiento hidrodinámico y de
calidad para los diferentes contaminantes para una configuración de flujo a
pistón cuando en la corriente de entrada se alimenta un pulso de
contaminación, obteniendo un alto grado de correlación con la solución
analítica para este tipo de configuración. Resultados semejantes se observan
cuando se modela un escalón de contaminación.
• Durante el transito del los diferentes contaminantes a lo largo del canal, se
observan procesos de dispersión longitudinal, los cuales se originan por la
condición de flujo no uniforme (velocidad variable) establecida en el ejercicio
de modelación, lo que genera gradientes longitudinales de velocidad y por
consiguiente dispersión de los contaminantes.
MIC 2003-II-46
115
7.4 APLICACIÓN DEL MODELO A CASOS DE ESTUDIO
• Se cuenta con un modelo Hidrodinámico y de Calidad que son capaces de
simular correctamente diferentes configuraciones, obteniendo resultados que
son una representación de la realidad que se esta modelando. El alto grado de
similitud entre los valores arrojados por el modelo y lo predicho mediante las
soluciones analíticas dan prueba de ello.
• Se considera que los resultados obtenidos por el modelo para la Ciénaga
Grande de Santa Marta no son los óptimos, y se pueden mejorar aún más
variando las condiciones de entrada y los diferentes parámetros.
• La limitación más importante encontrada en el proceso de calibración que se
pensó originalmente, fue la falta de datos reales y con una frecuencia
adecuada (cada hora), que permitiera corroborar los resultados obtenidos a
partir del modelo para los parámetros de calidad (DBO, Nitrógeno Orgánico,
Nitrógeno Amoniacal, Nitritos y Nitratos).
• Se piensa que se cuanta con un herramienta valiosa que permite predecir el
transporte de contaminantes en cuerpos de agua poco profundos (Ciénagas,
Bahías, Lagos y Lagunas), la cual, no sólo facilita el entendimiento del
problema de ingeniería, sino que ayuda en la toma de decisiones óptimas
basadas en el análisis de alternativas costo efectivas.
Finalmente, como conclusiones generales del presente trabajo de tesis se pueden
resaltar las siguientes:
MIC 2003-II-46
116
• El modelo computacional, que integra la componente hidrodinámica con un
modelo de transporte de solutos, puede ser usado en un amplio rango
aplicaciones donde no se presenten variaciones significativas de
concentración, temperatura y velocidad en el eje vertical.
• Dado que la herramienta es eficiente numéricamente, permite predecir el
efecto a corto, mediano y largo plazo de procesos de contaminación
antropogénicos, y la eficacia de la implementación de sistemas de tratamiento
y de políticas de manejo, sobre la calidad final de cuerpos de agua de gran
magnitud como Ciénagas, Bahías, Lagos y Lagunas.
• La combinación de un modelo hidrodinámico con un modelo de transporte de
solutos tiene un gran potencial, ya que con esto se da un paso importante de
en el desarrollo de modelos que permitan predecir la capacidad autodepurativa
de grandes cuerpos de agua, así como la calidad de los efluentes bajo
diferentes escenarios de contaminación.
• En cuanto al código de computador, se puede decir que la combinación de los
programas Fortran y Matlab permiten realizar modelación de cuerpos
relativamente grandes, con un alto grado de precisión y con un costo
computacional bajo, requiriendo para su ejecución de periodos de tiempo
inferiores a una (1) hora y necesidad de hardware de fácil consecución, como
computadores de escritorio con procesador Pentium IV o superior y memoria
RAM superior a 124 MHz.
MIC 2003-II-46
117
Como resultado del presente trabajo de investigación se pueden plantear las
siguientes recomendaciones para futuras investigaciones:
• Se considera necesario estudiar y analizar el modelo antes de dar un juicio
acerca de sus ventajas y desventajas ya que no se dispone de la información
necesarios para sacar conclusiones al respecto. Aunque este es un modelo
sencillo, físicamente basado, se considera que puede dar resultados muy
buenos con la información suficiente y un buen proceso de calibración.
• Una vez verificada la capacidad del modelo de predecir datos reales, es
preciso realizar un trabajo adicional de programación que facilite la interacción
hombre – maquina y permita que cualquier usuario pueda hacer uso de la
herramienta; ya que a la fecha, solo puede hacer uso de ella quien tenga
conocimientos básicos de programación de los lenguajes Fortran y Matlab.
MIC 2003-II-46
118
8 BIBLIOGRAFÍA
1.
Camacho, Luis A., “Implementación de un modelo Hidrodinámico y de
trasporte de contaminantes bidimensional y su aplicación al caso de la
Ciénaga Grande de Santa Marta”, Universidad de los Andes, Facultad de
Ingeniería, Departamento de Ingeniería Civil, Tesis de Magíster, Bogotá,
Enero de 1991.
2. Chapra, S. C. “Surface water-quality modelling”, The McGraw Hill Companies,
New York, 1997.
3. Dobbins, W. E., “BOD an oxygen relationship in streams”. Proceedings of
American Society of Civil Engineers, Journal of Environmental Engineering
Division 90(SA3): 53-78, 1964
4 Dronkers, J.J. “Tidal Computations for rivers, coastal areas and seas ”, Journal of the
Hydraulics Division, Hy 1, Enero de 1969.
5. Fisher, Hugo B. (Editor), “Transport models for island and coastal waters”,
Academic Press, New York, 1981.
6. Frankel, R. J. and W. W. Hansen, “Biological and physical responses in a
freshwater dissolved oxygen model”. Advances in water quality improvement,
eds. E. F. Gloyna and W. W. Eckenfelder (Austin, TX and London: University
of Texas Press). Pp. 126-140, 1968.
7. Leendertsee, Jan J. “Aspects of a computational model for long-period water-
wave propagation” , Memorandum RM-5294-PR, The RAND Corporation, Santa
Monica, California, Mayo 1967.
MIC 2003-II-46
119
8. Mouthon, Javier A., “Modelación del balance hídrico y calidad de agua de la
ciénaga de la virgen de Cartagena”, Universidad de los Andes, Facultad de
Ingeniería, Departamento de Ingeniería Civil, Tesis de Magíster, Bogotá,
Enero de 1988.
9. Proyecto CIFI-COLCIENCIAS, “Modelación Hidrodinámica de la Ciénaga
Grande de Santa Marta”, Universidad de los Andes. Departamento de
Ingeniería Civil, Bogotá, Marzo de 1991.
10. Saavedra, Tito A., “Modelación hidrodinámica de la Ciénaga Grande de
Santa Marta”, Universidad de los Andes, Facultad de Ingeniería,
Departamento de Ingeniería Civil, Tesis de Magíster, Bogotá, Agosto de
1997.
11. Streeter, H. W., and E. B. Phelps, “A study of the pollution and natural
purification of the Ohio River”, US Public Health Service, Washington DC.,
Bulletin 146, 1925.
12. Thoman, R. V., Muller, J. A., “Principles of surface water quality modeling and
control”, Harper & Row Publishers, New York, 1987.
MIC 2003-II-46
120
ANEXO A: CÓDIGO DE COMPUTADOR (Anubis.exe)
! ANUBIS.f90 ! ! FUNCTIONS: ! ANUBIS - Entry point of console application. ! ! Este programa modela la Hidrodinámica y el transporte ! de solutos en cuerpos de agua poco profundos. ! !**************************************************************************** ! ! PROGRAM: ANUBIS ! ! PURPOSE: Tesis de grado MSc Ingeniería Civil y Ambiental. ¡ Universidad de los Andes (Bogotá – Colombia) ! !**************************************************************************** program Main integer i, j, aux Integer nmax, mmax, nresmax, nmaxrios, nmaxviento, nmaxdatrio, dia Real hora Integer nmaxdatmarea, nmaxfrm, nmaxfrq, nmaxest, nmaxmes double precision numvar, gra, c1, c2, c3, c4, f, pi Character *10 corr Character *1 calidad character *50 titulo Integer dx, itime, maxtime, nmes, numres Integer ncol, mfil, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nmfr character *100 id integer dtviento real cd1, cd2 integer nivinicial real dt,anglat, seinv, tmar integer numrios, nest real dtxse (4), datmar(4), coord (20,2) integer dtrio(10) real media (12), sol(6,12), lun(6,12) character*16 nombres(20) Integer contimp, metodo dimension nprint (12001), viento(500,2), xse (1002,4), c(300, 300), h(300, 300) Double precision caud (1002, 4) dimension mbd(540,4),nbd(540,4), nobd(4,4), mobd(4,4), nqbd(4,4), mqbd(4,4) double precision xia (4), velrio (4) Double precision u(300, 300), v(300, 300), se(300, 300) Double precision up(300, 300), vp(300, 300), sep(300, 300) Integer num, msrch, is, ir, n, mf, l, mff, nnn, nn, nsrch Integer mind, nind, k, mm, mmm, lll, ll, nf, nff Real gamma, alpha, temp1, temp2, temp3, temp4, temp9,temp10, temp11, u2 Real term, temp6, saved, beta, delta,v2 Double precision QQQ double precision vi, velco character*2 dirvi, dirco double precision xx, yy
MIC 2003-II-46
121
Double precision s(540), r(540), a(540), p(540), q(540), b(540) real sdee, sdee1 integer sdef !Dimensiona las variables para calidad del agua !Sustancias Conservativas integer salinicial Real cinicialsal, sinicial Real dtsal(4), datsal (4), dtsalrio (10), datsalrio (10) Double precision cse (1002,4), caudsal (1002,4) double precision sal (300, 300), salp (300, 300) double precision Dsal, Ksal double precision Stemp1, Stemp2, Stemp3, Stemp4, Stemp5, Stemp6, Stemp7, Stemp8 !DBO integer tipodatdbo Real cinicialdbo, dboinicial Real dtdbo(4), datdbo (4), dtdborio (10), datdborio (10) Double precision dbose (1002,4), cauddbo (1002,4) double precision dbo (300, 300), dbop (300, 300) double precision Ddbo, Kdbo, VSdbo Double precision dbotemp1, dbotemp2, dbotemp3, dbotemp4, dbotemp5, dbotemp6, dbotemp7, dbotemp8 !Nitrogeno Organico NO integer tipodatno Real cinicialno, noinicial Real dtno(4), datno (4), dtnorio (10), datnorio (10) Double precision nose (1002,4), caudno (1002,4) double precision no (300, 300), nop (300, 300) double precision Dno, Kno Double precision notemp1, notemp2, notemp3, notemp4, notemp5, notemp6, notemp7, notemp8 !Nitrogeno Amoniacal NAMO integer tipodatnamo Real cinicialnamo, namoinicial Real dtnamo(4), datnamo (4), dtnamorio (10), datnamorio (10) Double precision namose (1002,4), caudnamo (1002,4) double precision namo (300, 300), namop (300, 300) double precision Dnamo, Knamo Double precision namotemp1, namotemp2, namotemp3, namotemp4, namotemp5, namotemp6, namotemp7, namotemp8 !Nitrito Nitri integer tipodatnitri Real cinicialnitri, nitriinicial Real dtnitri(4), datnitri (4), dtnitririo (10), datnitririo (10) Double precision nitrise (1002,4), caudnitri (1002,4) double precision nitri (300, 300), nitrip (300, 300) double precision Dnitri, Knitri Double precision nitritemp1, nitritemp2, nitritemp3, nitritemp4, nitritemp5, nitritemp6, nitritemp7, nitritemp8 !Nitrato Nitra integer tipodatnitra Real cinicialnitra, nitrainicial Real dtnitra(4), datnitra (4), dtnitrario (10), datnitrario (10) Double precision nitrase (1002,4), caudnitra (1002,4) double precision nitra (300, 300), nitrap (300, 300) double precision Dnitra, Knitra Double precision nitratemp1, nitratemp2, nitratemp3, nitratemp4, nitratemp5, nitratemp6, nitratemp7, nitratemp8 !Oxigeno Disuelto OxiDis integer tipodatOxiDis Real cinicialOxiDis, OxiDisinicial, Kbentica Real dtOxiDis(4), datOxiDis (4), dtOxiDisrio (10), datOxiDisrio (10) Double precision OxiDisse (1002,4), caudOxiDis (1002,4) double precision OxiDis (300, 300), OxiDisp (300, 300) double precision DOxiDis, KOxiDis Double precision OxiDistemp1, OxiDistemp2, OxiDistemp3, OxiDistemp4, OxiDistemp5, OxiDistemp6, OxiDistemp7, OxiDistemp8 !Fin de calidad del agua
MIC 2003-II-46
122
!*****Dimensiona las constantes nmax = 1000; mmax = 1000; nresmax = 20; nmaxrios = 4; nmaxviento = 500; nmaxdatrio = 500 nmaxdatmarea = 102; nmaxfrm = 4; nmaxfrq = 4; nmaxest = 8; nmaxmes = 1 numVar = 3.141592654; Pi = 3.141592654; gra = 9.81 QQQ = 1.00000 !********Inicia el programa print *,' ' print *,' ' print *,' ' print *,'Bienvenido a ANUBIS' print *,'Este programa Modela la hidrodinámica y el transporte de' print *,'Solutos en Cuerpos de Agua Poco Profundos' print *,' ' print *,' ' print *,'Como desea identificar su corrida?' read(unit=*,fmt=1)corr print *,'Desea modelar calidad del agua? (Y)/(N)' read(unit=*,fmt=1)calidad 1 format(a) print *,'Los Archivos Generados serán enviados a la Carpeta ',corr print * call aberturaarch (calidad) call valoresini(c,h,nmax,mmax) print *,'Lectura de Datos' !Inicia lectura de datos !Esta subrutina lee los valores de entrada del archivo cienaga.xxx. ! call leadatos(dt, dx, itime, maxtime, nmes, numres, ncol, mfil, nfrmcol, nfrmfil, nfrqcol, nfrqfil, id) read (unit=1, fmt=304) dt read (unit=1, fmt=301) dx read (unit=1, fmt=301) itime read (unit=1, fmt=301) maxtime read (unit=1, fmt=301) nmes read (unit=1, f mt=301) numres !número de impresiones 100 = · de horas read (unit=1, fmt=301) ncol read (unit=1, fmt=301) mfil read (unit=1, fmt=301) nfrmcol read (unit=1, fmt=301) nfrmfil read (unit=1, fmt=301) nfrqcol read (unit=1, fmt=301) nfrqfil read (unit=1, fmt=302) id ! Evalúa las corridas con impresión de datos wer = 0 i = 0 do while (wer.LE.maxtime) i = i + 1 wer = i * maxtime / numres nprint (i) = wer End do read (unit=1, fmt=301) dtviento read (unit=1, fmt=303) cd1 read (unit=1, fmt=303) cd2 aux = maxtime * dt / dtviento call lea2 (aux, 1, viento, cd1, cd2) call lea2 (aux, 2, viento, cd1, cd2) read (unit=1, fmt=301) nivinicial read (unit=1, fmt=304) anglat if (nivinicial .EQ. 0) then !Si nivelinicial <> 0 hay que alimentar matriz de entrada de nivel inicial read (unit=1, fmt=304) seinv Else
MIC 2003-II-46
123
call lea41(se, ncol, mfil,1) call lea41(v, ncol, mfil,1) call lea41(u, ncol, mfil,1) endif do 3 i = 1, nfrmcol + nfrmfil read (unit=1, fmt=305) dtxse(i), datmar(i) aux = maxtime * dt / dtxse (i) If (datmar(i) .EQ. 1) then call lea3 (aux, i, xse) else read (unit=1, fmt=901) tmar do 2 j = 1, nmes read (unit=1, fmt=304) media(j) read (unit=1, fmt=306) sol(1,j), sol(2,j), sol(3,j), sol(4,j), sol(5,j), sol(6,j) read (unit=1, fmt=306) lun(1,j), lun(2,j), lun(3,j), lun(4,j), lun(5,j), lun(6,j) 2 continue endif 3 continue call lea4 (h, ncol, mfil,1) call lea4 (c, ncol, mfil,1) read (unit=1, fmt=301) numrios do 4 i = 1, numrios read (unit=1, fmt=301) dtrio (i) print *,'Dt Río N° ',i ,' =', dtrio(i) aux = maxtime * dt / dtrio (i) call lea5 (aux, i, caud, nfrqcol, nfrqfil, nmaxdatrio) 4 continue read (unit=1, fmt=301) nest do 5 i = 1, nest read (unit=1, fmt=307) nombres(i), coord(i,1), coord (i,2) 5 continue call codigos (mbd,nbd, mfil, ncol, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd) ! call imprimadat (numres, ncol, mfil) ! Entrada de datos para modelación de calidad del agua !Analisis para Sustancias Conservativas !Archivo de entrada SusCon.TXT If (calidad.eq."Y") then do 803 lectpar = 1, 7 SELECT CASE (lectpar) CASE (1) !Sustancia conservativa Salinidad call leacalidad (Dsal, Ksal, dtsal, datsal, cse, 51, cinicialsal, dtsalrio, datsalrio, caudsal, salinicial, sal, sinicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) CASE (2) !Demanda Bioquimica de Oxigeno read (unit=52, fmt=308) VSdbo call leacalidad (Ddbo, Kdbo, dtdbo, datdbo, dbose, 52, cinicialdbo, dtdborio, datdborio, cauddbo, tipodatdbo, dbo, dboinicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) CASE (3) !Nitrogeno Organico call leacalidad (Dno, Kno, dtno, datno, nose, 53, cinicialno, dtnorio, datnorio, caudno, tipodatno, no, noinicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) CASE (4) !Nitrogeno Amoniacal call leacalidad (Dnamo, Knamo, dtnamo, datnamo, namose, 54, cinicialnamo, dtnamorio, datnamorio, caudnamo, tipodatnamo, namo, namoinicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) CASE (5) !Nitritos call leacalidad (Dnitri, Knitri, dtnitri, datnitri, nitrise, 55, cinicialnitri, dtnitririo, datnitririo, caudnitri, tipodatnitri, nitri, nitriinicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) CASE (6) !Nitratos
MIC 2003-II-46
124
call leacalidad (Dnitra, Knitra, dtnitra, datnitra, nitrase, 56, cinicialnitra, dtnitrario, datnitrario, caudnitra, tipodatnitra, nitra, nitrainicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) CASE (7) !Oxigeno Disuelto read (unit=57, fmt=309) OxiSat read (unit=57, fmt=308) Kbentica read (unit=57, fmt=309) Roa read (unit=57, fmt=309) Roi call leacalidad (DOxiDis, KOxiDis, dtOxiDis, datOxiDis, OxiDisse, 57, cinicialOxiDis, dtOxiDisrio, datOxiDisrio, caudOxiDis, tipodatOxiDis, OxiDis, OxiDisinicial, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) END SELECT 803 continue endif !Fin de entrada de datos para modelación de la calidad del agua close(1) 901 format (F6.0) 902 format (F9.6) 301 format (i6) 302 format (A) 303 format (F8.2) 304 format (F9.7) 305 format (F6.0,F2.0) 306 format (F6.3,F6.3,f6.3,f6.3,f6.3,f6.3) 307 format (a,F7.0,F7.0) 308 format (F12.2) 309 format (F6.4) 310 format (F14.2) !Termina lectura de datos ! call inicialicebot !************************************************************************************************ !Esta subrutina inicializa los valores de las variables empleadas en los cálculos matemáticos. do 401 i = 1, nfrmcol+nfrmfil xia(i) = seinv 401 continue f = pi * sin (anglat* pi /180)/21600 c1 = dt*gra/dx c3 = 1000 * dt / dx C2 = C3/1000 c4 = 8 * dt * gra metodo = 2 if (nivinicial.EQ.0) then do 402 m = 2, mfil nc1 = mbd (m,3) nc2 = mbd (m,4) if (nc1.NE.0) then do 403 n = nc1, nc2 se(n,m) = seinv if (salinicial.eq.0) then !Llenado para salinidad. sal(n,m) = sinicial endif if (tipodatdbo.eq.0) then !Llenado para DBO. dbo(n,m) = dboinicial endif if (tipodatno.eq.0) then !Llenado para Nitrogeno Organico. no(n,m) = noinicial endif if (tipodatnamo.eq.0) then !Llenado para Nitrogeno Amoniacal. namo(n,m) = namoinicial
MIC 2003-II-46
125
endif if (tipodatnitri.eq.0) then !Llenado para Nitrito. nitri(n,m) = nitriinicial endif if (tipodatnitra.eq.0) then !Llenado para Nitrato. nitra(n,m) = nitrainicial endif if (tipodatOxiDis.eq.0) then !Llenado para Oxigeno Disuelto. OxiDis(n,m) = OxiDisinicial endif 403 continue endif 402 continue else do 472 m = 2, mfil nc1 = mbd (m,3) nc2 = mbd (m,4) if (nc1.NE.0) then do 473 n = nc1, nc2 if (salinicial.eq.0) then !Llenado para salinidad. sal(n,m) = sinicial endif if (tipodatdbo.eq.0) then !Llenado para DBO. dbo(n,m) = dboinicial endif if (tipodatno.eq.0) then !Llenado para Nitrogeno Organico. no(n,m) = noinicial endif if (tipodatnamo.eq.0) then !Llenado para Nitrogeno Amoniacal. namo(n,m) = namoinicial endif if (tipodatnitri.eq.0) then !Llenado para Nitrito. nitri(n,m) = nitriinicial endif if (tipodatnitra.eq.0) then !Llenado para Nitrato. nitra(n,m) = nitrainicial endif if (tipodatOxiDis.eq.0) then !Llenado para Oxigeno Disuelto. OxiDis(n,m) = OxiDisinicial endif 473 continue endif 472 continue endif do 404 i = 1, nest OPEN (UNIT=i+5, STATUS='old', file=nombres(i)) titulo = "DIA HORA NIVEL V.VIE DIR V.COR DIR" write (unit=i+5,fmt=451) titulo 451 format (A) 404 continue !************************************************************************************************ !****Inicia programa principal print *,'Programa Principal' itime = 0 Call datosit(dtrio, media, sol, lun, tmar, nfrmfil, nfrmcol, itime, dt, datmar, dtxse, xia, xse, xx, yy, dtviento, viento, numrios, velrio, caud, dia, hora) Call fronteras (nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, se, xia, velrio, vp, up) contimp = 1 metodo = 2 do 20 itime = 1, maxtime !************************************************************************************************ !Esta subrutina realiza el calculo de vel y profundidad si metodo = 1 Botony, metodo = 2 metodoalt !********************botony metodo = 3 - metodo
MIC 2003-II-46
126
Call datosit(dtrio, media, sol, lun, tmar, nfrmfil, nfrmcol, itime, dt, datmar, dtxse, xia, xse, xx, yy, dtviento, viento, numrios, velrio, caud, dia, hora) Call fronteras (nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, sep, xia, velrio, vp, up) If (metodo.EQ.1) then num= 2 n= 1 nind= ncol-1 Do while (num.LE.nind) !nind, numero de columnas is = nbd(num,1) !Comienza el barrido por columnas ir = nbd(num,2) n = n + 1 mf = nbd(num,3) l = nbd(num,4) mff = mf - 1 nnn = n + 1 nn = n - 1 r(mff)= 0 s(mff)= 0 gamma= 0.5 If(is.EQ.1) Then !Frontera de Marea arriba temp10= u(nnn,mff) if (temp10.EQ.0) Then temp10= u(nn,mff) End If temp11= u(nn,mff) if (temp11.EQ.0) Then temp11= u(nnn,mff) End If alpha= 1 r(mff)= c1/(1 + c2*(u(n,mf)-u(n,mff))) u2= u(n,mff) + xx/(h(n,mff)+h(nn,mff)+se(n,mf)+se(n,mff)) s(mff)= (u2+c1*sep(n,mff) - u(n,mff)*sqrt(u(n,mff)*u(n,mff) + (v(n,mf) + v(nn,mf))*(v(n,mf) + v(nn,mf))/16)*c4/((se(n,mff)+ se(n,mf) + h(n,mff) + h(nn,mff))*((c(n,mff)+c(n,mf))*(c(n,mff)+c(n,mf))))) s(mff)= (s(mff) + (v(n,mf)+v(nn,mf))*0.25*(dt*f - (1-gamma)*c2 *(temp10 - u(n,mff)) - gamma*c2*(u(n,mff) - temp11))) s(mff)= s(mff)/(1 + c2*(u(n,mf) - u(n,mff))*(1 - alpha)) End If k= mf Do 520 m = k, l mm= m -1 mmm= m+1 temp9= se(n,m) temp1= se(nnn,m) If (temp1.EQ.0) then temp1= 2*se(n,m) - se(nn,m) Endif temp2= se(nn,m) if (temp2.EQ.0) then temp2= 2*se(n,m) - se(nnn,m) Endif temp3= se(n,mmm) if (temp3.EQ.0) then temp3= 2*se(n,m) - se(n,mm) Endif temp4= se(n,mm) if (temp4.EQ.0) then temp4= 2*se(n,m) - se(n,mmm) Endif if (k.EQ.l) then temp1= se(n,m) temp2= se(n,m) temp3= se(n,m) temp4= se(n,m) endif term= temp9 + temp3 + h(n,m) + h(nn,m) a(m)= se(n,m) -0.5*c2*(h(n,m)+h(n,mm)+se(n,m)+temp1)*v(n,m) + 0.5* c2*(h(nn,mm) + h(nn,m) + se(n,m) + temp2)*v(nn,m) if (m.EQ.mf) Then !mf es el primer nodo de la columna que se esta evaluando If (is.EQ.2) then !is=2 Frontera de Caudal Arriba a(m)= a(m)+up(n,mm)*0.5*c2*(h(n,mm) + h(nn,mm) + temp4 + temp9)
MIC 2003-II-46
127
Endif Endif if (m.EQ.l) Then !l es el ultimo nodo de la columna que se esta evaluando If (ir.EQ.2) then !Frontera de Caudal abajo a(m)= a(m)-up(n,mmm)*0.5*c2*(h(n,mmm)+h(nn,mmm)+temp9 + temp3) Endif Endif p(m)=0.5*c2*(h(n,m)+h(nn,m)+temp9+temp3)/(1+0.5*c2*(h(n,mm)+h(nn,mm)+temp4+ temp9)*r(mm)) q(m)= (a(m)+0.5*c2*(h(n,mm)+h(nn,mm)+temp4+temp9)*s(mm))/(1+0.5* c2*(h(n,mm) + h(nn,mm)+temp4+temp9)*r(mm)) IF (m.NE.l) THEN gamma= 0.5 temp10= u(nnn,m) if (temp10.EQ.0) then temp10= u(nn,m) Endif temp11= u(nn,m) if (temp11.EQ.0) then temp11= u(nnn,m) Endif temp6= dt*f-(1-gamma)*c2*(temp10-u(n,m))-gamma*c2*(u(n,m)-temp11) temp6= 0.25*temp6 b(m)= u(n,m)+temp6*(v(n,m)+v(n,mmm)+v(nn,m)+v(nn,mmm))-u(n,m)*sqrt(u(n,m)* u(n,m) + ((v(n,m)+v(n,mmm) + v(nn,m)+v(nn,mmm))*(v(n,m)+ v(n,mmm)+ v(nn,m)+ v(nn,mmm))/16))/((se(n,m)+ se(n,mmm)+ h(n,m)+ h(nn,m))*((c(n,m)+ c(n,mmm))*(c(n,m)+c(n,mmm))))*c4 b(m)= b(m)+ xx/term alpha= 0.5 temp1= 1+c2*(gra*p(m)+(1-alpha)*(u(n,mmm)-u(n,m))+alpha*(u(n,m)-u(n,mm))) r(m)= c1/temp1 s(m)= (b(m)+c1*q(m))/temp1 Endif 520 Continue IF (ir.NE.2) THEN !La frontera de abajo no es de caudal up(n,l)=0 !Velocidad en el muro es cero (0) IF (ir.NE.0) THEN !Si la frontera de abajo es de marea temp10= u(nnn,l) if (temp10.EQ.0) temp10= u(nn,l) temp11= u(nn,l) if (temp11.EQ.0) temp11= u(nnn,l) lll= l+1 ll= l-1 alpha= 0 u2=u(n,l) +xx/(h(n,l)+h(nn,l)+se(n,l)+se(n,lll)) up(n,l)= (-c1*sep(n,lll)+u2-u(n,l)*(c4*sqrt(u(n,l)*u(n,l) + ((v(n,l)+v(nn,l))*(v(n,l)+ v(nn,l))/16))/((se(n,l)+ se(n,lll)+h(n,l)+ h(nn,l))*((c(n,l)+c(n,lll))*(c(n,l)+c(n,lll))))) + 0.25*(dt*f -gamma* c2*(u(n,l)-temp11)-(1-gamma)*c2*(temp10- u(n,l)))*(v(n,l) + v(nn,l)) + c1*q(l))/(1+c2*(gra*p(l)+(u(n,l)-u(n,ll))* alpha)) Endif Endif saved= up(n,k-1) m= l Do 530 j= k, l !Ojo Calcula la velocidad de arriba en función de la Prof del nodo inmediatamente inferior mm= m-1 sep(n,m)= -p(m)*up(n,m)+q(m) up(n,mm)= -r(mm)*sep(n,m) + s(mm) m= m-1 530 Continue if(is.EQ.2) up(n,k-1)= saved !Frontera de caudal arriba num=num+1 End Do ! COMIENZA CALCULO EXPLICITO DE VP EN LA FILA M num= 2 mind= mfil-1 m=1 Do WHILE (NUM.LE.MIND) m=m+1
MIC 2003-II-46
128
msrch= mbd(num,1)*10+mbd(num,2) nf= mbd(num,3) l= mbd(num,4) ll= l-1 nff= nf -1 mmm= m+1 mm= m-1 IF (NF.NE.L) THEN !Si la columna no tiene un solo nodo Do 540 N = NF, LL nn= n-1 nnn= n+1 beta= 0.5 temp4= c2*((1-beta)*(v(nnn,m)-v(n,m))+beta*(v(n,m)-v(nn,m))) temp1=v(n,m)*v(n,m)+((up(n,m)+up(nnn,m)+up(n,mm)+up(nnn,mm))*(up(n,m)+ up(nnn,m)+ up(n,mm)+up(nnn,mm))/16) temp2=(sep(n,m) + sep(nnn,m) + h(n,mm) + h(n,m))*(c(n,m) + c(nnn,m))*(c(n,m) + c(nnn,m)) temp3= 1+ c4*sqrt(temp1)/temp2 + temp4 temp3= 1/temp3 delta=0.5 temp10= v(n,mmm) if (temp10.EQ.0) temp10= v(n,mm) temp11= v(n,mm) if (temp11.EQ.0) temp11= v(n,mmm) temp1= (dt*f+(1-delta)*c2*(temp10-v(n,m)) + delta*c2*(v(n,m)- temp11))*0.25 v2= v(n,m) +yy/(h(n,m)+h(n,mm)+sep(n,m)+sep(nnn,m)) vp(n,m)= temp3*(v2-temp1*(up(n,m)+up(nnn,m)+up(n,mm)+up(nnn,mm)) - c1*(se(nnn,m)-se(n,m))) 540 Continue Endif IF (MBD(NUM,2).EQ.1) THEN !Frontera de Marea en la parte derecha temp10= v(l,mmm) if(temp10.EQ.0) temp10=v(l,mm) temp11= v(l,mm) if(temp11.EQ.0) temp11=v(l,mmm) lll= l+1 beta=0 ll= l-1 temp4= c2*beta*(v(l,m)-v(ll,m)) temp1= v(l,m)*v(l,m)+((up(l,m)+up(l,mm))*(up(l,m)+up(l,mm))/16) temp2= (sep(l,m)+ sep(lll,m) + h(l,mm)+ h(l,m))*(c(l,m)+c(lll,m))*(c(l,m)+c(lll,m)) temp3= 1+c4*sqrt(temp1)/temp2+temp4 temp3= 1/temp3 delta= 0.5 temp1= 0.25*(dt*f+(1-delta)*c2*(temp10-v(l,m)) +delta*c2*(v(l,m)-temp11)) v2= v(l,m) + yy/(h(l,m)+h(l,mm)+sep(l,m)+sep(lll,m)) vp(l,m)= temp3*(v2-temp1*(up(l,m)+up(l,mm))-c1*(se(lll,m)-se(l,m))) Endif IF (MBD(NUM,1).EQ.1) THEN !Frontera de Marea en la parte izquierda temp10= v(nff,mmm) if (temp10.EQ.0) temp10= v(nff,mm) temp11= v(nff,mm) if (temp11.EQ.0) temp11= v(nff,mmm) beta=1 temp4= c2*(1-beta)*(v(nf,m)-v(nff,m)) temp1=v(nff,m)*v(nff,m)+((up(nf,m)+up(nf,mm))*(up(nf,m)+up(nf,mm))/16) temp2=(sep(nff,m)+sep(nf,m)+h(nff,m)+h(nff,mm))*(c(nf,m)+c(nff,m))*(c(nf,m)+c(nff,m)) temp3= 1+c4*sqrt(temp1)/temp2 + temp4 temp3= 1/temp3 delta= 0.5 temp1= 0.25*(dt*f+(1-delta)*c2*(temp10-v(nff,m)) +delta*c2*(v(nff,m)-temp11)) v2= v(nff,m) + yy/(h(nff,m)+h(nff,mm)+sep(nff,m)+sep(nf,m)) vp(nff,m)= temp3*(v2-temp1*(up(nf,m)+up(nf,mm))-c1*(se(nf,m)-se(nff,m))) Endif num= num+1 End Do ! Fin del METODO = 1, es decir Botony ELSE !METODO ALTERNO num= 2 mind= mfil-1
MIC 2003-II-46
129
m=1 Do While (NUM.LE.MIND) is= mbd(num,1) ir= mbd(num,2) m= m+1 nf= mbd(num,3) l= mbd(num,4) nff= nf -1 mmm= m+1 mm= m -1 r(nff)= 0 s(nff)= 0 IF (IS.EQ.1) THEN !Frontera de marea en la parte izquierda temp10= v(nff,mmm) if (temp10.EQ.0) temp10= u(nff,mm) temp11= v(nff,mm) if (temp11.EQ.0) temp11= v(nff,mmm) delta= 0.5 beta= 1 r(nff)= c1/(1 + c2*(v(nf,m)-v(nff,m))*(1-beta)) v2= v(nff,m) + yy/(h(nff,m)+h(nff,mm)+se(nff,m)+se(nf,m)) s(nff)= v2+c1*sep(nff,m) - v(nff,m)*sqrt(v(nff,m)*v(nff,m) + (u(nf,m) + u (nf,mm))*(u(nf,m) + u(nf,mm))/16)*c4/((se(nff,m)+ se(nf,m) + h(nff,m) + h(nff,mm))*((c(nff,m)+c(nf,m))*(c(nff,m)+c(nf,m)))) s(nff)= (s(nff) -0.25*(dt*f + (1-delta)*c2 *(temp10 - v(nff,m)) + delta*c2*(v(nff,m) - temp11))*(u(nf,m)+u(nf,mm))) s(nff)= s(nff)/(1 + c2*(v(nf,m) - v(nff,m))*(1 - beta)) Endif k= nf Do 550 N= K, L nn= n -1 nnn= n+1 temp9= se(n,m) temp1= se(n,mmm) if (temp1.EQ.0) temp1= 2*se(n,m) - se(n,mm) temp2= se(n,mm) if (temp2.EQ.0) temp2= 2*se(n,m) - se(n,mmm) temp3= se(nnn,m) if (temp3.EQ.0) temp3= 2*se(n,m) - se(nn,m) temp4= se(nn,m) if (temp4.EQ.0) temp4= 2*se(n,m) - se(nnn,m) if (k.EQ.l) then temp1= se(n,m) temp2= se(n,m) temp3= se(n,m) temp4= se(n,m) Endif term= temp9 + temp3 + h(n,m) + h(n,mm) a(n)= se(n,m) -0.5*c2*(h(n,m)+h(nn,m)+se(n,m)+temp1)*u(n,m) + 0.5*c2*(h(n,mm) + h(nn,mm) + se(n,m) + temp2)*u(n,mm) if (n.EQ.nf) Then If (is.EQ.2) then !Frontera de caudal en la parte izquierda a(n)= a(n)+vp(nn,m)*0.5*c2*(h(nn,mm) + h(nn,m) + temp4 + temp9) Endif Endif if (n.EQ.l) Then If (ir.EQ.2) then !Frontera de caudal en la parte derecha a(n)= a(n)-vp(nnn,m)*0.5*c2*(h(nnn,m)+h(nnn,mm)+temp9 + temp3) Endif Endif p(n)= 0.5*c2*(h(n,m)+h(n,mm)+temp9+temp3)/(1+0.5*c2*(h(nn,m)+h(nn,mm)+ temp4+temp9)* r(nn)) q(n)= (a(n)+0.5*c2*(h(nn,m)+h(nn,mm)+temp4+temp9)*s(nn))/(1+0.5* c2*(h(nn,m) + h(nn,mm) + temp4+ temp9)*r(nn)) IF (N.NE.L) THEN delta= 0.5 temp10= v(n,mmm) if (temp10.EQ.0) temp10= v(n,mm) temp11= v(n,mm) if (temp11.EQ.0) temp11= v(n,mmm)
MIC 2003-II-46
130
temp6= dt*f+(1-delta)*c2*(temp10-v(n,m))+delta*c2*(v(n,m)-temp11) temp6= 0.25*temp6 b(n)= v(n,m)-temp6*(u(n,m)+u(nnn,m) + u(nnn,mm) + u(n,mm))-v(n,m) * sqrt(v(n,m)* v(n,m) + ((u(n,m)+u(nnn,m)+ u(n,mm)+u(nnn,mm))*(u(n,m)+u(nnn,m)+ u(n,mm)+u(nnn,mm))/16))/((se(n,m)+ se(nnn,m)+ h(n,m)+ h(n,mm))*((c(n,m)+c(nnn,m))*(c(n,m)+c(nnn,m))))*c4 b(n)= b(n)+ yy/term beta= 0.5 temp1= 1+c2*(gra*p(n)+(1-beta)*(v(nnn,m)-v(n,m))+beta*(v(n,m)-v(nn,m))) r(n)= c1/temp1 s(n)= (b(n)+c1*q(n))/temp1 Endif 550 Continue lll= l+1 IF (IR.NE.2) THEN !No es frontera de caudal a la derecha vp(l,m)=0 IF (IR.NE.0) THEN !Es frontera de marea a la derecha temp10= v(l,mmm) if (temp10.EQ.0) temp10= v(l,mm) temp11= v(l,mm) if (temp11.EQ.0) temp11= v(l,mmm) lll= l+1 ll= l-1 beta= 0 v2=v(l,m) +yy/term vp(l,m)= (-c1*sep(lll,m)+v2-v(l,m)*(c4*sqrt(v(l,m)*v(l,m)+((u(l,m)+u(l,mm))*(u(l,m)+ u(l,mm))/16))/((se(l,m)+se(lll,m)+h(l,m)+h(l,mm))*((c(l,m)+c(lll,m))*(c(l,m)+c(lll,m))))) + 0.25*(dt*f+(1-delta)*c2*(temp10- v(l,m))+ delta*c2*(v(l,m)-temp11))*(u(l,m)+ u(l,mm)) + c1*q(l))/(1+c2*(gra*p(l)+(v(l,m)-v(ll,m))*beta)) Endif Endif saved= vp(k-1,m) n= l Do 560 j= k, l nn= n-1 sep(n,m)= -p(n)*vp(n,m)+q(n) vp(nn,m)= -r(nn)*sep(n,m) + s(nn) n= n-1 560 Continue if(is.EQ.2) vp(k-1,m)= saved num=num+1 End Do ! COMIENZA CALCULO EXPLICITO DE UP EN LA COLUMNA N num= 2 nind= ncol-1 n=1 Do WHILE (NUM.LE.NIND) nsrch= nbd(num,1)*10+nbd(num,2) n= n+1 mf= nbd(num,3) l= nbd(num,4) ll= l-1 lll=l+1 mff= mf - 1 nnn= n+1 nn= n-1 IF (MF.NE.L) THEN Do 570 M = MF, LL mm= m-1 mmm= m+1 alpha= 0.5 temp4= c2*((1-alpha)*(u(n,mmm)-u(n,m))+alpha*(u(n,m)-u(n,mm))) temp1=u(n,m)*u(n,m) + ((v(n,m) + v(n,mmm) + v(nn,m)+v(nn,mmm)) * (v(n,m)+ v(n,mmm) + v(nn,m)+v(nn,mmm))/16) temp2=(sep(n,m) + sep(n,mmm) + h(n,m)+h(nn,m))*(c(n,m)+ c(n,mmm))* (c(n,m)+ c(n,mmm)) temp3= 1+ c4*sqrt(temp1)/temp2 + temp4 temp3= 1/temp3 gamma=0.5 temp10= u(nnn,m) if (temp10.EQ.0) temp10= u(nn,m)
MIC 2003-II-46
131
temp11= u(nn,m) if (temp11.EQ.0) temp11= u(nnn,m) temp1= (dt*f-(1-gamma)*c2*(temp10-u(n,m)) - gamma*c2*(u(n,m)- temp11))*0.25 u2= u(n,m) +xx/(h(n,m)+h(nn,m)+sep(n,m)+sep(n,mmm)) up(n,m)= temp3*(u2+temp1*(vp(n,m) + vp(n,mmm) + vp(nn,m)+vp(nn,mmm)) - c1* (se(n,mmm)- se(n,m))) 570 Continue Endif IF (NBD(NUM,2).EQ.1) THEN temp10= u(nnn,l) if(temp10.EQ.0) temp10=u(nn,l) temp11= u(nn,l) if(temp11.EQ.0) temp11=u(nnn,l) alpha=0 temp4= c2*alpha*(u(n,l)-u(n,ll)) temp1= u(n,l)*u(n,l)+((v(n,l)+v(nn,l))*(v(n,l)+v(nn,l))/16) temp2= (sep(n,l)+ sep(n,lll) + h(n,l)+ h(nn,l))*(c(n,l)+c(n,lll))*(c(n,l)+c(n,lll)) temp3= 1+c4*sqrt(temp1)/temp2+temp4 temp3= 1/temp3 gamma= 0.5 temp1= 0.25*(dt*f-(1-gamma)*c2*(temp10-u(n,l)) -gamma*c2*(u(n,l)-temp11)) u2= u(n,l) + xx/(h(n,l)+h(nn,l)+sep(n,l)+sep(n,lll)) up(n,l)= temp3*(u2+temp1*(vp(n,l)+vp(nn,l))-c1*(se(n,lll)-se(n,l))) Endif IF (NBD(NUM,1).EQ.1) THEN temp10= u(nnn,mff) if (temp10.EQ.0) temp10= u(nn,mff) temp11= u(nn,mff) if (temp11.EQ.0) temp11= u(nnn,mff) alpha=1 temp4= c2*(1-alpha)*(u(n,mf)-u(n,mff)) temp1=u(n,mff)*u(n,mff)+((v(n,mf)+v(nn,mf))*(v(n,mf)+v(nn,mf))/16) temp2=(sep(n,mff)+sep(n,mf)+h(n,mff)+h(nn,mff))*(c(n,mf)+c(n,mff))*(c(n,mf)+c(n,mff)) temp3= 1+c4*sqrt(temp1)/temp2 + temp4 temp3= 1/temp3 gamma= 0.5 temp1= 0.25*(dt*f-(1-gamma)*c2*(temp10-u(n,mff)) -gamma*c2*(u(n,mff)-temp11)) u2= u(n,mff) + xx/(h(n,mff)+h(nn,mff)+sep(n,mff)+sep(n,mf)) up(n,mff)= temp3*(u2+temp1*(vp(n,mf)+vp(nn,mf))-c1*(se(n,mf)-se(n,mff))) Endif num= num+1 End Do Endif !Fin METODO = 2, Metodo alterno !*********************************************************************** ¡*****************Inicio programa de calculo de calidad del agua if (calidad.eq."Y") then do 804 nfrontcal = 1, 7 SELECT CASE (nfrontcal) CASE (1) !Sustancia conservativa Salinidad Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, cse, caudsal, salp, dtsal, dtsalrio) CASE (2) !Demanda Bioquimica de Oxigeno Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, dbose, cauddbo, dbop, dtdbo, dtdborio) CASE (3) !Nitrogeno Organico Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, nose, caudno, nop, dtno, dtnorio) CASE (4) !Nitrogeno Amoniacal Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, namose, caudnamo, namop, dtnamo, dtnamorio) CASE (5) !Nitritos Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, nitrise, caudnitri, nitrip, dtnitri, dtnitririo) CASE (6) !Nitratos Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, nitrase, caudnitra, nitrap, dtnitra, dtnitrario)
MIC 2003-II-46
132
CASE (7) !Oxigeno Disuelto Call fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, OxiDisse, caudOxiDis, OxiDisp, dtOxiDis, dtOxiDisrio) END SELECT 804 continue num= 2; n= 1; nind= ncol-1 Do while (num.LE.nind) n = n + 1; mf = nbd(num,3); l = nbd(num,4); mff = mf - 1 nnn = n + 1; nn = n - 1; k= mf Do 581 m = k, l mm= m -1; mmm= m+1 if (nbd(num,2).eq.2.and.m.eq.l) then xyz = 2 else prof1 = sep(n,m) prof5 = se(n,m) if (sep(n,mm).EQ.0) then prof2 = sep(n,m) else prof2 = sep(n,mm) endif if (sep(nn,mm).EQ.0) then If (sep(nn,m).EQ.0) then prof3 = sep (n,m) else prof3 = sep(nn,m) endif else prof3 = sep(nn,mm) endif if (sep(nn,m).EQ.0) then prof4 = sep(n,m) else prof4 = sep(nn,m) endif if (se(n,mm).EQ.0) then prof6 = se(n,m) else prof6 = se(n,mm) endif if (se(nn,mm).EQ.0) then If (se(nn,m).EQ.0) then prof7 = se (n,m) else prof7 = se(nn,m) endif else prof7 = se(nn,mm) endif if (se(nn,m).EQ.0) then prof8 = se(n,m) else prof8 = se(nn,m) endif hmedant = (prof8 + prof7 + prof6 + prof5)/4 + h(n,m) hprom1 = (prof3 + prof4)/2 + (h(n,m) + h(nn,m))/2 hprom2 = (prof1 + prof2)/2 + (h(n,m) + h(nnn,m))/2 hprom3 = (prof3 + prof2)/2 + (h(n,m) + h(n,mm))/2 hprom4 = (prof4 + prof1)/2 + (h(n,m) + h(n,mmm))/2 hmedact = hmedant + (vp(nn,m) * hprom1 - vp(n,m) * hprom2 + up(n,mm) * hprom3 - up(n,m) * hprom4)* dt/500 ¡********************************************************************************** ¡****************Evalua calidad en la malla completa
MIC 2003-II-46
133
do 805 ncalcpar = 1, 7 SELECT CASE (ncalcpar) CASE (1) !Sustancia conservativa Salinidad call defparameter (sal, Stemp1, Stemp2, Stemp3, Stemp4, Stemp5, Stemp6, Stemp7, Stemp8, up, vp, n, nn, nnn, m, mm, mmm) salp (n,m) = Stemp1 * hprom1 - Stemp2 * hprom2 + Stemp3 * hprom3 - Stemp4 * hprom4 salp (n,m) = salp (n,m) + Dsal/dx * (hprom1*Stemp5 + hprom2*Stemp6 + hprom3*Stemp7 + hprom4*Stemp8) salp (n,m) = sal(n,m) * hmedant / hmedact + dt*salp(n,m)/(dx*hmedact) CASE (2) !Demanda Bioquimica de Oxigeno call defparameter (dbo, DBOtemp1, DBOtemp2, DBOtemp3, DBOtemp4, DBOtemp5, DBOtemp6, DBOtemp7, DBOtemp8, up, vp, n, nn, nnn, m, mm, mmm) dbop (n,m) = DBOtemp1 * hprom1 - DBOtemp2 * hprom2 + DBOtemp3 * hprom3 - DBOtemp4 * hprom4 !Advección dbop (n,m) = dbop (n,m) + Ddbo/dx * (hprom1*DBOtemp5 + hprom2*DBOtemp6 + hprom3*DBOtemp7 + hprom4*DBOtemp8) !Dispersión dbop (n,m) = dbop (n,m) - Kdbo*dx*hmedact*dbo(n,m) !Decaimiento primer orden dbop (n,m) = dbop (n,m) - VSdbo*dx*dbo(n,m) !Sedimentación dbop (n,m) = dbo(n,m) * hmedant / hmedact + dt*dbop(n,m)/(dx*hmedact) CASE (3) !Nitrogeno Organico call defparameter (no, notemp1, notemp2, notemp3, notemp4, notemp5, notemp6, notemp7, notemp8, up, vp, n, nn, nnn, m, mm, mmm) nop (n,m) = notemp1 * hprom1 - notemp2 * hprom2 + notemp3 * hprom3 - notemp4 * hprom4 !Advección nop (n,m) = nop (n,m) + Dno/dx * (hprom1*notemp5 + hprom2*notemp6 + hprom3*notemp7 + hprom4*notemp8) !Dispersión nop (n,m) = nop (n,m) - Kno*dx*hmedact*no(n,m) !Decaimiento primer orden nop (n,m) = no(n,m) * hmedant / hmedact + dt*nop(n,m)/(dx*hmedact) CASE (4) !Nitrogeno Amoniacal call defparameter (namo, namotemp1, namotemp2, namotemp3, namotemp4, namotemp5, namotemp6, namotemp7, namotemp8, up, vp, n, nn, nnn, m, mm, mmm) namop (n,m) = namotemp1 * hprom1 - namotemp2 * hprom2 + namotemp3 * hprom3 - namotemp4 * hprom4 !Advección namop (n,m) = namop (n,m) + Dnamo/dx * (hprom1*namotemp5 + hprom2*namotemp6 + hprom3*namotemp7 + hprom4*namotemp8) !Dispersión namop (n,m) = namop (n,m) + Kno*dx*hmedact*no(n,m) - Knamo*dx*hmedact*namo(n,m) !Decaimiento primer orden namop (n,m) = namo(n,m) * hmedant / hmedact + dt*namop(n,m)/(dx*hmedact) CASE (5) !Nitritos call defparameter (nitri, nitritemp1, nitritemp2, nitritemp3, nitritemp4, nitritemp5, nitritemp6, nitritemp7, nitritemp8, up, vp, n, nn, nnn, m, mm, mmm) nitrip (n,m) = nitritemp1 * hprom1 - nitritemp2 * hprom2 + nitritemp3 * hprom3 - nitritemp4 * hprom4 !Advección nitrip (n,m) = nitrip (n,m) + Dnitri/dx * (hprom1*nitritemp5 + hprom2*nitritemp6 + hprom3*nitritemp7 + hprom4*nitritemp8) !Dispersión nitrip (n,m) = nitrip (n,m) + Knamo*dx*hmedact*namo(n,m) - Knitri*dx*hmedact*nitri(n,m) !Decaimiento primer orden nitrip (n,m) = nitri(n,m) * hmedant / hmedact + dt*nitrip(n,m)/(dx*hmedact) CASE (6) !Nitratos call defparameter (nitra, nitratemp1, nitratemp2, nitratemp3, nitratemp4, nitratemp5, nitratemp6, nitratemp7, nitratemp8, up, vp, n, nn, nnn, m, mm, mmm) nitrap (n,m) = nitratemp1 * hprom1 - nitratemp2 * hprom2 + nitratemp3 * hprom3 - nitratemp4 * hprom4 !Advección nitrap (n,m) = nitrap (n,m) + Dnitra/dx * (hprom1*nitratemp5 + hprom2*nitratemp6 + hprom3*nitratemp7 + hprom4*nitratemp8) !Dispersión nitrap (n,m) = nitrap (n,m) + Knitri*dx*hmedact*nitri(n,m) !Decaimiento primer orden nitrap (n,m) = nitra(n,m) * hmedant / hmedact + dt*nitrap(n,m)/(dx*hmedact) CASE (7) !Oxigeno Disuelto call defparameter (OxiDis, OxiDistemp1, OxiDistemp2, OxiDistemp3, OxiDistemp4, OxiDistemp5, OxiDistemp6, OxiDistemp7, OxiDistemp8, up, vp, n, nn, nnn, m, mm, mmm) !Incertar lo relacionado con el calculo del coeficiente de eaireación OxiDisp (n,m) = OxiDistemp1 * hprom1 - OxiDistemp2 * hprom2 + OxiDistemp3 * hprom3 - OxiDistemp4 * hprom4 !Advección
MIC 2003-II-46
134
OxiDisp (n,m) = OxiDisp (n,m) + DOxiDis/dx * (hprom1*OxiDistemp5 + hprom2*OxiDistemp6 + hprom3*OxiDistemp7 + hprom4*OxiDistemp8) !Dispersión OxiDisp (n,m) = OxiDisp (n,m) + KOxiDis*dx*hmedact*(OxiSat-OxiDis(n,m)) ! Reaireación OxiDisp (n,m) = OxiDisp (n,m) - Kdbo*dx*hmedact*dbo(n,m) !Demanda Bioquimica de oxigeno OxiDisp (n,m) = OxiDisp (n,m) - Kbentica*dx*OxiDis(n,m) !Demanda Bentica OxiDisp (n,m) = OxiDisp (n,m) - Roa*Knamo*dx*hmedact*namo(n,m) !Paso de Amoniacal a Nitrito OxiDisp (n,m) = OxiDisp (n,m) - Roi*Knitri*dx*hmedact*nitri(n,m) !Paso de Nitrito a Nitrato OxiDisp (n,m) = OxiDis(n,m) * hmedant / hmedact + dt*OxiDisp(n,m)/(dx*hmedact) END SELECT 805 continue endif 581 continue num=num+1 end do endif ! Fin del programa de cálculo de calidad del agua ¡******************************************************************************************************************++ ¡****************************Cambio de la matriz anterior por la matriz actual Do 580 n= 1, ncol Do 590 m= 1, mfil u(n,m)= up(n,m) v(n,m)= vp(n,m) se(n,m)= sep(n,m) if (sep(247,1).gt.10) then maxtime = itime endif if (calidad.eq."Y") then sal(n,m)= salp(n,m) dbo(n,m) = dbop(n,m) no(n,m) = nop(n,m) namo(n,m) = namop(n,m) nitri(n,m) = nitrip(n,m) nitra(n,m) = nitrap(n,m) OxiDis(n,m) = OxiDisp(n,m) Temperatura (n,m) = Temperp (n,m) ENDIF 590 Continue 580 Continue !**************fin Botony If (contimp.LE.numres) Then If (itime.EQ.nprint(contimp)) Then print *,'Itime: ', itime !print *,'Profundidad Barra=',se(247,5),'Velocidad',u(247,5) contimp = contimp + 1 call imprimares (itime, dt, u, v, se, sal, dbo, no, namo, nitri, nitra, OxiDis, ncol, mfil, Temperatura, calidad) Endif EndIf !print *,'Tiempo (Horas)', itime*dt sdee = itime*dt sdee1 = sdee / 3600 sdef = itime*dt/3600 If (sdee1.EQ.sdef) Then print *,'Tiempo (Horas)', itime*dt/3600 call imprimaest (xx, yy, cd1, cd2, dt, nest, u, v, coord, dirco, velco, se, dia, hora, vi, dirvi) Endif 20 continue !*****************************************Fin del programa de calculo call imprimadat (numres, ncol, mfil) !Datos de entrada que utiliza matlab provisional
MIC 2003-II-46
135
close (2) end !************************************************************************************************ !Termina el programa principal !************************************************************************************************ !Esta subrutina abre los archivos de datos de profundidad, velocidades y datos de entrada. subroutine aberturaarch(calidad) Character *1 calidad OPEN (UNIT=1, STATUS='old', file='cienaga.txt') OPEN (UNIT=2, STATUS='old', file='datos4.txt') OPEN (UNIT=3, STATUS='old', file='velx4.txt') OPEN (UNIT=4, STATUS='old', file='vely4.txt') OPEN (UNIT=5, STATUS='old', file='nivel4.txt') if (calidad.eq."Y") then OPEN (UNIT=30, STATUS='old', file='Temperatura4.txt') OPEN (UNIT=31, STATUS='old', file='salinidad4.txt') OPEN (UNIT=32, STATUS='old', file='DBO4.txt') OPEN (UNIT=33, STATUS='old', file='NitOrg4.txt') OPEN (UNIT=34, STATUS='old', file='NitNH4.txt') OPEN (UNIT=35, STATUS='old', file='Nitrito4.txt') OPEN (UNIT=36, STATUS='old', file='Nitrato4.txt') OPEN (UNIT=37, STATUS='old', file='OxiDis4.txt') OPEN (UNIT=50, STATUS='old', file='DatTemp.txt') OPEN (UNIT=51, STATUS='old', file='SusNoCon.txt') OPEN (UNIT=52, STATUS='old', file='DatDBO.txt') OPEN (UNIT=53, STATUS='old', file='DatNO.txt') OPEN (UNIT=54, STATUS='old', file='DatNA.txt') OPEN (UNIT=55, STATUS='old', file='DatNI.txt') OPEN (UNIT=56, STATUS='old', file='DatNN.txt') OPEN (UNIT=57, STATUS='old', file='DatOD.txt') ENDIF end subroutine !************************************************************************************************ !Esta subrutina lee los valores de entrada del archivo cienaga.xxx. subroutine lea1(aux,nprint) Integer aux, cont, cont2 Real reg(20) dimension nprint (3000) cont = 0 do while (cont.LT.aux) read (unit=1, fmt=307) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20) j = 1 cont2 = cont + j do while (cont2.LE.aux.and.j.LE.20) nprint (cont2) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 20 Enddo 307 format (F6.0,F6.0,f6.0,f6.0,f6.0,F6.0,F6.0,f6.0,f6.0,f6.0,F6.0,F6.0,f6.0,f6.0,f6.0,F6.0,F6.0,f6.0,f6.0,f6.0) end subroutine !********** subroutine lea2(aux, l, viento, cd1, cd2)
MIC 2003-II-46
136
Integer aux, cont, cont2, l Real reg(20) dimension viento (500,2) cont = 0 do while (cont.LT.aux) read (unit=1, fmt=308) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20) j = 1 cont2 = cont + j do while (cont2.LE.aux.and.j.LE.20) if (abs(reg(j)).LE.3) then viento (cont2,l)= reg(j)*reg(j)*cd1 else viento (cont2,l)= reg(j)*reg(j)*cd2 endif if (reg(j).LT.0) then viento (cont2,l)= - viento (cont2,l) endif j = j + 1 cont2 = cont + j Enddo cont = cont + 20 Enddo do 351 i = cont2, 500 !nmaxviento viento(i,l)= viento (1,l) 351 continue 308 format (F6.4,F6.4,f6.4,f6.4,f6.4,F6.4,F6.4,f6.4,f6.4,f6.4,F6.4,F6.4,f6.4,f6.4,f6.4,F6.4,F6.4,f6.4,f6.4,f6.4) end subroutine !********** subroutine lea3(aux, mar, xse) Integer aux, cont, cont2 Real reg(20) dimension xse (1002,4) cont = 0 do while (cont.LT.aux) read (unit=1, fmt=309) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20) j = 1 cont2 = cont + j do while (cont2.LE.aux.and.j.LE.20) xse (cont2,mar) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 20 Enddo do 352 i = cont2, 500 !nmaxdatmarea xse(i,mar)= xse (1,mar) 352 continue 309 format (F5.3,F5.3,f5.3,f5.3,f5.3,F5.3,F5.3,f5.3,f5.3,f5.3,F5.3,F5.3,f5.3,f5.3,f5.3,F5.3,F5.3,f5.3,f5.3,f5.3) end subroutine !********** subroutine lea4(a, ncol, mfil, archivo) Integer cont, cont2, archivo Real reg(60) dimension a (300, 300) do 353 w = 1, mfil cont = 0 do while (cont.LT.ncol)
MIC 2003-II-46
137
read (unit=archivo, fmt=310) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) j = 1 cont2 = cont + j do while (cont2.LE.ncol.and.j.LE.60) a (cont2,w) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 60 Enddo 353 continue 310format(F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f 5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4,F5.4,F5.4,f5.4,f5.4,f5.4) end subroutine !********** subroutine lea5(aux, l, caud, nfrqcol, nfrqfil, nmaxdatrio) Integer aux, cont, cont2 !, nmaxdatrio Real reg(20), aux2, aux3 Double precision caud (1002, 4) cont = 0 aux2 = aux aux3 = aux2 / 20 do while (cont.LT.aux2) read (unit=1, fmt=311) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20) j = 1 cont2 = cont + j do while (cont2.LE.aux.and.j.LE.20) caud (cont2,l) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 20 Enddo do 354 i = cont2, nmaxdatrio caud(i,l)= caud (1,l) 354 continue 311 format (F7.4,F7.4,f7.4,f7.4,f7.4,F7.4,F7.4,f7.4,f7.4,f7.4,F7.4,F7.4,f7.4,f7.4,f7.4,F7.4,F7.4,f7.4,f7.4,f7.4) end subroutine !********** subroutine codigos(mbd,nbd, mfil, ncol, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd) Integer cont, cont2, z dimension mbd(540,4),nbd(540,4), nobd(4,4), mobd(4,4), nqbd(4,4), mqbd(4,4) i = 1 do while (i.LE.mfil) read (unit=1, fmt=312) mbd (i,1), mbd (i,2), mbd (i,3), mbd (i,4), z do 355 l = 1, z do 356 j = 1, 4 mbd (i+l,j) = mbd (i,j) 356 continue 355 continue If (z.NE.0) then i = i + z +1 else i = i + 1
MIC 2003-II-46
138
endif enddo i = 1 do w hile (i.LE.ncol) read (unit=1, fmt=312) nbd (i,1), nbd (i,2), nbd (i,3), nbd (i,4), z do 357 l = 1, z do 358 j = 1, 4 nbd (i+l,j) = nbd (i,j) 358 continue 357 continue If (z.NE.0) then i = i + z +1 else i = i + 1 endif enddo do 359 i = 1, nfrmcol read (unit=1, fmt=313) nobd (i,1), nobd (i,2), nobd (i,3), nobd (i,4) 359 continue do 360 i = 1, nfrmfil read (unit=1, fmt=313) mobd (i,1), mobd (i,2), mobd (i,3), mobd (i,4) 360 continue do 361 i = 1, nfrqcol read (unit=1, f mt=313) nqbd (i,1), nqbd (i,2), nqbd (i,3), nqbd (i,4) 361 continue do 362 i = 1, nfrqfil read (unit=1, fmt=313) mqbd (i,1), mqbd (i,2), mqbd (i,3), mqbd (i,4) 362 continue 312 format (i7,i7,i7,i7,i7) 313 format (i7,i7,i7,i7) end subroutine ¡******************************************************************************************************* !Rutinas de lectura de datos para calidad del agua subroutine leacalidad (var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11, var12, var13, nfrmcol, nfrmfil, maxtime, dt, numrios, nfrqcol, nfrqfil, nmaxdatrio, nobd, mobd, nqbd, mqbd, ncol, mfil) double precision var1, var2 integer var6, var11, aux Real var7, var13, dt Real var3(4), var4 (4), var8 (10), var9 (10) Double precision var5 (1002,4), var10 (1002,4) double precision var12 (300, 300) read (unit=var6, fmt=903) var1 read (unit=var6, fmt=903) var2 do 801 i = 1, nfrmcol + nfrmfil read (unit=var6, fmt=905) var3(i), var4(i) aux = maxtime * dt / var3 (i) If (var4(i) .EQ. 1) then call lea31 (aux, i, var5, var6) else read (unit=var6, fmt=907) var7 Call lea40 (aux, i, var5, var7) endif 801 continue do 802 i = 1, numrios read (unit=var6, fmt=905) var8 (i), var9 (i) aux = maxtime * dt / var8 (i) If (var9(i) .EQ. 1) then call lea51 (aux, i, var10, nfrqcol, nfrqfil, nmaxdatrio, var6)
MIC 2003-II-46
139
else read (unit=var6, fmt=907) var7 Call lea40 (aux, i, var10, var7) endif 802 continue read (unit=var6, fmt=906) var11 if (var11 .EQ. 0) then read (unit=var6, fmt=907) var13 Call fronteras2(dt, 0, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, var5, var10, var12, var3, var8) Else call lea41 (var12, ncol, mfil, var6) endif close(var6) 903 format (F10.2) 905 format (F6.0,F2.0) 906 format (i6) 907 format (F9.7) end subroutine !*******************************************Fin de entrada de datos para modelación de la calidad del agua !********** si la entrada de datos es Vs Tiempo subroutine lea31(aux, mar, mse, archivo) Integer aux, cont, cont2, archivo Real reg(20) double precision mse (1002,4) cont = 0 do while (cont.LT.aux) read (unit=archivo, fmt=314) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20) j = 1 cont2 = cont + j do while (cont2.LE.aux.and.j.LE.20) mse (cont2,mar) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 20 Enddo do 363 i = cont2, 500 !nmaxdatmarea mse(i,mar)= mse (1,mar) 363 continue 314 format (F6.4,F6.4,f6.4,f6.4,f6.4,F6.4,F6.4,f6.4,f6.4,f6.4,F6.4,F6.4,f6.4,f6.4,f6.4,F6.4,F6.4,f6.4,f6.4,f6.4) end subroutine !**********Lectura de datos de calidad del agua en toda la malla, con doble precision OJO LEA 41 = LEA 42 subroutine lea41(a, ncol, mfil, archivo) Integer cont, cont2, archivo Real reg(60) double precision a (300, 300) do 353 w = 1, mfil cont = 0 do while (cont.LT.ncol) read (unit=archivo, fmt=310) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) j = 1
MIC 2003-II-46
140
cont2 = cont + j do while (cont2.LE.ncol.and.j.LE.60) a (cont2,w) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 60 Enddo 353 continue 310format(F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4,F8.4) end subroutine !********** Si se alimenta un dato constante para todo T subroutine lea40 (aux, mar, mse, cinicial) Integer aux, cont, cont2 real cinicial double precision mse (1002,4) cont = 0 do 364 cont = 1, aux mse (cont,mar) = cinicial 364 continue do 365 i = aux+1, 500 !nmaxdatmarea mse(i,mar)= mse (1,mar) 365 continue end subroutine !********** subroutine lea51(aux, l, concent , nfrqcol, nfrqfil, nmaxdatrio, archivo) Integer aux, cont, cont2, archivo !, nmaxdatrio Real reg(20), aux2, aux3 double precision concent (1002, 4) cont = 0 aux2 = aux aux3 = aux2 / 20 do while (cont.LT.aux2) read (unit=archivo, fmt=311) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20) j = 1 cont2 = cont + j do while (cont2.LE.aux.and.j.LE.20) concent (cont2,l) = reg (j) j = j + 1 cont2 = cont + j Enddo cont = cont + 20 Enddo do 354 i = cont2, nmaxdatrio concent (i,l)= concent (1,l) 354 continue 311 format (F7.4,F7.4,f7.4,f7.4,f 7.4,F7.4,F7.4,f7.4,f7.4,f7.4,F7.4,F7.4,f7.4,f7.4,f7.4,F7.4,F7.4,f7.4,f7.4,f7.4) end subroutine !********** subroutine imprimadat(numres, ncol, mfil) If (ncol.LT.60) then numcol = 60 else numcol = ncol endif write (unit=2,fmt=469) numres
MIC 2003-II-46
141
write (unit=2,fmt=469) numcol write (unit=2,fmt=469) mfil-1 469 format (i6) end subroutine !************************************************************************************************ !Procedimiento de escritura de resultados de velocidad y niveles a los archivos correspondientes subroutine imprimares(itime, dt, u, v, se, sal, dbo, no, namo, nitri, nitra, OxiDis, ncol, mfil, Temperatura,calidad) real aux, aux1, dt Character *1 calidad !nteger double precision u (300, 300), v (300, 300), se (300, 300), sal (300, 300), dbo (300, 300) double precision no (300, 300), namo (300, 300), nitri (300, 300), nitra (300, 300), OxiDis (300, 300), Temperatura(300, 300) print *,'Impresión de Archivos Resultados ' aux = itime * dt aux1 = aux / 3600 write (unit=3,fmt=461) aux1 write (unit=4,fmt=461) aux1 write (unit=5,fmt=461) aux1 do 355 i = 30, 37 write (unit=I,fmt=461) aux1 355 continue 461 format (f8.4) call Escriba4 (u,2, ncol, mfil) call Escriba4 (v,3, ncol, mfil) call Escriba4 (se,4, nc ol, mfil) if (calidad.eq."Y") then call Escriba4 (sal,5, ncol, mfil) call Escriba4 (dbo,6, ncol, mfil) call Escriba4 (no,7, ncol, mfil) call Escriba4 (namo,8, ncol, mfil) call Escriba4 (nitri,9, ncol, mfil) call Escriba4 (nitra,10, ncol, mfil) call Escriba4 (OxiDis,11, ncol, mfil) call Escriba4 (Temperatura,12, ncol, mfil) ENDIF !Falta incluir los demas parametros end subroutine !************************************************************************************************ !Imprime los resultados de estaciones puntuales en forma de tabla. subroutine imprimaest(xx, yy, cd1, cd2, dt, nest, u, v, coord, dirco, velco, se, dia, hora, vi, dirvi) integer dia double precision u(300, 300), v(300, 300), se(300, 300) real coord (20,2), hora, dt double precision vix, viy, vi, velco character*2 dirvi, dirco double precision xx, yy vix = sqrt(abs(xx)/cd1/dt) IF (vix.GE.2.9) then vix = sqrt(abs(xx)/cd2/dt) endif if (xx.LT.0) then vix = -vix endif viy = sqrt(abs(yy)/cd1/dt) if (viy.GE.2.9) then viy = sqrt(abs(yy)/cd2/dt) endif
MIC 2003-II-46
142
if (yy.LT.0) then viy = -viy endif call direccion(vix,viy,dirvi,vi) do 701 i = 1, nest call direccion(u(coord(i,2),coord(i,1)),v(coord(i,2),coord(i,1)),dirco,velco) write (unit=i+5,fmt=710) dia, hora, se(coord(i,2),coord(i,1)), vi, dirvi, velco, dirco 701 continue 710 format (i3, f7.2, f6.2, f8.2,2x, A, f8.4,2x, A) end subroutine !************************************************************************************************ !Lee o interpola los datos variables en cada iteración subroutine datosit(dtrio, media, sol, lun, tmar, nfrmfil, nfrmcol, itime, dt, datmar, dtxse, xia, xse, xx, yy, dtviento, viento, numrios, velrio, caud, dia, hora) integer aux1, aux2, i, dia, mes, dtviento real z , tmar, tmar1, hora, aux3 ,dt dimension datmar(4), dtxse(4), xse(1002,4), viento(500,2) Double precision caud(1002,4) double precision xia(4), velrio(4) integer dtrio (10) real media (12), sol (6,12), lun (6,12) double precision xx, yy pi = 3.141592654 aux1= itime*dt do 901 i = 1, nfrmfil+nfrmcol if (datmar (i).EQ.1) then aux2 = aux1 / dtxse(i) aux3 = aux1 - aux2 * dtxse(i) if (aux3.EQ.0) then xia(i)= xse(aux2+1,i) else z = aux3/dtxse (i) xia(i)= z*xse(aux2+2,i) + (1-z)*xse(aux2+1,i) endif else tmar1 = dt*1000000 /3600 tmar = tmar + tmar1/1000000 dia = tmar / 24 hora = tmar - dia * 24 mes = dia / 30+1 xia(i) = media(mes) + sol(1,mes)*cos((15*tmar - sol(4,mes))*pi/180)+ sol(2,mes)*cos((30*tmar - sol(5,mes))*pi/180) + sol(3,mes)*cos((60*tmar - sol(6,mes))*pi/180) + lun(1,mes)*cos((14.5*tmar - lun(4,mes))*pi/180) + lun(2,mes)*cos((29.0*tmar - lun(5,mes))*pi/180) + lun(3,mes)*cos((58.0*tmar - lun(6,mes))*pi/180) endif 901 continue aux2 = aux1 / dtviento aux3 = aux1 - aux2 * dtviento if (aux3.EQ.0) then xx = viento (aux2+1,1)*dt yy = viento (aux2+1,2)*dt else z = aux3/dtviento xx = (z*viento(aux2+2,1) + (1-z)*viento(aux2+1,1))*dt yy = (z*viento(aux2+2,2) + (1-z)*viento(aux2+1,2))*dt endif do 902 i = 1, numrios aux2 = aux1 / dtrio(i) aux3 = aux1 - aux2 * dtrio(i) if (aux3.EQ.0) then velrio(i) = caud(aux2+1,i) else
MIC 2003-II-46
143
z = aux3/dtrio(i) velrio(i) = caud(aux2+1,i)*(1-z) + z*caud(aux2+2,i) endif 902 continue end subroutine !************************************************************************************************ !Asigna los valores de nivel y velocidad en las respectivas fronteras de marea o caudal subroutine fronteras(nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, sep, xia, velrio, vp, up) Double precision sep(300, 300), up(300, 300), vp(300, 300) dimension nobd(4,4), mobd(4,4), nqbd(4,4), mqbd(4,4) double precision xia(4), velrio(4) do 902 i= 1, nfrmcol do 903 j= nobd(i,2), nobd(i,3) sep (nobd(i,1), j) = xia(i) 903 continue 902 continue do 904 i= 1, nfrmfil do 905 j= mobd(i,2), mobd(i,3) sep (j, mobd(i,1)) = xia(nfrmcol+i) 905 continue 904 continue do 906 i = 1, nfrqcol do 907 j = nqbd(i,2), nqbd(i,3) vp (nqbd(i,1),j) = velrio(i) 907 continue 906 continue do 908 i = 1, nfrqfil do 909 j = mqbd(i,2), mqbd(i,3) up (j, mqbd(i,1)) = velrio(nfrqcol + i) 909 continue 908 continue end subroutine !************************************************************************************************ !Escritura de datos en cada nodo de la malla de diferencia !Se escriben 60 datos por fila subroutine escriba4 (a,nom, ncol, mfil) Integer aux, cont, cont2 Real reg(60), aux2, aux3 double precision a (300, 300) cont = 1 aux2 = ncol do while (cont.LE.mfil) !Ojo Cambie LT por LE cont2 = 0 do while (cont2.LT.aux2) !Ojo Cambie LE por LT j = 1 do while (j.LE.60) reg (j) = a (cont2+j,cont) j = j + 1 enddo cont2 = cont2 + 60 SELECT CASE (nom) CASE (1) write (unit=2, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (2)
MIC 2003-II-46
144
write (unit=3, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (3) write (unit=4, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (4) write (unit=5, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (5) write (unit=31, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (6) write (unit=32, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (7) write (unit=33, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (8) write (unit=34, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (9) write (unit=35, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (10) write (unit=36, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (11) write (unit=37, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) CASE (12) write (unit=30, fmt=331) reg(1), reg(2), reg(3), reg(4), reg(5), reg(6), reg(7), reg(8), reg(9), reg(10), reg(11), reg(12), reg(13), reg(14), reg(15), reg(16), reg(17), reg(18), reg(19), reg(20), reg(21), reg(22), reg(23), reg(24), reg(25), reg(26), reg(27), reg(28), reg(29), reg(30), reg(31), reg(32), reg(33), reg(34), reg(35), reg(36), reg(37), reg(38), reg(39), reg(40), reg(41), reg(42), reg(43), reg(44), reg(45), reg(46), reg(47), reg(48), reg(49), reg(50), reg(51), reg(52), reg(53), reg(54), reg(55), reg(56), reg(57), reg(58), reg(59), reg(60) END SELECT Enddo cont = cont + 1
MIC 2003-II-46
145
Enddo 331format(F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4,F8.4,F8.4,f8.4,f8.4,f8.4) end subroutine !************************************************************************************************ !Se determina la magnitud y dirección del vector de velocidad de viento y corriente !formado por los componentes X y Y, se aprox a N, NE, E, SE, S, SO, O, NO subroutine direccion (u, v, dir, mag) character*2 dir double precision mag, pi, u, v pi = 3.141592654 ! double precision u, v mag = sqrt(v*v+u*u); if (v.NE.0) then a = atan(abs(u)/abs(v))*180/pi endif if (v.LT.0) then if (u.LT.0) then if ((a.GT.22.5).and.(a.LT.67.5)) then dir = 'NW' else if (a.LT.22.5) then dir = 'W ' else dir = 'N ' endif endif Else if ((a.GT.22.5).and.(a.LT.67.5)) then dir = 'SW' else if (a.LT.22.5) then dir = 'W ' else dir = 'S ' endif endif endif else if (v.GT.0) then if (u.LT.0) then if ((a.GT.22.5).and.(a.LT.67.5)) then dir = 'NE' else if (a.LT.22.5) then dir = 'E ' else dir = 'N ' endif endif else if ((a.GT.22.5).and.(a.LT.67.5)) then dir = 'SE' else if (a.LT.22.5) then dir = 'E ' else dir = 'S ' endif endif endif else if (u.LT.0) then dir = 'N '
MIC 2003-II-46
146
else dir = 'S ' endif endif endif end subroutine !************************************************************************************************ !Asigna los valores concentración en las respectivas fronteras de marea o caudal subroutine fronteras2(dt, itime, nfrmcol, nfrmfil, nfrqcol, nfrqfil, nobd, mobd, nqbd, mqbd, marea, riocaudal, concant, deltatiempo, dtdatorio) double precision concant(300, 300) dimension nobd(4,4), mobd(4,4), nqbd(4,4), mqbd(4,4) double precision marea(1002,4), riocaudal(1002,4) integer aux1, aux2, i real z , aux3, dt dimension deltatiempo (4) !, cse(1002,4), viento(500,2), caud(100,4) double precision tempmarea(4), tempcaudal(4) real dtdatorio (10) aux1= itime*dt do 931 i = 1, nfrmfil+nfrmcol aux2 = aux1 / deltatiempo (i) aux3 = aux1 - aux2 * deltatiempo(i) if (aux3.EQ.0) then tempmarea(i)= marea (aux2+1,i) else z = aux3/deltatiempo (i) tempmarea(i)= z* marea(aux2+2,i) + (1-z)*marea(aux2+1,i) endif 931 continue do 932 i = 1, nfrqcol+nfrqfil aux2 = aux1 / dtdatorio(i) aux3 = aux1 - aux2 * dtdatorio(i) if (aux3.EQ.0) then tempcaudal(i) = riocaudal(aux2+1,i) else z = aux3/dtdatorio(i) tempcaudal(i) = riocaudal(aux2+1,i)*(1-z) + z*riocaudal(aux2+2,i) endif 932 continue do 933 i= 1, nfrmcol do 934 j= nobd(i,2), nobd(i,3) concant (nobd(i,1), j) = tempmarea(i) 934 continue 933 continue do 935 i= 1, nfrmfil do 936 j= mobd(i,2), mobd(i,3) concant (j, mobd(i,1)) = tempmarea(nfrmcol+i) 936 continue 935 continue do 937 i = 1, nfrqcol do 938 j = nqbd(i,2), nqbd(i,3) concant (nqbd(i,1),j) = tempcaudal(i) 938 continue 937 continue do 939 i = 1, nfrqfil do 940 j = mqbd(i,2), mqbd(i,3) concant (j, mqbd(i,1)) = tempcaudal(nfrqcol + i) 940 continue
MIC 2003-II-46
147
939 continue end subroutine !********************************************************************************************************** !Calcula las variables temporales 1 a 8, las cuales equivalen a las diferencia de concentración !en los factores de aspersión y disperción. subroutine defparameter (matriz, Ctemp1, Ctemp2, Ctemp3, Ctemp4, Ctemp5, Ctemp6, Ctemp7, Ctemp8, up, vp, n, nn, nnn, m, mm, mmm ) double precision Ctemp1, Ctemp2, Ctemp3, Ctemp4, Ctemp5, Ctemp6, Ctemp7, Ctemp8 double precision up(300, 300), vp (300, 300), matriz (300, 300) if (vp(nn,m).GE.0) then Ctemp1 = matriz (nn,m) * vp(nn,m) else Ctemp1 = matriz (n,m) * vp(nn,m) endif if (vp(n,m).GE.0) then Ctemp2 = matriz (n,m) * vp(n,m) else Ctemp2 = matriz (nnn,m) * vp(n,m) endif if (up(n,mm).GE.0) then Ctemp3 = matriz (n,mm) * up(n,mm) else Ctemp3 = matriz (n,m) * up(n,mm) endif if (up(n,m).GE.0) then Ctemp4 = matriz (n,m) * up(n,m) else Ctemp4 = matriz (n,mmm) * up(n,m) endif If (matriz(nn,m).EQ.0) then Ctemp5 = 0 else Ctemp5 = matriz(nn,m) - matriz(n,m) endif If (matriz(nnn,m).EQ.0) then Ctemp6 = 0 else Ctemp6 = matriz(nnn,m) - matriz(n,m) endif If (matriz(n,mm).EQ.0) then Ctemp7 = 0 else Ctemp7 = matriz(n,mm) - matriz(n,m) endif If (matriz(n,mmm).EQ.0) then Ctemp8 = 0 else Ctemp8 = matriz(n,mmm) - matriz(n,m) endif end subroutine
MIC 2003-II-46
148
ANEXO B: CÓDIGO DE COMPUTADOR (LecDatos.m)
%LecDatos.m Lectura de archivos planos tipo txt a archivo de memoria de Matlab % Juan Carlos Lozano Sierra % Tesis de Grado, MSc Ingenieria Civil y Ambiental % Universidad de los Andes (Bogotá-Colombia) % Revision: 5.0 $ $Fecha: 24/07/2003 1:55:00 A.M. $ clear if ~exist('MovieGUIFlag'), figNumber=0; end; hlpStr= ... [' Este programa lee los datos de modelo bidimensional ' hidrodinámico y de calidad para cuerpos ' ' de agua poco profundos. ']; mvinit(figNumber,hlpStr); %Este programa lee los resultados del modelo bidimensional hidrodinámico y %de calidad para cuerpos de agua poco profundos, los cuales son obtenidos mediante %una rutina elaborada en Fortran, generando un archivo de datos cuyos %valores son leidos directamente por Matlab para su graficación fid = fopen('datos4.txt'); times = fscanf(fid,'%fg',[1]); %numero de iteraciones impresas m = fscanf(fid,'%fg',[1]); %numero de columnas n = fscanf(fid,'%fg',[1]); %numero de filas fclose (fid) fid = fopen('DBO4.txt'); fid2 = fopen('Salinidad4.txt'); fid3 = fopen('Nivel4.txt'); for k =1:times %lectura de datos desde archivo tiempo(k)=fscanf(fid,'%f5.3',1); tiempo(k)=fscanf(fid2,'%f5.3',[1]); tiempo(k)=fscanf(fid3,'%f5.3',[1]); if k == 1 b = fscanf(fid,'%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g',[m n]); % It has two rows now. e = fscanf(fid2,'%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g',[m n]); % It has two rows now. f = fscanf(fid3,'%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g',[m n]); % It has two rows now. else b(:,:,k) = fscanf(fid,'%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g',[m n]); % It has two rows now. e(:,:,k) = fscanf(fid2,'%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g',[m n]); % It has two rows now. f(:,:,k) = fscanf(fid3,'%g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g %g',[m n]); % It has two rows now. end end
MIC 2003-II-46
149
fclose(fid) fclose(fid2) fclose(fid3) for j= 1: n for i = 1:m if f(i,j,1) == 0 c(i,j) = NaN; t(i,j) = 0; else c(i,j) = 1; t(i,j) = NaN; end end end save DBOC b c m n times tiempo hlpStr figNumber t save SALC e c m n times tiempo hlpStr figNumber t save NIVELC f c m n times tiempo hlpStr figNumber t clear
MIC 2003-II-46
150
ANEXO C: CÓDIGO DE COMPUTADOR (Movie3d.m)
clear R=1; while R < 4, if ~exist('MovieGUIFlag'), figNumber=0; end; hlpStr= ... [' Que parámetro desea observar? ' ' 1. Nivel ' ' 2. Salinidad ' ' 3. Demanda Bioquímica de Oxígeno ' ' 9. Para finalizar la visualización ']; mvinit(figNumber,hlpStr); R = input ('Cual es su elección ?'); if R==9 break end load NIVELC load DBOC load SALC [n,m,l] = size(f); x = (1:n); y = (1:m); colormap(hsv(128)); if R==1 hold on; zlabel (['Nivel (m)']); grid on; end if R==2 hold on; zlabel (['SALINIDAD (g/L)']); grid on; end if R==3 hold on; zlabel (['B.D.O (mg/L)']); grid on; end view(135, 25); % Generate the movie. nframes = l; M = moviein(nframes); for k = 1:nframes, cla if R==1 %NIVEL axis([1 m 1 n 0.0 0.6]); L = f(:,:,k).*c; surfc(y,x,t); surfc(y,x,L); caxis([0.4 0.6]); title(['Tiempo Modelado = ',num2str(tiempo(k)),' Horas']); %plot (X,Velx11(k,:),'r-',X,Velx12(k,:),'b+',X,Velx13(k,:),'yo','LineWidth',1,'MarkerSize',2); axis([1 199 0.25 0.35]); set(gca,'xtick',0); set(gca,'fontsize',8);ylabel('Velocidad (m/s)') caxis([0 0.6]) end if R==2 %SALINIDAD axis([1 m 1 n 0 35]); L = e(:,:,k).*c; surfc(y,x,t); surfc(y,x,L); caxis([0 35]); title(['Tiempo Modelado = ',num2str(tiempo(k)),' Horas']); caxis([0 15]) end if R==3 %DBO axis([1 m 1 n 0 15]);
MIC 2003-II-46
151
L = b(:,:,k).*c; surfc(y,x,t); surfc(y,x,L); caxis([0 15]); title(['Tiempo Modelado = ',num2str(tiempo(k)),' Horas']); caxis([0 15]) end % Capture the frame M(:,k) = mvframe(figNumber,nframes); end; hold off end