Influencia del Régimen Hídrico en la Zonificación de la Vegetación de Ribera

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Influencia del Régimen Hídrico en la Zonificación de la Vegetación de Ribera"

Transcripción

1 Influencia del Régimen Hídrico en la Zonificación de la Vegetación de Ribera Autor: Joaquín Real Llanderal Director: Prof. Félix Francés García

2

3 RESUMEN: Las riberas son una parte esencial de los ecosistemas fluviales. Representan una zona de transición entre el medio acuático, de caudales circulantes, y el medio terrestre adyacente al río, recibiendo la influencia hidrológica de ambos, al constituir un espacio compartido en el ciclo del agua, de los sedimentos y de los nutrientes. La situación actual de una buena parte de las riberas en España es mala (Ibero, 1996). Son numerosos los factores que han provocado esta situación (agricultura, transportes, urbanización, contaminación, canalizaciones ) dando lugar a que las riberas pierdan o experimenten un deterioro tanto en su estructura como en su funcionalidad. La limitación del caudal circulante así como la modificación de la frecuencia e intensidad de las avenidas se han constituido como algunos de los principales factores que impiden la regeneración natural de los bosques riparios. Es por ello que los planes de restauración de riberas deben pasar necesariamente por dotar al río de libertad y de suministrarle los caudales adecuados para favorecer su correcto funcionamiento, la conexión con su llanura de inundación y la continuidad de los procesos ecológicos que en ella se desarrollan. El siguiente trabajo de investigación tiene como objetivo principal el desarrollo de un modelo matemático que permita simular la vegetación riparia para un determinado tramo de río. Para conseguir este objetivo se ha adaptado el modelo de humedad del suelo Ribav a las condiciones de la España mediterránea. Posteriormente se ha desarrollado el software de Ribav-1D con el lenguaje de programación Visual Basic.net, con el fin de poder utilizar el modelo en puntos de simulación individuales. Con este software se ha realizado un análisis de sensibilidad manual del modelo Ribav. A continuación se ha calibrado y validado el modelo Ribav para un tramos de estudio natural y 1 tramo alterado de la demarcación hidrográfica del Júcar. Para poder utilizar mapas grid con este modelo se ha creado también el software Ribav 2D que permite utilizar el modelo bidimensionalmente con capas de formato ASCII-Raster. Como Ribav es un modelo que no contempla algunos procesos que ocurren en las riberas (efecto del esfuerzo cortante, sucesión vegetal, reclutamiento de especies ) se ha optado por unir Ribav 2D con el software del modelo de vegetación dinámica Ripflow v.2, utilizando la tecnología COM (Component Object Model). Para comparar los resultados de las simulaciones con los datos obtenidos en campo del modelo unido Ribav2D-Ripflow se ha diseñado una aplicación visual con librerías de MapWindow GIS que permite determinar el grado de aciertos en la simulación del tipo de vegetación mediante el coeficiente Kappa de Cohen.

4 ABSTRACT: Riverbanks are an essential part of the riparian ecosystems. They represent a transition zone between the aquatic medium of the river flows and the terrestrial medium adjacent to the river, receiving the influence of both. They compose a shared space for the water cycle, the sediments and the nutrients. The current situation of most of the riverbeds in Spain is bad. There are a lot of factors which have caused this situation (agriculture, transport, urbanization, pollution, canalizations ) making the river shores deteriorate both in their structure and in their functionality. The limitation in river flows and the modification of the frequencies and intensities of the floods are some of the main causes which prevent the correct regeneration of the riparian forests. Therefore the riverbank restoration plans should begin by supplying the river the correct flows to favour their proper functioning, the connection with their floodplain and the continuity of the ecological processes which take place. The general goal of the following research project is to develop a mathematical model which simulates the riparian vegetation of a given river stretch. To obtain this goal the soil moisture model Ribav has been upgraded and adapted to the conditions of the Mediterranean regions of Spain. Subsequently the Ribav1D software has been developed with the Visual Basic.net programming language. The aim of this program is to use the model for individual simulation points. With the help of this software a manual sensitivity analysis of the Ribav software has been carried out. Additionally, the Ribav model has been calibrated and validated for 1 non-altered and 1 altered river stretches of Jucar basin district. The Ribav2D software has been created to use grid maps, with ASCII-Raster format. Even so Ribav is a model that does not take into account certain riparian processes (shear stress effect, plant succession, recruitment ). For that reason the Ribav2D model has been merged with a dynamical vegetation model called Ripflow v.2, using COM (Component Object Model) technology. Additionally a visual application has been designed to compare the results of the simulations of the Ribav2D-Ripflow merged model (by using MapWindow GIS libraries). This application determines the accurateness of the simulation by using the Cohen Kappa Coefficient.

5 RESUM: Les riberes són una part essencial dels ecosistemes fluvials, aunque la situació actual d'una bona part de les riberes a Espanya és roïna. Són nombrosos els factors que han provocat esta situació (agricultura, transports, urbanització, contaminació, canalizaciones...) donant lloc a què les riberes perden o experimenten un deteriorament tant en la seua estructura com en la seua funcionalitat És per això que els plans de restauració de riberes han de passar necessàriament per dotar al riu de llibertat i de subministrar-li els cabals adequats per a afavorir el seu funcionament correcte, la connexió amb la seua plana d'inundació i la continuïtat dels processos ecològics que en ella es desenrotllen. El següent treball d'investigació té com a objectiu principal el desenrotllament d'un model matemàtic que permeta simular la vegetació riparia per a un determinat tram de riu. Per a aconseguir este objectiu s'ha adaptat el model d'humitat del sòl 'Ribav' a les condicions de l'espanya mediterrània. Posteriorment s'ha desenrotllat el programa de Ribav-1D amb el llenguatge de programació Visual Basic.net, a fi de poder utilitzar el model en punts de simulació individuals. Amb este programa s'ha realitzat una anàlisi de sensibilitat manual del model 'Ribav'. A continuació s'ha calibrat i validat el model 'Ribav'. Per a poder utilitzar mapes grid amb este model s'ha creat també el programa Ribav 2D que permet utilitzar el model bidimensionalment amb capes de format ASCII-Raster. Com Ribav és un model que no contempla alguns processos que ocorren en les riberes s'ha optat per unir Ribav 2D amb el programa del model de vegetació dinàmica 'Ripflow v.2', uilizando la tecnologia COM (Component Object Model). Per a comparar els resultats de les simulacions amb les dades obtinguts en camp del model unit 'Ribav2D-Ripflow', s'ha dissenyat una aplicació visual amb llibreries de MapWindow GIS, que permet determinar el grau d'encerts en la simulació del tipus de vegetació per mitjà del coeficient Kappa de Cohen.

6 TABLA DE CONTENIDOS 1.- INTRODUCCIÓN OBJETIVOS Y METODOLOGÍA DEL TRABAJO ANTECEDENTES ESTADO DEL ARTE Balance Hídrico Conceptual: Movimientos de Agua en la Ribera La Evapotranspiración de la Vegetación de Ribera DESCRIPCION DE LOS MODELOS MATEMATICOS UTILIZADOS MODELO DE HUMEDAD DEL SUELO RIBAV Esquema general Curva de humedad del suelo Modelización de los flujos Ascenso Hidráulico Radicular Ascenso Hidráulico Capilar Excedente hídrico del suelo Evapotranspiración El índice de ET Resumen de variables y parámetros Parámetros básicos de suelo del modelo Parámetros básicos de vegetación del modelo Datos de entrada hidro-meteorológicos... 27

7 Parámetros generales del modelo Variables internas del modelo Variable de salida del modelo MODELO DE VEGETACION DINÁMICA RIPFLOW Introducción Zonificación Espacial Estructura del Modelo Primer Componente del Modelo: Condición Inicial Estática Segunda Componente del Modelo: Llanura de Inundación Dinámica Tercera Componente del Modelo: Vistas Output COEFICIENTE KAPPA DE COHEN DISEÑO DEL SOFTWARE MODELO DE HUMEDAD DE SUELO RIBAV Plataforma y características generales Estructura del programa Interfaz gráfica de usuario Utilización del Software de Ribav 1D Instalación del software y operaciones previas Carpetas y archivos del programa Preparación previa de los archivos de entrada (inputs) Organización de Ventanas de Ribav1D... 55

8 Ejecución del Software en Ribav1D Resultados obtenidos mediante la simulación del software de Ribav1D MODELO RIBAV2D Y SU INTEGRACIÓN CON RIPFLOW Diferencias entre Ribav 1D y 2D Integración de Ribav 2D en Ripflow Utilización de la tecnología Component Object Model (COM) Utilización del Modulo Ribav2D PROGRAMA PARA EL CALCULO DEL COEFICIENTE KAPPA DE COHEN ENTRE LOS MAPAS DE VEGETACIÓN OBSERVADA Y VEGETACIÓN SIMULADA DE RIPFLOW V CASOS DE ESTUDIO LOCALIZACIÓN DE LOS TRAMOS DE ESTUDIO Río Serpis en Lorcha Río Mijares en el Terde ESTIMACIÓN DE PARÁMETROS Parámetros de Suelo Datos Hidrometeorológicos Parámetros de Vegetación Clasificación utilizada para los de tipos funcionales de vegetación ANÁLISIS DE SENSIBILIDAD Planteamiento del análisis de sensibilidad Parámetros de Vegetación Variable de Salida Principal del Modelo... 94

9 Escenarios Utilizados durante el Análisis de Sensibilidad Escenarios de suelos Escenarios con distintos regímenes de caudal Escenarios para distintos puntos con distinta cota Modificaciones de los valores de los parámetros Resultados del análisis de sensibilidad Conclusiones del análisis de sensibilidad CALIBRACIÓN DEL MODELO Matriz de confusión Proceso de Calibración en Lorcha del Río Serpis (Régimen alterado) Simulación 1 de Lorcha Simulación 2 de Lorcha Simulación 3 de Lorcha Simulación 4 de Lorcha Parámetros de calibración en Lorcha Proceso de Calibración en Terde del Río Mijares (Régimen Natural) Simulación 1 de Terde Simulación 2 de Terde Simulación 3 de Terde VALIDACIÓN DEL MODELO CONCLUSIONES Y POSIBLES LÍNEAS DE ACTUACIÓN FUTURA

10 5.1.- CONCLUSIONES LÍNEAS DE ACTUACIÓN CON RESPECTO AL MODELO LÍNEAS DE ACTUACIÓN CON RESPECTO AL SOFTWARE REFERENCIAS ANEXO I TUTORIAL DE UTILIZACIÓN DEL MODULO RIBAV 2D (INGLÉS) ANEXO IV TUTORIAL DE UTILIZACIÓN DE LA APLICACIÓN PARA EL CÁLCULO DEL COEFICIENTE DE COHEN PARA MAPAS DE VEGETACIÓN (INGLÉS) ANEXO VII CÓDIGO FUENTE DEL PROGRAMA RIBAV-1D ANEXO VIII: CÓDIGO FUENTE DEL PROGRAMA RIBAV ANEXO IX: CÓDIGO FUENTE PROGRAMA PARA EL CALCULO DEL COEFICIENTE KAPPA DE COHEN ENTRE LOS MAPAS DE VEGETACIÓN OBSERVADA Y VEGETACIÓN SIMULADA243 ANEXO X: TABLAS DE RESULTADOS DEL ANÁLISIS DE SENSIBILIDAD ANEXO XI: TABLAS DE PARÁMETROS DE SUELO

11 1.- INTRODUCCIÓN

12 1.1.- OBJETIVOS Y METODOLOGÍA DEL TRABAJO Los ecosistemas de ribera son ecosistemas muy dinámicos que dependen de determinados regímenes de caudales para sus persistencia, debido a que muchas especies vegetales necesitan quedar inundadas o cubiertas por nuevos sedimentes para poder regenerarse. En la actualidad quedan muy pocos bosques de ribera en Europa y se considera que ha desaparecido el 90 % de su extensión original debido a causas antrópicas. La directiva europea de hábitats considera que los bosques riparios son el ecosistema natural más amenazado. Los bosques riparios albergan una gran diversidad de especies vegetales y proporcionan también hábitat o refugio a una gran cantidad de animales. Además tienen otras funciones de gran importancia: proporcionan corredores a la fauna a lo largo del territorio, almacenan agua y recargan los acuíferos durante los periodos de avenida, proporcionan recursos silvícolas y controlan o reducen la contaminación al reciclar el exceso de nutrientes producidos en las zonas agrícolas. A pesar de la gran importancia de estos ecosistemas y de su conservación y restauración, en algunos casos existen conflictos en los usos fluviales. En el pasado las mayores amenazas a los procesos riparios han sido su deforestación para uso agrícolas, la modificación del recorrido de los cauces y la construcción de presas y azudes. Todas estas actuaciones han tenido como efecto, el reducir las conexiones entre los ríos y sus llanuras de inundación, reduciendo al mismo tiempo la habilidad de los bosques riparios para regenerarse de forma natural. Hoy en día todas estas alteraciones continúan existiendo, aunque existe una mayor concienciación por parte de la sociedad sobre la necesidad de restaurar los ecosistemas amenazados y de la reconectar los ríos con sus llanuras de inundación adyacentes. Los bosques riparios son muy dependientes de las series de caudales y de la renovación de sedimentos. Necesitan una gran variedad de flujos en el río, zonas con elevada humedad y gran cantidad de sedimentos para la regeneración, semillas y material vegetativo para propagarse y niveles freáticos adecuados para el desarrollo de los árboles. Específicamente los bosques de ribera necesitan caudales de intensidad de media a baja que recarguen y rellenen las capas freáticas. Estos flujos permiten el crecimiento de los árboles recién establecidos. Además también necesitan flujos altos de forma periódica que causen modificaciones en el recorrido del cauce y que produzcan la deposición de sedimentos, lo que causa que se creen lugares aptos para la regeneración vegetal. La variación de caudales y niveles del río durante el periodo de crecimiento también es positiva porque favorece la distribución de semillas y el establecimiento de plántulas. También es necesario que después de un periodo de crecidas el flujo disminuya pero de forma gradual para que el nivel freático también disminuya de la misma forma para que las plántulas se desarrollen de forma adecuada. Las especies arbóreas pioneras de los bosques riparios necesitan lugares abiertos porque no toleran muy bien la competencia. Como las especies pioneras no tienen un sistema radicular muy desarrollado necesitan que durante el primer periodo de crecimiento el nivel freático no esté a demasiada profundidad. Los lugares cercanos a la orilla del río suelen ser los más adecuados para su establecimiento por tener más humedad, más sedimentos acumulados y más materia orgánica. Los bosques riparios se pueden propagar de diversas formas. Una de ellas es el transporte de semillas producido por el mismo río y que quedan depositadas durante las inundaciones. Otra forma es mediante la propagación de semillas por la acción de los vientos dominantes. Una tercera forma 7

13 sería mediante el material vegetativo (tallos, bulbos, raíces.) que es transportado durante las crecidas o se crea de forma local como resultado de éstas. Con este trabajo de investigación se pretende contribuir a la modelización de la mayoría de los procesos antes mencionados que tienen lugar en los ecosistemas vegetales riparios a escala local. Se pretende que las herramientas desarrolladas en este trabajo, contribuyan a facilitar la compresión sobre el funcionamiento de estos complejos ecosistemas. Al mismo tiempo se pretende facilitar la toma de decisiones por parte de los organismos que se dedican a la gestión y a la restauración de los espacios fluviales. Por tanto el objetivo principal de este trabajo es el desarrollo de un modelo matemático que permita simular la distribución de los distintos tipos de vegetación riparia para un determinado tramo de río. Para conseguir este objetivo se han llevado a cabo las siguientes actividades: Perfeccionamiento y adaptación del modelo de humedad del suelo Ribav a las condiciones de la España mediterránea. El modelo Ribav había sido utilizado con éxito en tramos de estudio de Guatemala y ha sido adaptado para ser utilizado en los ríos de la España mediterránea. Desarrollo del software de Ribav-1D con Visual Basic.net 2008, con el fin de poder utilizar el modelo en puntos de simulación individuales. Este software ha sido utilizado durante el desarrollo y adecuación del modelo y podrá ser utilizado también en el futuro en otros trabajos de investigación o también por los usuarios finales de modelo. Realización de un análisis de sensibilidad manual del modelo Ribav. Este análisis ha servido para determinar el grado de relevancia de los parámetros del modelo que no habían podido ser estimados previamente. Adicionalmente ha servido para facilitar la comprensión de los procesos que intervienen en el modelo. Calibración y validación del modelo Ribav para 1 tramo de estudio natural y 1 tramo alterados de la demarcación hidrográfica del Júcar. Con los parámetros más sensibles se ha llevado a cabo la calibración del modelo. Para la validación se ha utilizado un tramo natural y otro alterado para probar la adecuación del modelo. Desarrollo del software de Ribav-2D, que permite utilizar el modelo bidimensionalmente con capas grid de formato ASCII-Raster. Esta nueva versión ha sido realizada porque en la actualidad las plataformas SIG permiten que los datos grid sean más fáciles de procesar y los resultados más fáciles de interpretar, a pesar de que las simulaciones tengan un coste computacional más alto. Unión del programa Ribav-2D con el software del modelo de vegetación dinámica Ripflow v.2. Tras los procesos de calibración/validación se ha observado que el modelo funciona satisfactoriamente en los tramos de estudio de la zona mediterránea española. Aún así dicho modelo no tiene en cuenta ciertos procesos destacados que ocurren en la zonas riparias (esfuerzo cortante, reclutamiento, sucesión vegetal.). Con el fin de mejorar las simulaciones, el modelo Ribav2D ha sido unido y complementado con el modelo Ripflow que tiene en cuenta más procesos. Diseño de una aplicación visual con librerías de MapWindow GIS, que permite determinar el grado de aciertos en las simulaciones mediante el coeficiente Kappa de Cohen. Aunque los resultados de una simulación 2D son más fáciles de interpretar, estos han exigido el 8

14 desarrollo de esta aplicación con el fin de automatizar el tratamiento de la gran cantidad de datos producidos. 9

15 1.2.- ANTECEDENTES Las riberas son una parte esencial de los ecosistemas fluviales. Representan una zona de transición entre el medio acuático, de caudales circulantes, y el medio terrestre de las inmediaciones del río, recibiendo la influencia hidrológica de ambos, al constituir un espacio compartido en el ciclo del agua, de los sedimentos y de los nutrientes (González del Tánago 1998; Weltya et.al., 2002). La modelación de procesos a escala de ribera, puede partir tanto de una clasificación de su vegetación basada en la filogénesis (Ferreira et al, 2005; Rodríguez-González et al, 2004; Tabacchi y Planty-Tabacchi, 2003) como en otros sistemas no filogenéticos e incluso de descripción genérica basada en teledetección (Lite y Stromberg, 2005; Webb y Leake, 2006). En climas semiáridos destaca la aplicación de la clasificación por grupos funcionales de vegetación (Baird y Maddock 2005; Horton et al, 2001) como marco propicio de análisis de la interacción de factores bióticos y abióticos. Es claro que la supervivencia de las plantas no se debe exclusivamente a la disponibilidad de agua, si no también a la presencia de nutrientes, sales minerales, dióxido de carbono, etc. (Terradas, 2001). Sin embargo, en climas áridos y semiáridos, estas últimas juegan un papel prácticamente secundario, siendo la frecuencia de ocurrencia del límite de la disponibilidad de agua en el suelo, la responsable de que la vegetación entre en estado de estrés hídrico (Goodwin y Tarboton, 2001; Rodríguez-Iturbe y Porporato, 2004). A escala de ribera, el ciclo hidrológico debe estimarse con la suficiente precisión como para ser útil en la evaluación de recursos hídricos y de frecuencia de las crecidas (Altier et al, 2002; Richards et al, 1996). En la mayor parte de los modelos de vegetación, la ecuación que determina su crecimiento real en función del crecimiento potencial, selecciona el máximo estrés entre los de humedad, nutrientes y temperatura, de tal forma que si uno domina, el resto no juega ningún papel (Altier et al, 2002). En el caso de las riberas de los cauces, el contenido de humedad y la posición del nivel freático están marcados por el régimen hidrológico del río (Richards et al, 1996), que depende tanto de la hidrología de la cuenca vertiente como de las modificaciones introducidas por el hombre a través especialmente de la construcción de embalses. Además, es crucial en el desarrollo de la vegetación de ribera la frecuencia y magnitud de las inundaciones (Tabacchi et al, 1998), ya que éstas generan rupturas bruscas en el crecimiento por arrastre de parte o de toda la masa vegetal. La situación actual de una buena parte de las riberas en España es mala (Ibero, 1996). Son numerosos los factores que han provocado esta situación (agricultura, transportes, urbanización, contaminación, canalizaciones ) dando lugar a que las riberas pierdan o experimenten un deterioro tanto en su estructura como en su funcionalidad. La limitación del caudal circulante así como la modificación de la frecuencia e intensidad de las avenidas se han constituido como algunos de los principales factores que impiden la regeneración natural de los bosques riparios. 10

16 Es por ello que los planes de restauración de riberas deben pasar necesariamente por dotar al río de libertad y de suministrarle los caudales adecuados para favorecer su correcto funcionamiento, la conexión con su llanura de inundación y la continuidad de los procesos ecológicos que en ella se desarrollan. Estas ideas ya se reflejaron en el Plan Hidrológico del Júcar (1999). Según el artículo 18 se considera como caudal ecológico o medioambiental la disponibilidad de caudales que permitan el mantenimiento y la recuperación de los ecosistemas propios de cada tramo de río. En el mismo artículo, apartados d y e, se considera prioritario el mantenimiento del caudal medioambiental en los siguientes casos: Espacios naturales valiosos determinados por la Administración Medio Ambiental, con especial atención a casos singulares de bosque de ribera. Afección a zonas húmedas ó a tramos fluviales de interés ambiental. Ya más recientemente, la Ley de Aguas, después de su modificación en 2005, establece que a efectos de la la asignación y reserva de recursos para usos y demandas actuales y futuros, así como para la conservación y recuperación del medio natural... se determinarán los caudales ecológicos, entendiendo como tales los que mantiene como mínimo la vida piscícola que, de manera natural, habitaría o pudiera habitar en el río, así como su vegetación de ribera. 11

17 1.3.- ESTADO DEL ARTE Balance Hídrico Conceptual: Movimientos de Agua en la Ribera Se han hecho importantes avances para demostrar la relevancia del ascenso hidráulico radicular y de la redistribución hidráulica de agua en el suelo y en la disponibilidad de agua de las plantas. Así se ha consolidado la necesidad de modelar la redistribución del agua del suelo propiciada por la conectividad del sistema radicular con zonas más húmedas del perfil, y recientemente se han realizado unos pocos y valiosos trabajos de modelación del fenómeno. Durante los períodos secos del año (de especial interés para climas semiáridos o estación del año con ausencia de lluvia) la parte del fenómeno de redistribución hidráulica que tiene mayor relevancia es el ascenso hidráulico radicular. Por ello, reconociendo que modelar el fenómeno dentro del contexto de la hidrología y ecología de las zonas de ribera es una innovación trascendental, en el modelo RibAV se propone la modelación mediante una aproximación simple y enfatizando el flujo ascendente de agua en la raíz (ascenso hidráulico o, en inglés hydraulic lift ). Con base en el trabajo de Ryel et al (2002), el Ascenso hidráulico radicular (Rwu) hacia una capa de suelo (i) desde una capa (j) puede expresarse a través de la ecuación siguiente: Rwu ( P P ) i = CRT mat ( j) mat ( i) MAX ( ci, cj ) 1 R R R x j Por tanto el Ascenso Hidráulico Radicular (Rwu) depende de: (Pmat): Es el potencial matricial de cada capa de suelo. (CRT): Es la máxima conductividad radial raíz-suelo del sistema radicular activo tendiendo las siguientes unidades [cm MPa -1 h -1 ], (Ri): Es la fracción de raíces activas en la capa (i), (Rj): Es la fracción de raíces activas en la capa (j), (Dtran): Es un factor que reduce el movimiento del agua entre capas debido a las raíces cuando la planta está transpirando. Se supone que Dtran=1 durante la noche cuando la transpiración es mínima y Dtran=0 durante el día. (Rx): Puede tener dos valores: [Rx=Ri cuando Hi>Hj ] ó [Rx=Rj cuando Hj>Hi ] siendo H la humedad de cada una de las capas de suelo. 12

18 Los factores (ci) y (cj) se obtienen mediante una relación empírica de van Genutchen a partir de la siguiente expresión, siendo: (Pm50) el potencial hídrico del suelo al que se reduce la conductancia suelo-raíz en un 50%.y b una constante empírica. C i 1 = P 1 + P Para el Ascenso Capilar desde la zona saturada Cwu(t) se hizo una adaptación de la propuesta de Altier et al (2002) utilizada para riberas de ríos en el modelo REMM. Dicha propuesta considera que en presencia de un nivel freático poco profundo (entre 1 y 3 metros debajo de la capa de suelo) existe un flujo estacionario ascendente desde la zona saturada. En RibAV no se restringe el flujo mediante la definición de una profundidad por debajo de la capa del suelo, pues mediante simulaciones se ha observado que el flujo está suficientemente controlado por las variables de estado que le rigen. mat m50 b De acuerdo con Altier et al (2002) el ascenso capilar Cwu entre dos puntos del suelo se puede describir utilizando la ecuación de Richards (1931). En dicha ecuación la tasa del movimiento de agua es función de: la conductividad hidráulica no saturada (Kh), la diferencia de cota entre dos puntos de suelo ( z ) y por la diferencia de potencial mátrico ( Pmat ) entre dicho puntos: Cwu Pmat = Kh 1 z Con base en la curva característica de Campbell(1974) es posible obtener las variables Kh y Pmat. La efectividad de predicción de esta curva se ha demostrado ya para riberas de río. Para esta curva la presión matricial (Pmat) depende de: la humedad de suelo (H), la porosidad (Pst), de la presión de burbujeo (Pb) y del índice de poros del suelo (Ip) tal como se puede observar en la siguiente ecuación: H P st Pb = P mat Ip Por otro lado la conductividad hidráulica no saturada (Kh) de la curva de Campbell(1974) depende: de la conductividad hidráulica en suelo saturado (Ks), de la humedad de suelo (H), de la porosidad (Pst), del índice de poros del suelo (Ip), y de la presión matricial (Pmat) calculada en la ecuación anterior. K K h s = H P st 3+ 2 λ 13

19 La Evapotranspiración de la Vegetación de Ribera La evapotranspiración (ET) es un término colectivo para todos los procesos en los que el agua en fase líquida o sólida, cercana a la superficie terrestre, se convierte en vapor de agua atmosférico. Incluye por tanto la evaporación del agua líquida de ríos, lagos, suelo descubierto, y superficies vegetadas; la evaporación de dentro de las hojas de las plantas (transpiración); y la sublimación de las superficies con hielo o nieve (Dingman, 2002). Sin embargo, es frecuente el uso del término evapotranspiración para referirse a la evaporación total, y así enfatizar el proceso combinado de evaporación del suelo y las superficies con agua más la transpiración de las plantas (Ward y Robinson, 2000) considerando que en la naturaleza ambos procesos ocurren simultáneamente y no es fácil distinguirlos (Rivas, 2004). En este documento se hará énfasis en los trabajos de estimación de la ET para la ribera, por ello el resumen no incluye otros conceptos y métodos que se revisan en el documento completo. La evapotranspiración potencial (ETP) es la tasa a la que la evapotranspiración podría ocurrir para un área grande que está cubierta de forma completa y uniforme por una vegetación creciente que tiene acceso a un abastecimiento ilimitado de agua del suelo, y sin considerar los efectos de advección o almacenamiento de calor (Dingman, 2002). Debido a que el proceso de evapotranspiración producido en una superficie natural no siempre se encuentra en las condiciones hipotéticas planteadas, se ha considerado la evapotranspiración real (ETr) que se define como la cantidad de agua verdaderamente perdida por el suelo a través del sistema suelo-planta hacia la atmósfera. En general, la ETr es menor, o en el caso límite, igual a la ETP (Rivas, 2004). Uno de los métodos más extensamente usados para estimar la ETr hace uso de datos meteorológicos para estimar la ETP y el uso de la siguiente ecuación: ET = f θ Donde f(θrel) es el contenido relativo de agua en el suelo, definido como: r ( ) ETP rel θ rel θ θ = θ θ fc wp wp Donde, θ es el contenido de agua actual, θfc es la capacidad de campo y θwp el punto de marchitez permanente en la zona radicular del suelo (Dingman, 1992). La relación entre ETP y ETr depende del contenido de humedad del suelo (Shaw, 1994). Según Dingman (2002), la relación entre la tasa ETr/ETP y θrel usualmente presenta una forma en la que ETr/ETP se incrementa de forma cuasi-linear a medida que θrel se incrementa, y alcanza el valor de 1 en algún contenido de agua θcrit. Típicamente: (0.5* θcc) θcrit (0.8*θcc). De acuerdo con Shaw (1994), a capacidad de campo se puede asumir que ETr = ETP; por lo que la ET ocurre a la tasa máxima posible determinada por las condiciones meteorológicas. Si no existen recargas del abastecimiento de agua, la humedad del suelo disminuirá gradualmente por las demandas de la vegetación para producir un déficit de humedad del suelo (DHS). Mientras el DHS 14

20 incrementa, la ETr se va haciendo incrementalmente menor que la ETP. Los valores de DHS y ETr varían con el tipo de suelo y vegetación. Se han explorado correlaciones entre el potencial hídrico del suelo y la evaporación mediante curvas de secado que muestran tasas entre la transpiración y la transpiración sin estrés para vegetación en condiciones de poca disponibilidad de agua. Estas curvas de secado representan un modelo de caja negra que sustituye el entendimiento detallado del complejo agua-suelo-planta. Sin embargo, han permitido avances significativos en el entendimiento, medida y modelación de la evaporación de las coberturas vegetales y han constituido el medio para estimar las pérdidas de evapotranspiración real (Ward y Robinson, 2000). Wild (1992) señala que el concepto clásico de disponibilidad de agua conduce a diversas hipótesis en cuanto a los efectos del agotamiento del agua sobre el crecimiento de las plantas. Las dos hipótesis clásicas extremas son: línea a, igual disponibilidad desde CC a PMP; línea c, la disponibilidad decrece gradualmente al reducirse el contenido de humedad del suelo. Entre esos extremos se han propuesto distintos patrones o hipótesis, y una de las más clásicas (línea b ) supone que hay una máxima intensidad de la actividad de la planta a una igual disponibilidad de agua desde la capacidad de campo hasta un punto de inflexión, en el que se alcanza un contenido de humedad crítica por debajo de la cual la disponibilidad disminuye. Figura 1.1. Tres hipótesis clásicas donde se relaciona la evapotranspiración real de las plantas con el porcentaje de humedad del suelo. Una pista de ese punto de inflexión de la curva hipotética intermedia lo puede dar la figura de variación típica de la función de extracción de humedad f(θ) (Fig. 25) presentada anteriormente de acuerdo con (Shuttleworth, 1993). Actualmente una de las propuestas más avanzadas en materia de actividad de la planta frente a la dinámica de la humedad del suelo, con énfasis en el estrés hídrico, se presenta a través de un modelo complejo que considera tanto estrés estático como dinámico -dependiente de la escala 15

21 temporal- (Laio et al, 2001; Porporato et al, 2001; Rodríguez-Iturbe y Porporato, 2004). El vínculo entre el estrés hídrico de la planta y las dinámicas de humedad del suelo es un problema complicado, debido tanto a la naturaleza estocástica de las dinámicas como a la complejidad de las respuestas de las plantas al estrés hídrico (Porporato et al, 2001). El modelo RIP-ET (Baird et al, 2003; Baird & Maddock, 2005; Maddock III y Baird, 2003) presenta curvas de evapotranspiración para condiciones semiáridas y para cada grupo funcional de vegetación, representado para condiciones climáticas medias, que también permiten considerar el tamaño de la planta (pequeña, mediana o grande) y/o la densidad de la población (baja, mediana o alta). En la modelación pueden tenerse desde una curva anual promedio de ET, hasta cuatro o más curvas que son función de las estaciones del año. Considerando la versatilidad de dichas curvas dentro del modelo, se aconseja al modelador el crear curvas para cada tipo de condiciones climáticas o estaciones. En la figura mostrada a continuación se observa una curva genérica de tasa de flujo ET. El punto Hxd representa la profundidad de extinción por elevación (o la elevación del nivel freático debajo de la cual las raíces no pueden obtener agua y por tanto la ET es cero). Figura 1.2.Curva que relaciona la Evapotranspiración Real de las raíces con respecto a la profundidad de suelo. Conforme el nivel freático va subiendo, el agua está disponible para las raíces y las tasas de flujo ET crecen hasta llegar al máximo (Rmax), que corresponde a la tasa máxima promedio diaria de flujo de ET, medida o estimada. La elevación del nivel freático asociada con la muerte de la planta es la profundidad de extinción por elevación saturada (Hsxd), que en este punto ET es cero también. Con fines de modelación, las relaciones entre las tasas de flujo y los niveles freáticos necesitan definirse como profundidades (L) o distancias relativas al nivel del suelo. La curva 16

22 tradicional de la figura, se usa exclusivamente para modelar la evaporación del suelo descubierto o del cuerpo de agua. Las elevaciones de extinción pueden aproximarse en función de la profundidad de raíces de las especies dentro de un determinado grupo funcional; dichos valores pueden obtenerse mediante trabajo de campo, revisión de literatura o ambos. Aunque esas elevaciones pueden no ser precisas, sí que proveen de un buen punto de inicio para representar los valores máximo y mínimo de tolerancia de agua para las especies en cuestión (Baird et al, 2003; Baird & Maddock, 2005; Maddock III y Baird, 2003). Para la modelación de los flujos ET se necesita su estimación mediante medidas de campo o bien factores de escala que suelen consistir en el área basal total que se basa en relaciones entre el diámetro a la altura del pecho del árbol y el área específica del tejido conductor de la savia. Asimismo es necesario escalar áreas, mediante la determinación del área cubierta porcada subgrupo funcional en una celda del modelo (fsg(i)) y posteriormente el área con cobertura vegetal dentro de cada área del sub grupo funcional (fpc(i)). Así, el área del i sub-grupo funcional vegetal que contribuye a la ET, se denomina cobertura fraccional (fcov(i)) que equivale a: fcov ( i) = fsg( i) fpc ( i) Considerando un sub-grupo funcional de vegetación presente en una celda. Si (h(k),r(k)) y (h(k+1)),r(k+1)) son las coordenadas de vértices consecutivos que definen el segmento k-ésimo para ese subgrupo funcional de vegetación, y h es la altura en la celda, entonces la tasa de flujo ET para el subgrupo, R(h) está dado por: R h h( k) h( k + 1) h( k) ( h) = R( k) + ( R( k + 1) R( k) ) 17

23 2.- DESCRIPCION DE LOS MODELOS MATEMATICOS UTILIZADOS

24 2.1.- MODELO DE HUMEDAD DEL SUELO RIBAV Esquema general Para este modelo se representa la porción de suelo estudiada como un tanque relleno de un material poroso. Dicho tanque contendrá agua, que en nuestro modelo llamaremos Humedad del Suelo (H). Como solo tendremos en cuenta la dimensión vertical, la cantidad de humedad solo será medida mediante su cota en milímetros. La humedad vertical tendrá una variación temporal de escala diaria por lo que nuestro modelo calculará dicha humedad para cada uno de los días de nuestro periodo de estudio. Los límites verticales del tanque conceptual están definidos por las siguientes cantidades de agua: (Hfc): Humedad del suelo equivalente a capacidad de campo (mm): Es la cantidad máxima que puede retener un suelo sin dañar a las plantas por anaerobiosis. (Hwp): Humedad del suelo equivalente en el Punto de Marchitez Permanente (mm): Es la cantidad de agua en el suelo por la cual las plantas no pueden extraer más agua y pierden su turgencia. En el modelo habrá que tener en cuenta las siguientes cotas (o profundidades absolutas): (Wte): Cota del Nivel Freático Calculada (m). Se considera la cota donde esta el límite entre la zona no saturada y la zona saturada del suelo. Para zonas de ribera o próximas a ella se considera equivalente al nivel del río, debido a que se considera el nivel freático como horizontal. El cálculo del nivel del río se calcula por la interpolación lineal entre la serie diaria de caudales y la curva de aforo de cada sección transversal (transecto) del tramo del río. (Czr): Cota de Profundidad Máxima de Raíces (m). Es un parámetro específico para cada tipo funcional de vegetación e indica la cota máxima a la que las raíces pueden acceder al agua del nivel freático. (Cze): Cota de Profundidad Efectiva de Raíces (m). Es la cota máxima a la que se encuentran las raíces que captan agua y evapotranspiran de la zona no saturada de suelo, que queda por encima del nivel freático. También es un parámetro específico para cada tipo funcional de vegetación y además es posiblemente uno de los parámetros más sensibles del modelo. (Cpsat): Cota para la Extinción por Saturación (m). Es la cota máxima a la cual las plantas pueden tolerar tener el suelo saturado de agua sin ser perjudicadas debido a la asfixia 19

25 radicular. Aunque las plantas necesitan tomar agua del suelo, también necesitan estar en contacto con gases atmosféricos mediante las raíces y/u otros órganos. En algunos casos esta cota puede ser superior a la cota de la superficie del suelo. Esto ocurre en las plantas acuáticas, que toleran bastante el anegamiento parcial de su parte aérea durante grandes periodos de tiempo. Cabe destacar que en este modelo se considera a la Capacidad de Campo como punto de almacenamiento máximo del tanque, a pesar de que el punto de almacenamiento máximo de los suelos es el de saturación que es equivalente a la porosidad (debido a que todos los poros representativos del suelo están repletos de agua). Esto es debido a que cuando la cantidad de agua de un suelo excede la capacidad de campo se produce la asfixia radicular, anulando la Evapotranspiración Real (ETR) de la planta. Los flujos de entrada y salida en el tanque son los siguientes (todos en mm/día): (PP): La Precipitación Diaria (Rwu): Ascenso Hidráulico Radicular (Cwu): El Ascenso Hidráulico Capilar (Exc): El excedente hídrico del suelo (ETRtot): Evapotranspiración Real Total En la siguiente figura se muestran los flujos y procesos que son simulados por el modelo: 20

26 Figura 2.3. Esquema conceptual del modelo RibAv Curva de humedad del suelo En cada intervalo diario habrá una serie de flujos de entrada y de salida, que harán que varíe el nivel de humedad del tanque. Para calcular algunos de dichos flujos será necesario calcular la Presión Matricial diaria (Pmat). Dicha presión, medida en Kilopascales (Kpa), se calcula mediante la ecuación correspondiente de la curva característica de Campbell (1974): P mat Pb = H Pst fin( t 1) 1 Ip donde: Hfin(t-1): Es la humedad del tanque del día anterior (mm) Pst: Es la Porosidad o ratio de huecos del suelo ( ). Ip: Es el Indice de Poros del suelo ( ). Pb: Es la Presión de Burbujeo del suelo (Kpa). Existe otra curva de Campbell (1974) que sirve para calcular diariamente la conductividad hidráulica no saturada (Kh) a partir de algunos de los parámetros y variables antes descritos y de la Conductividad Hidráulica Saturada (Ks). La ecuación derivada de dicha curva es la siguiente: 21

27 3 Ip+ 2 P b Kh = Ks P mat Modelización de los flujos Ascenso Hidráulico Radicular Es la transferencia vertical nocturna de agua de zonas más húmedas a zonas más secas producida por las raíces de las plantas. Depende de algunos parámetros y variables mencionados anteriormente y de otros como: la Presión para el Punto de Capacidad de Campo (Pfc); del Factor de Transpiración en Zona No Saturada (Rj); Pm50 es potencial hídrico del suelo en Kpa al que se reduce la conductancia suelo-raíz en un 50%, y CRT es la máxima conductividad radial raíz-suelo del sistema radicular activo (suele tomarse normalmente como 0.97mm MPa -1 h -1 ). La ecuación está basada en la de los modelos REMM y queda de la siguiente forma: 0 Crt 1 Rwu = MAX ( Pfc Pmat ) Rj P 1+ mat Pm Ascenso Hidráulico Capilar Es producido por las fuerzas de capilaridad que ejercen los poros de suelo sobre las moléculas de agua. Dicha atracción capilar es producida por la tensión superficial de los líquidos que resulta representativa en los conductos de reducido diámetro como son los poros de la esponjas o del suelo. Así mismo la tensión superficial presente en los líquidos es producida por la descompensación que producen las superficies sólidas sobre las fuerzas de atracción de las moléculas de agua (puentes de hidrógeno). Su ecuación está basada en la de Richards (1931) y queda de la siguiente forma H fc H fin( t 1) Rwu Cwu = MIN Pmat 1 Kh 24 WTE Cze Excedente hídrico del suelo El excedente (Exc) será el principal flujo de salida de agua del tanque y representará el agua que se pierde por escorrentía o por percolación, debido a la capacidad limitada de almacenamiento de la 22

28 porción de suelo modelizada. Su ecuación incluirá el sumatorio de los flujos de entrada antes mencionados (PP, Cwu y Rwu), más la Humedad de Suelo del Día Anterior (Hfin(t-1)), menos la Humedad del Suelo a Capacidad de Campo (Hfc). 0 Exc = MAX PP + Cwu + Rwu H fc + H fin( t 1) Evapotranspiración Antes de describir los procesos de evapotranspiración cabría describir las siguientes variables y parámetros: (Win): Entrada de agua en suelo (mm). Es la diferencia entre los flujos de entrada y el de salida anteriormente descritos. Win = PP + Cwu + Rwu Exc (Hini): Humedad del suelo antes de considerar la Evapotranspiración Real (mm). Esta variable no es la humedad del suelo al final del día pero sirve para el cálculo de ésta. Hini = Win + H fin( t 1) (Hcrit): Agua Equivalente a humedad crítica (mm). Para dicha humedad normalmente se considera la presión crítica de 95 Kpa. (Hrel): Humedad Relativa (mm). Esta variable representa la relación lineal existente entre el aumento de Humedad del Suelo y la Evapotranspiración Real en el tramo que va entre el punto de marchitez permanente y el punto crítico. 1 H MIN H H Hcrit H rel = ini wp wp (Cov): Fracción de Cobertura de las plantas ( ). Es un parámetro de vegetación que actúa como factor reductor de la Evapotranspiración Real de una forma similar al Coeficiente de Cultivo de las plantas agrícolas. (Ri): Factor de Transpiración de la Zona No Saturada ( ): Es una factor multiplicador que influye sobre los procesos de evapotranspiración que tienen lugar en la zona no saturada del suelo. 23

29 Por último solo queda describir las variables de salida del modelo que tienen que ver con los procesos de evapotranspiración. Primeramente la evapotranspiración es el proceso, que forma parte del ciclo hidrológico donde el agua es devuelta a la atmósfera en forma de vapor. Dicho proceso está compuesto por dos mecanismos: el de evaporación, donde el agua es captada desde las superficies; y el de transpiración, que es realizado por los vegetales. Sin embargo, aunque los dos mecanismos son diferentes y se realizan independientemente resulta difícil separarlos, pues ocurren por lo general de manera simultánea; de este hecho deriva la utilización del concepto más amplio de evapotranspiración que los engloba. En relación al proceso de Evapotranspiración existen las siguientes variables: (ETP): Evapotranspiración Potencial (mm). Es la máxima cantidad de agua que puede evaporarse desde un suelo completamente cubierto de vegetación, que se desarrolla en óptimas condiciones, y en el supuesto caso de no existir limitaciones en la disponibilidad de agua. Por tanto, la magnitud de la ETP está regulada solamente por condiciones meteorológicas e indica la cantidad máxima de agua que puede evapotranspirar una planta en condiciones ambientales óptimas. (ETRtot): Evapotranspiración Real Total (mm). Es el agua que utiliza una planta bajo unas determinadas condiciones y en un determinado estado vegetativo. Es la variable principal de salida del modelo porque indica el grado de adecuación de una planta (o grupo funcional) a unas condiciones ambientales. Según la Cota diaria del Nivel Freático (Wte), se subdivide en dos variables: (ETRuns): Evapotranspiración Real de la Zona No Saturada. Es la ETR que tienen lugar en la porción del suelo, cuyos poros no se encuentran saturados de agua en ese momento. Se considera que cuando la Cota diaria del Nivel Freático (WTE) está por encima de la Cota de Extinción por Saturación (Cpsat), el valor de ETRuns es igual a 0. Si la condición anterior no se cumple y la WTE es mayor o igual a la Cota de Raíces Efectivas (Cze) entonces la ecuación sería la siguiente: WTE Czr ETRuns = Cov ETP Ri 1 CPsat CZr En el caso opuesto, cuando WTE<Cze la ecuación de ETRuns sería la siguiente: Hini - Hwp ETRuns = MIN Hini Hwp Ri Cov ETP Hcrit H wp (ETRsat): Evapotranspiración Real de la Zona Saturada. Es la ETR que tienen lugar en la porción de suelo cuyos poros se encuentran saturados de agua en ese momento. Se 24

30 considera que cuando la Cota diaria del Nivel Freático (Wte desplazamiento) está por encima de Cota para la Extinción por Saturación (Cpsat) o por debajo de la Profundidad Máxima de Raíces el valor de ETRsat es igual a 0. Si las condiciones anteriores no se cumplen entonces la ecuación sería la siguiente: Cov ETP -ETRuns ETRsat = MIN WTE -CZr Cov ETP Rj CZe -CZr En la siguiente gráfica se muestra la evolución de la Evapotranspiración Real (ETR) según va variando la humedad de suelo y los poros van llenándose de agua. Se observa dicha evolución para distintas cantidades de humedad determinadas por el parámetro de suelo de Capacidad de Campo (Pfc) y por los parámetros de vegetación: Punto Crítico (Pcrit) y Punto de Marchitez Permanente (Pwp). La gráfica comienza por con la ETR siendo mínima hasta que se llega al Punto de Marchitez Permanente (Pwp) que empieza a ascender. Dicho ascenso continúa hasta que se llega al Punto Crítico donde la ETR se estabiliza en una recta horizontal. El valor vertical de esta recta sería el de la Evapotranspiración Potencial (ETP), que es la evapotranspiración máxima que permiten las circunstancias climáticas de ese momento. Esta situación prosigue hasta que se sobrepasa a la Capacidad de Campo del suelo, donde la ETR empieza a descender hasta que la humedad del suelo llega a ser equivalente a la porosidad. Este descenso en la ETR es producido por la asfixia radicular de la planta. La relación entre ETR/ETP es un indicador muy importante porque muestra el estado fisiológico de la planta en ese momento. Este es óptimo cuando ETR=ETP ó lo que es lo mismo: ETR/ETP=1 Figura 2.4. Gráfica que relaciona la ETR con la Humedad del Suelo 25

31 El índice de ET Para cada intervalo diario se calcula la evapotranspiración real total (ETRtot) para cada tipo funcional de vegetación. La suma de ETRtot se divide entre la suma de Evapotransipración Potencial (ETP) diaria, lo que dará el Índice de Evapotranspiración (ETindex) de cada tipo funcional de vegetación. Si este índice es más grande y más cercano a 1 significará que las plantas que forman parte del grupo funcional serán más aptas para las condiciones ambientales simuladas. En la tabla siguiente se puede observar que para cada punto de simulación se considera como tipo funcional simulado al que tenga un índice de evapotranspiración más alto, el cual se representará con el valor 1. Figura 2.5. Salida de datos del programa Resumen de variables y parámetros A continuación se va a mostrar una serie de tablas donde aparecen los distintos tipos de variables y parámetros del modelo Parámetros básicos de suelo del modelo En esta tabla se mostrarán los parámetros de suelo que intervienen en el modelo y cuya obtención y tratamiento se explica en el apartado de estimación de parámetros: Tabla 2.1 Parámetros básicos de suelo Siglas Nombre Unidades Mfc Humedad a capacidad de Campo [ ] Pst Porosidad [ ] Ks Conductividad Hidráulica Saturada del Suelo [mm/hr] Pb Presión de Burbujeo [Kpa] Ip Índice de Porosidad [ ] 26

32 Es Cota de la Superficie del Suelo [m] Zcmin Profundidad a considerar en el Ascenso Hidráulico Capilar [m] Parámetros básicos de vegetación del modelo En esta tabla se mostrarán los parámetros de suelo que intervienen en el modelo y cuyo significado se explica en el apartado de estimación de parámetros. Algunos de estos parámetros son muy sensibles para el modelo y por ello son utilizados en el apartado de calibración. Tabla 2.2 Parámetros básicos de vegetación Siglas Nombre Unidades Pcrit Presión para el Punto de Humedad Crítica [Kpa] Pwp Presión para el Punto de Marchitez Permanente [Kpa] Zr Profundidad Máxima de Raíces [m] Ze Profundidad Efectiva de Raíces [m] Zsat Prof. de Extinción por Saturación [m] Rj Factor de Transpiración de la Zona Saturada [ ] Cov Fracción de Cobertura de las Plantas [ ] Crt Conductividad Máxima de Agua Raíz-Suelo [mmmpa-1h-1] Ri Factor de Transpiración de la Zona No Saturada [ ] Pm50 Presión para el Punto Medio de Saturación [Kpa] Datos de entrada hidro-meteorológicos En la siguiente tabla se mostrarán los datos de entrada relativos tanto a procesos hidrológicos como meteorológicos. Tabla 2.3 Datos de entrada hidro-meteorológicos Siglas Nombre Unidades PP(t) Precipitación Diaria [mm] ETp(t) Evapotranspiración Potencial Diaria [mm] Qcurve(j) Caudal de Río de la Curva de Aforo [m3/s] Hcurve(j) Nivel de Río de la Curva de Aforo [m] Qdaily(t) Caudal Diario Observado en el Río [m3/s] WTE(t) Cota del Nivel Freático Calculada [m] Parámetros generales del modelo En la tabla mostrada a continuación se muestran los parámetros generales del modelo, que son obtenidos a partir de los parámetros de las tablas anteriores, y cuyos valores son iguales para todos los intervalos diarios dentro de un mismo punto de simulación. Tabla 2.4 Parámetros generales del modelo Siglas Nombre Unidades Mcrit Humedad en el Punto Crítico [ ] Mwp Humedad en el Punto de Marchitez Permanente [ ] CZr Cota de la Profundidad Máxima de Raíces [m] Cze Cota de la Profundidad Efectiva de Raíces [m] Cpsat Cota para la Extinción por Saturación [m] Hfc Agua Equivalente para la Capacidad de Campo [m] Hwp Agua Equivalente para el Punto de Marchitez Permanente [mm] 27

33 Hcrit Agua Equivalente para el Punto de Humedad Crítica [mm] Pfc Presión para el Punto de Capacidad de Campo [Kpa] Variables internas del modelo En la tabla siguiente se muestran las variables internas del modelo, obtenidas a partir de las variables y parámetros descritos en las tablas anteriores, y cuyos valores son variables para cada intervalo diario. Tabla 2.5 Variables internas del modelo Siglas Nombre Unidades Pmat Potencial Mátrico [Kpa] Kh Conductividad Hidráulica No Saturada [mm/hr] Rwu Ascenso Hidráulico Radicular [mm] Cwu Ascenso Hidráulico Capilar [mm] Exc Excedente de Agua [mm] Win Entrada de Agua en el Suelo [mm] Hini Humedad antes de la ETR [mm] Hrel Humedad Relativa [ ] ETRuns Evapotranspiración Real de la Zona No Saturada [mm] ETRsat Evapotranspiración Real de la Zona Saturada [mm] ETRtot Evapotranspiración Real Total [mm] Hfin Humedad Final del Día [mm] Bal Error de Balance Hídrico Diario [mm] Variable de salida del modelo En está tabla se muestra la variable de salida principal del modelo. Se calcula esta variable para cada tipo funcional de cada punto de simulación: Tabla 2.6 Variable de salida del modelo Siglas Nombre Unidades ETindex Indice de Evapotranspiración [ ] 28

34 2.2.- Modelo de vegetacion dinámica ripflow Introducción El concepto fundamental para el desarrollo de un Modelo Dinámico de Vegetación de Ribera (Ripflow) es la relación funcional entre: la hidrología, los procesos físicos, los ecosistemas riparios y las distintas comunidades vegetales (Benjankar 2006). Figura 2.6. Concepto fundamental del modelo dinámico de vegetación Riparia (Benjankar 2006). Ripflow es un modelo de vegetación con reglas dinámicas que se basan en los parámetros físicos simulados, en los datos observados y el las reglas de expertos. Los componentes del modelo quedan representados en forma de malla raster que simulan los procesos de sucesión y regresión para un intervalo de tiempo anual. El objetivo principal del modelo es el de simular el efecto de los procesos físicos significativos sobre los ecosistemas riparios. Dichos procesos son: la resistencia al esfuerzo cortante, el estrés fisiológico debido al anegamiento y la influencia del nivel freático sobre el desarrollo vegetal. El dato de salida del modelo es la Vegetación Potencial Natural, que es independiente de las influencias antrópicas tales como ganadería, agricultura, selvicultura, etc. Al ser Ripflow un modelo de vegetación dinámico trabaja con sucesiones vegetales que comienzan a partir de una comunidad muy simple llamada pionera hasta terminar en otra muy compleja llamada clímax. En los ecosistemas simulados las comunidades vegetales se ven afectadas por sucesiones y regresiones debido a las diferentes alteraciones del medio a las que se ven sometidas. Los procesos físicos son simulados con un modelo hidrodinámico auxiliar. Inicialmente el modelo hidrodinámico se desarrolla para simular los parámetros físicos para el modelo de vegetación como pueden ser el esfuerzo cortante, la duración de inundación y las distintas cotas de inundación. Para simular los procesos físicos todos los hidrogramas anuales de caudal utilizados en el estudio se clasifican en diferentes clases basadas en condiciones climáticas, como por ejemplo: años húmedos, medios y secos. Se considera que todos los procesos simulados en los hidrogramas pertenecientes a la misma clase tienen el mismo impacto en la dinámica de vegetación. Por ello no hay ningún enlace dinámico entre el modelo hidráulico y de vegetación, por lo que los parámetros y los datos de entrada deben ser almacenados en un lugar y con un formato específico para que el modelo de vegetación pueda acceder a dichos datos de entrada. 29

35 Zonificación Espacial El área de estudio se divide en 3 zonas: Acuática, de Ribera y de Llanura de Inundación. Esta clasificación se en la magnitud y presencia de las inundaciones, que rigen la ausencia y/o presencia de especies vegetales riparias: Figura 2.7. Zonas contempladas en el modelo Zona Acuática (ZA): Se considera parte del río principal que se inunda debido al caudal promedio del río. Zona de Ribera (ZR): Es el área inmediatamente adjunta a la zona acuática, estando sometida a un elevado grado de perturbaciones. La vegetación normalmente tiene un ciclo de vida corto debido a las perturbaciones constantes. Zona de Llanura de Inundación (ZL): La llanura de inundación es una menos perturbada que la zona de Ribera. Se puede considerar que la perturbación es casi insignificante debido a las grandes distancias y cotas con respecto al cauce principal. Por ello los tipos de vegetación tienden a ser más robustos y mejor desarrollados. Los límites entre las distintas zonas quedan implementados de la siguiente forma: Tabla 2.7 Límites entre las distintas zonas de modelación Borde Caudales Valores ZA/ZR Cota de la lamina de Agua Media de Río Qmedio ZR/ZL Ribera Totalmente Inundada *HQ1-HQ1,5 ZL Históricos *HQ100 *Siendo HQx la cota de la lamina de agua para un caudal con un periodo de retorno de x años. 30

36 Estructura del Modelo Los procesos de modelación se clasifican en 3 fases que corresponden con los 3 diferentes componentes que son: Condición Inicial Estática. Llanura de Inundación Dinámica, que asimismo se subdivide en 4 sub-componentes. Vistas Output En la gráfica siguiente se observa que las flechas muestran que el output de cada proceso es el input del siguiente proceso. Los datos hidráulicos y topográficos son proporcionados como inputs externos, por lo que deben ser obtenidos mediante otros procesos de modelación. Figura 2.8. Estructura del modelo Primer Componente del Modelo: Condición Inicial Estática La condición inicial además de ser estática, predice los diferentes hábitats basándose en la profundidad del nivel freático (cota del nivel freático menos la cota de la superficie del suelo) y en la distinta zonificación por caudales de retorno (Acuática, Riparia y de Llanura de Inundación). El objetivo principal de este componente es el de predecir la vegetación potencial natural y utilizarla como condiciones iniciales para el modulo siguiente. Los mapas que intervienen en esta componente del modelo son los siguientes: 31

37 Figura 2.9. Mapas input y output que intervienen en la componente inicial estática. Restando los valores de cada celda de los mapas input de topografía (MDT) y el de cota de nivel freático se calcula la profundidad a la que está el nivel Freático. Combinando los valores discretizados de esta profundidad con el mapa de las distintas zonas de inundación (Acuática, Ribera y Llanura de Inundación) que relacionan la frecuencia de inundación, se obtienen: los tipos de hábitats iniciales, la serie de vegetación a la que pertenecen y la edad (mínima) de la vegetación de dicho hábitat. Dicha relación se observa en la tabla siguiente: Tabla 2.8 Ejemplo de tabla que relaciona las alturas sobre el nivel freático y las zonas de inundación con el tipo de cobertura de vegetación y su edad. Estos valores deben ajustarse durante el proceso de calibración. 32

38 Segunda Componente del Modelo: Llanura de Inundación Dinámica Este componente evalúa el crecimiento (sucesión) y la distribución espacial de la vegetación de la llanura de inundación basándose en cinco parámetros físicos diferentes (topografía, profundidad sobre el nivel freático, zonificación por caudales de retorno, esfuerzo cortante y duración de la inundación), Hay 3 tipos diferentes de series de sucesión (bosque ripario, cañaveral, y pradera riparia). Cada serie de sucesión tiene etapas diferentes, cuyo establecimiento se basa en un rango definido de edades. Esta componente del modelo dará como output los mapas anuales de tipo de cobertura de vegetación. Tendrá como inputs los mapas de: edades mínimas de las series de sucesión, tipos de hábitats iniciales, nivel freático, topografía (MDT), láminas de agua del río, esfuerzo cortante y duración de la inundación. Figura Mapas input y output de la componente de vegetación dinámica del modelo. 33

39 El componente dinámico se subdivide en cuatro módulos que se basan en sus funciones: reclutamiento, esfuerzo cortante, duración de la inundación y sucesión. Este componente también almacena la cantidad de píxeles (celdas) para cada comunidad vegetal en cada iteración de intervalo anual del modelo. a. Módulo de Reclutamiento Este módulo define el área de reclutamiento potencial y las áreas donde ocurre una perturbación debido a la influencia de factores hidráulicos y topográficos. En este modulo se establece una banda por encima del escenario del río que facilita el establecimiento de las semillas del bosque de ribera. La fase inicial solo es el área donde el reclutamiento tiene lugar y sigue una sucesión a las fases pioneras que tienen lugar al año siguiente. La vegetación pionera existente sigue una sucesión hacia la fase de matorral tanto de bosque o de cañaveral después de llegar a una cierta edad. La sucesión del bosque de ribera solo se lleva a cabo en una banda específica de alturas sobre el nivel de río (Ej m). Por debajo de esta banda las plantas pioneras son destruidas y se vuelve a la fase inicial, mientras que por encima las plantas no se pueden desarrollar porque sus raíces en los estados iniciales no son lo suficiente largas para alcanzar el nivel freático. En otras circunstancias, si la vegetación existente tiene más edad que la edad de los pioneros, sobrevivirá a la perturbación debido a que se asume que dichas comunidades son lo suficientemente resistentes para resistir dichas perturbaciones. Las etapas iniciales de las series de sucesión que son afectadas por este proceso se muestran a continuación: Figura Diagrama con las etapas iniciales de sucesión que son afectadas por los procesos de perturbación por socavación y reclutamiento. 34

40 En la tabla siguiente se muestra las regresiones o sucesiones que tendrán lugar durante las etapas iniciales de sucesión debido al efecto del nivel del río (reclutamiento y socavación) sobre las zonas de ribera y de llanura de inundación. Tabla 2.9 Tabla resumen del efecto del nivel del río sobre las etapas iniciales de sucesión debido a los procesos de reclutamiento y socavación Además de los efectos hidráulicos, el módulo de reclutamiento considera cambios en la topografía del río. Cuando la topografía cambia parte de la zona de ribera (o de la llanura de inundación) puede pasar a ser zona acuática y viceversa. Los mismos principios son aplicables entre el resto de zonas adyacentes. Como se puede observar en la tabla siguiente, cuando la zona acuática (ZA) pasa a una de las zonas terrestres (BZ y FZ), se convierte en grava. Si por el contrario las zonas terrestres (BZ y FZ) se convierten en zona acuática (AZ), la vegetación se destruye tal como se puede ver en la tabla siguiente: Tabla 2.10 Tabla resumen del efecto del cambio de topografía sobre las series de sucesión. 35

41 b. Módulo de Esfuerzo Cortante Se define al esfuerzo cortante como la fuerza por unidad de área aplicada por el agua a lo largo de las superficies en contacto. El esfuerzo cortante crítico puede ser utilizado como un indicador de la erosión de superficies. Es el máximo esfuerzo cortante que puede ser aplicado sobre una superficie sin causar erosión ni transporte de sedimentos y es dependiente del diámetro de las partículas. En la siguiente figura se puede observar que si se supera el esfuerzo critico de una determinada etapa de sucesión, dicha vegetación retrocede directamente a la fase inicial de su serie. Figura Efecto del esfuerzo cortante sobre las series de vegetación del tramo de estudio del río Kootenai (EE.UU.) Una combinación de la cota del agua y el esfuerzo cortante es una de las combinaciones más importantes de parámetros físicos que lleva a la erosión y deposición de sedimentos en las llanuras de inundación y por ello es responsable de sus procesos geomórficos. Este módulo considera que si la vegetación existente es destruida por el esfuerzo cortante, se retrocede directamente a la fase inicial. La vegetación es destruida cuando el esfuerzo cortante es superior al esfuerzo cortante crítico de una determinada comunidad vegetal. El valor crítico del esfuerzo cortante de cada tipo de vegetación es además variable según la edad que marca la etapa de la sucesión. 36

42 c. Módulo de Duración de la Inundación La duración de la inundación es la cantidad de tiempo en la que una zona riparia queda anegada durante una determinada estación o año. El anegamiento mata a las plantas por el efecto anaeróbico. Los efectos anaeróbicos son más importantes en los ambientes en los que el anegamiento permanece en periodos prolongados de tiempo. El anegamiento a largo plazo causa también un estrés fisiológico a la planta que se asocia con el agotamiento de oxigeno de la zona radicular. Se considera que si la duración de la inundación es más larga que el valor crítico entonces la vegetación retrocede a estados anteriores de la serie. La intensidad de la alteración se clasifica en tres rangos: alto, medio y bajo. La clasificación depende en el número de días inundados durante el periodo vegetativo. El tipo de comunidad que surja tras una regresión depende de la intensidad de la alteración y del tipo de vegetación preexistente. Incluso las especies más tolerantes a la inundación necesitan por los menos estar un por ciento del periodo vegetativo sin anegamiento. El número de días que corresponden a cada intervalo de intensidad de inundación se determina mediante reglas de experto. El siguiente menú es el que utiliza el software de Ripflow para determinar los días de inundación para cada intensidad (baja, media, alta): Figura Menú que utiliza Ripflow para introducir la relación entre el número de días de inundación y la intensidad de los consiguientes impactos (bajo, medio y alto). El efecto de la inundación siempre una implica regresión en la serie, pero dependiendo de la intensidad dicha regresión hará retroceder más o menos la vegetación dentro de la serie. A continuación se muestra una figura donde se muestran los efectos causados por la inundación en una serie de vegetación de un tramo de estudio en el río Kootenai (EE.UU.). 37

43 Figura Efecto de la duración de la inundación sobre las series de vegetación del río Kootenai (EE.UU.) d. Módulo del Progreso de la Sucesión Este módulo asume que si en una determinada zona no ocurren las alteraciones por: socavación, condiciones de suelo seco (solo en Ripflow versión 3), duración de inundación considerable, o esfuerzo cortante superior al crítico; entonces se seguirá una pauta de sucesión hacia un estado maduro, basándose en el rango de edades de cada estado de sucesión. Se asume además que las series de pradera y de cañaveral evolucionan hacia un bosque mixto maduro después de una determinada cantidad de años, que es específica para cada tramo de estudio. 38

44 Figura Se puede observar en esta figura que en el tramo de estudio del río Kootenai (EE.UU.), las 3 series de sucesión (bosque, cañaveral y pradera) evolucionan a la etapa clímax (Bosque Maduro Mixto) cuando tienen 110 años sin sufrir alteraciones significativas Tercera Componente del Modelo: Vistas Output Esta ultima componente no realiza ninguna tarea computacional, tan solo se utiliza para representar el output del modelo con una leyenda unificada por el usuario. El output principal es un Mapa de Vegetación Potencial para cada año de la simulación. El procedimiento de cálculo de Ripflow comienza con la condición estática inicial que solo se ejecuta una vez por simulación en lo que podría considerarse el año 0. Posteriormente se entra en la componente dinámica del modelo donde aparece un bucle de intervalo anual donde el número de repeticiones es equivalente al número de años simulados. En cada simulación anual y para cada celda se pasará por cada uno de los módulos y submodelos, en caso de que los procesos simulados sean representativos. Cada uno de esos módulos requerirá para cada intervalo anual de determinados mapas que son agrupados en un archivo que se denomina Dynamic Inputs Database (Base de Datos Dinámica de Inputs). Al final de cada año de la simulación las coberturas de vegetación serán probablemente modificadas. Está nueva distribución de coberturas retroalimentara a modo de feedback las condiciones iniciales de la simulación del año siguiente. Una vez que la simulación de todos los años haya sido realizada se pasará al tercer y último componente del modelo (Vistas Ouput) que se dedicará a reorganizar los mapas con leyendas y criterios comunes. Figura Diagrama general de flujos del modelo Ripflow. 39

45 2.3.- Coeficiente Kappa de Cohen El coeficiente Kappa de Cohen evalúa el grado de aciertos de la simulación de un modelo. Se utiliza con elementos cualitativos y tiene en cuenta el efecto producido por el azar. Específicamente para este modelo se evalúa el grado de semejanza entre la vegetación observada y la simulada. Para llevar a cabo esta evaluación, el algoritmo construirá en primer lugar una matriz de confusión donde las columnas representan los elementos observados (m1, m2, m3) y las filas los elementos simulados (n1, n2, n3). Cada celda del tramo de estudio comparará el tipo de vegetación del mapa observado con el tipo de vegetación del mapa simulado, incrementando en 1 el valor de la celda de la tabla para la correspondiente fila y columna. El número de filas y el número de columnas será igual al número de elementos de vegetación. A modo de ejemplo se va a asumir que un cierto tramo de estudio tiene tipos de vegetación que producen la siguiente matriz de confusión: Tabla 2.11 Matriz de Confusión de 3 tipos de vegetación utilizada para evaluar el coeficiente de Cohen. Después de construir la matriz, se calculan los siguientes sumatorios: Suma de los valores de cada fila (e.j. Vm,1=V11+V21+V23) Suma de los valores de cada columna (e.j. V1,n= V11+V12+V13) Suma de los valores de la diagonal principal ( Vm,n= V11+V22+V23), que coincide con el número de aciertos. Para evitar confusiones con la notación de los sumatorios llamaremos a esta variable: (fo). Suma de todos los valores de la matriz ( Vm,n= Vm,1 + Vm,2 + Vm,3) ó ( Vm,n= V1,n + V2,n + V3,n). Para evitar confusiones con la notación de los sumatorios llamaremos a esta variable: (N). Posteriormente se calculan las frecuencias esperadas fe(i) de cada tipo de vegetación. Esto se calcula al multiplicar: [la suma de los valores de cada fila que coincide con el tipo de vegetación] por [la suma de los valores de cada columna que coincide con el tipo de vegetación] y dividendo entre [la suma de los valores de la matriz (N)]. 40

46 para la vegetación 1: para la vegetación 2: fe fe (1) (2) m,1 1, Vm,2 V = N n 2, n para la vegetación 3: fe (3) = Vm,3 V N 3, n A continuación se realiza también la suma de todas las frecuencias esperadas: = fe fe i + ( ) = fe(1) + fe(2) fe(3) Por consiguiente ya tenemos los valores de todas las variables (fo, fe, N) requeridos para obtener el coeficiente Kappa de Cohen (k), que se obtiene a través de la ecuación siguiente: k = fo N fe fe Si el número total de valores (N) de la matriz es alto, entonces se puede asumir que pertenece a una distribución normal: fo fo 1 n Error Estándar (σx): σx = N fe Intervalo de confianza del 95%: k ± 1, 96 σx Intervalo de confianza del 99%: k ± 2, 58 σx El valor máximo del coeficiente Kappa (k) es 1, y el valor mínimo es 0. Si k=1 entonces todos los casos tienen lugar en la diagonal principal y el resto de la celdas de la matriz de confusión quedarán vacías. Si k=0 significa que no hay ningún grado de aciertos no aleatorios entre los elementos observados y simulados. El rango de valores del coeficiente Kappa se clasifican de la siguiente manera < k < 1 : Excelente 0.60 < k < 0.80 : Bueno 0.40 < k < 0.60 : Aceptable 41

47 0.20 < k < 0.40 : Inadecuado 0 < k < 0.20 : Inaceptable 42

48 3.- DISEÑO DEL SOFTWARE 43

49 3.1.- MODELO DE HUMEDAD DE SUELO RIBAV Plataforma y características generales El modelo Ribav se ha implementado en la plataforma Visual Studio 2008 con el lenguaje de programación Visual Basic.net. Se ha escogido esta herramienta porque permite desarrollar con facilidad interfaces graficas de usuario que facilitan bastante el manejo del software por parte del usuario. Adicionalmente la plataforma Visual Studio permite la utilización de varios lenguajes de programación dentro de un mismo proyecto o solución. Esto es bastante útil en los casos en los que se desean combinar porciones de código que han sido desarrollados por personas diferentes con lenguajes de programación diferentes pero que sí son compatibles con la plataforma.net. Algunos de los lenguajes compatibles con.net y por tanto con Visual Basic.net son: C#, C++, P# (implementación de Prolog), Ironpython, Visual Fortran, etc. La ventaja de utilizar en concreto el lenguaje Visual Basic.net es que su sintaxis es bastante intuitiva, pareciéndose mucho a la del inglés, por lo que su código puede ser leído, revisado y modificado por personas que no tengan muchos conocimiento de programación. La primera versión del lenguaje BASIC fue desarrollada a principio de la década de los 60 por Thomas Kurtz y John Kemeny con la finalidad de que profesionales sin base previa en desarrollo de software pudieran programar, por lo que de ello viene su nombre: Beginners All-purpose Symbolic Instruction Code. Otra ventaja de utilizar una versión moderna de Visual Basic (como es la 2008), es que está enteramente orientada a objetos. La programación orientada a objetos trae ciertas ventajas como facilitar el control en el desarrollo de aplicaciones grandes, las cuales normalmente están desarrolladas por varias personas. En nuestro caso, además nos permitirá unir este software con el programa Ripflow que ha sido desarrollado con el lenguage Python 2.4 dentro de la plataforma Model Builder de Esri ArcGis Estructura del programa El código fuente del programa ha sido estructurado en formularios o módulos. Estos formularios y módulos son los distintos archivos en los que está almacenado el código. Un formulario (form en inglés) se diferencia de un modulo en que el formulario además de almacenar los algoritmos de cálculo (lógica del programa) también almacenará el código que determina la representación gráfica de las distintas ventanas del programa (interfaz gráfica de usuario). 44

50 Figura Explorador de soluciones de Visual Studio 2008, que muestra los distintos formularios y módulos del programa. Visual Basic además de ser un lenguaje orientado a objetos también es un lenguaje estructurado por lo que el código de dentro de los distintos módulos y formularios estará también agrupado en métodos (funciones y subrutinas). Esta segunda agrupación facilita la organización y comprensión del código facilitando tanto el diseño del programa como su posterior búsqueda/corrección de errores y el desarrollo de nuevas versiones y ampliaciones. 45

51 Figura Porción del código del programa. Nótese como las subrutinas quedan definidas dentro de instrucciones Private Sub y End Sub, en donde Visual Studio automáticamente traza una recta horizontal. Los métodos y variables que intervienen en el programa podrán ser también públicas o privadas. Los métodos y variables públicas podrán ser utilizados desde cualquier parte del programa siendo definidos en Visual Basic por la sintaxis Public o Friend. Por otro lado las privadas solo podrán ser utilizadas en determinadas partes del programa y serán definidos por Dim (para variables) o Private (para métodos). Esta determinación del alcance de las variables y métodos se desarrolla plenamente en la programación orientada a objetos mediante la Encapsulación. Esto favorece el control del código y previene la aparición de errores en programas de cierta envergadura Interfaz gráfica de usuario Se ha desarrollado una interfaz gráfica con el fin de que los usuarios del modelo puedan manejar el software de una forma fácil e intuitiva. Para facilitar el diseño de la interfaz gráfica de usuario, Visual Studio dispone de una Barra de Herramientas y de una Barra de Propiedades. La barra de herramientas permite la selección de los distintos controles que van a ser colocados sobre cada formulario. Una vez seleccionado el control, puede ser colocado en cualquier parte del formulario y 46

52 se le puede designar las dimensiones deseadas con relativa facilidad. Los controles más habituales utilizados en el programa aparte de los formularios son: - Button (Botón): Es el control más habitual para llamar a las subrutinas de los eventos en tiempo de ejecución. - Textboxes (Cajas de Texto): Estos controles se utilizan para introducir pequeñas cantidades de datos que darán valores a las variables. Si por el contrario tienen la propiedad ReadOnly con valor = True, entonces tan solo se utilizarán para visualizar resultados. - Label (Etiquetas): Normalmente no intervienen en la lógica del programa, teniendo solo carácter informativo y estético. Aun así en algunos casos podrían ser utilizados para visualizar resultados al igual que los Textboxes. - Checkboxes (Cajas de Selección): Son unos iconos de forma cuadrada que suelen ser activados o desactivados por el usuario. Son utilizadas para gestionar estructuras de control condicional con respuesta booleanas (de lógica binaria). - Groupboxes (Cajas de Agrupación): Tienen carácter estético principalmente agrupando controles relacionados entre sí. - DataGridView (Tablas de Datos): Son controles utilizados para la introducción/visualización de gran cantidad de datos. Estas tablas tienen el mismo formato que muchas tablas de base de datos, donde las columnas representan los campos y las filas los registros. 47

53 Figura Ejemplo de controles utilizados más comúnmente en la interfaz gráfica de usuario del Software de Ribav 1D Utilización del Software de Ribav 1D Instalación del software y operaciones previas Los archivos que componen el programa son situados en una carpeta comprimida. Para utilizar el programa habría primeramente que descomprimir dichos archivos para obtener el directorio del programa. El programa utiliza rutas de archivos relativas en vez de absolutas. Por lo tanto podrá colocarse el directorio del programa en cualquier parte de cualquier unidad de disco duro o de almacenamiento donde este habilitada la escritura. Aun así hay que tener en cuenta que el sistema operativo Windows XP limita la longitud de las rutas de archivo a 256 caracteres. Antes de ejecutar el programa hay que cambiar el separador decimal del sistema a operativo a punto (.) en vez de coma (,).Esto se realiza accediendo a la aplicación de Windows XP de: Inicio- >Configuración->Panel de Control->Configuración Regional y de Idioma. Una vez abierta dicha aplicaron se pulsa el botón Personalizar de la pestaña Opciones Regionales que aparece por defecto. Al pulsar ese botón aparecerá un nuevo formulario donde se deberá poner. en la caja de separador decimal y, en la caja de separador de miles, antes de pulsar el botón Aplicar 48

54 Figura Opciones a las cuales hay que acceder dentro del la aplicación Configuración regional y de idioma dentro del Panel de Control de Windows XP para introducir el punto (.) como separador decimal en caso de no estarlo con anterioridad Carpetas y archivos del programa Al abrir el directorio del programa se encuentran 3 archivos y un subdirectorio. De los 3 archivos uno es el archivo ejecutable (Ribav3.exe), otro es una base de datos de depuración (Ribav3.pdb) y el tercero es un archivo XML (Lenguaje de Marcas Extensibles) llamado (Ribav3.xml) Figura Componentes del directorio principal del software de Ribav 1D. Dentro del subdirectorio Data se encuentran otras dos subcarpetas: la carpeta Default y la 49

55 carpeta Proyects. La carpeta Proyects almacena los archivos tanto de entrada como de salida, producidos en cada simulación del programa dentro de cada proyecto. Por otro lado la carpeta Default almacena los archivos que el programa cargará por defecto cada vez que éste se ejecute. Estos archivos pueden ser muy útiles cuando se desea utilizar el programa de forma continuada, realizando pocos cambios tras una determinada ejecución. Un ejemplo de este uso sería el de un proceso de calibración manual. Los archivos que son cargados por defecto en dicha carpeta son los siguientes: Hydromet.csv : Datos hidro-meteorológicos RatingCurves.csv : Curvas de gasto DefaultSimulationPoints.csv : Datos relativos a los punto de simulación VegetationParameters.csv : Parámetros de vegetación SoilParameters.csv : Parámetros de suelo El formato que deberán tener dichos archivos se explica en el apartado siguiente. Figura Archivos de entrada (inputs) que se cargan por defecto al iniciar el programa y que están situados en la subcarpeta /Data/Default Preparación previa de los archivos de entrada (inputs) Antes de ejecutar el programa hay que preparar los ficheros de entrada o inputs del modelo. En todos los archivos inputs no se deben incluir cabeceras. Estos incluirán el punto. como separador decimal y el punto y coma ; como separador de columnas o campos. Para facilitar la visualización y/o manejo de estos ficheros se recomienda utilizar además de editores de texto como WordPad y también hojas de cálculo como Oppenoffice Calc o MS Excel. Estos archivos deberán ser guardados en formato CSV Comma Separated Values (delimitados por comas o punto y coma). 50

56 a) Fichero de datos Hidro-meteorológicos ( Hydromet.csv ) En este fichero se ubican de izquierda derecha los siguientes campos (columnas): - Fecha (dd/mm/aaaa) - Precipitación Diaria (mm) - Evapotranspiración Potencial (mm) - Caudal Diario del tramo de estudio (m3/s) Figura Archivos de datos hidro-meteorológicos con cabeceras en una hoja de cálculo (izquierda) y en formato CSV de Ribav1D (derecha). b) Fichero de Parámetros de Vegetación ( VegetationParameters.csv ) En este fichero se ubican de izquierda derecha los siguientes campos (columnas): - n: Clave numérica de la tabla que indica el numero de fila (número entero) - Veg: Código alfanumérico que indica el tipo de vegetación a parametrizar no interviniendo en los cálculos (cadena de caracteres) - Zr: Profundidad Máxima de Raíces (m) - Ze: Profundidad Efectiva de Raíces (m) - Zsat: Profundidad de Extinción por Saturación (m) - Ri: Factor de Transpiración de la Zona No Saturada ( ) - Rj: Factor de Transpiración de la Zona Saturada ( ) 51

57 - Crt: Conductividad Máxima de Agua Raíz-Suelo (mmmpa-1h-1) - Descr: Descripción de la vegetación a parametrizar no interviniendo en los cálculos (cadena de caracteres) - Cov1: Fracción de Cobertura de las Plantas en Enero ( ) - Cov2: Fracción de Cobertura de las Plantas en Febrero ( ) - Cov3: Fracción de Cobertura de las Plantas en Marzo ( ) - Cov4: Fracción de Cobertura de las Plantas en Abril ( ) - Cov5: Fracción de Cobertura de las Plantas en Mayo ( ) - Cov6: Fracción de Cobertura de las Plantas en Junio ( ) - Cov7: Fracción de Cobertura de las Plantas en Julio ( ) - Cov8: Fracción de Cobertura de las Plantas en Agosto ( ) - Cov9: Fracción de Cobertura de las Plantas en Septiembre ( ) - Cov10: Fracción de Cobertura de las Plantas en Octubre ( ) - Cov11: Fracción de Cobertura de las Plantas en Noviembre ( ) - Cov12: Fracción de Cobertura de las Plantas en Diciembre ( ) c) Fichero de Parámetros de Suelo ( SoilParameters.csv ) En este fichero se ubican de izquierda derecha los siguientes campos (columnas): - n: Clave numérica de la tabla que indica el numero de fila (número entero) - Pst: Porosidad ( ) - Ip: Índice de Porosidad ( ) - Pb: Presión de Burbujeo (Kpa) - Ks: Conductividad Hidráulica Saturada del Suelo (mm/hr) - Mfc: Humedad a Capacidad de Campo ( ) - Descr: Descripción de la vegetación a parametrizar no interviniendo en los cálculos (cadena de caracteres) - Zcmin: Profundidad a considerar en el Ascenso Hidráulico Capilar (m) 52

58 Figura Archivos de parámetros de suelo en formato CSV de Ribav1D (arriba) y con cabeceras en una hoja de cálculo (abajo). d) Fichero de Curvas de Gasto ( RatingCurves.csv ) Se considera que el nivel freático es horizontal al nivel del río. En este fichero se ubica en los campos (columnas) impares los caudales y en los pares los niveles freáticos o de río y todo ello para cada uno de los transectos que forman parte los tramos de estudio. A modo de ejemplo el orden de las columnas de dicho fichero quedaría de la siguiente forma: - Caudal del Transecto 1 (m 3 /s) - Nivel de agua del Transecto 1 (m) - Caudal del Transecto 2 (m 3 /s) - Nivel de agua del Transecto 2 (m) - Caudal del Transecto N (m 3 /s) - Nivel de agua del Transecto N (m) 53

59 Figura Archivos de curvas de gasto con cabeceras en una hoja de cálculo (arriba) y en formato CSV de Ribav1D (abajo). e) Fichero de Puntos de Simulación ( RatingCurves.csv ) En este fichero se ubican de izquierda derecha los siguientes campos (columnas): - Código punto de simulación. - Cota absoluta en metros sobre el nivel del mar del punto de simulación (m). - Tipo de suelo (clave numérica de la tabla de suelos) - Transecto al que pertenece el punto de simulación y que lo relacionará con la correspondiente curva de gasto. - Distancia horizontal del punto de simulación con respecto al Talweg del cauce (solo tiene carácter informativo y no participa en los cálculos). - Código del parche de vegetación al que pertenece el punto (solo tiene carácter informativo y no participa en los cálculos). - Acrónimo del tipo de vegetación. - Descripción del tipo de vegetación observado (solo tiene carácter informativo y no participa en los cálculos). 54

60 - Especies observadas en el parche (solo tiene carácter informativo y no participa en los cálculos). Figura Archivos de puntos de simulación visualizado mediante una hoja de cálculo Organización de Ventanas de Ribav1D Con el fin de lograr un manejo lo más intuitivo posible del programa, se ha dividido el software en varias ventanas (forms) que aparecen de forma sucesiva. El programa de Ribav estará gestionado por una Interfaz de Múltiples Documentos (MDI). La interfaz MDI consiste en una ventana madre que en este caso será la ventana del proyecto que englobará a todas las demás ventanas hijas que irán apareciendo de forma sucesiva. De los formularios 1º hasta el 7º se podrá avanzar y retroceder mediante los botones next y back respectivamente. Se podrá acceder a los formularios 2º, 3º y 4º pulsando sobre los iconos que aparecen en la parte superior izquierda de la ventana MDI. La mayoría de las ventanas contienen los botones: - Load: Sirve para cargar los datos de un archivo CSV distinto al archivo que se carga por defecto de la carpeta Default. - Default: Sirve para cargar los datos por defecto del archivo correspondiente de la carpeta Default. - Erase: Sirve para eliminar todos los datos de una determinada ventana. - Save: Sirve para guardar los datos de una determinada ventana en un archivo tras haber realizado modificaciones. 55

61 Las ventanas que aparecen dentro de Ribav1D en orden de aparición son las siguientes: Tabla 3.12 Ventanas (forms) del Software de Ribav1D Orden Nombre de la Ventana Descripción 1 Main Menu Menú de Incio 2 Soil Parameters Parámetros de Suelo 3 Vegetation Parameters Parámetros de Vegetación 4 Hydro-meteorological Input Data Datos Hidro-meteorológicos de entrada 5 Rating Curves Curvas de Gasto 6 Daily River Levels Niveles de Río de cada Intervalo Diario 7 Simulation Point Data Datos de los Puntos de Simulación 8 Simulations Results Form Formulario de Resultados de la Simulación Ejecución del Software en Ribav1D a. En primer lugar se carga el programa pulsando sobre el archivo: Ribav3.exe dentro del directorio principal del programa (que tiene el icono de un río). Figura Archivos contenidos en el directorio principal de Ribav1D b. A continuación se cargará el programa y tras pasar la pantalla de bienvenida aparecerá el menú de inicio. En él se da la posibilidad de darle un nombre al proyecto, diferente al que sale por defecto de forma aleatoria. Adicionalmente se da la posibilidad de cargar los datos por defecto de la carpeta Default de forma automática, marcando sobre una checkbox (caja de selección). Para pasar al siguiente paso habrá que pulsar sobre el botón Create Proyect. 56

62 Figura Menú de Inicio de Ribav1D c. La siguiente ventana es la de parámetros de suelo. Al pulsar sobre los números de la tabla de la derecha, aparecerán sobre las cajas de texto los valores de cada tipo de suelo. En la parte derecha de la ventana hay una barra de desplazamiento relacionada con los valores de humedad del suelo de una caja de texto. Estos valores de la humedad de suelo no participan en los cálculos posteriores de la simulación del modelo aunque pueden utilizarse para tener una idea general del funcionamiento de la curva de retención de humedad del suelo a partir de los parámetros de suelo, al visualizar los resultados de las cajas de texto de: Matrix Potential e Hydraulic Conductivity. Para pasar a la siguiente ventana bastará con pulsar el botón Next. 57

63 Figura Ventana de Parámetros de Suelo de Ribav1D d. A continuación se muestra la ventana de parámetros de vegetación, donde para cada tipo funcional aparecen sus parámetros al pulsar sobre el número correspondiente. En la parte inferior de la ventana hay una caja de agrupación que contiene 12 cajas de texto, donde se puede introducir el factor de cobertura para cada mes del año. Figura Ventana de Parámetros de Vegetación de Ribav1D e. La siguiente ventana es la de datos hidro-meteorológicos donde aparece una tabla con los registros diarios de fecha, precipitación, evapotranspiración potencial y caudal del río, en el mismo orden que en el archivo CSV. 58

64 Figura Ventana de Datos Hidro-meteorológicos de Ribav1D f. La ventana siguiente es la de las curvas de gasto de todos los transectos del tramo de estudio. Al igual que en el archivo CSV, las columnas impares serán la de los caudales y las pares la de los niveles de río. Para pasar a la siguiente ventana habrá que pulsar el botón Calculate Daily Flow (Next). Entonces se calcularán los niveles de río diarios para cada transecto. Figura Ventana de Curvas de Gasto de Ribav1D g. El resultado de los cálculos realizados se expone en la siguiente ventana. En ella se puede ver el valor del nivel del río en cotas absolutas para cada intervalo diario y para cada transecto. 59

65 Figura Ventana de Datos de los Puntos de Simulación de Ribav1D h. La siguiente ventana es la última en la cual se introducen datos. En ella aparece una tabla que describe las características de cada punto de simulación. 60

66 Figura Ventana de Datos de los Puntos de Simulación de Ribav1D i. En la ventana final se realizan el grueso de los cálculos de la simulación y se almacenan los resultados en ficheros CSV. Según la caja de selección que se pulse, se podrá acceder a 2 tipos diferentes de resultados: CalibrationTable (Basic Information) : Es una tabla resumen de información básica donde se expone para cada uno de los puntos de simulación el resultado del Índice de Evapotranspiración (ETindex) de cada tipo de vegetación. General Data (Extended Information) : Con esta opción se muestran los resultados diarios para todos los puntos de simulación y todos los tipos de vegetación, no solo de la variable de salida del Índice de Evapotranspiración (ETindex) sino de todas las variables internas del modelo. Al haber gran cantidad de datos almacenados, para esta opción se requerirá mayor tiempo de computación y un espacio bastante mayor de almacenamiento en el disco duro. Figura Ventana de Resultados de la Simulación de Ribav1D Resultados obtenidos mediante la simulación del software de Ribav1D 61

67 Tras realizar la simulación se obtendrán los siguientes archivos y directorios de resultados. Se llamará X al nombre del proyecto, Y al nombre genérico del punto de simulación y Z al nombre genérico del tipo funcional de vegetación. a) Calibration Matrix project_x.csv Es el único archivo que se obtendría si solo se pulsase la caja de selección de CalibrationTable-Basic Information Se llama así porque es el archivo utilizado principalmente para la calibración-validación del modelo. Es una tabla resumen donde se expone para cada uno de los puntos de simulación el resultado del Índice de Evapotranspiración (ETindex) de cada tipo de vegetación. En cuanto al orden de las columnas aparecería en primer lugar el número del punto de simulación (que sería el orden en el que aparece en la Ventana de Datos de los Puntos de Simulación). A la derecha aparecería la columna que indicaría la vegetación observada en cada uno de los puntos de simulación. Por último aparecerían las columnas con los valores de los ETindex para cada tipo funcional de vegetación en el orden en el que aparecían dichos tipos en la ventana de Parámetros de Vegetación. Figura Ejemplo de archivo de resultados generales en Ribav1D (Calibration Matrix project_serpis.csv) b) Summary from project_x.csv 62

68 Este archivo proporcionará también para cada punto de simulación los valores del ETindex y de vegetación observada pero adicionalmente también indicará el tipo de suelo y el transecto al que pertenece dicho punto de simulación. Figura Ejemplo de archivo de resumen de resultados en Ribav1D (Summary from Serpis.csv) c) Results from Patch_Y.csv Cada punto de simulación tendrá adjudicado un subdirectorio donde se almacenará archivos que darán información adicional sobre las simulaciones realizadas para dicho punto de simulación. 63

69 Figura Ejemplo del contenido del subdirectorio de una determinado punto de simulación en Ribav1D (Results from Patch_1_3_54) d) Summary from Patch_Y.csv Será uno de los archivos contenidos en cada subdirectorio de Results from Patch_Y.csv. Este archivo proporcionará información de los valores de los parámetros de suelo, parámetros de vegetación y datos de la curva de gasto aplicables a dicho punto de simulación. 64

70 Figura Ejemplo de archivo de resumen de datos de un determinado punto de simulación en Ribav1D (Summary from Patch 1_3_54.csv) 65

71 e) Vegetation_ Z in Patch Y.csv Habrá un archivo de este tipo para cada tipo funcional de vegetación de cada punto de simulación. En el aparecerán todas los valores de todas las variables del modelo para cada intervalo diario de la simulación. De izquierda a derecha aparecerán las columnas de las siguientes variables o datos de entrada: - Fecha (dd/mm/aaaa) - Precipitación (mm) - Evapotranspiración Potencial (mm) - Caudal diario (m 3 /s) - Cobertura Mensual ( ) - Cota de nivel nivel freático (m) - Humedad de suelo al final del día anterior (mm) - Presión matricial (Kpa) - Ascenso hidráulico radicular (mm) - Conductividad hidráulica del suelo no saturado (mm/hr) - Ascenso capilar (mm) - Excedente de agua en la porción de suelo (mm) - Entrada de agua en la porción de suelo (mm) - Humedad de suelo inicial sin contar evapotranspiración (mm) - Humedad relativa de suelo ( ) - Evapotranspiración real no saturada (mm) - Evapotranspiración real saturada (mm) - Evapotranspiración total (mm) - Índice de Evapotranspiración ( ) 66

72 Figura Ejemplo de archivo de datos para un determinado punto de simulación y un determinado tipo funcional de vegetación en Ribav1D (Vegetation_ 2 in Patch 1_3_54.csv) 67

73 3.2.- MODELO RIBAV2D Y SU INTEGRACIÓN CON RIPFLOW Diferencias entre Ribav 1D y 2D La modelización matemática de Ribav1D es idéntica a Ribav2D pero la versión 1D trata con puntos de simulación y la versión 2D con mapas grid. En la siguiente tabla se muestran las diferencias de archivos input y output de ambos programas: Tabla 3.13 Tipos de datos y archivos utilizados en las dos versiones de Ribav. En la tabla se puede observar que Ribav1D gestiona la información espacial mediante puntos de simulación colocados en las zonas más representativas del tramo de estudio, mientras que Ribav2D utiliza mapas grid para gestionar la información variable espacialmente (suelos, vegetación, MDT). Respecto al modelo hidráulico, Ribav1D utiliza curvas de gasto de transectos situados perpendicularmente al tramo de estudio por lo que los puntos de simulación deben de ir situados en dichos transectos. Por otro lado Ribav2D utiliza mapas de lámina de agua y nivel freático que cubren toda la zona de estudio. Cada uno de esos mapas lleva relacionado un determinado caudal de río que produce esa altura de lámina de agua. Dicha relación entre mapas de lámina de agua y los caudales del río correspondientes queda asignado en un fichero de texto aparte. La versión 1D calcula los datos de salida como (el índice de evapotranspiración) una vez para cada simulación, mientras que la versión 2D lo calcula para cada año. Por último Ribav2D simula la vegetación de forma dinámica (en intervalos anuales), mientras que Ribav1D la simula de forma estática (considera que la vegetación no cambia en todo el periodo de simulación). 68

74 Integración de Ribav 2D en Ripflow Una de las razones principales por la que se diseño la versión 2D de Ribav fue para poder integrarse dentro del Ripflow. El modelo Ripflow exige la utilización de mapas grid y además calcula la distribución espacial de la vegetación de forma dinámica en intervalos anuales. El modulo de Humedad de Suelo-Ribav2D irá situado dentro de la Componente de llanura de inundación dinámica, que tiene un bucle de repetición anual. Dentro de esta componente, irá ubicado entre los módulos de Esfuerzo Cortante y de Duración de la inundación. Se situará detrás del modulo de esfuerzo cortante debido a que esté modulo tiene para cada celda del grid dos posibles outputs: El esfuerzo cortante del año del bucle supera al esfuerzo cortante crítico del tipo de vegetación, por lo que la planta se destruye y se vuelve al estado de sucesión inicial de vegetación. El esfuerzo cortante del año del bucle no supera al esfuerzo cortante crítico del tipo de vegetación, por lo que dicha planta sobrevive y sobretodo añade un contador de año a su edad. Si la planta no es destruida por el efecto cortante pasará al módulo de Humedad del Suelo (Ribav 2D). El modulo de Ribav2D devolverá un mapa grid con valores del Índice de Evapotranspiración (ETindex) de todas sus celdas. El valor del ETindex tiene un rango entre 0 y 1, siendo 0 el valor en el que la planta sufre mayor estrés hídrico y siendo 1 el valor en el que obtiene las condiciones más favorables para su desarrollo. Cada tipo de vegetación tiene dos umbrales de evapotranspiración (superior e inferior), que serán variables que intervendrán en la calibración. Dichos umbrales afectarán a la vegetación de la siguiente forma: Si el valor del ETindex está entre 0 y el valor del umbral inferior, entonces la planta se muere y la celda pasa al estado de sucesión vegetal inicia. Si el valor del ETindex está entre el valor del umbral inferior y el valor del umbral superior, entonces la planta no se muere pero pierde el contador de año que había ganado en el modulo de esfuerzo cortante. Si el valor del ETindex está entre el valor del umbral superior y 1, entonces la planta no solo no se muere sino además conserva el contador de año que había ganado en el modulo de esfuerzo cortante. 69

75 El componente de Humedad del Suelo (Ribav 2D) debe de estar situado detrás del modulo de esfuerzo cortante debido a la relación existente entre ambos que involucra al contador de año en los dos últimos casos de umbrales de ETindex descritos anteriormente. Como el modulo Ribav está dentro de la componente de Llanura de Inundación Dinámica, que depende del bucle anual, entonces será llamada una vez por cada año de simulación. En la figura siguiente se explica la estructura y orden de cálculo de los componentes de Ripflow. Figura Esquema que describe la integración del modulo Ribav2D dentro del modelo Ripflow En el apartado anterior se han descrito los parámetros y datos internos de Ribav2D (parámetros estimados de suelo, parámetros calibrados de vegetación, datos hidro-meteorológicos etc.) El resto de los módulos de Ripflow (pertenecientes a la versión anterior de dicho programa) también tendrá 70

76 sus propios datos de entrada (Mapas de Esfuerzo Cortante, Mapa de Zona de Ribera, Mapas de Días de Inundación etc.). Aun así habrá datos externos que serán comunes tanto para Ribav2D como del resto de Ripflow. Estos ficheros de datos externos y comunes serán los siguientes: Mapas de Tipos de Vegetación al principio del año (y). Es un dato de salida de Ripflow pero al mismo tiempo de entrada de Ribav 2D. Mediante un mapa grid en formato ASCII, describe mediante números enteros el tipo de vegetación inicial al principio del año en el que se esté realizando la simulación. Contador de año (y). También es un dato de salida de Ripflow y de entrada de Ribav 2D. Indica un valor ordinal entero que representa el año en el que se está realizando en esos momentos la simulación. Es un dato imprescindible porque lo necesita Ribav2D para extraer los datos hidro-meteorologicos del año correspondiente. Mapas de valores del Índice de Evapotranspiración (ETindex) al final del año (y). A diferencia de los anteriores, es un dato de entrada de Ripflow y de salida de Ribav 2D. Mediante un mapa grid en formato ASCII, describe mediante números decimales los valores de ETindex promedios del año en el que se esté realizando la simulación. Estos valores serán utilizados por Ripflow para realizar la correspondiente comparación con los umbrales de Evapotranspiración tal como se ha descrito anteriormente. En la siguiente figura se representa el flujo de datos internos y externos de Ribav2D y del resto de Ripflow. En verde se representa a los datos o parámetros internos de Ribav, en rojo a los datos internos de Ripflow y en gris a los datos externos comunes a ambos: 71

77 Figura Diagrama de flujo de datos internos y externos de Ribav2D y del resto de Ripflow Utilización de la tecnología Component Object Model (COM) El modulo Ribav2D ha sido escrito en el lenguaje de programación Visual Basic.net, mientras que el resto de Ripflow ha sido escrito en Python utilizando la aplicación Model Builder de ArcGis. Para no tener que traducir el código de alguna de las partes de Ripflow a un lenguaje común se ha optado por utilizar la tecnología COM (Component Object Model). La tecnología COM es una plataforma para componentes de software creada por Microsoft en 1993, que permite la comunicación entre objetos diseñados con lenguajes de programación distintos. Para permitir esta comunicación se ha compilado el modulo de Ribav2D en una librería DLL que además es visible a la tecnología COM. Las librerías DLL son Librerías de Enlace Dinámico (Dynamic Linked Libraries), que son tipos de archivos que contienen subrutinas o variables que pueden ser llamadas desde cualquier aplicación de los sistemas operativos Windows. Con respecto al archivo DLL de Ribav2D, Ripflow incluirá instrucciones que realizarán las siguientes acciones: En primer lugar se ejecutará el archivo-librería DLL que contiene al módulo de Ribav2D como si de un archivo ejecutable (.exe) se tratase. Dicha librería estará situada en la subcarpeta de ensamblado de Windows. En Windows XP la subcarpeta de ensamblado se encuentra en la siguiente ruta: C:\WINDOWS\assembly Posteriormente se enviará información a las variables de entrada de dicha librería. Los datos enviados serán: una cadena de caracteres que representa la dirección relativa del archivo del mapa grid de vegetación inicial (ej. \Data\INPUTS\Maps\VegYear2..asc ) un número entero que define el año en el que transcurre dicha parte de la simulación. (ej. 3 ) otra cadena de caracteres que define el directorio de trabajo, que combinada con las direcciones relativas permite obtener las direcciones absolutas de los archivos (ej. C:\Ripflow\Ribav ) Finalmente se almacenará el valor devuelto por la librería de Ribav2D tras su ejecución. El valor devuelto es la dirección del archivo del mapa grid de los Índices de Evapotranspiración (ETindex), creado tras cada llamada al modulo Ribav2D del bucle año. (ej. C:\Ripflow\Ribav \Data\OUTPUTS\ETindexMaps\ETindexYear3.asc ) 72

78 Para que está interacción entre Ribav2D y Ripflow sea posible se crea en el código fuente de Ribav2D una nueva clase que es visible a la tecnología COM y actúa como nexo entre ambos programas. Las instrucciones más representativas de la clase COM son las siguientes: Figura Ejemplo de Interfaz y Clase COM utilizada como nexo entre Ribav y el resto de Ripflow v.3 (Línea 1): Imports System.Runtime.InteropServices : Esta instrucción llama o importa la clase InteropServices que se encuentra dentro del espacio de nombres System.Runtime. Esta clase está incluída por defecto en Visual Studio 2008 (aunque tiene que ser importada previamente) y es la que permite crear clases visibles a la tecnología COM. (Líneas 4 y 5): <Guid("63E4EE68-637A-431f-AE69-D263C8A2A522"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)> _ Public Interface _Logic Está instrucción declara la interfaz logic que acaba en la línea 9. Una interfaz es similar a una clase porque es una agrupación de variables (también llamadas propiedades) y métodos (que engloban a las subrutinas y funciones). La diferencia principal entre una interfaz y una clase es que la clase es utilizada cuando se crea un objeto instanciado a dicha clase. Por el contrario una interfaz no puede ser instanciada, aunque sí que puede ser heredada o implementada por una clase que de esta forma puede utilizar sus propiedades y métodos. 73

79 Al comienzo de la línea 4 aparece el GUID (Globally Unique Identifier), que es una cadena de caracteres generada al azar con el fin de que sea única (cosa que es altamente probable al haber un número total de caracteres elevado). La plataforma COM utiliza las claves GUID para llamar a los archivos DLL sin tener que referirse al nombre de dicho archivo. Es preferible utilizar estas claves, en vez de nombres, para evitar que en la carpeta de ensamblado haya confusiones entre distintas librerías que tengan un mismo nombre o entre distintas versiones de una misma librería. Al final de la línea 4 se define a la interfaz del tipo InterfaceIsIDispatch, lo que obliga a declarar el tipo de dato de las propiedades que aparezcan más adelante. Está opción es recomendable para este caso, porque acelera el tiempo de ejecución y previene errores. En la línea 5 se declara el nombre de la interfaz como _Logic y se la declara Public, es decir pública, para poder ser accedida externamente sin problemas. (Línea 6): <DispId(1)> Sub CallingSimulate(ByVal VegMap As String, ByVal Year As Integer?, ByVal ConfigFileDirectory As String) En esta línea se declara la subrutina CallingSimulate, que es la subrutina de Ribav2D a la cual se llama de forma externa desde Ripflow. Esta subrutina tiene 3 parámetros de entrada: VegMap (dirección relativa del mapa de vegetación inicial anual), Year (el año de la simulación) y ConfigFileDirectory (directorio de trabajo o workspace, donde están situados los ficheros de entrada y salida de Ribav2D). (Línea 7): <DispId(2)> ReadOnly Property ETindexPath() As String En esta línea se declara el segundo de los componentes de la interfaz que en este caso es una propiedad (variable) de tipo string (cadena de caracteres). Se declara como Readonly (propiedad de solo lectura), debido a que almacena datos de una variable de salida de Ribav2D cuya información (en este caso la ruta del mapa del índice de ET) va a ser exportada a Ripflow. (Líneas 12, 13 y 14): <Guid("1971C5EE-DADE-46cb-BCBF-2D49792A3FCE"), _ ClassInterface(ClassInterfaceType.None), _ ProgId("Ribav2DModule")> Public Class Logic En estas líneas se va a definir la clase Logic, que heredara la subrutina y la propiedad antes descritas de la interfaz _Logic. En primer lugar se utiliza otra clave GUID para identificar a esta clase. Posteriormente se declarará el tipo de la interfaz como: ClassInterfaceType.None, debido a que Microsoft lo recomienda para que no se creen interfaces adicionales que puedan crear problemas de compatibilidad. En la línea 14 se declara no solo el nombre de la clase Logic, si no también el nombre externo al que se llamará mediante la tecnología COM: ProgId("Ribav2DModule"). Este nombre queda como alternativa de llamada a la clave GUID. (Línea 15): Implements _Logic 74

80 Esta instrucción hace que la clase Logic herede las propiedades y métodos de la interfaz _Logic. (Líneas 18 a 22): Public ReadOnly Property ETindexPath() As String _ Implements _Logic.ETindexPath Get Return (OutputETindexPath) End Get End Property Anteriormente se había declarado la propiedad ETindexPath dentro de la interfaz _Logic (línea 7). Por ello en estas líneas se definirán las instrucciones internas de ETindexPath. En primer lugar (línea 19), se enlazará esta propiedad con su declaración anterior mediante la sintaxis Implements. Como se había declarado anteriormente a esta propiedad como de solo lectura (Readonly) será necesario definir la variable interna que va a ser retornada (línea 20), que en este caso se llama: OutputETindexPath. (Líneas 25 a 31): Public Sub CallingSimulate(ByVal VegMap As String, ByVal Year As Integer?, ByVal ConfigFileDirectory As String) Implements _Logic.CallingSimulate Call LoadDEFAULTFilePaths(ConfigFileDirectory) Call MainHydromet(ConfigFileDirectory) Call Simulate(VegMap, Year) 'Mas Instrucciones y Llamadas a Subrutinas End Sub En estás líneas aparecerán las instrucciones contenidas dentro de la subrutina CallingSimulate, que había sido anteriormente declarada en la interfaz _Logic. Los parámetros de entrada de la subrutina son: VegMap, Year y ConfigFileDirectory ; que ya han sido declarado anteriormente. Cabe destacar que la variable Year ha sido declarada como As Integer?, para que mediante el signo de interrogación pueda aceptar además de valores enteros, también valores nulos. En concreto en la línea 26 se enlazará esta subrutina con su declaración anterior dentro de la interfaz Logic.CallingSimulate, mediante la sintaxis Implements. Se considera a CallingSimulate como la primera subrutina o rutina principal del modulo Ribav2D. Por ello contendrá (líneas 27 a 30) llamadas a subrutinas secundarias del programa, además de poder contener instrucciones propias. 75

81 Utilización del Modulo Ribav2D Para describir la utilización de Ribav2D se ha escrito un tutorial, que al estar escrito en inglés debido a requerimientos del proyecto, ha sido incluido en este documento como Anexo I. 76

82 3.3.- PROGRAMA PARA EL CALCULO DEL COEFICIENTE KAPPA DE COHEN ENTRE LOS MAPAS DE VEGETACIÓN OBSERVADA Y VEGETACIÓN SIMULADA DE RIPFLOW V.3 Para facilitar el proceso de calibración/validación de Ripflow v.3 (Ripflow v.2 combinado con Ribav2D), se ha diseñado un programa que determina el número de aciertos mediante el coeficiente Kappa de Cohen. El coeficiente Kappa de Cohen calcula el número de aciertos pero sin tener en cuenta el efecto causado por el azar. En Ripflow v.3 se compararán los mapas de vegetación simulada por el modelo con los mapas de vegetación observada en campo. Para facilitar la visualización de los datos de entrada y de salida de este programa, incluyendo el número de aciertos de la simulación, se han utilizado las librerías de MapWindow, que es un sistema de información geográfica de código abierto que ha sido desarrollado por la Universidad de Idaho. Para describir la utilización de este programa se ha escrito un tutorial, que al estar escrito en inglés, debido a requerimientos del proyecto, ha sido incluido en este documento como Anexo II. 77

83 4.- CASOS DE ESTUDIO

84 4.1.- LOCALIZACIÓN DE LOS TRAMOS DE ESTUDIO Los tramos finalmente estudiados se recogen de forma resumida en la siguiente tabla y se describen en los siguientes apartados. Tabla 4.14.Tabla de los tramos de estudio. Tramo Río Régimen Nº transectos Longitud X Y Lorcha Serpis Regulado Terde Mijares Natural Figura Localización de los tramos de estudio dentro de la demarcación hidrográfica del río Júcar. 79

85 Río Serpis en Lorcha El tramo de estudio localizado en el río Serpis se encuentra situado bajo la presa de Beniarrés, en las proximidades del municipio de Lorcha, a la entrada del paraje conocido como Barranc del Infern. En él el río empieza a encajarse, tallando un espectacular cañón en forma de V, aprovechando las diferentes fallas y otras debilidades geológicas de los terrenos calizos de la zona. El tramo está incluido dentro del LIC Serra de la Safor y de la masa de agua Su altitud media es de unos 229 msnm. La accesibilidad es relativamente sencilla, gracias a la vía verde (antiguo trazado de la línea férrea Alcoy-Gandia) que recorre una de las orillas del río a lo largo del tramo. Es posible recorrer casi todo el cauce a pie debido a su poca profundidad y las orillas son fácilmente transitables, a excepción de algunas zonas con zarzal y cañaveral de alta densidad. Durante los trabajos de campo (veranos de 2007 y 2008), la anchura media de la lámina de agua fue de m, con una profundidad media de 0.41 m, con máximos de unos 0.60 m. La turbidez del tramo es alta. El lecho es bastante estable, en ocasiones completamente sólido, por los afloramientos de roca madre. La mayor parte del tramo tiene una corriente media-débil, que se hace fuerte cuando el cauce se estrecha y el sustrato se hace más grueso. Predominan los cantos y las gravas, con excepción del margen derecho, más elevado, donde las arenas son el sustrato predominante. La acumulación de gravas y gravilla en el centro y márgenes del cauce condiciona la formación de depósitos y bancos que se cubren con herbáceas anuales cada primavera y que desaparecen con las primeras lluvias del otoño. En las zonas arboladas, el porcentaje de sombra sobre el cauce es elevado, en el resto predominan los grandes claros. La presencia de troncos y ramas sobre el agua, así como raíces expuestas aportan heterogeneidad de hábitats. Están presentes las 4 categorías de regímenes de velocidad/profundidad: lento-profundo, lento-somero, rápido-profundo y rápido-somero, aunque la frecuencia de rápidos es escasa, predominando las corrientes y tablas. Geomorfológicamente se trata de una ribera con potencialidad intermedia para soportar una zona vegetada, ya que existen varias zonas con sustrato duro, no apto para el enraizamiento de la vegetación. No obstante, el sustrato predominante es grava y arena, con presencia ocasional de bloques y grandes bloques coluviales, procedentes de las laderas próximas. La zona riparia tiene un desnivel comprendido entre los 20 y 45º, en ocasiones escalonado, y una cobertura vegetal superior al 50 %. 80

86 Figura Foto aérea del tramo de estudio Lorcha (río Serpis) Río Mijares en el Terde Se encuentra en las inmediaciones del Molinete, antiguo molino transformado actualmente en casa de turismo rural. A estas instalaciones se accede desde la carretera que une Mora de Rubielos con la autovía A-23 desviándonos a la derecha pasados 10.5 kilómetros desde Mora de Rubielos. Ambos tramos del Mijares alto pertenecen a masa de agua Tiene una longitud de unos m. La llanura de inundación es relativamente estrecha en comparación con el tramo Terde 2, teniendo mayor anchura de ribera en la margen derecha. La accesibilidad al tramo es sencilla. Una vez en la casa rural El Molinillo es posible acceder al río, se desciende unos 500 m aguas abajo encontrando la cola del tramo de Terde. Este tramo, como es propio de tramos no regulados, tiene una presencia mayoritaria de corrientes. El sustrato es bastante variado, predominando la grava, cantos y bloques. Los elementos de heterogeneidad en el cauce son diversos, destaca la presencia de troncos, ramas y diques naturales así como la presencia de cauces secundarios por los que circula habitualmente el agua. 81

87 Es un tramo corto (218.2 m.) con la presencia de una isla. Las laderas como se ha mencionado antes son escarpadas en la margen izquierda. En la margen derecha se aprecia la presencia de antiguas terrazas. Actualmente no se pueden observar restos de actividades agrícolas ni pies de especies agrícolas asilvestrados. Figura Foto aérea de la parte norte del tramo de estudio Terde (río Mijares). 82

88 Figura Foto aérea de la parte norte del tramo de estudio Terde (río Mijares). 83

89 4.2.- ESTIMACIÓN DE PARÁMETROS Parámetros de Suelo Indican las características del suelo para cada punto de simulación. El tramo de estudio se ha dividido en zonas donde se agrupan los suelos con similares características. Se han recogido muestras de suelo para cada una de esas zonas. Las muestras se extraen mediante la excavación de una cata de al menos 50 cm de profundidad. Se extrae el suelo a esa profundidad porque se evita así las capas de suelo superficiales que tengan horizontes orgánicos o compactados, que no sean representativos con el suelo que está en contacto con las raíces, cuyas características si son de interés para el modelo. El suelo contenido en el tanque descrito anteriormente podrá ser saturada o no saturado dependiendo de la cota del nivel freático en ese momento (WTE). La zona saturada es la que queda por encima del nivel freático será y en esta zona los poros de suelo quedan saturados de agua y las presiones serán positivas. La zona no saturada queda por encima del nivel freático y sus poros no están saturados de agua. A pesar de que las presiones en esta zona son negativas (al predominar las fuerzas de succión), en este modelo se toman los valores absolutos para estas presiones. Los parámetros de suelo del modelo son obtenidos previamente a partir de los parámetros básicos de las muestras de suelo. Los parámetros básicos de suelo son: Porcentaje de gravas (partículas con tamaño >2 mm) Porcentaje de arenas (0,05 mm < tamaño <2 mm) Porcentaje de limos (0,002 mm < tamaño <0,05 mm) Porcentaje de arcilla (tamaño < 0,002) Porcentaje de materia orgánica El valor de estos parámetros de suelo se obtiene mediante análisis de laboratorio. Los análisis realizados son los siguientes: Análisis granulométrico por tamizado: Se utiliza para determinar el porcentaje de limos y arcillas. Análisis granulométrico de suelos finos por sedimentación/ método del densímetro: Se utiliza para determinar el porcentaje de gravas y arenas. 84

90 Determinación del contenido de materia orgánica de un suelo por el método del permanganato potásico: Se utiliza para determinar el porcentaje de materia orgánica. A continuación se muestra una gráfica donde se representa a modo de ejemplo el resultado de un análisis granulométrico tanto en el ensayo por sedimentación como por tamizado: Figura Resultado del análisis granulométrico del suelo de la muestra 1 del tramo de Terde-1 (río Mijares). Posteriormente los parámetros básicos son introducidos en el Modelo: Soil Water Characteristics. Este modelo ha sido desarrollado por Saxton et al 2006 para el USDA (Departamento de Agricultura de EEUU). Se ha escogido este modelo debido a que tiene en cuenta los porcentajes de gravas y de materia orgánica, parámetros que son muy importantes en los suelos de ribera. Además de los parámetros mencionados anteriormente, este modelo también puede contemplar otros parámetros de entrada: como la salinidad (ds/m) y el grado de compactación del suelo. La salinidad no se ha tenido en cuenta debido a que los tramos de estudio se encuentran en zonas medias y altas de los ríos, donde no hay problemas de intrusión marina y donde no se han observado otros tipos de contaminación por sales. El grado de compactación es un factor multiplicador que tampoco se ha tenido en cuenta, debido a que las muestras de suelo de la zona radicular tenían compacidades normales o estándar. Cabe decir que antes de introducir los porcentajes granulométricos en este modelo, hay que separar el porcentaje de gravas del resto debido a que este modelo toma el sumatorio de arena, limo y arcilla como 100. El modelo Soil Water Characteristics proporciona a partir de sus datos de salida y de sus curvas de humedad los siguientes parámetros del modelo: 85

91 Mfc (θfc): Humedad a Capacidad de Campo ( ). Como se ha mencionado antes es la cantidad máxima que puede retener un suelo sin dañar a las plantas por anaerobiosis. Indica la capacidad máxima del tanque del modelo y se haya para el valor típico de humedad a 33Kpa. Pst (Φ): Porosidad ( ). Es la proporción del volumen de suelo ocupado por poros (huecos) en comparación con la fracción sólida. Los poros podrán ser ocupados tanto por aire como por agua dependiendo del grado de humedad. Ks: Conductividad Hidráulica Saturada del Suelo (mm/hr). En suelos no saturados, la Conductividad Hidráulica es variable y dependiente del grado de humedad. Aun así en condiciones de saturación la conductividad es constante para cada tipo de suelo. En términos generales se podría definir a la conductividad hidráulica como la distancia recorrida por el flujo de agua por unidad de tiempo. Pb (Hb): Presión de Burbujeo (en valor absoluto) (Kpa). Es la presión ejercida por las burbujas de aire en zonas donde el suelo está en condiciones de saturación. Esto es debido a que, aunque el suelo este saturado, siempre habrá zonas donde hayan quedado burbujas de aire atrapadas que todavía ejerzan una presión matricial residual. Ip (λ): Índice de Porosidad ( ). El parámetro de la porosidad anteriormente descrita indica exclusivamente la proporción de poros con respecto a la fracción sólida. Por ello se utiliza adicionalmente el parámetro del índice de porosidad porque indica el tamaño y la interconectividad entre los poros. Debido a las tensiones capilares, este parámetro resulta fundamental para determinar tanto la presión matricial como la conductividad hidráulica para suelo no saturado. 86

92 En la figura siguiente se puede observar los parámetros de suelo anteriormente citados representados gráficamente: Figura Curvas de retención de humedad según las ecuaciones de Campbell. Por último se va mostrar a modo de ejemplo una tabla donde se muestra los parámetros de suelo del modelo para todas las muestras obtenidas en el tramo de Terde-1 (río Mijares). Las tablas de parámetros de suelo del modelo para los demás tramos se muestran en el anexo correspondiente. Código del Suelo Tabla 4.15 Valores de los parámetros de suelo del tramo de Terde-1 (río Mijares) Porosidad Índice de Porosidad Presión de Burbujeo Conductividad Hidráulica Saturada del Suelo Humedad a capacidad de Campo Profundidad a considerar en el Ascenso Hidraulico Capilar Pst Ip Pb Ks Mfc Zcmin ( ] ( ] (Kpa] (mm/hr] ( ] (m] Datos Hidrometeorológicos Son los datos de entrada relacionados con los procesos hidrológicos o meteorológicos: (PP): Precipitación Diaria (mm). (descrito anteriormente) (ETP): Evapotranspiración Potencial (mm). (descrito anteriormente) Qcurve(j): Valores del Caudal de Río de la Curva de Gasto (m3/s). Hcurve(j): Valores de Nivel de Río de la Curva de Gasto (m) 87

93 Qdaily(t): Caudal Diario Observado en el Río (m3/s). Son los datos del cuadal de río que recojen diariamente las estaciones de aforo de las demarcaciones hidrográficas. WTE(t): Cota del Nivel Freático Calculada (m). Se calcula mediante interpolación lineal introduciendo los datos anteriores en la siguiente ecuación: WTE ( t ) Hcurve Qdaily Qcurve Qcurve ( t ) ( j 1) ( j ) ( j 1) ( Hcurve Hcurve ) = ( j 1) + j Qcurve ( j ) ( 1) Parámetros de Vegetación A continuación se describen los parámetros de vegetación que podrán variar según el tipo funcional de vegetación. Pcrit: Presión para el Punto de Humedad Crítica (KPa). Indica la presión en la cual la planta deja de evapotranspirar más aunque reciba más humedad. El valor típico es de 95Kpa. Pwp: Presión para el Punto de Marchitez Permanente (KPa). Es la presión a la cual las plantas no pueden extraer más agua del suelo y pierden su turgencia. El valor típico es de 1500 Kpa. Cov (λv): Fracción de Cobertura de las Plantas ( ). Indica el grado de cobertura que ejercen las plantas sobre la superficie del suelo. Aunque las plantas tiendas a colonizar toda la superficie del suelo hay zonas en las que o no pueden o lo realizar con mucha dificultad en casos como afloramientos rocosos o compactación del suelo por tránsito de animales. Crt: Conductividad Máxima de Agua Raíz-Suelo (mmmpa-1h-1). Es un factor multiplicador que mide la eficiencia en el flujo de agua desde el suelo a las raíces para unas determinadas condiciones de presión. Zr: Profundidad Máxima de Raíces (m). Indica la profundidad máxima a la que las raíces pueden acceder al agua del nivel freático. Ze: Profundidad Efectiva de Raíces (m) Es la profundidad máxima a la que se encuentran las raíces que captan agua y evapotranspiran de la zona no saturada de suelo, que queda por encima del nivel freático. 88

94 Zsat: Profundidad de Extinción por Saturación (m). Es la profundidad máxima a la cual las plantas pueden tolerar tener el suelo saturado de agua sin ser perjudicadas debido a la asfixia Clasificación utilizada para los de tipos funcionales de vegetación Para los tramos de estudio de la demarcación del río Júcar se ha realizado una clasificación con 4 tipos funcionales de vegetación. Esta clasificación está basada en el hábito de crecimiento de las especies vegetales, en la profundidad radicular, en la demanda de agua e indirectamente en la posición con respecto al cauce. Dicha clasificación es la siguiente: Herbáceas de Ribera (RH): Son las plantas sin tejidos leñosos que requieren suelos en condiciones de saturación permanente. Tienen un sistema radicular generalmente poco profundo y por ello se encuentran normalmente en zonas más cercanas a la lámina de agua del río, donde hay una elevación reducida con respecto al nivel freático. En este grupo se encuentran tanto las herbáceas de reducido tamaño (Apium nodiflorum) como otras de tamaño considerable como son las cañas alóctonas (Arundo donax) que pueden llegar a tener hasta los 5 metros de altura. Se considera el estado más regresivo de la vegetación de ribera después del suelo desnudo. Juveniles de ribera, pequeños arbustos y enredaderas (RJ): Los juveniles de ribera son individuos de pocos años de edad de especies leñosas (Populus spp y Salix spp) que durante las fases avanzadas de su desarrollo formarán parte de los estados más evolucionados del ecosistema fluvial. Aunque en esta fase tienen un porte todavía reducido, la longitud de las raíces es bastante elevada en comparación con la parte aérea, debido a su búsqueda del nivel freático. En este tipo funcional también se incluye a los pequeños arbustos (o matorrales) y a las plantas enredaderas (o lianas). Esto es debido a que estas plantas, también leñosas, tienen un desarrollo radicular que se asemeja más a las plantas juveniles que a las plantas arbóreas y arbustivas de gran tamaño. Árboles adultos de ribera y grandes arbustos (RA): En este grupo se incluyen las especies leñosas (tanto arbóreas como arbustivas) de gran tamaño y en estado maduro. Representan el estado más evolucionado del ecosistema de ribera, lo que se conoce como bosque de galería. Las raíces son de gran longitud y tienen una eficiencia bastante elevada para extraer agua del nivel freático. Por otro lado tienen cierta tolerancia a la asfixia radicular, pero aun así en menor grado que las herbáceas de ribera. 89

95 Vegetación terrestre (TV): Se incluyen las especies vegetales (herbáceas, arbustivas y arbóreas), que no forman parte del ecosistema acuático propiamente dicho. Son las especies que poblarían la zona (dependiendo de las características climatológicas y edafológicas) si no hubiera un curso de agua y si el nivel freático no fuera somero. El límite entre la vegetación terrestre y la de ribera resulta fundamental para determinar el contorno de la zona de estudio. En algunas zonas existen parches de transición donde hay plantas tanto terrestres como riparias. Por ello estos parches intermedios son muy útiles para determinar la influencia que tiene la orografía sobre las series temporales de caudales del río. En la siguiente tabla se muestra la vegetación observada en cada uno de los parches del tramo de estudio de Lorcha (río Sérpis). Para cada parche se muestra: las especies o grupos de especies más representativos, el tipo grupo funcional en el que han sido clasificados y el grado de cobertura vegetal de las copas. Código Parche Tabla Parches de Vegetación del tramo Lorcha del río Serpis Vegetación Observada más Representativa Tipo Funcional Observado Grado de Cobertura Vegetal de las Copas ( ) 1 Herbazal de ribera en zona encharcada permanentemente RH Adelfas RA Herbazal de ribera RH Herbazal en isla con gran impacto de inundación RH Cañaveral RH Herbazal de ribera RH Carrizal con regeneración de Sauces (impacto de avenida alto) RH-RJ Herbazal de ribera RH Sauces (restos acumulados en troncos por arrastre en avenida) RJ Cañaveral RH Zarzal con Cañaveral RH-RJ Adelfas y Majuelos - Impacto de avenida RA Adelfas, Lentiscos y Pinos TV Herbáceas de ribera en lengua de grava RH Chopos, Sauces y Majuelos RA Carrizal y pequeña cantidad de Apium nodiflorum RH Herbazal mezclado con Chopos, Sauces y Adelfas RH-RA Herbazal húmedo de Apium nodiflorum RH Cañaveral en isla RH Mezcla de Chopos con vegetación terrestre (Pinos, Lentiscos ) RA-TV Sauces, Majuelos y Adelfas RA Lentiscos TV Majuelos y Zarzas RJ-RA

96 Código Parche Vegetación Observada más Representativa Tipo Funcional Observado Grado de Cobertura Vegetal de las Copas ( ) 26 Lentiscos con Adelfas RA-TV Zarzal con Adelfas y Saucos RJ-RA Carrizal y Zarzas RH-RJ Lentiscos con Adelfas TV Adelfas, Zarzas, Majuelos y Rosal silvestre RJ-RA Zarzal RJ Carrizal mas herbazal de orilla RH Sauces, Chopos, Adelfas RA Carrizo y Herbazal RH Eneas RH Adelfas, Zarzas y algo de Equisetos RJ-RA Herbazal de ribera RH Chopos y Vegetación Terrestre RA-TV Chopos, Zarzas y otras Herbáceas RA Herbazal de ribera RH Regeneración de Chopos y Herbazal de ribera RH-RJ Adelfas y Juncos RH-RA Mezcla de Sauces juveniles y adultos RJ-RA Mezcla de Chopos adultos y juveniles RJ-RA Herbazal de ribera RH Sauces y Chopos adultos RA Herbazal de ribera RH Adelfar con Zarzas y Juncos RJ-RA Adelfar con Lentiscos y Aladiernos RA-TV Sauces y Zarzas RJ-RA Adelfas con Juncos RH-RA Zarzal RH-RJ Ecosistema forestal del contorno TV Ecosistema forestal del contorno TV 1.00 En la siguiente tabla se muestran los nombres científicos de las especies mencionadas anteriormente: Tabla 4.17: Nombres comunes y científicos del tramo Lorcha de río Sérpis Nombre Común Adelfa Aladierno Caña Nombre Científico Nerium oleander Rhamnus alaternus Arundo donax 91

97 Carrizo Chopos Enea Junco Común Lentisco Majuelos Pino Rosal Silvestre Sauces Sauco Zarzas (Zarzamora) Phragmites australis Populus sp. Thypha latifolia Scirpus holoschoenus Pistacia lentiscus Crataegus monogyna Pinus halepensis Rosa canina Salix sp. Sambucus sp. Rubus ulmifolious A continuación se muestra un mapa del tramo del estudio de Lorcha con los parches de vegetación clasificados en tipos funcionales: 92

98 4.3.- ANÁLISIS DE SENSIBILIDAD El análisis de sensibilidad es el primer paso para reconocer la incertidumbre. Es utilizado para examinar cómo el cambio en un parámetro (input) afecta a un resultado (output). Esto permite identificar las variables más críticas o construir escenarios posibles que permitirán analizar el comportamiento de un resultado bajo diferentes supuestos. Este análisis permite medir el cambio en un resultado dado, un cambio en un conjunto de variables. Todo ello tanto en términos relativos como en términos absolutos. Los objetivos del análisis de sensibilidad son: Identificar las variables que más influyen en el modelo (más sensibles o críticas). Identificar dónde se debe dedicar más esfuerzos tanto en el proceso de planificación como en el de control y seguimiento de una decisión. Identificar las variables que deben ser incluidas en la creación de escenarios o en las simulaciones posteriores Planteamiento del análisis de sensibilidad Para este modelo se va a realizar un análisis de sensibilidad donde se determinará la importancia de una serie de parámetros de vegetación, en cuanto a como influyen sobre el resultado final (variable de salida), y todo ello para varios escenarios Parámetros de Vegetación Los parámetros de vegetación que serán evaluados en este análisis son: Rj: Factor de Transpiración de la Zona Saturada ( ). Es un factor multiplicador sobre la eficiencia en las raíces de las plantas de un determinado grupo funcional en los casos en los que estas se encuentran en la zona saturada (debido al ascenso temporal del nivel freático). Ri: Factor de Transpiración de la Zona No Saturada ( ). Es otro factor multiplicador sobre la eficiencia pero en los casos en los que las raíces se encuentran en la zona saturada. 93

99 CRT: Conductividad Máxima de Agua Raíz-Suelo (mmmpa -1 h -1 ). Es un factor multiplicador que mide la eficiencia en el flujo de agua desde el suelo a las raíces para unas determinadas condiciones de presión. Zr: Profundidad Máxima de Raíces (m). Es un parámetro específico para cada tipo funcional de vegetación. Aunque describe la profundidad máxima a la que llegan las raíces, las raíces más profundas no intervienen en todos los procesos fisiológicos que son considerados en el modelo. Ze: Profundidad Efectiva de Raíces (m). Es la profundidad máxima a la que se encuentran las raíces que intervienen en la Evapotranspiración Real (ETR) de forma considerable. Zsat: Profundidad de Extinción por Saturación (m). Es la cota máxima a la cual las plantas pueden tolerar tener el suelo saturado de agua sin ser perjudicadas debido a la asfixia radicular Variable de Salida Principal del Modelo La variable de salida (output) más importante del modelo es la Evapotranspiración Real (ETR). Dicha variable expresa la cantidad de agua diaria (mm) que utiliza una planta bajo unas determinadas condiciones y en un determinado estado vegetativo. Su importancia dentro del modelo es debida a que indica el grado de adecuación de una planta (o grupo funcional) a unas condiciones ambientales, por lo que estará directamente relacionada con el valor observado en el campo, que es la ausencia/presencia de un determinado grupo funcional. Por ello está variable de salida será fundamental cuando se deseen realizar las calibraciones, validaciones y simulaciones del modelo. Para determinar la sensibilidad de la Evapotranspiración Real (ETR) se va a utilizar un Índice que será el cociente entre esta y la Evapotranspiración Potencial (ETP). La ETP indica la cantidad máxima de agua que puede evapotranspirar una planta en condiciones ambientales óptimas y está regulada solamente por condiciones meteorológicas. Por tanto la ecuación del Índice de Evapotranspiración (ETind) es la siguiente: ETR ET ind = ETP eal otencial Cuanto más varíe el (ETind) ante la modificación de un determinado parámetro, se considerará a dicho parámetro como más sensible. 94

100 Escenarios Utilizados durante el Análisis de Sensibilidad Para el análisis de sensibilidad se realizaron 40 simulaciones. Se tomaron 20 puntos de simulación de un transecto del tramo de estudio. Cada uno de esos puntos tenía una cota distinta (y por tanto una elevación distinta sobre el nivel freático). De esos 20 puntos 13 de ellos tenían un suelo limoarenoso (llamado Suelo 4 ) y 7 de ellos un suelo arenoso con muchas gravas (llamado Suelo 10 ). 95

101 Escenarios de suelos Los dos tipos de suelos tendrán unos parámetros básicos obtenidos en el laboratorio que son los % de: gravas, arena, arcillas y materia orgánica. Los parámetros básicos para los suelos utilizados en este análisis son los siguientes: Tabla Parámetros Básicos de Suelo Parámetros Básicos Código Gravas Arenas Arcillas Muestra Materia Orgánica Observaciones de los Suelos 0,05<S < >2mm C< 0,002 mm (% Peso) 2mm limo-arenoso arenoso con muchas gravas A partir de estos últimos parámetros se han obtenido otros (mediante el modelo Soil Water Characteristics ) que serán los parámetros del modelo y son: Pst: Porosidad ( ) Pb: Presión de Burbujeo (Kpa) Ip: Índice de Porosidad ( ) Ks: Conductividad Hidráulica Saturada del Suelo (mm/hr) Mfc: Humedad a Capacidad de Campo ( ) Los parámetros de suelo del modelo para los suelos utilizados en este análisis son los siguientes: Tabla Parámetros Básicos de Suelo Parámetros del Modelo Código Presión de Burbujeo Porosidad Índice de Poros Conductividad Hidráulica Saturada Humedad a Capacidad de Campo Observaciones Muestra Pb (Kpa) Pst ( ) Ip ( ) Ks (mm/hr) Mfc ( ) de los Suelos limo-arenoso arenoso con gravas Escenarios con distintos regímenes de caudal En el modelo se incluyen datos de caudal de río de una estación de aforo cercana. En el análisis de sensibilidad se considerarán dos regímenes de caudal distintos (natural y alterado). Para el régimen natural se tomarán datos de caudales de años previos a la construcción de la presa de Beniarrés, concretamente de los años: Para el régimen alterado se tomarán datos recientes de los años En la tabla siguiente tabla se muestran las funciones estadísticas de los datos de 96

102 caudal tanto para régimen natural como alterado. Se observa que para el régimen natural (sin regulación de la presa) la medida de la dispersión de la varianza es bastante más elevada y el valor máximo mucho más extremo. Tabla Comparación de Valores entre Régimen Natural y Alterado Función Regímenes Estadística Natural Alterado Media Mediana Varianza Máximo Mínimo Los valores de caudal son fundamentales en el modelo, porque mediante las curvas de aforo permiten obtener los niveles de río diarios. Como los puntos de simulación son cercanos al curso fluvial, se considera que el nivel freático es horizontal y sus valores equivalentes a los del nivel de río. La profundidad del nivel freático y su variación temporal es una variable muy importante en el modelo debido a las adaptaciones que tienen los distintos grupos funcionales de vegetación para los periodos tanto de sequía como de inundación Escenarios para distintos puntos con distinta cota La cota de los 20 puntos de simulación es también muy importante en este modelo porque es necesaria para determinar la afección del ascenso/descenso del nivel freático sobre la zona radicular de las plantas que componen los grupos funcionales de vegetación. En la siguiente tabla se muestra la cota de cada uno de los puntos en metros sobre el nivel del mar. Adicionalmente se muestra la elevación de los puntos con respecto al nivel medio de río para ambos regímenes de caudal. También se muestra el tipo de suelo que es considerado para cada uno de dichos puntos. Tabla Datos sobre los puntos de simulación elegidos para el análisis de sensibilidad Cota del Punto de Simulación (m.s.n.m.) Elevación sobre el Nivel del Río Promedio (m) En Régimen Natural En Régimen Alterado Código del Suelo del Punto de Simulación

103 Modificaciones de los valores de los parámetros Para cada uno de los 4 tipos funcionales de vegetación (TV/RA/RJ/RH) se va a modificar 2 veces cada uno de los parámetros (Zr/ Ze/ Zsat/ Ri/ Rj/ CRT). En una de ellas se modificará el valor inicial un 30% por encima y en la otra un 30% por debajo del valor inicial. Al valor 30% superior se le aplicará el símbolo + y al valor 30% inferior el símbolo -. A continuación se mostrará unas tablas para cada tipo funcional, donde aparecen los valores modificados (arriba/debajo) de los parámetros intervinientes en este análisis. Las celdas de los valores modificados han sido resaltadas en un color diferente. 98

104 Tabla Modificaciones de los parámetros del tipo funcional de Vegetación Terrestre (TV) TIPO FUNCIONAL: TV (Vegetación Terrestre) Identificación Grupo Profundidad Máxima de Raíces (m) Profundidad Efectiva de Raíces (m) Profundidad de Extinción por Saturación (m) Factor de Transpiración de la Zona No Saturada ( ) Factor de Transpiración de la Zona Saturada ( ) Conductividad Máxima de Agua Raíz- Suelo (mmmpa-1h-1) Zr Ze Psat Ri Rj CRT Valores Iniciales Zr Ze Psat Ri Rj CRT Zr Ze Psat Ri Rj CRT Tabla Modificaciones de los parámetros del tipo funcional de Arbóreas de Ribera (RA) TIPO FUNCIONAL: RA (Arbóreas de Ribera) Identificación Grupo Profundidad Máxima de Raíces (m) Profundidad Efectiva de Raíces (m) Profundidad de Extinción por Saturación (m) Factor de Transpiración de la Zona No Saturada ( ) Factor de Transpiración de la Zona Saturada ( ) Conductividad Máxima de Agua Raíz- Suelo (mmmpa-1h-1) Zr Ze Psat Ri Rj CRT Valores Iniciales Zr Ze Psat Ri Rj CRT Zr Ze Psat Ri Rj CRT

105 Tabla Modificaciones de los parámetros del tipo funcional de Juveniles de Ribera (RJ) TIPO FUNCIONAL: RJ (Juveniles de Ribera) Identificación Grupo Profundidad Máxima de Raíces (m) Profundidad Efectiva de Raíces (m) Profundidad de Extinción por Saturación (m) Factor de Transpiración de la Zona No Saturada ( ) Factor de Transpiración de la Zona Saturada ( ) Conductividad Máxima de Agua Raíz- Suelo (mmmpa-1h-1) Zr Ze Psat Ri Rj CRT Valores Iniciales Zr Ze Psat Ri Rj CRT Zr Ze Psat Ri Rj CRT Tabla Modificaciones de los parámetros del tipo funcional de Herbáceas de Ribera (RH) TIPO FUNCIONAL: Identificación Grupo Profundidad Máxima de Raíces (m) RH (Herbáceas de Ribera) Profundidad Efectiva de Raíces (m) Profundidad de Extinción por Saturación (m) Factor de Transpiración de la Zona No Saturada ( ) Factor de Transpiración de la Zona Saturada ( ) Conductividad Máxima de Agua Raíz- Suelo (mmmpa-1h-1) Zr Ze Psat Ri Rj CRT Valores Iniciales Zr Ze Psat Ri Rj CRT Zr Ze Psat Ri Rj CRT

106 Resultados del análisis de sensibilidad Este apartado trata sobre los resultados del análisis de sensibilidad presentados en 16 tablas. En la mitad de las tablas se habrá aplicado un régimen natural de caudales y en la otra un régimen alterado. Además 8 de las tablas tendrán Suelo 4 (limo-arenoso) y las otras 8 un Suelo 10 (arenoso y gravoso). Habrá 4 tablas por cada uno de los 4 tipos funcionales de vegetación: TV Vegetación Terrestre; RA-Arbóreas de Ribera; RJ-Juveniles de Ribera; RH-Herbáceas de Ribera. Las tablas de Suelo 4 tendrán 13 puntos de simulación en representados en 13 filas o registros y las de Suelo 10 tendrán 7. En primer lugar se va a representar un diagrama a modo de guía. En las tablas posteriores de resultados, se resaltará para cada fila el valor de la variación de parámetro más elevado con un color diferente. Figura Diagrama de las tablas utilizadas en el análisis de sensibilidad (ver anexo correspondiente) A continuación se va a mostrar una tabla de ejemplo de los resultados del análisis de sensibilidad. El resto de las tablas quedarán representadas en el anexo correspondiente: 101

107 Tabla Ejemplo de tabla de resultados del análisis de sensibilidad Vegetación: Suelo: Régimen de Q: RH (Herbáceas de Ribera) 4 (Limo-Arenoso) Natural Cota (m.s.n.m.) Elevación sobre el Nivel del Río (m) Valores Estándar del Índice de Evapotranspiración Variación del Índice de Evapotranspiración según el Parámetro Modificado Parámetro más Sensible Zr Ze Zsat Ri Rj CRT E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze E E E E E E+00 Ze Conclusiones del análisis de sensibilidad Tras analizar los resultados se ha llegado a las siguientes conclusiones: El parámetro de vegetación menos sensible es CRT : Esto era ya predecible debido a que en la bibliografía consultada sobre el parámetro CRT se citaba casi siempre el valor fijo de: 0.97 mmmpa -1 h -1 El parámetro de vegetación Zsat también es muy poco sensible : Esto se aprecia sobretodo en los puntos de mayor cota o en las simulaciones con régimen alterado debido a que en estos casos la Cota de Extinción por Saturación (Cpsat) se alcanza con mayor dificultad. Los parámetros claramente más sensibles son: Zr, Ze, Ri y Rj : Para realizar las calibraciones se tendrá en cuenta especialmente a estos últimos parámetros pero también a Zsat. 102

108 4.4.- CALIBRACIÓN DEL MODELO En este apartado se describe el proceso mediante el cual se modifican los parámetros más sensibles, con el fin de que la vegetación simulada coincida lo máximo posible con la vegetación observada en campo. La vegetación ha sido clasificada en tipo funcionales de vegetación y el modelo indica, para cada punto de simulación, cuál de los tipos funcionales es más idóneo para las condiciones ambientales expuestas. Los parámetros utilizados en la calibración son todos parámetros de vegetación. Tras realizar consultas bibliográficas y tras realizar el análisis de sensibilidad se concluyó que los parámetros de vegetación más sensibles, y por tanto a utilizar en la calibración, eran los siguientes: - Zr: Profundidad Máxima de Raíces (m) - Ze: Profundidad Efectiva de Raíces (m) - Zsat: Profundidad de Extinción por Saturación (m) - Ri: Factor de Transpiración de la Zona No Saturada ( ). - Rj: Factor de Transpiración de la Zona Saturada ( ). La fracción de cobertura de la vegetación se ha considerado la unidad en los tipos funcionales RH, RA y TV mientras que en el caso de RJ se ha considerado 0.8 por presentar la vegetación juvenil menor densidad. La conductividad máxima de agua raíz-suelo se ha fijado en 0.97 mmmpa -1 h -1 para todos los tipos funcionales. La presión para el punto de humedad crítica se ha fijado en 500 Kpa en los tipos funcionales RH y RJ, 250 Kpa en RA y 95 Kpa en TV; mientras que la presión para el punto de marchitez permanente se ha mantenido en 1500 Kpa en todos los casos. Se ha realizado la calibración previa del modelo en dos tramos con régimen de caudales diferentes con el fin de obtener unos parámetros de vegetación del modelo capaces de reflejar coherentemente la distribución de los tipos funcionales de vegetación en condiciones hidrológicas diversas. De este modo se ha realizado una primera calibración en el tramo Terde 1 del Río Mijares, el cual se encuentra en una zona de cabecera y con régimen natural de caudales. Paralelamente se ha realizado la calibración del modelo en el tramo Lorcha del Río Serpis, el cual está sometido a la regulación de caudales del Pantano de Beniarres. Finalmente, y teniendo en cuenta los resultados de ambas calibraciones, se han seleccionado los parámetros óptimos del modelo para la calibración definitiva del mismo. 103

109 Matriz de confusión Para visualizar los resultados de cada uno de los pasos de la calibración se utilizará una matriz de confusión. La matriz de confusión es una herramienta de visualización donde las columnas de la matriz representan los valores simulados de cada clase, mientras que cada fila representa los valores reales. En nuestro caso las clases de la matriz son los tipos funcionales de vegetación, tanto puros como mixtos. Para cada punto de simulación de nuestro tramo de estudio existe un valor de tipo de vegetación observado en campo y otro valor que es el de vegetación simulada por el modelo. A medida de que se van obteniendo resultados de cada punto de simulación se añaden valores unitarios en las celdas cuyos índices de filas y columnas coinciden con las clases observadas y simuladas respectivamente. La matriz de confusión para el proceso de calibración tiene 8 columnas y 8 filas. Como resultado habrá un total de 36 celdas que se agruparán de la siguiente manera: - 16 celdas donde coinciden los valores simulados y observados exclusivamente para los tipos funcionales puros (agrupación A de la tabla) celdas donde coinciden los tipos funcionales simulados puros con los observados mixtos (agrupación B de la tabla). - 4 celdas donde coinciden los tipos funcionales simulados mixtos, con los observados mixtos (agrupación C de la tabla). Estas celdas solo contabilizan los valores a partir de las celdas de la agrupación B de la tabla, y tan solo en los casos en los que los valores simulados puros coincidan con algunos de los valores observados mixtos. La diagonal principal de la matriz de confusión ha sido resaltada en gris ya que este conjunto de celdas se caracterizan porque los valores simulados coinciden con los observados. La calibración tiene como objetivo que estos valores sean lo más altos posible a costa de reducir los valores de las demás celdas (especialmente de las más alejadas de la diagonal). Las tablas resultantes, para cada uno de los dos tramos seleccionados para la calibración del modelo, quedan representadas de la siguiente forma: 104

110 Agrupación A Agrupación B Agrupación C Figura Matriz de confusión para tipos de vegetación mixtos. A efectos de comprobación se ha incluido una columna adicional en el lado derecho de la tabla donde se suman los valores totales de para cada fila. Al mismo tiempo los valores totales de dichas filas son sumados en la celda inferior de dicha columna. El valor de dicha celda tiene que ser igual al número total de puntos de simulación. Igualmente se contabiliza la suma de cada uno de los tipos funcionales simulados y el total de puntos reflejados en la simulación. A partir de estos totales se han obtenido los porcentajes de acierto de cada simulación sobre cada uno de los tipos funcionales observados y el conjunto de todos ellos Proceso de Calibración en Lorcha del Río Serpis (Régimen alterado) Aunque durante la calibración se han realizado multitud de simulaciones, a continuación sólo se van a mostrar aquí las consideradas de mayor importancia Simulación 1 de Lorcha En la simulación 1ª, donde se tienen en cuenta la hipótesis inicial, el valor de los parámetros para los distintos tipos de vegetación es el siguiente: Tabla Parámetros de la Simulación 1 de Lorcha 105

111 Tras ejecutar el software y transferir los resultados del Índice de Evapotranspiración a la matriz de confusión, se obtienen los siguientes resultados: Tabla Matriz de Simulación 1 de Lorcha En está matriz se observa que los parámetros del tipo funcional RA (Árboles Adultos y Grandes Arbustos de Ribera), es favorecido enormemente por lo que habrá que penalizar este tipo funcional modificando sus parámetros. El resto de tipos funcionales no se simulan correctamente por lo que la hipótesis inicial se ha descartado automáticamente Simulación 2 de Lorcha Debido a la gran predominancia del tipo RA, en la Simulación se han reducido los parámetros Zr (Profundidad Máxima de Raíces) y Rj (Factor de Transpiración de la Zona Saturada) de este tipo funcional. Además se han incluido diferentes modificaciones en los demás tipos funcionales con el fin de favorecerlos al máximo tras varios pasos intermedios. Los resultados evidencian mejoras sustanciales respecto a los obtenidos anteriormente con los parámetros de la hipótesis inicial. Los parámetros de calibración en este punto del proceso se han establecido como se muestra en la siguiente tabla. 106

112 Tabla Parámetros de la Simulación 2 de Lorcha Tras realizar la simulación con los parámetros antes expuestos se obtienen los siguientes resultados: Tabla Matriz de Simulación 2 del Lorcha En está simulación se observa que los aciertos han ido también en aumento. El tipo funcional más beneficiado ha sido el de vegetación terrestre (TV). Por otro lado los tipos RH y RJ también han mejorado sensiblemente sin perjudicar al tipo RA. Tan solo sale perjudicado el tipo RJ+RA donde varios aciertos anteriores irán a parar al tipo TV. Dadas las notables mejoras producidas en la 107

113 simulación con los parámetros aquí definidos, estos se han tenido en consideración al decidir los parámetros definitivos del modelo. Sin embargo, y a pesar de haberse obtenido aquí resultados muy satisfactorios para los tipos funcionales RA y TV principalmente, se ha decidido continuar con el proceso de calibración para lograr mejores resultados en los tipos funcionales restantes Simulación 3 de Lorcha En esta simulación se realizarán los siguientes cambios a los parámetros de vegetación: El tipo funcional RH se ha limitado mediante el parámetro Zr del mismo modo que se ha tratado de compensar este efecto incrementando ligeramente su parámetro Ze. El resultado de los puntos simulados respecto a este parámetro se modifica ligeramente logrando simular un punto de simulación más que en el caso anterior. El balance se modifica ligeramente, beneficiándose RH respecto al caso anterior. Se ha seguido el mismo razonamiento en las modificaciones realizadas a Zr y Ze en los tipos funcionales RJ y RA lográndose mejores resultados tanto en los tipos funcionales puros como en los mixtos. El tipo funcional TV ha visto reducido aquí su Zr y su Ze, a pesar de ello no se observan resultados mucho peores por verse beneficiado respecto al resto de tipos funcionales en la eficiencia de transpiración en la zona no saturada. Con estos cambios se observan mejoras en el balance de la mayoría de tipos funcionales y en ninguno de ellos se empeora notablemente el resultado. Aún así se ha tratado de afinar más en la calibración reduciendo el grado de cobertura de RJ, lo cual refleja mejor la realidad observada, y aumentando la presión para el punto de humedad crítica (Pcrit) en los tipos funcionales RH, RJ y RA. Como se describió en el apartado de análisis de sensibilidad, el modelo no es especialmente sensible a estos dos parámetros, sin embargo si se ha logrado matizar ligeramente los resultados de la simulación con estas modificaciones. Tabla Parámetros de la Simulación 3 de Lorcha Tras ejecutar el software con los anteriores parámetros se obtiene la siguiente matriz: 108

114 Tabla Matriz de Simulación 3 de Lorcha Como se ha comentado anteriormente la mayoría de los tipos funcionales se simulan mejor que en el caso anterior sin haberse reducido considerablemente ninguno de los porcentajes resultantes del balance. Se puede observar que la cantidad de aciertos de RH solo ha mejorado ligeramente y aunque los aciertos de RJ también han mejorado, hay que tener en cuenta que había muy pocos puntos de simulación donde se hubiera observado vegetación pura de RJ. Por otro lado la cantidad de aciertos de RA se mantiene constante respecto al caso anterior. Se produce una reducción despreciable de los aciertos en TV que se compensa por las notables mejoras que ha alcanzado el modelo en el resto de tipos funcionales simulados. Observando los tipos mixtos han mejorado tanto RH+RJ como RJ+RA ligeramente sin verse perjudicados los demás. Estos parámetros ofrecen un buen resultado y por ello se han tenido en cuenta a la hora de decidir los valores definitivos de los parámetros del modelo Simulación 4 de Lorcha Tomando como referencia los valores de los parámetros correspondientes a la simulación anterior, se ha tratado de obtener una mejora de los resultados o, al menos, un conjunto de alternativas que ofreciesen balances similares al anterior. Para ello, en esta cuarta simulación se han modificado las 109

115 cotas de extinción por saturación de los diferentes tipos funcionales dotando a todos ellos de una mayor resistencia. Tabla Parámetros de la Simulación 4 de Lorcha Tras ejecutar el software con los anteriores parámetros se obtiene la siguiente matriz: Tabla Matriz de Simulación 4 de Lorcha Se obtiene como resultado el mismo balance que en la simulación anterior en todos los tipos funcionales excepto en el tipo mixto RJ+RA donde se reduce ligeramente por simularse como TV uno de los puntos simulados como RA en la simulación anterior. A pesar de este ligero 110

116 empeoramiento los parámetros mostrados en esta simulación se han tenido en cuenta a la hora de decidir los parámetros definitivos del modelo por ser, al menos en los tres primeros tipos funcionales (RH, RJ y RA), más coherentes con la realidad observada Parámetros de calibración en Lorcha Se ha tratado aquí de lograr de nuevo los mejores resultados posibles del balance entre los tipos funcionales observados y simulados, obtenidos en la simulación 3, manteniendo las profundidades de extinción por saturación (Zsat) lo más similares posible a los mostrados en la simulación 4. De este modo, ha sido únicamente necesaria la penalización del tipo funcional TV, al cual se le ha dado el mismo valor ya calibrado en la simulación 3, es decir Zsat igual a 0.3. Los parámetros de calibración que se han considerados óptimos para el tramo Lorcha del Río Sérpis, el cual se encuentra en régimen alterado de caudales, son los que se muestran a continuación: Tabla Parámetros de calibración en Lorcha Tras ejecutar el software con los anteriores parámetros se obtiene la siguiente matriz: Tabla Matriz de calibración en Lorcha 111

117 Se observa en los resultados como el tipo funcional mixto RJ+RA ha recuperado el balance que se había obtenido en la simulación tres únicamente con la penalización de Zsat en TV descrita anteriormente. Son las herbáceas de ribera (RH) y las riparias juveniles (RJ) las que mayores problemas muestran en la calibración. Sin embargo, es poco representativo el caso de RJ por existir únicamente 5 puntos en los que este tipo funcional ha sido observado de forma aislada. No se ha logrado mejorar el balance de RH sin penalizar los resultados de los demás tipos funcionales considerablemente. Se ha considerado esta calibración la óptima para este tramo por ser capaz el modelo de simular, con estos parámetros, los tipos funcionales principales con buenos resultados. Además, el tipo funcional más diferenciado, TV, se simula con una fiabilidad (88%) diferenciándose de los tipos funcionales de vegetación de ribera propiamente dicha (RA, RJ y RH). Incluso en estos tres tipos se ha logrado alcanzar una diferenciación considerada muy satisfactoria, especialmente el para el tipo RA, el cual es simulado en un 94.44% de los casos. Los tipos funcionales mixtos también muestran buenos resultados Proceso de Calibración en Terde del Río Mijares (Régimen Natural) Del mismo modo que ocurría en el apartado anterior de calibración del modelo en Lorcha, aunque durante el proceso de calibración del tramo Terde se han realizado un elevado número de simulaciones, se van a mostrar a continuación las que han ofrecido resultados más representativos. En este tramo sólo se han observado los tipos funcionales TV, RA y RA+TV. Por este motivo se ha adaptado la tabla resumen de tal modo que sean estos tipos funcionales los que queden reflejados en el proceso de calibración. 112

118 Simulación 1 de Terde No se muestra en este apartado la simulación correspondiente a la hipótesis inicial por no ser representativos los resultados, del mismo modo que sucedía en el tramo lorcha. Se ha seleccionado la siguiente simulación por ofrecer unos buenos resultados de calibración de la vegetación terrestre. Los parámetros de vegetación simulados aquí son los mostrados a continuación. Tabla Parámetros de la Simulación 1 de Terde 1 Como puede observarse la profundidad máxima de raíces es máxima para la vegetación adulta de ribera (RA), viéndose muy reducida en comparación la del tipo funcional que engloba la vegetación herbácea (RH). Es la vegetación terrestre (TV) la que presenta en cambio una mayor profundidad efectiva de raíces, necesaria para compensar el número de puntos de simulación donde este tipo funcional no se simula a consecuencia de la anulación de la transpiración en zona saturada. Es TV el tipo funcional más vulnerable respecto al parámetro de profundidad de extinción por saturación. Las cotas negativas implican resistencia cuando la saturación se encuentra por encima de la superficie del suelo. En este sentido se han establecido los parámetros de modo que sean las herbáceas (RH) las más resistentes, fijando su Zsat en 30 cm por encima de la superficie del suelo. Los factores de transpiración, tanto en zona saturada como en zona no saturada, se han igualado en los tipos funcionales de riparias adultas y juveniles (RA y RJ) mientras que la fracción de cobertura se ha reducido en RJ considerándose igual a la unidad (cobertura total) en el resto de tipos funcionales. La presión para el punto de humedad crítica se ha establecido en 500 Kpa para RH y RJ, 250 Kpa para RA y 95 Kpa para TV. Dado que este no es un parámetro frente al cual el modelo se haya mostrado especialmente sensible, estos valores se han mantenido constantes a lo largo de todo el proceso de calibración. Tras ejecutar el software con los anteriores parámetros se obtiene la siguiente matriz: 113

119 Tabla Matriz de Simulación 1 de Terde 1 Como se ha comentado anteriormente, en este tramo sólo se han observado los tipos funcionales TV, RA y RA+TV. Por este motivo son nulos los valores correspondientes a las filas de los tipos funcionales RH, RJ, RH+RJ, RH+RA y RJ+RA. Del mismo modo, se ha adaptado la tabla resumen de tal modo que sean los tipos funcionales observados los que queden reflejados en la tabla del balance. En el balance total puede observarse como el 44.71% de los puntos de simulación no ha conseguido simularse como alguno de los tipos funcionales observados. Esto es consecuencia de que 13 puntos de simulación en los que el tipo funcional observado es RA, se han simulado como RH y 12 puntos como RJ. Como consecuencia, el porcentaje de aciertos de los puntos de simulación correspondientes a RA es bajo en comparación con los obtenidos para los otros dos tipos funcionales presentes. Al observar el comportamiento del modelo, al simular la vegetación terrestre (TV) y el tipo mixto (RA+TV), se concluye que el resultado es bastante satisfactorio Simulación 2 de Terde Dado que las deficiencias de la simulación anterior se ven reflejadas en los puntos de RA se ha decidido favorecer este tipo funcional ampliando su Zsat. Las pruebas intermedias han mostrado que con esta modificación el resultado se ve perjudicado, por lo que se han recalibrado los Zsat de todos los tipos funcionales de ribera. 114

120 Tabla Parámetros de la Simulación 2 de Terde 1 Tras ejecutar el software con los anteriores parámetros se obtiene la siguiente matriz: Tabla Matriz de Simulación 2 de Terde 1 Los resultados muestran como los cambios efectuados en el parámetro Zsat de los diferentes tipos funcionales mejoran el balance de simulación en un 4.34% para el tipo funcional RA. Este incremento se produce a consecuencia de la reducción de dos de los puntos simulados como RJ en la simulación anterior. Esto provoca que se incremente además el balance total de puntos simulados. 115

121 Simulación 3 de Terde En esta simulación se han logrado los mejores resultados entre todas las realizadas para el tramo Terde. Se han reducido la profundidad efectiva de raíces de los tipos funcionales RA, RJ y RH. Se han vuelto a modificar los parámetros Zsat de estos tres tipos funcionales y se han diferenciado los factores de transpiración en zona no saturada para los tipos funcionales de riparias adultas y juveniles (RA y RJ), reduciéndose ligeramente esta última. Tabla Parámetros de calibración en Terde Tras ejecutar el software con los anteriores parámetros se obtiene la siguiente matriz: Tabla Matriz de calibración en Terde Estos resultados son los mejores de todos los obtenidos en el proceso de calibración del modelo en este tramo, por ello se han seleccionado estos parámetros como parámetros de calibración del modelo en este apartado. 116

122 4.5.- VALIDACIÓN DEL MODELO Tras haber realizado el proceso de calibración, y tomando como punto de partida las diversas conclusiones que de él se extrajeron, se ha procedido a efectuar la validación del modelo. Para ello se han seleccionado los valores de los parámetros calibrados para el tramo Lorcha del río Serpis (tramo de régimen natural) pero realizando la simulación en el subtramo Terde 2 del río Mijares. Los resultados de la matriz de confusión se muestran a continuación. Tabla Resultados de validación del modelo en el tramo Terde 2 del río Mijares Se ha observado en el balance global como el porcentaje de vegetación terrestre se simula correctamente respecto a lo observado, así como la vegetación de ribera en su conjunto. Se observó, además que el modelo se comportaba correctamente en la simulación de grupos funcionales combinados correspondiéndose con lo observado en los diferentes puntos de simulación. Al analizar el 100% de los puntos simulados observamos que en total se simulan 44 puntos RIBERA y 31 puntos TERRESTRE; éstos frente a 37 y 38 puntos observados respectivamente, suponen la simulación del % y el 81.57% de los puntos de simulación en cada caso. Es decir, que el modelo globalmente desplaza la simulación ligeramente hacia la vegetación de ribera frente a la vegetación terrestre. 117

123 5.- CONCLUSIONES Y POSIBLES LÍNEAS DE ACTUACIÓN FUTURA

124 5.1.- CONCLUSIONES El análisis de sensibilidad manual ha dado como resultado que los parámetros de vegetación a calibrar más sensibles del modelo son los relativos a la profundidad de las raíces (tanto en zona saturada como en no saturada) y a la eficiencia en la evapotranspiración de éstas. Aun así se ha observado en el posterior proceso de calibración, que el potencial mátrico para el punto crítico es otro parámetro relativamente sensible que también debe de ser tenido en cuenta. Adicionalmente, en el futuro sería conveniente evaluar también la sensibilidad de los parámetros de suelo estimados. Esto sería útil para determinar la precisión adecuada de estos parámetros tanto en la recogida de muestras de suelo como en su posterior obtención en el laboratorio de los parámetros básicos de texturas y la posterior estimación de los parámetros del modelo de las curvas de retención de humedad. También sería interesante evaluar la sensibilidad de los parámetros de entrada hidrometeorológicos no solo para exigir un mínimo de precisión a los datos recogidos en las estaciones meteorológicas sino también para poder predecir la variabilidad de las simulaciones para los diferentes escenarios de cambio climático. Por ello se propondría realizar un segundo análisis de sensibilidad pero esta vez más detallado y utilizando una metodología más elaborada como las simulaciones de Montecarlo utilizando el método GLUE (General Likehood Uncertainty Estimation). Tras realizar el proceso de calibración del modelo, se ha observado que existe un gran número de aciertos para distinguir entre el tipo funcional de vegetación terrestre (TV) y los demás tipos de vegetación riparia (tanto arbórea-ra, juveniles-rj y herbácea-rh). Aun así, desafortunadamente el modelo Ribav no distingue demasiado bien entre los distintos tipos de vegetación riparia, especialmente entre la arbórea (RA) y la herbácea (RH). Esto puede ser debido a que es un modelo estático que no contempla procesos tales como el esfuerzo cortante de la corriente del río que afecta de manera diferente a las plantas herbáceas que a árboles adultos. Esta es unas de las razones por las que se decidió fusionar Ribav2D con Ripflow v.2 para formar Ripflow v

125 5.2.- LÍNEAS DE ACTUACIÓN CON RESPECTO AL MODELO a. Nivel freático En el modelo Ribav se ha considerado que el nivel freático estaba en el mismo plano que la lámina de agua del río debido a que los suelos riparios suelen tener texturas gruesas de arenas o gravas, donde el agua se infiltra rápidamente. Aun así el intervalo de tiempo del modelo Ribav (no de Ripflow) es diario. Al tener un intervalo temporal tan reducido, es posible que el nivel freático no sea horizontal y que en las zonas mas alejadas del cauce, el agua infiltrada tarde más tiempo en llegar al plano definido por las cotas de la lámina de agua. Para determinar la posible variación de la cota del nivel freático con respecto a la distancia horizontal del cauce se podría realizar un estudio mediante catas. En dicho estudio se realizarían catas para varios transectos de los tramos de estudio. Se realizarían mediciones de la profundidad de lámina de agua de cada una de las catas para distintos días con distintos niveles de río y distintos niveles de precipitaciones. Con los datos obtenidos se podría realizar una correlación donde se podría evaluar si existiera una variación significativa entre la cota de lámina de agua y la cota del nivel fréatico. En caso de de existir una diferencia significativa se podría obtener una curva ajustada que podría utilizarse para otros transectos con tipos de suelos con texturas similares. b. Profundidad de la roca madre Hay otro factor que no se ha tenido en cuenta en el modelo que es la profundidad de la roca madre. En el análisis de sensibilidad se ha observado que la profundidad de las raíces de las plantas es un parámetro del modelo bastante sensible. Si la profundidad de la roca madre es menor a la profundidad de las raíces de un determinado tipo funcional de vegetación, entonces las raíces no pueden alcanzar la profundidad de los valores calibrados. Esto podría causar que las simulaciones del modelo no simularán adecuadamente en las zonas donde la roca madre esta cercana a la superficie del suelo. Una solución a este posible problema sería introducir un nuevo parámetro de suelo que fuera la profundidad de la roca madre. Para estimar este parámetro se podrían utilizar métodos geo-físicos. Estos métodos utilizan una corriente eléctrica que fluye por la zona de suelo contenida entre dos electrodos que irían situados en los extremos del transecto. Los datos obtenidos mediante estos métodos sirven para determinar la dureza o cohesión de las distintas capas del suelo y de los estratos rocosos y la profundidad a la que se encuentran. c. Varias capas de suelo Las versiones actuales del modelo Ribav solo consideran una capa de suelo en la conceptualización del tanque estático. Si tras realizar el análisis de sensibilidad más detallado se concluyera que los parámetros de suelo estimados fueran bastante sensibles se podría modificar el modelo Ribav para que contemplase 2 ó más capas de suelo de características distintas. El modelo entonces tendría un tanque estático para cada una de las capas de suelo existentes. Para una zona con dos capas de suelo el diagrama de flujos quedaría de la siguiente forma estando los procesos ya descritos en el apartado 2.1 donde se describe el modelo Ribav. 120

126 Figura Diagrama de flujos del modelo Ribav en caso de que se utilizaran 2 tanques estáticos para simular el efecto de 2 capas de suelo con características notablemente diferentes. d. Interacción Ripflow-Ribav El intervalo temporal de cálculo del modelo Ribav (tanto la versión 1D como la 2D) es el día mientras que en el modelo Ripflow es el año. Aun así Ripflow clasifica los años según el caudal del río (ej. año seco, normal o húmedo) basándose en los datos diarios recogidos en la estaciones de aforo. Esta clasificación de años es utilizada para determinar el mapa de niveles freáticos y el mapa con la cantidad de días de inundación de cada celda asociados a cada grupo de años. Esta clasificación de los tipos de años se realiza de forma externa al modelo Ripflow y por regla general de forma muy poco precisa en caso de que no haya una gran cantidad de tipos de año. Esta forma de clasificar los años probablemente sea aceptable para la una primera fase de integración entre los modelos Ribav y Ripflow. Aun así en versiones posteriores a la actual sería recomendable aprovechar los cálculos diarios de Ribav para obtener datos más precisos para los módulos de Ripflow. Ribav ya calcula internamente el nivel freático de cada celda para cada día de la simulación mediante un algoritmo de interpolación lineal. Los resultados de dichas interpolaciones también podrían ser utilizados como inputs en el modulo de reclutamiento. En caso de que para una determinada especie solo se pueda producir reclutamiento durante una determinada estación del año, entonces solo se utilizarían como inputs los datos diarios (individuales o promediados) de los meses pertenecientes a dicha estación. 121

127 El algoritmo que calculase en número de días al año en los que una determinada celda resultara inundada sería también bastante simple. Consistiría tan solo en restar la cota de la superficie del suelo (del MDT) de la cota de la lámina de suelo. Si el valor resultase negativo, se añadiría un contador que iría sumándose para todos los días en los que se diese este caso. Al final de año se obtendría un mapa donde cada celda tendría almacenado un número entero que indicaría el número de días en los que ha habido inundación en dicha porción de suelo. 122

128 5.3.- LÍNEAS DE ACTUACIÓN CON RESPECTO AL SOFTWARE a. Coste computacional del modelo e interactividad entre lenguajes de programación Tras realizar las primeras pruebas del software del modelo conjunto Ribav2D-Ripflow se ha observado que los componentes de Ripflow v.2 han resultado ser considerablemente más lentos en ser ejecutados que el componente Ribav2D. Esto es debido a que Ripflow v.2 fue programado con Python pero dentro de la aplicación Model-Builder de ArcGIS. Aunque Python no es por si solo un lenguage lento, en este caso al estar siendo utilizado dentro de la plataforma del Model Builder resulta actuar como un lenguaje de muy alto nivel que pierde muchísima eficiencia al realizar los cálculos. Cabe destacar que la utilización de scripts del Model-Builder no tiene porque ser siempre desaconsejable debido a que también poseen ciertas ventajas. Las ventajas son la rapidez de desarrollo y la facilidad de actulización. Por tanto la utilización de Model-Builder se recomienda para modelos simples o modelos que estén en sus primeras fases de desarrollo. Como Ripflow o la combinación Ribav2D-Ripflow tiene ya en esta versión cierta complejidad se recomienda que las instrucciones dependientes de Model-Builder sean reprogramadas en otro lenguage de programación y con un compilador que cree archivos ejecutables más eficientes. No es necesario que el nuevo código sea programado en Visual Basic al igual que el modulo Ribav2D. Esto es debido a que como Visual Basic es un lenguaje con tecnología.net de la plataforma Visual Studio. Esta plataforma es multi-lenguage puesto que utiliza el Common Language Runtime (Lenguaje Común en tiempo de ejecución) que actúa de intérprete entre los distintos lenguajes compatibles que pueda tener un proyecto diseñado dentro de Visual Studio. Algunos de estos lenguajes compatibles son: C++, C#, J# (implementación de JAVA), Visual Fortran e incluso IronPython (que es una implementación de Python). b. Utilidades futuras con la técnología COM En este proyecto se ha utilizado la tecnología COM (Component Object Model) como una necesidad para poder unir dos aplicaciones Ribav2D y Ripflow v.2, debido a que fueron programados en lenguajes y plataformas distintas. Aun así al utilizar dicha tecnología se ha visto que puede otras traer ventajas al ser utilizada en otro tipo de tareas. Un ejemplo de estas tareas sería la realización de un análisis de sensibilidad con Ripflow mediante métodos de Montecarlo. Este tipo de análisis de sensibilidad consiste en ejecutar el modelo con distintos valores de los parámetros que se quieran analizar. Para ello se tiene que obtener una cantidad elevada de números al azar que serán utilizados por el programa para dar valores distintos a los parámetros durante cada ejecución. Aunque esta operación puede llevarse a cabo de distintas formas, al utilizar la tecnología COM no se exigiría modificar mucho el código. Tan solo habría que añadir una Clase COM al código fuente tal como se describe en el apartado Adicionalmente el código fuente no se compilaría a un archivo.exe (ejecutable) sino a un archivo.dll (dynamic link library). Los archivos DLL permiten ser ejecutados y recibir información externamente desde otros programas. Esto sería útil en el análisis de sensibilidad porque mediante un programa externo no muy complejo se podrían crear números aleatorios que serían enviados periódicamente a la librería DLL. Dichos números aleatorios serían utilizados como los valores de los parámetros a analizar del modelo en cada una de las muchas ejecuciones del modelo que requeriría el análisis de sensibilidad. La tecnología COM 123

129 también podría ser utilizada de forma similar para realizar calibraciones automáticas del modelo o para ejecutar el modelo con gran cantidad de escenarios con parámetros de entrada diferentes. c. Interfaz gráfica de usuario (GUI) Visual Basic es un lenguaje que en sus inicios se hizo muy popular por la facilidad que tenía para crear interfaces graficas de usuario (GUI.) Aun así este lenguaje recibió muchas críticas debido a que en sus primeras versiones obligaba a mezclar el código de la GUI con la lógica del programa (es decir el código que se encarga de realizar los cálculos que requieren las ecuaciones del modelo). Por el contrario las versiones modernas de Visual Basic permiten que el usuario pueda separar ambos tipos de código de forma relativamente fácil al crear aplicaciones de consola de forma independiente. Para que Ripflow pudiera utilizar el código de Ribav, se tuvo que despojar a Ribav2D de su GUI debido a que Ripflow ya poseía una GUI propia que penaliza el tiempo de computación o incluso podría causar conflictos. Por ello sería deseable que en las versiones siguientes de Ribav2D se separe el código de la GUI del código de la lógica del programa. En las versiones modernas de Visual Studio esto se realizaría mediante una única solución que englobe dos proyectos distintos (uno para la GUI y otro para la lógica). Para otras aplicaciones informáticas como páginas web, esta separación no es tan necesaria, pero en la programación científica la lógica del programa resulta ser bastante más compleja. Esto trae como ventaja que el código fuente sea más ordenado lo que facilitaría las posibles modificaciones o mejoras de la conceptualización matemática del modelo. Además permitiría cambiar o modificar la GUI en el futuro (cuando surgieran nuevas tecnologías gráficas que mejorasen considerablemente la estética o la funcionalidad de los programas), sin que hubiera posibilidad de modificar por error el código de la lógica del programa. d. Utilización de programación orientada a objetos Como última mejora se pretende que las versiones posteriores del programa tengan un paradigma de programación orientado a objetos (POO). La programación orientada a objetos tal como su nombre indica utiliza objetos, que son estructuras de datos que contienen tanto propiedades (diferentes tipos de variables) como métodos (funciones y subrutinas). Fue utilizada por primera vez durante la década de los sesenta por el lenguage Simula 67, para procesos de simulación física. Aun así este paradigma de programación no se extendió hasta mitad de la década de los ochenta con lenguajes de programación como C++, Smalltalk o Eiffel. A principios de los noventa se hizo el paradigma de programación dominante con la irrupción de las interfaces gráficas de usuario (GUI) y con el desarrollo de aplicaciones web con lenguajes como JAVA. En la actualidad las nuevas versiones de muchos lenguajes que inicialmente tenían un paradigma de programación procedural como BASIC (u otros como Pascal o Fotran) tienen propiedades que les permiten funcionar enteramente como lenguajes orientados a objetos. Esto permitiría que el código programado anteriormente en Visual Basic pudiese ser reciclado con relativa facilidad. La programación orientada a objetos (POO) se diferencia de la programación procedural en que se hace más énfasis en los datos (objetos) que en las instrucciones (procedimientos). Se utiliza también la abstracción de datos donde tan solo se representa externamente la parte fundamental 124

130 de cada una de las partes (objetos) del programa. Esto trae como ventaja que una vez se domina este paradigma de programación, existe una mayor relación entre el planteamiento del modelo y el código fuente del software, lo que facilita la comprensión tanto del código fuente como del modelo. A continuación se muestra un ejemplo simplificado de la utilización del tanque estático del modelo Ribav. En ella habría una clase llamada StaticTankClass a partir de la cual se crearían los objetos de tanque estático. Dicha clase tendría variables ( TankSoilMoisture, FieldCapacity y WiltingPoint ) que representarían las propiedades (características) del tanque. Además habría asociado a dicha clase (y objetos creados) dos métodos (las subrutinas: MatrixPressure y RootWaterUptake ), que representarían los procesos que tienen lugar. Las propiedades y métodos que tendrían interacción con otros objetos externos como podría ser un objeto de suelo saturado son: ( TankSoilMoisture y RootWaterUptake ) se declaran como públicas ( Public ) y las que funcionan solo internamente dentro del objeto del tanque ( FieldCapacity, WiltingPoint y MatrixPressure ) se declaran como privadas ( Dim y Private ). Figura Ejemplo de utilización de programación orientada a objetos donde se representa algunos de los procesos (métodos) y características (propiedades) de un objeto que representaría al tanque estático de Ribav. Otra ventaja de la PPO es la herencia. La herencia permite que las propiedades y métodos de una determinada clase de objeto puedan ser transferidos (heredados) a otra clase y a sus objetos asociados. Esto mejora las posibilidades de mantenimiento del código y facilita su actualización futura porque se pueden ampliar las capacidades de un objeto sin tener miedo a estropear el núcleo inicial. La OPP tiene también como característica avanzada el polimorfismo. El polimorfismo consiste en que un operador (ej: +, - ó < ) y también un método pueda actuar de distinta forma aun teniendo el mismo nombre según la situación lo requiera. A esto se le llama sobrecarga de operadores y métodos respectivamente. En nuestro caso esto podría ser útil porque a modo de ejemplo el operador + podría utilizarse no solo para sumar el valor de dos escalares sino también los valores de matrices o incluso de mapas grid. Esto permitiría que cuando se realizan cálculos utilizando datos inputs de varios mapas grid no sea necesario utilizar bucles dobles. Existen lenguajes de más alto nivel como Matlab o ModelBuilder que realizan esto de forma automática. El polimorfismo facilita no solo la comprensión del código sino la búsqueda de errores lógicos. 125

131 A modo de conclusión, aunque la programación orientada a objetos puede resultar al principio difícil de aprender por su elevado grado de abstracción, permite crear código fuente más relacionado con el modelo y la realidad que simula. Esto permite que una determinada aplicación informática pueda tener un mayor tamaño y pueda ser mantenida y actualizada con mayor facilidad, y mientras tanto ser gestionada por un número mayor de personas. 126

132 6.- REFERENCIAS

133 Altier, L.S.; Lowrance, R.; Williams, R.G.; Inamdar, S.P.; Bosch, D.D.; Sheridan, J.M.; Hubbard, K.; Thomas, D.L. (2002). Riparian Ecosystem Management Model: simulator for ecological processes in riparian zones. USDA, Conservation Research Report p. Altier, L.S.; Lowrance, R.; Williams, R.G.; Inamdar, S.P.; Bosch, D.D.; Sheridan, J.M.; Hubbard, K.; Thomas, D.L. (2002). Riparian Ecosystem Management Model: simulator for ecological processes in riparian zones. USDA, Conservation Research Report p. Baird, K.J.; Maddock III, T. (2005). Simulating riparian evapotranspiration: a new methodology and application for groundwater models. Journal of Hydrology 312: Baird, K.J.; Maddock III, T Simulating riparian evapotranspiration: a new methodology and application for groundwater models. Journal of Hydrology 312: Benjankar R. (2006). Quantification of reservoir operational-based losses to Floodplain physical processes and impact on the Floodplain vegetation at the Kootenai River, USA.Research proposal towards fulfillment requirements for Doctoral degree, Idaho University, Boise. Campbell, G.S. (1974). A simple method for determining unsaturated conductivity from moisture retention data. Soil Science, Vol. (117), No. 6, p. Cohen, Jacob. (1960) A coefficient of agreement for nominal scales, Educational and Psychological Measurement Vol.20, No.1, pp Dingman, S.L Physical hydrology. New Jersey, U.S.A., Prentice Hall. 646 p. Ferreira, M.T. y F.C.F. Aguiar Metodologia para amostragem de macrófitos em sistemas fluviais para implementaçăo da Directiva Quadro da Água. Palestra proferida no 1º Workshop sobre Metodologias de Amostragem de Elementos Biológicos e Hidromorfológicos no âmbito da Directiva Quadro. 6-8 Março. Universidade de Évora. Évora. González del Tánago, M "Las riberas, elementos clave del paisaje y en la gestión del agua", I Congreso Ibérico sobre Gestión y Planificación de Aguas, Zaragoza, de Septiembre, Prensas Universitarias de Zaragoza, Zaragoza. Goodwin, C.N.; Tarboton, D.G. (2001). An ecohydrological approach for modelling vegetation cover based upon equilibrium soil moisture availability. AGU Chapman Conference on State-of-the-Art Hillslope Hydrology. Sunriver, Oregon, October 8-12, Horton, J.L.; Kolb, T.E.; Hart, S.C. (2001). Responses of riparian trees to interannual variation in ground water depth in a semi arid river basin. Plant, Cell and Environment 24, Ibero, C. (1996). Ríos de vida. El estado de conservación de las riberas fluviales en España. SEO/Bird Life. Lite, S.J.; Stromberg, J.C. (2005). Surface water and ground-water thresholds for maintaining Populus Salix forests, San Pedro River, Arizona. Biological Conservation 125 (2005) Richards, K.S.; Hughes, F.M.R.; El-Hames, A.S.; Harris, T.; Pautou, G.; Peiry, J.; Girel, J. (1996). Integrated field, laboratory and numerical investigations of hydrological influences on the establishment of riparian tree species p. In: Anderson, M.; Walling, D.E.; Bates, P.D Floodplain processes. Rivas, R.E Propuesta de un modelo operativo para la estimación de la evapotranspiración. Tesis doctoral Facultad de Física / Universidad de Valencia. 140 p. Rodríguez-González, P.M.; Ferreira, M.T.; Rego, P. R. (2004). Vegetation types and within-stand structure. Forest Ecology and Management 203: Rodríguez-Iturbe, I.; Porporato, A. (2004). Ecohydrology of water-controlled ecosystems: soil moisture and plant dynamics. Cambridge University Press. 442 p. 128

134 Ryel, R.; Caldwell, M.; Yoder, C.; Or, D.; Leffel, A.; (2002). Hydraulic redistribution in a stand of Artemisia tridentata: evaluation of benefits to transpiration assessed with a simulation model. Oecologia- Springer Shaw, E.M Hydrology in practice. 3ª. Ed., Stanley Thornes, U.K. 569 p. Shuttleworth, W.J Evaporation. In: Maidment, D.R. (Ed.) Handbook of hydrology. McGraw-Hill, U.S.A. p p. Tabacchi, E., Correll, D.L., Hauer, R., Pinay, G., Planty-Tabacchi, A., Wissmar, R.C., (1998). Development, maintenance and role of riparian vegetation in the river landscape. Freshwater Biol. 40, Tabacchi, E.; Planty-Tabacchi, A.-M. (2003). Recent changes in riparian vegetation: possible consequences on dead wood processing along rivers. River Res. Applic. 19: Terradas, J. (2001). Ecología de la vegetación: de la ecofisiología de las plantas a la dinámica de comunidades y paisajes. España, Ediciones Omega. 703 p. Ward, R.C.; Robinson, M Principles of hydrology. 4a. Ed. McGraw-Hill, U.K. 450 p. Ward, R.C.; Robinson, M Principles of hydrology. 4a. Ed. McGraw-Hill, U.K. 450 p. Webb, R.H.; Leake, S.A. (2006). Ground-water surface-water interactions and long-term change in riverine riparian vegetation in the southwestern United States. Journal of Hydrology 320 (2006) Weltya, J., Beechieb, T., Sullivanc, K., Hyinka, D., Bilbya, R., Andrusd, C., Pess, G Riparian aquatic interaction simulator (RAIS): a model of riparian forest dynamics for the generation of large woody debris and shade. Forest Ecology and Management 162 (2002) Wild, A Condiciones del suelo y desarrollo de las plantas según Russell. Ediciones Mundi- Prensa p. 129

135 ANEXO I TUTORIAL DE UTILIZACIÓN DEL MODULO RIBAV 2D (INGLÉS) 130

136 (1) Introduction Ribav2D has been included as an additional module to the Ripflow Model. Ribav2D has the same mathematical conceptualization as the Ribav1D model but instead of working with points of simulation, it works with map grids. Both versions simulate the vegetation functional type distribution from a certain river stretch. To carry out these predictions Ribav uses physically-based soil moisture equations. The main inputs from the Ribav model are the Initial Vegetation Types Distributions, Soil Types Distribution, Topography and Hydro-meteorological data. The yearly output from the Ribav2D module is a map, which returns a value of the Evapotranspiration Index (ETindex) for each cell of the grid. The ETindex is the quotient between the Actual Evapotranspiration (ETR) and the Potencial Evapotranspiration (ETP) of the vegetation of each cell. The closest to 1 the value of the ETindex is, the smaller is the difference between ETR and ETP. Due to that, a plant with a high ETindex will have more possibilities of advancing to a higher or more advanced succession phase, and a plant with a low ETindex will have more possibilities to retrogress to a lower or previous succession phase, but always taking into account the factors of the other modules of the Ripflow model. (2) File Organization When the Data directory is opened: 2 subdirectories and 1 CSV file appear. The file is called: DefaultRelativeFilepaths.csv and stores the relative paths of the input and output files of Ripflow. The subdirectories are called: INPUT and OUTPUT and as their name says, they store the input and output files respectively. Figure I.54. File and subdirectories found in the Data directory within Ribav. When the DefaultRelativeFilePaths.csv is opened, 7 relative file paths appear (1 per row). The significance of these file paths is shown on the following table: Table I.b Records of the DefaultRelativeFilepaths.csv file Row Referring to: Path given by default: 1 Soil Type Maps \Data\INPUT\Maps\SoilMap.asc 2 Digital Elevation Model (DEM) Map \Data\INPUT\Maps\DemMap.asc 3 Soil Parameters File \Data\INPUT\Parameters\SoilParameters.csv 4 Vegetation Parameters File \Data\INPUT\Parameters\VegetationParameters.csv 5 Hydro-meteorology File \Data\INPUT\Hydromet\Hydromet.csv 6 File which relates the different Water Table Elevation \Data\INPUT\Hydromet\WteMaps.csv 131

137 Files with the river flow 7 Subdirectory were ETindex Output Files are stored \Data\OUTPUT\ETindexMaps\ Figure I.55. Default contents of the DefaultRelativeFilepaths.csv file (3) File Structure Two different types of files are used in the Ribav2D module: the ASCII grid files and the CSV files. a) ASCII grid files ASCII grid files have been used because they are human readable, hardware independent, widely supported and easy to import/export from most GIS software. To avoid errors all the grids from the Ribav2D simulation require the same dimensions and cell sizes. In case a map has cells with unavailable or irrelevant information, then they should be filled with No Data Values. The cells within a row are separated by a blank space. ASCII grid files have a header of 6 lines with the following information where X represents a number: Table III.c Header of an ASCII grid file Row Reference Explanation 1 ncols X Number of columns from the grid 2 nrows X Number of rows from the grid 3 xllcorner X Western (left) x-coordinate 5 yllcorner X Southern (bottom) y-coordinate 5 cellsize X Length of the sides of the squares 6 NODATA_value X Value that is regarded as missing or not applicable b) CSV files CSV stands for Comma Separated Values. They are a type of text file in which the columns are separated by commas, or semicolon ;. In our case we have chosen to use a semicolon to prevent confusions with the comma as decimal separator. Even so, in all types of files the point. is used as a decimal separator. These files don t have any headers and the columns represent the different parameters. By the other hand the rows represent the different parameter records. 132

138 (4) Files used in Ribav2D a) Soil type grids This is a type of ASCII type grid where each cell is given an integer number which represents the soil type. That number will be related to the row number of the soil parameter files. This file is located by default in the Data\Input\Maps\SoilMap.asc subdirectory Figure I.56. Example of a Soil Type Grid showing soil types 8 and 11 and also NODATA_values (represented in this case by number: -9999). b) Digital elevation model (DEM) grids This is another type of ASCII file in which the absolute elevation, in meters above sea-level, is given for each cell of the grid which. It is recommended to give these values, in at least a precision of millimetres, because these are the units that the conceptual static tank of the Ribav modelization uses. This file is located by default in the Data\Input\Maps\DemMap.asc subdirectory. 133

139 Figure I.57. Example of a DEM Grid showing the elevation of the cells in meters above sea level. c) Water table elevation (WTE) grids These grids show the water table elevation of each cell of the study site for a certain river flow. They could be thought as a 2-dimensional rating curve. In order for these files to be related with each other and with their correspondent river flow, the WteMaps CSV file is required. These files are located by default in the Data\Input\Hydromet\ subdirectory. Figure I.58. Example of a WTE grid for a river flow of 150m 3 /s in the River Mijares study site (the water table elevation of the cells are in meters above sea level). d) Water table elevation (WTE) CSV file This is the CSV file which relates the WTE grids with their correspondent river flows. The first column represents the river flows (m 3 /s) and the second column the relative file path of the correspondent WTE grid. The data in between columns is separated by a semicolon (;). The lowest 134

140 river flow value should be 0 m 3 /s and the highest flow value should be higher than the highest value of flow from the hydro-meteorological time series. This file is located by default in the Data\Input\Hydromet\WteMaps.csv subdirectory. Figure I.59. Content of a WTE CSV file visualised with a text editor. e) Soil parameter s CSV file In this file the values of all the parameters of each of the numbered soil types that appear on the soil grid will be stored. This file is located by default in the Data\Input\Parameters\SoilParameters.csv subdirectory. In this file the following fields (columns) are located from left to right: - n: Numerical key from the table which relates the row number with the number of the soil type map. - Pst: Porosity ( ) - Ip: Porosity index( ) - Pb: Bubble Preassure (Kpa) - Ks: Saturated Conductivity of the Unsaturated Soil(mm/hr) - Mfc: Moisture at Field Capacity ( ) - Zcmin: Depth to be considered in the Capillary Hydraulic Lift (m) - Descr: It is a description of the soil / It doesn t take part in the calculations (character string). 135

141 Figure I.60. Soil parameters in a file in CSV format (upper figure) and with header in a spreadsheet (lower figure). f) Vegetation parameter s CSV file In this file the values of all the parameters of each of the vegetation types will be stored. This file is located by default in the Data\Input\Parameters\VegetationParameters.csv subdirectory. In this file the following fields (columns) are located from left to right: - n: Numerical key from the table which relates the row number with the number of the soil type map. - Zr: Maximum Root Depth (m) - Ze: Effective Root Depth (m) - Zsat: Extinction at Saturation [m] - Ri: Transpiration Factor from Unsaturated Zone ( ) - Rj: Transpiration Factor from Saturated Zone ( ) - Cov: Plant Cover ( ) - Crt: Maximum Soil-Root Water Conductance (mmmpa-1h-1) - Pwp: Wilting Point Pressure (Kpa) - Pcrit: Critical Point Pressure (Kpa) - Acron: Acronym representing the plant type / it does not take part in the calculations (character string). - Descr: It is a description of the plant type / it doesn t take part in the calculations (character string). Figure I.61. Vegetation parameters in a file in CSV format (upper figure) and with header in a spreadsheet (lower figure). g) Hidro-meteorological data file This file is located by default in the Data\Input\Hydromet\Hydromet.csv subdirectory. In this file the following fields (columns) are located from left to right: - Date (dd/mm/aaaa) 136

142 - Daily Precipitation (mm) - Potential Evapotranspiration (mm) - Daily Flow from the River Stretch (m3/s) Figure I.62. Hydro-meteorological data with header in a spreadsheet (left) and in a file in CSV format (right). h) Vegetation types data file (created by Ripflow) This file is created by the other Ripflow modules in a yearly step. The only time the user needs to prepare this type of file is to compare observed vegetation with simulated vegetation in processes like calibration/validation. This is a type of ASCII type grid where each cell is given an integer number which represents the vegetation type. That number will be related to the row number of the vegetation parameter files. This file is located by default in the Data\Input\Maps\VegetationMap.asc subdirectory. 137

143 Figure I.63. Example of a Vegetation Type Grid showing vegetation types 1 and 3 and also NODATA_values (represented in this case by number: -9999) (5) File Conversion and Visualization 5.1 ASCII conversion to ESRI-Raster and viceversa The grid files used by the Ribav2D are ASCII format and the grid files of the other Ripflow have an ESRI-Raster format. Even so the conversion between ASCII and ESRI-Raster is very simple. The steps needed to carry out this conversion are the following: a) Open ArcGIS 9.2 Figure I.64. ARCGIS 9.2 initial window for an empty project 138

144 b) Press on the ArcToolbox icons so the tool menu appears Figure I.65. ArcToolbox menu from ARCGIS 9.2 c) Press on the search tab from the Arctoolbox, write ASCII in the textbox and click on the Search button. All the tools with ASCII in their title will appear. Figure I.66. Tools related to ASCII in ARCGIS

145 d) Press on the Raster to ASCII if you want to make this type of conversion. Two textboxes will appear. In the first one we will need to introduce the path of the input ESRI-Raster file to be converted. In the second textbox we will introduce the path of the ASCII output file that will appear due to the conversion. Figure I.67. Raster to ASCII conversion toolbox. e) On the other hand, if you want to make an ASCII to ESRI-Raster conversion press on the Raster to ASCII tool. Two textboxes and a combo-box will appear. In the first textbox we will introduce the path of the input ASCII file to be converter. In the second textbox we will introduce the path of the output ESRI-Raster file that will appear due to the conversion. In the combo-box we will optionally select if we want the data types of the new file to be integer or float (decimal) data types. 140

146 Figure I.68. ASCI Ito Raster conversion toolbox. 5.2 File visualization The ASCII and CSV files can be visualized in texts editors (like Notepad) or spreadsheets (like Open-office Calc 3.2 or MS Excel 2003). a) Text Editor Visualization The simplest way to open these files is with a text editor like Notepad which is included in Windows Xp. In this way you can visualize a lot of details from the file format (like the type of column separator that the cells have) that would not be noticed in a spreadsheet visualization. The main inconvenient with this type of visualization is that it brings a lot of difficulties in managing large amounts of data. Figure I.69. Example of a MDT of study site in the river Mijares visualized with a text editor. b) Open-Office Calc 3.2 Visualization The way to open a CSV or ASCII file through the Calc 3.2 spreadsheet is very simple. When the file is opened a dialog box will appear. You will need to select the type of column separator: semicolon for CSV files or space for ASCII files. Additionally if you want headers to be ignored you can select to carry out the visualization from a row different as row 1. To avoid errors it is very important to leave blank the combo-box labelled text separator, because the default double quotation marks character can cause problems when the ASCII files are loaded within SIG software. 141

147 Figure I.70. Dialog box used in Open-Office Calc 3.2 to load textfiles like ASCII or CSV. c) MS Excel 2003 Visualization In Excel 2003 CSV files are opened automatically but ASCII files require a special operation. Therefore the Import data application from the Data menu should be used. Figure I.71. Data menu in Office 2003 showing the Import Data application. First of all we will select the data file that we want to import. 142

148 Figure I.72. Form where the file to be imported is selected is Excel Then a dialog box will appear and we will select the radio button (circular shape) named: Delimited. In this dialog box we can also select the line from which to start the importation, in case we want to ignore previous headers. Figure I.73. Step 1 of 3 of the Import Data application of Excel In the next dialog box we select the type of column separator. For ASCII files it will be a space and for CSV files a semicolon. In the bottom part of the dialog box a diagram will appear to let us see if the selected option is adequate or not. 143

149 Figure I.74. Step 2 of 3 of the Import Data application of Excel In the last dialog box we can press the button advanced if we want to change the definition of decimal separator or thousands separator. In our case we should always have a point as a decimal separator. Figure I.75. Step 3 of 3 of the Import Data application of Excel

150 ANEXO IV TUTORIAL DE UTILIZACIÓN DE LA APLICACIÓN PARA EL CÁLCULO DEL COEFICIENTE DE COHEN PARA MAPAS DE VEGETACIÓN (INGLÉS) 145

151 1. Introduction This tutorial explains how to use the software application that calculates the Cohen Kappa Coefficient between observed and simulated vegetation maps. The inputs of this program are the observed and simulated vegetation grid maps, which should have the same dimensions and the same coding of the vegetation types. In the other hand, there are 2 output files produced by this program: a CSV file that stores the results from the calculations and also an ASCII map file, which evaluates the accuracy between the observed and simulated maps. Additionally there is a CSV file, which shows the data loaded by default when the program is executed. The default names and paths of the program files are shown in the following table: Table II.e Files from the Cohen Coefficient Calculation Software 2. Equations used in the Calculations The Cohen Kappa Coefficient evaluates the rate of agreement. It is used in qualitative items and takes into account the effect caused by chance. Specifically in this program the evaluated agreement is between the observed and the simulated vegetation. To carry out this evaluation the program will first build a confusion matrix where the columns indicate the observed items (m1, m2, m3) and the rows the simulated items (n1, n2, n3). Each cell from the study site will compare the vegetation type from the observed map and the vegetation type from the simulated map, increasing by one the value of the table cell with the correspondent row and column. The number of rows and 146

152 the number of columns will be equal to the number of vegetation type items. As an example we are going to assume that a certain study site has 3 vegetation types which will produce the following confusion matrix: Table II.f Confusion matrix for 3 vegetation types used for evaluating the Cohen coefficient. After building the matrix, the following summation values are calculated: Sum of the values of each row (e.g. Vm,1=V11+V21+V23) Sum of the values of each column (e.g. V1,n= V11+V12+V13) Sum of the values of the main diagonal ( Vm,n= V11+V22+V23), which are the number of accurate results. To avoid confusions with the summation notation, we will call this variable (fo). Sum of all the values of the matrix ( Vm,n= Vm,1 + Vm,2 + Vm,3) or ( Vm,n= V1,n + V2,n + V3,n). To avoid confusions with the summation notation, we will call this variable (N). Then, the expected frequencies fe(i) of each vegetation type are calculated. This is calculated by multiplying: [the sum of the values of each row which intersects the plant type] times [the sum of the values of each column which intersects the plant type] and dividing into [the sum of all the values of the matrix (N)]. for vegetation 1: fe (1) Vm,1 V = N 1, n for vegetation 2: fe (2) Vm,2 V = N 2, n for vegetation 3: fe (3) = Vm,3 V N 3, n 147

153 Next, the sum all the expected frequencies is also calculated: = fe fe i + ( ) = fe(1) + fe(2) fe(3) Afterwards we have all the available values (fo, fe, N) required to obtain the Cohen Kappa coefficient (k), which is calculated by the following equation: k = fo N fe fe If the total number of values (N) of the matrix is high, then it can be assumed that it pertains to a normal distribution. In that case the standard error and the confidence limits (95% and 99%) could also be calculated: Standard Error (σx): σ = x fo 1 N fe fo n 95% confidence limit: 99% confidence limit: k ± 1, 96 σ k ± 2, 58 σ x x The maximum value of the Kappa coefficient (k) is 1, and the minimum value is 0. If k=1 then all the cases are in the main diagonal and the rest of the cells of the confusion matrix would be empty. If k=0 then it means that there isn t any non-random degree of agreement between the observed and simulated items. The ranges of values of the Kappa coefficient are considered in the following way: 0.80 < k < 1 : 0.60 < k < 0.80 : 0.40 < k < 0.60 : 0.20 < k < 0.40 : 0 < k < 0.20 : Excellent Good Acceptable Inadequate Unacceptable 148

154 3. Program Use Procedure To use the program the following procedure is recommended: a) First of all, access the /Data/Default/ subdirectory and open the DataInputs.csv file. In the first line an integer number indicates the number of different vegetation types in the simulation. The second and third rows show the default relative paths and names of the input files. The forth and fifth rows show the default relative paths and names of the output files, which the program is going to create. Figure I I.76. Data from the DataInputs.csv file b) Double-click on the program s executable file ConfusionMatrix.exe from the main program directory. 149

155 Figure I I.77. Main directory of the program with the executable file and the /Data/ folder c) Once the program is loaded, the first form to appear will be the one of the program s inputs. Verify then that the observed and simulated vegetation maps are the ones in which you want to carry out the calculations. If not, the loaded maps can be modified by pressing the Load Map Button. If you do not want the output file: DataFile.csv to be created, then un-check the checkbox with the label: Create Output Data File. Additionally, to visualize the maps you can press on the radio buttons from the Mouse Course Mode group-box with the Zoom In, Zoom Out and Pan options. Finally, press on the Calculate button to carry out the calculations. To prevent errors from happening, the program has to be closed and executed again each time a calculation is made. Figure I I.78. First form from the program, which is dedicated to the input data. d) When the calculations finish, the second form of the program appears. This form is dedicated to the output data. At the same time, the subdirectory where the output files are created will open so the user can also analyse these files. On the upper-left part of the form the confusion matrix will appear. In this matrix the rows represent the observed vegetation types and the columns the simulated vegetation types. The main diagonal, where the coincident results are, is highlighted in orange. 150

156 On the bottom-left part of the form the Accuracy Map appears. This map is the result of the calculation of the absolute value of the subtraction from the plant type numbers between the observed vegetation and the simulated vegetation. The cells with a pure blue colour indicate success in the simulation, which means a subtraction value of 0. In contrast, the cells with a pure red colour will indicate the widest discordance between the observed and the simulated values. On the right part of the form the numerical results of the Cohen Kappa Coefficient calculation appear. These results include variables as the number of cells with accurate simulations, the total number of cells, the Cohen Coefficient s value or the standard error. Figure I I.79. Second form from the program, which is dedicated to the output data. 151

157 ANEXO VII CÓDIGO FUENTE DEL PROGRAMA RIBAV-1D 152

158 En este anexo se presenta el código fuente del software de Ribav1D. El código fuente se presenta distribuido en dos tipos de archivo: los archivos de modulo y los archivos Windows- Form. Estos se diferencian entre si en que los archivos Windows-Form pertenecen a un formulario de Windows de la interfaz gráfica de usuario mientras que los archivos de modulo tan solo contienen instrucciones que realizan cálculos del modelo y no están relacionados con dicha interfaz. Para diferenciarlos se ha aplicado el prefijo frm para los nombres de los archivos Windows-Form y el prefijo module para los archivos de modulo. Los archivos que contienen el código fuente de Ribav 1D son los siguientes: 1. Menú Principal: frmmdiparent1.vb 2. Parámetros de Suelo: FrmSoilParam.vb 3. Parámetros de Vegetación: FrmVegetParam.vb 4. Datos Hidrometeorologicos de entrada: FrmHydromet.vb 5. Curvas de Gasto: FrmRatingCurves.vb 6. Niveles de Río Diarios: FrmRiverLevels.vb 7. Datos de los Puntos de Simulación: frmsimpoints.vb 8. Simulación y Resultados: frmsimpoints.vb 9. Modulo 1: Module1 10. Modulo 2: Module2 A continuación se muestran los formularios del programa Ribav1D según el orden de aparición al ejecutar el programa: Figura III.80. Formulario del software de Ribav1D 153

159 El código fuente de Ribav1D se muestra a continuación distribuido entre sus distintos archivos y formularios: 154

160 1. Menú Principal: frmmdiparent1.vb Imports System.Windows.Forms Imports System.IO Imports System.Math Public Class frmmdiparent1 Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) ' Cree una nueva instancia del formulario secundario. Dim ChildForm As New System.Windows.Forms.Form ' Conviértalo en un elemento secundario de este formulario MDI antes de mostrarlo. ChildForm.MdiParent = Me m_childformnumber += 1 ChildForm.Text = "Ventana " & m_childformnumber ChildForm.Show() End Sub Private Sub OpenFile(ByVal sender As Object, ByVal e As EventArgs) Dim OpenFileDialog As New OpenFileDialog OpenFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments OpenFileDialog.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" If (OpenFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then Dim FileName As String = OpenFileDialog.FileName End If End Sub Private Sub SaveAsToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Dim SaveFileDialog As New SaveFileDialog SaveFileDialog.InitialDirectory = My.Computer.FileSystem.SpecialDirectories.MyDocuments SaveFileDialog.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" 155

161 If (SaveFileDialog.ShowDialog(Me) = System.Windows.Forms.DialogResult.OK) Then Dim FileName As String = SaveFileDialog.FileName End If End Sub Private Sub ExitToolsStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Me.Close() End Sub Private Sub CascadeToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Me.LayoutMdi(MdiLayout.Cascade) End Sub Private Sub TileVerticalToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Me.LayoutMdi(MdiLayout.TileVertical) End Sub Private Sub TileHorizontalToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Me.LayoutMdi(MdiLayout.TileHorizontal) End Sub Private Sub ArrangeIconsToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Me.LayoutMdi(MdiLayout.ArrangeIcons) End Sub Private Sub CloseAllToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) ' Cierre todos los formularios secundarios del principal. For Each ChildForm As Form In Me.MdiChildren ChildForm.Close() Next End Sub Private m_childformnumber As Integer Private Sub MDIParent1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim rand As Integer Dim random As New Random rand = random.next(1, 9999) txtproyname.text = "project_" + Str(rand) '+ "\" FrmHydromet.MdiParent = Me frmsimpoints.mdiparent = Me FrmRatingCurves.MdiParent = Me FrmRiverLevels.MdiParent = Me FrmSimulations.MdiParent = Me FrmSoilParam.MdiParent = Me FrmVegetParam.MdiParent = Me End Sub Private Sub TsbSoilParameters_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TsbSoilParameters.Click FrmSoilParam.Show() 156

162 End Sub Private Sub TsbVegetationParameters_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TsbVegetationParameters.Click FrmVegetParam.Show() End Sub Private Sub TsbClimaticParameters_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TsbClimaticParameters.Click FrmHydromet.Show() End Sub Private Sub btcreateproyect_click(byval sender As System.Object, ByVal e As System.EventArgs) ProjAddress = System.Environment.CurrentDirectory + "\Data\Projects\" + txtproyname.text + "\" Directory.CreateDirectory(ProjAddress) gboxproject.hide() FrmSoilParam.Show() End Sub Private Sub btcreateproyect_click_1(byval sender As System.Object, ByVal e As System.EventArgs) Handles btcreateproyect.click ProjAddress = System.Environment.CurrentDirectory + "\Data\Projects\" + txtproyname.text + "\" Directory.CreateDirectory(ProjAddress) InputAddress = ProjAddress + "InputData" OutputAddress = ProjAddress + "OutputData" Directory.CreateDirectory(InputAddress) Directory.CreateDirectory(OutputAddress) FrmSoilParam.Show() gboxproject.hide() If chkautomatic.checked = True Then FrmSoilParam.Show() Call Automatic() End If End Sub Private Sub PictureBox3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox3.Click Process.Start(" End Sub Private Sub PictureBox2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox2.Click Process.Start(" End Sub End Class 157

163 2. Parámetros de Suelo: FrmSoilParam.vb Public Class FrmSoilParam Public SoilFileName As String Private Sub btnext_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnext.click Dim r As Integer 'we store in a varible the current row index r = SoilDataGridView.CurrentRow.Index FrmVegetParam.Show() Me.Hide() End Sub Private Sub FrmVegetParam_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call DefaultFile() End Sub Private Sub DefaultFile() SoilFileName = (System.Environment.CurrentDirectory + "\data\default\soilparameters.csv") SoilDataGridView.Rows.Add() Dim TextLine As String = "" Dim SplitLine() As String 158

164 If System.IO.File.Exists(SoilFileName) = True Then Dim objreader As New System.IO.StreamReader(SoilFileName) If SoilDataGridView.RowCount <> 0 Then SoilDataGridView.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") SoilDataGridView.Rows.Add(SplitLine) Loop Else MessageBox.Show("Default Vegetation Parameter's File has been Removed or Corrupted", "Removed File", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If Call TextboxUpdate() End Sub Private Sub TextboxUpdate() Dim i As Integer i = SoilDataGridView.CurrentRow.Index txtpst.text = SoilDataGridView.Rows.Item(i).Cells.Item("colPst").Value() 'Max Root Depth Zr [m] txtip.text = SoilDataGridView.Rows.Item(i).Cells.Item("colIp").Value() 'Effective Root Depth Ze [m] txtpb.text = SoilDataGridView.Rows.Item(i).Cells.Item("colPb").Value() 'Extinction Saturation Psat [m] txtks.text = SoilDataGridView.Rows.Item(i).Cells.Item("colKs").Value() 'Moisture at Wilting Point(cm3/cm3) txtmfc.text = SoilDataGridView.Rows.Item(i).Cells.Item("colMfc").Value() 'Fraction of Active Roots below txtsoildescription.text = SoilDataGridView.Rows.Item(i).Cells.Item("colSoilDescription").Value() 'Brief Soil Description txtzmin.text = SoilDataGridView.Rows.Item(i).Cells.Item("colZmin").Value() 'Minimum Capillary Depth to be Considered [m] End Sub Private Sub bterase_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles bterase.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 159

165 End Sub 'We clear the Textboxes without Saving Call EraseValues() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we Clear the Textboxes Call EraseValues() End If Private Sub EraseValues() End Sub Dim rowcount As Integer rowcount = SoilDataGridView.RowCount For i = 0 To rowcount - 2 SoilDataGridView.Rows.Clear() Next i txtpst.text = 0 txtip.text = 0 txtpb.text = 0 txtks.text = 0 txtmfc.text = 0 txtsoildescription.text = 0 txtzmin.text = 0 Private Sub LoadValues() SoilFileName = "" OpenFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\default") OpenFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" OpenFileDialog1.RestoreDirectory = True If (OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then SoilFileName = OpenFileDialog1.FileName End If Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(SoilFileName) = True Then Dim objreader As New System.IO.StreamReader(SoilFileName) If SoilDataGridView.RowCount <> 0 Then SoilDataGridView.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") SoilDataGridView.Rows.Add(SplitLine) Loop Else MsgBox("File Does Not Exist") End If Call TextboxUpdate() End Sub 160

166 Private Sub btload_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btload.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We the new data without Saving Call LoadValues() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we load the new data Call LoadValues() End If End Sub Private Sub btsave_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsave.click Dim rowcount As Integer rowcount = SoilDataGridView.RowCount Dim i As Integer Dim j As Integer Dim record(rowcount - 2) As Object SaveFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") SaveFileDialog1.Title = "Save File" SaveFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" SaveFileDialog1.FileName = "SoilParameters_1" SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.ShowDialog() SoilFileName = SaveFileDialog1.FileName Dim objwriter As New System.IO.StreamWriter(SoilFileName) j = SoilDataGridView.CurrentRow.Index SoilDataGridView.Rows.Item(j).Cells.Item(1).Value = Val(txtPst.Text) SoilDataGridView.Rows.Item(j).Cells.Item(2).Value = Val(txtIp.Text) SoilDataGridView.Rows.Item(j).Cells.Item(3).Value = Val(txtPb.Text) SoilDataGridView.Rows.Item(j).Cells.Item(4).Value = Val(txtKs.Text) SoilDataGridView.Rows.Item(j).Cells.Item(5).Value = Val(txtMfc.Text) SoilDataGridView.Rows.Item(j).Cells.Item(6).Value = Val(txtSoilDescription.Text) For i = 0 To rowcount

167 record(i) = CStr(SoilDataGridView.Rows.Item(i).Cells.Item(0).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(1).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(2).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(3).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(4).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(5).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(6).Value) & _ "; " & CStr(SoilDataGridView.Rows.Item(i).Cells.Item(7).Value) objwriter.writeline(record(i)) Next i objwriter.close() End Sub Private Sub btdefault_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btdefault.click If SoilDataGridView.RowCount <= 1 Then 'There are no rows with values Call DefaultFile() Else 'A dialogbox appears in case the user wants to save the previous data Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We load the default values without Saving Call DefaultFile() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we load the default values Call DefaultFile() End If End If End Sub Private Sub SoilDataGridView_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SoilDataGridView.Click Call TextboxUpdate() End Sub 162

168 Private Sub hsbtest_scroll(byval sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles hsbtest.scroll hsbtest.maximum = Val(txtPst.Text) * 100 Dim PmatTst As Single = Val(txtPmatTst.Text) Matrix Potencial being used for testing results (mm) Dim PsoilTst As Single = Val(txtH.Text) Moisture (mm/mm) Dim i As Integer i = SoilDataGridView.CurrentRow.Index '+ 1 'Campbell 'Soil Dim PstT As Single Dim IpT As Single Dim PbT As Single Dim KsT As Single 'Φ Porosity (cm3/cm3) 'λ=pore -size index 'Bubbling capillary pressure (mm) 'Fully Saturated conductivity (mm/hr) PstT = SoilDataGridView.Rows.Item(i).Cells.Item("colPst").Value() IpT = SoilDataGridView.Rows.Item(i).Cells.Item("colIp").Value() PbT = SoilDataGridView.Rows.Item(i).Cells.Item("colPb").Value() KsT = SoilDataGridView.Rows.Item(i).Cells.Item("colKs").Value() txth.text = hsbtest.value txtpmattst.text = Math.Round(PbT / ((hsbtest.value / PstT / 100) ^ (1 / IpT)), 3) txtkstst.text = KsT * (PbT / Val(txtPmatTst.Text)) ^ (3 * IpT + 2) End Sub End Class 163

169 3. Parámetros de Vegetación: FrmVegetParam.vb Public Class FrmVegetParam Public VegetFileName As String Private Sub FrmVegetParam_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load VegetationDataGridView.Columns.Add("colAcronim", "colacronim") VegetationDataGridView.Columns.Add("colVegCode", "colvegcode") VegetationDataGridView.Columns.Add("colZr", "colzr") VegetationDataGridView.Columns.Add("colZe", "colze") VegetationDataGridView.Columns.Add("colZsat", "colzsat") VegetationDataGridView.Columns.Add("colRi", "colri") VegetationDataGridView.Columns.Add("colRj", "colrj") VegetationDataGridView.Columns.Add("colCrt", "colcrt") VegetationDataGridView.Columns.Add("colPwp", "colpwp") VegetationDataGridView.Columns.Add("colPcrit", "colpcrit") VegetationDataGridView.Columns.Add("colVegDescription", "colvegdescription") VegetationDataGridView.Columns.Add("colCov0", "colcov0") VegetationDataGridView.Columns.Add("colCov1", "colcov1") VegetationDataGridView.Columns.Add("colCov2", "colcov2") VegetationDataGridView.Columns.Add("colCov3", "colcov3") VegetationDataGridView.Columns.Add("colCov4", "colcov4") VegetationDataGridView.Columns.Add("colCov5", "colcov5") VegetationDataGridView.Columns.Add("colCov6", "colcov6") VegetationDataGridView.Columns.Add("colCov7", "colcov7") VegetationDataGridView.Columns.Add("colCov8", "colcov8") VegetationDataGridView.Columns.Add("colCov9", "colcov9") VegetationDataGridView.Columns.Add("colCov10", "colcov10") VegetationDataGridView.Columns.Add("colCov11", "colcov11") 164

170 VegetationDataGridView.Columns("colAcronim").Visible = True VegetationDataGridView.Columns("colAcronim").Width = 65 False VegetationDataGridView.Columns("colVegCode").Visible = False VegetationDataGridView.Columns("colZr").Visible = False VegetationDataGridView.Columns("colZe").Visible = False VegetationDataGridView.Columns("colZsat").Visible = False VegetationDataGridView.Columns("colRi").Visible = False VegetationDataGridView.Columns("colRj").Visible = False VegetationDataGridView.Columns("colCrt").Visible = False VegetationDataGridView.Columns("colPwp").Visible = False VegetationDataGridView.Columns("colPcrit").Visible = False VegetationDataGridView.Columns("colVegDescription").Visible = VegetationDataGridView.Columns("colCov0").Visible = False VegetationDataGridView.Columns("colCov1").Visible = False VegetationDataGridView.Columns("colCov2").Visible = False VegetationDataGridView.Columns("colCov3").Visible = False VegetationDataGridView.Columns("colCov4").Visible = False VegetationDataGridView.Columns("colCov5").Visible = False VegetationDataGridView.Columns("colCov6").Visible = False VegetationDataGridView.Columns("colCov7").Visible = False VegetationDataGridView.Columns("colCov8").Visible = False VegetationDataGridView.Columns("colCov9").Visible = False VegetationDataGridView.Columns("colCov10").Visible = False VegetationDataGridView.Columns("colCov11").Visible = False Call DefaultVegFile() End Sub Private Sub DefaultVegFile() VegetFileName = (System.Environment.CurrentDirectory + "\data\default\vegetationparameters.csv") Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(VegetFileName) = True Then ' Call EraseDaily_DataGridView() Dim objreader As New System.IO.StreamReader(VegetFileName) If VegetationDataGridView.RowCount <> 0 Then VegetationDataGridView.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") VegetationDataGridView.Rows.Add(SplitLine) Loop Else MessageBox.Show("Default Vegetation Parameter's File has been Removed or Corrupted", "Removed File", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If 165

171 End Sub Call TextboxUpdate() Private Sub btnext_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnext.click Call DataTableUpdate() 'Before passing to the next form 2 data tests are made to prevent errors Dim reply As DialogResult 'In Test 1 we see if Zr <= Ze for each Vegetation Type (j) For i = 0 To VegetationDataGridView.RowCount - 2 If VegetationDataGridView.Rows.Item(i).Cells.Item("colZr").Value() <= VegetationDataGridView.Rows.Item(i).Cells.Item("colZe").Value() Then 'We inform about the error MsgBox("The Maximum root depth (Zr)should be GREATER than the Effective root depth (Ze). An error can occur!") 'We give the user the possibility to leave the program reply = MessageBox.Show("Do you want to exit the program to correct the vegetation input data?", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If reply = DialogResult.Yes Then MdiParent.Close() Else GoTo test2 End If End If Next i test2: 'In Test 2 we see if Cov<=0.05 for each Vegetation Type (j) and each Month (k). For j = 0 To VegetationDataGridView.RowCount - 2 For k = 0 To 11 If VegetationDataGridView.Rows.Item(j).Cells.Item("colCov" + CStr(k)).Value() < 0.05 Then 'We inform about the error MsgBox("The Plant Cover (Cov) from ALL Vegetation Types and ALL Months should be GREATER than An error can occur!") 'We give the user the possibility to leave the program reply = MessageBox.Show("Do you want to exit the program to correct the vegetation input data?", "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If reply = DialogResult.Yes Then Me.Close() End If Else 'If we pass both test we go to the next form FrmHydromet.Show() Me.Hide() End If Next k Next j End Sub 166

172 Private Sub TextboxUpdate() Dim i As Integer i = VegetationDataGridView.CurrentRow.Index txtvegdescription.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colVegDescription").Value () _ + " " + VegetationDataGridView.Rows.Item(i).Cells.Item("colVegCode").Value() 'Vegetation Type Name txtzr.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colZr").Value() 'Maximum Root Depth Zr [m] txtze.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colZe").Value() 'Effective Root Depth Ze [m] txtpsat.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colZsat").Value() 'Extinction Saturation Psat [m] txtri.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colRi").Value() 'Transpiration Factor from Unsaturated Zone [ ] txtrj.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colRj").Value() 'Transpiration Factor from Saturated Zone [ ] 'txtcov.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov").Value() 'Plant Cover Cv_yearly [m2/m2] txtcrt.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCrt").Value() 'Maximum Soil-Root Water Conductance CRT [mmmpa-1h-1] txtpwp.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colPwp").Value() 'Wilting Point Matrix Potencial (Kpa) txtpcrit.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colPcrit").Value() 'Critical Point Matrix Potencial (Kpa) txtcov0.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov0").Value() txtcov1.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov1").Value() txtcov2.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov2").Value() txtcov3.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov3").Value() txtcov4.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov4").Value() txtcov5.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov5").Value() txtcov6.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov6").Value() txtcov7.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov7").Value() txtcov8.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov8").Value() txtcov9.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov9").Value() 167

173 txtcov10.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov10").Value() txtcov11.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov11").Value() End Sub Private Sub DataTableUpdate() Dim i As Integer i = VegetationDataGridView.CurrentRow.Index VegetationDataGridView.Rows.Item(i).Cells.Item("colZr").Value = txtzr.text 'Maximum Root Depth Zr [m] VegetationDataGridView.Rows.Item(i).Cells.Item("colZe").Value = txtze.text 'Effective Root Depth Ze [m] VegetationDataGridView.Rows.Item(i).Cells.Item("colZsat").Value = txtpsat.text 'Extinction Saturation Psat [m] VegetationDataGridView.Rows.Item(i).Cells.Item("colRi").Value = txtri.text 'Transpiration Factor from Unsaturated Zone [ ] VegetationDataGridView.Rows.Item(i).Cells.Item("colRj").Value = txtrj.text 'Transpiration Factor from Saturated Zone [ ] 'txtcov.text = VegetationDataGridView.Rows.Item(i).Cells.Item("colCov").Value() 'Plant Cover Cv_yearly [m2/m2] VegetationDataGridView.Rows.Item(i).Cells.Item("colCrt").Value = txtcrt.text 'Maximum Soil-Root Water Conductance CRT [mmmpa-1h-1] VegetationDataGridView.Rows.Item(i).Cells.Item("colPwp").Value = txtpwp.text 'Wilting Point Matrix Potencial (Kpa) VegetationDataGridView.Rows.Item(i).Cells.Item("colPcrit").Value = txtpcrit.text 'Critical Point Matrix Potencial (Kpa) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov0").Value = txtcov0.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov1").Value = txtcov1.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov2").Value = txtcov2.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov3").Value = txtcov3.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov4").Value = txtcov4.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov5").Value = txtcov5.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov6").Value = txtcov6.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov7").Value = txtcov7.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov8").Value = txtcov8.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov9").Value = txtcov9.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov10").Value = txtcov10.text VegetationDataGridView.Rows.Item(i).Cells.Item("colCov11").Value = txtcov11.text End Sub 168

174 Private Sub VegetationDataGridView_Click(ByVal sender As Object, ByVal e As System.EventArgs) Call TextboxUpdate() End Sub Private Sub bteraseveg_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles bteraseveg.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call EraseVeg() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsaveveg.performclick() 'And now after Saving the data we Clear the Textboxes Call EraseVeg() End If End Sub Private Sub EraseVeg() End Sub Dim rowcount As Integer rowcount = VegetationDataGridView.RowCount For i = 0 To rowcount - 2 VegetationDataGridView.Rows.Clear() Next i txtzr.text = 0 txtze.text = 0 txtpsat.text = 0 txtri.text = 0 txtrj.text = 0 txtcrt.text = 0 txtpwp.text = 0 txtpcrit.text = 0 txtvegdescription.text = 0 txtcov0.text = 0 txtcov1.text = 0 txtcov2.text = 0 txtcov3.text = 0 txtcov4.text = 0 txtcov5.text = 0 txtcov6.text = 0 txtcov7.text = 0 txtcov8.text = 0 txtcov9.text = 0 txtcov10.text = 0 txtcov11.text = 0 169

175 Private Sub LoadValues() OpenFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") OpenFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" OpenFileDialog1.RestoreDirectory = True If (OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then VegetFileName = OpenFileDialog1.FileName End If Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(VegetFileName) = True Then Dim objreader As New System.IO.StreamReader(VegetFileName) If VegetationDataGridView.RowCount <> 0 Then VegetationDataGridView.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") VegetationDataGridView.Rows.Add(SplitLine) Loop Else MsgBox("File Does Not Exist") End If Call TextboxUpdate() End Sub Private Sub btloadveg_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btloadveg.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call LoadValues() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsaveveg.performclick() 'And now after saving the data, we clear the Textboxes Call LoadValues() End If End Sub Private Sub btsaveveg_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsaveveg.click Dim rowcount As Integer rowcount = VegetationDataGridView.RowCount 170

176 Dim i As Integer Dim j As Integer Dim record(rowcount - 2) As Object SaveFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") SaveFileDialog1.Title = "Save File" SaveFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" SaveFileDialog1.FileName = "VegetationParameters_1" SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.ShowDialog() Dim FILE_NAME As String = SaveFileDialog1.FileName Dim objwriter As New System.IO.StreamWriter(FILE_NAME) j = VegetationDataGridView.CurrentRow.Index VegetationDataGridView.Rows.Item(j).Cells.Item("colVegDescription").Value = Val(txtVegDescription.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colZr").Value = Val(txtZr.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colZe").Value = Val(txtZe.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colZsat").Value = Val(txtPsat.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colRi").Value = Val(txtRi.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colRj").Value = Val(txtRj.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colCrt").Value = Val(txtCrt.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colPwp").Value = Val(txtPwp.Text) VegetationDataGridView.Rows.Item(j).Cells.Item("colPcrit").Value = Val(txtPcrit.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov0").Value = Val(txtCov0.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov1").Value = Val(txtCov1.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov2").Value = Val(txtCov2.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov3").Value = Val(txtCov3.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov4").Value = Val(txtCov4.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov5").Value = Val(txtCov5.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov6").Value = Val(txtCov6.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov7").Value = Val(txtCov7.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov8").Value = Val(txtCov8.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov9").Value = Val(txtCov9.Text) VegetationDataGridView.Rows.Item(i).Cells.Item("colCov10").Value = Val(txtCov10.Text) 171

177 VegetationDataGridView.Rows.Item(i).Cells.Item("colCov11").Value = Val(txtCov11.Text) For i = 0 To rowcount - 2 record(i) = CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colVegCode").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colAcronim").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colVegDescription"). Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colZr").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colZe").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colZsat").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colRi").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colRj").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCrt").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colPwp").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colPcrit").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov0").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov1").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov2").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov3").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov4").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov5").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov6").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov7").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov8").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov9").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov10").Value) & _ "; " & CStr(VegetationDataGridView.Rows.Item(i).Cells.Item("colCov11").Value) 172

178 objwriter.writeline(record(i)) Next i objwriter.close() End Sub Private Sub btdefaultveg_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btdefaultveg.click If VegetationDataGridView.RowCount <= 1 Then 'There are no rows with values Call DefaultVegFile() Else 'A dialogbox appears in case the user wants to save the previous data Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We load the default values without Saving Call DefaultVegFile() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsaveveg.performclick() 'And now after Saving the data we load the default values Call DefaultVegFile() End If End If End Sub Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click FrmSoilParam.Show() Me.Hide() End Sub Private Sub VegetationDataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles VegetationDataGridView.CellContentClick Call TextboxUpdate() End Sub Private Sub VegetationDataGridView_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles VegetationDataGridView.CellClick Call TextboxUpdate() End Sub End Class 173

179 4. Datos Hidrometeorologicos de entrada: FrmHydromet.vb Imports System.Math Public Class FrmHydromet Public DailyClimaticFileName As String Private Sub NextForm() rowcount_daily = DailyInputsTable.RowCount ReDim TimeD(rowcount_daily) ReDim PPd(rowcount_daily) ReDim ETPd(rowcount_daily) ReDim MonthNumber(rowcount_daily) For i = 0 To rowcount_daily - 2 TimeD(i) = DailyInputsTable.Rows.Item(i).Cells.Item(0).Value() PPd(i) = DailyInputsTable.Rows.Item(i).Cells.Item(1).Value() ETPd(i) = DailyInputsTable.Rows.Item(i).Cells.Item(2).Value() 174

180 MonthNumber(i) = Month(DailyInputsTable.Rows.Item(i).Cells.Item(0).Value) Next i End Sub FrmRatingCurves.Show() Me.Hide() Private Sub btnext_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnext.click Call NextForm() End Sub Private Sub btloaddaily_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btloaddaily.click OpenFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data") OpenFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" OpenFileDialog1.RestoreDirectory = True If (OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then DailyClimaticFileName = OpenFileDialog1.FileName End If Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(DailyClimaticFileName) = True Then Dim objreader As New System.IO.StreamReader(DailyClimaticFileName) If DailyInputsTable.RowCount <> 0 Then DailyInputsTable.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") DailyInputsTable.Rows.Add(SplitLine) Loop Else MsgBox("File Does Not Exist") End If End Sub Private Sub bterasedaily_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles bterasedaily.click Dim rowcount_daily As Integer rowcount_daily = DailyInputsTable.RowCount For i = 0 To rowcount_daily - 2 DailyInputsTable.Rows.Item(i).Cells.Item(0).Value = "" DailyInputsTable.Rows.Item(i).Cells.Item(1).Value = 0 DailyInputsTable.Rows.Item(i).Cells.Item(2).Value = 0 DailyInputsTable.Rows.Item(i).Cells.Item(3).Value = 0 DailyInputsTable.Rows.Item(i).Cells.Item(4).Value = 0 Next i 175

181 DailyInputsTable.Rows.Clear() End Sub Private Sub btsavedaily_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsavedaily.click rowcount_daily = DailyInputsTable.RowCount Dim i As Integer Dim record(rowcount_daily - 2) As Object SaveFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") SaveFileDialog1.Title = "Save File" SaveFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" SaveFileDialog1.FileName = "Daily Met_1" SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.ShowDialog() DailyClimaticFileName = "" DailyClimaticFileName = SaveFileDialog1.FileName Dim objwriter As New System.IO.StreamWriter(DailyClimaticFileName) For i = 0 To rowcount_daily - 2 record(i) = CStr(DailyInputsTable.Rows.Item(i).Cells.Item(0).Value) & _ "; " & CStr(DailyInputsTable.Rows.Item(i).Cells.Item(1).Value) & _ "; " & CStr(DailyInputsTable.Rows.Item(i).Cells.Item(2).Value) & _ "; " & CStr(DailyInputsTable.Rows.Item(i).Cells.Item(3).Value) & _ "; " & CStr(DailyInputsTable.Rows.Item(i).Cells.Item(4).Value) objwriter.writeline(record(i)) Next i End Sub objwriter.close() Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click FrmVegetParam.Show() Me.Hide() End Sub Private Sub FrmHydromet_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call QuickLoad_DailyInputsTable() End Sub Private Sub QuickLoad_DailyInputsTable() DailyClimaticFileName = "" DailyClimaticFileName = (System.Environment.CurrentDirectory + "\data\default\hydromet.csv") 176

182 Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(DailyClimaticFileName) = True Then ' Call EraseDaily_DataGridView() Dim objreader As New System.IO.StreamReader(DailyClimaticFileName) If DailyInputsTable.RowCount <> 0 Then DailyInputsTable.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") DailyInputsTable.Rows.Add(SplitLine) Loop Else MsgBox("File Does Not Exist") End If End Sub Private Sub btdefault_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btdefault.click Call QuickLoad_DailyInputsTable() End Sub End Class 177

183 5. Curvas de Gasto: FrmRatingCurves.vb Imports System.IO Public Class FrmRatingCurves Public RatingCurveFileName As String Private Sub btnext_click(byval sender As System.Object, ByVal e As System.EventArgs) FrmSimulations.Show() Me.Hide() End Sub Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) FrmHydromet.Show() Me.Hide() End Sub Private Sub btloaddefault_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btdefault.click 'Relative path of the raing curves default file Dim InputFile As String = "\Data\Default\RatingCurves.csv" 'The absolute file path RatingCurveFileName = System.Environment.CurrentDirectory + InputFile 178

184 'A datatable is declared to retrieve the data from the CSV file Dim RatingCurvesTable As DataTable RatingCurvesTable = New DataTable row 'Auxiliary variable that counts number of column separators per Dim SeparatorsPerRow As Integer 'Vector which counts number of column separators per row Dim columncount() As Integer 'Character which acts as column separator Dim columnseparator As String = ";" 'String vector which stores line data from array Dim Lines As String() = IO.File.ReadAllLines(RatingCurveFileName) 'Number of lines from the file Dim NumLines As Integer = Lines.Length ReDim columncount(numlines) Dim i As Integer = 0 For Each line In Lines For Each ch As Char In line If ch = columnseparator Then SeparatorsPerRow = SeparatorsPerRow + 1 End If Next columncount(i) = SeparatorsPerRow SeparatorsPerRow = 0 i = i + 1 Next 'Maximum number of columns is calculated Dim MaxColumnCount As Integer = columncount.max 'The datacolumns are added to the datatable Dim n As Integer = 1 'count the rating curve number of the pair (Q-H) For i = 0 To MaxColumnCount If i Mod 2 = 0 Then RatingCurvesTable.Columns.Add("Flow " + n.tostring + vbcrlf + "Q (m3/s)") Else RatingCurvesTable.Columns.Add("River" + vbcrlf + "Level" + n.tostring + vbcrlf + "H (m)") n = n + 1 End If Next 'String that stores each file line Dim TextLine As String = "" 'Auxiliary string vector which stores each line file for different columns Dim SplitLine() As String 'The fileline are read again and its values passed to the correspondent row and column If System.IO.File.Exists(RatingCurveFileName) = True Then 179

185 Dim objreader As New System.IO.StreamReader(RatingCurveFileName) Dim a As Integer = RatingCurvesTable.Columns.Count Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, columnseparator) RatingCurvesTable.Rows.Add(SplitLine) Loop Else MsgBox("Rating Curves File Does Not Exist") End If End Sub 'The datatable is transfered to the datagridview RatingCurvesDatagrid.DataSource = RatingCurvesTable.DefaultView btcalculatedailyflows.enabled = True Private Sub btcalculatedailyflows_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btcalculatedailyflows.click FrmRiverLevels.Show() Me.Hide() End Sub Private Sub btback_click_1(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click FrmHydromet.Show() Me.Hide() End Sub Private Sub btnext_click_1(byval sender As System.Object, ByVal e As System.EventArgs) End Sub FrmRiverLevels.Show() Me.Hide() Private Sub FrmRatingCurves_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load btdefault.performclick() End Sub Private Sub btsave_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsave.click SaveFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") SaveFileDialog1.Title = "Save File" SaveFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" SaveFileDialog1.FileName = "Rating Curves_1" SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.ShowDialog() Dim FILE_NAME As String = SaveFileDialog1.FileName Dim numcols As Integer = RatingCurvesDatagrid.ColumnCount Dim numrows As Integer = RatingCurvesDatagrid.RowCount

186 Using tw As TextWriter = New StreamWriter(FILE_NAME) For indexrows As Integer = 0 To numrows - 1 'print all column values for a row For indexcols As Integer = 0 To numcols - 1 tw.write(ratingcurvesdatagrid.rows(indexrows).cells(indexcols).value) If (indexcols <> numcols) Then tw.write(";") End If Next tw.writeline() Next End Using End Sub Private Sub btload_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btload.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call LoadValues() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we Clear the Textboxes Call LoadValues() End If End Sub Private Sub LoadValues() '********* This subroutine reads the loaded rating curves file and tranfers it to a datagridview ******** 'Properties are assign to the OpenFileDialog OpenFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") OpenFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" OpenFileDialog1.RestoreDirectory = True If (OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then RatingCurveFileName = OpenFileDialog1.FileName End If 'A datatable is declared to retrieve the data from the CSV file Dim RatingCurvesTable As DataTable RatingCurvesTable = New DataTable row 'Auxiliary variable that counts number of column separators per Dim SeparatorsPerRow As Integer 'Vector which counts number of column separators per row 181

187 Dim columncount() As Integer 'Character which acts as column separator Dim columnseparator As String = ";" 'String vector which stores line data from array Dim Lines As String() = IO.File.ReadAllLines(RatingCurveFileName) 'Number of lines from the file Dim NumLines As Integer = Lines.Length ReDim columncount(numlines) Dim i As Integer = 0 For Each line In Lines For Each ch As Char In line If ch = columnseparator Then SeparatorsPerRow = SeparatorsPerRow + 1 End If Next columncount(i) = SeparatorsPerRow SeparatorsPerRow = 0 i = i + 1 Next 'Maximum number of columns is calculated Dim MaxColumnCount As Integer = columncount.max 'The datacolumns are added to the datatable Dim n As Integer = 1 'count the rating curve number of the pair (Q-H) For i = 0 To MaxColumnCount If i Mod 2 = 0 Then RatingCurvesTable.Columns.Add("Flow " + n.tostring + vbcrlf + "Q (m3/s)") Else RatingCurvesTable.Columns.Add("River" + vbcrlf + "Level" + n.tostring + vbcrlf + "H (m)") n = n + 1 End If Next 'String that stores each file line Dim TextLine As String = "" 'Auxiliary string vector which stores each line file for different columns Dim SplitLine() As String 'The fileline are read again and its values passed to the correspondent row and column If System.IO.File.Exists(RatingCurveFileName) = True Then Dim objreader As New System.IO.StreamReader(RatingCurveFileName) Dim a As Integer = RatingCurvesTable.Columns.Count Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, columnseparator) RatingCurvesTable.Rows.Add(SplitLine) Loop Else 182

188 MsgBox("Rating Curves File Does Not Exist") End If 'The datatable is transfered to the datagridview RatingCurvesDatagrid.DataSource = RatingCurvesTable.DefaultView btcalculatedailyflows.enabled = True End Sub Private Sub bterase_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles bterase.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call EraseVeg() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we Clear the Textboxes and we dissable the calculation button btcalculatedailyflows.enabled = False Call EraseVeg() End If End Sub Private Sub EraseVeg() RatingCurvesDatagrid.DataSource = Nothing RatingCurvesDatagrid.Refresh() End Sub End Class 183

189 6. Niveles de Río Diarios: FrmRiverLevels.vb Imports System.IO Public Class FrmRiverLevels Public RiverLevelsFileName As String Private Sub btnext_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnext.click frmsimpoints.show() Me.Hide() End Sub Private Sub FrmRiverLevels_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call Calculate() End Sub Private Sub Calculate() Dim i As Integer Dim j As Integer Dim k As Integer Dim rowcount_curve As Integer Dim column_count As Integer Dim WTEday(,) As Single 1 'we count the number of rows for each of the datagrids rowcount_daily = FrmHydromet.DailyInputsTable.RowCount rowcount_curve = FrmRatingCurves.RatingCurvesDatagrid.RowCount '- 184

190 column_count = Int((FrmRatingCurves.RatingCurvesDatagrid.ColumnCount - 1) / 2) 'We give the dimensions to the array ReDim Qday(rowcount_daily) ReDim Qcurve(rowcount_curve, column_count) ReDim Hcurve(rowcount_curve, column_count) ReDim WTEday(rowcount_daily, column_count) 'We load the data from the DailyInputsTable datagrids to the Qdaily array For i = 0 To rowcount_daily - 2 Qday(i) = FrmHydromet.DailyInputsTable.Rows.Item(i).Cells.Item("Qdaily").Value() Next i 'We load the data from the Rating Curve datagrids to the Qcurve and Hcurve Single arrays for each transect For j = 0 To rowcount_curve - 2 For k = 0 To column_count Qcurve(j, k) = CDbl(CheckDBNull(FrmRatingCurves.RatingCurvesDatagrid.Rows.Item(j).Cells. Item(2 * k).value())) ', 0)) Hcurve(j, k) = CDbl(CheckDBNull(FrmRatingCurves.RatingCurvesDatagrid.Rows.Item(j).Cells. Item(2 * k + 1).Value())) ', 0)) Next k Next j ' Now we use the "Forecast" function to do the linear interpolation to calculate the daily water level Hdaily For k = 0 To column_count For i = 0 To rowcount_daily - 2 For j = 0 To rowcount_curve - 2 If Math.Abs(Qday(i) - Qcurve(j, k)) < Then WTEday(i, k) = Hcurve(j, k) GoTo break Else If Qday(i) < Qcurve(j, k) Then WTEday(i, k) = Hcurve(j - 1, k) + (Qday(i) - Qcurve(j - 1, k)) / (Qcurve(j, k) - Qcurve(j - 1, k)) * (Hcurve(j, k) - Hcurve(j - 1, k)) GoTo break End If End If Next j break: Next i Next k tableriverlevels.columncount = column_count + 2 'Two extra columns are added one for the dates and the other to compensate 0-based array tableriverlevels.rows.add(rowcount_daily - 1) For i = 0 To rowcount_daily - 2 tableriverlevels.rows.item(i).cells.item(0).value() = FrmHydromet.DailyInputsTable.Rows.Item(i).Cells.Item("Time").Value() Next i 185

191 tableriverlevels.columns(0).headertext = "Date" For k = 0 To column_count '+ 1 For i = 0 To rowcount_daily - 2 tableriverlevels.rows.item(i).cells.item(k + 1).Value() = Math.Round(WTEday(i, k), 3) Next i tableriverlevels.columns(k + 1).HeaderText = "River Level(m)_" + Str(k + 1) Next k End Sub Private Sub btsave_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsave.click SaveFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") SaveFileDialog1.Title = "Save File" SaveFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" SaveFileDialog1.FileName = "RiverLevels_1" SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.ShowDialog() Dim FILE_NAME As String = SaveFileDialog1.FileName Dim numcols As Integer = tableriverlevels.columncount Dim numrows As Integer = tableriverlevels.rowcount - 1 Using tw As TextWriter = New StreamWriter(FILE_NAME) 'writing the data For indexrows As Integer = 0 To numrows - 1 'print all column values for a row For indexcols As Integer = 0 To numcols - 1 tw.write(tableriverlevels.rows(indexrows).cells(indexcols).value) If (indexcols <> numcols) Then tw.write(";") End If Next tw.writeline() Next End Using End Sub Private Sub btload_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btload.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call LoadValues() 186

192 ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we Clear the Textboxes Call LoadValues() End If End Sub Private Sub LoadValues() Dim RiverLevelsFileName As String = "" OpenFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") OpenFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" OpenFileDialog1.RestoreDirectory = True If (OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then RiverLevelsFileName = OpenFileDialog1.FileName End If Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(RiverLevelsFileName) = True Then Dim objreader As New System.IO.StreamReader(RiverLevelsFileName) If tableriverlevels.rowcount <> 0 Then tableriverlevels.rows.clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") tableriverlevels.rows.add(splitline) Loop Else MsgBox("File Does Not Exist") End If End Sub Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click FrmRatingCurves.Show() Me.Hide() End Sub Enum enumobjecttype StrType = 0 IntType = 1 DblType = 2 End Enum Public Function CheckDBNull(ByVal value As Object) Dim DblReturn As Single If value Is "" Or IsDBNull(value) Then value = 0 DblReturn = value Else 187

193 DblReturn = (value) End If Return value End Function End Class 188

194 7. Datos de los Puntos de Simulación: frmsimpoints.vb Imports System.IO Public Class frmsimpoints Public PatchesFileName As String Private Sub DefaultSimulationPoints() PatchesFileName = (System.Environment.CurrentDirectory + "\data\default\defaultsimulationpoints.csv") Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(PatchesFileName) = True Then Dim objreader As New System.IO.StreamReader(PatchesFileName) If PatchTable.RowCount <> 0 Then PatchTable.Rows.Clear() End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") PatchTable.Rows.Add(SplitLine) Loop Else MessageBox.Show("Default Patches File has been Removed or Corrupted", "Removed File", MessageBoxButtons.OK, MessageBoxIcon.Warning) End If End Sub 189

195 Private Sub btnext_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnext.click Dim i As Integer i = PatchTable.CurrentRow.Index FrmSimulations.Show() Me.Hide() End Sub Private Sub bterase_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles bterase.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call EraseVeg() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we Clear the Textboxes Call EraseVeg() End If End Sub Private Sub EraseVeg() End Sub Dim rowcount As Integer rowcount = PatchTable.RowCount For i = 0 To rowcount - 2 PatchTable.Rows.Clear() Next i Private Sub LoadValues() OpenFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") OpenFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" OpenFileDialog1.RestoreDirectory = True If (OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK) Then PatchesFileName = OpenFileDialog1.FileName End If Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(PatchesFileName) = True Then Dim objreader As New System.IO.StreamReader(PatchesFileName) If PatchTable.RowCount <> 0 Then PatchTable.Rows.Clear() 190

196 End Sub End If Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") PatchTable.Rows.Add(SplitLine) Loop Else MsgBox("File Does Not Exist") End If Private Sub btload_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btload.click Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We clear the Textboxes without Saving Call LoadValues() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we Clear the Textboxes Call LoadValues() End If End Sub Private Sub btsave_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsave.click Dim rowcount As Integer rowcount = PatchTable.RowCount Dim i As Integer Dim j As Integer Dim record(rowcount - 2) As Object SaveFileDialog1.InitialDirectory = (System.Environment.CurrentDirectory + "\data\") SaveFileDialog1.Title = "Save File" SaveFileDialog1.Filter = "CSV Files (*.csv) *.csv All Files (*.*) *.*" SaveFileDialog1.FileName = "PatchData_1" SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.ShowDialog() Dim FILE_NAME As String = SaveFileDialog1.FileName Dim objwriter As New System.IO.StreamWriter(FILE_NAME) j = PatchTable.CurrentRow.Index & _ For i = 0 To rowcount - 2 record(i) = CStr(PatchTable.Rows.Item(i).Cells.Item(0).Value) 191

197 _ "; " & CStr(PatchTable.Rows.Item(i).Cells.Item(1).Value) & _ "; " & CStr(PatchTable.Rows.Item(i).Cells.Item(2).Value) & _ "; " & CStr(PatchTable.Rows.Item(i).Cells.Item(3).Value) & "; " & CStr(PatchTable.Rows.Item(i).Cells.Item(4).Value) objwriter.writeline(record(i)) Next i objwriter.close() End Sub Private Sub btdefaultpatch_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btdefaultpatch.click If PatchTable.RowCount <= 1 Then 'There are no rows with values Call DefaultSimulationPoints() Else 'A dialogbox appears in case the user wants to save the previous data Dim reply As DialogResult = MessageBox.Show("Do you want to save the current data?", "", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) If reply = DialogResult.Cancel Then 'Nothing happens ElseIf reply = DialogResult.No Then 'We load the default values without Saving Call DefaultSimulationPoints() ElseIf reply = DialogResult.Yes Then 'We go to the SAVE DIALOG to SAVE the Data from the Textboxes btsave.performclick() 'And now after Saving the data we load the default values Call DefaultSimulationPoints() End If End If End Sub Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click FrmRiverLevels.Show() Me.Hide() End Sub Private Sub PatchTable_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles PatchTable.CellContentClick End Sub Private Sub frmpatches_load(byval sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 192

198 Call DefaultSimulationPoints() End Sub End Class 193

199 8. Simulación y Resultados: frmsimpoints.vb Imports System.Math Imports System.IO Public Class FrmSimulations 'Generate a random number between 1001 and Dim Random As New Random() Dim rn As Integer Dim rand As Integer Private Sub btcsvsimulations_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btcsvsimulations.click 'The simulation process starts Dim StartSim As DateTime = DateTime.Now 'time when siluation starts txtsimulation.appendtext("simulation STARTS at: " + CStr(startSim)) : Cr() memory 'First the calculations are carried out and stored in the array txtsimulation.appendtext("starting Calculations") : Cr() 194

200 Call Module2.Simulate() txtsimulation.appendtext("ending Calculations") : Cr() txtsimulation.appendtext(" ") : Cr() txtsimulation.appendtext(" ") : Cr() 'Now we copy the Input Data Files to the Input subdirectory which is inside the Project directory txtsimulation.appendtext("retrieving Input Data") : Cr() txtsimulation.appendtext(" ") : Cr() txtsimulation.appendtext(" ") : Cr() Directory.CreateDirectory(ProjAddress + "/InputData") Call CopyInputFiles(FrmSoilParam.SoilFileName) 'we call the CopyInputFiles subroutine for each of the input files Call CopyInputFiles(FrmVegetParam.VegetFileName) Call CopyInputFiles(FrmHydromet.DailyClimaticFileName) Call CopyInputFiles(FrmRatingCurves.RatingCurveFileName) Call CopyInputFiles(frmSimPoints.PatchesFileName) 'The user decides which type of output data to be written on csv text files If chkcalibrationtable.checked = True Then txtsimulation.appendtext("starting to Print General Output Table ") : Cr() Call BuildTable() txtsimulation.appendtext("printing of General Output Table FINISHED ") : Cr() txtsimulation.appendtext(" ") : Cr() txtsimulation.appendtext(" ") : Cr() End If If chkgeneraldata.checked = True Then txtsimulation.appendtext("starting to Print of Detailed Data Files ") : Cr() Call GeneralData() txtsimulation.appendtext("printing of Detailed Data Files FINISHED ") : Cr() txtsimulation.appendtext(" ") : Cr() txtsimulation.appendtext(" ") : Cr() End If 'We inform about the time it took to carry out the simulation Dim EndSim As DateTime = DateTime.Now 'time when siluation ends txtsimulation.appendtext("simulation ENDS at: " + CStr(EndSim)) : Cr() Dim SimulationDuration As TimeSpan = EndSim - StartSim txtsimulation.appendtext("simulation ENDS at: " + CStr(SimulationDuration.ToString)) : Cr() 'Lastly we open the containing folder txtsimulation.appendtext("output Folder Opens") : Cr() Process.Start("explorer.exe", Module1.OutputAddress) End Sub 195

201 Private Sub BuildTable() 'This subroutine builds the ETindex Summary Table used for calibration Dim ObsVegTot(nptos - 1) As String 'Observed Vegetation Acronym (ex: "RH+RJ") Dim ColSeparator As String = ";" 'Symbol which determines the separation between columns Dim nveg As Integer = FrmVegetParam.VegetationDataGridView.RowCount Dim FILE_NAME As String = (Module1.OutputAddress + "\Calibration Matrix " + frmmdiparent1.txtproyname.text + ".csv") For i = 0 To nptos - 1 ObsVegTot(i) = frmsimpoints.patchtable.rows.item(i).cells.item("colobservedvegacronym"). Value() Next Using tw As TextWriter = New StreamWriter(FILE_NAME) ''writing the header tw.writeline("*************************************") tw.writeline("calibration MATRIX " + frmmdiparent1.txtproyname.text) tw.writeline("*************************************") tw.writeline() tw.writeline() tw.writeline("point" + ColSeparator + "ObsVeg" + ColSeparator + "ETindex_1" + ColSeparator + "ETindex_2" + ColSeparator + "ETindex_3" + ColSeparator + "ETindex_4") _ With tw For q = 0 To nptos - 1.WriteLine((CStr(q + 1) + ColSeparator _ + ObsVegTot(q)) + ColSeparator _ + Str(ETindexAVGCol(q, 0)) + ColSeparator Next q End With tw.close() End Using End Sub + Str(ETindexAVGCol(q, 1)) + ColSeparator _ + Str(ETindexAVGCol(q, 2)) + ColSeparator _ + Str(ETindexAVGCol(q, 3)) + ColSeparator) Private Sub GeneralData() Dim ColSeparator As String = ";" 'Symbol which determines the separation between columns Dim GenSummary As String = (Module1.OutputAddress + "\Summary from " + frmmdiparent1.txtproyname.text + ".csv") Dim PatchAddress As String Dim nveg As Integer = FrmVegetParam.VegetationDataGridView.RowCount 196

202 Dim BlankSpacesHeader As String = ColSeparator + " " 'Blank Spaces between column header in the output textfile Dim BlankSpacesValues As String = ColSeparator + " " 'Blank Spaces between column header in the output textfile Dim Writer1_GenSummary As New System.IO.StreamWriter(GenSummary) 'Now we write a tittle With Writer1_GenSummary.WriteLine("*************************************").WriteLine("SUMMARY FROM " + frmmdiparent1.txtproyname.text).writeline("*************************************").writeline().writeline() End With 'For each patch we create a table For r = 0 To nptos - 1 With Writer1_GenSummary.WriteLine("PATCH " + frmsimpoints.patchtable.rows.item(r).cells.item("colpatch").value).writeline("vegtype " + ColSeparator + "ETRtot_Index") 'In each patch table we write the values of "ETRtot_Index" for each "Vegetation Type" For u = 0 To FrmVegetParam.VegetationDataGridView.RowCount - 2.WriteLine(FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item(" colacronim").value + (ColSeparator) + Str(ETindexAVGCol(r, u))) Next u 'Lastly we write some characteristics from the Patch.WriteLine("Observed Vegetation: " + ColSeparator + frmsimpoints.patchtable.rows.item(r).cells.item("colobservedvegacronym"). Value).WriteLine("Patch Elevation " + ColSeparator + frmsimpoints.patchtable.rows.item(r).cells.item("colelevation").value).writeline("soil Type " + ColSeparator + frmsimpoints.patchtable.rows.item(r).cells.item("colsoiltype").value).writeline("transect " + ColSeparator + frmsimpoints.patchtable.rows.item(r).cells.item("coltransect").value).writeline() End With Next r '************************************************************************ *****************' 'With the "Writer2_PatchSummary" Object we create a file that summarizes the data from each Patch For r = 0 To nptos - 1 rand = Random.Next(1001, 10000) txtsimulation.appendtext("printing Files for Simulation Point: " + CStr(r + 1) + " out of " + CStr(nptos)) : Cr() txtsimulation.appendtext(" ") : Cr() 197

203 PatchAddress = Module1.OutputAddress + "\Results from Patch_" + frmsimpoints.patchtable.rows.item(r).cells.item(0).value Directory.CreateDirectory(PatchAddress) Dim PatchSummary As String = (PatchAddress + "\Summary from Patch_" + frmsimpoints.patchtable.rows.item(r).cells.item(0).value + ".csv") Dim Writer2_PatchSummary As New System.IO.StreamWriter(PatchSummary) 'Dim s As Integer = frmpatches.patchtable.rows.item(r).cells.item("colsoiltype").value - 1 Dim n As String Dim j As Integer n = CStr(frmSimPoints.PatchTable.Rows.Item(r).Cells.Item("colSoilType").Value ()) Transect = frmsimpoints.patchtable.rows.item(r).cells.item("coltransect").value() For b = 0 To FrmSoilParam.SoilDataGridView.RowCount - 2 If n = FrmSoilParam.SoilDataGridView.Rows.Item(b).Cells.Item("colSoilCode").Valu e() Then j = b GoTo break End If Next break: With Writer2_PatchSummary.WriteLine("*************************************").WriteLine("SUMMARY FROM PATCH " + frmsimpoints.patchtable.rows.item(r).cells.item("colpatch").value).writeline("*************************************") 'Exporting General Characteristics from the Patch.WriteLine("Patch Elevation: " + frmsimpoints.patchtable.rows.item(r).cells.item("colelevation").value + " meters").writeline("soil Type: " + frmsimpoints.patchtable.rows.item(r).cells.item("colsoiltype").value).writeline("pertaining Transect: " + frmsimpoints.patchtable.rows.item(r).cells.item("coltransect").value).writeline("observed Vegetation: " + frmsimpoints.patchtable.rows.item(r).cells.item("colobservedvegetationdes cription").value) 'Exporting Soil Parameters from the Patch.WriteLine("").WriteLine("").WriteLine(" ").WriteLine("Soil Parameters " + frmsimpoints.patchtable.rows.item(r).cells.item("colsoiltype").value).writeline(" ").writeline("soil Type: " + frmsimpoints.patchtable.rows.item(r).cells.item("colsoiltype").value) 198

204 .WriteLine("Porosity: " + FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colPst").Value + " []").WriteLine("Porosity Index: " + FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colIp").Value).WriteLine("Bubble Pressure: " + FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colPb").Value + "Kpa").WriteLine("Saturated Conductivity: " + FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colKs").Value + " mm/hr").writeline("field Capacity Moisture: " + FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colMfc").Value + " []") 'Evaporation Index Results and Vegetation Parameters for all Vegetation Types: ETind=ETtot/ETP.WriteLine("").WriteLine("").WriteLine(" ").WriteLine("Evaporation Index Results and Vegetation Input Parameters").WriteLine(" ").WriteLine("Simulated Vegetation Type /VegType").WriteLine("Simulated Evapotranspiration Index [ ] ETindex").WriteLine("Maximum Root Depth [m] Zr").WriteLine("Effective Root Depth [m] Ze").WriteLine("Saturation Extinction Depth [m] Zsat").WriteLine("Transpiration Factor from Saturated Zone [ ] Rj ").WriteLine("Maximum Soil-Root Water Conductance [mmmpa- 1h-1] CRT").WriteLine("Transpiration Factor from Unsaturated Zone [ ] Ri").WriteLine("Plant Cover Month 1 [ ] Cov1").WriteLine("Plant Cover Month 2 [ ] Cov2").WriteLine("Plant Cover Month 3 [ ] Cov3").WriteLine("Plant Cover Month 4 [ ] Cov4").WriteLine("Plant Cover Month 5 [ ] Cov5").WriteLine("Plant Cover Month 6 [ ] Cov6").WriteLine("Plant Cover Month 7 [ ] Cov7").WriteLine("Plant Cover Month 8 [ ] Cov8").WriteLine("Plant Cover Month 9 [ ] Cov9").WriteLine("Plant Cover Month 10 [ ] Cov10").WriteLine("Plant Cover Month 11 [ ] Cov11").WriteLine("Plant Cover Month 12 [ ] Cov12").WriteLine("").WriteLine("VegType" + ColSeparator _ + "ETind" + ColSeparator _ + "Zr " + ColSeparator _ + "Ze " + ColSeparator _ + "Zsat " + ColSeparator _ + "Ri " + ColSeparator _ + "Rj " + ColSeparator _ + "CRT " + ColSeparator _ + "Description " + ColSeparator _ 199

205 + "Cov1 " + ColSeparator _ + "Cov2 " + ColSeparator _ + "Cov3 " + ColSeparator _ + "Cov4 " + ColSeparator _ + "Cov5 " + ColSeparator _ + "Cov6 " + ColSeparator _ + "Cov7 " + ColSeparator _ + "Cov8 " + ColSeparator _ + "Cov9 " + ColSeparator _ + "Cov10 " + ColSeparator _ + "Cov11 " + ColSeparator _ + "Cov12 " + ColSeparator) 'All the vegetation values are printed For u = 0 To FrmVegetParam.VegetationDataGridView.RowCount - 2.WriteLine(FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item(" colvegcode").value _ + ColSeparator + " " + Str(Round(ETindexAVGCol(r, u), 3)) _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colZr").Val ue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colZe").Val ue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colZsat").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colRi").Val ue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colRj").Val ue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCrt").Va lue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colVegDescr iption").value _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov0").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov1").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov2").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov3").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov4").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov5").V alue _ 200

206 + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov6").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov7").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov8").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov9").V alue _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov10"). Value _ + ColSeparator + " " + FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov11"). Value) Next u 'The Rating Curve from the transect that the the patch pertains is printed.writeline("").writeline("").writeline(" ").writeline("rating Curve").WriteLine(" ").WriteLine("Flow [m3/s] Qcurve").WriteLine("Water Level [m] Hcurve").WriteLine("") 'The headers are now printed.writeline("qcurve " + ColSeparator + "Hcurve ") 'The values from the rating curve are printed Dim f As Integer = frmsimpoints.patchtable.rows.item(r).cells.item("coltransect").value() For d = 0 To FrmRatingCurves.RatingCurvesDatagrid.RowCount - 2.WriteLine(Str(Qcurve(d, f - 1)) + " " + ColSeparator + Str(Hcurve(d, f - 1))) Next d End With 'We close the Writer2_PatchSummary Object that write the summary for each Patch '************************************************************************ *****************' 'With the Writer3_DailyData we create a group of files for each "Patch" that show the "Daily Calculations" for each "Vegetation Type" For u = 0 To FrmVegetParam.VegetationDataGridView.RowCount - 2 Dim DailyData As String = (PatchAddress + "\Vegetation_" + Str(u + 1) + " in Patch " + frmsimpoints.patchtable.rows.item(r).cells.item(0).value + ".csv") Dim Writer3_DailyData As New System.IO.StreamWriter(DailyData) With Writer3_DailyData.WriteLine("***************************************") 201

207 .WriteLine("RESULTS FROM PATCH " + frmsimpoints.patchtable.rows.item(r).cells.item(0).value + " OF VEGETATION_" + Str(u + 1)).WriteLine("***************************************").WriteLine("Date ").WriteLine("Daily Precipitation [mm] PP").WriteLine("Daily Potential Evapotranspiration [mm] ETP ").WriteLine("River Flow [m3/s] Qday").WriteLine("Daily Plant Cover [] DailyCov").WriteLine("Water Table Elevation (i) [m] WTE").WriteLine("End of Day Moisture [mm] Hfin").WriteLine("Matrix Potential [Kpa] Pmat").WriteLine("Root Water Uptake [mm] Rwu").WriteLine("Hydraulic Conductivity [mm/hr] Kh").WriteLine("Capilarity Water Uptake [mm] Cwu").WriteLine("Excess Water [mm] Exc").WriteLine("Water Income to the Soil [mm] Win").WriteLine("Initial Moisture [mm] Hini").WriteLine("Daily Relative Moisture [ ]Hrel ").WriteLine("Actual Unsaturated Zone Evapotranspiration [mm] ETRuns").WriteLine("Actual Saturated Zone Evapotranspiration [mm] ETRsat").WriteLine("Actual Total Evapotranspiration [mm] ETRtot").WriteLine("Evapotranspiration Index [mm] ETindex").WriteLine("").WriteLine("Date " _ + BlankSpacesHeader + "PP" _ + BlankSpacesHeader + "ETP" _ + BlankSpacesHeader + "Qday" _ + BlankSpacesHeader + "DailyCov" _ + BlankSpacesHeader + "WTE" _ + BlankSpacesHeader + "Hfin" _ + BlankSpacesHeader + "Pmat" _ + BlankSpacesHeader + "Rwu" _ + BlankSpacesHeader + "Kh" _ + BlankSpacesHeader + "Cwu" _ + BlankSpacesHeader + "Exc" _ + BlankSpacesHeader + "Win" _ + BlankSpacesHeader + "Hini" _ + BlankSpacesHeader + "Hrel" _ + BlankSpacesHeader + "ETRuns" _ + BlankSpacesHeader + "ETRsat" _ + BlankSpacesHeader + "ETRtot" _ + BlankSpacesHeader + "ETindex") 2 _ ColSeparator _ + ColSeparator _ For v = 0 To FrmHydromet.DailyInputsTable.RowCount -.WriteLine((TimeD(v)) + ColSeparator _ + Str(Round(PPd(v), 4)) + ColSeparator + Str(Round(ETPd(v), 4)) + + Str(Round(Qday(v), 4)) + ColSeparator _ + Str(Round(Cov(u, MonthNumber(v) - 1), 4)) 202

208 ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ ColSeparator _ 4))) Next v End With Writer3_DailyData.Close() + Str(Round(Hdaily(Transect, v), 4)) + + Str(Round(HsoilCol(r, u, v), 4)) + + Str(Round(PmatCol(r, u, v), 4)) + + Str(Round(RwuCol(r, u, v), 4)) + + Str(KhCol(r, u, v)) + ColSeparator _ + Str(Round(CwuCol(r, u, v), 4)) + + Str(Round(ExcCol(r, u, v), 4)) + + Str(Round(WinCol(r, u, v), 4)) + + Str(Round(HiniCol(r, u, v), 4)) + + Str(Round(HrelCol(r, u, v), 4)) + + Str(Round(ETRunsCol(r, u, v), 4)) + + Str(Round(ETRsatCol(r, u, v), 4)) + + Str(Round(ETRtotCol(r, u, v), 4)) + + Str(Round(ETindexDAYCol(r, u, v), End Sub Next u Writer2_PatchSummary.Close() Next r Writer1_GenSummary.Close() 'Lastly we open the containing folder Process.Start("explorer.exe", Module1.OutputAddress) Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click frmsimpoints.show() End Sub End Class 203

209 9. Modulo 1: Module1 Imports System.IO Module Module1 Friend ProjAddress As String 'Name of the new project's directory Friend InputAddress As String 'Name of the Input Data Subdirectory, (inside the project directory) Friend OutputAddress As String 'Name of the Output Data Subdirectory (inside the project directory) Friend rowcount_daily As Integer Friend rowcount As Integer 'CLIMATOLOGICAL DATA AND RIVER LEVEL FORECAST CALCULATIONS Friend Qday() As Single 'Daily Flow [m3/s] Friend Qcurve(,) As Single 'Rating Curve Flow [m3/s] Friend Hcurve(,) As Single 'Rating Curve Water Table Elevation (m) Friend PPd() As Single Friend ETPd() As Single Friend TimeD() As String 'Precipitation (mm/day) 'Potencial Evapotranspiration (mm/day) 'Date (dd/mm/yyyy) 'Parameters from the soil type that the user has selected in the "lbtexturetype" listbox and that will be used inthe Daily State Variable Form Friend Cov(,) As Single 'Plant Cover Cv_yearly Friend Texture As String 'Texture Class Friend Pst() As Single 'Φ Porosity [ ] Friend Hres As Single 'σr Residual Water Content [ ] Friend Pb() As Single 'Bubbling capillary pressure (mm) Friend Ip() As Single 'λ=pore -size index Friend Mfc() As Single 'Field Capacity Moisture [ ] Friend Ks() As Single 'Fully Saturated conductivity (mm/hr) Friend Zmin() As Single 'Minimum Capillary Depth to be Considered [m] 'VEGETATION DATA(form2) Friend Zr() As Single Friend Ze() As Single Friend Zsat() As Single Friend Ri() As Single Zone [ ] Friend Rj() As Single Zone [ ] 'Root Depth Zr max [m] 'Effective Root Depth Ze [m] 'Extinction Saturation Psat [m] 'Transpiration Factor from Unsaturated 'Transpiration Factor from Saturated Friend Crt() As Single 'Maximum Soil-Root Water Conductance CRT [mmmpa-1h-1] Friend Pwp() As Single 'Moisture at Wilting Point [ ] Friend Pcrit() As Single 'Critical Moisture [ ] Friend Veg As String 'River Vegetation Type [1 to 5] 204

210 'GENERAL CALCULATIONS(form4) Friend Mcrit() As Single 'θcrit Moisture at Critical Point [ ] Friend Mwp() As Single 'θwp Moisture at Wilting Point [ ] Friend CZr() As Single 'Root Depth Elevation (m) Friend CZe() As Single 'Effective Root Depth Elevation (m) Friend CPsat() As Single 'Extinction Saturation Elevation (m) Friend Hfc() As Single 'Field Capacity Depth (mm) Friend Hwp() As Single 'Permanent Wilting Point Depth (mm) Friend Hcrit() As Single 'Critical Moisture Depth (mm) Friend Pm50() As Single 'Medium Saturation Moisture Pressure [Kpa] Friend Pfc() As Single 'Field Capacity Pressure [Kpa] Friend CZmin() As Single 'Elevation to be considered in CWU [m] Friend Sub CopyInputFiles(ByVal FilePath As String) End Sub 'this sub permits copying the input files to the project's folder Directory.CreateDirectory(ProjAddress + "/InputData") Dim NewCopy As String ' the next instruccion extracts the file name from its path Dim Filename As String = IO.Path.GetFileName(FilePath) NewCopy = ProjAddress + "InputData\" + Filename If System.IO.File.Exists(FilePath) = True Then System.IO.File.Copy(FilePath, NewCopy) End If Friend Sub Automatic() 'this sub permits automatic simulations FrmSoilParam.btNext.PerformClick() FrmVegetParam.btNext.PerformClick() FrmHydromet.btNext.PerformClick() FrmRatingCurves.btCalculateDailyFlows.PerformClick() FrmRiverLevels.btNext.PerformClick() frmsimpoints.btnext.performclick() FrmSimulations.Show() FrmSoilParam.Hide() End Sub Friend Sub Cr() FrmSimulations.txtSimulation.Text = FrmSimulations.txtSimulation.Text + Environment.NewLine End Sub End Module 205

211 10. Modulo 2: Module2 Imports System.Math Imports System.IO Module Module2 Friend Es() As Single level) Friend ClimaticCount As Integer Friend FlowCount As Integer Friend MonthNumber() As Integer daily interval 'Patch Elevation (m above sea 'stores the month number for each Friend nptos As Integer Friend nveg As Integer Friend Transect As Integer Friend Hsoil() As Single 'Daily Soil Moisture Depth (mm) Dim Psoil() As Single 'Daily Soil Moisture Relation [ ] Friend Pmat() As Single 'Matrix Potential [mm] Friend Rwu() As Single 'Root Water Uptake Ahr [mm] Friend Kh() As Single 'Hydraulic Conductivity [mm/hr] Friend Cwu() As Single 'Capilarity Water Uptake [mm] Friend Exc() As Single 'Excess of Water [mm] Friend Win() As Single 'Water Income [mm] Friend Hini() As Single 'Initial Moisture [mm] Friend Hrel() As Single 'Daily Relative Moisture [ ] Friend ETRnul() As Single 'Casos ETR=0 (simplificacion de calculos) Friend ETRuns() As Single 'Real Evapotranspiration of the Unsaturated Zone [mm] Friend ETRsat() As Single 'Real Evapotranspiration of the Saturated Zone [mm] Friend ETRtot() As Single 'Real Total Evapotranspiration [mm] Friend Bal() As Single 'Water Balance [mm] Friend ETindexDay() As Single 'Daily ETindex Public Es_ini As Single Public delta_cota As Single Public ncotas As Integer 'Initial Elevation (m) 'Delta Elevation (m) 'Number of Elevations (m) 'Single Array(Transect,Time) Friend Hdaily(,) As Single Transect(m) 'Daily Water Table Elevation per each 'Triple Arrays (Patch,Time, Vegetation) Friend HfcCol(,,) As Single Friend HdailyCol(,,) As Single Friend HsoilCol(,,) As Single Friend PmatCol(,,) As Single Friend RwuCol(,,) As Single Friend KhCol(,,) As Single 206

212 Friend CwuCol(,,) As Single Friend ExcCol(,,) As Single Friend WinCol(,,) As Single Friend HiniCol(,,) As Single Friend HrelCol(,,) As Single Friend ETRsatCol(,,) As Single Friend ETRunsCol(,,) As Single Friend ETRtotCol(,,) As Single Friend BalCol(,,) As Single Friend ETindexDAYCol(,,) As Single Friend ETindexAVGCol(,) As Single Friend ArrayOut(,) As Single ' ETindexCol array sorted with keys by minimum to maximum vegetation type ETindex values 'number of dimensions of the square calibration array (includes vegetation functional types "Single mixtures") Friend Sub Simulate() rowcount = FrmHydromet.DailyInputsTable.RowCount Dim m As Integer 'counter which returns month number (0 to 11) of each year Dim SumETRtot As Single Dim sumetpd As Single Dim ETindexTot As Single ClimaticCount = FrmHydromet.DailyInputsTable.RowCount nptos = frmsimpoints.patchtable.rowcount - 1 'Number of simulation points to be calculated nveg = FrmVegetParam.VegetationDataGridView.RowCount - 2 Dim numtrans As Integer 'Number of Transects in the stretch FlowCount = FrmRiverLevels.tableRiverLevels.RowCount - 2 numtrans = FrmRiverLevels.tableRiverLevels.ColumnCount - 1 ReDim Preserve Hdaily(numTrans, ClimaticCount) For d = 1 To numtrans For v = 0 To FlowCount Hdaily(d, v) = FrmRiverLevels.tableRiverLevels.Rows.Item(v).Cells.Item(d).Value() Next v Next d ReDim Cov(nveg, 11) ReDim Preserve Es(nptos) 'Plant Cover Cv_yearly ReDim Preserve Hsoil(ClimaticCount) Depth (mm) ReDim Preserve Psoil(ClimaticCount) Relation (cm3/cm3) ReDim Preserve Pmat(ClimaticCount) ReDim Preserve Rwu(ClimaticCount) [mm] ReDim Preserve Kh(ClimaticCount) Conductivity [mm/hr] ReDim Preserve Cwu(ClimaticCount) Uptake [mm] 'Daily Soil Moisture 'Daily Soil Moisture 'Matrix Potential [mm] 'Root Water Uptake Ahr 'Hydraulic 'Capilarity Water 207

213 ReDim Preserve Exc(ClimaticCount) ReDim Preserve Win(ClimaticCount) ReDim Preserve Hini(ClimaticCount) ReDim Preserve Hrel(ClimaticCount) Moisture (cm3/cm3) ReDim Preserve ETRnul(ClimaticCount) (simplificacion de calculos) ReDim Preserve ETRuns(ClimaticCount) Evapotranspiration of the Unsaturated Zone [mm] ReDim Preserve ETRsat(ClimaticCount) Evapotranspiration of the Saturated Zone [mm] ReDim Preserve ETRtot(ClimaticCount) Evapotranspiration [mm] ReDim Preserve Bal(ClimaticCount) ReDim Preserve ETindexDay(ClimaticCount) 'Excess of Water [mm] 'Water Income [mm] 'Initial Moisture [mm] 'Daily Relative 'Casos ETR=0 'Real 'Real 'Real Total 'Water Balance [mm] 'Daily ETindex (Fest) ReDim Zr(nveg) ReDim Ze(nveg) ReDim Zsat(nveg) ReDim Ri(nveg) ReDim Rj(nveg) 'Root Depth Zr max [m] 'Efective Root Depth Ze [m] 'Extinction Saturation Psat [m] 'Efficiency of Static Water Purchase 'Fraction of Active Roots below Ze (Rj) ReDim Crt(nveg) [mmmpa-1h-1] ReDim Pwp(nveg) ReDim Pcrit(nveg) 'Maximum Soil-Root Water Conductance CRT 'Wilting Point Pressure [Kpa] 'Critical Point Pressure [Kpa] ReDim Pst(nptos) ReDim Ip(nptos) ReDim Pb(nptos) ReDim Mfc(nptos) ReDim Ks(nptos) ReDim Zmin(nptos) ReDim Hfc(nptos) 'Field Capacity Depth (mm) [Kpa] ReDim Mcrit(nveg) ReDim Mwp(nveg) ReDim Hwp(nveg) ReDim Hcrit(nveg) ReDim Pm50(nveg) ReDim Pfc(nveg) 'Permanent Wilting Equivalent water (mm) 'Critical Moisture Equivalent water (mm) 'Medium Saturation Moisture Pressure 'Field Capacity Pressure [Kpa] ReDim CZr(Es.Length - 1) ReDim CZe(Es.Length - 1) ReDim CPsat(Es.Length - 1) ReDim CZmin(Es.Length - 1) ReDim HfcCol(nptos, nveg, ClimaticCount) ReDim HdailyCol(nptos, nveg, ClimaticCount) ReDim HsoilCol(nptos, nveg, ClimaticCount) ReDim PmatCol(nptos, nveg, ClimaticCount) ReDim RwuCol(nptos, nveg, ClimaticCount) ReDim KhCol(nptos, nveg, ClimaticCount) ReDim CwuCol(nptos, nveg, ClimaticCount) 208

214 ReDim ExcCol(nptos, nveg, ClimaticCount) ReDim WinCol(nptos, nveg, ClimaticCount) ReDim HiniCol(nptos, nveg, ClimaticCount) ReDim HrelCol(nptos, nveg, ClimaticCount) ReDim ETRunsCol(nptos, nveg, ClimaticCount) ReDim ETRsatCol(nptos, nveg, ClimaticCount) ReDim ETRtotCol(nptos, nveg, ClimaticCount) ReDim BalCol(nptos, nveg, ClimaticCount) ReDim ETindexDAYCol(nptos, nveg, ClimaticCount) ReDim ETindexAVGCol(nptos, nveg) For r = 0 To nptos '- 1 FrmSimulations.txtSimulation.AppendText("Simulating point " + Str(r) + " out of " + Str(nptos)) : Cr() Es(r) = frmsimpoints.patchtable.rows.item(r).cells.item("colelevation").value() Dim n As String Dim j As Integer n = CStr(frmSimPoints.PatchTable.Rows.Item(r).Cells.Item("colSoilType").Value ()) Transect = frmsimpoints.patchtable.rows.item(r).cells.item("coltransect").value() For b = 0 To FrmSoilParam.SoilDataGridView.RowCount - 2 If n = FrmSoilParam.SoilDataGridView.Rows.Item(b).Cells.Item("colSoilCode").Valu e() Then j = b GoTo break End If Next break: Pst(r) = FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colPst").Value() 'Max. Root Depth Zr [m] Ip(r) = FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colIp").Value() 'Efective Root Depth Ze [m] Pb(r) = FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colPb").Value() 'Extinction Saturation Psat [m] Ks(r) = FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colKs").Value() 'Moisture at Wilting Point [ ] Mfc(r) = FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colMfc").Value() 'Fraction of Active Roots below Efective Root Depth(Rj) [mm/mm] Zmin(r) = FrmSoilParam.SoilDataGridView.Rows.Item(j).Cells.Item("colZmin").Value() correctly For u = 0 To nveg '- 1 'We put the following varibles=0 so the sum is done 209

215 SumETRtot = 0 sumetpd = 0 ETindexTot = 0 Zr(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colZr").Val ue() Ze(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colZe").Val ue() Zsat(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colZsat").V alue() Ri(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colRi").Val ue() Rj(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colRj").Val ue() Crt(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCrt").Va lue() Pwp(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colPwp").Va lue() Pcrit(u) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colPcrit"). Value() 'Determin m for each day inside v loop For m = 0 To 11 'There are 12 months being January month=0 Cov(u, m) = FrmVegetParam.VegetationDataGridView.Rows.Item(u).Cells.Item("colCov" + CStr(m)).Value() Next Mcrit(u) = Pst(r) * (Pb(r) / Pcrit(u)) ^ Ip(r) Mwp(u) = Pst(r) * (Pb(r) / Pwp(u)) ^ Ip(r) CZr(r) = Es(r) - Zr(u) CZe(r) = Es(r) - Ze(u) CPsat(r) = Es(r) - Zsat(u) Hfc(r) = Mfc(r) * Ze(u) * 1000 Hwp(u) = Mwp(u) * Ze(u) * 1000 Hcrit(u) = Mcrit(u) * Ze(u) * 1000 Pm50(u) = Pb(r) / (0.5 * Pst(r)) ^ (1 / Ip(r)) Pfc(u) = Pb(r) / (Mfc(r) / Pst(r)) ^ (1 / Ip(r)) CZmin(r) = Es(r) - Zmin(r) Hsoil(0) = Hcrit(u) Psoil(0) = Hsoil(0) / (1000 * Ze(u)) For v = 1 To ClimaticCount - 2 m = MonthNumber(v) - 1 of each daily interval to calculate Cov 'returns the month number Hsoil(v) = Hsoil(v - 1) 210

216 Psoil(v) = Hsoil(v) / (1000 * Ze(u)) Ip(r)) If Hdaily(Transect, v) >= Es(r) Then Pmat(v) = Pb(r) ElseIf Hdaily(Transect, v) < Es(r) Then If Psoil(v) = 0 Then Pmat(v) = Pwp(u) Else Pmat(v) = Pb(r) / (Psoil(v) / Pst(r)) ^ (1 / End If End If Kh(v) = Ks(r) * (Pb(r) / Pmat(v)) ^ (3 * Ip(r) + 2) If Hdaily(Transect, v - 1) >= CZe(r) Or Hdaily(Transect, v - 1) < CZr(r) Then Rwu(v) = 0 ElseIf Hdaily(Transect, v - 1) < CZe(r) And Hdaily(Transect, v - 1) > CZr(r) Then Rwu(v) = Max(0, (-Crt(u) * 10 / 1000) * (Pfc(u) - Pmat(v)) * (1 / (1 + ((Pmat(v) / Pm50(u))) ^ 3.22)) * Rj(u)) End If If Hdaily(Transect, v) <= CZmin(r) Then Cwu(v) = 0 ElseIf Hdaily(Transect, v) > CZmin(r) And Hdaily(Transect, v) >= CZe(r) Then Cwu(v) = Hfc(r) - Hsoil(v - 1) - Rwu(v) ElseIf Hdaily(Transect, v) > CZmin(r) And Hdaily(Transect, v) < CZe(r) Then Cwu(v) = Max(0, Min(Hfc(r) - Hsoil(v - 1) - Rwu(v), (( * Pmat(v) / (Hdaily(Transect, v) - CZe(r))) - 1) * Kh(v) * 24)) End If Hsoil(v - 1)) Exc(v) = Max(0, PPd(v) + Cwu(v) + Rwu(v) - Hfc(r) + Win(v) = PPd(v) + Cwu(v) + Rwu(v) - Exc(v) Hini(v) = Win(v) + Hsoil(v - 1) Hwp(u))) If Hini(v) < Hwp(u) Or Hcrit(u) < Hwp(u) Then Hrel(v) = 0 Else Hrel(v) = Min(1, (Hini(v) - Hwp(u)) / (Hcrit(u) - End If If Hdaily(Transect, v) >= CPsat(r) Then ETRuns(v) = 0 Else If Hdaily(Transect, v) >= CZe(r) Then ETRuns(v) = Ri(u) * Cov(u, m) * ETPd(v) * (1 - ((Hdaily(Transect, v) - CZe(r)) / (CPsat(r) - CZe(r)))) Else 211

217 ETRuns(v) = Min(Hini(v) - Hwp(u), Ri(u) * Hrel(v) * Cov(u, m) * ETPd(v)) End If End If 'Codigo despues de mayo de 2010 If Hdaily(Transect, v) >= CPsat(r) Or Hdaily(Transect, v) < CZr(r) Then ETRsat(v) = 0 ElseIf Hdaily(Transect, v) >= CZe(r) Then ETRsat(v) = Min(Cov(u, m) * ETPd(v) - ETRuns(v), Cov(u, m) * ETPd(v) * Rj(u) * (1 - (Hdaily(Transect, v) - CZe(r)) / (CPsat(r) - CZe(r)))) Else ETRsat(v) = Min(Cov(u, m) * ETPd(v) - ETRuns(v), Cov(u, m) * ETPd(v) * Rj(u) * (Hdaily(Transect, v) - CZr(r)) / (CZe(r) - CZr(r))) End If ETRuns(v)) Hsoil(v) = Max(Hini(v) - ETRuns(v), Hwp(u)) ETRtot(v) = ETRsat(v) + ETRuns(v) Bal(v) = Hsoil(v) - (Hsoil(v - 1) + Win(v) - ETindexDay(v) = ETRtot(v) / (ETPd(v) * Cov(u, m)) SumETRtot = SumETRtot + ETRtot(v) sumetpd = sumetpd + ETPd(v) ETindexTot = SumETRtot / (sumetpd * Cov(u, m)) HfcCol(r, u, v) = Hfc(r) HsoilCol(r, u, v) = Hsoil(v) PmatCol(r, u, v) = Pmat(v) RwuCol(r, u, v) = Rwu(v) KhCol(r, u, v) = Kh(v) CwuCol(r, u, v) = Cwu(v) ExcCol(r, u, v) = Exc(v) WinCol(r, u, v) = Win(v) HiniCol(r, u, v) = Hini(v) HrelCol(r, u, v) = Hrel(v) ETRunsCol(r, u, v) = ETRuns(v) ETRsatCol(r, u, v) = ETRsat(v) ETRtotCol(r, u, v) = ETRtot(v) BalCol(r, u, v) = Bal(v) ETindexDAYCol(r, u, v) = ETindexDay(v) ETindexAVGCol(r, u) = ETindexTot Next v Next u Next r End Sub End Module 212

218 ANEXO VIII: CÓDIGO FUENTE DEL PROGRAMA RIBAV-2 213

219 En este anexo se presenta el código fuente del software de Ribav 2D. Al igual que en Ribav1D, el código fuente se presenta distribuido en dos tipos de archivo: los archivos de modulo y los archivos Windows-Form. Como el objetivo de este programa era ser integrado en el software de Ripflow como librería DLL, no se ha desarrollado demasiado la interfaz gráfica de usuario debido a que se utilizará la interfaz propia de Ripflow. Los archivos que contienen el código fuente de Ribav 2D son los siguientes: 1. Datos de Entrada Generales: frminputs.vb 2. Datos de Entrada Relativos a la Vegetación Dinámica: frmvegdynamics.vb 3. Módulo de Subrutinas de Mapas: modmaps.vb 4. Modulo de Subrutinas de Hidrometeorología: modhydromet.vb 5. Módulo General: modmain.vb El código fuente de Ribav2D se muestra a continuación distribuido entre sus distintos archivos y formularios: 214

220 1. Datos de Entrada Generales: frminputs.vb Public Class FrmMain Private Sub btloaddefault_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btloaddefault.click Dim Lines() As String Dim DefaultRelativeFilePaths As String = System.Environment.CurrentDirectory + "\Data\DefaultRelativeFilePaths.csv" Lines = IO.File.ReadAllLines(DefaultRelativeFilePaths) txtsoilmap.text = System.Environment.CurrentDirectory + Lines(0) '"\Data\INPUT\Maps\SoilMap.asc" txtinitialvegmap.text = System.Environment.CurrentDirectory + Lines(1) '"\Data\INPUT\Maps\InitialVegetationMap.asc" txtdemmap.text = System.Environment.CurrentDirectory + Lines(2) '"\Data\INPUT\Maps\DemMap.asc" txtsoilparam.text = System.Environment.CurrentDirectory + Lines(3) '"\Data\INPUT\Parameters\SoilParameters.csv" txtvegparam.text = System.Environment.CurrentDirectory + Lines(4) '"\Data\INPUT\Parameters\VegetationParameters.csv" txthydrometdata.text = System.Environment.CurrentDirectory + Lines(5) '"\Data\INPUT\Hydromet\Hydromet.csv" txtwtemaps.text = System.Environment.CurrentDirectory + Lines(6) '"\Data\INPUT\Hydromet\WteMaps.csv" frmvegdynamics.txtyearlyetindexdirectory.text = System.Environment.CurrentDirectory + Lines(7) '+ \Data\OUTPUT\ETindexMaps\ frmvegdynamics.txtdynamicvegdirectory.text = System.Environment.CurrentDirectory + Lines(8) '+ \Data\OUTPUT\VegMaps\ Call LoadWTEMapsTable(txtWTEMaps.Text) 215

221 End Sub Private Sub btsimulate_click(byval sender As System.Object, ByVal e As System.EventArgs) MainHydromet() Simulate() End Sub Private Function ChangeFilePath(ByVal InitialDirectory As String, ByVal filter As String) Dim openfiledialog1 As New OpenFileDialog Dim FilePath As String openfiledialog1.showdialog() openfiledialog1.initialdirectory = (System.Environment.CurrentDirectory + InitialDirectory) openfiledialog1.filter = filter '"CSV Files (*.csv) *.csv All Files (*.*) *.*" FilePath = openfiledialog1.filename Return FilePath End Function Private Sub btchangesoilmap_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangesoilmap.click txtsoilmap.text = ChangeFilePath("\Data", "ASC Files (*.asc) *.asc All Files (*.*) *.*") End Sub Private Sub btchangevegmap_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangevegmap.click txtinitialvegmap.text = ChangeFilePath("\Data\", "ASC Files (*.asc) *.asc All Files (*.*) *.*") End Sub Private Sub btchangedemmap_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangedemmap.click txtdemmap.text = ChangeFilePath("\Data\", "ASC Files (*.asc) *.asc All Files (*.*) *.*") End Sub Private Sub btchangesoilparam_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangesoilparam.click txtsoilparam.text = ChangeFilePath("\Data\", "CSV Files (*.csv) *.csv All Files (*.*) *.*") End Sub Private Sub btchangevegparam_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangevegparam.click txtvegparam.text = ChangeFilePath("\Data\", "CSV Files (*.csv) *.csv All Files (*.*) *.*") End Sub Private Sub btchangehydrometdata_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangehydrometdata.click txthydrometdata.text = ChangeFilePath("\Data\", "CSV Files (*.csv) *.csv All Files (*.*) *.*") End Sub 216

222 Private Sub btchangewtemaps_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangewtemaps.click txtwtemaps.text = ChangeFilePath("\Data\", "ASC Files (*.asc) *.asc All Files (*.*) *.*") End Sub Private Sub LoadWTEMapsTable(ByVal InputFile As String) Dim FilePath As String = InputFile 'A datatable is declared to retrieve the data from the CSV file Dim WteMapsTable As DataTable WteMapsTable = New DataTable WteMapsTable.Columns.Add("River Flow (m3/s)") WteMapsTable.Columns.Add("Map File") 'The data from the CSV file is passed to the datatable and its datacolumns 'with the help of the string.split method to separate the columns Dim TextLine As String = "" Dim SplitLine() As String Dim i As Integer = 0 'loop counter If System.IO.File.Exists(FilePath) = True Then Dim objreader As New System.IO.StreamReader(FilePath) Dim a As Integer = WteMapsTable.Columns.Count Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") WteMapsTable.Rows.Add(SplitLine) Loop Else MsgBox("WTE File Does Not Exist") End If 'The datatable could be transfered easily to a datagridview WTEMapsDatagridView.DataSource = WteMapsTable.DefaultView WTEMapsDatagridView.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.All Cells) End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load btloaddefault.performclick() frmvegdynamics.etlowerlimit = (frmvegdynamics.txtetlowerlimit.text) frmvegdynamics.etupperlimit = (frmvegdynamics.txtetupperlimit.text) End Sub 217

223 Private Sub btchangeetlimits_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btchangeetlimits.click frmvegdynamics.show() Me.Hide() End Sub Private Sub btsimulate_click_1(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsimulate.click 'The following variables are used to determin the simulation process duration Dim StartingTime As DateTime Dim EndingTime As DateTime Dim SimulationDuration As TimeSpan 'The simulation process starts StartingTime = DateTime.Now frmsimulationinformation.txtsimulation.appendtext("simulation STARTS at: " + CStr(StartingTime)) : Cr() frmsimulationinformation.show() MainHydromet() Simulate() 'Further messages are added during the simulations frmsimulationinformation.txtsimulation.appendtext(" ") : Cr() EndingTime = DateTime.Now frmsimulationinformation.txtsimulation.appendtext("simulation ENDS at: " + CStr(EndingTime)) : Cr() SimulationDuration = EndingTime - StartingTime frmsimulationinformation.txtsimulation.appendtext(" ") : Cr() frmsimulationinformation.txtsimulation.appendtext("the simulation lasted: " + SimulationDuration.ToString) : Cr() frmsimulationinformation.txtsimulation.appendtext(" ") : Cr() End Sub Friend Sub Cr() frmsimulationinformation.txtsimulation.text = frmsimulationinformation.txtsimulation.text + Environment.NewLine End Sub Private Sub GroupBox3_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox3.Enter End Sub End Class 218

224 2. Datos de Entrada Relativos a la Vegetación Dinámica: frmvegdynamics.vb Public Class VegDynamics Friend ETLowerLimit As Single retrogression process Friend ETUpperLimit As Single process 'Lower ETindex limit /below 'Upper ETindex limit /above succesion Private Sub btsimulate_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsimulate.click FrmMain.btSimulate.PerformClick() End Sub Private Sub btback_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btback.click FrmMain.Show() ETLowerLimit = (txtetlowerlimit.text) ETUpperLimit = (txtetupperlimit.text) 219

225 Me.Hide() End Sub Private Sub VegDynamics_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load btloaddefault.performclick() End Sub Friend Sub VegDynamicsCalc(ByVal year As Integer) Dim VegIndex(VegetationParameterArray.GetLength(0) - 1) As Integer 'vectors of indexes or keys of the vegetation type Dim MinVegIndex As Integer 'minimum index or key of the vegetation type Dim MaxVegIndex As Integer 'maximum index or key of the vegetation type For z = 0 To VegetationParameterArray.GetLength(0) - 1 VegIndex(z) = VegetationParameterArray(z, 0) Next MinVegIndex = VegIndex.Min MaxVegIndex = VegIndex.Max For i = 0 To ASCIIDataSt.nrows - 1 'nptos '- 1 'Dim i As Integer = 39 For j = 0 To ASCIIDataSt.ncols - 1 'Dim j As Integer = 342 'The succesion/retrogression of the vegetation functional types is taken into account 'The MaximumVegIndex(TV) and MaximumVegIndex(RH)are also taken into account If ETindexYearAvg(year, i, j) = ASCIIDataSt.NODATA_value Then VegetationMapArray(i, j) = ASCIIDataSt.NODATA_value Else If ETindexYearAvg(year, i, j) >= ETUpperLimit Then If VegetationMapArray(i, j) <> MaxVegIndex Then VegetationMapArray(i, j) = VegetationMapArray(i, j) + 1 Else VegetationMapArray(i, j) = VegetationMapArray(i, j) End If ElseIf ETindexYearAvg(year, i, j) <= ETLowerLimit Then If VegetationMapArray(i, j) <> MinVegIndex Then VegetationMapArray(i, j) = VegetationMapArray(i, j) - 1 Else VegetationMapArray(i, j) = VegetationMapArray(i, j) End If End If End If Next Next 220

226 OutAsciiMap(VegetationMapArray, txtdynamicvegdirectory.text + "VegetationEndYear_" + Str(year + 1) + ".asc") End Sub Friend Sub ETindexMap(ByVal year) Dim CurrentYearETindex(,) As Single 'ETindex for a given year ReDim CurrentYearETindex(ETindexYearAvg.GetLength(1) - 1, ETindexYearAvg.GetLength(2) - 1) For i = 0 To CurrentYearETindex.GetLength(0) - 1 For j = 0 To CurrentYearETindex.GetLength(1) - 1 CurrentYearETindex(i, j) = ETindexYearAvg(year, i, j) Next Next OutAsciiMap(CurrentYearETindex, txtyearlyetindexdirectory.text + "ETindexEndYear_" + Str(year + 1) + ".asc") End Sub Friend Sub OutAsciiMap(ByVal InputMatrix(,) As Single, ByVal FileToSave As String) Dim objwriter As New System.IO.StreamWriter(FileToSave) 'We write the first 6 lines which describe the mesh>>changing "," to "." objwriter.writeline("ncols" + " " + ASCIIDataSt.ncols.ToString) objwriter.writeline("nrows" + " " + ASCIIDataSt.nrows.ToString) objwriter.writeline("xllcorner" + " " + ASCIIDataSt.xllcorner.ToString) objwriter.writeline("yllcorner" + " " + ASCIIDataSt.yllcorner.ToString) objwriter.writeline("cellsize" + " " + ASCIIDataSt.cellsize.ToString) objwriter.writeline("nodata_value" + " " + ASCIIDataSt.NODATA_value.ToString) 'We now pass to the file the data from the double array Dim record(inputmatrix.getlength(0) - 1) As String For i = 0 To InputMatrix.GetLength(0) - 1 For j = 0 To InputMatrix.GetLength(1) - 1 If j = 0 Then record(i) = InputMatrix(i, j).tostring Else record(i) = record(i) + " " + InputMatrix(i, j).tostring End If Next j ' record(i) = record(i).replace(",", ".") 'We replace "." by "," objwriter.writeline(record(i)) 221

227 Next i End Sub objwriter.close() Private Sub btloaddefault_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btloaddefault.click Dim Lines() As String Dim DefaultRelativeFilePaths As String = System.Environment.CurrentDirectory + "\Data\DefaultRelativeFilePaths.csv" Lines = IO.File.ReadAllLines(DefaultRelativeFilePaths) txtyearlyetindexdirectory.text = System.Environment.CurrentDirectory + Lines(7) '+ \Data\OUTPUT\ETindexMaps\ txtdynamicvegdirectory.text = System.Environment.CurrentDirectory + Lines(8) '+ \Data\OUTPUT\VegMaps\ End Sub End Class ETLowerLimit = (txtetlowerlimit.text) ETUpperLimit = (txtetupperlimit.text) 222

228 3. Módulo de Subrutinas de Mapas: modmaps.vb Imports System.IO Imports System.Data.OleDb Structure OutputStructure Dim arrayout(,) As String Dim nrows As Integer Dim ncolumns As Integer End Structure Module ModMaps Dim SoilAsciiSt As ASCIIData Public Output As New OutputStructure Friend Function LoadSingleAscii(ByVal file As String, ByVal ASCIIStartline As Integer) Dim Lines() As String Lines = IO.File.ReadAllLines(file) '******Extracts the number of columns from the ASCII file ASCIIDataSt.ncols = ExtractNumber(Lines(0)) ASCIIDataSt.nrows = ExtractNumber(Lines(1)) ASCIIDataSt.xllcorner = ExtractNumber(Lines(2)) ASCIIDataSt.yllcorner = ExtractNumber(Lines(3)) ASCIIDataSt.cellsize = ExtractNumber(Lines(4)) ASCIIDataSt.NODATA_value = ExtractNumber(Lines(5)) Dim ASCIIColumnSeparator As String = " " '*****ASCII file column separator Dim DataArray(Lines.Length - ASCIIStartline - 1, ASCIIDataSt.ncols - 1) As String 'In the following array the string values are stored as doubles ReDim NumberArray(Lines.Length ASCIIStartline, ASCIIDataSt.ncols - 1) 'The values of the lines of the ASCII are split by the column separator and stored in the matrix For i = ASCIIStartline To Lines.Length - 1 Dim aux As String Dim cells() As String aux = Lines(i) cells = Split(aux, ASCIIColumnSeparator) For j = 0 To ASCIIDataSt.ncols - 1 DataArray(i - ASCIIStartline, j) = cells(j) Next Next 'In the following loop the string values are converted to doubles For i = 0 To Lines.Length ASCIIStartline 223

229 For j = 0 To ASCIIDataSt.ncols - 1 NumberArray(i, j) = CSng(DataArray(i, j)) Next Next Return NumberArray End Function Private Function ExtractCompleteNumber(ByVal inputstring As String) '********* This function extracts the numerical values (number of columns) 'from the first line of the ASCII file *************** ' Convert it to an array of characters Dim mychars() As Char = inputstring.tochararray() loop Dim AuxString As String = "" 'auxiliary string to be used in the Dim ExtractedNumber As Single 'outputnumber ' Loop through the array testing if each is a digit or if it is a minus sign For Each ch As Char In mychars If Char.IsDigit(ch) Or InStr(1, ch, "-") Or InStr(1, ch, ".") Then AuxString = AuxString + ch End If Next Try ExtractedNumber = CDbl(AuxString) Catch ex As Exception 'An error message would appear if the Extracted Number could not be converted to integer MsgBox("The format of the ASCII file is not Valid", MessageBoxIcon.Exclamation) End Try Return ExtractedNumber End Function Friend Function LoadTextFile(ByVal File As String, ByVal ASCIIStartline As Integer, ByVal ColumnSeparator As String) As OutputStructure 'This subroutines is used to load soil and vegetation parameters from CSV textfile Dim Lines() As String Lines = IO.File.ReadAllLines(File) Dim ColumnCount(Lines.Length - 1) As Integer Dim count As Integer 'column separator counter 224

230 For i = 0 To Lines.Length - 1 count = 0 For Each ch As Char In Lines(i) If InStr(1, ch, ";") Then count = count + 1 End If Next ColumnCount(i) = count + 1 Next Output.nColumns = ColumnCount.Max Output.nRows = Lines.Length - ASCIIStartline Dim DataArray(Lines.Length - ASCIIStartline - 1, Output.nColumns - 1) As String ReDim Output.arrayOut(Lines.Length - ASCIIStartline - 1, Output.nColumns - 1) 'The values of the lines of the ASCII are split by the column separator and stored in the matrix For i = ASCIIStartline To Lines.Length - 1 Dim aux As String Dim cells() As String aux = Lines(i) cells = Split(aux, ColumnSeparator) For j = 0 To Output.nColumns - 1 Output.arrayOut(i - ASCIIStartline, j) = cells(j) Next Next Return Output End Function Friend Function ASCIIMapCharacteristics(ByVal file As String, ByVal GridStartLine As Integer) As ASCIIData Dim Lines(GridStartLine - 1) As String IO.File.OpenRead(file) Dim objreader As New System.IO.StreamReader(file) For i = 0 To GridStartLine - 1 Lines(i) = objreader.readline Next ASCIIDataSt.ncols = ExtractCompleteNumber(Lines(0)) ASCIIDataSt.nrows = ExtractCompleteNumber(Lines(1)) ASCIIDataSt.NODATA_value = ExtractCompleteNumber(Lines(5)) Return ASCIIDataSt End Function End Module 225

231 4. Modulo de Subrutinas de Hidrometeorología: modhydromet.vb Module ModHydromet Structure HydrometStructure Friend DailyDate(,) As Date Friend Years() As Integer Friend PP(,) As Single Friend ETP(,) As Single Friend Qdaily(,) As Single End Structure Public FlowFilePaths() As String Public Qcurve() As Single Public Hcurve(,,) As Single Public WteDay() As Single Public Hydromet As New HydrometStructure Public NumberArray(,) As Single 'output map matrix Friend OutputASCII(,) As Single Friend Sub MainHydromet() Call WteMaps(FrmMain.txtWTEMaps.Text) MultipleASCIItoArray(FlowFilePaths) OutputASCII = ASCIIDataSt.NumberArray Call LoadHydrometeorological(FrmMain.txtHydrometData.Text) End Sub Friend Function MultipleASCIItoArray(ByVal FlowFilePaths() As String) '**** This subroutine stores multiple ASCCII grids like the Wtegrids from Hcruvethat vary through River Flows** For m = 0 To FlowFilePaths.Length - 1 Dim Lines() As String Lines = IO.File.ReadAllLines(System.Environment.CurrentDirectory + FlowFilePaths(m)) ASCII file '******Extracts the general info from the first rows of the ASCIIDataSt.ncols = ExtractNumber(Lines(0)) ASCIIDataSt.nrows = ExtractNumber(Lines(1)) ASCIIDataSt.xllcorner = ExtractNumber(Lines(2)) ASCIIDataSt.yllcorner = ExtractNumber(Lines(3)) ASCIIDataSt.cellsize = ExtractNumber(Lines(4)) ASCIIDataSt.NODATA_value = ExtractNumber(Lines(5)) Dim ASCIIStartline As Integer = 6 '****Line where the numerical values of the grid start Dim ASCIIColumnSeparator As String = " " '*****ASCII file column separator Dim DataArray(Lines.Length ASCIIStartline, ASCIIDataSt.ncols - 1) As String 'In the following array the string values are stored as doubles 226

232 ReDim NumberArray(Lines.Length ASCIIStartline, ASCIIDataSt.ncols - 1) ReDim Preserve Hcurve(FlowFilePaths.Length - 1, Lines.Length - ASCIIStartline - 1, ASCIIDataSt.ncols - 1) 'The values of the lines of the ASCII are split by the column separator and stored in the matrix For i = ASCIIStartline To Lines.Length - 1 Dim aux As String Dim cells() As String aux = Lines(i) cells = Split(aux, ASCIIColumnSeparator) For j = 0 To ASCIIDataSt.ncols - 1 DataArray(i - ASCIIStartline, j) = cells(j) 'Hcurve(m, i, j) = DataArray(i, j) Next Next doubles 'In the following loop the string values are converted to For i = 0 To Lines.Length ASCIIStartline For j = 0 To ASCIIDataSt.ncols - 1 NumberArray(i, j) = CDbl(DataArray(i, j)) Hcurve(m, i, j) = NumberArray(i, j) Next Next Next Return Hcurve End Function Friend Function ExtractNumber(ByVal inputstring As String) '********* This function extracts the numerical values from the first line of the ASCII file *************** loop ' Convert it to an array of characters Dim mychars() As Char = inputstring.tochararray() Dim AuxString As String = "" 'auxiliary string to be used in the Dim ExtractedNumber As Single 'outputnumber ' Loop through the array testing if each is a digit or if it is a minus sign For Each ch As Char In mychars If Char.IsDigit(ch) Or InStr(1, ch, "-") Or InStr(1, ch, ".") Then 'change dot to comma if neccesary AuxString = AuxString + ch End If Next Try ExtractedNumber = CDbl(AuxString) Catch ex As Exception 'An error message would appear if the Extracted Number could not be converted to integer MsgBox("The format of the NoData Value from the ASCII file is not Valid", MessageBoxIcon.Exclamation) End Try 227

233 Return ExtractedNumber End Function Public Sub WteMaps(ByVal file As String) '********* This subroutine reads the paths of the files of the Wte Maps ******** 'A string is written for the file's path Dim FilePath As String = file 'A datatable is declared to retrieve the data from the CSV file Dim WteMapsTable As DataTable WteMapsTable = New DataTable 'The datacolumns are declared and named Dim FlowValues As DataColumn = New DataColumn("FlowValues") Dim FlowFiles As DataColumn = New DataColumn("FlowFiles") 'The datatypes of the datacolumns are defined FlowValues.DataType = System.Type.GetType("System.Single") FlowFiles.DataType = System.Type.GetType("System.String") 'The datacolumns are added to the datatable WteMapsTable.Columns.Add(FlowValues) WteMapsTable.Columns.Add(FlowFiles) 'The data from the CSV file is passed to the datatable and its datacolumns 'with the help of the string.split method to separate the columns Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(FilePath) = True Then Dim objreader As New System.IO.StreamReader(FilePath) Dim a As Integer = WteMapsTable.Columns.Count Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") WteMapsTable.Rows.Add(SplitLine) Loop Else MsgBox("Hydrometeorological File Does Not Exist") End If 'The datatable could be transfered easily to a datagridview 'Form1.DataGridView2.DataSource = WteMapsTable.DefaultView array 'The flow values intervals of each map are loaded to a vector ReDim Qcurve(WteMapsTable.Rows.Count - 1) For i = 0 To WteMapsTable.Rows.Count - 1 Qcurve(i) = WteMapsTable.Rows(i).Item("FlowValues") Next 'The flowfiles paths are loaded to a vector array 228

234 End Sub ReDim FlowFilePaths(WteMapsTable.Rows.Count - 1) For f = 0 To WteMapsTable.Rows.Count - 1 FlowFilePaths(f) = WteMapsTable.Rows(f).Item("FlowFiles") Next Friend Sub LoadHydrometeorological(ByVal Hydrometfile As String) 'This subroutine is used to read the Hydromet Data(PP,ETP,Q) and divide them by years 'A string is written for the file's relative path ' Hydrometfile = "\Data\Clima.csv" Dim FilePath As String = Hydrometfile 'A datatable is declared to retrieve the data from the CSV file Dim table1 As DataTable table1 = New DataTable("Hydromet") 'The datacolumns are declared and named Dim DateMeteo As DataColumn = New DataColumn("DateMeteo") Dim PPcol As DataColumn = New DataColumn("PPcol") Dim ETPcol As DataColumn = New DataColumn("ETPcol") Dim Qdailycol As DataColumn = New DataColumn("Qdailycol") 'The datatypes of the datacolumns are defined DateMeteo.DataType = System.Type.GetType("System.DateTime") PPcol.DataType = System.Type.GetType("System.Single") ETPcol.DataType = System.Type.GetType("System.Single") Qdailycol.DataType = System.Type.GetType("System.Single") 'The datacolumns are added to the datatable table1.columns.add(datemeteo) table1.columns.add(ppcol) table1.columns.add(etpcol) table1.columns.add(qdailycol) 'The data from the CSV file is passed to the datatable and its datacolumns 'with the help of the string.split method to separate the columns Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(FilePath) = True Then Dim objreader As New System.IO.StreamReader(FilePath) Dim a As Integer = table1.columns.count Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, ";") table1.rows.add(splitline) Loop Else MsgBox("Hydrometeorological File Does Not Exist") End If 'The datatable could be transfered easily to a datagridview 'Form1.DataGridView1.DataSource = table1.defaultview 229

235 'The following loop calculates the number of years of hydrometeorological data Dim b As Integer = table1.rows.count 'this variable count the total number of days from all the years Dim n As Integer = 0 'counts the total number of years For i = 0 To b - 1 Dim a As Integer 'represents every NEW year of every 31Dic- 1Jan daily interval Dim c As Integer 'represents every OLD year of every 31Dic- 1Jan daily interval a = (Year(table1.Rows(i).Item(0))) If i > 0 Then c = (Year(table1.Rows(i - 1).Item(0))) If c <> a Then n = n + 1 End If End If Next i 'The fields/columns of the Hydrometeorological Structure are redimensioned 'by number of years and by numbers of days from each year ReDim Hydromet.DailyDate(n, b / (n + 1)) ReDim Hydromet.PP(n, b / (n + 1)) ReDim Hydromet.ETP(n, b / (n + 1)) ReDim Hydromet.Qdaily(n, b / (n + 1)) 'The data from the datatable is separated by year in the following loop Dim y As Integer = 0 'counts number of years of data Dim d As Integer = 0 'counts number of days for each year of data 'The years are recorded in the following vector ReDim Hydromet.Years(n - 1) 'The following double-loop separates the hydrometeorological data by years For i = 0 To b - 1 Dim a As Integer 'represents every OLD year of every 31Dic- 1Jan daily interval Dim c As Integer 'represents every NEW year of every 31Dic- 1Jan daily interval elements ' The data from the datatable is passed to the structure Hydromet.DailyDate(y, d) = table1.rows(i).item("datemeteo") Hydromet.PP(y, d) = table1.rows(i).item("ppcol") Hydromet.ETP(y, d) = table1.rows(i).item("etpcol") Hydromet.Qdaily(y, d) = table1.rows(i).item("qdailycol") ' The daily interval for each year is incremented by 1 d = d + 1 'This control strucutre DETECTS the year changes 230

236 of the data 'it also prevents errors in the last 2 days of the last year If i < b - 1 Then a = (Year(table1.Rows(i).Item(0))) c = (Year(table1.Rows(i + 1).Item(0))) Else a = (Year(table1.Rows(i).Item(0))) c = a End If 'This control structure ACTIVATES when the year changes take place 'It increments the array column j=j+1 because j represents the year 'If the year isn t a leap year it leaves a blank value at the end which is eliminated in the general module's methods Dim j As Integer If c <> a Then 'For j = 0 To n - 1 If y = 0 Then 'in the first year we put the initial value Hydromet.Years(j) = a j = j + 1 Else 'for the following years Hydromet.Years(j) = c j = j + 1 End If y = y + 1 d = 0 End If Next End Sub Friend Sub WteValues(ByVal InputFile As String, ByVal StartRow As Integer) 'As OutputStructure 'A string is written for the file's relative path ' file = "\Data\WteMaps.csv" Dim FilePath As String = System.Environment.CurrentDirectory + InputFile 'A datatable is declared to retrieve the data from the CSV file Dim WteMapsTable As DataTable WteMapsTable = New DataTable 'The data from the CSV file is passed to the datatable and its datacolumns 'with the help of the string.split method to separate the columns Dim TextLine As String = "" Dim SplitLine() As String If System.IO.File.Exists(FilePath) = True Then Dim objreader As New System.IO.StreamReader(FilePath) Dim a As Integer = WteMapsTable.Columns.Count Do While objreader.peek() <> -1 TextLine = objreader.readline() SplitLine = Split(TextLine, " ") ' Dim FlowValues As DataColumn = New DataColumn 231

237 End Sub For i = 0 To SplitLine.Length WteMapsTable.Columns.Add() Next WteMapsTable.Rows.Add(SplitLine) Loop Else MsgBox("Hydrometeorological File Does Not Exist") End If 'The datatable could be transfered easily to a datagridview ' Form1.DataGridView2.DataSource = WteMapsTable.DefaultView Friend Function WteCalculations(ByVal y As Integer, ByVal i As Integer, ByVal j As Integer, ByVal d As Integer) ReDim WteDay(d) For d = 0 To Hydromet.Qdaily.GetLength(1) - 1 '(y, d)rowcount_daily - 2 For q = 0 To Qcurve.Length - 1 'rowcount_curve - 2 If Hcurve(q, i, j) = ASCIIDataSt.NODATA_value Then 'we check if cell has a notadatavalue WteDay(d) = ASCIIDataSt.NODATA_value Else If Math.Abs(Hydromet.Qdaily(y, d) - Qcurve(q)) < Then WteDay(d) = Hcurve(q, i, j) GoTo break Else If Hydromet.Qdaily(y, d) < Qcurve(q) Then WteDay(d) = Hcurve(q - 1, i, j) + (Hydromet.Qdaily(y, d) - Qcurve(q - 1)) / (Qcurve(q) - Qcurve(q - 1)) * (Hcurve(q, i, j) - Hcurve(q - 1, i, j)) GoTo break End If End If End If Next q break: Next d Return WteDay End Function End Module 232

238 5. Módulo General: modmain.vb Structure ASCIIData Friend ncols As Integer Friend nrows As Integer Friend xllcorner As Single Friend yllcorner As Single Friend cellsize As Single Friend NODATA_value As Single Friend NumberArray(,) As Single End Structure Module Module1 'Input files and Maps Friend SoilMap As String 'Soil ASCII Map file path Friend DEMMap As String 'DEM ASCII Map file path Friend SoilParam As String 'Soil Parameters CSV file path Friend VegParam As String 'Vegetation Parameters qcsv file path Friend HydrometData As String 'Hydrometeorology data file path Friend WTEMaps As String 'WTE Map file path Friend ASCIIDataSt As New ASCIIData Public outascii As New ASCIIData Public VegetationParameterArray(,) As String Public VegetationMapArray(,) As Single 'ver cambio anual Friend ETindexYearAvg(,,) As Single Friend ndays As Integer 'Number of days in each year Friend nrows As Integer 'Number of rows in the grid of cells Friend ncolumns As Integer 'Number of columns in the grid of cells Friend nyears As Integer 'Number of years of simulation Friend Sub Simulate() Dim VegMap As String //Depend on the year 'Vegetation ASCIIMap file path 'The paths of the MAP inputfiles is read from the textboxes SoilMap = FrmMain.txtSoilMap.Text DEMMap = FrmMain.txtDEMMap.Text SoilParam = FrmMain.txtSoilParam.Text VegParam = FrmMain.txtVegParam.Text HydrometData = FrmMain.txtHydrometData.Text WTEMaps = FrmMain.txtWTEMaps.Text nyears = Hydromet.Qdaily.GetLength(0) ndays = Hydromet.Qdaily.GetLength(1) Dim SoilnColumns As Integer = ASCIIMapCharacteristics(SoilMap, 6).ncols Dim ElevationnColumns As Integer = ASCIIMapCharacteristics(DEMMap, 6).ncols 'The following block calculates the maximum number of ROWS of each map grid using ASCIIMapCharacteristics function 233

239 Dim SoilnRows As Integer = ASCIIMapCharacteristics(SoilMap, 6).nrows Dim ElevationnRows As Integer = ASCIIMapCharacteristics(DEMMap, 6).nrows 'Matrix where the input maps data is stored Dim SoilMapArray(,) As Single Dim ElevationMapArray(,) As Single SoilMapArray = LoadSingleAscii(SoilMap, 6) 'poner direccion Ascii mapa suelos ElevationMapArray = LoadSingleAscii(DEMMap, 6) 'poner direccion Ascii mapa elevaciones Dim y As Integer = 1 frmsimulationinformation.txtsimulation.appendtext(" ") : FrmMain.Cr() frmsimulationinformation.txtsimulation.appendtext("simulating YEAR " + Str(y + 1) + " out of " + Str(ModHydromet.Hydromet.Qdaily.GetLength(0) - 1)) : FrmMain.Cr() 'WE LOAD THE DATA FROM THE INITIAL VEGETATION MAP OR FROM THE DYNAMIC VEGETATION MAP VegMap = FrmMain.txtInitialVegMap.Text 'The VegetationTypeArray is loaded from the vegetation map file 'We also define the starting line VegetationMapArray = LoadSingleAscii(VegMap, 6) 'Columns are counted from the vegetation map for each year Dim VegetationnColumns As Integer = ASCIIMapCharacteristics(VegMap, 6).ncols 'Rows are counted from the vegetation map Dim VegetationnRows As Integer = ASCIIMapCharacteristics(VegMap, 6).nrows 'The coincident number of ROWS of the three maps is calculated (Soil, DEM, Vegetation) 'Remember vegetation map can vary for each year Dim ncolumnsprov As Integer 'Auxiliary variable used in the math.max function ncolumnsprov = Math.Max(SoilnColumns, VegetationnColumns) ncolumns = Math.Max(nColumnsProv, ElevationnColumns) 'The coincident number of COLUMNS of the three maps is calculated (Soil, DEM, Vegetation) 'Remember vegetation map can vary for each year Dim nrowsprov As Integer 'Auxiliary variable used in the math.max function nrowsprov = Math.Max(SoilnRows, VegetationnRows) nrows = Math.Max(nRowsProv, ElevationnRows) 'We call the general module Call GeneralSub(y, VegMap, SoilMapArray, ElevationMapArray) 'We print the yearly map of ETindex Call frmvegdynamics.etindexmap(y) 234

240 'We call the vegetation succession module frmvegdynamics.vegdynamicscalc(y) End Sub Private Sub GeneralSub(ByVal y As Integer, ByVal VegMap As String, ByVal SoilMapArray(,) As Single, ByVal ElevationMapArray(,) As Single) Dim SumETRtot As Single Dim sumetpd As Single Dim ETindex As Single 'Sum of year ETRtot 'Sum of year ETP 'ETindex for a given year 'We redimension the variables whose dimensions depend on nrows and ncolumns ReDim Preserve ETindexYearAvg(nYears, nrows - 1, ncolumns - 1) 'Leap years are taken into account in this conditional structure to determin ndays If Date.IsLeapYear(Hydromet.Years(y)) = True Then ndays = Hydromet.Qdaily.GetLength(1) Else ndays = Hydromet.Qdaily.GetLength(1) - 1 End If 'We use PPy and ETPy auxiliary vectors to prevent errors during leap years Dim PPy() As Single 'Daily Precipitation for a given year [mm] Dim ETPy() As Single 'Daily Evapotranspiration for a given year [mm] ReDim Preserve PPy(nDays) 'Daily Precipitation for a given year [mm] ReDim Preserve ETPy(nDays) 'Daily Evapotranspiration for a given year [mm] For d = 0 To Hydromet.DailyDate.GetLength(1) - 1 PPy(d) = Hydromet.PP(y, d) ETPy(d) = Hydromet.ETP(y, d) Next 'The paths of the PARAMETERS inputfiles are also read from the textboxes SoilParam = FrmMain.txtSoilParam.Text VegParam = FrmMain.txtVegParam.Text Dim SoilParameterArray(,) As String Dim nrowssoilparameters As Integer SoilParameterArray = LoadTextFile(SoilParam, 0, ";").arrayout nrowssoilparameters = LoadTextFile(SoilParam, 0, ";").nrows 'Dim VegetationParameterArray(,) As String Dim nrowsvegetationparameters As Integer VegetationParameterArray = LoadTextFile(VegParam, 0, ";").arrayout nrowsvegetationparameters = LoadTextFile(VegParam, 0, ";").nrows 235

241 For i = 0 To ASCIIDataSt.nrows - 1 'nptos '- 1 For j = 0 To ASCIIDataSt.ncols - 1 If SoilMapArray(i, j) = ASCIIDataSt.NODATA_value Or VegetationMapArray(i, j) = ASCIIDataSt.NODATA_value Or ElevationMapArray(i, j) = ASCIIDataSt.NODATA_value Then 'If at least one of the maps has a NODATA_value then the calculations are cancelled for that cell and the output ETindex has a NODATA_value also ETindexYearAvg(y, i, j) = ASCIIDataSt.NODATA_value Else 'Parameters from the soil type Dim Pst As Single 'Φ Porosity [ ] Dim Pb As Single 'Bubbling capillary pressure (mm) Dim Ip As Single 'λ=pore -size index Dim Mfc As Single 'Field Capacity Moisture [ ] Dim Ks As Single 'Fully Saturated conductivity (mm/hr) Dim Zmin As Single 'Minimum Capillary Depth to be Considered [m] 'VEGETATION DATA(form2) Dim Zr As Single 'Root Depth Zr max [m] Dim Ze As Single 'Effective Root Depth Ze [m] Dim Zsat As Single 'Extinction Saturation Psat [m] Dim Ri As Single 'Transpiration Factor from Unsaturated Zone [ ] Dim Rj As Single 'Transpiration Factor from Saturated Zone [ ] Dim Crt As Single 'Maximum Soil-Root Water Conductance CRT [mmmpa-1h-1] Dim Pwp As Single 'Moisture at Wilting Point [ ] Dim Pcrit As Single 'Critical Moisture [ ] ' Dim Veg As String 'River Vegetation Type [1 to 5] Dim Cov As Single 'Plant Cover Cv_yearly Point [ ] Point [ ] Elevation (m) Elevation (m) Depth (mm) (mm) Pressure [Kpa] 'GENERAL CALCULATIONS(form4) Dim Mcrit As Single 'θcrit Moisture at Critical Dim Mwp As Single Dim CZr As Single Dim CZe As Single Dim CPsat As Single Dim Hfc As Single Dim Hwp As Single Dim Hcrit As Single Dim Pm50 As Single 'θwp Moisture at Wilting 'Root Depth Elevation (m) 'Effective Root Depth 'Extinction Saturation 'Field Capacity Depth (mm) 'Permanent Wilting Point 'Critical Moisture Depth 'Medium Saturation Moisture 236

242 [Kpa] in CWU [m] Dim Pfc As Single Dim CZmin As Single 'Field Capacity Pressure 'Elevation to be considered Dim Es As Single cell (m above sea level) 'Elevation of the terrain Dim Wte() As Single Elevation [m] (above sea level) 'Daily Water Table Depth (mm) Relation [ ] Dim Hsoil() As Single Dim Psoil() As Single 'Daily Soil Moisture 'Daily Soil Moisture Dim Pmat() As Single Dim Rwu() As Single [mm] Dim Kh() As Single [mm/hr] Dim Cwu() As Single [mm] Dim Exc() As Single Dim Win() As Single Dim Hini() As Single Dim Hrel() As Single [ ] Dim ETRnul() As Single (simplificacion de calculos) Dim ETRuns() As Single of the Unsaturated Zone [mm] Dim ETRsat() As Single of the Saturated Zone [mm] Dim ETRtot() As Single Evapotranspiration [mm] Dim Bal() As Single 'Matrix Potential [mm] 'Root Water Uptake Ahr 'Hydraulic Conductivity 'Capilarity Water Uptake 'Excess of Water [mm] 'Water Income [mm] 'Initial Moisture [mm] 'Daily Relative Moisture 'Casos ETR=0 'Real Evapotranspiration 'Real Evapotranspiration 'Real Total 'Water Balance [mm] Depth (mm) Relation (cm3/cm3) [mm] ReDim Preserve Hsoil(nDays) ReDim Preserve Psoil(nDays) ReDim Preserve Pmat(nDays) 'Daily Soil Moisture 'Daily Soil Moisture 'Matrix Potential ReDim Preserve Rwu(nDays) Ahr [mm] ReDim Preserve Kh(nDays) Conductivity [mm/hr] ReDim Preserve Cwu(nDays) Uptake [mm] ReDim Preserve Exc(nDays) [mm] 'Root Water Uptake 'Hydraulic 'Capilarity Water 'Excess of Water [mm] Moisture (cm3/cm3) ReDim Preserve Win(nDays) ReDim Preserve Hini(nDays) ReDim Preserve Hrel(nDays) 'Water Income [mm] 'Initial Moisture 'Daily Relative 237

243 ReDim Preserve ETRnul(nDays) (simplificacion de calculos) ReDim Preserve ETRuns(nDays) Evapotranspiration of the Unsaturated Zone [mm] ReDim Preserve ETRsat(nDays) Evapotranspiration of the Saturated Zone [mm] ReDim Preserve ETRtot(nDays) Evapotranspiration [mm] ReDim Preserve Bal(nDays) 'Casos ETR=0 'Real 'Real 'Real Total 'Water Balance [mm] cell index break1: of the cell row index break2: Dim r As Integer 'Soil Type Index Dim u As Integer 'Vegetation Type Index Dim n As String 'Soil OR Vegetation type index of the 'Determining soil type index n = SoilMapArray(i, j) 'soil type index of the cell For b = 0 To nrowssoilparameters - 1 'b is the row If n = SoilParameterArray(b, 0) Then r = b GoTo break1 End If Next 'Determining vegetation type index n = VegetationMapArray(i, j) 'vegetation type index 'Determining vegetation type index For b = 0 To nrowsvegetationparameters - 1 'b is the If n = VegetationParameterArray(b, 0) Then u = b GoTo break2 End If Next r = SoilMapArray(i, j) 'Index for type of soil of the cell u = VegetationMapArray(i, j) 'Index for type of vegetacion of the cell Es = CSng(ElevationMapArray(i, j)) 'the Elevation is loaded directly from the DEM Map and array Pst = CSng(SoilParameterArray(r - 1, 1)) Ip = CSng(SoilParameterArray(r - 1, 2)) Pb = CSng(SoilParameterArray(r - 1, 3)) Ks = CSng(SoilParameterArray(r - 1, 4)) Mfc = CSng(SoilParameterArray(r - 1, 5)) Zmin = CSng(SoilParameterArray(r - 1, 6)) Zr = CSng(VegetationParameterArray(u - 1, 1)) Ze = CSng(VegetationParameterArray(u - 1, 2)) Zsat = CSng(VegetationParameterArray(u - 1, 3)) Ri = CSng(VegetationParameterArray(u - 1, 4)) Rj = CSng(VegetationParameterArray(u - 1, 5)) 238

244 Cov = CSng(VegetationParameterArray(u - 1, 6)) Crt = CSng(VegetationParameterArray(u - 1, 7)) Pwp = CSng(VegetationParameterArray(u - 1, 8)) Pcrit = CSng(VegetationParameterArray(u - 1, 9)) '****************************************************** 'We put the following varibles=0 so the sum is done correctly ///Very Important SumETRtot = 0 sumetpd = 0 ETindex = 0 '******************************************************* If Pcrit = 0 Then Mcrit = 0 Else Mcrit = Pst * (Pb / Pcrit) ^ Ip End If Mwp = Pst * (Pb / Pwp) ^ Ip CZr = Es - Zr CZe = Es - Ze CPsat = Es - Zsat Hfc = Mfc * Ze * 1000 Hwp = Mwp * Ze * 1000 Hcrit = Mcrit * Ze * 1000 Pm50 = Pb / (0.5 * Pst) ^ (1 / Ip) Pfc = Pb / (Mfc / Pst) ^ (1 / Ip) CZmin = Es - Zmin 'The WteCalculations function is called which has as input the: year, row, column and Qdaily) Wte = WteCalculations(y, i, j, ndays) For d = 0 To ndays - 1 '- 2 If d = 0 Then Hsoil(0) = Hcrit End If Psoil(d) = Hsoil(d) / (1000 * Ze) Ip) If Wte(d) >= Es Then Pmat(d) = Pb ElseIf Wte(d) < Es Then If Psoil(d) = 0 Then Pmat(d) = Pwp Else Pmat(d) = Pb / (Psoil(d) / Pst) ^ (1 / End If End If Kh(d) = Ks * (Pb / Pmat(d)) ^ (3 * Ip + 2) 239

245 'Root water uptake calculations If d = 0 Then 'for the first day If Wte(0) >= CZe Or Wte(0) < CZr Then Rwu(d) = 0 ElseIf Wte(0) < CZe And Wte(0) > CZr Then Rwu(d) = Math.Max(0, (-Crt * 10 / 1000) * (Pfc - Pmat(d)) * (1 / (1 + ((Pmat(d) / Pm50)) ^ 3.22)) * Rj) End If Else 'for the rest of the days If Wte(d - 1) >= CZe Or Wte(d - 1) < CZr Then Rwu(d) = 0 ElseIf Wte(d - 1) < CZe And Wte(d - 1) > CZr Then Rwu(d) = Math.Max(0, (-Crt * 10 / 1000) * (Pfc - Pmat(d)) * (1 / (1 + ((Pmat(d) / Pm50)) ^ 3.22)) * Rj) End If End If ''Capillary water uptake calculations If Wte(d) <= CZmin Then Cwu(d) = 0 ElseIf Wte(d) > CZmin And Wte(d) >= CZe Then If d = 0 Then 'for the first day Cwu(d) = Hfc - Hcrit - Rwu(d) Else 'for the rest of the days Cwu(d) = Hfc - Hsoil(d - 1) - Rwu(d) End If ElseIf Wte(d) > CZmin And Wte(d) < CZe Then If d = 0 Then 'for the first day Cwu(d) = Math.Max(0, Math.Min(Hfc - Hcrit - Rwu(d), (( * Pmat(d) / (Wte(d) - CZe)) - 1) * Kh(d) * 24)) Else 'for the rest of the days Cwu(d) = Math.Max(0, Math.Min(Hfc - Hsoil(d - 1) - Rwu(d), (( * Pmat(d) / (Wte(d) - CZe)) - 1) * Kh(d) * 24)) End If End If - Hfc + Hcrit) - Hfc + Hsoil(d - 1)) 'We calculate the excces of water of the tank If d = 0 Then 'for the first day Exc(d) = Math.Max(0, PPy(d) + Cwu(d) + Rwu(d) Else 'for the rest of the days Exc(d) = Math.Max(0, PPy(d) + Cwu(d) + Rwu(d) End If Win(d) = PPy(d) + Cwu(d) + Rwu(d) - Exc(d) If d = 0 Then 'for the first day Hini(d) = Win(d) + Hcrit Else 'for the rest of the days Hini(d) = Win(d) + Hsoil(d - 1) End If If Hini(d) < Hwp Or Hcrit < Hwp Then Hrel(d) = 0 240

246 (Hcrit - Hwp)) Else Hrel(d) = Math.Min(1, (Hini(d) - Hwp) / End If If Wte(d) >= CPsat Then ETRuns(d) = 0 Else If Wte(d) >= CZe Then ETRuns(d) = Ri * Cov * ETPy(d) * (1 - ((Wte(d) - CZe) / (CPsat - CZe))) Else ETRuns(d) = Math.Min(Hini(d) - Hwp, Ri * Hrel(d) * Cov * ETPy(d)) End If End If 'Codigo ETsat despues de mayo de 2010 If Wte(d) >= CPsat Or Wte(d) < CZr Then ETRsat(d) = 0 ElseIf Wte(d) < CPsat And Wte(d) >= CZe Then ETRsat(d) = Math.Min(Cov * ETPy(d) - ETRuns(d), Cov * ETPy(d) * Rj * (1 - (Wte(d) - CZe) / (CPsat - CZe))) ElseIf Wte(d) < CZe And Wte(d) >= CZr Then ETRsat(d) = Math.Min(Cov * ETPy(d) - ETRuns(d), Cov * ETPy(d) * Rj * (Wte(d) - CZr) / (CZe - CZr)) End If If d <> 0 Then Hsoil(d) = Math.Max(Hini(d) - ETRuns(d), Hwp) End If ETRtot(d) = ETRsat(d) + ETRuns(d) ETRuns(d)) ETRuns(d)) If d = 0 Then 'for the first day Bal(d) = Hsoil(d) - (Hcrit + Win(d) - Else 'for the rest of the days Bal(d) = Hsoil(d) - (Hsoil(d - 1) + Win(d) - End If 'The sums of ETRtot and ETP are calculated If d <> 0 Then SumETRtot = SumETRtot + ETRtot(d) sumetpd = sumetpd + ETPy(d) End If Next d Next j Next i End If ETindex = SumETRtot / (sumetpd * Cov) ETindexYearAvg(y, i, j) = ETindex 241

247 End Sub Friend Function CommaToPointSeparator(ByVal inputstring As String) inputstring.replace(",", ".") Return inputstring End Function End Module 242

248 ANEXO IX: CÓDIGO FUENTE PROGRAMA PARA EL CALCULO DEL COEFICIENTE KAPPA DE COHEN ENTRE LOS MAPAS DE VEGETACIÓN OBSERVADA Y VEGETACIÓN SIMULADA 243

249 En este anexo se presenta el código fuente del programa que calcula el coeficiente Kappa de Cohen entre los mapas de vegetación observada y vegetación simulada. Este programa tiene 2 archivos de formulario de windows, un archivo de modulo y un archivo de clase.los archivos del código de este programa son los siguientes: 1. Datos de Entrada Generales: frminputs.vb 2. Resultados de Salida: frmouputs.vb 3. Módulo General: GeneralModule.vb 4. Clase de Mapas: Map Class El código fuente de este programa se muestra a continuación distribuido entre sus distintos archivos y formularios: 244

250 1. Datos de Entrada Generales: frminputs.vb Public Class frminputs Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim DefaultFilepath As String = System.Environment.CurrentDirectory + "\Data\Default\DefaultInputs.asc" ConfigDirectory = System.Environment.CurrentDirectory Dim Lines() As String Lines = IO.File.ReadAllLines(DefaultFilepath) txtnumvegtypes.text = Lines(0) txtobsvegpath.text = System.Environment.CurrentDirectory + Lines(1) txtsimvegpath.text = System.Environment.CurrentDirectory + Lines(2) txtouputfilepath.text = System.Environment.CurrentDirectory + Lines(3) txtoutputaccuracymap.text = System.Environment.CurrentDirectory + Lines(4) 245

251 End Sub DefaultLoadMap(txtObsVegPath.Text, ObsVegMap) DefaultLoadMap(txtSimVegPath.Text, SimVegMap) Private Sub btcalculate_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btcalculate.click If frmoutputs.dtgmatrix.rowcount <> 0 Then MsgBox("Please Restart the Program to Carry out Further Calculations") Exit Sub End If frmoutputs.show() End Sub Private Sub rdzoomin_checkedchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles rdzoomin.checkedchanged ObsVegMap.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn SimVegMap.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn End Sub Private Sub rdpan_checkedchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles rdpan.checkedchanged ObsVegMap.CursorMode = MapWinGIS.tkCursorMode.cmPan SimVegMap.CursorMode = MapWinGIS.tkCursorMode.cmPan End Sub Private Sub rdzoomout_checkedchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles rdzoomout.checkedchanged ObsVegMap.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut SimVegMap.CursorMode = MapWinGIS.tkCursorMode.cmZoomOut End Sub Private Sub dtzoommaxextents_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles dtobszoommaxextents.click ObsVegMap.ZoomToMaxExtents() End Sub Private Sub btadddata_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btobsmapadd.click txtobsvegpath.text = LoadMap(ObsVegMap) End Sub Private Sub btsimmapadd_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btsimmapadd.click txtsimvegpath.text = LoadMap(SimVegMap) End Sub 246

252 Public Sub DefaultLoadMap(ByVal mappath As String, ByVal map As AxMapWinGIS.AxMap) 'Create instances of the possible data objects, 'to retrieve the dialog filters of supported formats. Dim sf As New MapWinGIS.Shapefile Dim grd As New MapWinGIS.Grid Dim img As New MapWinGIS.Image 'We want users to be able to open any file type. 'Merge the dialog filters by placing a pipe character 'in between each: 'First, determine what kind it was: Dim extension As String = _ IO.Path.GetExtension(mapPath).ToLower() If sf.cdlgfilter.tolower().contains(extension) Then 'It's a shapefile sf.open(mappath) map.addlayer(sf, True) 'Zoom to all visible layers map.zoomtomaxextents() 'Return dlg.filename 'Done ElseIf grd.cdlgfilter.tolower().contains(extension) Then 'NOTE: a.tif can be a GeoTIFF (a grid) 'or an image. Check this, if the file 'is a tif: If mappath.tolower().endswith("tif") Then If Not map.istiffgrid(mappath) Then 'It's an image, not a grid. 'Open it as an image. img.open(mappath) map.addlayer(img, True) 'Zoom to all visible layers map.zoomtomaxextents() ' Return dlg.filename 'Done End If End If 'Open the grid: grd.open(mappath) 'Define a coloring scheme to color this grid: Dim sch As New MapWinGIS.GridColorScheme 'Use a predefined coloring scheme "Fall Leaves" sch.usepredefined(grd.minimum, grd.maximum, _ MapWinGIS.PredefinedColorScheme.FallLeaves) 'Convert it to an image that can be displayed: Dim u As New MapWinGIS.Utils Dim gridimage As MapWinGIS.Image gridimage = u.gridtoimage(grd, sch) 'Add the generated image to the map: map.addlayer(gridimage, True) 'Zoom to all visible layers map.zoomtomaxextents() ' Return dlg.filename 'Done ElseIf img.cdlgfilter.tolower().contains(extension) Then 'It's a plain image 247

253 End Sub img.open(mappath) map.addlayer(img, True) 'Zoom to all visible layers map.zoomtomaxextents() 'Return dlg.filename 'Done End If Public Function LoadMap(ByVal map As AxMapWinGIS.AxMap) 'Create instances of the possible data objects, 'to retrieve the dialog filters of supported formats. Dim sf As New MapWinGIS.Shapefile Dim grd As New MapWinGIS.Grid Dim img As New MapWinGIS.Image 'We want users to be able to open any file type. 'Merge the dialog filters by placing a pipe character 'in between each: Dim dlg As New OpenFileDialog dlg.initialdirectory = ConfigDirectory + "\Data\INPUT\" dlg.filter = "All Files (*.*) *.* " & sf.cdlgfilter & _ " " & grd.cdlgfilter & " " & img.cdlgfilter If dlg.showdialog() = Windows.Forms.DialogResult.OK Then 'If the user didn't cancel the dialog, try to open the file. 'First, determine what kind it was: Dim extension As String = _ IO.Path.GetExtension(dlg.FileName).ToLower() If sf.cdlgfilter.tolower().contains(extension) Then 'It's a shapefile sf.open(dlg.filename) map.addlayer(sf, True) 'Zoom to all visible layers map.zoomtomaxextents() 'Return dlg.filename 'Done ElseIf grd.cdlgfilter.tolower().contains(extension) Then 'NOTE: a.tif can be a GeoTIFF (a grid) 'or an image. Check this, if the file 'is a tif: If dlg.filename.tolower().endswith("tif") Then If Not map.istiffgrid(dlg.filename) Then 'It's an image, not a grid. 'Open it as an image. img.open(dlg.filename) map.addlayer(img, True) 'Zoom to all visible layers map.zoomtomaxextents() ' Return dlg.filename 'Done End If End If 'Open the grid: grd.open(dlg.filename) 'Define a coloring scheme to color this grid: 248

254 Dim sch As New MapWinGIS.GridColorScheme 'Use a predefined coloring scheme "Fall Leaves" sch.usepredefined(grd.minimum, grd.maximum, _ MapWinGIS.PredefinedColorScheme.FallLeaves) 'Convert it to an image that can be displayed: Dim u As New MapWinGIS.Utils Dim gridimage As MapWinGIS.Image gridimage = u.gridtoimage(grd, sch) 'Add the generated image to the map: map.addlayer(gridimage, True) 'Zoom to all visible layers map.zoomtomaxextents() ' Return dlg.filename 'Done ElseIf img.cdlgfilter.tolower().contains(extension) Then 'It's a plain image img.open(dlg.filename) map.addlayer(img, True) 'Zoom to all visible layers map.zoomtomaxextents() 'Return dlg.filename 'Done End If End If Return dlg.filename End Function Private Sub dtsimzoommaxextents_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles dtsimzoommaxextents.click SimVegMap.ZoomToMaxExtents() End Sub Private Sub btcloseall_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btcloseall.click Call CloseAll() End Sub End Class 249

255 2. Resultados de Salida: frmouputs.vb Public Class frmoutputs Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call MainSub() Call CellsSums() Call ConfusionTableDraw() Call OutputTextboxes() AccuracyMapCalculate(ObsVegMap, SimVegMap, ASCIIDataSt.NODATA_value) End Sub If frminputs.chkoutputfile.checked = True Then Call OutputFile(frmInputs.txtOuputFilePath.Text) End If Private Sub OutputTextboxes() 250

Influencia del Régimen Hídrico en la. Ribera. Director: Prof. Félix Francés García

Influencia del Régimen Hídrico en la. Ribera. Director: Prof. Félix Francés García Influencia del Régimen Hídrico en la Zonificación de la Vegetación de Ribera Autor: Director: Prof. Félix Francés García Introducción Importancia de los Ecosistemas de Ribera: Albergan gran biodiversidad

Más detalles

3.2.3 La Ecohidrología Otros modelos enfocados en la dinámica de la vegetación ALGUNOS PARÁMETROS DE VEGETACIÓN

3.2.3 La Ecohidrología Otros modelos enfocados en la dinámica de la vegetación ALGUNOS PARÁMETROS DE VEGETACIÓN ÍNDICE GENERAL 1. INTRODUCCIÓN 1 1.1 ASPECTOS INTRODUCTORIOS PARA LA MODELACIÓN ECOHIDROLÓGICA DEL ECOSISTEMA DE RIBERA 1 1.2 OBJETIVOS 2 1.3 HIPÓTESIS Y METODOLOGÍA GENERAL 3 2. CONCEPTOS Y ESCALAS DE

Más detalles

SOBRE LA VEGETACIÓN RIPARIA EN UN ENTORNO SEMIÁRIDO

SOBRE LA VEGETACIÓN RIPARIA EN UN ENTORNO SEMIÁRIDO EFECTOS DE LA REGULACIÓN DE CAUDALES SOBRE LA VEGETACIÓN RIPARIA EN UN ENTORNO SEMIÁRIDO A. García-Arias, F. Francés Instituto de Ingeniería del Agua y Medio Ambiente Instituto de Ingeniería del Agua y

Más detalles

PRÁCTICA 2: HIDROGEOGRAFÍA BALANCE HÍDRICO

PRÁCTICA 2: HIDROGEOGRAFÍA BALANCE HÍDRICO PRÁCTICA 2: HIDROGEOGRAFÍA BALANCE HÍDRICO José Antonio Caparrós Santiago (jacaparros@us.es) BALANCE HÍDRICO FUNDAMENTOS TEÓRICOS INTRODUCCIÓN Climatología Hidrogeografía Balance Hídrico Biogeografía Edafogeografía

Más detalles

BALANCE HIDRICO. R. Botey Servicio de Aplicaciones Agrícolas e Hidrológicas

BALANCE HIDRICO. R. Botey Servicio de Aplicaciones Agrícolas e Hidrológicas BALANCE HIDRICO R. Botey 30/05/2013 Jornada: Servicios meteorológicos y climáticos para el sector agrario BALANCE HÍDRICO Objeto HUMEDAD DEL SUELO Muy relacionada con la dinámica de las aguas superficiales,

Más detalles

Hidrología. Ciencia que estudia las propiedades, distribución y circulación del agua

Hidrología. Ciencia que estudia las propiedades, distribución y circulación del agua Hidrología Ciencia que estudia las propiedades, distribución y circulación del agua Semana 6 - Procesos de Pérdida de Precipitación. - La Infiltración. Fenómenos que originan las pérdidas de precipitación:

Más detalles

FLUJO DE AGUA EN EL SUELO Y ZONA NO SATURADA

FLUJO DE AGUA EN EL SUELO Y ZONA NO SATURADA Lección 7. Flujo de agua en el suelo. Ley de Darcy. Conductividad hidráulica. Relación entre conductividad hidráulica y tensión. Ecuaciones que rigen la infiltración vertical. Ecuación de Richards. Capacidad

Más detalles

1.6. BALANCE DE AGUA EN EL SUELO. CÁLCULO DE LA RECARGA

1.6. BALANCE DE AGUA EN EL SUELO. CÁLCULO DE LA RECARGA Clase 1.6 Pág. 1 de 9 1.6. BALANCE DE AGUA EN EL SUELO. CÁLCULO DE LA RECARGA 1.6.1. Balance de agua en el suelo o balance hidrometeorológico El suelo recibe el agua de la lluvia que no se escurre superficialmente

Más detalles

Boletín Hidrológico Diario. Comportamiento de Los Ríos

Boletín Hidrológico Diario. Comportamiento de Los Ríos Boletín Hidrológico Diario Comportamiento de Los Ríos 31 de agosto de 2018 Boletín Hidrológico Diario El Boletín Hidrológico Diario muestra el seguimiento que se realiza del comportamiento hidrológico

Más detalles

A.1 Balance de humedad del suelo

A.1 Balance de humedad del suelo A. A EXOS A.1 Balance de humedad del suelo Se realizaron simulaciones de balances hidrológicos a escala diaria y decadal con base en los registros de la estación Tulenapa. Para realizar los balances hidrológicos

Más detalles

RELACIÓN SUELO -AGUA- PLANTA - CLIMA

RELACIÓN SUELO -AGUA- PLANTA - CLIMA Capítulo lid RELACIÓN SUELO -AGUA- PLANTA - CLIMA Del agua que es absorbida por la planta, una parte provee el hidrógeno necesario para la materia vegetal, pero la mayor cantidad se usa en la transpiración

Más detalles

4.- Ciclo hidrológico y procesos hidrológicos. Sistema cerrado: Ciclo Hidrológico Global

4.- Ciclo hidrológico y procesos hidrológicos. Sistema cerrado: Ciclo Hidrológico Global 4.- Ciclo hidrológico y procesos hidrológicos Sistema cerrado: Ciclo Hidrológico Global 1 Sistema abierto: Ciclo Hidrológico Local Precipitación Intercepción Vegetación Evapotranspiración Escorrentía cortical

Más detalles

Documento auxiliar 1 DESCRIPCIÓN DEL MODELO UTILIZADO

Documento auxiliar 1 DESCRIPCIÓN DEL MODELO UTILIZADO ANEJO 2 - INVENTARIO DE RECURSOS HÍDRICOS Documento auxiliar 1 DESCRIPCIÓN DEL MODELO UTILIZADO Versión 1.3 24/08/2011 ÍNDICE 1 INTRODUCCIÓN 1 2 BASES TEÓRICAS DEL MODELO DE SIMULACIÓN HIDROLÓGICA 1 3

Más detalles

LOS RÍOS COMO SISTEMAS DINÁMICOS. Marta González del Tánago

LOS RÍOS COMO SISTEMAS DINÁMICOS. Marta González del Tánago LOS RÍOS COMO SISTEMAS DINÁMICOS PRINCIPALES INTERVENCIONES HUMANAS QUE ALTERAN SU FUNCIONAMIENTO Marta González del Tánago E.T.S. Ingenieros de Montes Universidad Politécnica de Madrid CONTENIDO Los ríos

Más detalles

Marta González del Tánago. E.T.S. Ingenieros de Montes, Universidad Politécnica de Madrid

Marta González del Tánago. E.T.S. Ingenieros de Montes, Universidad Politécnica de Madrid PRINCIPALES ALTERACIONES DE LOS RÍOS Marta González del Tánago E.T.S. Ingenieros de Montes, Universidad Politécnica de Madrid Junta de Andalucía, AGENCIA ANDALUZA DEL AGUA Curso sobre Restauración de Ríos.

Más detalles

Hidrogeología. Tema 5 UN SISTEMA ACUÍFERO. Luis F. Rebollo. Luis F. Rebollo

Hidrogeología. Tema 5 UN SISTEMA ACUÍFERO. Luis F. Rebollo. Luis F. Rebollo Hidrogeología Tema 5 BALANCE HÍDRICO H DE UN SISTEMA ACUÍFERO 1 T5. BALANCE HÍDRICO H DE UN SISTEMA ACUÍFERO 1. Balance hídrico h de un sistema acuífero. 2. Relaciones aguas superficiales aguas subterráneas.

Más detalles

Qué caudales ambientales mejoran el funcionamiento de un río? Fernando Magdaleno Mas CEDEX

Qué caudales ambientales mejoran el funcionamiento de un río? Fernando Magdaleno Mas CEDEX Qué caudales ambientales mejoran el funcionamiento de un río? Fernando Magdaleno Mas CEDEX Nuevo contexto normativo Cambios normativos en Europa: Directiva Marco del Agua (2000/60/CE) Directiva de Inundaciones

Más detalles

Evaluación de Huella Hídrica en el sector agrícola para una mejor adaptación al cambio climático

Evaluación de Huella Hídrica en el sector agrícola para una mejor adaptación al cambio climático Evaluación de Huella Hídrica en el sector agrícola para una mejor adaptación al cambio climático Herramientas de cálculo, ejemplos e interpretación de resultados Este curso fue realizado por el Proyecto

Más detalles

FACTORES QUE CONTROLAN EL PRIMER IMPULSO DE RECARGA HACIA LOS ACUÍFEROS

FACTORES QUE CONTROLAN EL PRIMER IMPULSO DE RECARGA HACIA LOS ACUÍFEROS FACTORES QUE CONTROLAN EL PRIMER IMPULSO DE RECARGA HACIA LOS ACUÍFEROS POR: Eduardo Teófilo Salvador, Guillermo Pedro Morales Reyes, René Muciño Castañeda y María Vicenta Esteller Alberich UNIVERSIDAD

Más detalles

T E S I S UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO CENTRO DE INVESTIGACIONES EN GEOGRAFÍA AMBIENTAL FACULTAD DE FILOSOFÍA Y LETRAS

T E S I S UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO CENTRO DE INVESTIGACIONES EN GEOGRAFÍA AMBIENTAL FACULTAD DE FILOSOFÍA Y LETRAS UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO CENTRO DE INVESTIGACIONES EN GEOGRAFÍA AMBIENTAL FACULTAD DE FILOSOFÍA Y LETRAS CAMBIO EN LA AMENAZA DE INUNDACIÓN EN CUATRO SUBCUENCAS DEL SUR DE LA CIUDAD DE MORELIA,

Más detalles

ICH HIDROLOGÍA E. VARAS

ICH HIDROLOGÍA E. VARAS Modelo Rorb Programa interactivo que calcula el efecto de atenuación y de propagación de la lluvia efectiva de una tormenta o de otras formas de aporte de agua a través de una cuenca, y/o a través de un

Más detalles

Anexo IV Metodología del inventario de recursos hídricos naturales

Anexo IV Metodología del inventario de recursos hídricos naturales Plan de gestión del distrito de cuenca fluvial de Catalunya Anexo IV Metodología del inventario de recursos hídricos naturales Octubre de 2009 Plan de gestión del distrito de cuenca fluvial de Catalunya

Más detalles

EVAPOTRANSPIRACIÓN. Climatología Práctico 2012

EVAPOTRANSPIRACIÓN. Climatología Práctico 2012 EVAPOTRANSPIRACIÓN Climatología Práctico 2012 Qué es la EvapoTranspiración? La ET integra los fenómenos de evaporación a través y desde la superficie del suelo y de transpiración de las plantas. Concepto

Más detalles

Modelación del Comportamiento Hidrodinámico del agua subterránea de la zona comprendida entre Carbó, Pesqueira y Zamora, Sonora.

Modelación del Comportamiento Hidrodinámico del agua subterránea de la zona comprendida entre Carbó, Pesqueira y Zamora, Sonora. 9.- MODELACIÓN MATEMÁTICA Mod-Flow es un programa tridimensional para agua subterránea el cual trabaja bajo una expresión de diferencias finitas de aproximación. Mod-Flow fue desarrollado por el USGS de

Más detalles

Estimación, a nivel de cuenca, del impacto en la disponibilidad de agua de los nuevos escenarios de cambio climático por medio de modelos hidrológicos

Estimación, a nivel de cuenca, del impacto en la disponibilidad de agua de los nuevos escenarios de cambio climático por medio de modelos hidrológicos Estimación, a nivel de cuenca, del impacto en la disponibilidad de agua de los nuevos escenarios de cambio climático por medio de modelos hidrológicos Raquel T. Montes Rojas Coordinación General de Adaptación

Más detalles

CAPÍTULO 7. ANÁLISIS DE DISPONIBILIDAD DE AGUAS SUBTERRÁNEAS

CAPÍTULO 7. ANÁLISIS DE DISPONIBILIDAD DE AGUAS SUBTERRÁNEAS CAPÍTULO 7. ANÁLISIS DE DISPONIBILIDAD DE AGUAS SUBTERRÁNEAS 7.1 Balance de aguas subterráneas El balance de aguas subterráneas fue realizado de acuerdo a la metodología señalada en la NOM-011-CNA-2000

Más detalles

CENTRO AGRONÓMICO TROPICAL DE INVESTIGACIÓN Y ENSEÑANZA EL BOSQUE COMO REGULADOR DEL CICLO HIDROLÓGICO

CENTRO AGRONÓMICO TROPICAL DE INVESTIGACIÓN Y ENSEÑANZA EL BOSQUE COMO REGULADOR DEL CICLO HIDROLÓGICO CENTRO AGRONÓMICO TROPICAL DE INVESTIGACIÓN Y ENSEÑANZA EL BOSQUE COMO REGULADOR DEL CICLO HIDROLÓGICO Francisco Jiménez FUNCIONES MÁS IMPORTANTES DE LOS LOS BOSQUES EN LOS ECOSISTEMAS Formar y proteger

Más detalles

PROAGRO Gestión Integral de Cuencas. Potenciales impactos del cambio climático en el ciclo hidrológico de la cuenca del Río Comarapa

PROAGRO Gestión Integral de Cuencas. Potenciales impactos del cambio climático en el ciclo hidrológico de la cuenca del Río Comarapa Potenciales impactos del cambio climático en el ciclo hidrológico de la cuenca del Río Comarapa 28.06.2011 28.06.2011 Página 1Seite 1 Contenido de la presentación Objetivos Método Modelo SWAT Modelos climáticos

Más detalles

2. Tipificación e Inventario

2. Tipificación e Inventario P L A N D I R E C T O R D E R I B E R A S D E A N D A L U C Í A 2. Tipificación e Inventario 2.1. Régimen hídrico 2.2. Régimen hidráulico 2.3. Condicionantes hídricos e hidráulicos para la restauración

Más detalles

TERMINOLOGIA EMPLEADA

TERMINOLOGIA EMPLEADA TERMINOLOGIA EMPLEADA Acequia Zanja o canal por donde se conducen las aguas para regar y para otros fines Acuífero libre Formación acuífera limitada en su parte inferior por una superficie impermeable.

Más detalles

PRÁCTICA 1: CÁLCULO DEL BALANCE HÍDRICO EN EL SUELO MEDIANTE EL MÉTODO DE THORNTHWAITE

PRÁCTICA 1: CÁLCULO DEL BALANCE HÍDRICO EN EL SUELO MEDIANTE EL MÉTODO DE THORNTHWAITE Asignatura: HIDROLOGÍA SUBTERRÁNEA (ITOP) / HIDROGEOLOGÍA (ITM) UPCT Curso: 2008-2009 Fecha: 08/10/2008 Profesora: Marisol Manzano Arellano Tel. 968.325443 Explicación de la práctica PRÁCTICA 1: CÁLCULO

Más detalles

Tabla de contenido. 1. Introducción Objetivos General Específicos Organización del documento...

Tabla de contenido. 1. Introducción Objetivos General Específicos Organización del documento... Tabla de contenido 1. Introducción 1 1.1. Objetivos..................................... 3 1.1.1. General.................................. 3 1.1.2. Específicos................................. 3 1.2.

Más detalles

Calibración de un modelo conceptual distribuido del ciclo de sedimentos. Aplicación a la cuenca experimental de Goodwin Creek (EEUU).

Calibración de un modelo conceptual distribuido del ciclo de sedimentos. Aplicación a la cuenca experimental de Goodwin Creek (EEUU). Doctorado en Ingeniería del Agua y Medioambiental Calibración de un modelo conceptual distribuido del ciclo de sedimentos. Aplicación a la cuenca experimental de Goodwin Creek (EEUU). Gianbattista Bussi

Más detalles

CLIMATOLOGIA 2010 PRÁCTICO - 5

CLIMATOLOGIA 2010 PRÁCTICO - 5 CLIMATOLOGIA 2010 PRÁCTICO - 5 LA CLASIFICACIÓN DE C.W.THORNTHWAITE Consideraciones generales La idea más original de C.W.Thornthwaite consiste en comparar los aportes de agua con las pérdidas que, bajo

Más detalles

Nombre de las variables a comparar Recomendación de riego para los próximos 7 días[mm/ Riego bruto previsto para cubrir las necesidades hídricas (analítica)[mm/ ] Riego bruto previsto para cubrir las necesidades

Más detalles

ESCUELA TÉCNICA SUPERIOR DE INGENIEROS DE CAMINOS, CANALES Y PUERTOS

ESCUELA TÉCNICA SUPERIOR DE INGENIEROS DE CAMINOS, CANALES Y PUERTOS salinización en el sistema de riego de Santiago del Estero, Argentina Tipo de proyecto: Modalidad II Autor: Maria Alcaraz Boscà Tutores: Félix Francés (UPV) Maurits W. Ertsen (TUDelft) Fecha: Mayo 2007

Más detalles

FICHA DE LA TECNOLOGÍA

FICHA DE LA TECNOLOGÍA FICHA DE LA TECNOLOGÍA Modelo OLIVCROP para la determinación de la fecha de siega de la cubierta protectora en olivar TEMÁTICA Clasificación: Tema: Subtema: Tipo: Sector Agrario Agricultura de conservación

Más detalles

Escorrentía. Escorrentía

Escorrentía. Escorrentía Escorrentía James McPhee Departamento de Ingeniería Civil Facultad de Ciencias Físicas y Matemáticas Universidad de Chile Escorrentía Aquella parte de la precipitación que eventualmente se manifiesta como

Más detalles

Prospectivas y Aplicaciones del Modelo Hidrológico SWAT: Adaptación del modelo para su uso en la Cuenca Hidrográfica del Canal de Panamá

Prospectivas y Aplicaciones del Modelo Hidrológico SWAT: Adaptación del modelo para su uso en la Cuenca Hidrográfica del Canal de Panamá Prospectivas y Aplicaciones del Modelo Hidrológico SWAT: Adaptación del modelo para su uso en la Cuenca Hidrográfica del Canal de Panamá Presentado por: Jordan Oestreicher Estudiante de Maestría Universidad

Más detalles

Interacciones bosque-agua en la región Mediterránea: comparación de modelos a diferentes escalas

Interacciones bosque-agua en la región Mediterránea: comparación de modelos a diferentes escalas Interacciones bosque-agua en la región Mediterránea: comparación de modelos a diferentes escalas G.Ruiz-Pérez 1, M. González-Sanchis 2, A. del Campo 2 y F. Francés 1 (1): Instituto de Ingeniería del Agua

Más detalles

Máster en Ingeniería Hidráulica y Medio Ambiente. Intensificación Ordenación, Gestión y Restauración de Cuencas

Máster en Ingeniería Hidráulica y Medio Ambiente. Intensificación Ordenación, Gestión y Restauración de Cuencas Máster en Ingeniería Hidráulica y Medio Ambiente Intensificación Ordenación, Gestión y Restauración de Cuencas Universidad Politécnica de Valencia Departamento de Ingeniería Hidráulica y Medio Ambiente

Más detalles

Estudio del comportamiento hidrológico no-lineal de una pequeña cuenca Mediterránea. Aplicación del estudio a la cuenca de Can Vila (Cataluña).

Estudio del comportamiento hidrológico no-lineal de una pequeña cuenca Mediterránea. Aplicación del estudio a la cuenca de Can Vila (Cataluña). Estudio del comportamiento hidrológico no-lineal de una pequeña cuenca Mediterránea. Aplicación del estudio a la cuenca de Can Vila (Cataluña). Universidad Politécnica de Valencia. Escuela Técnica Superior

Más detalles

El sistema ha sido desarrollado en lenguaje Visual Basic. NET, y para el análisis espacial se han utilizado los programas: SURFER, ILWIS y ArcGis

El sistema ha sido desarrollado en lenguaje Visual Basic. NET, y para el análisis espacial se han utilizado los programas: SURFER, ILWIS y ArcGis también permite el establecimiento de escenarios de cambios de uso de suelo, variaciones hidroclimáticas y cambios en la demanda, lo cual constituye una herramienta de análisis para la evaluación de impactos

Más detalles

DESCRIPCIÓN DE INDICADORES

DESCRIPCIÓN DE INDICADORES DESCRIPCIÓN DE ES Agua JUSTIFICACIÓN El ecosistema fluvial es una singularidad ambiental y paisajista respecto a su entorno mas próximo. Esta singularidad está causada por la modificación de varios parámetros

Más detalles

Volúmenes relativos de agua en la Tierra Agua Subterránea 0.5% Humedad Suelo 0.005% Ríos % Lagos 0.02% Atmósfera % Otros 0.

Volúmenes relativos de agua en la Tierra Agua Subterránea 0.5% Humedad Suelo 0.005% Ríos % Lagos 0.02% Atmósfera % Otros 0. Ciclo del Agua Lagos 0.02% Glaciares 1.9% Volúmenes relativos de agua en la Tierra Agua Subterránea 0.5% Humedad Suelo 0.005% Ríos 0.0001% Otros 0.1% Atmósfera 0.0001% Oceanos 97.5% Se denomina Ciclo hidrológico

Más detalles

HIDROLOGÍA Código: 254 Créditos: 6. Escuela: Ingeniería Civil Área a la que pertenece: Hidráulica. Salón de Prácticas de laboratorio

HIDROLOGÍA Código: 254 Créditos: 6. Escuela: Ingeniería Civil Área a la que pertenece: Hidráulica. Salón de Prácticas de laboratorio PRIMER SEMESTRE 2018 HIDROLOGÍA Código: 254 Créditos: 6 Escuela: Ingeniería Civil Área a la que pertenece: Hidráulica Pre- requisito: (252) Hidráulica Post requisito: Salón de clase: Horas por semana del

Más detalles

Figura 6-65 Ciclo anual de la Precipitación (P), Evaporación Real (E s ), almacenamiento en el tanque

Figura 6-65 Ciclo anual de la Precipitación (P), Evaporación Real (E s ), almacenamiento en el tanque Figura 6-63 Ciclo anual de la Precipitación (P), Evaporación Real (E s ), almacenamiento en el tanque de producción (S) y en el tanque de tránsito (R), caudal observado (Q o ) y estimado (Q s ), para la

Más detalles

Universidad Tecnológica de Panamá Centro de Investigaciones Hidráulicas e Hidrotécnicas Área de Hidráulica

Universidad Tecnológica de Panamá Centro de Investigaciones Hidráulicas e Hidrotécnicas Área de Hidráulica 1. Introducción: Página: 1 de 5 La Hidrología en su definición más simple es la ciencia que estudia la distribución, cuantificación y utilización de los recursos hídricos que están disponibles en el globo

Más detalles

Infiltración y Escorrentía. James McPhee Departamento de Ingeniería Civil Facultad de Ciencias Físicas y Matemáticas Universidad de Chile

Infiltración y Escorrentía. James McPhee Departamento de Ingeniería Civil Facultad de Ciencias Físicas y Matemáticas Universidad de Chile Infiltración y Escorrentía James McPhee Departamento de Ingeniería Civil Facultad de Ciencias Físicas y Matemáticas Universidad de Chile Precipitación total Abstracción Inicial + Evapotranspiración Infiltración

Más detalles

Entradas (E) - Salidas (S) = Cambio de Almacenamiento. Recarga total Descarga total = Cambio de almacenamiento en la unidad hidrogeológica

Entradas (E) - Salidas (S) = Cambio de Almacenamiento. Recarga total Descarga total = Cambio de almacenamiento en la unidad hidrogeológica 8.- BALANCE INTEGRAL DE AGUAS SUBTERRÁNEAS Un balance de aguas subterráneas consiste en registrar las entradas, salidas y cambio en el volumen de almacenamiento, que acontecen en un volumen específico

Más detalles

Maximizar la evapotranspiración como estrategia de reducción de los excedentes hídricos en el sudeste de la provincia de Córdoba

Maximizar la evapotranspiración como estrategia de reducción de los excedentes hídricos en el sudeste de la provincia de Córdoba Maximizar la evapotranspiración como estrategia de reducción de los excedentes hídricos en el sudeste de la provincia de Córdoba Bollatti, Pablo. INTA Marcos Juárez - GRUPO NAPAS. bollatti.pablo@inta.gob.ar

Más detalles

TEMA 9: Escorrentías

TEMA 9: Escorrentías TEMA 9: Escorrentías MARTA GONZÁLEZ DEL TÁNAGO UNIDAD DOCENTE DE HIDRÁULICA E HIDROLOGÍA DEPARTAMENTO DE INGENIERÍA FORESTAL E.T.S. DE INGENIEROS DE MONTES UNIVERSIDAD POLITÉCNICA DE MADRID Dunne & Leopold

Más detalles

Hidrología. Ciencia que estudia las propiedades, distribución y circulación del agua

Hidrología. Ciencia que estudia las propiedades, distribución y circulación del agua /1/01 Hidrología Ciencia que estudia las propiedades, distribución y circulación del agua Semana 5 - Manejo Estadístico de Datos Hidrometeorológicos (precipitación). Manejo de Data de Variables Hidrometeorológicas

Más detalles

Prontuario de temas Ciencias Ambientales

Prontuario de temas Ciencias Ambientales Prontuario de temas Ciencias Ambientales I Introducción Qué son las ciencias ambientales? 1. Ciencias relacionas a las CA 2. Distinguir entre Ciencias Ambientales y Ecología 3. Uso del Método Científico

Más detalles

GESTIÓN DEL AGUA EN LA AGRICULTURA

GESTIÓN DEL AGUA EN LA AGRICULTURA GESTIÓN DEL AGUA EN LA AGRICULTURA La gestión del agua nos preocupa porque es un bien escaso. La precipitación se distribuye muy irregularmente en el espacio y en el tiempo. GESTIÓN DEL AGUA EN LA AGRICULTURA

Más detalles

Determinación de necesidades de riego por medio del empleo de modelos de balance de agua en parcela. Capítulo IV

Determinación de necesidades de riego por medio del empleo de modelos de balance de agua en parcela. Capítulo IV Determinación de necesidades por medio del empleo de modelos de balance de agua en parcela Capítulo IV IV. Determinación de necesidades por medio del empleo de modelos de balance de agua en parcela El

Más detalles

Modelización de la Vegetación de Ribera y el Régimen de Caudales

Modelización de la Vegetación de Ribera y el Régimen de Caudales Modelización de la Vegetación de Ribera y el Régimen de Caudales II Jornades sobre Bosc de Ribera Estratègies de Conservació i Restauració Flix, 1-2 de octubre, 2009 Paco Martínez Capel, Virginia Garófano

Más detalles

MARN PRESENTA INFORME SOBRE SEQUIA HIDROLÓGICA MAYO AGOSTO 2015

MARN PRESENTA INFORME SOBRE SEQUIA HIDROLÓGICA MAYO AGOSTO 2015 MARN PRESENTA INFORME SOBRE SEQUIA HIDROLÓGICA MAYO AGOSTO San Salvador, 10 de septiembre de. La sequía meteorológica que ha afectado al país en los últimos meses producto del fenómeno de El Niño, ha provocado

Más detalles

TEMA 4. PROCESOS Y DEPÓSITOS FLUVIALES

TEMA 4. PROCESOS Y DEPÓSITOS FLUVIALES TEMA 4. PROCESOS Y DEPÓSITOS FLUVIALES ÍNDICE 4.1. Morfología del cauce: aspectos elementales 4.2. Fundamentos de dinámica fluvial 4.3. Morfología de cauces: condicionantes, movilidad y tipología de los

Más detalles

Uso del agua en México: ha sido congruente la forma de medición y asignación del agua con el estado de avance metodológico mundial?

Uso del agua en México: ha sido congruente la forma de medición y asignación del agua con el estado de avance metodológico mundial? Uso del agua en México: ha sido congruente la forma de medición y asignación del agua con el estado de avance metodológico mundial? j joel carrillo rivera CU, México DF, 22 de agosto del 2006 AGUA EN EL

Más detalles

lite para la cuantificación de las superficies innivadas, realización

lite para la cuantificación de las superficies innivadas, realización FIGURA 2. Area del territorio español [en azul) donde se estudian los recursos hídricos procedentes de la acumulación nival. Programa ERHIN. lite para la cuantificación de las superficies innivadas, realización

Más detalles

PLAN HIDROLÓGICO. Demarcación Hidrográfica del Tinto, Odiel Y Piedras APÉNDICE Ciclo de Planificación Hidrológica 2015/2021

PLAN HIDROLÓGICO. Demarcación Hidrográfica del Tinto, Odiel Y Piedras APÉNDICE Ciclo de Planificación Hidrológica 2015/2021 Ciclo de Planificación Hidrológica 2015/2021 PLAN HIDROLÓGICO Demarcación Hidrográfica del Tinto, Odiel Y Piedras APÉNDICE 10.2 PAQUETE DE ÍNDICE 1 PAQUETE DE 1 Página i 1 PAQUETE DE La metodología de

Más detalles

ANÁLISIS DE CAUDALES (II) Profesor Luis Fernando Carvajal

ANÁLISIS DE CAUDALES (II) Profesor Luis Fernando Carvajal ANÁLISIS DE CAUDALES (II) Profesor Luis Fernando Carvajal Relaciones nivel-caudal 1. El objetivo de aforar una corriente, durante varias épocas del año en una sección determinada, es determinar lo que

Más detalles

LA PROBLEMÁTICA AMBIENTAL Y SU INCIDENCIA EN LA BIODIVERSIDAD Y EL DESARROLLO DE LAS REGIONES

LA PROBLEMÁTICA AMBIENTAL Y SU INCIDENCIA EN LA BIODIVERSIDAD Y EL DESARROLLO DE LAS REGIONES LA PROBLEMÁTICA AMBIENTAL Y SU INCIDENCIA EN LA BIODIVERSIDAD Y EL DESARROLLO DE LAS REGIONES ORLANDO ACUÑA A. ADMINISTRADOR DE EMPRESAS ESPECIALISTA EN GESTION PUBLICA Mg. DESARROLLO EDUCATIVO Y SOCIAL

Más detalles

ANEJO 8 OBJETIVOS MEDIOAMBIENTALES Y EXENCIONES. Documento auxiliar 2 MODELOS DE SIMULACIÓN DEL ESTADO DE LAS MASAS DE AGUA SUBTERRÁNEAS.

ANEJO 8 OBJETIVOS MEDIOAMBIENTALES Y EXENCIONES. Documento auxiliar 2 MODELOS DE SIMULACIÓN DEL ESTADO DE LAS MASAS DE AGUA SUBTERRÁNEAS. ANEJO 8 OBJETIVOS MEDIOAMBIENTALES Y EXENCIONES Documento auxiliar 2 MODELOS DE SIMULACIÓN DEL ESTADO DE LAS MASAS DE AGUA SUBTERRÁNEAS. PATRICAL 1 SIMULACIÓN DE TRANSPORTE DE NITRATO EN EL CICLO HIDROLÓGICO

Más detalles

Tendencias actuales en modelación hidrológica y estadística no estacionaria para la estimación de la frecuencia de las inundaciones

Tendencias actuales en modelación hidrológica y estadística no estacionaria para la estimación de la frecuencia de las inundaciones Tendencias actuales en modelación hidrológica y estadística no estacionaria para la estimación de la frecuencia de las inundaciones Por: Félix Francés Research Group of Hydrological and Environmental Modelling

Más detalles

Planes Hidrológicos. Gestión integrada

Planes Hidrológicos. Gestión integrada Quito, Ecuador, 4-8 Julio 2016 PROYECTO ARCAL RLA/7/018 MEJORA DEL CONOCIMIENTO DE AGUAS SUBTERRÁNEAS PARA CONTRIBUIR A SU PROTECCIÓN, GESTIÓN INTEGRADA Y GOBERNANZA REPÚBLICA DEL ECUADOR Planes Hidrológicos.

Más detalles

SIMULACIÓN DINÁMICA Y SOSTENIBILIDAD DE LOS REGADÍOS MEDITERRÁNEOS TRADICIONALES

SIMULACIÓN DINÁMICA Y SOSTENIBILIDAD DE LOS REGADÍOS MEDITERRÁNEOS TRADICIONALES II International Conference on Sustainability Measurement and Modelling. ICSMM 2009. 5-6 Noviembre. Terrassa SIMULACIÓN DINÁMICA Y SOSTENIBILIDAD DE LOS REGADÍOS MEDITERRÁNEOS TRADICIONALES Julia Martínez

Más detalles

La La precipitación es es cualquier forma forma de de hidrometeoro que que cae cae de de la la atmósfera y llega llega a la la superficie terrestre.

La La precipitación es es cualquier forma forma de de hidrometeoro que que cae cae de de la la atmósfera y llega llega a la la superficie terrestre. La La precipitación es es cualquier forma forma de de hidrometeoro que que cae cae de de la la atmósfera y llega llega a la la superficie terrestre. Tipos de precipitación según su estado físico La La

Más detalles

Waldo Ojeda. Acapulco, Gro a 20 de noviembre de 2009 WOB-1

Waldo Ojeda. Acapulco, Gro a 20 de noviembre de 2009 WOB-1 EVAPOTRANSPIRACIÓN Y REQUERIMIENTOS DE RIEGO DE LOS CULTIVOS Waldo Ojeda Acapulco, Gro a 20 de noviembre de 2009 WOB-1 Conceptos básicos Evaporación (E v ): Proceso de movimiento de agua en forma de vapor

Más detalles

4. LAS INTERVENCIONES HUMANAS EN LOS

4. LAS INTERVENCIONES HUMANAS EN LOS 4. LAS INTERVENCIONES HUMANAS EN LOS CAUCES FLUVIALES. LAS INTERVENCIONES HUMANAS EN LOS CAUCES FLUVIALES. Dª Marta González del Tánago Profesora Titular de la E.T.S. de Ingenieros de Montes. Universidad

Más detalles

Conceptos recursos hídricos y ecosistemas

Conceptos recursos hídricos y ecosistemas Conceptos recursos hídricos y ecosistemas Una dehesa es una porción de tierra generalmente delimitada que se destina al libre pasto del ganado. Se trata de un ecosistema derivado del bosque mediterráneo,

Más detalles

Temperatura del aire CATEDRA DE CLIMATOLOGÍA Y FENOLOGÍA GRÍCOLAS

Temperatura del aire CATEDRA DE CLIMATOLOGÍA Y FENOLOGÍA GRÍCOLAS Temperatura del aire CATEDRA DE CLIMATOLOGÍA Y FENOLOGÍA GRÍCOLAS Temperatura del aire Temperatura no es lo mismo que calor. El calor, es una forma de energía y temperatura es la medida (o grado) del calor.

Más detalles

HIDROLOGÍA. INFILTRACIÓN Parte I. Julián David Rojo Hdz. I.C. Msc. Recursos Hidráulicos

HIDROLOGÍA. INFILTRACIÓN Parte I. Julián David Rojo Hdz. I.C. Msc. Recursos Hidráulicos HIDROLOGÍA INFILTRACIÓN Parte I Julián David Rojo Hdz. I.C. Msc. Recursos Hidráulicos INFILTRACIÓN CONSIDERACIONES (I) Dos fuerzas son responsables del movimiento del agua en las columnas de suelo. La

Más detalles

PRESENTA HÉCTOR GONZÁLEZ

PRESENTA HÉCTOR GONZÁLEZ SEMINARIO DE DRENAJES PRIMARIOS 14 MARZO DE 2014 SAN SALVADOR, EL SALVADOR PRESENTA HÉCTOR GONZÁLEZ DIRECCIÓN DE ADAPTACIÓN AL CAMBIO CLIMÁTICO Y GESTIÓN ESTRATÉGICA DEL RIESGO MINISTERIO DE OBRAS PUBLICAS,

Más detalles

Tema 3 MOVIMIENTO DEL AGUA EN EL SUELO

Tema 3 MOVIMIENTO DEL AGUA EN EL SUELO Tema 3 MOVIMIENTO DEL AGUA EN EL SUELO 1. INTRODUCCIÓN Suelo: medio poroso que retiene agua. El agua no permanece estática se mueve en respuesta a gradientes de potencial. Por tanto, el flujo del agua

Más detalles

El proceso lluvia - escurrimiento

El proceso lluvia - escurrimiento ESCURRIMIENTOS 1 Proceso Lluvia-Escurrimiento 2 El proceso lluvia - escurrimiento Precipitación Infiltración Evapotranspiración Intercepción Escurrimiento Superficial Percolación Escurrimiento Subsuperficial

Más detalles

LA PLANIFICACIÓN DE LA RESTAURACIÓN DE LOS RÍOS

LA PLANIFICACIÓN DE LA RESTAURACIÓN DE LOS RÍOS Foro del Agua de Navarra JORNADA SOBRE GESTIÓN DEL ESPACIO FLUVIAL Y PLAN DE RESTAURACIÓN DE RÍOS Pamplona, 3 de Julio de 2007 LA PLANIFICACIÓN DE LA RESTAURACIÓN DE LOS RÍOS Marta González del Tánago

Más detalles

Desarrollo de un modelo conceptual

Desarrollo de un modelo conceptual Universidad Politécnica de Valencia Departamento de Ingeniería Hidráulica y Medio Ambiente Programa de Doctorado Desarrollo de un modelo conceptual dinámico suelo-vegetación para zonas áridas y semiáridas

Más detalles

Técnicas de teledetección aplicadas a la mejora de la gestión del agua en remolacha

Técnicas de teledetección aplicadas a la mejora de la gestión del agua en remolacha Técnicas de teledetección aplicadas a la mejora de la gestión del agua en remolacha Ignacio Lorite Torres Cristina Santos Rufo IFAPA Alameda del Obispo (Córdoba) Valladolid, Junio 2013 Introducción La

Más detalles

LA ECOLOGIA ANTE EL SIGLO XXI

LA ECOLOGIA ANTE EL SIGLO XXI LA ECOLOGIA ANTE EL SIGLO XXI LOS ECOSISTEMAS DE LAS AGUAS EPICONTINENTALES EN LA REGIÖN DE MURCIA: RAMBLAS, RIOS y HUMEDALES Rosa Gómez Cerezo Dpto. Ecología e Hidrología Fac. Biología Qué son las aguas

Más detalles

Ayuda: La humedad relativa también puede definirse como: Diga si las siguientes afirmaciones son verdaderas o falsas (justifique su respuesta):

Ayuda: La humedad relativa también puede definirse como: Diga si las siguientes afirmaciones son verdaderas o falsas (justifique su respuesta): Práctico 3: Ciclo hidrológico Climatología 2018 Ejercicio 1: Considere dos parcelas de aire A y B cuya temperatura, temperatura de rocío y razón de mezcla aparecen indicadas en la tabla 1. Considere también

Más detalles

GESTIÓN N DE LOS RECURSOS HÍDRICOS H LA CUENCA DEL EBRO SISTEMA AUTOMÁTICO DE INFORMACIÓN HIDROLÓGICA (SAIH) Y SISTEMA DE AYUDA A LA DECISIÓN (SAD)

GESTIÓN N DE LOS RECURSOS HÍDRICOS H LA CUENCA DEL EBRO SISTEMA AUTOMÁTICO DE INFORMACIÓN HIDROLÓGICA (SAIH) Y SISTEMA DE AYUDA A LA DECISIÓN (SAD) GESTIÓN N DE LOS RECURSOS HÍDRICOS H EN LA CUENCA DEL EBRO SISTEMA AUTOMÁTICO DE INFORMACIÓN HIDROLÓGICA (SAIH) Y SISTEMA DE AYUDA A LA DECISIÓN (SAD) Sistema SAIH de la Cuenca del Ebro SAIH Inicio del

Más detalles

VII. EL MODELO HEC-HMS

VII. EL MODELO HEC-HMS VII. EL MODELO HEC-HMS 7.1. Generalidades El modelo HEC-HMS ( Hydrologic Engineering Center-Hydrologic Modeling System ) fue diseñado para simular procesos de lluvia-escurrimiento en sistemas dendríticos

Más detalles

ANEXO B GENERACIÓN DE CAUDALES MEDIOS MENSUALES EN CUENCAS INTERMEDIAS TABLA DE CONTENIDOS

ANEXO B GENERACIÓN DE CAUDALES MEDIOS MENSUALES EN CUENCAS INTERMEDIAS TABLA DE CONTENIDOS ANEXO B GENERACIÓN DE CAUDALES MEDIOS MENSUALES EN CUENCAS INTERMEDIAS TABLA DE CONTENIDOS 1 INTRODUCCIÓN... 1 1.1 OBJETIVOS... 1 1.2 METODOLOGÍA DE TRABAJO... 1 2 DESCRIPCIÓN DEL MODELO PLUVIAL MPL...

Más detalles

CAPÍTULO II DIMENSIONAMIENTO HIDROLÓGICO DE PRESAS DE ALMACENAMIENTO. Las presas de almacenamiento tienen la función del suministro de agua a una

CAPÍTULO II DIMENSIONAMIENTO HIDROLÓGICO DE PRESAS DE ALMACENAMIENTO. Las presas de almacenamiento tienen la función del suministro de agua a una CAPÍTULO II DIMENSIONAMIENTO HIDROLÓGICO DE PRESAS DE ALMACENAMIENTO 2.1 Introducción Las presas de almacenamiento tienen la función del suministro de agua a una población, ya sea para uso doméstico, generación

Más detalles

ESTUDIO DE CONDICIONES CLIMÁTICAS Y HUMEDAD DEL SUELO BAJO SSPi Y SISTEMA GANADERO TRADICIONAL DURANTE EL NIÑO , CESAR, COLOMBIA

ESTUDIO DE CONDICIONES CLIMÁTICAS Y HUMEDAD DEL SUELO BAJO SSPi Y SISTEMA GANADERO TRADICIONAL DURANTE EL NIÑO , CESAR, COLOMBIA ESTUDIO DE CONDICIONES CLIMÁTICAS Y HUMEDAD DEL SUELO BAJO SSPi Y SISTEMA GANADERO TRADICIONAL DURANTE EL NIÑO 2009-2010, CESAR, COLOMBIA Oscar Alonso Rueda Franco Ing. Agrícola M. I. Recursos Hidráulicos

Más detalles

5.1.2 Evolución del Albedo Modelación del Snow Water Equivalent Intercambio de energía en el manto de nieve

5.1.2 Evolución del Albedo Modelación del Snow Water Equivalent Intercambio de energía en el manto de nieve TABLA DE CONTENIDO 1 Introducción... 1 1.1 Objetivos... 2 1.1.1 Objetivo General... 2 1.1.2 Objetivos específicos... 2 1.2 Organización del informe... 3 2 Revisión Bibliográfica... 4 2.1 Hidrología de

Más detalles

Programación y optimización del riego. Caso de la fresa. Formación: Agua y Agricultura en Doñana. Fecha: 5/06/2013

Programación y optimización del riego. Caso de la fresa. Formación: Agua y Agricultura en Doñana. Fecha: 5/06/2013 Programación y optimización del riego Caso de la fresa Fecha: 5/06/2013 Formación: Agua y Agricultura en Doñana Quiénes somos? Somos especialistas en gestión del agua agrícola Servicio de programación

Más detalles

Ecosistema Servicios Ecosistemicos Hídricos Unidad de Análisis La Cuenca

Ecosistema Servicios Ecosistemicos Hídricos Unidad de Análisis La Cuenca Foto: Laguna de los Abuelos, Huamantanga 2014 Fuente: Oscar A. Nuñez Ecosistema Servicios Ecosistemicos Hídricos Unidad de Análisis La Cuenca Msc Oscar Angulo Núñez Investigador Área Cuencas Andinas Ing.

Más detalles

LA ECOLOGIA ANTE EL SIGLO XXI

LA ECOLOGIA ANTE EL SIGLO XXI LA ECOLOGIA ANTE EL SIGLO XXI LOS ECOSISTEMAS DE LAS AGUAS EPICONTINENTALES EN LA REGIÖN DE MURCIA: RAMBLAS, RIOS y HUMEDALES Rosa Gómez Cerezo Dpto. Ecología e Hidrología Fac. Biología Qué son las aguas

Más detalles

Programa Regional ECOBONA

Programa Regional ECOBONA Programa Regional ECOBONA Gestión Social de Ecosistemas Forestales Andinos Bolivia, Ecuador, Perú CONTRAPARTES Ministerio de Desarrollo Rural, Agropecuario y Medio Ambiente (Bolivia) Ministerio del Ambiente

Más detalles

Agricultura de precisión para cultivos intensivos

Agricultura de precisión para cultivos intensivos Fitomonitoreo Agricultura de precisión para cultivos intensivos PHYTEC Ltd. El fitomonitoreo es un sistema nuevo que permite controlar el riego y la nutrición en la operaciones de cultivo intensivo basado

Más detalles

CI41C HIDROLOGÍA. Clase 3. Agenda. Ciclo Hidrológico (Continuación) Ciclo de Escorrentía Disponibilidad de Agua Cuenca Tiempo de Concentración

CI41C HIDROLOGÍA. Clase 3. Agenda. Ciclo Hidrológico (Continuación) Ciclo de Escorrentía Disponibilidad de Agua Cuenca Tiempo de Concentración CI41C HIDROLOGÍA Agenda Clase 3 Ciclo Hidrológico (Continuación) Ciclo de Escorrentía Disponibilidad de Agua Cuenca Tiempo de Concentración Detención superficial Almacenamiento superficial Planicies inundación

Más detalles

Modelo Hidrológico Distribuido J2000: Caso de Estudio en la Cuenca Árida del Hurtado

Modelo Hidrológico Distribuido J2000: Caso de Estudio en la Cuenca Árida del Hurtado Friedrich Schiller University of Jena Department of Geoinformatics, Hydrology and Modelling Modelo Hidrológico Distribuido J2000: Caso de Estudio en la Cuenca Árida del Hurtado Hidrología Andina, 17 20

Más detalles

Sustentabilidad Ambiental de las Cosechas Forestales. Suelo, Agua y Zonas de Protección

Sustentabilidad Ambiental de las Cosechas Forestales. Suelo, Agua y Zonas de Protección Suelo, Agua y Zonas de Protección Qué son Franjas de Protección de Cauces? Según Gayoso. J y Gayoso. S. (2003) Son áreas adyacentes a un cauce o humedal, con reconocida fragilidad biológica y física que

Más detalles

REPUBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS INSTITUTO DE CIENCIAS DE LA TIERRA

REPUBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS INSTITUTO DE CIENCIAS DE LA TIERRA REPUBLICA BOLIVARIANA DE VENEZUELA UNIVERSIDAD CENTRAL DE VENEZUELA FACULTAD DE CIENCIAS INSTITUTO DE CIENCIAS DE LA TIERRA HIDROGEOQUÍMICA Prof. Ramón Luis Montero M. Correos electrónicos: armando.ramirez@ciens.ucv.ve

Más detalles