programa para el cálculo de las necesidades hídricas en cultivos

244
ESCUELA SUPERIOR DE AGRICULTURA DE BARCELONA Ingeniería Técnica Agrícola Hortofruticultura y Jardinería Trabajo Final de Carrera Autor: Víctor Yusta Laguna Diciembre de 1998 Programa para el cálculo de las necesidades hídricas de los cultivos

Upload: francisco-miguel-garau-hernandez

Post on 19-Jun-2015

3.780 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Programa para el cálculo de las necesidades hídricas en cultivos

ESCUELA SUPERIOR DE AGRICULTURA DE BARCELONA

Ingeniería Técnica AgrícolaHortofruticultura y Jardinería

Trabajo Final de Carrera

Autor: Víctor Yusta Laguna

Diciembre de 1998

Programapara el cálculo

de las necesidades hídricas de los cultivos

Page 2: Programa para el cálculo de las necesidades hídricas en cultivos

2

ESCUELA SUPERIOR DE AGRICULTURA DE BARCELONA

Ingeniería Técnica AgrícolaHortofruticultura y Jardinería

Trabajo Final de Carrera

Profesor ponente: Nuria Cañameras i Riba

Autor: Víctor Yusta Laguna

Diciembre de 1998

Programapara el cálculo

de las necesidades hídricas de los cultivos

Page 3: Programa para el cálculo de las necesidades hídricas en cultivos

3

AGRADECIMIENTOS.

A la profesora, Nuria Cañameras, por su ayuda y prestancia.

A mi esposa, María Luz, por estar a mi lado.

A mi hermana, Cristina, siempre está cuando la necesito.

A mi sobrino, Víctor Manuel, me ha ayudado mucho en las traducciones.

A mi amiga, Pilar Barceló, por su sabia crítica constructiva.

A mis padres, Paco y Maruja, les quiero mucho.

Page 4: Programa para el cálculo de las necesidades hídricas en cultivos

4

RESUMEN.

La utilización del agua en la agricultura ha contribuido a un aumento muy

importante de la producción en los últimos años.

El aumento del consumo de agua para la agricultura origina un conflicto con las

necesidades de consumo urbanas e industriales.

Por tanto, la necesidad de realizar un consumo equilibrado es fundamental. Para

ello se cuenta con métodos para estimar el agua necesaria para las plantas.

Uno de los métodos de estimación que se propone es este trabajo es el descrito

por la FAO, basado en el balance hídrico. Este calcula las entradas y salidas de

agua en el conjunto aire-suelo-planta.

Los cálculos mediante este método, sin ser complicados, son muy laboriosos y

llevan a la necesidad de utilizar herramientas de ayuda para realizarlos.

La informática es una herramienta que puede ayudar a realizar los cálculos de

una manera rápida y eficaz. Así mismo, se convierte en un instrumento de

simulación para adoptar estrategias cambiantes.

El resultado ha sido un programa que realiza el cálculo del agua necesaria para

un cultivo, mediante el método del balance hídrico propuesto por la FAO. Se

tienen en cuenta los aspectos más importantes del balance hídrico: localización

del cultivo, características del cultivo, datos meteorológicos, tipo de suelo, tipo de

agua de riego, tipo de riego, y programación del riego.

Palabras claves: agricultura - cultivo - regadío - necesidad hídrica - balance

hídrico - informática.

Page 5: Programa para el cálculo de las necesidades hídricas en cultivos

5

RESUM.

La utilització de l'aigua a l'agricultura ha contribuït a un augment molt important de

la producció en aquests últims anys.

L'augment del consum d'aigua per a l'agricultura origina un conflicte amb les

necessitats de consum urbanes i industrials.

Per tant, la necessitat d'arribar a fer un consum equilibrat és fonamental. Per tal

d'arribar a aconseguir-ho es poden fer servir mètodes per estimar l'aigua

necessària per a les plantes.

Un dels mètodes d'estimació que es proposa en aquest treball és el que descriu la

FAO, basat en el balanç hídric. Aquest mètode calcula les entrades y sortides

d'aigua en el conjunt aire-sòl-planta.

Els càlculs mitjantçant aquest mètode, sense que siguin complicats, són molt

laboriosos i comporten la necessitat de fer servir eines d'ajut per realitzar-los.

La informàtica és una eina que pot ajudar a realitzar els càlculs d'una manera

ràpida i eficaç. Així mateix, es converteix en un instrument de simulació per

adoptar estratègies canviants.

El resultat ha estat un programa que realitza el càlcul de l'aigua necessària per a

un cultiu, mitjançant el mètode del balanç hídric proposat per la FAO. Es tenen en

compte els aspectes més importants del balanç hídric: localització del cultiu,

característiques del cultiu, dades meteorològiques, tipus de sòl, tipus d'aigua de

reg, tipus de reg i programació del reg.

Paraules clau: agricultura - cultiu - regadiu - necessitat hídrica - balanç hídric -

informàtica.

Page 6: Programa para el cálculo de las necesidades hídricas en cultivos

6

SUMMARY.

In recent times, water use for agricultural purposes has contributed to a dramatic

increase in production.

Higher water consumption in agriculture conflicts, however, with urban and

industrial water needs

A balanced water consumption policy is therefore crucial, methods being

necessary to calculate the amount of water required by growing crops.

One of the methods discussed in this work is the FAO water balance-based

method, which measures water incomes and outputs for the whole system of air-

soil-plant.

Calculations obtained with this method are not complicated but they are really

laborious. Thus, some calculating tools become necessary.

Computers are useful, rapid tools to undertake these calculations. They may be

also employed as simulation instruments to adopt changing strategies.

The result has been a program based on the FAO water balance method to

determine the quantity of water required by a crop. The major factors of this

method —crop location, crop features, weather data, soil type, water type for

irrigation, irrigation type and irrigation scheduling—have been considered.

Key words: agriculture - crop – irrigation – water need – water balance –

computers.

Page 7: Programa para el cálculo de las necesidades hídricas en cultivos

Indice

7

ÍNDICE.

1.Introducción 10

1.1. Superficie de regadío 11

1.2. Consumo equilibrado de agua 13

1.3. Estimación de las necesidades hídricas de los cultivos 14

1.3.1. Descripción 14

1.3.2. Punto óptimo de riego 17

1.3.2.1. Estado hídrico del suelo 18

1.3.2.2. Estado hídrico de la planta 19

1.3.2.3. Balance hídrico suelo-planta-atmósfera 19

1.3.3. Déficit hídrico 21

1.4. Estimación de las necesidades hídricas mediante el método FAO-24 23

1.4.1. Cálculo de la evapotranspiración 24

1.4.1.1. Cálculo de la evapotranspiración de referencia 24

1.4.1.1.1. Método Blaney-Criddle 25

1.4.1.1.2. Método de la Radiación 26

1.4.1.1.3. Método de Penman (FAO) 27

1.4.1.1.4. Evaporímetro de cubeta 29

1.4.1.1.5. Penman-Monteith (FAO-1990) 30

1.4.2. Coeficiente de cultivo 37

1.4.3. Evapotranspiración del cultivo 40

1.4.4. Factores locales que influyen en la evapotranspiración del cultivo 41

1.4.4.1. Clima 41

1.4.4.2. Humedad del suelo 42

1.4.4.3. Método de riego 42

1.4.4.4. Prácticas de cultivo 43

1.4.4.5. Rendimiento de los cultivos 44

1.4.5. Balance hídrico 44

1.4.5.1. Evapotranspiración del cultivo 44

1.4.5.2. Precipitación efectiva 45

Page 8: Programa para el cálculo de las necesidades hídricas en cultivos

Indice

8

1.4.5.3. Aguas subterráneas 46

1.4.5.4. Percolación profunda 46

1.4.5.5. Variación de la reserva de agua en el suelo 47

1.4.6. Necesidades netas de riego 48

1.4.7. Lavado de sales 49

1.4.8. Eficiencia de la aplicación 51

1.4.9. Necesidades brutas de riego 52

1.4.10. Programación del riego 53

1.4.10.1. Períodos críticos 53

1.4.10.2. Momento de riego 54

1.4.10.3. Dosis de riego 54

1.4.10.4. Reserva de agua al inicio del cultivo 55

1.4.10.5. Duración del riego 55

1.5. Utilización de la informática para el cálculo de las necesidades hídricas 56

1.6. Programas existentes para el cálculo de las necesidades hídricas 58

1.6.1. Programa para el cálculo de la evapotranspiración de referencia 59

1.6.2. Programa para el cálculo de la evapotranspiración de cultivo 59

1.6.3. Programa para el cálculo de la textura 60

1.6.4. Programas para la adquisición de datos meteorológicos 60

1.6.5. Programas para el cálculo de las necesidades hídricas

de los cultivos 61

1.6.6. Programas para la simulación de las necesidades hídricas 63

1.6.7. Otros programas relacionados con las necesidades hídricas 63

2. Objetivos 65

3. Material y métodos 67

3.1. Material 68

3.2. Métodos 68

Page 9: Programa para el cálculo de las necesidades hídricas en cultivos

Indice

9

4. Resultados y discusión 70

4.1. Flujo de datos 72

4.2. Programa 73

4.2.1. Diseño 74

4.2.2. Mantenimiento de tablas 74

4.2.3. Finca 75

4.2.4. Cultivo 76

4.2.5. Meteorología 79

4.2.6. Suelo 82

4.2.7. Agua de riego 84

4.2.8. Tipo de riego 85

4.2.9. Programación del riego 86

4.2.10. Resultados 88

5. Conclusiónes 89

6. Bibliografía 91

7. Anejos 93

7. Anejo 1. Tablas y figuras del manual FAO-24. 94

7. Anejo 2. Programas para el cálculo de las necesidades hídricas. 107

7. Anejo 3. Programa realizado. 124

7. Anejo 4. 157

Capítulo 1. Cálculo del Kc inicial. 157

Capítulo 2. Determinación indirecta de la capacidad de campo y

del punto de marchitamiento. 160

Capítulo 3. Triángulo de texturas 161

7. Anejo 5. Listado del programa 162

Page 10: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

10

1. INTRODUCCIÓN.

Page 11: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

11

1. INTRODUCCIÓN.

1.1. SUPERFICIE DE REGADÍO.

El gran auge que ha tenido la agricultura en nuestro país en el último siglo se ha

debido, entre otros factores, a una mayor utilización del agua para transformar

cultivos y tierras de secano en otras de regadío más productivas.

Excepto dos paréntesis históricos, el período árabe y durante el reinado de Carlos

III (Nadal et alter, 1995), no es sino a partir de la Ley de Aguas de 1879 y la Ley

de Grandes Regadíos de 1883, cuando aumenta la superficie de regadíos de una

manera importante.

Es a partir del inicio de este siglo cuando la superficie agrícola de regadío se

triplica, pasando de las 1.200.000 hectáreas de 1904 a las 2.500.000 hectáreas

de 1971 y llegando a las 3.400.000 hectáreas de regadío actuales.

Este aumento tiene su causa en dos aspectos importantes:

- El aspecto político: Las ya mencionadas “Ley de Aguas” de 1879 y la “Ley de

Grandes Regadíos” de 1883 son dos leyes impulsadas por D. Joaquín Costa

para el desarrollo de la agricultura de regadío (Nadal et alter, 1995)

- Los avances tecnológicos: Gracias al avance tecnológico de finales del siglo

pasado se pudieron empezar a realizar embalses, canales y la infraestructura

necesaria para cultivar más cantidad de productos en menor espacio.

Hoy en día, la productividad relativa del regadío frente al secano está entre 3, en

el peor caso (zonas húmedas) y 100 (zonas áridas y soleadas) (Corominas,

1997).

Page 12: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

12

Las 3.200.000 hectáreas de regadío que se cultivan hoy en día suponen el 60%

de la producción agraria útil (Valiente et alter, 1998). Pero esta producción sólo

representa alrededor del 5% del producto interior bruto (Nadal et alter, 1995) y, sin

embargo, consume el 80% de la demanda total de agua (Nadal et alter, 1995 -

Valiente et alter, 1997).

Por este motivo, no es extraño que el uso agrícola del agua produzca tensiones

con los otros usos del agua: el urbano y el industrial. Estas tensiones se agudizan

en periodos críticos: verano y en épocas de sequía y, sobre todo, en zonas

deficitarias (zona mediterránea).

Nadal expone que para una correcta utilización del agua por parte del agricultor,

han de estar presentes varios aspectos: un uso eficiente en la aplicación del riego,

una correcta programación del momento y de la dosis de riego y un coeficiente de

uniformidad lo más alto posible (Nadal et alter, 1995).

Las pérdidas de agua que se producen durante la distribución pueden suponer

hasta un 50% del caudal inicial (Luján, 1992). Siendo el sector agrícola el que

más agua consume, esta falta de eficiencia en la distribución representa un

volumen de pérdida muy alto.

Nadal indica que el ahorro de agua que se puede conseguir, aumentando la

eficiencia, puede llegar a satisfacer las futuras necesidades urbanas, industriales

y agrícolas (Nadal et alter, 1995).

Page 13: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

13

1.2. CONSUMO EQUILIBRADO DE AGUA.

El agricultor ha de procurar realizar una correcta planificación en la distribución,

en la dosis y en la aplicación del agua, con la finalidad de ahorrar el mayor

volumen de agua posible (Valiente et alter, 1998 – Fereres, 1995 – Nadal et alter

1995). Esto quiere decir, que se ha de realizar un consumo sensato y equilibrado

del agua.

Las vías que permiten realizar un consumo equilibrado de agua son varias:

→ Los conductos de distribución del exterior de la explotación: se ha de exigir y

conseguir que los conductos se construyan con las mínimas pérdidas posibles

(pérdidas por filtración en embalses, falta de eficiencia en la distribución,

pérdidas por evaporación, etcétera).

→ Mecanismos de distribución en el interior de la explotación: es válido el

mismo principio que para el anterior punto.

→ Programación del riego: se ha de regar en el momento adecuado y con la

dosis precisa (según la necesidad del cultivo).

→ Eficiencia en la aplicación: se ha de seleccionar el sistema de riego más

eficiente posible y dotarlo de los medios necesarios para poder aumentar esa

eficiencia.

→ Uniformidad: se ha de procurar que la uniformidad sea elevada, evitando así

tener que aumentar las dosis para impedir zonas con déficit hídrico.

La programación de riegos se basa en el cálculo de la necesidad hídrica de un

cultivo con la finalidad de regar en el momento adecuado y con la dosis precisa.

Page 14: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

14

1.3. ESTIMACIÓN DE LAS NECESIDADES HÍDRICAS DE LOS CULTIVOS.

1.3.1. Descripción.

La necesidad hídrica de un cultivo se ha definido como: el volumen de agua

requerido para el proceso de evapotranspiración, desde la fecha de siembra o

plantación hasta el día de la recolección, de un cultivo dado en una región

climática específica, cuando el contenido de agua del suelo está mantenido

suficientemente por las precipitaciones y/o el riego, de tal forma que ésta no limita

el crecimiento de las plantas o el rendimiento de los cultivos (Martín de Santa

Olalla at alter, 1993).

El agua es un elemento indispensable de las plantas porque tiene una doble

función:

- Función constitutiva: ya que una proporción mas o menos alta de la planta está

constituida por agua.

- Función de transporte: porque el agua, al ser un disolvente, transporta las sales

minerales y los nutrientes del suelo a la planta.

Si se consideran ambas funciones como la totalidad, la función constitutiva

representa un porcentaje muy bajo respecto a la función de transporte. Martín de

Santa Olalla et alter(1993) cita un ejemplo esclarecedor: una hectárea de maíz,

que produce 20 Tm. de materia seca, a lo largo de su cultivo retiene 4 m3 de

agua y para ello habrá absorbido unos 6.000 m3 de agua, desde el suelo hasta la

planta.

Una vez que el agua ha realizado la función de transporte, pasa a la atmósfera en

forma de vapor a través de los estomas. A esta liberación de vapor se le llama

comúnmente evapotranspiración (ET).

Page 15: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

15

La evapotranspiración tiene, en realidad, 2 componentes:

- La evaporación, que es la cantidad de agua que, por un proceso de

vaporización, pasa del suelo a la atmósfera. Al inicio del cultivo el valor de la

evaporación es más alto que en etapas subsiguientes.

- La transpiración es la cantidad de agua que pasa, por el mismo proceso de

vaporización, de la planta a la atmósfera. Al final del cultivo este valor es más

alto que en etapas anteriores.

A efectos prácticos, estos dos componentes se determinan conjuntamente porque

representan el consumo de agua de la planta más el consumo de agua del suelo

que sustenta a la planta.

Los factores que influyen en la evapotranspiración son:

> Factores climáticos: Radiación, temperatura, humedad del aire, velocidad del

viento.

> Factores edáficos: Conductivilidad hídrica, capacidad hídrica, etcétera.

> Factores biológicos: Índice LAI, profundidad radical, etcétera.

> Factores fitotécnicos: Laboreo, rotación, orientación, densidad, poda.

> Factores geográficos: Extensión del área, efecto borde.

La evapotranspiración se puede determinar por varios métodos:

- Métodos directos: se utilizan unos aparatos que se denominan lisímetros. Los

lisímetros son: unos recipientes grandes llenos de suelo ubicados en la parcela

cultivada para recoger las condiciones naturales, de superficie desnuda o con

cubierta vegetal, utilizados para determinar la ET de un cultivo o la evaporación

de suelos desnudos (Aboukhaled et alter, 1986). Este es el método que sirve

para verificar o calibrar los otros métodos. Por supuesto, es un método inviable

en una explotación agrícola.

Page 16: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

16

- Métodos indirectos. Aquí se engloban tres tipos diferentes:

> Micrometeorológico: se basa en una combinación del balance de energía y

del transporte aerodinámico del vapor de agua, utilizando diversas variables

climáticas (temperatura, humedad, velocidad del viento, radiación).

> Balance hídrico del suelo: mide indirectamente la ET a partir de los

parámetros que intervienen en el balance hídrico (suelo, aire y planta).

> Fisiológico: Son técnicas que miden la pérdida de agua de la planta o de una

parte de ella. Se utilizan trazadores o termómetros que analizan el

movimiento de agua en la planta.

Debido a la dificultad que presenta la medida de la ET por métodos directos o

indirectos, éstos han sido sustituidos por diversos modelos de estimación.

El modelo más común es el que se basa en la evolución del coeficiente cultural

(Kc). Este coeficiente sirve para calcular la evapotranspiración de un cultivo (ETc)

con una periodicidad regular (días, semanas o meses) mediante la siguiente

relación:

ETc = ETo x Kc

Siendo ETo, la evapotranspiración de referencia del cultivo de referencia [mm].

ETc, la evapotranspiración del cultivo [mm].

Kc, el coeficiente cultural del cultivo.

Los cultivos de referencia pueden ser gramíneas o alfalfa. En algunos casos, se

denominaba a la a la ETo de las gramíneas como Etrg y al Kc correspondiente

Kcg; si la referencia es la alfalfa, se denominaba Etra y Kca respectivamente.

El Kc de un cultivo se define experimentalmente como la relación entre la ETc del

cultivo y la ETo medida.

Page 17: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

17

El modelo más extendido en el mundo para determinar las necesidades hídricas

es el de la FAO (Martín de Santa Olalla et alter, 1993). Este modelo se desarrolla

en cuatro etapas:

- Cálculo de la ETo mediante uno de cuatro métodos:

Penman

Radiación

Blaney-Criddle

Cubeta de evaporación clase A

- Evolución de la curva del Kc a lo largo del cultivo

- Cálculo de ETc mediante la relación: ETc = ETo x Kc

- Factores correctores de carácter local: Advección, humedad, fertilidad del

suelo, sistema de riego, salinidad, etc.

1.3.2. Punto óptimo de riego.

Es el momento más idóneo para el riego, tanto desde el punto de vista

agronómico como desde el punto de vista de la ingeniería del riego. Consiste en

regar de tal manera que la planta no sufra disminuciones en su rendimiento actual

ni futuro. Por ejemplo, si se regara sin tener en cuenta el lavado de sales,

posiblemente no se disminuiría la producción actual pero sí que se podría producir

una disminución en un futuro.

Desde el punto de vista de la ingeniería del riego, el tema es de vital importancia

porque puede determinar el sistema de riego, la dosis de riego y el intervalo de

riego.

Se ha de tratar de aunar los dos puntos de vista, para que el rendimiento no se

altere y para que el protocolo de riego sea viable.

Page 18: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

18

Martín Santa Olalla et alter(1993), cita tres métodos para determinar el punto

óptimo de riego:

1.3.2.1. Estado hídrico del suelo.

Se basa en el conocimiento del nivel de agua que hay en el suelo. La

programación del riego se basa en el punto en que se haya dedicido regar.

Existen 3 métodos para determinar la cantidad de agua que hay en el suelo:

- Resistencia eléctrica: Debido a que el agua es una solución salina, por la

cantidad de sales que lleva disueltas, la medida de la conductividad eléctrica

nos dará la cantidad de agua que hay en el suelo. Para ello, se utilizan unos

bloques de yeso o de nylon enterrados en el suelo. Debido a que se mide el

potencial osmótico y el potencial de tensión, estos bloques resultan afectados

por la salinidad. Son de poca aplicación en la agricultura y se utilizan en

investigación.

- Radiactividad: Se utiliza una fuente de neutrones. La energía de los neutrones

se pierde al chocar con los puentes de hidrógeno del agua. De tal manera, que

a una mayor cantidad de agua habrá una pérdida mayor de energía. Por su

naturaleza radiactiva, es utilizado por personal autorizado.

- Potencial hídrico. Se basa en la medición de la tensión que se origina en una

cápsula llena de agua. Esta cápsula tiene una membrana porosa que está en

contacto con otra superficie en la cual hay una cantidad distinta de agua. El

utensilio se llama tensiómetro y se calibra a 0 cuando el suelo está saturado

de agua. En el momento en que el suelo se seca, el agua del tensiómetro pasa

al suelo y provoca un vacío en la cápsula. Este vacío se registra mediante un

manómetro. Cuando la lectura llega a un valor determinado, se ha de regar.

Este valor depende del suelo y del cultivo.

Aunque la lectura tiene un cierto retardo se puede registrar continuamente y

puede servir para activar mecanismos de riego. Se utiliza en la agricultura y en

investigación.

Page 19: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

19

1.3.2.2. Estado hídrico de la planta.

Se basa en el conocimiento del agua que se mueve en la planta. Para llegar a

este conocimiento existen dos métodos:

- Tensión de agua. Se mide mediante la cámara de tensión xilemática. Para ello

se corta una muestra de tejido xilemático, por el que se hace pasar nitrógeno a

una cierta presión. La lectura se realiza cuando aparece la savia, debido al

empuje del gas nitrógeno.

Es un método destructivo y sólo se utiliza en investigación

- Temperatura. Cuando existe evapotranspiración, la temperatura en el exterior

de la planta es menor que la del aire que la circunda. A mayor

evapotranspiración, menor temperatura exterior habrá.

Se utilizan unos termómetros de infrarrojos de onda media que pueden medir a

una cierta distancia. Sirven para grandes extensiones de terreno.

1.3.2.3. Balance hídrico: suelo-planta-atmósfera.

Se basa en la medición del balance hídrico que resulta de sumar las entradas de

agua y de restar las salidas de ésta.

Al resultado del balance se le llama variación de la reserva de agua en el suelo y

es su valor el que determina el riego.

Las entradas de agua se deben a las precipitaciones (Pe), a la ascensión capilar

(Ge) y a la escorrentía superficial de salida (EsS)

Las salidas de agua se deben a la evapotranspiración (ET), a la percolación

profunda (Pp) y a la escorrentía superficial de entrada (EsE).

(Pe + Ge + EsS ) - (ET+Pp+EsE) + ∆w

El objetivo es mantener la variación de reserva de agua en el suelo (∆w) igual a 0.

Pero como no se riega a cada instante, la ∆w variará de 0 a un nivel que no

produzca la marchitez inviable de la planta. Este nivel es el que corresponde al

agua útil.

Page 20: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

20

El agua útil (AU) es la cantidad de agua que existe entre la capacidad de campo

(CC) y el punto de marchitez (PM).

AU = CC – PM

En la práctica agronómica, el hecho de que el margen de ∆w esté situado entre la

capacidad de campo y el punto de marchitamiento, no es sinónimo de que no

haya habido reducción del rendimiento en el cultivo; se ha de buscar un valor en

el que no haya reducción del rendimiento. A este valor se le llama nivel de

agotamiento permisible (NAP) y es el que corresponde al comienzo de la

disminución de la tasa de evapotranspiración. Quedando el intervalo de humedad

disponible en un punto que hay entre la capacidad de campo y el punto de

marchitamiento:

NAP = f * AU

Siendo f el factor de agotamiento permisible en el cual no se produce una

reducción en el rendimiento de la planta, dependiendo del tipo de cultivo y de la

evapotranspiración diaria que exista (Doorenbos, 1973).

Como la planta sólo puede extraer el agua mediante sus raíces, se define el

concepto de profundidad efectiva de las raíces (z1). Este valor depende de la

profundidad radical y de la profundidad del suelo cultivado. Siendo z1 el menor

valor de los dos.

A menudo, el valor que resulta de multiplicar NAP y z1 es denominado como

reserva fácilmente utilizable (RFU).

Las necesidades de riego netas (Nn) serán las siguientes:

Nn = (Pe + Ge + EsS ) - (ET + Pp + EsE) + ∆w

Siendo ∆w un valor que estará comprendido entre 0 y la RFU.

Page 21: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

21

1.3.3. Déficit hídrico.

Existe otra estrategia de riego, que no es objeto de este trabajo, pero que se va a

definir por considerar que tiene un futuro muy prometedor para zonas con déficits

hidráulicos estacionales o incluso anuales. A esta estrategia se la denomina riego

deficitario controlado (RDC) y se está aplicando puntualmente en algunas zonas

de clima mediterráneo (Levante murciano, Sur de Francia, etcétera).

El RDC es un conjunto de estrategias que se basan en una menor aportación de

agua de riego, en las épocas de escasez de agua, y en una posible aportación

suplementaria en las épocas de abundancia de agua, pero sin que exista una

disminución acusada de la productividad y de la calidad de los frutos.

Según cita (Segura, P., 1995) en la región murciana la infradotación hídrica oscila

entre 2.000 m3/ha y 3500 m3/ha entre los años 1991 y 1993, cifra que puede llegar

a corresponder a la cantidad de agua ahorrada con el RDC.

No hay que confundir el RDC con la disminución de rendimiento debida al déficit

de agua. La disminución de rendimiento ha sido estudiada por Doorenbos et alter

en su obra “Efecto del agua sobre el rendimiento de los cultivos”. Esta obra se

basa en la disminución del rendimiento de un cultivo, debido a una

evapotranspiración más baja de lo normal. Esta menor evapotranspiración está

causada por una menor aportación de agua.

Las estrategias sobre las que se basa el RDC son las siguientes:

- Períodos críticos en el cultivo. Se centra en suministrar agua en aquellos

estados fenológicos que puedan condicionar la producción y/o la calidad de la

cosecha. Cada cultivo tiene sus períodos críticos.

- Crecimiento vegetativo y del fruto. Se basa en evitar un exceso de vigor que

pueda inducir a una mayor demanda hídrica en estados fenológicos

posteriores. En estos cultivos podría ser interesante aportar al estado

fenológico de crecimiento del fruto el agua ahorrada anteriormente. En algunos

cultivos, el crecimiento del fruto es un periodo crítico en cuanto al déficit

Page 22: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

22

hídrico pero a la vez responden de una manera positiva al aporte de agua

(Cohen y Goell, 1984).

- Características del suelo. Para el RDC se recomiendan suelos poco profundos y

con poca retención hídrica, para que se puedan reponer de agua forma más

rápida y precisa y para que el sistema radical sea pequeño.

- Sistema de riego. El riego más aconsejable es el que se efectúa por el sistema

por goteo, por ser más preciso y tener una eficiencia más alta.

- Clima. Se recomienda la utilización del RDC en lugares con escasa pluviometría,

para alcanzar los efectos perseguidos con el RDC.

- Resistencia a la sequía. Existen diversas adaptaciones a la sequía: aumentar la

profundidad radicular, el ajuste osmótico por el cual una planta es capaz de

extraer agua con un potencial hídrico mas elevado del normal, el cierre estomático

para evitar la deshidratación foliar y el defoliamiento foliar.

En la bibliografía, constantemente se recomienda no extrapolar los resultados de

una experiencia con RDC de una zona a otra y se recomienda tener en cuenta

las necesidades de lixiviación de los cultivos, aportando agua suplementaria en

épocas en que no se carezca de ella (Segura, P, 1995).

Page 23: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

23

1.4. ESTIMACIÓN DE LAS NECESIDADES HÍDRICAS MEDIANTE EL MÉTODO

FAO-24

Uno de los métodos más utilizados para el cálculo de las necesidades hídricas de

los cultivos es el que publicó la FAO en 1974. Se publicó con el nombre de “ Las

necesidades de agua de los cultivos” (Doorenbos et alter, 1974) y en 1977 se

realizó una revisión. Por ser el volumen 24 de una serie de publicaciones de la

serie Riegos y Drenajes, es conocido con el nombre de FAO-24.

Este método consiste en una serie de pautas de aplicación de carácter práctico.

Es un método de aplicación mundial por intentar reflejar en sus datos la mayor

parte de los climas, cultivos y sistemas de riego que hay en el mundo.

Por ser un método generalista, sus autores admiten que hay que ser críticos con

los resultados obtenidos y, en la medida de lo posible, variar los datos para

adecuarlos a nuestras necesidades.

El método FAO-24 consta de tres partes diferenciadas:

- Cálculo de la evapotranspiración.

- Cálculo de las necesidades de riego.

- Cálculo del suministro de riego.

Desde la publicación de FAO-24 han pasado unos 25 años. A pesar del tiempo

transcurrido, este método sigue utilizándose ampliamente en todo el mundo.

Lógicamente, muchos de los aspectos de FAO-24 han quedado en desuso, se

han modificado o se han ampliado con nuevos datos o cálculos.

Page 24: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

24

1.4.1. Cálculo de la evapotranspiración del cultivo.

El cálculo de la evapotranspiración de un cultivo se compone de 4 partes:

- Cálculo de la evapotranspiración de referencia (ETo).

- Elección del coeficiente de cultivo (Kc).

- Cálculo de la evapotranspiración de cultivo (ETc).

- Factores locales que influyen en la ETc.

1.4.1.1. Cálculo de la evapotranspiración de referencia (ETo)

La evapotranspiración de referencia (ETo) se define como la evapotranspiración

de un cultivo de gramíneas verdes de 8 a 15 cm., de altura uniforme, con

crecimiento activo, que sombree el suelo y en el que no escasee el agua.

Normalmente, el cálculo de la ETo utiliza o se vale de factores climáticos

(temperatura, humedad, radiación, viento, etcétera).

Existen 4 métodos para calcular la ETo por la vía FAO-24, aunque últimamente se

ha añadido un quinto método:

- Blaney-Criddle.

- Radiación.

- Penman.

- Evaporímetro de cubeta.

- Penman-Monteith combinado (publicado en 1990 por la FAO).

A continuación, se exponen los datos mínimos para cada una de las cinco

determinaciones:

Page 25: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

25

Tabla 1: Datos necesarios para calcular la ETo.

Método Temperatura Humedad Viento Insolación Radiación Evaporación Condiciones

Locales

Blaney-Criddle * 0 0 0 - - 0

Radiación * 0 0 * (*) - 0

Penman * * * * (*) - 0

Cubeta clase A - * 0 - - * *

Penman-Monteith * * * * (*) - 0

* datos medidos

0 datos estimados

(*) datos cuando se dispone de ellos

- No se necesita

Los 4 primeros métodos se utilizan para períodos de 10 o 30 días, siendo la ETo

calculada, la media diaria en mm/día para el período considerado.

El quinto método se añadió en 1990 y puede servir para datos diarios y

mensuales.

A continuación, se exponen los 5 métodos.

1.4.1.1.1. Blaney-Criddle.

Este método utiliza la temperatura, el porcentaje de horas diurnas, la humedad

relativa y la velocidad del viento.

Primero, se determina un factor f mediante la siguiente fórmula:

f = P (0,46T + 8,13)

donde: P : Porcentaje medio de horas diurnas del día sobre las horas

diurnas anuales, véase tabla 1 del anejo 1 [%].

f : Factor de cálculo que depende de la temperatura y del

porcentaje medio de horas diurnas, véase tabla 2 del anejo 1.

T : Promedio de las temperaturas máximas y mínimas diarias [ºC].

Para determinar la ETo [mm dia-1], la figura 1 del anejo 1 se presentan 9 gráficos

en función de 3 tipos de humedad relativa mínima y de 3 tipos de porcentajes

Page 26: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

26

medios de horas diurnas del día sobre las horas diurnas anuales. Cada uno de

estos 9 gráficos contiene 3 rectas, correspondientes a 3 tipos de velocidad de

viento diurnos.

Es un método que sirve para estimaciones mensuales y que algunos autores

desaconsejan porque hace una estimación de la humedad, de las horas de sol y

del viento (Martín de Santa Olalla et alter, 1993 y Pizarro, 1996).

1.4.1.1.2. Radiación.

Este método relaciona la ET con la radiación, la temperatura y un factor de

ponderación W que depende de la humedad relativa media y del viento.

Para determinar la ETo se calcula con la siguiente fórmula:

ETo = función (Rs · W, humedad relativa media, viento diurno)

donde: ETo : Evapotranspiración de referencia [ mm día-1]

Rs : Radiación solar, véase tabla 5 del anejo 1 [ mm día-1].

W : Factor de ponderación en función de la temperatura y altitud,

véase tabla 6 del anejo 1.

La Radiación solar (Rs) se calcula mediante la fórmula:

Ra·Nn

baRs

+=

donde: a : Para un clima medio a =0,24.

b : Para un clima medio b =0,50

n : Horas de sol reales en el día [horas].

N : Horas de sol máximas en el día, véase tabla 4 del anejo 1 [horas].

Ra : Radiación extraterrestre, véase tabla 3 del anejo 1 [mm d-1 ].

Los valores de la radiación extraterrestre están tabulados en función del hemisferio,

de la latitud y del mes.

Page 27: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

27

Para determinar la ETo [mm d-1], se utiliza la figura 2 del anejo 1. En el que

presenta1 4 gráficos en función de 4 tipos de humedad relativa media. Cada uno

de los gráficos presenta 4 rectas en función de la velocidad del viento diurno.

Estas rectas relacionan el cálculo W·Rs con la ETo.

Pizarro (1996) desaconseja la utilización de este método; afirma que sólo tiene

validez en zonas húmedas. Martín de Santa Olalla et alter(1993) afirma que este

método es una simplificación del método Penman.

1.4.1.1.3. Penman.

El manual FAO-24 aconseja utilizar este método cuando se disponga de datos

meteorológicos completos: temperatura, humedad relativa, viento y radiación solar

o insolación (1974).

La ecuación de Penman (1949) se definió para determinar la evaporación de una

superficie libre de agua. Se basó en el balance energético de la superficie

evaporante y en el proceso de transformación turbulenta del vapor de agua.

La ecuación de Penman (Eo) original consta de 2 términos: el de radiación o debido

a la radiación solar (primer paréntesis) y el aerodinámico o debido al viento

(segundo paréntesis).

∆+γ

γ+

γ+∆

∆= Ea·Rn·Eo

donde: Eo : Evapotranspiración (Penman original) [mm d-1].

∆ : pendiente de la curva de presión de vapor en función de la

temperatura [mm de Hg].

γ : constante psicrométrica [mm de Hg].

Rn : radiación neta en la superficie de evaporación [mm d-1].

Ea : Presión vapor [mm d-1].

Page 28: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

28

( ) ( )as2 ee·U0092,01·35,0Ea −+=

donde: U2 : velocidad del viento diario a 2 metros de altura [millas h-1].

es : presión de vapor de saturación del aire [mm de Hg].

ea : presión actual de vapor del aire [mm de Hg].

El manual FAO-24 propone un método Penman modificado, para adaptar la

ecuación a la predicción de la necesidad de agua de los cutivos:

( ) ( ) ( )[ ]as ee·Uf·W1WRncETo −−+=

donde: ETo : evapotranspiración de referencia [mm dia-1].

c : factor de ajuste en función del viento diario y viento nocturno.

Véase tabla 7 del anejo 1.

1-W : factor de ponderación en función de la temperatura y de la

altitud del lugar. Véase tabla 6 del anejo 1.

Rn : Radiación neta en la superficie de evaporación [mm dia-1].

es : presión de vapor de saturación del aire [mb]. Véase tabla 9 del

anejo 1.

ea : presión actual de vapor del aire [mb]. Véase tabla 8 del anejo 1.

f(U) : función relacionada con el viento.

+=

100U

1·27,0)U(f 2

donde: f(U) : función relacionada con el viento.

U2 : velocidad del viento diario a 2 metros de altura [km dia-1].

nlns RRRn −=

donde: Rn : radiación neta [mm d-1].

Rns : radiación de onda corta [mm d-1]. Véase tabla 10 del anejo 1.

Rnl : radiación de onda corta [mm d-1].

Page 29: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

29

RaNn

5,025,075,0Rns

+=

donde: Rns : radiación de onda corta [mm d-1].

n : horas de sol recibidas [horas].

N : horas máxima de sol [horas]. Véase tabla 4 del anejo 1.

Ra : radiación extraterrestre [mm d-1]. Véase tabla 3 del anejo 1.

( ) ( )

=Nn

f·edf·tfRnl

donde: Rnl : radiación de onda larga [mm d-1].

f(t) : función de la temperatura. Véase tabla 11 del anejo 1.

f(ed) : función de la presión de vapor. Véase tabla 12 del anejo 1.

f(n/N)l : función de n/N . Véase tabla 13 del anejo 1.

n : horas de sol recibidas [horas].

N : horas máxima de sol [horas]. Véase tabla 4 del anejo 1.

1.4.1.1.4. Evaporímetro de cubeta.

El evaporímetro de cubeta es un tanque lleno de agua en el que se produce la

evaporación.

Con este método se miden los efectos integrados de la radiación, del viento, de la

temperatura y de la humedad.

La adecuada instalación y mantenimiento de la cubeta son fundamentales. El

manual FAO-24 hace aviso de una serie de problemas si no se cumplen las

condiciones de trabajo: diferencias de reflexión del agua y de la zona circundante,

transferencias de calor de la zona colindante, turbulencias del aire, etcétera.

Page 30: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

30

La evapotranspiración se calcula mediante la siguiente fórmula:

ETo = Epan · Kp

donde: ETo : evapotranspiración de referencia [mm dia-1].

Epan : evaporación de la cubeta [mm dia-1].

Kp : coeficiente de la cubeta de clase A. Véase cubeta de clase A

en la tabla 14 del anejo 1.

El coeficiente de la cubeta depende de varios factores: del tipo de cubeta, del

cultivo que la rodea, de la humedad relativa media diaria, de la distancia a

barlovento del tipo de cubierta vegetal.

La cubeta más utilizada es la del evaporímetro de cubeta de la clase A. Y puede

haber dos estrategias en cuanto al tipo de cubierta vegetal: cubierta verde baja y

barbecho de secano.

1.4.1.1.5. Penman-Monteith.

En un estudio efectuado por Jensen et alter (1990), con diversos métodos de

cálculo de la evapotranspiración, se comprobó que el método Penman-Monteith era

el que mejor se ajustaba a la medida de varios lisímetros (véase tabla 2).

Page 31: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

31

Tabla2. Sumario de estadísticas y su ranking para varios métodos de estimación mensual de la

evapotranspiración.

All Months Peak Month WeightedSEE(7)

Ranking Method (1)

% (2) SEE (3) b (4) r (5) ASEE (6) % SEE B R ASEE1 Penman-Monteith 101 0.36 1.00 0.99 0.36 97 0.52 1.03 0.99 0.47 0.40

2 1982 Kimberly-Penman 107 0.53 0.95 0.98 0.49 107 0.79 0.96 0.96 0.73 0.59

3 FAO-PPP-17 Penman 111 0.66 0.93 0.97 0.56 105 0.72 0.99 0.97 0.72 0.66

4 Penman (1963) 106 0.57 0.99 0.97 0.57 99 0.95 1.07 0.96 0.81 0.67

5 Penman (1963), VPD #3 113 0.67 0.93 0.97 0.57 105 0.77 1.00 0.96 0.77 0.68

6 1972 Kimberly-Penman 112 0.74 0.93 0.96 0.67 102 0.72 1.03 0.97 0.70 0.72

7 FAO-24 Radiation 114 0.73 0.91 0.97 0.59 110 0.88 0.95 0.96 0.78 0.73

8 FAO-24 Blaney-Criddle 108 0.68 0.95 0.96 0.64 106 0.98 0.98 0.94 0.97 0.76

9 FAO-24 Penman (c=1) 121 0.91 0.88 0.96 0.65 111 0.84 0.95 0.96 0.76 0.82

10 Jansen-Haise 85 0.84 1.11 0.95 0.71 83 1.44 1.15 0.92 1.06 0.95

11 Hargreaves et al. (1985) 108 0.88 1.00 0.93 0.88 101 1.47 1.07 0.87 1.39 1.05

12 Businger-van Bavel 121 1.10 0.87 0.92 0.90 110 1.19 0.97 0.91 1.16 1.08

13 FAO-24 Corrected Penman 127 1.16 0.82 0.96 0.65 122 1.53 0.86 0.93 1.00 1.10

14 FAO-24 Pan 100 0.92 0.94 0.92 0.88 95 1.58 1.03 0.82 1.57 1.11

15 SCS Blaney-Criddle 101 1.16 0.99 0.87 1.15 103 1.31 1.05 0.89 1.26 1.20

16 Christiansen pan 92 0.95 1.03 0.91 0.94 88 1.88 1.11 0.78 1.73 1.21

17 Pan evaporation 118 1.34 0.82 0.92 0.87 113 1.82 0.88 0.83 1.56 1.35

18 Turc 90 1.30 1.20 0.89 1.07 85 2.26 1.31 0.84 1.49 1.46

19 Priestley-Taylor 85 1.29 1.22 0.90 1.02 86 2.34 1.28 0.78 1.72 1.48

20 Thornthwaite 79 1.68 1.24 0.78 1.47 79 2.69 1.41 0.79 1.70 1.84

NOTES

(1) All equation estimates have been adjusted for the reference crop of the lysimeter.

(2) Average percentage of lysimeter measurements.

(3) Standard error of estimate for ET estimates in mm d-1 that have not been adjusted by regression.

(4) Regression coefficient (slope) for regression through the origin of lysimeter versus equation estimates.

(5) Correlation coefficient for regression through the origin of lysimeter versus equation estimates.

(6) Standard error of estimate for ET estimates in mm d-1 that have been adjusted by regression through the origin.

(7) Weighted standard error of estimate calculated as 0.7(0.67(Col. 4)+0.33(Col. 7) + 0.3(0.67(Col.9)+0.33(Col. 12).

Al método Penman-Monteith se le llama de “un paso” porque no maneja los

conceptos de evapotranspiración de referencia y de coeficiente de cultivo, frente a

los cuatro métodos tradicionales de FAO-24 que son de “dos pasos”.

Page 32: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

32

El método Penman-Monteith se basa en la valoración de la resistencia de la

cubierta vegetal y, para ello, se vale de la siguiente relación:

LAI·5,0R

r 1c =

donde: rc : resistencia de la cubierta vegetal [s m-1].

R1 : Resistencia media diaria (24 horas) de los estomas de una

simple hoja [s m-1].

LAI : índice de área foliar .

En una reunión que realizaron los expertos de la FAO en 1990 adoptaron el método

Penman-Monteith como nuevo estándar en la determinación de la

evapotranspiración.

Estos expertos determinaron que, ante la falta de datos sobre la resistencia de los

cultivos, se podía calcular la ETo por el método Penman-Monteith suponiendo los

siguientes valores:

Altura del cultivo igual a 12 cm (hc=0,12 m).

Resistencia de la cubierta vegetal igual a 70 s/m (rc=70s/m).

Albedo igual a 0,23 (α=0,23).

Estas características, coinciden con la definición de la evapotranspiración de un

cultivo de gramíneas, es decir, con la definición de evapotranspiración de referencia

(ETo).

Como se ha asimilado la ecuación de Penman-Monteith a un proceso de “dos

pasos”, es necesario seguir utilizando el coeficiente de cultivo para relacionarlo con

la evapotranspiración de referencia. La reunión de los expertos aconsejó seguir

utilizando los Kc que se detallaban en FAO-24.

Page 33: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

33

A continuación se expone la fórmula de Penman-Monteith para un cultivo con las

características anteriormente mencionadas:

( ))U0.34+(1+

eeU273T

900R408,0

ETo2

da2n

γ∆

−+

γ+∆=

donde: ETo : evapotranspiración de referencia [mm d-1 ].

Rn : radiación neta en la superficie del cultivo [MJ m-2 d-1 ].

G : flujo del calor del sol [MJ m-2 d-1 ].

T : temperatura media [ºC].

U2 : velocidad del viento a 2 metros de altura [m s-1 ].

(ea-ed) : déficit de la presión de vapor [kPa].

� : pendiente de la curva de presión de vapor [kPa ºC-1 ].

� : constante psicrométrica [kPa ºC-1 ].

nlnsn RRR −=

donde: Rn : radiación neta en la superficie del cultivo [MJ m-2 d-1 ].

Rns : radiación percibida de onda corta [MJ m-2 d-1 ].

Rnl : radiación neta de onda larga [MJ m-2 d-1 ].

R )Nn

0.50 + (0.2577,0 = R ans

donde: Rns : radiación percibida de onda corta [MJ m-2 d-1 ].

n : horas de sol percibidas [h].

N : horas máximas de sol [h].

Ra : radiación extraterrestre [MJ m-2 d-1 ].

Page 34: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

34

s64,7N ϖ=

donde: N : horas máximas de sol [h].

ws : ángulo horario de puesta de sol [rad].

( ))sen()dcos()lcos()lsen()dsen(dr6,37 R ssa ϖ+ϖ=

donde: Ra : radiación extraterrestre [MJ m-2 d-1 ].

dr : distancia relativa Sol-Tierra .

ws : ángulo horario de puesta de sol [rad].

d : declinación solar [rad].

l : latitud [rad].

( ))dtg()ltg( cos= 1s −ϖ −

donde: ws : ángulo horario de puesta de sol [rad].

l : latitud [rad].

d : declinación solar [rad].

)39,1J0172,0sen(409,0= d −

donde: d : declinación solar [rad].

J : número de día del año .

)J0172,0cos(033,01= dr +

donde: dr : distancia relativa Sol-Tierra .

J : número de día del año .

Page 35: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

35

2Dia309

Mes275= JDIA −

+−

donde: JDIA : Número de día del año para estimación diaria .

Mes : Número de mes del año en curso .

Dia : Número de día del mes del año en curso .

23,15Mes42,30= JMES −

donde: JMES : Número de día del año para estimación mensual .

Mes : Número de mes del año en curso .

)T+ T( )ed0.14 - (0.34 0.1)+ Nn

(0.910 . 2.45 = R 4minima

4maxima

-nl

9

donde: Rnl : radiación neta de onda larga [MJ m-2 d-1 ].

n : horas de sol percibidas [h].

N : horas máximas de sol [h].

ed : presión actual de vapor [kPa].

Tmaxima : temperatura máxima del aire [ºK].

Tminima : temperatura mínima del aire [ºK].

)tmax(a)tmin(a

mediad

e50

e50

HR= e

+

donde: ed : presión actual de vapor [kPa].

ea(tmin) : presión de vapor saturante en la temperatura mínima [kPa].

ea(tmin) : presión de vapor saturante en la temperatura máxima [kPa].

HRdmedia: humedad relativa media [%].

Page 36: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

36

+ 3,237T

T27,17

a e·6108,0= e

donde: ea : presión de vapor de saturación a la temperatura T [kPa].

T : temperatura [ºC].

ClP

00163,0= γ

donde: y : constante psicrométrica [kPa ºC-1].

P : presión atmosférica [kPa].

Cl : calor latente de vaporización [MJ kg-1].

26,5

T273alt0065.0)T273(

3,101= P

+−+

donde: P : presión atmosférica en la altitud alt [kPa].

T : temperatura del aire [ºC].

alt : altitud [m].

)T10·361,2(501,2= Cl 3−−donde: Cl : calor latente de vaporización [MJ kg-1].

T : temperatura del aire [ºC].

( )2a

3,273T

e4098

+=∆

donde: A : pendiente de la curva de presión de vapor en saturación

[kPaºC-1].

ea : presión de vapor de saturación a la temperatura T [kPa].

T : temperatura del aire [ºC].

Page 37: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

37

1.4.2. Coeficiente de cultivo (Kc).

El coeficiente de cultivo relaciona la evapotranspiración de referencia con la

evapotranspiración del cultivo:

ETcETo

Kc =

Los factores que pueden influir en el coeficiente de cultivo son: las características

del cultivo, la fecha de siembra o plantación, el ritmo de desarrollo del cultivo, la

duración del período vegetativo, la humedad relativa, el viento, etcétera.

El manual FAO-24 resume los factores que influyen en el coeficiente de cultivo, en

una agrupación de cultivos.

Tabla 3. Factores que influyen en diversos tipos de cultivo.

FACTORES TIPO DE CULTIVOA B D E F G H L

Cubierta vegetal PP PPHeladas PP PPHumedad PP PP PP PP PPViento PP PP PP PP PP PPEdad PP PP PPFrecuencia riegos o lluvias PP PP PPTextura del suelo PPTipos de cultivo

Leyenda:

A = Cultivos extensivos y de hortalizas

B = Arroz

C = Caña de Azúcar

D = Alfalfa

E = Arboles caducifolios y de nuez

F = Cítricos

G = Uva

H = Banana

I = Hierbas acuáticas

J = Café

K = Té

L = Suelos desnudos

Page 38: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

38

Los cultivos de caña de azúcar [c], hierbas acuáticas (I), café (J) y té (K) se han

omitido por no tener mucho interés en España.

Cada uno de estos 12 tipos de cultivos puede agrupar uno o más cultivos y

corresponden a criterios comunes en la aplicación del coeficiente de cultivo.

a) cultivos extensivos y de huerta

Los cultivos extensivos y de huerta se presentan con 4 fases de desarrollo: fase

inicial, fase de desarrollo, fase media y fase final.

Cada una de estas fases tiene su duración y tiene asignado un coeficiente de

cultivo.

El coeficiente de cultivo de la fase inicial de estos cultivos se determina a partir de

unos gráficos que relacionan la frecuencia de riego/lluvias más la ETo diaria con el

coeficiente de cultivo. En cálculo del Kc inicial del anejo 4 se puede ver el gráfico

y la forma de estimar el Kc inicial.

El coeficiente de cultivo de la fase media y de la fase final se determina a partir de

uno gráficos que relacionan cada uno de los cultivos con la humedad relativa

mínima y con el viento diario.

La fase inicial tiene un Kc constante, la fase de desarrollo tiene un Kc que aumenta

linealmente a lo largo de los días, la fase media tiene un Kc constante y la fase final

tiene un Kc que disminuye linealmente a lo largo de los días.

Para determinar el Kc de la fase de desarrollo se realiza una estimación a partir del

Kc inicial y del Kc medio y se multiplica por el número de días transcurridos de la

fase.

Para determinar el Kc de la fase final se realiza una estimación a partir del Kc

medio y del Kc final y se multiplica por el número de días transcurridos de la fase.

Page 39: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

39

b) arroz.

Para nuestro país se considera que el cultivo del arroz se desarrolla en la estación

seca, aunque en otros lugares del mundo puede ser en la estación húmeda.

Los valores de Kc se dividen en función del viento y se agrupan en 4 fases: primer

mes de cultivo, segundo mes de cultivo, mediados del período y 3-4 últimas

semanas de cultivo.

d) alfalfa, trébol, leguminosas herbáceas y pastos.

Se desarrolla de forma similar a los cultivos extensivos, aunque las 4 fases se

desarrollan de 2 a 8 veces al año.

En la práctica, se define un Kc medio para todo el cultivo en función de los vientos y

de la humedad.

e) árboles caducifolios frutales y de nuez.

En este tipo de cultivo, se presentan valores de Kc para cada mes, excepto en los

meses de menos necesidad hídrica.

Los valores de Kc se definen en función de: el tipo de cultivo, el mes de cultivo, el

tipo de cubierta vegetal, el tipo de viento, la humedad relativa, el tipo de invierno y

la edad de las plantaciones.

En algunos casos, se aplica el coeficiente de cultivo de la fase inicial de los cultivos

extensivos.

f) cítricos.

Los cítricos se presentan con valores de Kc mensual.

Los valores de Kc dependen de: tipo de cítrico, mes de cultivo, tipo de cubierta

vegetal y edad de la plantación.

Page 40: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

40

g) uva.

La uva se presenta con valores de Kc mensual.

Los valores de Kc dependen de: mes de cultivo, tipo de helada, tipo de viento y

humedad relativa.

h) plátano

El plátano se presenta con valores de Kc mensual.

En el plátano se diferencian dos estaciones: la primera que corresponde a las

plantas originales y la segunda que corresponde al hijo que sale. Hay un momento

en que la planta original es cortada, quedando en el cultivo el hijo.

Los valores de Kc dependen de: tipo de estación, mes de cultivo, tipo de viento y

humedad relativa.

l) suelos no cultivados o desnudos.

En los suelos desnudos se produce una pérdida de agua que está en función de la

evaporación (E) que tienen.

El valor de Kc depende de la textura del suelo y de la frecuencia de riego. Para ello,

se utilizan los gráficos de la fase inicial de los cultivos extensivos, para después

realizar un ajuste en función del tipo de suelo.

1.4.3. Determinación de la evapotranspiración del cultivo (ETc).

La evapotranspiración del cultivo se determina mediante la fórmula:

ETc = ETo · Kc

El valor de la ETc se suele expresar en mm por período; el periodo se puede

expresar en mes, semana, días, etcétera.

Page 41: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

41

Cuando la ETo se mide con un tanque evaporimétrico la ETc se halla mediante la

relación:

ETc = ETo · Kc · Kp

Siendo Kp, el coeficiente de la cubeta.

1.4.4. Factores locales que influyen en la ETc.

Existen una serie de factores, generalmente locales, que pueden variar la

evapotranspiración de un cultivo.

El manual FAO-24 los divide en 5 grupos:

Clima

Humedad del suelo

Método de riego

Prácticas de cultivo

Rendimiento de los cultivos

1.4.4.1. Clima.

Dentro de las variaciones debidas al clima se encuentran los siguientes factores:

- Tiempo: Es la variación de ETc que se puede producir temporalmente por el tipo

de clima.

- Distancia: Es la variación ocasionada por la distancia a la que se encuentra la

estación meteorológica. Las variaciones de la estimación de la ETC en zonas con

climas extremos son más acusadas que en los climas suaves.

- Advección: Son las variaciones que se producen cuando el lugar de medición

micrometeorológico tiene unas características distintas a la zona de cultivo. Estas

variaciones pueden cambiar la ETo en una proporción que va desde la mitad a la

vez y media del valor inicial estimado. Se calcula en función del tamaño del cultivo

puesto en regadío.

Page 42: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

42

- Altitud: La ETc de un cultivo varía con la altitud. La fórmula de Penman-Monteith

lo contempla al tener en cuenta la constante psicrométrica. La constante

psicrométrica depende de la presión y por tanto de la altitud.

1.4.4.2. Humedad del suelo.

- Nivel de humedad: Son las variaciones de evapotranspiración que se producen

en un cultivo cuando disminuye la tensión de humedad del suelo. Normalmente, la

ET corresponderá a la ETc máxima, mientras la tensión de humedad esté próxima

a la capacidad de campo (0,2-5 atmósferas), pero a medida que aumente la

tensión de humedad irá disminuyendo la ETc del cultivo.

- Absorción de agua por el suelo: El tipo y profundidad de las raíces serán

factores determinantes para la absorción de agua por el suelo y, por tanto, la

evapotranspiración del cultivo

- Niveles freáticos: Los niveles freáticos cercanos pueden disminuir la ETc del

cultivo al causar déficits de oxígeno para las raíces.

- Salinidad: La salinidad aumenta la presión osmótica y puede reducir la absorción

de agua del suelo, provocando una alteración de la ETc del cultivo.

1.4.4.3. Método de riego.

El sistema de riego puede afectar a la evapotranspiración del cultivo, en tanto en

cuanto varía las condiciones del microclima.

Los riegos a voleo (aspersión) provocan una modificación temporal de la

evaporación al variar la temperatura y la humedad de la zona de riego.

En los riegos por goteo puede haber una disminución de la ETc al aplicarse el

agua localmente. Esta disminución ocurre en campos con cultivos espaciados,

suelos arenosos y con gran evaporación.

En riegos localizados, Pizarro (1996) propone calcular un coeficiente de

localización en función del área sombreada y de las relaciones estudiadas por

Page 43: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

43

diversos autores entre el área sombreada y el coeficiente de localización. Este

factor provoca una menor evapotranspiración porque el riego se aplica a zonas

puntuales, generalmente a la sombra del cultivo.

La fracción del área sombreada es la relación que existe entre la superficie

proyectada por un cultivo y la superficie total donde está asentado el cultivo.

La relación entre la fracción de área sombreada y el coeficiente de localización ha

sido estudiada por diversos autores y es la siguiente:

Aljibury Kl = 1,34·A

Decroix Kl = 0,1 +A

Hoare Kl = 0,5·A + 0,5

Keller Kl = 0,85·A + 0,15

Siendo; Kl : coeficiente de localización

A : fracción área sombreada

Pizarro propone realizar la media de los 2 coeficientes de localización más

próximos a la media y rechazar los valores que son más extremos.

1.4.4.4. Prácticas de cultivo.

La fertilización inadecuada puede provocar variaciones en la ETc al haber

alteraciones en el desarrollo de las raíces.

La densidad de plantación tiene unos efectos sobre la ETc similares a los de la

cubierta sombreada.

Los paravientos artificiales pueden variar la ETc de un cultivo en zonas ventosas.

Page 44: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

44

1.4.4.5. Rendimiento de los cultivos.

La evapotranspiración tiene una estrecha relación con el rendimiento del cultivo.

En algunos casos, al igual que en la RDC, se adopta como estrategia un menor

rendimiento del cultivo mediante una menor evapotranspiración.

Esta menor transpiración se produce al regar menos la zona del cultivo.

1.4.5. Balance hídrico.

El balance hídrico es una metodología de cálculo de las necesidades hídricas que

se base en controlar las entradas y salidas de agua y la variación que se produce

en la reserva de agua del suelo.

El balance hídrico engloba una serie de variables y es el paso previo al cálculo de

las necesidades netas de riego.

Las variables que integran el balance hídrico son:

Evapotranspiración del cultivo

Precipitaciones efectivas

Contribución de aguas subterráneas

Percolación profunda

Variación del agua almacenada en el suelo.

1.4.5.1. Evapotranspiración del cultivo.

Se aplicará el dato obtenido por uno de los cinco métodos de cálculo de la

evapotranspiración de referencia, más el correspondiente coeficiente de cultivo.

Si se dispone de datos climáticos medios, se aplicará el valor que corresponda a

las máximas necesidades de riego.

Page 45: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

45

En los casos de riego localizado se aplicará el coeficiente de localización en

función del área sombreada por el cultivo.

Para proyectos grandes se aplicará el coeficiente corrector de advección.

1.4.5.2. Lluvia efectiva.

El conocimiento de la lluvia es indispensable para poder planificar el riego. Se

pueden aplicar métodos de cálculo de precipitación para un período deseado,

pero estos datos tienen que venir apoyados de un gran número de años.

La lluvia efectiva es la parte de agua de lluvia que llega a la zona de las raíces; el

resto se pierde por evaporación en la zona aérea, por percolación o por

escorrentía.

Existen diversos métodos para calcular la precipitación efectiva:

- Porcentaje de la lluvia. Se aplica un coeficiente a la precipitación

Pe=A·P

siendo: Pe : precipitación efectiva [mm/mes]

P : precipitación [mm/mes]

A : porcentaje [%]

- Método FAO/AGWL (climas áridos o subáridos)

Pe = 0,6·P –10 à P < 60 mm/mes

Pe = 0,8·P –25 à P > 60 mm/mes

siendo: Pe : precipitación efectiva [mm/mes]

P : precipitación [mm/mes]

- Método de la USDA Soil conservation Service:

Pe = P(125 –0,2P)/125 à P < 250 mm/mes

Pe =125+ 0,1P à P > 250 mm/mes

siendo: Pe : precipitación efectiva [mm/mes]

P : precipitación [mm/mes]

Page 46: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

46

- Método empírico (con datos locales):

Pe = A1·P – B1 -> P<C1 mm/mes

Pe = A2·P – B2 -> P<C2 mm/mes

siendo: Pe : precipitación efectiva [mm/mes]

P : precipitación [mm/mes]

A1 : valor empírico para la zona

B1 : valor empírico para la zona

C1 : valor empírico para la zona

A2 : valor empírico para la zona

B2 : valor empírico para la zona

C2 : valor empírico para la zona

- No se considera.

En algunos casos no se considera por ser cultivos en invernadero o porque no

interesa tener en cuenta la precipitación.

1.4.5.3. Contribución de aguas subterráneas (Ge).

Se han de considerar los casos en que existan aguas subterráneas a una

profundidad menor de 4 metros.

El manual FAO-24 relaciona la Ge con el tipo de suelo y con la profundidad de las

aguas subterráneas.

En la práctica, no se considera, por ser un fenómeno minoritario de carácter local.

1.4.5.4. Percolación profunda (F).

Es el agua que pasa a los horizontes profundos y no está al abasto de las raíces.

Depende del tipo de suelo. Los suelos ligeros (arenosos) tendrán una mayor

percolación que los suelos pesados (arcillosos).

No hay que confundir la percolación profunda con la percolación debida a la

eficiencia de la aplicación o con la percolación provocada para evitar acúmulos

Page 47: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

47

de sales en la rizosfera. Son fenómenos separados que no han de contabilizarse

como percolación profunda.

En la práctica, el fenómeno de la percolación se ha de determinar

experimentalmente en el campo de cultivo.

1.4.5.5. Variación del agua almacenada en el suelo (∆w).

La reserva de agua en el suelo puede variar desde prácticamente cero hasta un

nivel llamado capacidad de campo. La capacidad de campo (CC) es cuando la

reserva de agua en el suelo está en su máximo nivel de capacidad. Existe un nivel

superior a este, pero termina por desaparecer en forma de escorrentía. El valor

cero en la CC supondría la extinción total de cualquier forma de vida.

En la práctica agrícola se suele considerar un nivel mínimo, a partir del cual se

produce el marchitamiento de la planta. Este nivel se llama punto de

marchitamiento (PM). El agua contenida desde el punto de marchitamiento hasta

el nivel de capacidad de campo se llama agua útil (AU).

Por seguridad, se considera un nivel más cercano al de la capacidad de campo, a

partir del cual no se produce disminución de rendimiento en la producción del

cultivo. Este nivel se llama nivel de agotamiento permisible. El agua contenida

desde este nivel hasta la capacidad de campo se llama reserva fácilmente

utilizable (RFU).

La medida de la variación de agua en el suelo tiene por objeto que un cultivo no

agote el agua que hay en la RFU o en el AU.

El valor de la variación de agua en el suelo determinará el momento y la dosis de

riego.

Page 48: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

48

Hay autores que indican una cierta relación entre la textura del suelo y los valores

de CC y PM. Yagüe (1996) cita dos fórmulas que relacionan la textura con la CC y

el PM, pero aconseja utilizarlas cuando no se disponga de análisis. En el capítulo

2 del anejo 4 se exponen las dos fórmulas.

FAO-24 relaciona las clases texturales con la tensión de humedad del suelo y con

el porcentaje de humedad del suelo, a la vez que dice que el punto de

marchitamiento corresponde a una tensión de humedad de 16 atm. y la CC a una

tensión de humedad de 0,2-0,3 atm.

1.4.6. Necesidades netas de riego (Nn).

La necesidad neta de riego de un cultivo es la cantidad de agua que resulta de

considerar las entradas de agua, las salidas de agua y la variación de agua en la

reserva del suelo.

Las necesidad neta de riego se expresa mediante la siguiente fórmula:

Nn = ( ETc + F + R ) – ( Pe + Ge + N ) + )W

Siendo:

ETc=Evapotranspiración Cultivo [mm] Pe = Lluvia Efectiva [mm]

F = pérdidas por percolación [mm] Ge = Aportación Capilar [mm]

R = Escorrentía de salida [mm] N = Escorrentía de entrada [mm]

)w = variación de la reserva de agua [mm]

A menudo, se considera F, R, Ge y N igual a cero, por su pequeña aportación. De

esta manera, la fórmula quedaría así:

Nn = Pe – ET + )W

Las necesidades netas de agua quedan compensadas con el déficit del balance

hídrico.

Page 49: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

49

El riego se efectuará cuando la variación de agua en el suelo ()w) llegue a una

tensión superficial de unas 16 atmósferas. En este punto, si no se riega, la planta

se marchitará irreversiblemente.

El riego sin disminución de rendimiento se realizará cuando la variación de agua

en el suelo coincida con el nivel de agotamiento permisible. La tensión superficial

en este nivel es variable en función del cultivo.

Para que no haya reducción de la ET, y por tanto, reducción del rendimiento en el

cultivo, es necesario regar antes de que se llegue al punto de marchitamiento.

Este punto se ha estimado para cada cultivo y proporciona un valor que

corresponde a la reserva fácilmente utilizable (RFU).

El agua que se contiene en la RFU es la siguiente:

RFU = ( CC-PM ) · z · NAP

Siendo: RFU : Reserva fácilmente utilizable [mm]

CC : Humedad en la capacidad de campo [mm/cm]

PM : Humedad en el punto de marchitez permanente [mm/cm]

z : Profundidad efectiva de las raíces [cm]

NAP : Nivel de agotamiento permisible [tanto por uno]

En ciertas ocasiones se expresa CC y PM como porcentaje en peso. Para

convertir estos valores en mm por centímetro de suelo, se ha de multiplicar por la

densidad aparente del suelo en gramos por centímetro cúbico.

1.4.7. Lavado de sales.

El efecto osmótico de las sales disueltas en el agua sobre las raíces, hace que las

plantas tengan que hacer un esfuerzo adicional para absorber agua. Además del

potencial hídrico han de vencer el potencial osmótico.

Page 50: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

50

Si el agua en el suelo no es un factor limitante, la planta podrá vencer la suma de

los dos potenciales. Pero, a menudo, el potencial osmótico aumenta por un efecto

acumulativo y llega un momento en que la planta no es capaz de absorber agua.

El efecto que se produce en la planta es, primero una disminución paulatina del

rendimiento, para después morir.

Para evitar la salinización de un terreno se aplica una dosis suplementaria de

agua. Esta dosis suplementaria ha de evitar la acumulación de sales en el suelo y

realizar un lavado del suelo.

La necesidad de lixiviación depende del sistema de riego, de la concentración

máxima permisible de sal en el suelo y de la concentración de sal en el agua. La

concentración de sal se relaciona eléctricamente mediante la conductividad

eléctrica. En las siguientes fórmulas se puede ver las necesidades de lixiviación

para dos método de riego:

-riego por gravedad y aspersión a baja frecuencia:

CEaCEs5CEa

LR−

=

siendo LR : Requerimiento de lavado .

CEa : Conductividad eléctrica del agua de riego [dS/m]

Ces : Conductividad eléctrica del extracto de saturación del suelo

para la producción deseada [dS/m].

-riego por goteo y aspersión de alta frecuencia:

MaxCEs·2CEa

LR =

siendo LR : Requerimiento de lavado .

CEa : Conductividad eléctrica del agua de riego [dS/m]

MaxCe : Conductividad eléctrica del extracto de saturación del suelo

para un descenso en la producción del 100% [dS/m].

Page 51: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

51

Como puede verse, existe una relación entre la concentración de sal en el suelo y

la producción obtenida.

En el manejo del riego es necesario determinar el descenso de la producción

deseada, en función de la concentración de sal en el agua. De lo contrario, con

aguas salinizadas sería necesario regar con un volumen muy elevado de agua.

La relación entre la producción deseada y el grado de tolerancia del cultivo debido

a la sal del suelo es lineal. Para determinar la conductividad eléctrica del suelo

con la producción deseada se aplica la siguiente fórmula:

%o%100%o

S CEP100

CECECE +⋅

=

donde CEs : Conductividad eléctrica máxima permisible para la producción

deseada [dS/m].

CE0% : Conductividad eléctrica para una producción del 0 % [dS/m].

CE100% : Conductividad eléctrica para una producción del 100 %

[dS/m].

P : Producción deseada [%].

La fracción de lavado (Fl) es la relación que se aplicará a la necesidad neta de

agua y es igual a 1-LR.

1.4.8. Eficiencia de la aplicación.

La eficiencia es un factor corrector que se ha de tener en cuenta por la propia

naturaleza del sistema de riego, que no se comporta de una manera perfecta en

la distribución del agua.

La eficiencia en la aplicación suele ser muy baja en los riegos por gravedad y muy

buena en los riegos localizados.

Page 52: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

52

Existe otro factor corrector que depende de algunos sistemas de riego: el

coeficiente de uniformidad (CU). El CU es la variación que se produce en la

aplicación del agua entre un elemento y otro (aspersor, gotero, etc.). El CU es un

factor de carácter hidráulico. En algunos casos, se considera el CU como un

factor incluido en la eficiencia de la aplicación.

1.4.9. Necesidades brutas de riego.

Es la necesidad adicional de agua que se aplica a la necesidad neta, para realizar

el lavado de sales del suelo o para solventar las carencias de agua en la

eficiencia de la aplicación.

Entre la fracción de lavado(Fl) y la eficiencia en la aplicación(Ea), se escoge el de

corrección que implique mayor gasto de agua.

Cuando Ea < Fl, se aplicará la Ea. Siendo la necesidad bruta de riego la siguiente

(Nb):

EaNn

Nb =

siendo Nb : Necesidad bruta de riego [mm].

Nn : Necesidad neta de riego [mm].

Ea : Eficiencia en la aplicación .

Cuando Ea > Fl, se aplicará la Fl. Siendo la necesidad bruta de riego la siguiente

(Nb):

FlNn

Nb =

siendo Nb : Necesidad bruta de riego [mm].

Nn : Necesidad neta de riego [mm].

Fl : Fracción de lavado .

Page 53: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

53

1.4.10. Programación del riego.

La programación del riego es una práctica que depende de multitud de factores:

- Períodos críticos.

- Momento de la aplicación.

- Dosis a aplicar.

- Reserva de agua al inicio del cultivo.

- Duración del riego.

1.4.10.1. Períodos críticos.

Cada cultivo tiene unos períodos críticos con respecto a la tensión de humedad

del suelo; éstos son debidos a las propias características de los cultivos.

En algunos casos, la falta de agua puede comportar una mejora en la calidad de

la producción. En otros casos, el cultivo prefiere suelos húmedos.

Pero, en la mayoría de los casos, existen unos períodos críticos en la falta de

agua que pueden afectar a la calidad y cantidad de la producción. Estos períodos

críticos pueden coincidir con uno o más estados fenológicos; por ejemplo, en el

maíz existen diversos períodos críticos: en la inflorescencia, en la polinización y

en la fructificación.

La disminución en la producción es una estrategia que se adopta en la

programación del riego cuando existen carencias de agua.

La relación que existe entre la producción obtenida y la cantidad evaporada es

cuasi lineal, a menor evapotranspiración menor será la producción de un cultivo.

Esta relación depende del cultivo y de la fase en que se encuentre.

Page 54: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

54

La relación es la siguiente:

−=−

ETmETa

1KyYmYa

1

donde Ya : Producción obtenida en función de la cantidad

evapotranspirada con carencia de agua .

Ym : Producción obtenida cuando no existe carencia de agua .

Km : Factor de respuesta del cultivo .

ETa : Evapotranspiración que se produce cuando existe carencia de

agua [mm/fase-s].

ETm : Evapotranspiración que se produce cuando no existe carencia

de agua [mm/fase-s].

La relación se puede aplicar para una o más fases del cultivo.

1.4.10.2.Momento de riego.

El momento de riego vendrá dado por la elección de diversas estrategias:

- Nivel de humedad en la RFU: El momento de riego se producirá cuando la RFU

llegue a un nivel determinado (cuando se agote la RFU, cuando se agote un

porcentaje determinado de la RFU, etcétera).

- Intervalo de riego: Se puede fijar el intervalo de riego para regar en períodos

constantes. Es una estrategia muy utilizada en riegos localizados o en

comunidades de regantes.

- Períodos concretos: Consiste en regar en unos periodos concretos. Se puede

utilizar en el riego deficitario controlado (RDC), en comunidades de regantes.

1.4.10.3. Dosis a aplicar.

La dosis a aplicar depende del gasto que haya hecho el cultivo en un período

concreto y de la variación de la reserva de agua en el suelo.

La dosis variará en función del porcentaje de agua que tenga la RFU al inicio del

riego y del porcentaje de agua que tenga al final del mismo.

Page 55: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

55

1.4.10.4.Reserva de agua al inicio del cultivo.

Todo cultivo tiene una reserva inicial de agua en el suelo en función de lo que ha

llovido anteriormente, de un prerriego inicial. En los cultivos plurianuales, la

reserva inicial de agua en la programación ha de ser la misma que tenía en la

anterior programación.

Una forma de referir la reserva inicial es con un porcentaje determinado de RFU.

1.4.10.5.Duración del riego.

La duración del riego depende de diversos factores: del volumen de agua a

aportar, de la infiltración del terreno y del caudal de la instalación.

La velocidad de infiltración depende de las propiedades físicas y químicas del

suelo. Las propiedades físicas que afectan a la infiltración son: la textura del

suelo, la pendiente del suelo y la humedad del suelo. Las propiedades químicas

que afectan a la infiltración son concentraciones de determinadas sales o la

calidad del agua de riego.

Para conocer la tasa de infiltración real es necesario realizar pruebas periódicas

en el campo, ya que puede variar en el tiempo.

Page 56: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

56

1.5. Utilización de la informática para el cálculo de las necesidades hídricas.

La informática es una disciplina que realiza el tratamiento automático de la

información por medio de ordenadores.

Así pues, la informática es una herramienta que puede simplificar la complejidad

del tratamiento de la información para el cálculo de las necesidades hídricas.

Normalmente, se pueden escoger dos estrategias para realizar este cálculo:

- Tiempo real: Se basa en datos meteorológicos diarios reales.

- Previsión: Se basa en datos meteorológicos medios para el periodo considerado

(mes, quincena, semana).

Para realizar el tratamiento de la información se utilizan tres ejes fundamentales:

- Análisis: Es el conjunto de procedimientos mediante los cuales se analiza cómo

se han de recoger y procesar los datos para que tengan una entidad inteligible.

- Programa. Es el conjunto de instrucciones mediante las cuales se realiza el

tratamiento de los datos.

- Ordenador. Es el aparato a través del cual se realiza el tratamiento del conjunto

de datos.

El análisis es una tarea que requiere a técnicos en informática pero que también

implica a técnicos de otras disciplinas. El analista, como su nombre indica, ha de

analizar cómo le llegará la información, cómo tratar esta información, cómo se

envía la información procesada, de qué herramientas dispone, etcétera.

El conjunto de instrucciones que forman parte de un programa está escrito con un

lenguaje determinado. El lenguaje traduce el programa escrito a otro conjunto de

instrucciones (lenguaje máquina) más inteligible para el ordenador. El lenguaje ha

de tener instrucciones capaces de recibir, tratar y enviar la información.

En la actualidad, existen lenguajes de tipo visual, que liberan al programador de la

necesidad de describir la apariencia y el lugar de inserción de la información que

Page 57: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

57

se ofrece, tanto por el monitor como por la impresora. Uno de los lenguajes

visuales más extendidos es el lenguaje Visual-Basic. La palabra BASIC hace

referencia a que en su origen partía de las instrucciones del lenguaje BASIC

(Beginens All-Purpuse Symbolic Instrucions Code) que resultaba ser un lenguaje

muy popular por facilidad de uso.

Normalmente, el lenguaje y el programa traducido funcionan sobre otro lenguaje

que se llama sistema operativo. El sistema operativo, por si solo, no realiza nada,

pero es el punto de unión entre los programas y el ordenador.

El ordenador es una herramienta que contiene una serie de dispositivos para

recibir, tratar y enviar la información. Estos dispositivos pueden llegar a ser

numerosos, pero el más esencial es la unidad central de proceso de datos, o

procesador, porque realiza el tratamiento de la información que le llega a través

de un canal de información y la envía tratada.

La información se puede recibir de múltiples maneras: a través del teclado, del

ratón, de dispositivos de almacenamiento de datos, de dispositivos de

comunicación de datos (línea telefónica, redes de datos, etc.). La información

tratada se puede enviar por pantalla, por impresora, por dispositivos de

almacenamiento de datos, por dispositivos de comunicación de datos, etc.

Una forma de almacenar la información es en unos ficheros electrónicos que se

denominan base de datos. Las bases de datos suelen ser dispositivos de

almacenamiento de datos en los que la información se guarda de una forma

lógica. Sirven para facilitar al ordenador y al usuario la recepción, el tratamiento,

el almacenamiento y el envío de datos.

Page 58: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

58

1.6. PROGRAMAS EXISTENTES PARA EL CÁLCULO DE LAS NECESIDADES

HÍDRICAS.

En el mercado existen diversos programas para el cálculo de las necesidades

hídricas de los cultivos, basados en datos meteorológicos medios o en datos en

tiempo real.

Se hará mención de algunos programas que pueden servir de ayuda para el

cálculo de las necesidades hídricas: cálculo de la evapotranspiración, textura de

suelos y simuladores.

Los programas analizados son, en su mayoría, de adquisición gratuita y el medio

más rápido de obtenerlos es a través de Internet. El hecho de que sean gratuitos

no significa que se puedan utilizar comercialmente sino que lo son para el

aprendizaje, para la prueba durante un tiempo o como referencia.

Al final de la descripción de algunos de los programas probados se proporciona la

dirección de un servidor de la Universidad de Kassel (Alemania) donde se

pueden obtener los programas gratuitamente o comprarlos directamente a sus

desarrolladores.

Los programas se dividen, según su función, en:

-Cálculo de la evapotranspiración de referencia.

-Cálculo de la evapotranspiración de cultivo.

-Cálculo de la textura.

-Adquisición de datos meteorológicos.

-Cálculo de las necesidades hídricas de los cultivos.

-Simuladores.

-Otros programas relacionados con las necesidades hídricas.

Page 59: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

59

1.6.1. Programa para el cálculo de la evapotranspiración de referencia.

Se describirá un programa que puede realizar el cálculo de la evapotranspiración

de referencia (ETo).

Daylet.

Realizado por la Universidad de Cranfield (UK).

Está editado en inglés. Y es de libre distribución en: “www.cranfield.ac.uk/SAFE”

Este programa sirve para el cálculo de la evapotranspiración de referencia

mediante algunos de estos métodos: Penman, FAO-Penman y Penman-Monteith.

Existe una variante del programa, publicado por la misma universidad, que realiza

el cálculo de la ETo para una serie de datos meteorológicos. Esta variante del

programa se llama ET.

Véase figura 1 en el anejo 2.

1.6.2. Programa para el cálculo de la evapotranspiración del cultivo.

La FAO publicó un programa en forma de hoja de cálculo para estimar la ETo.

Fao.Pmon.xls

Es una hoja de cálculo que sirve para evaluar mensualmente la

evapotranspiración de referencia mediante el método Penman-Monteith.

Ha sido realizado por la FAO y está editado en inglés y es de libre distribución,

pudiéndose encontrar en “www.fao.org”.

Es un programa altamente didáctico y un excelente simulador: Fácil de entender.

Los cálculos se actualizan en el momento en que se cambia algún dato. En una

hoja adyacente se dibuja la ETo del cultivo.

Véase figuras 2, 3, 4, y 5 del anejo 2.

Page 60: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

60

1.6.3. Programa para el cálculo de la textura.

Existe un programa para el cálculo de la textura de un suelo:

SW_ES

Es un programa que sirve para el cálculo de la textura de un suelo y que

proporciona los datos que se pueden ver en la imagen, de acuerdo a cada

porcentaje textural.

El programa ha sido realizado por el Dr. Saxton y existe una edición en castellano.

Es de libre distribución en la dirección:

"http://www.wiz.uni-kassel.de/kww/irrisoft/manage/manage_i.html".

Véase figura 6 del anejo 2.

1.6.4. Programas para la adquisición de datos meteorológicos.

Existen diversos programas y servicios meteorológicos que se ocupan de

suministrar datos referentes a la meteorología:

FAO

La FAO suministra datos meteorológicos medios para diversas zonas del mundo.

Para España distribuye 58 estaciones meteorológicas, que suelen coincidir con

capitales provinciales. Los datos se estraen de una secuencia de 20 a 30 años.

Se pude encontrar en la dirección de Internet: www.fao.org

INM

El Instituto Nacional de Meteorología suministra datos meteorológicos a la carta.

Son datos con el correspondiente cargo económico.

PACCOM

La Generalitat de Catalunya, a través de su "Departament d'Agricultura",

distribuye datos agrometeorológicos de 40 estaciones, repartidas por la geografía

catalana, mediante línea telefónica.

Page 61: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

61

Los datos que se pueden extraer son: horarios, diarios y mensuales.

El servicio es gratuito y se pude obtener a través del “Departament d’Agricultura,

Ramaderia i Pesca”.

Constituye el referente más cercano a nivel de cultivo por ser estaciones

repartidas por todas las comarcas de Catalunya.

Véase figura 7 del anejo 2.

1.6.5. Programas para el cálculo de las necesidades hídricas de los cultivos.

Para la el cálculo de las necesidades hídricas de los cultivos existe diversos

programas. Se mostrará una hoja de cálculo, el programa suministrado por la

FAO y el programa que suministra la Generalitat de Catalunya:

ReqRiego.xls

Es un programa en forma de hoja de cálculo para evaluar las necesidades

hídricas mensuales de los cultivos mediante el método Penman.

Está realizado por el profesor Gonzalo Freites del Departamento de Hidrología de

la Universidad Central de Caracas (Venezuela). Su presentación está hecha en

castellano.

Se puede obtener a través de la red Irrisoft (véase bibliografía).

Es un programa altamente didáctico y un excelente simulador: Fácil de entender.

Los cálculos se actualizan cuando se modifica algún dato. Realiza el dibujo del

Kc.

Véase figuras 8, 9, 10 y 11 del anejo 2.

Page 62: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

62

CROPWAT

Es un programa para el cálculo de las necesidades hídricas de los cultivos por el

método Penman-Monteith combinado (FAO, 1990) que se nutre de datos

meteorológicos medios mensuales y de los datos de cultivo que tiene

almacenados. En todo momento es posible modificar los datos a través de su

menú.

Ha sido realizado por la FAO. Existe una versión antigua (5.7) en castellano y dos

versiones en ingles: la versión 7.0 y la versión Windows. La versión de Windows

está en fase de prueba y algunas de sus opciones no están disponibles.

Se puede obtener gratuitamente en www.fao.org. La versión en castellano (5.7) va

incorporada en el volumen 46 de Riegos y Drenajes.

La versión 7.0 simplifica el manejo y proporciona un aspecto más gráfico.

Véase figura 12 del anejo 2.

PACREG

Es un programa para el cálculo de las necesidades hídricas de los cultivos pero

presume calculada la ETo del cultivo. El programa puede recoger los datos

meteorológicos obtenidos a través del programa PACREG.

Lo ha realizado la Generalitat de Catalunya y está editado en catalán.

Se puede obtener gratuitamente a través del “Departament d’Agricultura,

Ramaderia i Pesca”.

Es un programa que abarca el cálculo de las necesidades hídricas. Realiza algún

cálculo correspondiente al diseño hidráulico al tener en cuenta el caudal de la

instalación, el caudal de emisores y el coeficiente de uniformidad. La entrada

manual de datos meteorológicos es algo engorrosa y presume calculada la ETo.

Véase figura 13 del anejo 2.

Page 63: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

63

1.6.6. Programas para la simulación de las necesidades hídricas.

Los anteriores programas podrían servir como simuladores, en la medida en que

se pueden introducir datos supuestos para realizar sus correspondientes cálculos.

Pero existen diversos programas que entran dentro de la categoría de la

simulación, por ser herramientas destinadas a investigadores o técnicos. Sólo se

mencionará la existencia de alguno de ellos por no ser el objetivo primordial de

este trabajo: Bigsim, CropSyst y WaterMod.

Véase figuras 14, 15, y 16 del anejo 2.

1.6.7. Otros programas relacionados con las necesidades hídricas.

En la dirección http://www.wiz.uni-kassel.de/kww/irrisoft/manage/manage_i.html

se pueden encontrar programas destinados a la irrigación. Alguno de los

programas son de libre distribución pero otros son comerciales. Alguno de los

programas comerciales se puede probar por un período determinado.

Véase figura 17 del anejo 2.

A continuación, se detallan los programas disponibles en la dirección arriba

indicada:

AWSET (Potential Evapotranspiration for Automatic Weather Stations)BALANCE ( Soil Water BALANCE)BIGSIM (Balanced Irrigation schedule with Groundwater contribution SIMulation model)CITRUS IRRIGATION SCHEDULING (Citrus irrigation, scheduling, moisture level, stress)CLIMWAT ( A Climatic Database for Irrigation Planning and Management)CROPWAT (Crop Water Requirements and Irrigation Scheduling)CWR-VB (Crop Water Requirements for Windows)DAILYET ( Daily Evapotranspiration)ENWATBAL (Evaporation from the soil and plant canopy)ETPOT 1.0 (Module for the calculation of potential transpiration and evaporation )EVAP (Program to calculate Evapotransipration using one of 5 metrics)HFAM (Watershed Resource Analysis, Reservoir Management, irrigation, hydropower, watersupplies)HOURLYET (Hourly Evapotranspiration for Automatic Weather Stations)HOWWET ? (Estimating the storage of water and mineralised nitrogen in your soil using rainfallrecords )HYDRA (Modelling and Decision Support Systems to irrigation)I M S ( Irrigation Scheduling)

Page 64: Programa para el cálculo de las necesidades hídricas en cultivos

1. Introducción

64

INCA (Irrigation Network Control & Analysis)I W R ( Irrigation Water RequirementsLANDSCAPE WATER MANAGEMENT SOFTWARE (Auditing & Budgeting) MacPET (potential evapotranspiration, Macintosh)Microweather 94 (Evapotranspiration, crop microclimate simulation, climate, soil)P E T (Potential Evapotranspiration)POT._EVAPO. (Potential Evapotranspiration)PRORIEGO (Available only in Spanish - sorry)REF-ET (Reference evapotranspiration)REQRIEGO (Reference evapotranspiration and crop water requirements)SPACTEACH (Soil/plant water dynamics)THE WATER AND PLANT RELATIONSHIP (Relationship, water in plants, photosynthesis )UCA ( Unit Command Area Simulation Model )WATER MANAGEMENT UTILITIES (Water management - irrigation system design)WATERMGT (Water Management - CD Rom)WATROP ( Irrigation Sytem Uniformity on Crop Yield )

Page 65: Programa para el cálculo de las necesidades hídricas en cultivos

2. Objetivos

65

2. OBJETIVOS.

Page 66: Programa para el cálculo de las necesidades hídricas en cultivos

2. Objetivos

66

2. OBJETIVOS.

Realizar un programa para el cálculo de las necesidades de riego de los cultivos,

considerando para el cálculo de la evapotranspiración de referencia el método

Penman-Monteith de dos pasos descrito por la FAO en 1990.

Page 67: Programa para el cálculo de las necesidades hídricas en cultivos

3. Material y métodos

67

3. MATERIAL Y MÉTODO

Page 68: Programa para el cálculo de las necesidades hídricas en cultivos

3. Material y métodos

68

3.1. MATERIAL.

Se ha empleado el material informático que a continuación se detalla:

- Lenguaje de programación Visual-Basic 5.0 .

- Base de datos Microsoft Access-97.

- Sistema operativo de trabajo Windows-98.

- Ordenador personal con las siguientes características: Procesador Pentium, 64

megabytes de memoria de solo lectura (RAM) y 2 gigabytes de disco duro.

3.2. MÉTODO.

El método utilizado para la realizar el programa programación se ha basado en

una programación clásica, apoyada en módulos que coinciden con las entradas

de datos (clima, suelo, etc.) pero con un aspecto visual para el usuario.

Método para realizar el cálculo de las necesidades hídricas:

- Metodología expuesta por Doorenbos-Prutt en el cuaderno FAO-24.

- Cálculo de la ETo por el método Penman-Monteith de dos pasos publicado por

la FAO en 1990.

- Los coeficientes de cultivo estarán divididos en cuatro fases, exceptuando los

cultivos plurianuales que lo estarán en doce fases correspondientes a 12

meses. Como datos opcionales, recogerá los coeficientes de cultivo (Kc)

propuestos por FAO-24, se exceptuarán los cultivos menos interesantes para

la nuestro país (café, té...). Dichos coeficientes han de ser susceptibles de ser

modificados. El Kc inicial de los cultivos de 4 fases con el valor en blanco o

asterisco se calculará mediante una estimación de las 5 gráficas.

- La entrada de datos climáticos será: mensual para calcular la previsión de riego

o diaria para calcular el riego en tiempo real (día a día).

Page 69: Programa para el cálculo de las necesidades hídricas en cultivos

3. Material y métodos

69

- La precipitación Efectiva se calculará por alguno de los métodos expuestos en

la introducción.

- No se tendrán en cuenta los fenómenos de Percolación profunda, escorrentía,

aportación capilar y el fenómeno de advección.

- Se tendrá en cuenta la velocidad de infiltración.

- Se contemplará el efecto de localización debido al porcentaje de terreno

sombreado para los riegos localizados.

- Cuando sea necesario, se efectuará el lavado de sales para una productividad

mínima deseada.

- La programación del riego estará comprendida dentro de la reserva fácilmente

utilizable, suponiendo que no hay limitaciones de agua. El momento de riego

será cuando se agote un porcentaje de la RFU, o en un intervalo de días de

riego. Cuando se introduzca el intervalo de riego, el momento de riego será el

primero que cumpla la condición: agotamiento de un porcentaje de la RFU o

intervalo de riego.

- La dosis de riego vendrá marcada por el porcentaje de llenado de la RFU.

- Se contemplará el porcentaje inicial de agua de la RFU.

- Para calcular las necesidades brutas se tendrá en cuenta la eficiencia de la

aplicación y la fracción de lavado. Aplicándose, el que suponga mayor dosis

de lavado.

- No se tendrá en cuenta el diseño hidráulico, exceptuando el caudal de la

instalación.

- Se realizará una estimación del tiempo mínimo de riego debido a la infiltración y

al caudal de la instalación.

- Los cálculo que se obtendrán serán: balance hídrico y riegos a efectuar

Page 70: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

70

4. RESULTADOS Y DISCUSIÓN

Page 71: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

71

4. RESULTADOS Y DISCUSION.

El resultado ha sido un programa con funcionamiento modular, que calcula las

necesidades hídricas cuando detecta que todos los datos están introducidos.

El diseño comienza con un nombre que identifica el grupo de datos que se van a

introducir.

A continuación, se puede introducir la información que corresponde a cada una

de las áreas (descripción de la finca, suelo, clima, agua de riego, tipo de riego y

programación).

Por último, se encuentra el módulo de cálculo que realiza las operaciones y las

muestra por pantalla.

Además, se dispone de un programa de mantenimiento para entrar datos

correspondientes a cada tabla.

El listado del programa se puede ver en el anejo 5.

Page 72: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

72

4.1. FLUJO DE DATOS.

Como se puede apreciar en la figura 1 del anejo 3, existen siete módulos de

entrada de datos para poder realizar el cálculo. En realidad, serían 2 módulos

más si se incluye la entrada del diseño y el módulo de cálculos.

El flujo de información converge hacia el proceso de cálculo, pero, en ocasiones,

se pueden ver flechas con ambos sentidos. Este doble sentido en el flujo de la

información indica que la información se puede visualizar en cualquier momento

para corregirla o ampliarla. Por ejemplo, el módulo de entrada de datos envía la

información a la tabla “Programación Clima”; esta información se ha de poder

corregir y ampliar con nuevos datos climáticos.

La información necesaria para realizar la estimación puede proceder del soporte

magnético o se pude introducir a través del teclado; por ejemplo, el módulo de

datos del cultivo puede recoger información entrada por teclado o puede realizar

una lectura a las siguientes tablas: Cultivos, Kc, profundidad raíces, fracción

agotamiento, días cultivo, y tolerancia a sales.

El nexo de unión entre cada uno de los ficheros suele ser el nombre del diseño,

excepto en los ficheros que se encuentran en la parte superior. Estos ficheros

están unidos por el tipo de información.

Cada vez que se realiza una modificación o ampliación de datos, el proceso de

cálculo rellena con los datos oportunos el fichero de balance hídrico; de tal

manera que el fichero de balance hídrico contendrá información referente a los

datos entrados por cada uno de los módulos.

Page 73: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

73

4.2. PROGRAMA.

Los módulos disponibles en el programa son:

- Diseño.

- Mantenimiento de tablas.

- Finca.

- Cultivo.

- Clima.

- Suelo.

- Agua de riego.

- Tipo de riego.

- Programación del riego.

- Resultados.

Todas las pantallas que aparecen en el programa informan en su parte superior

del nombre de diseño agronómico que está activo.

Exceptuando el menú, cada uno de los programas tiene tres partes diferenciadas:

1) Parte superior: es la barra donde van alojadas las funciones de grabación y

salida del módulo.

2) Parte media: Es donde se introducen o visualizan los datos. En algunos

módulos se encuentra la figura [...], que sirve para buscar datos en las tablas.

3) Parte inferior: Contiene una línea de mensajes para informar de las acciones

que se han de realizar.

El menú, como se puede apreciar en la figura 2 del anejo 3, es el lugar de acceso

a cada uno de los módulos.

Si la aplicación no está conforme con algún dato entrado, surge una pantalla de

formato pequeño que informa de la acción incorrecta.

Page 74: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

74

A continuación, se expondrán con detalle la función de cada uno de los módulos:

4. 2. 1. Diseño.

El diseño está contenido en el menú DISEÑO AGRONÓMICO.

Consta de dos carpetas con funciones distintas:

- Carpeta Nuevo Diseño. Es el lugar por el cual se introducirá el nombre del

nuevo diseño. Si el nombre de diseño existiera, el programa dará aviso. Véase

figura 3 del anejo 3.

- Carpeta Abrir Diseño. Esta carpeta tiene dos funciones: escoger un diseño

existente o eliminarlo.

Para seleccionar un diseño se tendrá que apuntar con el ratón en la zona

donde aparecen todos los diseños y pulsar Aceptar.

Para borrar un diseño, primero se apuntará a la zona donde aparecen todos

los diseños y después se pulsará Eliminar. El programa pedirá confirmación

para eliminar el diseño.

Cuando se pulsa en alguno de los diseños, aparece una pequeña descripción

de las características que servirá de orientación sobre el diseño.

Véase figura 4 del anejo 3.

4.2.2.Mantenimiento de tablas.

El mantenimiento de tablas está contenido en el menú Diseño Agronómico.

Sirve para dar de alta, modificar o eliminar datos correspondientes a las tablas del

programa. Véase figura 5 del anejo 3. Los datos que se entren por este módulo

pasarán a estar disponibles para la toda aplicación

Page 75: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

75

Estas tablas son: nombre de cultivo, Kc del cultivo, días de cultivo, raíz del cultivo,

fracción de agotamiento permisible del cultivo, meteorología, tipo de textura y

sistemas de riego. En la figura 6 del anejo 3 se puede ver el acceso a la tabla de

sistemas de riego.

4.2. 3. Finca.

El módulo Finca está en el menú de Entrada de Datos.

Por este módulo se introducirán los datos referentes a la finca y el tipo de datos

meteorológicos. Algunos de los datos no tienen relevancia para el cálculo de las

necesidades hídricas, pero es necesario disponer de una pequeña referencia.

Véase figura 7 del anejo 3.

Los datos que se solicitan son:

Descripción: Una pequeña descripción de la finca y del usufructuario de la

misma.

Nombre de la finca: Nombre con el que es conocida la finca.

Población. Entrar la población

Provincia. Entrar la provincia y el país.

Latitud: Es una de las coordenadas que sitúan a la finca dentro de la Tierra.

Además, tiene utilidad para el cálculo de la radiación neta cuando sólo se

disponga del número de horas de sol (Smith, M., 1990).

Longitud: Es la otra coordenada que ubica a la finca dentro de la Tierra.

Altitud: Tiene utilidad para estimar la evapotranspiración de referencia (Smith,

1990).

Datos meteorológicos: Por esta entrada se definen qué datos meteorológicos se

van a suministrar. Se introducirá D en el caso de disponer de datos climáticos

diarios y M para datos climáticos mensuales.

Superficie de la finca: Se introducirá en metros cuadrados. Servirá para calcular

la dosis bruta de riego de la finca.

Page 76: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

76

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben.

Para realizar alguna modificación, se cambiará el valor del campo deseado y

después se pasará por cada uno de los campos hasta que aparezca Aceptar.

4. 2. 4. Cultivo.

El módulo Cultivo está en el menú de Entrada de Datos.

En este módulo se introducirán los datos referentes al cultivo: coeficiente de

cultivo (Kc), fracción de agua disponible en el suelo, días de cultivo, profundidad

de las raíces, tolerancia a la sal y fecha de plantación.

En este módulo se pueden seleccionar los datos publicados por al FAO en el

manual FAO-24 o se pueden variar de acuerdo a las necesidades.

Si se seleccionan todas las opciones disponibles en los iconos [...] presentará los

datos publicados por la FAO (Doorenbos et alter, 1977).

Se ha intentado respetar la entrada de los coeficientes de cultivo: en el caso de

cultivos leñosos el Kc está dividido en 12 meses y en el resto de los cultivos está

divido en 4 fases (inicial, desarrollo, media y final).

Véase figuras 8 y 9 del anejo 3.

Los datos que se solicitan son:

Nombre del cultivo: Se puede entrar el nombre del cultivo o se puede

seleccionar de una lista pulsando en el icono de la derecha.

Page 77: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

77

Grupo: Pulsando en el icono de la derecha aparecen 7 grupos de cultivos:

cultivos extensivos y hortalizas, arroz, alfalfa, árboles caducifolios (y de nuez),

cítricos, uva y plátano. Se seleccionará el más adecuado a nuestras necesidades.

Cada grupo de cultivos determina que la entrada del Kc sea mensual o en 4

fases; si se escogen árboles caducifolios, cítricos, uva o plátano, el Kc será

mensual; si se escoge el resto estará dividido en 4 fases.

Además, para poder recoger los valores publicados en FAO-24 (Doorenbos et

alter, 1977), cada grupo de cultivos activará las opciones de: cubierta vegetal,

heladas, humedad relativa, viento y edad de plantación. Por ejemplo, el grupo de

cítricos activará las opciones de cubierta vegetal y edad de plantación. En este

caso, si el usuario rellena las opciones de heladas y edad de plantación,

aparecerá el valor publicado en FAO-24. Si no se está interesado en los valores

de FAO-24, se continuará por la entrada de los coeficientes de cultivo.

Cubierta vegetal. Es una de las opciones del manual FAO-24. Está disponible

para árboles caducifolios y cítricos.

Heladas. Es una de las opciones del manual FAO-24. Está disponible para

árboles caducifolios y uva.

Humedad relativa. Es una de las opciones del manual FAO-24. Está disponible

para cultivos extensivos y hortalizas, arroz, alfalfa, árboles caducifolios y uva.

Viento. Es una de las opciones del manual FAO-24. Está disponible para cultivos

extensivos y hortalizas, arroz, alfalfa, árboles caducifolios, plátano y uva.

Edad plantación. Es una de las opciones del manual FAO-24. Está disponible

para árboles caducifolios, cítricos y plátano. En el caso concreto del plátano, se

refiere a plátanos de primer cultivo o plátanos de los siguientes cultivos.

En la figura 8 del anejo 3, se puede observar un ejemplo de selección de los

valores publicados en FAO-24 para un cultivo de cítricos sin cubierta vegetal y

para árboles adultos; se puede ver que los coeficientes están divididos en 12

meses.

Si el usuario no está conforme con los valores propuestos puede modificarlos

como considere oportuno.

Si no se hubieran rellenado las opciones del grupo de cultivo, se tendrán que

introducir los valores manualmente.

Page 78: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

78

Kc. Por este campo se introducen los valores correspondientes de coeficiente de

cultivo. Está divido en 4 fases para los cultivos extensivos y huerta, arroz y alfalfa;

y está divido en 12 fases para los cultivos de árboles caducifolios, cítricos, uva y

plátano.

En los cultivos de 4 fases, el valor correspondiente a la fase de desarrollo no se

introduce porque el programa realiza una estimación proporcional entre el valor de

la fase inicial y el valor de la fase final por el número de días que tiene la fase de

desarrollo.

Si el valor de la fase inicial de los cultivos divididos en 4 fases está en blanco o en

asterisco, el programa realizará una estimación de acuerdo a la ETo y al intervalo

de riegos. Si el valor de intervalo de riegos está en blanco, el programa presupone

un intervalo de riegos de 7 días.

Días. Es el número de días que tiene la fase del cultivo. Es una opción disponible

en los cultivos divididos en 4 fases. Este valor servirá para calcular el valor de Kc

de la fase de desarrollo, la profundidad de la raíz en la fase de desarrollo y la

fecha de final de cultivo. Es una opción no disponible para los cultivos de 12

fases.

Profundidad de Raíces. Es la profundidad efectiva de las raíces. En los cultivos

de 4 fases se divide en 4 partes, realizándose una estimación en la fase de

desarrollo. En los cultivos de 12 fases se supone un único valor de profundidad

radicular.

El valor de la profundidad radicular servirá para conocer la cantidad de agua que

es capaz de absorber un cultivo.

Se deberá entrar el valor de la profundidad del terreno, si el valor de éste es

menor que la profundidad radicular.

Fracción de agua disponible en el suelo. Es el valor en el que no se produce

una reducción del rendimiento del cultivo debido a la carencia de agua. Este valor,

multiplicado por la diferencia entre la capacidad de campo y el punto de

marchitamiento, determinará la reserva de agua fácilmente utilizable (RFU).

Tolerancia a las sales. Este valor determinará la cantidad agua suplementaria

que se deberá aportar para tener un rendimiento determinado.

Page 79: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

79

Fecha de plantación. En los cultivos anuales se introducirá la fecha (mes-dia-

año) correspondiente y se introducirá el primer día del año para el resto de

cultivos (01-01-xxxx), siendo xxxx el valor del año correspondiente.

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben.

Para realizar alguna modificación se cambiará el valor del campo deseado y

después se pasará por cada uno de los campos hasta que aparezca Aceptar.

4.2.5. Meteorología.

El módulo Meteorología está en el menú de Entrada de Datos.

En este módulo se introducirán los datos referentes a los valores

micrometeorológicos para calcular la evapotranspiración de referencia (Smith,

1990).

La pantalla inicial dispone de dos opciones (véase figura 10 anejo 3):

Entrada de datos

Obtener datos externos.

La opción de entrada de datos sirve para entrar manualmente los datos

climáticos o para modificarlos.

La opción obtener datos externos realiza una lectura de los datos climáticos

disponibles en un fichero externo que se puede grabar por mantenimiento de

tablas

Cuando se realiza una entrada de datos o se obtiene un fichero externo, el

programa trabaja sobre la base del tipo de datos meteorológicos introducidos por

la pantalla de datos de la finca. Si el fichero es diario (D) creará unos registros

diarios para los datos meteorológicos. Si el fichero es mensual (M) creará unos

registros mensuales para los datos meteorológicos.

Page 80: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

80

Primero se explicará la obtención de datos externos.

Obtención de datos externos.

Como se puede ver en la figura 11 del anejo 3, en el momento en que se pulsa

Obtener datos externos aparece una lista con los datos disponibles. En el caso

de datos mensuales, se puede decir que los datos servirán para cualquier año. En

el caso de datos diarios, esta lista no estará actualizada.

Entrada de datos.

Esta opción tendrá un calendario mensual para datos meteorológicos mensuales

(véase figura 13 del anejo 3) y un calendario diario para datos meteorológicos

diarios (véase figura 12 del anejo 3).

El calendario mensual dispone de los doce meses del año. De tal manera, que al

pulsar sobre cualquier mes se activará la pantalla de entrada de datos.

El calendario diario dispone de los días que hay en el mes y año consultados. Se

puede ir de un mes a otro y de un año a otro pulsando sobre las teclas [<], [<<],

[>>] y [>].

En la figura 14 del anejo 3, se puede ver la entrada de datos meteorológicos.

La entrada de datos meteorológicos es común para los dos tipos de datos

(mensuales y diarios) e informa, en su parte superior, de la fecha que se ha

pulsado.

Dispone de las siguientes entradas:

Temperatura máxima. Se introducirá la temperatura máxima en grados

centígrados. Se dispone de una precisión de un decimal. Si sólo se tiene la

temperatura media, se introducirá el mismo valor en temperatura máxima y en

temperatura mínima.

Page 81: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

81

Temperatura mínima. Se introducirá la temperatura mínima en grados

centígrados. Se dispone de una precisión de un decimal. Si sólo se dispone de la

temperatura media, se introducirá el mismo valor en temperatura máxima y en

temperatura mínima.

Humedad máxima y mínima. Si se activa este cuadro, las entradas de humedad

máxima i humedad mínima estarán disponibles.

Humedad máxima. Se introducirá el calor porcentual de la humedad máxima.

Sólo está disponible si el cuadro de Humedad máxima y mínima está activado.

Humedad mínima. Se introducirá el calor porcentual de la humedad mínima. Sólo

está disponible si el cuadro de Humedad máxima y mínima está activado.

Humedad media. Se introducirá el calor porcentual de la humedad media. Sólo

está disponible si el cuadro de Humedad máxima y mínima NO está activado.

Viento. Se introducirá la velocidad del viento diario en kilómetros por segundo.

Radiación. Si se activa el cuadro de Radiación, estará disponible la entrada de la

radiación neta. Si no está activado el cuadro de Radiación, estará disponible la

entrada del número de horas de sol.

Radiación Neta. Se introducirá el valor de la radiación neta diario en megajulios

por metro cuadrado y día. Se dispone de una precisión de un decimal. Esta

entrada estará activada cuando el cuadro de radiación tenga la marca ü.

Horas sol. Se introducirá el valor del número de horas de sol diarias en horas día.

Se dispone de una precisión de un decimal. Esta entrada estará activada cuando

el cuadro de radiación NO tenga la marca ü.

Precipitación. Se introducirá el valor de la precipitación caída en milímetros por

metro cuadrado y período. Siendo el período diario si la entrada de datos

meteorológicos es diario y mensual cuando la entrada de datos meteorológicos

sea mensual.

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben y esté disponible el calendario.

Page 82: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

82

4. 2. 6. Suelo.

El módulo Suelo está en el menú de Entrada de Datos.

En este módulo se introducirán los datos referentes a las características físicas

del suelo (véase figura 15 del anejo 3).

Existen tres vías para entrar los datos:

- Se dispone de la clase textural.

- Se dispone del porcentaje textural.

- Se dispone de la analítica física de suelos.

Es conveniente disponer de un análisis de suelos para tener constancia de la

realidad del suelo donde se asienta el cultivo. Entrar la clase textural o el

porcentaje textural supone una estimación física del suelo que puede llevar a

obtener datos erróneos. En la tabla 4 se puede ver los datos asignados a cada

clase textural (Yagüe, 1996):

Tabla 4. Datos asignados por defecto.

Textura Arena[%]

Arcilla[%]

Limo[%]

DensidadAparente[g/cm3]

Infiltración[mm/hora]

EficienciaLavado

[%]

Fuente

ARCILLOSO 18 65 17 1,19 3,8 30 YAGÜE

ARCILLOSO-ARENOSO 50 45 5 1,34 8 70 ESTIMADA

ARCILLOSO-LIMOSO 6 48 46 1,30 5 50 YAGÜE

ARENOSO 94 4 2 1,70 19 100 YAGÜE

ARENOSO-FRANCO 83 7 10 1,66 17 90 YAGÜE

FRANCO 41 19 40 1,51 8,9 70 YAGÜE

FRANCO-ARCILLOSO 33 35 32 1,40 6,4 60 YAGÜE

FRANCO-ARCILLOSO-ARENOSO 60 28 12 1,45 12 80 ESTIMADA

FRANCO-ARCILLOSO-LIMOSO 10 35 55 1,40 12 60 ESTIMADA

FRANCO-ARENOSO 65 10 25 1,60 16 80 YAGÜE

FRANCO-LIMOSO 20 15 65 1,51 7,6 60 YAGÜE

LIMOSO 7 7 86 1,51 8 60 YAGÜE

Page 83: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

83

A continuación se verán los datos a entrar según la vía escogida:

- Clase textural: Pulsando en opciones del tipo de suelo aparecen las 12 clases

texturales de la USDA, véase capítulo 3 del anejo 4. Al pulsar en una de ellas

aparece el valor estimado del porcentaje de arena, limo y arcilla (sólo es

informativo), la capacidad de campo, el punto de marchitamiento, la densidad

aparente estimada, la tasa de infiltración y la eficiencia de lavado de sales

estimada. Hay que volver a avisar que estos datos son meramente

informativos.

- Porcentaje textural: Introduciendo los valores porcentuales de arena, arcilla y

limo calcula la clase textural y los valores estimados de capacidad de campo,

punto de marchitamiento, densidad aparente, la tasa de infiltración y la

eficiencia en el lavado de las sales.

- Análisis de suelos: Se introducirá el valor de la analítica de suelos. Es la

entrada más recomendada. Se aconseja disponer de análisis de suelos.

Las entradas en esta pantalla son:

Arena. Se introducirá el porcentaje de arena.

Arcilla. Se introducirá el porcentaje de arcilla.

Limo. Se introducirá el porcentaje de limo.

Tipo de suelo. Se escogerá la clase textural de las opciones o se calculará

automáticamente, de acuerdo a los valores entrados para cada textura.

Capacidad de campo. Se introducirá la capacidad de campo en porcentaje de

suelo seco, o el programa lo calculará automáticamente (Yagüe, 1996).

Punto de marchitamiento . Se introducirá el porcentaje de suelo seco en el punto

de marchitamiento, o el programa lo calculará automáticamente (Yagüe, 1996).

Densidad aparente. Se introducirá la densidad aparente en gramos por

centímetro cúbico, o el programa propondrá un valor.

Infiltración. Se introducirá la tasa de infiltración en milímetros por hora, o el

programa propondrá un valor.

Page 84: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

84

Eficiencia Lavado. Se introducirá el porcentaje de la eficiencia en el lavado de

sales.

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben.

Para realizar alguna modificación se cambiará el valor del campo deseado y

después se pasará por cada uno de los campos hasta que aparezca Aceptar.

4. 2. 7. Agua de riego.

El módulo Agua de riego está en el menú de Entrada de Datos.

En este módulo se introducirán los datos referentes a la conductividad eléctrica

del agua de riego (véase figura 16 del anejo 3). Este valor determinará el aporte

suplementario de agua para realizar el lavado de sales (Yagüe, 1996).

El único valor a entrar es el siguiente:

Conductividad eléctrica Agua. Se introducirá el valor de la conductividad

eléctrica del agua de riego en dS/m.

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben.

Para realizar alguna modificación se cambiará el valor del campo deseado y

después se pasará por cada uno de los campos hasta que aparezca Aceptar.

Page 85: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

85

4. 2. 8. Tipo de riego.

El módulo Tipo de riego está en el menú de Entrada de Datos.

En este módulo se introducirán los datos referentes al sistema de riego, eficiencia

de la aplicación y caudal de la instalación (véase figura 17 del anejo 17).

En un diseño total (agronómico + hidráulico) esta pantalla tendría un valor

importante. Sería el lugar para entrar las características del sistema de riego:

caudal de los emisores, disposición de los emisores, laterales de riego, etcétera.

Los datos a entrar son los siguientes.

Sistema de Riego. Se ha de introducir el nombre del sistema de riego o se

escogerá el disponible en la lista de opciones. Si se escoge de la lista de

opciones, los valores de tipo de riego y eficiencia en la aplicación del riego serán

proporcionados automáticamente.

Tipo de Riego. Se introducirá L en el caso de riego localizado y S para el resto.

Este valor determina la forma de cálculo en el lavado de sales.

Eficiencia de Riego. Se introducirá el porcentaje de la eficiencia en la aplicación

de agua de riego. Este valor, junto con el tipo de riego y con la dosis neta, servirá

para calcular la dosis bruta de riego.

Caudal Instalación. Se introducirá el caudal de agua de la instalación,

considerado en metros cúbicos/hora. El caudal de la instalación, la superficie de la

instalación y la tasa de infiltración del suelo determinarán el tiempo mínimo de

riego en horas.

Área sombreada. Se introducirá el porcentaje de sombra que da el cultivo sobre

el campo. Servirá para calcular el coeficiente de localización en cultivos regados

por goteo.

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben.

Page 86: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

86

Para realizar alguna modificación se cambiará el valor del campo deseado y

después se pasará por cada uno de los campos hasta que aparezca Aceptar.

4. 2. 9. Programación del Riego.

El módulo Programación del riego está en el menú de Entrada de Datos.

En este módulo se introducirán los datos relativos a la programación del riego y al

tipo de lluvia efectiva (véase figura 18 del anejo 3).

Para la programación del riego se ha de establecer el momento de riego, el

volumen de riego y la reserva inicial de agua en el suelo.

El momento de riego determina en qué instante se debe regar. Existen diversos

métodos: cuando se agota la RFU, a intervalos regulares de días, en períodos

concretos, etcétera. En este programa se contemplan los dos primeros métodos.

De manera que, si los valores de agotamiento de la RFU y de intervalo de días se

han rellenado, el momento de riego será el primer día que cumpla alguna de las

dos condiciones.

El volumen o dosis de riego establece la cantidad de agua que se suministrará en

el momento de riego. También existen diversos métodos: recarga de la RFU,

volumen constante, volumen variable en función de la época del año, etcétera. En

este programa, se ha contemplado el primer concepto.

La reserva inicial es el volumen de agua que tiene la RFU. En la programación de

riegos es muy habitual empezar con la capacidad de campo al 100%. Esto

equivale al 100% de la RFU.

La precipitación efectiva se pude determinar por cuatro métodos, explicados en la

introducción. Cada método se adaptará mejor a un clima. Para utilizar el método

Page 87: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

87

empírico, se deberían calcular los valores de las ecuaciones para la zona de

cultivo.

En la precipitación efectiva sólo se pude activar uno de los cuatro métodos.

Las entradas en la programación del riego son las siguientes:

Agotamiento de la RFU. Es el porcentaje de la RFU en el cual se establece el

momento de riego. Puede ir combinado con el intervalo de riego.

Intervalo de riego. Es la frecuencia con que se desea establecer el riego. Puede

ir combinado con el valor de agotamiento de la RFU.

Recarga de la RFU. Es el porcentaje con el que quedará la RFU una vez que se

ha terminado el riego. El valor de recarga de RFU no puede ser igual o inferior al

porcentaje de agotamiento de la RFU.

Porcentaje RFU (reserva inicial). Es el porcentaje de agua que tendrá la RFU al

inicio de la programación del riego.

Porcentaje precipitación: Representa el porcentaje de precipitación caída que

será efectiva.

FAO/AGWL. Son dos ecuaciones que fijarán el volumen de precipitación efectiva.

El programa utilizará una fórmula u otra en función de la precipitación mensual (70

mm/mes).

USDA. Son dos ecuaciones que fijarán el volumen de precipitación efectiva. El

programa utilizará una fórmula u otra en función de la precipitación mensual (250

mm/mes).

Empírico: Son dos ecuaciones variables en las que se han de introducir las

constantes de las mismas. El programa utilizará una fórmula u otra en función de

la de la constante. Esta constante representa la precipitación mensual (250

mm/mes).

Una vez que se hayan introducido estos datos se podrá pulsar Aceptar para que

los datos se graben.

Page 88: Programa para el cálculo de las necesidades hídricas en cultivos

4. Resultados y discusión

88

Para realizar alguna modificación se cambiará el valor del campo deseado y

después se pasará por cada uno de los campos hasta que aparezca Aceptar.

4. 2. 10. Resultados.

El módulo Resultados está en el menú de Resultados.

En este módulo se realizan los cálculos y se visualizan los datos (véase figura 19

del anejo 3).

Al acceder al módulo se efectúan los cálculos, apareciendo un mensaje en rojo

que invita a esperar un momento.

Cuando se han efectuado los cálculos, se activan dos iconos: Balance hídrico,

Riegos a efectuar. Al pulsar sobre alguno de estos dos iconos se activa la

información correspondiente.

Balance Hídrico. Se abre una pantalla en un tratamiento de textos que nos

informa del balance hídrico a lo largo del cultivo. Se puede ver un ejemplo en la

figura 20 del anejo 3.

Al final del balance hídrico se hace un resumen.

Riegos a efectuar. Se abre una pantalla en un tratamiento de textos que nos

informa de los riegos a efectuar a lo largo del cultivo. Se puede ver un ejemplo en

la figura 21 del anejo 3.

Al final del balance hídrico se hace un resumen.

Page 89: Programa para el cálculo de las necesidades hídricas en cultivos

5. Conclusiones

89

5. CONCLUSIONES.

Page 90: Programa para el cálculo de las necesidades hídricas en cultivos

5. Conclusiones

90

5. CONCLUSIONES.

• Se ha realizado un programa que permite calcular las necesidades hídricas de

los cultivos, mediante el método del balance hídrico propuesto por la FAO.

• El éxito en la obtención de resultados depende de la calidad de los datos que

caracterizan el cultivo. Éste es el aspecto más difícil para conseguir una

estimación ajustada.

• Será necesario disponer de unos coeficientes de cultivo que se ajusten el

máximo posible al cultivo considerado.

• Es necesario realizar pruebas periódicas de evaluación del sistema de riego

para conocer la eficiencia en la aplicación del agua.

• La elección de una buena estrategia en la programación del riego puede

mejorar las condiciones del cultivo y del personal que realiza el riego.

Page 91: Programa para el cálculo de las necesidades hídricas en cultivos

6. Bibliografía

91

6. BIBLIOGRAFÍA

Page 92: Programa para el cálculo de las necesidades hídricas en cultivos

6. Bibliografía

92

6. BIBLIOGRAFÍA.

COROMINAS, J. 1997. El regadío en el umbral del siglo XXI: Plan Nacional deRegadíos y Plan de Regadíos de Andalucía. Número: 90. Páginas: 22-37. Riegosy Drenajes XXI.

COROMINAS, J. 1997. El regadío en el umbral del siglo XXI: Plan Nacional deRegadíos y Plan de Regadíos de Andalucía. Número: 91. Páginas: 46-55. Riegosy Drenajes XXI.

DOORENBOS, J. y PRUITT, W.O. . 1977. Las necesidades de agua de loscultivos. FAO-24. F.A.O. 194 pp.

FUENTES YAGÜE, J.L. . 1996. Técnicas de riego. M.A.P.A. 471 pp.

GENERALITAT DE CATALUNYA. 1997. PACCOM. Manual de l'usuari.Generalitatde Catalunya. D.A.R.P. 19 pp.

GENERALITAT DE CATALUNYA.1997.PACREG. Programa de reg localizat i persuperficie (versio 3.0). Manual de l'usuari. Generalitat de Catalunya. D.A.R.P. 48pp.

M. STEIN, THOMAS. 1998. Irrisoft.http://www.wiz.uni-kassel.de/kww/irrisoft/manage/manage_i.html

MARTIN DE SANTA OLALLA, F. y DE JUAN VALERO, J.A. . 1993. Agronomíadel riego. Ediciones Mundi-Prensa. 730 pp.

NADAL, E. Y LACASA, M. 1995. El agua y el regadío en el futuro del mundo rural.M.A.P.A. . 130 pp.

PIZARRO, F. . 1996. Riegos localizados de alta frecuencia (RLAF) goteo,microaspersión, exudacion. Ediciones Mundi-Prensa. 513 pp.

SEGURA, P. Y ZAPATA, M. . 1995. Riego deficitario controlado. Ediciones Mundi-Prensa. 188 pp.

SMITH, M. . 1993. CROPWAT. Programa de ordenador para planificar y manejarel riego. FAO-46. F.A.O. 133 pp.

SMITH, M. .1990. Revised FAO Methodology for Crop Water Requirements.http://www.fao.org/ag/agl/aglw/webpub/REVPUB.htm. 70 pp.

VALIENTE, M., MONTERO, J., ORTEGA, J.F y TARJUELO, J.M. . 1998 .Recomendaciones para un eficiente diseño y manejo del riego. Número: 97.Páginas: 39-47. Riegos y Drenajes XXI.

Page 93: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejos

93

7. ANEJOS.

Page 94: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

94

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla1. Porcentaje diario medio de horas diurnas anuales a diferentes latitudes.

Page 95: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

95

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 2. Valores del factor f de Blaney-Criddle para diferentes temperaturas y porcentaje diario medio horas diurnas anuales.

Page 96: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

96

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Figura 1. Predicción de la ETo a partir del factor f de Blaney-Criddle.

Page 97: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

97

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 3. Radiación extraterrestre.

Page 98: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

98

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 4. Duración máxima de las horas fuertes de insolación.

Page 99: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

99

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 5. Coeficiente de corrección de radiación extraterrestre (Ra) en radiación solar (Rs).

Page 100: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

100

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 6. Factor de ponderación W.

Page 101: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

101

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Figura 2. Gráficos para determinar la ETo por el método de radiación.

Page 102: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

102

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 7. Factor de corrección c en la ecuación de Penman.

Page 103: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

103

7. ANEJO1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 8. Presión saturante del vapor ea.

Page 104: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

104

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 9. Presión del vapor ed.

Page 105: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

105

7.ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 10. Factor de conversión de la radiación extraterrestre en radiación solar neta.Tabla 11. Corrección para la temperatura f(t) con respecto a la radiación de onda larga.Tabla 12. Corrección para la presión de vapor f(ed) con respecto a la radiación de onda larga.Tabla 13. Corrección para la relación n/N f(n/N) con respecto a la radiación de onda larga.

Page 106: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 1

106

7. ANEJO 1. TABLAS Y FIGURAS DEL MANUAL FAO-24.Tabla 14. Coeficiente Kp para una cubeta de clase A.

Page 107: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

107

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.Figura 1. Programa DAYLET.

Page 108: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

108

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 2. Programa FAO-PMAN.XLS (continuación).

Page 109: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

109

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 3. Programa FAO-PMAN.XLS (continuación).

Page 110: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

110

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 4. Programa-FAO PMAN.XLS (continuación)

Tmax Temperatura máxima [ºC] Aeroterm Término aerodinámico [mm d-1

]Tmin Temperatura mínima [ºC] Month MesRHmean Humedad relativa media [%] Dayno Día del añoRHmin Humedad relativa mínima [%] Soldeclin Declinación solar [rad]

Wind (km/d) Humedad relativa máxima [%] Omega Angulo horario [rad]Sunhours Horas de sol Dr Distancia relativa Sol-Tierra

ET fao ETo FAO [mm] Ra Radiación extraterrestre [MJ m-2

d-1]

Avg Temp Temperatura media [ºC] N Horas de sol máximas

n/N Relación horas Sol y horas máximas de Sol Rns Radiación neta de onda corta [MJ m-2 d

-1]

Wind (m/s) Viento diario [m/s] f(n/N) Factor de nubes bajas

Ea(Tmax) Presión de vapor en saturación a temp. Máxima [kPa] sigma(Tx_Tn) Constante de Stefan-Boltzman [MJ-2

K-4

d-1]

Ea(Tmin) Presión de vapor en saturación a temp. Mínima [kPa] emissivity Emisividad

Edew Presión actual de vapor [kPa] Rbo Radiación neta de onda larga [MJ m-2 d

-1]

RH(max-min) Humedad relativa media [%] LWR Radiación neta de onda larga [MJ m -2 d-1]

Dlt(ETx-ETn) Pendiente de la curva de presión de vapor [kPA] Rn (Rns-Rl) Radiación Neta [MJ m-2 d

-1]

P-atm. Presión atmosférica [kPa] G Flujo de calor del suelo [MJ m-2

d-1]

lambda Calor latente de vaporización [MJ kg-1

] Rn-G Radiación neta - Flujo de calor del suelo [MJ m-2

d-1

]

gamma Constante psicrométrica [kPa ºC-1

] Rad Term Término debido a la radiación [MJ m-2

d-1

]rc Resistencia aerodinámica del cultivo Rad Term(-G) Término radiación - Flujo calor suelo [MJ m

-2 d

-1]

ra Resistencia aerodinámica [ s m-1] ETcomb ETo [mm]

gamma* Constante psicrométrica modificada [kPa ºC-1] ET (-G) Evapotranspiración - Flujo de calor del suelo [mm]

Leyenda de la hoja de cálculo FAO-PMON.XLS

Page 111: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

111

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 5. Programa FAO-PMAN.XLS (continuación).

FAO Penman-Monteith - EToRef. Evapotranspiration Rome

0,00

1,00

2,00

3,00

4,00

5,00

6,00

7,00

JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC

ET

o m

m/d

ay

ETo (-G) ETo

Page 112: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

112

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 6. Programa SW.

Page 113: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

113

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 7. Programa PACCOM.

____ Menú general __________________________________________________________ ____ ------------ ___________________+----------------------------------+___ _____________________________________¦ 0 ¦Fi ¦___ ____ Estacions automàtiques _________¦ 1 ¦Dades diàries (resum) ¦___ ____ ---------------------- _________¦ 2 ¦Dades diàries (totes les est.)¦___ _____________________________________¦ 3 ¦Temperatures ¦___ _____________________________________¦ 4 ¦Humitat relativa ¦___ ____ Dades diàries __________________¦ 5 ¦ETo ¦___ ____ ------------- __________________¦ 6 ¦Radiacions ¦___ _____________________________________¦ 7 ¦Velocitat i direcció de vent ¦___ _____________________________________¦ 8 ¦Pluviometria ¦___ _____________________________________¦ 9 ¦Balanç hídric ¦___ _____________________________________¦ A ¦Exportar dades diàries ¦___ _____________________________________¦ B ¦FINALITZAR I PENJAR MODEM ¦___ _____________________________________+----------------------------------+___

DARP (GENERALITAT CATALUNYA) Dia : 21/11/98

Page 114: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

114

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 8. Programa REQRIEGO.XLS.

Page 115: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

115

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 9. Programa REQRIEGO.XLS (continuación).

Page 116: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

116

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 10. Programa REQRI EGO.X LS (continuación)

ea Presión de vapor saturante [kPa]HR Humedad relativa [%]ea-ed Déficit de presión de vapor [kPa]

Uo Velocidad viento diario [m s-1]

f(n) Función de viento [mm kPa-1]Delta Pendiente de la curva de presión de vapor [kPa]

Gamma Constante psicrométrica [kPa ºC-1]W Función de peso

T. Suelo Tipo de suelo (textura)CC Capacidad de campo [%]

PMP Punto de marchitamiento permanente [%]Da Densidad aparente [g cm -3]

Pr Profundidad raíces [cm]

K Factor agotamiento permisible DEC Declinación solar [rad]

N Horas de sola máxima [h]Ra Radiación extraterrestre [MJ m -2 d-1]

n Horas de sol percibidas [h]Rns Radiación neta de onda corta [MJ m -2 d-1]

Rnl Radiación neta de onda larga [MJ m -2 d-1]

ETo Evapotranspiración de referencia [mm periodo -1]Kc Coeficiente de cultivoETc Evapotranspiración de cultivo [mm dia-1]

Precip.efect. precipitación efectiva [mm periodo-1]BALANCE Balance hídrico [mm mes -1]

Leyenda de la hoja de cálculo REQRIEGO.XLS

Page 117: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

117

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 11. Programa REQRIEGO.XLS (continuación).

Kc vs meses del año

-0,200

0,000

0,200

0,400

0,600

0,800

1,000

1,200

1,400

0 1 2 3 4 5 6 7 8 9 10 11 12

meses del año

Kc Ser ie1

Page 118: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

118

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 12. Programa CROPWAT 5.7 en español.

i----------------------------------------------------------©¦ MENU PRINCIPAL DE CROPWAT (5.7) ¦ã----------------------------------------------------------Á¦ ¦¦ OPCIONES DEL PROGRAMA: ¦+----------------------------------------------------------¦¦ 1. Cálculos de ETo Penman-Monteith ¦¦ 2. Necesidades de agua de los cultivos ¦¦ 3. Programación del riego ¦¦ 4. Necesidades de agua del sistema de riego ¦¦ ¦¦ 5. Regulación de la impresora ¦¦ 6. Selección de directorios ¦+----------------------------------------------------------¦¦ 9. Salida del CROPWAT ¦+----------------------------------------------------------+

Su opción ?

Page 119: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

119

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 13. Programa PACREG 3.0.

____________________________________________________________________________ ____________________________________________________________________________ ____ Menú general ___________________+----------------------------------+___ ____ ------------ ___________________¦ 0 ¦Fi ¦___ _____________________________________¦ 1 ¦Fitxer de cultius ¦___ _____________________________________¦ 2 ¦Dades de la parcel·la ¦___ _____________________________________¦ 3 ¦Reg per superfície ¦___ _____________________________________¦ 4 ¦Reg localitzat ¦___ _____________________________________¦ 5 ¦Fitxer climàtic dades reals ¦___ _____________________________________¦ 6 ¦Fitxer climàtic dades mitjanes¦___ _____________________________________¦ 7 ¦Opcions especials ¦___ _____________________________________+----------------------------------+___ ____________________________________________________________________________

DARP (GENERALITAT CATALUNYA) Dia : 17/10/98

Page 120: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

120

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 14. Programa BIGSIM.

Page 121: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

121

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 15. Programa CROPSYST.

Page 122: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

122

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 16. Programa WATERMOD.

Page 123: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 2

123

7. ANEJO 2. PROGRAMAS PARA EL CÁLCULO DE LAS NECESIDADES HÍDRICAS.

Figura 17. RED IRRISOFT

Page 124: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

124

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 1. Flujo de datos

PROGRAMACIÓN

DatosFinca

DatosCultivo

DatosClimáticos

DatosSuelo

DatosAgua Riego

ProgramaciónRiego

Prof. Raíces

Kc

Sistemas RiegoCultivos

Fracción Agotami.

Días Cultivo Clima

Tolerancia Sal

BALANCE HÍDRICO

Cálculos

Decisión

BALANCE HÍDRICO RIEGOS

Texturas Suelo

Tipo Riego

LEYENDA

Entrada/Visualización de datos

Proceso

Decisión

Fichero

Listado

Page 125: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

125

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 2. Menú del programa.

Page 126: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

126

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 3. Nuevo diseño en diseño agronómico.

Page 127: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

127

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 4. Abrir diseño en diseño agronómico.

Page 128: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

128

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 5. Mantenimiento de tablas.

Page 129: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

129

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 6. Sistemas de riego en mantenimiento de tablas.

Page 130: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

130

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 7. Datos de la finca.

Page 131: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

131

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 8. Datos del cultivo (cultivo con Kc en 12 fases).

Page 132: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

132

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 9. Datos del cultivo (cultivo con Kc en 4 fases).

Page 133: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

133

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 10. Datos meteorológicos (formato de entrada).

Page 134: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

134

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 11. Datos meteorológicos (obtención de un fichero meteorológico).

Page 135: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

135

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 12. Datos meteorológicos (calendario diario).

Page 136: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

136

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 13. Datos meteorológicos (calendario mensual).

Page 137: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

137

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 14. Datos meteorológicos (entrada de datos meteorológicos).

Page 138: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

138

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 15. Datos del suelo.

Page 139: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

139

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 16. Datos del agua de riego.

Page 140: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

140

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 17. Datos del tipo de riego.

Page 141: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

141

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 18. Datos de la programación de riego.

Page 142: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

142

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 19. Resultados.

Page 143: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

143

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 20. Resultados. Listado del balance hídrico.BALANCE HÍDRICO 28/11/98 19:23:55

Programación........................................: NARANJAS (CLIMA DIARIO, AÑO 1998, VICENTE MAS)Finca...............................................: La TaronjeraPoblación...........................................: AlcanarProvincia...........................................: TarragonaLatitud [g,m,s].....................................: 40º 3' 33'' NºLongitud [g,m,s]....................................: 0º 31' 28'' EºAltitud [m].........................................: 35Superficie [m2].....................................: 10000Cultivo.............................................: NARANJOFracción agua disponible en el suelo................: 0,35Clase textural......................................: FRANCODensidad aparente [g/cm3]...........................: 1,51Capacidad de Campo [% peso].........................: 19Punto de Marchitamiento [%peso].....................: 10Sistema Riego.......................................: GOTEO (ZONAS ARIDAS)Eficiencia en la aplicación [%].....................: 90Caudal instalación riego [m3/parcela]...............: 12Conductividad agua de riego [dS/m)..................: 1Eficiencia en el lavado de sales [%]................: 70Rendimiento mínimo deseado debido a salinidad [%]...: 100Fecha Plantación/Inicio.............................: 01-01-1998Momento de Riego. Agotamiento de la RFU [%].........: 100Intervalo de riego [días]...........................: 2Dosis de riego. Recarga de la RFU [%]...............: 100Nivel de agua de la RFU al inicio [%]...............: 0

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------01-01-1998 0,97 0,75 0,79 0,57 6,24 60 0,35 28,5 5,67 0,00 0,00 0,0 0,0 0,002-01-1998 0,85 0,75 0,79 0,51 6,08 60 0,35 28,5 11,24 0,00 0,00 0,0 0,0 0,003-01-1998 1,75 0,75 0,79 1,04 24,10 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,004-01-1998 2,03 0,75 0,79 1,20 0,00 60 0,35 28,5 27,33 0,00 0,00 0,0 0,0 0,005-01-1998 0,50 0,75 0,79 0,30 4,06 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,006-01-1998 0,49 0,75 0,79 0,29 31,20 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,007-01-1998 1,13 0,75 0,79 0,67 0,93 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,008-01-1998 0,32 0,75 0,79 0,19 7,80 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0

Page 144: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

144

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------09-01-1998 1,16 0,75 0,79 0,69 0,31 60 0,35 28,5 28,53 0,38 0,57 5,7 6,5 0,510-01-1998 2,03 0,75 0,79 1,20 0,00 60 0,35 28,5 27,34 0,00 0,00 0,0 0,0 0,011-01-1998 1,05 0,75 0,79 0,62 0,00 60 0,35 28,5 28,53 1,82 2,78 27,8 0,3 2,312-01-1998 1,21 0,75 0,79 0,72 0,16 60 0,35 28,5 27,98 0,00 0,00 0,0 0,0 0,013-01-1998 0,50 0,75 0,79 0,30 0,16 60 0,35 28,5 28,53 0,69 1,05 10,5 0,1 0,914-01-1998 1,07 0,75 0,79 0,63 0,16 60 0,35 28,5 28,06 0,00 0,00 0,0 0,0 0,015-01-1998 1,41 0,75 0,79 0,83 0,00 60 0,35 28,5 28,53 1,31 1,99 19,9 0,2 1,716-01-1998 1,13 0,75 0,79 0,67 0,00 60 0,35 28,5 27,86 0,00 0,00 0,0 0,0 0,017-01-1998 0,79 0,75 0,79 0,47 6,56 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,018-01-1998 1,29 0,75 0,79 0,76 0,16 60 0,35 28,5 27,93 0,00 0,00 0,0 0,0 0,019-01-1998 0,60 0,75 0,79 0,36 2,96 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,020-01-1998 1,32 0,75 0,79 0,78 1,09 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,021-01-1998 1,10 0,75 0,79 0,65 0,16 60 0,35 28,5 28,53 0,49 0,75 7,5 8,5 0,622-01-1998 1,19 0,75 0,79 0,70 0,62 60 0,35 28,5 28,45 0,00 0,00 0,0 0,0 0,023-01-1998 0,97 0,75 0,79 0,58 4,21 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,024-01-1998 0,91 0,75 0,79 0,54 3,28 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,025-01-1998 1,03 0,75 0,79 0,61 5,46 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,026-01-1998 1,18 0,75 0,79 0,70 0,00 60 0,35 28,5 27,83 0,00 0,00 0,0 0,0 0,027-01-1998 0,72 0,75 0,79 0,42 0,16 60 0,35 28,5 28,53 0,96 1,47 14,7 0,2 1,228-01-1998 1,32 0,75 0,79 0,78 0,16 60 0,35 28,5 27,91 0,00 0,00 0,0 0,0 0,029-01-1998 0,75 0,75 0,79 0,44 9,04 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,030-01-1998 1,41 0,75 0,79 0,83 0,16 60 0,35 28,5 27,86 0,00 0,00 0,0 0,0 0,031-01-1998 0,79 0,75 0,79 0,47 0,16 60 0,35 28,5 28,53 0,98 1,50 15,0 0,2 1,201-02-1998 1,32 0,75 0,79 0,78 0,00 60 0,35 28,5 27,75 0,00 0,00 0,0 0,0 0,002-02-1998 0,97 0,75 0,79 0,57 0,16 60 0,35 28,5 28,53 1,20 1,82 18,2 0,2 1,503-02-1998 1,65 0,75 0,79 0,98 1,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,004-02-1998 1,39 0,75 0,79 0,82 0,00 60 0,35 28,5 28,53 0,82 1,26 12,6 0,1 1,005-02-1998 1,32 0,75 0,79 0,78 0,16 60 0,35 28,5 27,91 0,00 0,00 0,0 0,0 0,006-02-1998 1,75 0,75 0,79 1,03 0,00 60 0,35 28,5 28,53 1,66 2,53 25,3 0,3 2,107-02-1998 1,63 0,75 0,79 0,97 0,16 60 0,35 28,5 27,73 0,00 0,00 0,0 0,0 0,008-02-1998 1,48 0,75 0,79 0,88 0,16 60 0,35 28,5 28,53 1,53 2,33 23,3 0,3 1,909-02-1998 1,50 0,75 0,79 0,89 0,16 60 0,35 28,5 27,80 0,00 0,00 0,0 0,0 0,010-02-1998 1,38 0,75 0,79 0,82 0,16 60 0,35 28,5 28,53 1,39 2,12 21,2 0,2 1,811-02-1998 1,68 0,75 0,79 0,99 0,16 60 0,35 28,5 27,70 0,00 0,00 0,0 0,0 0,012-02-1998 1,92 0,75 0,79 1,14 0,00 60 0,35 28,5 28,53 1,97 3,00 30,0 0,3 2,513-02-1998 2,79 0,75 0,79 1,65 0,00 60 0,35 28,5 26,88 0,00 0,00 0,0 0,0 0,014-02-1998 2,04 0,75 0,79 1,21 0,00 60 0,35 28,5 28,53 2,86 4,36 43,6 0,5 3,615-02-1998 4,48 0,75 0,79 2,66 2,34 60 0,35 28,5 28,22 0,00 0,00 0,0 0,0 0,016-02-1998 1,85 0,75 0,79 1,09 0,00 60 0,35 28,5 28,53 1,41 2,15 21,5 0,2 1,817-02-1998 1,65 0,75 0,79 0,98 0,00 60 0,35 28,5 27,56 0,00 0,00 0,0 0,0 0,018-02-1998 1,42 0,75 0,79 0,84 0,00 60 0,35 28,5 28,53 1,82 2,77 27,7 0,3 2,319-02-1998 1,71 0,75 0,79 1,01 0,00 60 0,35 28,5 27,52 0,00 0,00 0,0 0,0 0,0

Page 145: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

145

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------20-02-1998 1,85 0,75 0,79 1,09 0,00 60 0,35 28,5 28,53 2,11 3,21 32,1 0,4 2,721-02-1998 1,35 0,75 0,79 0,80 0,16 60 0,35 28,5 27,90 0,00 0,00 0,0 0,0 0,022-02-1998 1,18 0,75 0,79 0,70 0,00 60 0,35 28,5 28,53 1,34 2,04 20,4 0,2 1,723-02-1998 1,12 0,75 0,79 0,66 0,00 60 0,35 28,5 27,87 0,00 0,00 0,0 0,0 0,024-02-1998 1,58 0,75 0,79 0,94 0,16 60 0,35 28,5 28,53 1,44 2,19 21,9 0,2 1,825-02-1998 2,00 0,75 0,79 1,18 0,00 60 0,35 28,5 27,35 0,00 0,00 0,0 0,0 0,026-02-1998 3,63 0,75 0,79 2,15 0,00 60 0,35 28,5 28,53 3,34 5,08 50,8 0,6 4,227-02-1998 2,33 0,75 0,79 1,38 0,00 60 0,35 28,5 27,16 0,00 0,00 0,0 0,0 0,028-02-1998 1,73 0,75 0,79 1,03 0,00 60 0,35 28,5 28,53 2,41 3,66 36,6 0,4 3,101-03-1998 1,26 0,80 0,79 0,79 0,00 60 0,35 28,5 27,74 0,00 0,00 0,0 0,0 0,002-03-1998 1,52 0,80 0,79 0,96 0,16 60 0,35 28,5 28,53 1,59 2,43 24,3 0,3 2,003-03-1998 1,20 0,80 0,79 0,76 0,16 60 0,35 28,5 27,94 0,00 0,00 0,0 0,0 0,004-03-1998 1,45 0,80 0,79 0,92 0,00 60 0,35 28,5 28,53 1,52 2,31 23,1 0,3 1,905-03-1998 1,43 0,80 0,79 0,90 0,00 60 0,35 28,5 27,63 0,00 0,00 0,0 0,0 0,006-03-1998 1,53 0,80 0,79 0,97 0,00 60 0,35 28,5 28,53 1,87 2,84 28,4 0,3 2,407-03-1998 2,00 0,80 0,79 1,27 0,00 60 0,35 28,5 27,27 0,00 0,00 0,0 0,0 0,008-03-1998 2,70 0,80 0,79 1,71 0,16 60 0,35 28,5 28,53 2,81 4,28 42,8 0,5 3,609-03-1998 2,60 0,80 0,79 1,64 0,00 60 0,35 28,5 26,89 0,00 0,00 0,0 0,0 0,010-03-1998 2,54 0,80 0,79 1,60 0,00 60 0,35 28,5 28,53 3,25 4,94 49,4 0,6 4,111-03-1998 3,03 0,80 0,79 1,91 0,00 60 0,35 28,5 26,62 0,00 0,00 0,0 0,0 0,012-03-1998 2,52 0,80 0,79 1,59 0,00 60 0,35 28,5 28,53 3,51 5,34 53,4 0,6 4,513-03-1998 2,48 0,80 0,79 1,57 0,00 60 0,35 28,5 26,97 0,00 0,00 0,0 0,0 0,014-03-1998 2,45 0,80 0,79 1,55 0,00 60 0,35 28,5 28,53 3,12 4,75 47,5 0,5 4,015-03-1998 2,46 0,80 0,79 1,55 0,00 60 0,35 28,5 26,98 0,00 0,00 0,0 0,0 0,016-03-1998 2,46 0,80 0,79 1,55 0,00 60 0,35 28,5 28,53 3,11 4,74 47,4 0,5 3,917-03-1998 2,37 0,80 0,79 1,49 0,00 60 0,35 28,5 27,04 0,00 0,00 0,0 0,0 0,018-03-1998 3,15 0,80 0,79 1,99 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,419-03-1998 6,14 0,80 0,79 3,88 0,00 60 0,35 28,5 24,65 0,00 0,00 0,0 0,0 0,020-03-1998 2,96 0,80 0,79 1,87 0,00 60 0,35 28,5 28,53 5,75 8,77 87,7 1,0 7,321-03-1998 2,40 0,80 0,79 1,52 0,00 60 0,35 28,5 27,02 0,00 0,00 0,0 0,0 0,022-03-1998 2,29 0,80 0,79 1,45 0,00 60 0,35 28,5 28,53 2,97 4,52 45,2 0,5 3,823-03-1998 2,26 0,80 0,79 1,43 0,00 60 0,35 28,5 27,10 0,00 0,00 0,0 0,0 0,024-03-1998 3,22 0,80 0,79 2,03 0,62 60 0,35 28,5 28,53 2,84 4,33 43,3 0,5 3,625-03-1998 1,65 0,80 0,79 1,04 0,00 60 0,35 28,5 27,50 0,00 0,00 0,0 0,0 0,026-03-1998 2,83 0,80 0,79 1,79 0,00 60 0,35 28,5 28,53 2,83 4,31 43,1 0,5 3,627-03-1998 2,81 0,80 0,79 1,78 0,00 60 0,35 28,5 26,76 0,00 0,00 0,0 0,0 0,028-03-1998 2,94 0,80 0,79 1,86 0,00 60 0,35 28,5 28,53 3,63 5,53 55,3 0,6 4,629-03-1998 2,30 0,80 0,79 1,45 0,00 60 0,35 28,5 27,08 0,00 0,00 0,0 0,0 0,030-03-1998 2,78 0,80 0,79 1,75 0,00 60 0,35 28,5 28,53 3,21 4,89 48,9 0,5 4,131-03-1998 2,17 0,80 0,79 1,37 0,00 60 0,35 28,5 27,16 0,00 0,00 0,0 0,0 0,001-04-1998 2,43 0,80 0,79 1,54 0,00 60 0,35 28,5 28,53 2,91 4,43 44,3 0,5 3,702-04-1998 2,81 0,80 0,79 1,78 0,00 60 0,35 28,5 26,76 0,00 0,00 0,0 0,0 0,0

Page 146: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

146

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------03-04-1998 3,01 0,80 0,79 1,90 0,00 60 0,35 28,5 28,53 3,68 5,61 56,1 0,6 4,704-04-1998 3,92 0,80 0,79 2,48 0,00 60 0,35 28,5 26,06 0,00 0,00 0,0 0,0 0,005-04-1998 3,52 0,80 0,79 2,23 0,00 60 0,35 28,5 28,53 4,70 7,16 71,6 0,8 6,006-04-1998 3,40 0,80 0,79 2,15 0,00 60 0,35 28,5 26,38 0,00 0,00 0,0 0,0 0,007-04-1998 2,51 0,80 0,79 1,59 0,00 60 0,35 28,5 28,53 3,74 5,69 56,9 0,6 4,708-04-1998 1,88 0,80 0,79 1,19 0,00 60 0,35 28,5 27,35 0,00 0,00 0,0 0,0 0,009-04-1998 3,17 0,80 0,79 2,00 0,00 60 0,35 28,5 28,53 3,19 4,85 48,5 0,5 4,010-04-1998 3,48 0,80 0,79 2,20 0,16 60 0,35 28,5 26,50 0,00 0,00 0,0 0,0 0,011-04-1998 3,38 0,80 0,79 2,14 0,00 60 0,35 28,5 28,53 4,18 6,36 63,6 0,7 5,312-04-1998 3,99 0,80 0,79 2,52 0,00 60 0,35 28,5 26,01 0,00 0,00 0,0 0,0 0,013-04-1998 3,08 0,80 0,79 1,94 0,00 60 0,35 28,5 28,53 4,47 6,81 68,1 0,8 5,714-04-1998 3,32 0,80 0,79 2,10 0,00 60 0,35 28,5 26,44 0,00 0,00 0,0 0,0 0,015-04-1998 3,14 0,80 0,79 1,99 0,16 60 0,35 28,5 28,53 3,92 5,98 59,8 0,7 5,016-04-1998 3,07 0,80 0,79 1,94 0,00 60 0,35 28,5 26,60 0,00 0,00 0,0 0,0 0,017-04-1998 1,13 0,80 0,79 0,71 2,80 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,018-04-1998 1,05 0,80 0,79 0,67 7,64 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,019-04-1998 1,74 0,80 0,79 1,10 0,78 60 0,35 28,5 28,53 0,32 0,49 4,9 5,5 0,420-04-1998 0,48 0,80 0,79 0,30 24,60 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,021-04-1998 3,49 0,80 0,79 2,20 0,00 60 0,35 28,5 28,53 2,20 3,36 33,6 0,4 2,822-04-1998 3,65 0,80 0,79 2,30 0,00 60 0,35 28,5 26,23 0,00 0,00 0,0 0,0 0,023-04-1998 3,58 0,80 0,79 2,26 0,00 60 0,35 28,5 28,53 4,57 6,96 69,6 0,8 5,824-04-1998 2,79 0,80 0,79 1,76 0,00 60 0,35 28,5 26,77 0,00 0,00 0,0 0,0 0,025-04-1998 3,42 0,80 0,79 2,16 0,00 60 0,35 28,5 28,53 3,92 5,98 59,8 0,7 5,026-04-1998 2,91 0,80 0,79 1,84 0,16 60 0,35 28,5 26,86 0,00 0,00 0,0 0,0 0,027-04-1998 3,34 0,80 0,79 2,11 0,00 60 0,35 28,5 28,53 3,79 5,78 57,8 0,6 4,828-04-1998 4,81 0,80 0,79 3,04 0,00 60 0,35 28,5 25,50 0,00 0,00 0,0 0,0 0,029-04-1998 6,14 0,80 0,79 3,88 0,00 60 0,35 28,5 28,53 6,92 10,54 105,4 1,2 8,830-04-1998 4,37 0,80 0,79 2,76 0,00 60 0,35 28,5 25,77 0,00 0,00 0,0 0,0 0,001-05-1998 4,20 0,80 0,79 2,65 0,00 60 0,35 28,5 28,53 5,41 8,25 82,5 0,9 6,902-05-1998 3,81 0,80 0,79 2,40 0,00 60 0,35 28,5 26,13 0,00 0,00 0,0 0,0 0,003-05-1998 3,25 0,80 0,79 2,05 0,00 60 0,35 28,5 28,53 4,46 6,79 67,9 0,8 5,704-05-1998 3,84 0,80 0,79 2,43 0,16 60 0,35 28,5 26,27 0,00 0,00 0,0 0,0 0,005-05-1998 4,88 0,80 0,79 3,08 0,00 60 0,35 28,5 28,53 5,35 8,15 81,5 0,9 6,806-05-1998 6,98 0,80 0,79 4,41 0,00 60 0,35 28,5 24,12 0,00 0,00 0,0 0,0 0,007-05-1998 3,02 0,80 0,79 1,91 0,62 60 0,35 28,5 28,53 5,70 8,68 86,8 1,0 7,208-05-1998 4,02 0,80 0,79 2,54 0,00 60 0,35 28,5 25,99 0,00 0,00 0,0 0,0 0,009-05-1998 4,08 0,80 0,79 2,58 0,00 60 0,35 28,5 28,53 5,12 7,80 78,0 0,9 6,510-05-1998 3,04 0,80 0,79 1,92 0,00 60 0,35 28,5 26,61 0,00 0,00 0,0 0,0 0,011-05-1998 2,56 0,80 0,79 1,62 0,00 60 0,35 28,5 28,53 3,54 5,39 53,9 0,6 4,512-05-1998 2,36 0,80 0,79 1,49 0,00 60 0,35 28,5 27,04 0,00 0,00 0,0 0,0 0,013-05-1998 3,27 0,80 0,79 2,06 0,00 60 0,35 28,5 28,53 3,56 5,42 54,2 0,6 4,514-05-1998 3,75 0,80 0,79 2,37 0,31 60 0,35 28,5 26,48 0,00 0,00 0,0 0,0 0,0

Page 147: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

147

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------15-05-1998 1,76 0,80 0,79 1,11 0,93 60 0,35 28,5 28,53 2,24 3,41 34,1 0,4 2,816-05-1998 3,65 0,80 0,79 2,31 0,00 60 0,35 28,5 26,23 0,00 0,00 0,0 0,0 0,017-05-1998 3,87 0,80 0,79 2,45 1,24 60 0,35 28,5 28,53 3,51 5,35 53,5 0,6 4,518-05-1998 3,69 0,80 0,79 2,33 0,00 60 0,35 28,5 26,20 0,00 0,00 0,0 0,0 0,019-05-1998 3,12 0,80 0,79 1,97 0,00 60 0,35 28,5 28,53 4,30 6,56 65,6 0,7 5,520-05-1998 5,84 0,80 0,79 3,69 0,00 60 0,35 28,5 24,84 0,00 0,00 0,0 0,0 0,021-05-1998 3,91 0,80 0,79 2,47 1,87 60 0,35 28,5 28,53 4,29 6,54 65,4 0,7 5,422-05-1998 4,12 0,80 0,79 2,60 0,00 60 0,35 28,5 25,93 0,00 0,00 0,0 0,0 0,023-05-1998 4,33 0,80 0,79 2,74 0,00 60 0,35 28,5 28,53 5,34 8,14 81,4 0,9 6,824-05-1998 1,69 0,80 0,79 1,07 0,16 60 0,35 28,5 27,63 0,00 0,00 0,0 0,0 0,025-05-1998 5,21 0,80 0,79 3,29 6,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,026-05-1998 6,20 0,80 0,79 3,92 0,00 60 0,35 28,5 24,62 0,00 0,00 0,0 0,0 0,027-05-1998 5,18 0,80 0,79 3,28 0,00 60 0,35 28,5 28,53 7,19 10,95 109,6 1,2 9,128-05-1998 5,01 0,80 0,79 3,16 0,00 60 0,35 28,5 25,37 0,00 0,00 0,0 0,0 0,029-05-1998 5,35 0,80 0,79 3,38 0,00 60 0,35 28,5 28,53 6,54 9,97 99,7 1,1 8,330-05-1998 3,07 0,80 0,79 1,94 0,00 60 0,35 28,5 26,60 0,00 0,00 0,0 0,0 0,031-05-1998 2,23 0,80 0,79 1,41 5,93 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,001-06-1998 2,34 0,85 0,79 1,57 1,40 60 0,35 28,5 28,36 0,00 0,00 0,0 0,0 0,002-06-1998 3,78 0,85 0,79 2,54 0,00 60 0,35 28,5 28,53 2,71 4,13 41,3 0,5 3,403-06-1998 5,04 0,85 0,79 3,38 0,00 60 0,35 28,5 25,15 0,00 0,00 0,0 0,0 0,004-06-1998 2,00 0,85 0,79 1,34 3,75 60 0,35 28,5 28,53 0,98 1,49 14,9 0,2 1,205-06-1998 5,07 0,85 0,79 3,40 0,00 60 0,35 28,5 25,13 0,00 0,00 0,0 0,0 0,006-06-1998 5,56 0,85 0,79 3,73 0,00 60 0,35 28,5 28,53 7,13 10,86 108,7 1,2 9,107-06-1998 2,32 0,85 0,79 1,55 0,93 60 0,35 28,5 27,91 0,00 0,00 0,0 0,0 0,008-06-1998 5,34 0,85 0,79 3,58 0,00 60 0,35 28,5 28,53 4,21 6,41 64,1 0,7 5,309-06-1998 5,21 0,85 0,79 3,50 0,00 60 0,35 28,5 25,04 0,00 0,00 0,0 0,0 0,010-06-1998 4,61 0,85 0,79 3,09 0,00 60 0,35 28,5 28,53 6,59 10,04 100,4 1,1 8,411-06-1998 5,32 0,85 0,79 3,57 0,00 60 0,35 28,5 24,96 0,00 0,00 0,0 0,0 0,012-06-1998 4,66 0,85 0,79 3,13 0,00 60 0,35 28,5 28,53 6,70 10,20 102,1 1,1 8,513-06-1998 4,82 0,85 0,79 3,23 0,00 60 0,35 28,5 25,30 0,00 0,00 0,0 0,0 0,014-06-1998 6,51 0,85 0,79 4,37 0,00 60 0,35 28,5 28,53 7,60 11,58 115,8 1,3 9,715-06-1998 5,30 0,85 0,79 3,56 0,00 60 0,35 28,5 24,98 0,00 0,00 0,0 0,0 0,016-06-1998 3,17 0,85 0,79 2,13 0,00 60 0,35 28,5 28,53 5,69 8,67 86,7 1,0 7,217-06-1998 2,81 0,85 0,79 1,88 0,00 60 0,35 28,5 26,65 0,00 0,00 0,0 0,0 0,018-06-1998 3,56 0,85 0,79 2,39 0,62 60 0,35 28,5 28,53 3,65 5,56 55,6 0,6 4,619-06-1998 4,30 0,85 0,79 2,88 0,00 60 0,35 28,5 25,65 0,00 0,00 0,0 0,0 0,020-06-1998 5,16 0,85 0,79 3,46 0,00 60 0,35 28,5 28,53 6,35 9,67 96,7 1,1 8,121-06-1998 4,83 0,85 0,79 3,24 0,00 60 0,35 28,5 25,29 0,00 0,00 0,0 0,0 0,022-06-1998 3,85 0,85 0,79 2,58 0,00 60 0,35 28,5 28,53 5,82 8,87 88,7 1,0 7,423-06-1998 6,17 0,85 0,79 4,14 0,00 60 0,35 28,5 24,39 0,00 0,00 0,0 0,0 0,024-06-1998 5,37 0,85 0,79 3,61 0,00 60 0,35 28,5 28,53 7,75 11,80 118,0 1,3 9,825-06-1998 4,24 0,85 0,79 2,84 0,00 60 0,35 28,5 25,69 0,00 0,00 0,0 0,0 0,0

Page 148: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

148

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------26-06-1998 4,68 0,85 0,79 3,14 0,78 60 0,35 28,5 28,53 5,20 7,93 79,3 0,9 6,627-06-1998 2,77 0,85 0,79 1,86 0,00 60 0,35 28,5 26,68 0,00 0,00 0,0 0,0 0,028-06-1998 1,60 0,85 0,79 1,07 28,20 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,029-06-1998 3,74 0,85 0,79 2,51 0,00 60 0,35 28,5 26,02 0,00 0,00 0,0 0,0 0,030-06-1998 4,44 0,85 0,79 2,98 0,00 60 0,35 28,5 28,53 5,49 8,37 83,7 0,9 7,001-07-1998 4,49 0,85 0,79 3,02 0,00 60 0,35 28,5 25,52 0,00 0,00 0,0 0,0 0,002-07-1998 4,29 0,85 0,79 2,88 0,16 60 0,35 28,5 28,53 5,74 8,74 87,4 1,0 7,303-07-1998 4,67 0,85 0,79 3,13 0,16 60 0,35 28,5 25,56 0,00 0,00 0,0 0,0 0,004-07-1998 2,45 0,85 0,79 1,64 6,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,005-07-1998 6,20 0,85 0,79 4,16 0,00 60 0,35 28,5 24,37 0,00 0,00 0,0 0,0 0,006-07-1998 5,27 0,85 0,79 3,54 0,00 60 0,35 28,5 28,53 7,71 11,74 117,4 1,3 9,807-07-1998 5,59 0,85 0,79 3,75 0,00 60 0,35 28,5 24,78 0,00 0,00 0,0 0,0 0,008-07-1998 6,03 0,85 0,79 4,05 0,00 60 0,35 28,5 28,53 7,80 11,88 118,8 1,3 9,909-07-1998 3,46 0,85 0,79 2,32 1,40 60 0,35 28,5 27,61 0,00 0,00 0,0 0,0 0,010-07-1998 3,97 0,85 0,79 2,67 0,31 60 0,35 28,5 28,53 3,28 4,99 49,9 0,6 4,211-07-1998 5,41 0,85 0,79 3,63 0,00 60 0,35 28,5 24,90 0,00 0,00 0,0 0,0 0,012-07-1998 4,70 0,85 0,79 3,16 0,00 60 0,35 28,5 28,53 6,79 10,34 103,5 1,2 8,613-07-1998 4,94 0,85 0,79 3,31 0,00 60 0,35 28,5 25,22 0,00 0,00 0,0 0,0 0,014-07-1998 4,33 0,85 0,79 2,91 0,00 60 0,35 28,5 28,53 6,22 9,48 94,8 1,1 7,915-07-1998 5,80 0,85 0,79 3,90 0,00 60 0,35 28,5 24,64 0,00 0,00 0,0 0,0 0,016-07-1998 5,02 0,85 0,79 3,37 0,00 60 0,35 28,5 28,53 7,26 11,06 110,7 1,2 9,217-07-1998 5,90 0,85 0,79 3,96 0,00 60 0,35 28,5 24,58 0,00 0,00 0,0 0,0 0,018-07-1998 5,42 0,85 0,79 3,64 0,00 60 0,35 28,5 28,53 7,60 11,57 115,7 1,3 9,619-07-1998 5,58 0,85 0,79 3,74 0,00 60 0,35 28,5 24,79 0,00 0,00 0,0 0,0 0,020-07-1998 3,71 0,85 0,79 2,49 0,00 60 0,35 28,5 28,53 6,23 9,50 95,0 1,1 7,921-07-1998 4,63 0,85 0,79 3,11 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,022-07-1998 5,39 0,85 0,79 3,62 0,00 60 0,35 28,5 28,53 6,73 10,24 102,5 1,2 8,523-07-1998 4,18 0,85 0,79 2,81 0,16 60 0,35 28,5 25,89 0,00 0,00 0,0 0,0 0,024-07-1998 5,26 0,85 0,79 3,53 0,00 60 0,35 28,5 28,53 6,18 9,41 94,1 1,1 7,825-07-1998 5,74 0,85 0,79 3,85 0,00 60 0,35 28,5 24,68 0,00 0,00 0,0 0,0 0,026-07-1998 5,44 0,85 0,79 3,65 0,00 60 0,35 28,5 28,53 7,51 11,44 114,4 1,3 9,527-07-1998 4,40 0,85 0,79 2,96 0,00 60 0,35 28,5 25,58 0,00 0,00 0,0 0,0 0,028-07-1998 4,62 0,85 0,79 3,11 0,00 60 0,35 28,5 28,53 6,06 9,24 92,4 1,0 7,729-07-1998 4,67 0,85 0,79 3,13 0,00 60 0,35 28,5 25,40 0,00 0,00 0,0 0,0 0,030-07-1998 4,89 0,85 0,79 3,28 0,00 60 0,35 28,5 28,53 6,42 9,78 97,8 1,1 8,131-07-1998 5,78 0,85 0,79 3,88 0,00 60 0,35 28,5 24,65 0,00 0,00 0,0 0,0 0,001-08-1998 4,79 0,85 0,79 3,22 0,00 60 0,35 28,5 28,53 7,10 10,81 108,2 1,2 9,002-08-1998 4,81 0,85 0,79 3,23 0,00 60 0,35 28,5 25,30 0,00 0,00 0,0 0,0 0,003-08-1998 4,84 0,85 0,79 3,25 0,00 60 0,35 28,5 28,53 6,48 9,88 98,8 1,1 8,204-08-1998 3,86 0,85 0,79 2,59 0,93 60 0,35 28,5 26,87 0,00 0,00 0,0 0,0 0,005-08-1998 3,14 0,85 0,79 2,11 1,87 60 0,35 28,5 28,53 1,90 2,89 28,9 0,3 2,406-08-1998 3,60 0,85 0,79 2,42 0,31 60 0,35 28,5 26,43 0,00 0,00 0,0 0,0 0,0

Page 149: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

149

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------07-08-1998 4,43 0,85 0,79 2,97 0,78 60 0,35 28,5 28,53 4,30 6,55 65,5 0,7 5,508-08-1998 4,56 0,85 0,79 3,06 0,00 60 0,35 28,5 25,48 0,00 0,00 0,0 0,0 0,009-08-1998 4,88 0,85 0,79 3,28 0,00 60 0,35 28,5 28,53 6,34 9,65 96,5 1,1 8,010-08-1998 3,15 0,85 0,79 2,12 18,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,011-08-1998 4,95 0,85 0,79 3,32 0,16 60 0,35 28,5 28,53 3,16 4,82 48,2 0,5 4,012-08-1998 4,94 0,85 0,79 3,32 0,00 60 0,35 28,5 25,22 0,00 0,00 0,0 0,0 0,013-08-1998 4,74 0,85 0,79 3,18 0,00 60 0,35 28,5 28,53 6,50 9,90 99,0 1,1 8,314-08-1998 4,69 0,85 0,79 3,15 0,00 60 0,35 28,5 25,39 0,00 0,00 0,0 0,0 0,015-08-1998 4,86 0,85 0,79 3,26 0,00 60 0,35 28,5 28,53 6,41 9,77 97,7 1,1 8,116-08-1998 3,71 0,85 0,79 2,49 0,16 60 0,35 28,5 26,20 0,00 0,00 0,0 0,0 0,017-08-1998 4,19 0,85 0,79 2,81 0,00 60 0,35 28,5 28,53 5,14 7,83 78,3 0,9 6,518-08-1998 3,27 0,85 0,79 2,19 0,00 60 0,35 28,5 26,34 0,00 0,00 0,0 0,0 0,019-08-1998 4,40 0,85 0,79 2,96 0,00 60 0,35 28,5 28,53 5,15 7,85 78,5 0,9 6,520-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,021-08-1998 4,65 0,85 0,79 3,12 0,00 60 0,35 28,5 28,53 6,22 9,48 94,8 1,1 7,922-08-1998 4,94 0,85 0,79 3,32 0,00 60 0,35 28,5 25,22 0,00 0,00 0,0 0,0 0,023-08-1998 4,76 0,85 0,79 3,20 0,00 60 0,35 28,5 28,53 6,52 9,93 99,3 1,1 8,324-08-1998 4,76 0,85 0,79 3,20 0,00 60 0,35 28,5 25,34 0,00 0,00 0,0 0,0 0,025-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,30 9,60 96,0 1,1 8,026-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,027-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,928-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,029-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,930-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,031-08-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,901-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,002-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,903-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,004-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,905-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,006-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,907-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,008-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,909-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,010-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,911-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,012-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,913-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,014-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,915-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,016-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 28,53 6,20 9,45 94,5 1,1 7,917-09-1998 4,62 0,85 0,79 3,10 0,00 60 0,35 28,5 25,43 0,00 0,00 0,0 0,0 0,0

Page 150: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

150

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------18-09-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 4,84 7,37 73,7 0,8 6,119-09-1998 3,32 0,85 0,79 2,23 0,00 60 0,35 28,5 26,31 0,00 0,00 0,0 0,0 0,020-09-1998 3,10 0,85 0,79 2,08 0,00 60 0,35 28,5 28,53 4,30 6,56 65,6 0,7 5,521-09-1998 3,23 0,85 0,79 2,17 0,00 60 0,35 28,5 26,37 0,00 0,00 0,0 0,0 0,022-09-1998 3,15 0,85 0,79 2,11 0,93 60 0,35 28,5 28,53 3,35 5,10 51,0 0,6 4,323-09-1998 3,07 0,85 0,79 2,06 0,00 60 0,35 28,5 26,47 0,00 0,00 0,0 0,0 0,024-09-1998 1,91 0,85 0,79 1,28 0,47 60 0,35 28,5 28,53 2,87 4,37 43,7 0,5 3,625-09-1998 0,56 0,85 0,79 0,38 13,00 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,026-09-1998 3,15 0,85 0,79 2,12 0,00 60 0,35 28,5 28,53 2,12 3,22 32,2 0,4 2,727-09-1998 3,10 0,85 0,79 2,08 0,00 60 0,35 28,5 26,45 0,00 0,00 0,0 0,0 0,028-09-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 2,80 4,26 42,6 0,5 3,629-09-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,030-09-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,801-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,002-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,803-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,004-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,805-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,006-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,807-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,008-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,809-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,010-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,811-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,012-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,813-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,014-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 28,53 1,43 2,19 21,9 0,2 1,815-10-1998 1,07 0,85 0,79 0,72 0,00 60 0,35 28,5 27,82 0,00 0,00 0,0 0,0 0,016-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 2,46 3,74 37,4 0,4 3,117-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,018-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,419-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,020-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,421-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,022-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,423-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 26,80 0,00 0,00 0,0 0,0 0,024-10-1998 2,59 0,85 0,79 1,74 0,00 60 0,35 28,5 28,53 3,48 5,30 53,0 0,6 4,425-10-1998 2,43 0,85 0,79 1,63 0,00 60 0,35 28,5 26,91 0,00 0,00 0,0 0,0 0,026-10-1998 1,64 0,85 0,79 1,10 0,00 60 0,35 28,5 28,53 2,73 4,16 41,6 0,5 3,527-10-1998 1,61 0,85 0,79 1,08 1,09 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,028-10-1998 0,34 0,85 0,79 0,23 42,30 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,029-10-1998 1,67 0,85 0,79 1,12 0,00 60 0,35 28,5 27,41 0,00 0,00 0,0 0,0 0,0

Page 151: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

151

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------30-10-1998 1,69 0,85 0,79 1,13 0,00 60 0,35 28,5 28,53 2,25 3,43 34,3 0,4 2,931-10-1998 1,76 0,85 0,79 1,18 0,00 60 0,35 28,5 27,36 0,00 0,00 0,0 0,0 0,001-11-1998 1,57 0,80 0,79 0,99 0,00 60 0,35 28,5 28,53 2,17 3,31 33,1 0,4 2,802-11-1998 0,92 0,80 0,79 0,58 2,34 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,003-11-1998 0,25 0,80 0,79 0,16 1,09 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,004-11-1998 1,35 0,80 0,79 0,85 0,16 60 0,35 28,5 27,84 0,00 0,00 0,0 0,0 0,005-11-1998 0,87 0,80 0,79 0,55 0,00 60 0,35 28,5 28,53 1,24 1,89 18,9 0,2 1,606-11-1998 2,31 0,80 0,79 1,46 0,47 60 0,35 28,5 27,55 0,00 0,00 0,0 0,0 0,007-11-1998 1,97 0,80 0,79 1,25 0,00 60 0,35 28,5 28,53 2,23 3,40 34,0 0,4 2,808-11-1998 2,36 0,80 0,79 1,49 0,00 60 0,35 28,5 27,04 0,00 0,00 0,0 0,0 0,009-11-1998 2,36 0,80 0,79 1,49 0,00 60 0,35 28,5 28,53 2,98 4,54 45,4 0,5 3,810-11-1998 1,98 0,80 0,79 1,25 0,00 60 0,35 28,5 27,29 0,00 0,00 0,0 0,0 0,011-11-1998 1,85 0,80 0,79 1,17 0,93 60 0,35 28,5 28,53 1,48 2,26 22,6 0,3 1,912-11-1998 1,86 0,80 0,79 1,18 0,00 60 0,35 28,5 27,36 0,00 0,00 0,0 0,0 0,013-11-1998 0,77 0,80 0,79 0,49 0,00 60 0,35 28,5 28,53 1,66 2,54 25,4 0,3 2,114-11-1998 1,25 0,80 0,79 0,79 0,00 60 0,35 28,5 27,74 0,00 0,00 0,0 0,0 0,015-11-1998 1,20 0,80 0,79 0,76 0,16 60 0,35 28,5 28,53 1,39 2,12 21,2 0,2 1,816-11-1998 1,19 0,80 0,79 0,75 0,00 60 0,35 28,5 27,78 0,00 0,00 0,0 0,0 0,017-11-1998 1,06 0,80 0,79 0,67 0,00 60 0,35 28,5 28,53 1,42 2,17 21,7 0,2 1,818-11-1998 0,51 0,80 0,79 0,32 0,16 60 0,35 28,5 28,37 0,00 0,00 0,0 0,0 0,019-11-1998 1,99 0,80 0,79 1,26 0,00 60 0,35 28,5 28,53 1,42 2,16 21,6 0,2 1,820-11-1998 1,77 0,80 0,79 1,12 0,00 60 0,35 28,5 27,41 0,00 0,00 0,0 0,0 0,021-11-1998 0,37 0,80 0,79 0,23 3,90 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,022-11-1998 2,02 0,80 0,79 1,28 0,16 60 0,35 28,5 27,42 0,00 0,00 0,0 0,0 0,023-11-1998 1,62 0,80 0,79 1,02 0,00 60 0,35 28,5 28,53 2,14 3,26 32,6 0,4 2,724-11-1998 1,02 0,80 0,79 0,64 0,00 60 0,35 28,5 27,89 0,00 0,00 0,0 0,0 0,025-11-1998 0,76 0,80 0,79 0,48 6,24 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,026-11-1998 0,72 0,80 0,79 0,45 13,60 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,027-11-1998 1,25 0,80 0,79 0,79 0,78 60 0,35 28,5 28,53 1,00 1,52 0,2 1,7 1,328-11-1998 0,71 0,80 0,79 0,45 0,16 60 0,35 28,5 28,24 0,00 0,00 0,0 0,0 0,029-11-1998 2,15 0,80 0,79 1,36 0,31 60 0,35 28,5 28,53 1,34 2,04 20,4 0,2 1,730-11-1998 4,04 0,80 0,79 2,55 0,62 60 0,35 28,5 26,60 0,00 0,00 0,0 0,0 0,001-12-1998 1,17 0,80 0,79 0,74 0,00 60 0,35 28,5 28,53 2,67 4,07 40,7 0,5 3,402-12-1998 2,15 0,80 0,79 1,36 0,00 60 0,35 28,5 27,18 0,00 0,00 0,0 0,0 0,003-12-1998 1,58 0,80 0,79 1,00 0,00 60 0,35 28,5 28,53 2,36 3,59 35,9 0,4 3,004-12-1998 0,81 0,80 0,79 0,51 7,80 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,005-12-1998 1,81 0,80 0,79 1,14 12,40 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,006-12-1998 1,18 0,80 0,79 0,74 0,00 60 0,35 28,5 27,79 0,00 0,00 0,0 0,0 0,007-12-1998 0,72 0,80 0,79 0,45 0,00 60 0,35 28,5 28,53 1,20 1,82 18,2 0,2 1,508-12-1998 0,88 0,80 0,79 0,56 0,00 60 0,35 28,5 27,98 0,00 0,00 0,0 0,0 0,009-12-1998 0,89 0,80 0,79 0,56 0,00 60 0,35 28,5 28,53 1,12 1,70 17,0 0,2 1,410-12-1998 0,72 0,80 0,79 0,46 0,00 60 0,35 28,5 28,08 0,00 0,00 0,0 0,0 0,0

Page 152: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

152

Fecha ETo Kc Kl ETcKl P.E. Raices F.A. R.F.U. Reserva d.n. d.b. D.B. tiempoI tiempoC [mm] [mm] [mm] [cm] [mm] [mm] [mm] [mm] [m3/par] [horas] [hora]---------- ----- ---- ---- ----- ------ ------ ---- ------ ------- ----- ----- -------- ------- -------11-12-1998 0,58 0,80 0,79 0,36 0,00 60 0,35 28,5 28,53 0,82 1,25 12,5 0,1 1,012-12-1998 0,63 0,80 0,79 0,40 3,90 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,013-12-1998 1,22 0,80 0,79 0,77 0,00 60 0,35 28,5 28,53 0,77 1,18 11,8 0,1 1,014-12-1998 0,61 0,80 0,79 0,39 0,00 60 0,35 28,5 28,15 0,00 0,00 0,0 0,0 0,015-12-1998 1,15 0,80 0,79 0,73 0,00 60 0,35 28,5 28,53 1,11 1,70 17,0 0,2 1,416-12-1998 0,20 0,80 0,79 0,13 9,84 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,017-12-1998 5,10 0,80 0,79 3,22 6,24 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,018-12-1998 0,17 0,80 0,79 0,10 2,65 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,019-12-1998 0,45 0,80 0,79 0,28 0,00 60 0,35 28,5 28,53 0,28 0,43 4,3 4,8 0,420-12-1998 1,41 0,80 0,79 0,89 0,31 60 0,35 28,5 27,96 0,00 0,00 0,0 0,0 0,021-12-1998 0,99 0,80 0,79 0,63 0,00 60 0,35 28,5 28,53 1,20 1,83 18,3 0,2 1,522-12-1998 0,69 0,80 0,79 0,44 0,00 60 0,35 28,5 28,10 0,00 0,00 0,0 0,0 0,023-12-1998 2,41 0,80 0,79 1,53 0,16 60 0,35 28,5 28,53 1,80 2,75 27,5 0,3 2,324-12-1998 0,65 0,80 0,79 0,41 0,00 60 0,35 28,5 28,12 0,00 0,00 0,0 0,0 0,025-12-1998 0,89 0,80 0,79 0,56 0,00 60 0,35 28,5 28,53 0,97 1,48 14,8 0,2 1,226-12-1998 1,12 0,80 0,79 0,71 0,62 60 0,35 28,5 28,45 0,00 0,00 0,0 0,0 0,027-12-1998 2,31 0,80 0,79 1,46 0,16 60 0,35 28,5 28,53 1,39 2,12 21,2 0,2 1,828-12-1998 1,49 0,80 0,79 0,94 0,00 60 0,35 28,5 27,60 0,00 0,00 0,0 0,0 0,029-12-1998 0,70 0,80 0,79 0,44 0,00 60 0,35 28,5 28,53 1,38 2,10 21,0 0,2 1,830-12-1998 0,38 0,80 0,79 0,24 0,31 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,031-12-1998 0,52 0,80 0,79 0,33 9,20 60 0,35 28,5 28,53 0,00 0,00 0,0 0,0 0,0

Total ETc·Kl [mm]..................: 671Total P.E. [mm]....................: 384Número de Riegos...................: 162Total dosis neta [mm]..............: 594Total dosis bruta [mm].............: 905Total dosis bruta [m3/parcela].....: 9038

Page 153: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

153

----------------------------------------------------------------------------------NOTAS: - Cuando el intervalo de riego está en blanco, no se tiene en cuenta. - ETo [mm] = Evapotranspiración de referencia. - Kc = Constante de cultivo. - Kl = Coeficiente de localización. Sólo en riego localizado. - ETcKl [mm]= Evapotranspiración de cultivo por coeficiente de localización - P.E. [cm]= Lluvia efectiva (véase método aplicado) - Raíces [cm] = Profundidad efectiva de las raíces - R.F.U. [mm] = Volumen de agua máximo de la Reserva Fácilmente Utilizable (RFU) - Reserva [mm] = Volumen de agua existente en la RFU al final del día - d.n. [mm] = Dosis neta de riego - d.b. [mm] = Dosis bruta de riego - D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela - tiempoI [horas] = Tiempo mínimo previsto de riego debido a la infiltración - tiempoC [horas] = Tiempo mínimo previsto de riego debido al Caudal - De las dos cifras anteriores, la mayor de ellas será el tiempo mínimo de riego----------------------------------------------------------------------------------

Page 154: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

154

7. ANEJO 3. PROGRAMA REALIZADO.

Figura 21. Resultados. Listado de riegos a efectuar.RIEGOS A EFECTUAR 28/11/98 19:28:13

Programación........................................: MAIZ (LLEIDA,MENSUAL)Finca...............................................: El maizalPoblación...........................................: LleidaProvincia...........................................: LleidaLatitud [g,m,s].....................................: 41º 37' 49'' NºLongitud [g,m,s]....................................: 0º 35' 50'' EºAltitud [m].........................................: 190Superficie [m2].....................................: 10000Cultivo.............................................: MAIZ (GRANO)Fracción agua disponible en el suelo................: 0,4Clase textural......................................: FRANCODensidad aparente [g/cm3]...........................: 1,51Capacidad de Campo [% peso].........................: 19Punto de Marchitamiento [%peso].....................: 10Sistema Riego.......................................: ASPERSION (CLIMA SECO)Eficiencia en la aplicación [%].....................: 67Caudal instalación riego [m3/parcela]...............: 100Conductividad agua de riego [dS/m]..................: 3Eficiencia en el lavado de sales [%]................: 70Rendimiento mínimo deseado debido a salinidad [%]...: 100Fecha Plantación/Inicio.............................: 01-04-1998Momento de Riego. Agotamiento de la RFU [%].........: 100Intervalo de riego [días]...........................:Dosis de riego. Recarga de la RFU [%]...............: 100Nivel de agua de la RFU al inicio [%]...............: 0

Fecha d.n. d.b. D.B. tiempoI tiempoF Notas [mm] [mm] [m3/par] [horas] [hora]---------- ----- ----- -------- ------- ------- ---------------------------01-04-1998 5,67 17,80 178,1 1,2 1,8 Se aplica lavado de sales.25-04-1998 5,52 17,34 173,5 1,2 1,7 Se aplica lavado de sales.04-05-1998 6,60 20,72 207,3 1,4 2,1 Se aplica lavado de sales.08-05-1998 6,62 20,81 208,1 1,4 2,1 Se aplica lavado de sales.12-05-1998 7,80 24,50 245,1 1,6 2,5 Se aplica lavado de sales.16-05-1998 8,93 28,06 280,6 1,9 2,8 Se aplica lavado de sales.20-05-1998 10,10 31,75 317,5 2,1 3,2 Se aplica lavado de sales.24-05-1998 11,27 35,45 354,5 2,4 3,5 Se aplica lavado de sales.

Page 155: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

155

Fecha d.n. d.b. D.B. tiempoI tiempoF Notas [mm] [mm] [m3/par] [horas] [hora]---------- ----- ----- -------- ------- ------- ---------------------------27-05-1998 8,81 27,68 276,8 1,8 2,8 Se aplica lavado de sales.30-05-1998 10,02 31,49 315,0 2,1 3,1 Se aplica lavado de sales.02-06-1998 11,74 36,91 369,1 2,5 3,7 Se aplica lavado de sales.05-06-1998 12,97 40,77 407,7 2,7 4,1 Se aplica lavado de sales.08-06-1998 13,32 41,87 418,8 2,8 4,2 Se aplica lavado de sales.11-06-1998 14,46 45,46 454,7 3,0 4,5 Se aplica lavado de sales.14-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.17-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.20-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.23-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.26-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.29-06-1998 13,92 43,75 437,6 2,9 4,4 Se aplica lavado de sales.01-07-1998 11,17 35,10 351,1 2,3 3,5 Se aplica lavado de sales.03-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.05-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.07-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.09-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.11-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.13-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.15-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.17-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.19-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.21-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.23-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.25-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.27-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.29-07-1998 13,05 41,03 410,4 2,7 4,1 Se aplica lavado de sales.31-07-1998 13,81 43,40 434,0 2,9 4,3 Se aplica lavado de sales.03-08-1998 15,52 48,79 487,9 3,3 4,9 Se aplica lavado de sales.07-08-1998 19,37 60,90 609,1 4,1 6,1 Se aplica lavado de sales.12-08-1998 22,10 69,46 694,7 4,6 6,9 Se aplica lavado de sales.18-08-1998 23,41 73,57 735,8 4,9 7,4 Se aplica lavado de sales.27-08-1998 28,74 90,35 903,5 6,0 9,0 Se aplica lavado de sales.

Número de Riegos...................: 41Total dosis neta [mm]..............: 534Total dosis bruta [mm].............: 1679Total dosis bruta [m3/parcela].....: 16793

----------------------------------------------------------------------------------

Page 156: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 3

156

NOTAS: - Cuando el intervalo de riego está en blanco, no se tiene en cuenta. - d.n. [mm] = Dosis neta de riego - d.b. [mm] = Dosis bruta de riego - D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela - tiempoI [horas] = Tiempo mínimo previsto de riego debido a la infiltración - tiempoC [horas] = Tiempo mínimo previsto de riego debido al Caudal - De las dos cifras anteriores, la mayor de ellas será el tiempo mínimo de riego----------------------------------------------------------------------------------

Page 157: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 4

157

7. ANEJO 4.

1. CÁLCULO DEL Kc INICIAL

Para calcular el Kc inicial en los cultivos extensivos y de huerta se dispone de 5

curvas que relacionan la ETo y la frecuencia re riegos (o lluvias) con el KC.

Se ha extraído los valores de Kc a partir de datos de ETo de 0,5 en 0,5 mm para

las cinco curva. En la tabla 1, se puede ver los valores de Kc.

Tabla 1. Valores de Kc para distintas frecuencias de riegos/lluvias y ETo.

Frecuencia de riegos ó lluviasETo [mm] (2 días) (4 días) (7 días) (10 días) (20 días)

0,50 1,08 0,98 0,81 0,65 0,49

1,00 1,05 0,95 0,76 0,61 0,44

1,50 1,03 0,91 0,71 0,56 0,41

2,00 1,00 0,86 0,66 0,51 0,37

2,50 0,97 0,83 0,62 0,46 0,34

3,00 0,95 0,79 0,57 0,43 0,31

3,50 0,93 0,76 0,54 0,40 0,27

4,00 0,91 0,72 0,51 0,36 0,26

4,50 0,90 0,70 0,48 0,34 0,24

5,00 0,88 0,66 0,46 0,32 0,23

5,50 0,86 0,63 0,43 0,30 0,21

6,00 0,84 0,61 0,42 0,28 0,20

6,50 0,83 0,58 0,40 0,26 0,18

7,00 0,82 0,57 0,38 0,25 0,18

7,50 0,81 0,56 0,37 0,24 0,17

8,00 0,80 0,54 0,36 0,23 0,16

8,50 0,79 0,53 0,34 0,22 0,16

9,00 0,78 0,52 0,34 0,22 0,16

9,50 0,77 0,51 0,33 0,21 0,15

10,00 0,77 0,50 0,32 0,20 0,15

Page 158: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 4

158

Se ha calculado las regresiones polinomiales en grado 2 de las cinco frecuencias

de riego o de lluvia y se ha obtenidos las siguientes regresiones:

Kc(2) = (0,0025*ETo*ETo ) - (0,0588*ETo) + 1,1068 R2 = 0,9988

Kc(4) = (0,0043*ETo*ETo ) - (0,097*ETo) + 1,0403 R2 = 0,9989

Kc(7) = (0,0053*ETo*ETo ) - (0,1049*ETo) + 0,8502 R2 = 0,9985

Kc(10)= (0,0053*ETo*ETo ) - (0,1009*ETo) + 0,6915 R2 = 0,9972

Kc(20)= (0,0046*ETo*ETo ) - (0,0824*ETo) + 0,52 R2 = 0,9958

Kc es la constante de cultivo en la fase inicial para cultivos A (FAO 24).

ETo es la evapotranspiración de referencia [mm].

R2 valor R cuadrado.

Para calcular el Kc entre 2 y 20 días de riego se realizará la siguiente operación:

¿La frecuencia de riego corresponde a una de las 5 curvas?

-SI: Utilizamos la tabla.

-NO: Se seleccionará las dos ecuaciones que la abarcan (por ejemplo,

para 6 días de frecuencia de riego se cogerá las ecuaciones Kc(4) y

Kc(7).

A continuación, se calcula los Kc correspondientes para la Eto que

se dispone.

Posteriormente se realiza una interpolación lineal entre los dos

valores con la siguiente fórmula:

( )

−−

−+=MENORMAYOR

MENORMAYORMENORMAYOR DiasKcDiasKc

KcKcDiasKcDiasRiegoKcKc

siendo:

Kc : Kc que se busca.

KcMAYOR : Kc de la frecuencia de riego superior.

KcMENOR : Kc de la frecuencia de riego inferior.

DiasKcMAYOR : días de la frecuencia de riego superior.

DiasKcMENOR : días de la frecuencia de riego inferior.

DiasRiego : días de riego.

Page 159: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 4

159

A continuación, se pone un ejemplo para clarificar el cálculo.Ejemplo:

Frecuencia de riego = 6 días

Eto = 5 mm/día

Hallar Kc

[0,67 - 0,46]

Kc = 0,46 + [ [6 - 4] * [-------------] ] = 0,60

[7 - 4]

Page 160: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 4

160

2. DETERMINACIÓN INDIRECTA DE LA CAPACIDAD DE CAMPO DEL

PUNTO DE MARCHITAMIENTO.

Yagüe (1996), cita dos fórmulas que relacionan el porcentaje de humedad

gravimétrica de las texturas con el contenido de humedad en la capacidad de

campo y el punto de marchitamiento. Aconseja su utilización cuando no se

disponga de análisis.

La fórmula de la capacidad de campo (CC) la denomina fórmula de Peele y a la

fórmula de capacidad de campo la denomina fórmula de Briggs.

Las fórmulas son las siguientes:

CC=0,48Ac + 0,162Li + 0,023 Ar + 2,62

PM = 0,302Ac + 0,102Li + 0,0147 Ar

Siendo:

CC : Humedad gravimétrica en la capacidad de campo [%].

PM : Humedad gravimétrica en el punto de marchitamiento [%].

Ac : Contenido en arcilla expresado como humedad gravimétrica [%].

Li : Contenido en limo expresado como humedad gravimétrica [%].

Ac : Contenido en arena expresado como humedad gravimétrica [%].

Page 161: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 4

161

3. TRIÁNGULO DE TEXTURA DE LA U.S.D.A.

Figura 1. Triángulo de texturas y clases texturales.

Page 162: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

162

7. ANEJO 5. LISTADO DEL PROGRAMA.

RIEGOS.VBP' Víctor Yusta. Dicembre-1998Type=ExeReference=DAO350 ' para gobernar AccessObject=TABCTL32.OCXObject=THREED32.OCXObject=DBLIST32.OCXForm=Riegos.frmModule=Riegos1; Riegos1.basModule=Riegos2; Riegos2.basForm=Riegos12.frmForm=Riegos21.frmForm=Riegos25.frmForm=Riegos22.frmForm=Riegos23.frmForm=Riegos31.frmForm=Riegos27.frmForm=Riegos26.frmForm=Riegos24.frmObject=DBGRID32.OCXForm=Riegos00.frmForm=Riegos11.frmIconForm="Riegos"Startup="Riegos"HelpFile=""Title="RIEGOS"ExeName32="Riegos.exe"Command32=""Name="Riego"HelpContextID="0"CompatibleMode="0"MajorVer=1MinorVer=0RevisionVer=0AutoIncrementVer=0ServerSupportFiles=0CompilationType=0OptimizationType=0FavorPentiumPro(tm)=0CodeViewDebugInfo=0NoAliasing=0BoundsCheck=0OverflowCheck=0FlPointCheck=0FDIVCheck=0UnroundedFP=0StartMode=0Unattended=0ThreadPerObject=0MaxNumberOfThreads=1

Page 163: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

163

RIEGOS1.BAS' Víctor Yusta. Dicembre-1998Attribute VB_Name = "Riegos1"Option ExplicitGlobal gsDatabase As StringGlobal gsConnect As StringGlobal gsRecordsource As String Global NombreProgramacion As String * 50 Public MenuInicial As String Public ValorControl As Control Public ValorTabla As StringPublic BaseDeDatos As Database Public fMenu As Recordset Public fProgramacion As Recordset Public fProgramacionClima As Recordset Public fCultivos As Recordset Public fCultivosKc As Recordset Public fCultivosRaices As Recordset Public fCultivosSal As Recordset Public fCultivosFraccion As Recordset Public fCultivosDias As Recordset Public fBalanceHidrico As Recordset Public fTexturas As Recordset Public Const NBaseDeDatos As String = "C:\Riegos\Riegos.mdb" Public Const NProgramacion As String = "Programacion" Public Const NProgramacionClima As String = "ProgramacionClima" Public Const NMenu As String = "Menu" Public Const NCultivosKc As String = "CultivosKc" Public Const NCultivosRaices As String = "CultivosRaices" Public Const NCultivosSal As String = "CultivosSal" Public Const NCultivosFraccion As String = "CultivosFraccion" Public Const NCultivosDias As String = "CultivosDias" Public Const NCultivosNombre As String = "CultivosNombre" Public Const NBalanceHidrico As String = "BalanceHidrico" Public Const NTexturas As String = "Texturas"Public Sub BaseDatos() Set BaseDeDatos = OpenDatabase(NBaseDeDatos) Set fMenu = BaseDeDatos.OpenRecordset(NMenu, dbOpenTable) Set fProgramacion = BaseDeDatos.OpenRecordset(NProgramacion, dbOpenTable) Set fProgramacionClima = BaseDeDatos.OpenRecordset(NProgramacionClima, dbOpenTable) Set fCultivosKc = BaseDeDatos.OpenRecordset(NCultivosKc, dbOpenTable) Set fCultivosRaices = BaseDeDatos.OpenRecordset(NCultivosRaices, dbOpenTable) Set fCultivosSal = BaseDeDatos.OpenRecordset(NCultivosSal, dbOpenTable) Set fCultivosFraccion = BaseDeDatos.OpenRecordset(NCultivosFraccion, dbOpenTable) Set fCultivosDias = BaseDeDatos.OpenRecordset(NCultivosDias, dbOpenTable) Set fBalanceHidrico = BaseDeDatos.OpenRecordset(NBalanceHidrico, dbOpenTable) Set fTexturas = BaseDeDatos.OpenRecordset(NTexturas, dbOpenTable)End SubPublic Function LeerFichero(nTabla As String, nIndice As String, nBusca As String, nCampo As String) As String ' Esta funcion lee ficheros de una base de datos indexada ' Pide: Nombre de la tabla, Nombre del indice,Valor buscado y Nombre del campo del cual devolverá su valor Dim BaseTablas As Database Dim Tabla As Recordset Set BaseTablas = OpenDatabase(NBaseDeDatos) Set Tabla = BaseTablas.OpenRecordset(nTabla, dbOpenTable) Tabla.Index = nIndice Tabla.MoveFirst Tabla.Seek "=", nBusca If Tabla.NoMatch = False Then 'Registro encontrado LeerFichero = IIf(IsNull(Tabla(nCampo)), "", Tabla(nCampo)) 'LeerFichero = Tabla(nCampo) Else LeerFichero = "?" End IfEnd FunctionPublic Function NoNulo(Dato) ' Sustituye el dato Null por Cadena Vacia NoNulo = IIf(IsNull(Dato), "", Dato)End FunctionPublic Function LeerMSJ(Valor As String) ' Lee mensajes en la tabla (TablaMensajes) If Idioma = "CS" Then LeerMSJ = LeerFichero("TablaMensajes", "Orden", Valor, "TextoMensaje")

Page 164: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

164

Else LeerMSJ = LeerFichero("TablaMensajes", "Orden", Valor, "TexteMissatge") End IfEnd FunctionPublic Function CargaPantalla(NombreForm As Form) NombreForm.Top = 0 NombreForm.Left = 0 NombreForm.Height = 8600 NombreForm.Width = 12000End FunctionPublic Function Numeros(tp As Integer) As Integer If (tp < 48 Or tp > 57) And tp <> 8 Then Numeros = 0 Else Numeros = tp End IfEnd FunctionPublic Function Numerico(Valor As String) As Integer Numerico = Val(Trim(Valor))End FunctionPublic Sub DibujaMensaje(NomForm) NomForm.Mensaje.Height = 330 NomForm.Mensaje.Left = 105 NomForm.Mensaje.Top = 7980 NomForm.Mensaje.Width = 11775End SubPublic Sub DibujaPanelComandos(NomForm) NomForm.PanelComandos.Height = 960 NomForm.PanelComandos.Left = 0 NomForm.PanelComandos.Top = 0 NomForm.PanelComandos.Width = 11985End SubPublic Function CursorOcupado(NombreForm As Form) NombreForm.MousePointer = 11End FunctionPublic Function CursorLibre(NombreForm As Form) NombreForm.MousePointer = 0End FunctionFunction CarNum(Variable As String) As Double ' entrada "4,21323" y sale 4.21323 Dim Frase Frase = "" Dim num For num = 1 To Len(Trim(Variable)) Dim a a = Mid$(Variable, num, 1) If a = "," Then a = "." Frase = Frase + a Next num CarNum = Val(Frase)End FunctionFunction NumCar(Variable As Double) As StringDim Inter Inter = Trim(Str(Variable)) If (Variable > 0 And Variable < 1) Then Inter = "0" + Trim(Str(Variable)) End If If (Variable > -1 And Variable < 0) Then Variable = Variable * -1 Inter = "-0" + Trim(Str(Variable)) End If Dim Frase Frase = "" Dim num For num = 1 To Len(Trim(Inter)) Dim a a = Mid$(Inter, num, 1) If a = "." Then a = "," Frase = Frase + a Next num NumCar = FraseEnd Function

Page 165: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

165

RIEGOS2.BAS' Víctor Yusta. Dicembre-1998Attribute VB_Name = "Riegos2"Option Explicit Public Const Pi As Double = 3.14159265358979Public Function CalculaNumeroDias(DesdeFecha As Date, HastaFecha As Date) As Double ''DiaAno = DateDiff("d", Fecha1, Fecha2) + 1 CalculaNumeroDias = DateSerial(Year(HastaFecha), Month(HastaFecha), Day(HastaFecha)) -DateSerial(Year(DesdeFecha), Month(DesdeFecha), Day(DesdeFecha)) '+ 1End FunctionPublic Function GraRad() As Double GraRad = Pi / 180End FunctionPublic Function RadGra() As Double RadGra = 180 / PiEnd FunctionPublic Function Seno(Valor As Double) As Double Seno = Sin(Valor * GraRad())End FunctionPublic Function Coseno(Valor As Double) As Double Coseno = Cos(Valor * GraRad())End FunctionPublic Function Tangente(Valor As Double) As Double Tangente = Tan(Valor * GraRad())End FunctionPublic Function ArcoSeno(Valor As Double) As Double If (-Valor * Valor + 1) = 0 Then ArcoSeno = Int(Atn(1E+99) * RadGra()) Else ArcoSeno = Atn(Valor / Sqr(-Valor * Valor + 1)) * RadGra() End IfEnd FunctionPublic Function ArcoCoseno(Valor As Double) As Double If (-Valor * Valor + 1) = 0 Then ArcoCoseno = 0 Else ArcoCoseno = Atn(-Valor / Sqr(-Valor * Valor + 1)) * RadGra() + 2 * Atn(1) * RadGra() End If If Valor = 0 Then ArcoCoseno = 90 End IfEnd FunctionPublic Function ArcoCosenoRad(Valor As Double) As Double If Valor = 1 Then ArcoCosenoRad = 0 Else ArcoCosenoRad = Atn(-Valor / Sqr(-Valor * Valor + 1)) + 2 * Atn(1) End IfEnd FunctionPublic Function ArcCosRad(Valor As Double) As Double ArcCosRad = Atn(-Valor / Sqr(-Valor * Valor + 1)) + 2 * Atn(1)End FunctionPublic Function SexCen(Valor As String) As Double SexCen = Val(Mid(Valor, 1, 2)) + (Val(Mid(Valor, 4, 2)) / 60)End FunctionPublic Function CenSex(Valor As Double) As String CenSex = Str(Int(Valor)) & "º" + Str((Valor - Int(Valor)) * 60) & "'"End FunctionPublic Function LOG10(Valor As Double) As Double LOG10 = Log(Valor) / Log(10#)End Function

Page 166: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

166

RIEGOS.FRM' Víctor Yusta. Dicembre-1998Option ExplicitPrivate Sub Form_Load() Call CargaPantalla(Me) BaseDatos Call CargaMenu Show DoEventsEnd SubPrivate Sub Form_Terminate() SalirProyectoEnd SubPrivate Sub Form_Unload(Cancel As Integer) Cancel = SalirProyectoEnd SubFunction SalirProyecto() Dim Pregunta Pregunta = MsgBox("¿ Quieres salir del programa? ", vbYesNo, "Salida") If Pregunta = vbYes Then Cls End End If SalirProyecto = 1End FunctionPrivate Function CargaMenu() Dim MenuCaption(9) Dim FormaCaption(99) Dim Num1 Dim Num2 fMenu.MoveFirst Do While Not fMenu.EOF() If fMenu("Numero") < 10 Then MenuCaption(fMenu("Numero")) = fMenu("Menu") Else FormaCaption(fMenu("Numero")) = fMenu("Menu") End If fMenu.MoveNext Loop For Num1 = 1 To 9 If Trim(MenuCaption(Num1)) = "" Then Me.Menu(Num1).Visible = False Else Me.Menu(Num1).Caption = MenuCaption(Num1) For Num2 = 1 To 9 If Trim(FormaCaption((Num1 * 10) + Num2)) = "" Then Me.Forma((Num1 * 10) + Num2).Visible = False Else Me.Forma((Num1 * 10) + Num2).Caption = FormaCaption((Num1 * 10) + Num2) + " " + NombreProgramacion If LeerFichero("Menu", "Orden", ((Num1 * 10) + Num2), "Existe") <> "SI" Then Me.Forma((Num1 * 10) +Num2).Enabled = False If ((Num1 * 10) + Num2) > 20 And ((Num1 * 10) + Num2) < 39 Then Me.Forma((Num1 * 10) + Num2).Enabled = False End If End If Next Num2 End If Next Num1End FunctionPrivate Sub Forma_Click(Index As Integer) fMenu.Index = "Orden" fMenu.MoveFirst fMenu.Seek "=", Index If fMenu.NoMatch = True Then 'Registro NO encontrado MsgBox ("Este programa no existe") Else If NoNulo(fMenu("Existe")) <> "SI" Then MsgBox ("Este programa no existe") Else CargarPrograma (Index) Index = 0 End If End If

Page 167: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

167

End SubPrivate Sub CargarPrograma(Numero) On Error Resume Next If Numero = 11 Then Load Riegos11 If Numero = 12 Then Load Riegos12 If Numero = 19 Then SalirProyecto If Numero = 21 Then Load Riegos21 If Numero = 22 Then Load Riegos22 If Numero = 23 Then Load Riegos23 If Numero = 24 Then Load Riegos24 If Numero = 25 Then Load Riegos25 If Numero = 26 Then Load Riegos26 If Numero = 27 Then Load Riegos27 If Numero = 31 Then Load Riegos31End Sub

Page 168: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

168

RIEGOS00.FRM' Víctor Yusta. Dicembre-1998VERSION 5.00Object = "DBGRID32.OCX"Option ExplicitDim msSortCol As StringDim mbCtrlKey As IntegerPrivate Sub Form_Load() Dim bParmQry As Integer Dim qdfTmp As QueryDef On Error GoTo LoadErr 'Para hacer 'gsDatabase es una cadena global que necesita 'establecerse en el procedimiento startup de la aplicación Data1.DatabaseName = gsDatabase 'gsRecordSource es una cadena global que necesita 'en el procedimiento que carga este formulario Data1.RecordSource = gsRecordsource Data1.Connect = gsConnect Data1.RecordsetType = 1 'dynaset Data1.Options = 0 Data1.Refresh If Len(Data1.RecordSource) > 50 Then Me.Caption = "SQL Statement" Else Me.Caption = Data1.RecordSource End If Exit SubLoadErr: MsgBox "Error:" & Err & " " & Err.Description Unload MeEnd SubSub cmdClose_Click() Unload MeEnd SubPrivate Sub cmdFilter_Click() On Error GoTo FilterErr Dim recRecordset1 As Recordset, recRecordset2 As Recordset Dim sFilterStr As String If Data1.RecordsetType = vbRSTypeTable Then Beep MsgBox "Imposible filtrar un recordset de tipo Table", 48 Exit Sub End If Set recRecordset1 = Data1.Recordset 'Copia el conjunto de resultados sFilterStr = InputBox("Escriba la expresión de filtro:") If Len(sFilterStr) = 0 Then Exit Sub Screen.MousePointer = vbHourglass recRecordset1.Filter = sFilterStr Set recRecordset2 = recRecordset1.OpenRecordset(recRecordset1.Type) 'Establece el filtro Set Data1.Recordset = recRecordset2 'Asigna de nuevo al objeto Recordset original Screen.MousePointer = vbDefault Exit SubFilterErr: Screen.MousePointer = vbDefault MsgBox "Error:" & Err & " " & Err.Description Exit SubEnd SubPrivate Sub cmdRefresh_Click() On Error GoTo RefErr Data1.Recordset.Requery Exit SubRefErr: MsgBox "Error:" & Err & " " & Err.Description Exit SubEnd SubPrivate Sub cmdSort_Click() On Error GoTo SortErr Dim recRecordset1 As Recordset, recRecordset2 As Recordset Dim SortStr As String If Data1.RecordsetType = vbRSTypeTable Then Beep MsgBox "Imposible ordenar un recordset de tipo Table", 48

Page 169: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

169

Exit Sub End If Set recRecordset1 = Data1.Recordset 'Copia el recordset If Len(msSortCol) = 0 Then SortStr = InputBox("Escriba la cadena de orden:") If Len(SortStr) = 0 Then Exit Sub Else SortStr = msSortCol End If Screen.MousePointer = vbHourglass recRecordset1.Sort = SortStr 'Establece el orden Set recRecordset2 = recRecordset1.OpenRecordset(recRecordset1.Type) Set Data1.Recordset = recRecordset2 Screen.MousePointer = vbDefault Exit SubSortErr: Screen.MousePointer = vbDefault MsgBox "Error:" & Err & " " & Err.Description Exit SubEnd SubPrivate Sub Form_Resize() On Error Resume Next If Me.WindowState <> 1 Then grdDataGrid.Height = Me.Height - (425 + picButtons.Height) End IfEnd SubPrivate Sub grdDataGrid_BeforeDelete(Cancel As Integer) If MsgBox("¿Desea eliminar la fila actual?", vbYesNo + vbQuestion) <> vbYes Then Cancel = True End IfEnd SubPrivate Sub grdDataGrid_BeforeUpdate(Cancel As Integer) If MsgBox("¿Desea realizar los cambios?", vbYesNo + vbQuestion) <> vbYes Then Cancel = True End IfEnd SubPrivate Sub grdDataGrid_HeadClick(ByVal ColIndex As Integer) 'Ahora se ordena por esta columna If Data1.RecordsetType = vbRSTypeTable Then Exit Sub 'Comprueba el uso de la tecla Ctrl para sentido descendente If mbCtrlKey Then msSortCol = "[" & Data1.Recordset(ColIndex).Name & "] desc" mbCtrlKey = 0 'reset it Else msSortCol = "[" & Data1.Recordset(ColIndex).Name & "]" End If cmdSort_Click msSortCol = vbNullString 'Lo restableceEnd SubPrivate Sub grdDataGrid_MouseUp(Button As Integer, Shift As Integer, x As Single, Y As Single) mbCtrlKey = ShiftEnd Sub

Page 170: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

170

RIEGOS11.FRM' Víctor Yusta. Dicembre-1998Object ="TABCTL32.OCX"Object ="THREED32.OCX"Object ="DBLIST32.OCX"Option Explicit Dim numPrivate Sub Form_Load() 'Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 11, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Tabla.Tab = 0 Posiciona (0) Mensaje.Caption = "Escoge una de las tres opciones"End SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 SalirForm Case 2 AnalizaTabla Case 4 Dim Pregunta Pregunta = MsgBox("¿Quieres borrar la programación: " + RTrim(NombreProgramacion), 1, "BORRANDOPROGRAMACIÓN") If Pregunta = vbOK Then BorrarProgramacion (NombreProgramacion) End If Comando(2).Visible = False Comando(4).Visible = False End SelectEnd SubFunction BorrarProgramacion(vNombre As String) BaseDeDatos.Execute "DELETE * FROM BalanceHidrico WHERE NombreProgramacion = '" & vNombre & "' ;" BaseDeDatos.Execute "DELETE * FROM ProgramacionClima WHERE NombreProgramacion = '" & vNombre & "' ;" BaseDeDatos.Execute "DELETE * FROM Programacion WHERE NombreProgramacion = '" & vNombre & "' ;" Call MostrarInformacion Data1.Refresh DBList1.Refresh DBList1.SetFocusEnd FunctionPrivate Sub AnalizaTabla() Select Case Tabla.Tab Case 0 If Trim(UCase(Entrada(0).Text)) = "" Then Posiciona (0) MsgBox ("Has de entrar algún nombre de diseño agronómico") Else If Trim(LeerFichero("Programacion", "Programacion", Trim(UCase(Entrada(0).Text)), "NombreProgramacion")) =UCase(Entrada(0).Text) Then Posiciona (0) MsgBox ("Este diseño ya existe") Else NombreProgramacion = UCase(Entrada(0).Text) fProgramacion.AddNew fProgramacion("NombreProgramacion") = NombreProgramacion fProgramacion.Update Riegos.Caption = "Programación de riegos" + " " + NombreProgramacion For num = 21 To 29 Riegos.Forma(num).Enabled = True Next num Riegos.Forma(31).Enabled = True Riegos.Forma(32).Enabled = True SalirForm End If End If Case 1 NombreProgramacion = DBList1.Text Riegos.Caption = "Programación de riegos" + " " + NombreProgramacion For num = 21 To 29

Page 171: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

171

Riegos.Forma(num).Enabled = True Next num Riegos.Forma(31).Enabled = True Riegos.Forma(32).Enabled = True SalirForm End SelectEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index Case 0 If Len(Trim(Entrada(Index))) > 0 Then Comando(2).Visible = True End If Case 1 If Len(Trim(Entrada(Index))) > 0 Then Comando(2).Visible = True End If Case 2 Print "Aqui ponemos la rutina de guardar como" End SelectEnd SubPrivate Sub SalirForm() Unload Me Load RiegosEnd SubPrivate Sub DBList1_Click() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", DBList1.Text NombreProgramacion = DBList1.Text Mensaje.Caption = "Cliquea en las opciones de arriba" If fProgramacion.NoMatch = False Then 'Registro encontrado Muestra1.Caption = NoNulo(fProgramacion("Descripcion")) Muestra2.Caption = NoNulo(fProgramacion("NombreFinca")) Muestra3.Caption = NoNulo(fProgramacion("Poblacion")) Muestra4.Caption = NoNulo(fProgramacion("Provincia")) Muestra5.Caption = NoNulo(fProgramacion("Clima")) Muestra6.Caption = NoNulo(fProgramacion("SuperficieFinca")) End If If RTrim(NombreProgramacion) <> "." Then Comando(2).Visible = True Comando(4).Visible = True End IfEnd SubPrivate Sub DBList1_DblClick() NombreProgramacion = DBList1.Text Riegos.Caption = Riegos.Caption Dim num For num = 21 To 29 Riegos.Forma(num).Enabled = True Next num Riegos.Forma(31).Enabled = True Riegos.Forma(32).Enabled = True Riegos.Caption = "Programación de riegos" + " " + NombreProgramacion SalirFormEnd SubPrivate Sub Tabla_Click(PreviousTab As Integer)If Tabla.Tab = 0 Then Comando(2).Visible = False Comando(4).Visible = False Mensaje.Caption = "Entra un nombre nuevo"End If Posiciona (0)If Tabla.Tab = 1 Then Call MostrarInformacion Mensaje.Caption = "Escoge algún diseño, cliqueando con el ratón" DBList1.SetFocusEnd If'If Tabla.Tab = 2 Then Entrada(1).SetFocusEnd SubPrivate Sub MostrarInformacion() Dim Busca Busca = ""

Page 172: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

172

Busca = Busca + "SELECT * " Busca = Busca + "FROM Programacion " Busca = Busca + "WHERE " Busca = Busca + "NombreProgramacion <> '.' " Busca = Busca + "ORDER BY " Busca = Busca + "NombreProgramacion ;" Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset(Busca) If Consulta.RecordCount <> 0 Then Data1.DatabaseName = "C:\Riegos\Riegos.mdb" 'NombreBaseDeDatos Data1.RecordsetType = 1 Data1.RecordSource = Busca Data1.Refresh Else MsgBox ("No hay información") SalirForm End IfEnd SubSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 173: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

173

RIEGOS12.FRM' Víctor Yusta. Dicembre-1998Object = "THREED32.OCX"Option Explicit Dim num Dim Tablas(20) As StringPrivate Sub Form_Load() Tablas(0) = "CultivosNombre" Tablas(1) = "CultivosKc" Tablas(2) = "CultivosDias" Tablas(3) = "CultivosRaices" Tablas(4) = "CultivosFraccion" Tablas(5) = "Sal" Tablas(6) = "Meteorologia" Tablas(7) = "Texturas" Tablas(8) = "SistemasRiego" BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 12, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Frame1.Visible = True Show Mensaje.Caption = "Pulsa sobre cualquier tabla"End SubPrivate Sub Ficheros_Click(Index As Integer) Dim NombreTabla: NombreTabla = Tablas(Index)' Select Case Index' Case 0' NombreTabla = "CultivosNombre"' Case 1' NombreTabla = "CultivosSal"' Case 2' NombreTabla = "CultivosSal"' Case 3' NombreTabla = "CultivosSal"' Case 4' NombreTabla = "CultivosSal"' Case 5' NombreTabla = "CultivosSal"' Case 6' NombreTabla = "CultivosSal"' Case 7' NombreTabla = "CultivosSal"' End Select Dim Busca: Busca = "" Dim Consulta As Recordset Busca = Busca + "SELECT * " Busca = Busca + "FROM " & NombreTabla & " " Busca = Busca + " ;" Set Consulta = BaseDeDatos.OpenRecordset(Busca) If Consulta.RecordCount <> 0 Then Data2.DatabaseName = "C:\Riegos\Riegos.mdb" 'NombreBaseDeDatos Data2.RecordsetType = 1 Data2.RecordSource = Busca Data2.Refresh Dim F As New Riegos00 Set F.Data1.Recordset = Data2.Recordset F.Caption = Me.Caption & " Grid" F.Show End IfEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 SalirForm End SelectEnd SubPrivate Sub SalirForm() Unload Me Load RiegosEnd SubPrivate Sub MostrarInformacion() Dim Busca

Page 174: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

174

Busca = "" Busca = Busca + "SELECT * " Busca = Busca + "FROM Programacion " Busca = Busca + "WHERE " Busca = Busca + "NombreProgramacion <> '.' " Busca = Busca + "ORDER BY " Busca = Busca + "NombreProgramacion ;" Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset(Busca) If Consulta.RecordCount <> 0 Then Data1.DatabaseName = "C:\Riegos\Riegos.mdb" 'NombreBaseDeDatos Data1.RecordsetType = 1 Data1.RecordSource = Busca Data1.Refresh Else MsgBox ("No hay información") SalirForm End IfEnd Sub

Page 175: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

175

RIEGOS21.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Option Explicit Dim Atras Dim Mensajes(20) As String Dim Alertas(20) As String Dim Campos(20) As String Dim ExisteFichero As StringPrivate Sub Form_Load() Campos(0) = "A030" Mensajes(1) = "Entra una pequeña descripción de la finca" Mensajes(2) = "Entra el nombre de la finca" Mensajes(3) = "Entra el nombre de la población" Mensajes(4) = "Entra el nombre de la provincia" Mensajes(5) = "Entra los grados de latitud del lugar" Mensajes(6) = "Entra los minutos de latitud del lugar" Mensajes(7) = "Entra los segundos de latitud del lugar" Mensajes(8) = "Entra la latitud del lugar" Mensajes(9) = "Entra los grados de longitud del lugar" Mensajes(10) = "Entra los minutos de longitud del lugar" Mensajes(11) = "Entra los segundos de longitud del lugar" Mensajes(12) = "Entra la longitud del lugar" Mensajes(13) = "Entra la altitud" Mensajes(14) = "Clima: (M)ensual estimado ó (D)iario real" Mensajes(15) = "Entra la superficie de la finca en m2" Alertas(0) = "" Alertas(1) = "Entra la descripción" Alertas(2) = "Entra el nombre" Alertas(3) = "Entra la población" Alertas(4) = "Entra la provincia" Alertas(5) = "El valor de los grados de latitud van de 0 a 180" Alertas(6) = "El valor de los minutos de latitud van de 0 a 59" Alertas(7) = "El valor de los segundos de latitud van de 0 a 59" Alertas(8) = "El valor de la latitud es N o S" Alertas(9) = "El valor de los grados de longitud van de 0 a 180" Alertas(10) = "El valor de los minutos de longitud van de 0 a 59" Alertas(11) = "El valor de los segundos de longitud van de 0 a 59" Alertas(12) = "El valor de la longitud es E u O" Alertas(13) = "La altitud va de 0 a 3000 metros" Alertas(14) = "Ha de ser M o D" Alertas(15) = "Entra la superficie de la finca" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", Val(Right(Me.Name, 2)), "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Comando(0).Visible = True Mensaje.Caption = Mensajes(1) CargarDatos Posiciona (1)End SubPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) 'Print KeyAscii Dim Pregunta Dim Tecla Dim tp As Integer Dim Cadena As String tp = KeyAscii If KeyAscii = 13 Or KeyAscii = 9 And Atras = 0 Then Tecla = 1 Atras = 0 Cadena = Trim(Entrada(Index).Text) Select Case Index Case 1 ' Nombre de la Finca

Page 176: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

176

If Tecla = 1 Then If Cadena = "" Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 2 ' Nombre de la Finca If Tecla = 1 Then If Cadena = "" Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1): Posiciona (Index + 1) End If End If Case 3 ' Nombre de la Finca If Tecla = 1 Then If Cadena = "" Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 4 ' Nombre de la Finca If Tecla = 1 Then If Cadena = "" Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 5 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 180 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 6 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 7 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 8 ' grados latitud

Page 177: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

177

Cadena = UCase(Cadena) Entrada(Index).Text = Cadena If Tecla = 1 Then If Cadena <> "N" And Cadena <> "S" Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 9 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 180 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 10 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 11 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 59 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 12 ' grados latitud Cadena = UCase(Cadena) Entrada(Index).Text = Cadena If Tecla = 1 Then If Cadena <> "E" And Cadena <> "O" Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 13 ' grados latitud KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Numerico(Cadena) > 3000 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 14 ' datos climaticos Cadena = UCase(Cadena) Entrada(Index).Text = Cadena If Tecla = 1 Then If Cadena <> "M" And Cadena <> "D" Then Pregunta = MsgBox(Alertas(Index))

Page 178: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

178

Posiciona (Index) Else Mensaje.Caption = Mensajes(Index + 1) Posiciona (Index + 1) End If End If Case 15 ' superficie de la finca KeyAscii = Numeros(tp) If Tecla = 1 Then If Numerico(Cadena) < 0 Or Len(Cadena) = 0 Then Pregunta = MsgBox(Alertas(Index)) Posiciona (Index) Else Mensaje.Caption = Mensajes(0) Comando(5).Visible = True Posiciona (1) End If End If End SelectEnd SubPrivate Sub Entrada_DblClick(Index As Integer) Select Case Index 'Case 8 End SelectEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me End SelectEnd SubPrivate Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) 'Print KeyCode, Shift If Index > 1 And KeyCode = 38 Then Posiciona (Index - 1) End If If Index > 0 And KeyCode = 9 And Shift = 1 Then If Index - 1 < 1 Then Index = 16 Posiciona (Index - 1) Atras = 1 End IfEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Call MoverFP("NombreProgramacion", Entrada(0)) Call MoverFP("Descripcion", Entrada(1)) Call MoverFP("NombreFinca", Entrada(2)) Call MoverFP("Poblacion", Entrada(3)) Call MoverFP("Provincia", Entrada(4)) Call MoverFP("LatitudGrados", Entrada(5)) Call MoverFP("LatitudMinutos", Entrada(6)) Call MoverFP("LatitudSegundos", Entrada(7)) Call MoverFP("Latitud", Entrada(8)) Call MoverFP("LongitudGrados", Entrada(9)) Call MoverFP("LongitudMinutos", Entrada(10)) Call MoverFP("LongitudSegundos", Entrada(11)) Call MoverFP("Longitud", Entrada(12)) Call MoverFP("Altitud", Entrada(13)) Call MoverFP("Clima", Entrada(14)) Call MoverFP("SuperficieFinca", Entrada(15)) ExisteFichero = "SI" Else ExisteFichero = "NO" End IfEnd SubPrivate Sub GrabarDatos() If ExisteFichero = "NO" Then

Page 179: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

179

fProgramacion.AddNew Else fProgramacion.Edit End If Call MoverPF("NombreProgramacion", Entrada(0)) Call MoverPF("Descripcion", Entrada(1)) Call MoverPF("NombreFinca", Entrada(2)) Call MoverPF("Poblacion", Entrada(3)) Call MoverPF("Provincia", Entrada(4)) Call MoverPF("LatitudGrados", Entrada(5)) Call MoverPF("LatitudMinutos", Entrada(6)) Call MoverPF("LatitudSegundos", Entrada(7)) Call MoverPF("Latitud", Entrada(8)) Call MoverPF("LongitudGrados", Entrada(9)) Call MoverPF("LongitudMinutos", Entrada(10)) Call MoverPF("LongitudSegundos", Entrada(11)) Call MoverPF("Longitud", Entrada(12)) Call MoverPF("Altitud", Entrada(13)) Call MoverPF("Clima", Entrada(14)) Call MoverPF("SuperficieFinca", Entrada(15)) fProgramacion("Pantalla21") = "T" fProgramacion.UpdateEnd SubPrivate Sub Entrada_GotFocus(Index As Integer)End SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End SubPrivate Sub MoverPF(Campo As String, Pantalla) fProgramacion(Campo) = Pantalla.TextEnd SubSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 180: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

180

RIEGOS22.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Object ="DBLIST32.OCX"Option Explicit'Dim Atras Dim Mensajes(41) As String Dim Alertas(41) As String Dim ValorControl As Control Dim ValorTabla As String Dim Indice As Integer Dim Atras As Integer Dim Campos(41) As String Dim ExisteFichero As String Dim QueMes Dim vColor Dim Tierra(20)Private Sub Form_Load() Indice = 1Mensajes(1) = "Entra el nombre de cultivio, o cliquea en opciones de cultivo" Mensajes(2) = "Entra la cantidad de Arcilla (%)" Mensajes(3) = "Entra la cantidad de Limo (%)" Mensajes(4) = "Cliquea a la derecha, si quieres escoger textura" Mensajes(5) = "Entra la capacidad de campo (% suelo seco)" Mensajes(6) = "Entra el punto de marchitez(% suelo seco)" Mensajes(7) = "Entra los segundos de latitud del lugar" Mensajes(8) = "Entra la Kc de la fase Inicial []" Mensajes(9) = "Entra la Kc de la fase de media []" Mensajes(10) = "Entra la Kc de la fase Final []" Mensajes(11) = "Entra el número de días de éste intérvalo [días]" Mensajes(12) = "Entra el número de días de éste intérvalo [días]" Mensajes(13) = "Entra el número de días de éste intérvalo [días]" Mensajes(14) = "Entra el número de días de éste intérvalo [días]" Mensajes(15) = "Entra la profundidad efectiva de las raíces [cm]" Mensajes(16) = "Entra la profundidad efectiva de las raíces [cm]" Mensajes(17) = "Entra la profundidad efectiva de las raíces [cm]" Mensajes(18) = "Entra el Kc del mes de Enero []" Mensajes(19) = "Entra el Kc del mes de Febrero []" Mensajes(20) = "Entra el Kc del mes de Marzo []" Mensajes(21) = "Entra el Kc del mes de Abril []" Mensajes(22) = "Entra el Kc del mes de Mayo []" Mensajes(23) = "Entra el Kc del mes de Junio []" Mensajes(24) = "Entra el Kc del mes de Julio []" Mensajes(25) = "Entra el Kc del mes de Agosto []" Mensajes(26) = "Entra el Kc del mes de Septiembre []" Mensajes(27) = "Entra el Kc del mes de Octubre []" Mensajes(28) = "Entra el Kc del mes de Noviembre []" Mensajes(29) = "Entra el Kc del mes de Diciembre []" Mensajes(30) = "Entra la profundidad efectiva de las raíces [cm]" Mensajes(31) = "Entra la fracción de agua disponible en el suelo []" Mensajes(32) = "Entra la toleracia a sales del suelo para una producción del 100% [dS/cm]" Mensajes(33) = "Entra la toleracia a sales del agua para una producción del 100% [dS/cm]" Mensajes(34) = "Entra la toleracia a sales del suelo para una producción del 90% [dS/cm]" Mensajes(35) = "Entra la toleracia a sales del agua para una producción del 90% [dS/cm]" Mensajes(36) = "Entra la toleracia a sales del suelo para una producción del 75% [dS/cm]" Mensajes(37) = "Entra la toleracia a sales del agua para una producción del 75% [dS/cm]" Mensajes(38) = "Entra la toleracia a sales del suelo para una producción del 50% [dS/cm]" Mensajes(39) = "Entra la toleracia a sales del agua para una producción del 50% [dS/cm]" Mensajes(40) = "Entra la máxima toleracia a sales del suelo [dS/cm]" Mensajes(41) = "Entra la fecha de plantación o siembra (anuales). En prurianuales 01-01-año [dd-mm-aaaa]" Alertas(0) = "" Alertas(1) = "Entra la descripción" Alertas(2) = "Entra el nombre" Alertas(3) = "Entra la población" Alertas(4) = "Entra la provincia" Alertas(5) = "El valor de los grados de latitud van de 0 a 180" Alertas(6) = "El valor de los minutos de latitud van de 0 a 59" Alertas(7) = "El valor de los segundos de latitud van de 0 a 59" Alertas(8) = "El valor de la latitud es N o S" Alertas(9) = "El valor de los grados de longitud van de 0 a 180" Alertas(10) = "El valor de los minutos de longitud van de 0 a 59" Alertas(11) = "El valor de los segundos de longitud van de 0 a 59" Alertas(12) = "El valor de la longitud es E u O"

Page 181: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

181

Alertas(13) = "La altitud va de 0 a 3000 metros" Alertas(14) = "El número de cultivos va de 1 5" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 22, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Mensaje.Caption = Mensajes(1) CargarDatos Posiciona (1)End SubPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me End SelectEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Call MoverFP("NombreProgramacion", Entrada(0)) Call MoverFP("Cultivo", Entrada(1)) Call MoverFP("Tipo", Entrada(2)) Call MoverFP("Hierba", Entrada(3)) Call MoverFP("Heladas", Entrada(4)) Call MoverFP("Humedad", Entrada(5)) Call MoverFP("Vientos", Entrada(6)) Call MoverFP("Edad", Entrada(7)) Call MoverFP("KcI", Entrada(8)) Call MoverFP("KcM", Entrada(9)) Call MoverFP("KcF", Entrada(10)) Call MoverFP("DiasI", Entrada(11)) Call MoverFP("DiasD", Entrada(12)) Call MoverFP("DiasM", Entrada(13)) Call MoverFP("DiasF", Entrada(14)) Call MoverFP("RaicesI", Entrada(15)) Call MoverFP("RaicesM", Entrada(16)) Call MoverFP("RaicesF", Entrada(17)) Call MoverFP("Kc01", Entrada(18)) Call MoverFP("Kc02", Entrada(19)) Call MoverFP("Kc03", Entrada(20)) Call MoverFP("Kc04", Entrada(21)) Call MoverFP("Kc05", Entrada(22)) Call MoverFP("Kc06", Entrada(23)) Call MoverFP("Kc07", Entrada(24)) Call MoverFP("Kc08", Entrada(25)) Call MoverFP("Kc09", Entrada(26)) Call MoverFP("Kc10", Entrada(27)) Call MoverFP("Kc11", Entrada(28)) Call MoverFP("Kc12", Entrada(29)) Call MoverFP("Raices", Entrada(30)) Call MoverFP("Fraccion", Entrada(31)) Call MoverFP("ECe100", Entrada(32)) Call MoverFP("ECw100", Entrada(33)) Call MoverFP("ECe90", Entrada(34)) Call MoverFP("ECw90", Entrada(35)) Call MoverFP("ECe75", Entrada(36)) Call MoverFP("ECw75", Entrada(37)) Call MoverFP("ECe50", Entrada(38))

Page 182: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

182

Call MoverFP("ECw50", Entrada(39)) Call MoverFP("MaxECe", Entrada(40)) Call MoverFP("FechaPlantacion", Entrada(41)) If fProgramacion("Tipo") = "A" Then Frame1.Visible = True Frame2.Visible = False End If If fProgramacion("Tipo") = "B" Then Frame1.Visible = True Frame2.Visible = False End If If fProgramacion("Tipo") = "D" Then Frame1.Visible = True Frame2.Visible = False End If If fProgramacion("Tipo") = "E" Then Frame1.Visible = False Frame2.Visible = True End If If fProgramacion("Tipo") = "F" Then Frame1.Visible = False Frame2.Visible = True End If If fProgramacion("Tipo") = "G" Then Frame1.Visible = False Frame2.Visible = True End If If fProgramacion("Tipo") = "H" Then Frame1.Visible = False Frame2.Visible = True End If If fProgramacion("Tipo") = "O" Then Frame1.Visible = False Frame2.Visible = True End If End IfEnd SubPrivate Sub GrabarDatos() fProgramacion.Edit fProgramacion("Cultivo") = Entrada(1).Text fProgramacion("Tipo") = Entrada(2).Text fProgramacion("Hierba") = Entrada(3).Text fProgramacion("Heladas") = Entrada(4).Text fProgramacion("Humedad") = Entrada(5).Text fProgramacion("Vientos") = Entrada(6).Text fProgramacion("Edad") = Entrada(7).Text fProgramacion("KcI") = Entrada(8).Text fProgramacion("KcM") = Entrada(9).Text fProgramacion("KcF") = Entrada(10).Text fProgramacion("DiasI") = Entrada(11).Text fProgramacion("DiasD") = Entrada(12).Text fProgramacion("DiasM") = Entrada(13).Text fProgramacion("DiasF") = Entrada(14).Text fProgramacion("RaicesI") = Entrada(15).Text fProgramacion("RaicesM") = Entrada(16).Text fProgramacion("RaicesF") = Entrada(17).Text fProgramacion("Kc01") = Entrada(18).Text fProgramacion("Kc02") = Entrada(19).Text fProgramacion("Kc03") = Entrada(20).Text fProgramacion("Kc04") = Entrada(21).Text fProgramacion("Kc05") = Entrada(22).Text fProgramacion("Kc06") = Entrada(23).Text fProgramacion("Kc07") = Entrada(24).Text fProgramacion("Kc08") = Entrada(25).Text fProgramacion("Kc09") = Entrada(26).Text fProgramacion("Kc10") = Entrada(27).Text fProgramacion("Kc11") = Entrada(28).Text fProgramacion("Kc12") = Entrada(29).Text fProgramacion("Raices") = Entrada(30).Text fProgramacion("Fraccion") = Entrada(31).Text fProgramacion("ECe100") = Entrada(32).Text fProgramacion("ECw100") = Entrada(33).Text fProgramacion("ECe90") = Entrada(34).Text

Page 183: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

183

fProgramacion("ECw90") = Entrada(35).Text fProgramacion("ECe75") = Entrada(36).Text fProgramacion("ECw75") = Entrada(37).Text fProgramacion("ECe50") = Entrada(38).Text fProgramacion("ECw50") = Entrada(39).Text fProgramacion("MaxECe") = Entrada(40).Text fProgramacion("FechaPlantacion") = Entrada(41).Text fProgramacion("Pantalla22") = "T" fProgramacion.UpdateEnd SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End Sub'*****************************************************************************************Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Atras = 1 End IfEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 50, 0, "N") Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N") Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N") Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N") Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N") Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N") Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 1, 0, "N") Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S") Case 9: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S") Case 10: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S") Case 11: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 12: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 13: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 14: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 15: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 16: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 17: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 18: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 19: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 20: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 21: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 22: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 23: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 24: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 25: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 26: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 27: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 28: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 29: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 30: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S") Case 31: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 31: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 32: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 33: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 34: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 35: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 36: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 37: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 38: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 39: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 40: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "S") Case 41: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "F", "N", 10, 1, "N") Comando(5).Visible = True End SelectEnd SubFunction TrataCampo(FormaMe, Index, Campo As String, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer Dim EstaMal Dim EstaMal1 Select Case tipo Case "N" 'Comprobación de Campo Numerico If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0

Page 184: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

184

Else TrataCampo = Tecla End If If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45 If Tecla = 8 Then TrataCampo = Tecla If Tecla = 46 Then Tecla = 44 If Tecla = 44 Then TrataCampo = Tecla Dim num For num = 1 To Len(Campo) If Mid(Campo, num, 1) = "," And Tecla = 44 Then TrataCampo = 0 End If Next num If Len(Campo) = 0 And Tecla = 48 And Cero <> "S" Then TrataCampo = 0 End If If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then TrataCampo = 0 End If If Decimales = 0 And TrataCampo = 46 Then TrataCampo = 0 End If If Decimales > 0 Then Dim Flag Dim CuentaDecimales CuentaDecimales = 0 Flag = False For num = 1 To Len(Campo) If Flag = True Then CuentaDecimales = CuentaDecimales + 1 If Mid(Campo, num, 1) = "." Then Flag = True End If Next num If CuentaDecimales = Decimales Then TrataCampo = 0 End If End If If Len(Campo) = Longitud And TrataCampo <> 8 Then TrataCampo = 0 End If Case "A" 'Tipo Alfanumerico TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 End If Case "F" 'Tipo Fecha If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 8 Then TrataCampo = Tecla If Tecla = 45 Then TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then EstaMal = "S" If Tecla = 13 Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "S" End If Else Dim estamal2 EstaMal = "N" End If If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then EstaMal = "S" If EstaMal1 <> "S" Then

Page 185: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

185

MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "" End If End If End Select If Tecla = 13 Then If EstaMal = "S" Then Posiciona (Indice) Else If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then Call MoverCampo(FormaMe, "AD") Else Posiciona (Indice) End If End If End If If Tecla = 9 Then 'hacia atras If Atras = 1 Then Call MoverCampo(FormaMe, "AT") Else Call MoverCampo(FormaMe, "AD") End If End IfEnd FunctionPrivate Sub MoverCampo(FormaMe, Como) If Como = "AD" Then ' adelante If Indice + 1 > 41 Then Indice = 0 End If Indice = Indice + 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice + 1 Loop End If If Como = "AT" Then 'atras If Indice - 1 < 1 Then Indice = 42 End If Indice = Indice - 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice - 1 Loop End If Posiciona (Indice) Me.Mensaje.Caption = Mensajes(Indice)DoEventsEnd SubFunction Comprobacion(FormaMe, Indice, Campo As String, tipo) Dim ValorN As Double Comprobacion = "OK" If tipo = "N" And Indice <> 8 Then ValorN = CarNum(Campo) End If Select Case Indice Case 1 ' If Campo = "" Then MsgBox ("Entra el nombre del cultivo o esoge uno en opcioens") Comprobacion = "" End If Case 31 ' If Trim(Entrada(2)) = "" Then MsgBox ("Escoge un grupo de cultivo") Comprobacion = "" Else 'If Campo = "" Then ' MsgBox ("Entra algún valor") ' Comprobacion = "" 'End If If ValorN = 0 Then MsgBox ("Entra algún valor") Comprobacion = "" End If If ValorN > 1 Then

Page 186: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

186

MsgBox ("Entra algún valor menor de 1 ") Comprobacion = "" End If End If End SelectEnd FunctionPrivate Sub ComandoLista_Click(Index As Integer) Select Case Index Case 1 Set ValorControl = Entrada(Index) ValorTabla = "CultivosNombre" Call CargaDBLista(ValorControl, ValorTabla, "Cultivo") Case 2 Set ValorControl = Entrada(Index) ValorTabla = "2" Call CargaLista(ValorControl, Index) Case 3 Set ValorControl = Entrada(Index) ValorTabla = "3" Call CargaLista(ValorControl, Index) Case 4 Set ValorControl = Entrada(Index) ValorTabla = "4" Call CargaLista(ValorControl, Index) Case 5 Set ValorControl = Entrada(Index) ValorTabla = "5" Call CargaLista(ValorControl, Index) Case 6 Set ValorControl = Entrada(Index) ValorTabla = "6" Call CargaLista(ValorControl, Index) Case 7 Set ValorControl = Entrada(Index) ValorTabla = "7" Call CargaLista(ValorControl, Index) End Select Posiciona (1) Indice = 1 DoEventsEnd SubPrivate Sub CargaDBLista(Control, Fichero, Campo) BorraDatos Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM CultivosNombre ORDER BY Cultivo ;") 'Datos.DatabaseName = NBaseDeDatos 'Datos.RecordSource = NCultivosNombre Set Datos.Recordset = Consulta Datos.Refresh DBLista.ZOrder 0 DBLista.Left = Entrada(1).Left 'Control.Left DBLista.Top = Entrada(1).Top 'Control.Top DBLista.Width = Entrada(1).Width 'Control.Width DBLista.Height = 4000 DBLista.ListField = "Cultivo" DBLista.Refresh DBLista.Visible = TrueEnd SubPrivate Sub DBLista_DblClick() ValorControl.Text = DBLista.Text DBLista.Visible = False Posiciona (1)End SubPrivate Sub CargaLista(Control, Index) 'ComandoLista(INDEX).Visible = False Lista.ZOrder 0 Lista.Left = Control.Left Lista.Top = Control.Top 'Lista.Width = Control.Width Lista.Visible = True Select Case Index Case 2 Lista.Clear

Page 187: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

187

Lista.Width = 4000 Lista.Height = 5 * 400 Lista.AddItem "Cultivos extensivos y hortalizas" Lista.AddItem "Arroz" Lista.AddItem "Alfalfa" Lista.AddItem "Arboles caducifolios y de nuez" Lista.AddItem "Cítricos" Lista.AddItem "Uva" Lista.AddItem "Plátano" 'Lista.AddItem "Otros" Case 3 Lista.Clear Lista.AddItem "SI" Lista.AddItem "NO" Lista.Height = 2 * 400 Case 4 Lista.Clear Lista.AddItem "HELADAS FUERTES" Lista.AddItem "HELADAS DEBILES" Lista.AddItem "SIN HELADAS" Lista.Height = 2 * 400 Case 5 Lista.Clear Lista.AddItem "ALTA" Lista.AddItem "BAJA" Lista.Height = 2 * 400 Case 6 Lista.Clear Lista.AddItem "FUERTES" Lista.AddItem "DEBILES" Lista.Height = 2 * 400 Case 7 Lista.Clear Lista.AddItem "JOVEN" Lista.AddItem "MEDIO" Lista.AddItem "ADULTO" Lista.Height = 2 * 400 End SelectEnd SubPrivate Sub Lista_DblClick() If ValorTabla = "2" Then BorraKc If Lista.Text = "Cultivos extensivos y hortalizas" Then ValorControl.Text = "A" If Lista.Text = "Arroz" Then ValorControl.Text = "B" If Lista.Text = "Alfalfa" Then ValorControl.Text = "D" If Lista.Text = "Arboles caducifolios y de nuez" Then ValorControl.Text = "E" If Lista.Text = "Cítricos" Then ValorControl.Text = "F" If Lista.Text = "Uva" Then ValorControl.Text = "G" If Lista.Text = "Plátano" Then ValorControl.Text = "H" 'If Lista.Text = "Otros" Then ValorControl.Text = "O" DESACTIVATODO If ValorControl = "A" Then ACTIVA (5) ACTIVA (6) Frame1.Visible = True Frame2.Visible = False End If If ValorControl = "B" Then ACTIVA (5) ACTIVA (6) Frame1.Visible = True Frame2.Visible = False End If If ValorControl = "D" Then ACTIVA (5) ACTIVA (6) Frame1.Visible = True Frame2.Visible = False End If If ValorControl = "E" Then ACTIVA (3) ACTIVA (4) ACTIVA (5)

Page 188: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

188

ACTIVA (6) ACTIVA (7) Frame1.Visible = False Frame2.Visible = True End If If ValorControl = "F" Then ACTIVA (3) ACTIVA (7) Frame1.Visible = False Frame2.Visible = True End If If ValorControl = "G" Then ACTIVA (4) ACTIVA (5) ACTIVA (6) Frame1.Visible = False Frame2.Visible = True End If If ValorControl = "H" Then ACTIVA (6) ACTIVA (7) Frame1.Visible = False Frame2.Visible = True End If If ValorControl = "O" Then Frame1.Visible = False Frame2.Visible = True End If Posiciona (1) End If If ValorTabla = "3" Then If Lista.Text = "SI" Then ValorControl.Text = "S" If Lista.Text = "NO" Then ValorControl.Text = "N" Posiciona (1) End If If ValorTabla = "4" Then If Lista.Text = "HELADAS DEBILES" Then ValorControl.Text = "D" If Lista.Text = "HELADAS FUERTES" Then ValorControl.Text = "F" If Lista.Text = "SIN HELADAS" Then ValorControl.Text = "S" Posiciona (1) End If If ValorTabla = "5" Then If Lista.Text = "ALTA" Then ValorControl.Text = "A" If Lista.Text = "BAJA" Then ValorControl.Text = "B" Posiciona (1) End If If ValorTabla = "6" Then If Lista.Text = "DEBILES" Then ValorControl.Text = "D" If Lista.Text = "FUERTES" Then ValorControl.Text = "F" Posiciona (1) End If If ValorTabla = "7" Then If Lista.Text = "JOVEN" Then ValorControl.Text = "J" If Lista.Text = "MEDIO" Then ValorControl.Text = "M" If Lista.Text = "ADULTO" Then ValorControl.Text = "A" Posiciona (1) End If Lista.Visible = False ' Proceso de recogida de datos If (Entrada(2) = "A" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _ (Entrada(2) = "B" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _ (Entrada(2) = "D" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _ (Entrada(2) = "E" And Entrada(3) <> "-" And Entrada(4) <> "-" And Entrada(5) <> "-" And Entrada(6) <> "-" AndEntrada(7) <> "-") Or _ (Entrada(2) = "F" And Entrada(3) <> "-" And Entrada(7) <> "-") Or _ (Entrada(2) = "G" And Entrada(4) <> "-" And Entrada(5) <> "-" And Entrada(6) <> "-") Or _ (Entrada(2) = "H" And Entrada(6) <> "-") Or _ (Entrada(2) = "O") Then CargaKc CargaDias CargaRaices CargaSal CargaFraccion

Page 189: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

189

Comando(5).Visible = True End IfEnd SubFunction CargaKc() fCultivosKc.Index = "ORDEN" fCultivosKc.MoveFirst fCultivosKc.Seek "=", Entrada(1).Text, Entrada(2).Text, Entrada(3).Text, Entrada(4).Text, Entrada(5).Text,Entrada(6).Text, Entrada(7).Text If fCultivosKc.NoMatch = False Then 'Registro encontrado If Entrada(2) = "A" Or Entrada(2) = "B" Or Entrada(3) = "D" Then Entrada(8) = fCultivosKc("KcI") Entrada(9) = fCultivosKc("KcM") Entrada(10) = fCultivosKc("KcF") Else Entrada(18) = NoNulo(fCultivosKc("Kc01")) Entrada(19) = NoNulo(fCultivosKc("Kc02")) Entrada(20) = NoNulo(fCultivosKc("Kc03")) Entrada(21) = NoNulo(fCultivosKc("Kc04")) Entrada(22) = NoNulo(fCultivosKc("Kc05")) Entrada(23) = NoNulo(fCultivosKc("Kc06")) Entrada(24) = NoNulo(fCultivosKc("Kc07")) Entrada(25) = NoNulo(fCultivosKc("Kc08")) Entrada(26) = NoNulo(fCultivosKc("Kc09")) Entrada(27) = NoNulo(fCultivosKc("Kc10")) Entrada(28) = NoNulo(fCultivosKc("Kc11")) Entrada(29) = NoNulo(fCultivosKc("Kc12")) End If Else BorraKc End IfEnd FunctionFunction BorraDatos() BorraKc Dim num For num = 31 To 41 Entrada(num) = "" Next numEnd FunctionFunction BorraKc() Dim num For num = 8 To 17 Entrada(num) = "" Next num For num = 18 To 30 Entrada(num) = "" Next numEnd FunctionFunction CargaRaices() fCultivosRaices.Index = "ORDEN" fCultivosRaices.MoveFirst fCultivosRaices.Seek "=", Entrada(1).Text If fCultivosRaices.NoMatch = False Then 'Registro encontrado If Entrada(2) = "A" Or Entrada(2) = "B" Or Entrada(3) = "D" Then Entrada(15) = fCultivosRaices("Raices") Entrada(16) = fCultivosRaices("Raices") Entrada(17) = fCultivosRaices("Raices") Else Entrada(30) = fCultivosRaices("Raices") End If End IfEnd FunctionFunction CargaDias() fCultivosDias.Index = "ORDEN" fCultivosDias.MoveFirst fCultivosDias.Seek "=", Entrada(1).Text If fCultivosDias.NoMatch = False Then 'Registro encontrado If Entrada(2) = "A" Or Entrada(2) = "B" Or Entrada(3) = "D" Then Entrada(11) = fCultivosDias("DiasI") Entrada(12) = fCultivosDias("DiasD") Entrada(13) = fCultivosDias("DiasM") Entrada(14) = fCultivosDias("DiasF") End If End If

Page 190: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

190

End FunctionFunction CargaFraccion() fCultivosFraccion.Index = "ORDEN" fCultivosFraccion.MoveFirst fCultivosFraccion.Seek "=", Entrada(1).Text If fCultivosFraccion.NoMatch = False Then 'Registro encontrado Entrada(31) = fCultivosFraccion("Fraccion") End IfEnd FunctionFunction CargaSal() fCultivosSal.Index = "ORDEN" fCultivosSal.MoveFirst fCultivosSal.Seek "=", Entrada(1).Text If fCultivosSal.NoMatch = False Then 'Registro encontrado Entrada(32) = fCultivosSal("ECe100") Entrada(33) = fCultivosSal("ECw100") Entrada(34) = fCultivosSal("ECe90") Entrada(35) = fCultivosSal("ECw90") Entrada(36) = fCultivosSal("ECe75") Entrada(37) = fCultivosSal("ECw75") Entrada(38) = fCultivosSal("ECe50") Entrada(39) = fCultivosSal("ECw50") Entrada(40) = fCultivosSal("MaxECe") End IfEnd FunctionFunction DESACTIVATODO() Dim num For num = 3 To 7 Label(num).Visible = False Entrada(num).Visible = False ComandoLista(num).Visible = False Entrada(num).Text = "-" Next numEnd FunctionFunction ACTIVA(Numero) Label(Numero).Visible = True Entrada(Numero).Visible = True ComandoLista(Numero).Visible = TrueEnd FunctionSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 191: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

191

RIEGOS23.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Object ="DBLIST32.OCX"Option Explicit Dim Indice As Integer Dim Atras As Integer Dim Mensajes(20) As String Dim Alertas(20) As String Dim Campos(20) As String Dim ExisteFichero As String Dim QueMes Dim vColor Dim Mes Dim Ano Dim Dia Dim TipoDatos Dim NomMes(12) Dim NumeroPicadoPrivate Sub Form_Load() Mensajes(1) = "Entra la temperatura máxima" Mensajes(2) = "Entra la temperatura mínima" Mensajes(3) = "Entra la humedad máxima" Mensajes(4) = "Entra la humedad mínima" Mensajes(5) = "Entra la humedad media" Mensajes(6) = "Entra el viento diario" Mensajes(7) = "Entra la radiación solar diaria" Mensajes(8) = "Entra el número de horas de sol diarias" Mensajes(9) = "Entra la precipitación" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", Val(Right(Me.Name, 2)), "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Comando(0).Visible = True Atras = 0 Indice = 1 Mensaje.Caption = "Escoje una opción" CargarDatosEnd SubPrivate Sub Form_Unload(Cancel As Integer) Unload Me Load Riegos'SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me End SelectEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado TipoDatos = fProgramacion("Clima") Entrada(0).Text = fProgramacion("NombreProgramacion") Else TipoDatos = "M" End IfEnd SubPrivate Sub GrabarDatos() If ExisteFichero = "NO" Then fProgramacion.AddNew

Page 192: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

192

Else fProgramacion.Edit End If Call MoverPF("NombreProgramacion", Entrada(0)) Call MoverPF("Descripcion", Entrada(1)) Call MoverPF("NombreFinca", Entrada(2)) Call MoverPF("Poblacion", Entrada(3)) Call MoverPF("Provincia", Entrada(4)) Call MoverPF("LatitudGrados", Entrada(5)) Call MoverPF("LatitudMinutos", Entrada(6)) Call MoverPF("LatitudSegundos", Entrada(7)) Call MoverPF("Latitud", Entrada(8)) Call MoverPF("LongitudGrados", Entrada(9)) Call MoverPF("LongitudMinutos", Entrada(10)) Call MoverPF("LongitudSegundos", Entrada(11)) Call MoverPF("Longitud", Entrada(12)) Call MoverPF("Altitud", Entrada(13)) fProgramacion("Pantalla23") = "T" fProgramacion.Update If Right(Riegos.Forma(Val(Right(Me.Name, 2))).Caption, 1) <> ">" Then Riegos.Forma(Val(Right(Me.Name, 2))).Caption = Riegos.Forma(Val(Right(Me.Name, 2))).Caption + " >" End IfEnd Sub'Private Sub Entrada_GotFocus(Index As Integer)'End SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End SubPrivate Sub MoverPF(Campo As String, Pantalla) fProgramacion(Campo) = Pantalla.TextEnd SubPrivate Sub Command1_Click() Command1.Visible = False Command2.Visible = False If TipoDatos = "M" Or TipoDatos = "D" Then Command1.Visible = False Call EmpiezaPrograma Else MsgBox ("Ves al menú de datos de la finca y entra el tipo de datos climáticos") End IfEnd SubPrivate Sub Command2_Click() Command1.Visible = False Command2.Visible = False If TipoDatos = "M" Or TipoDatos = "D" Then SSPanel1.Visible = True ValorTabla = "ClimaMaestro" Call CargaDBLista(ValorTabla, "Estacion") Mensaje.Caption = "Cliquea en los datos de una estación meteorológica" Else MsgBox ("Ves al menú de datos de la finca y entra el tipo de datos climáticos") End IfEnd SubPrivate Sub CargaDBLista(Fichero, Campo) Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM ClimaMaestro WHERE Clima = '" & TipoDatos & "'ORDER BY Estacion ;") Set Datos.Recordset = Consulta Datos.Refresh DBLista.ZOrder 0 DBLista.ListField = "Estacion" DBLista.Refresh DBLista.Visible = TrueEnd SubPrivate Sub DBLista_DblClick() Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM ClimaDetalle WHERE Clima = '" & TipoDatos & "' andEstacion = '" & DBLista.Text & "' ORDER BY Fecha ;") If Consulta.RecordCount <> 0 Then Consulta.MoveFirst While Not Consulta.EOF fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.Seek "=", NombreProgramacion, Consulta("Fecha"), Consulta("Clima")

Page 193: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

193

If fProgramacionClima.NoMatch = False Then 'Registro encontrado fProgramacionClima.Edit Else fProgramacionClima.AddNew fProgramacionClima("NombreProgramacion") = NombreProgramacion fProgramacionClima("Fecha") = Consulta("Fecha") fProgramacionClima("Clima") = TipoDatos fProgramacionClima("Color") = "V" fProgramacionClima("TemperaturaMaxima") = Consulta("TemperaturaMaxima") fProgramacionClima("TemperaturaMinima") = Consulta("TemperaturaMinima") fProgramacionClima("Psicrometro") = Consulta("Psicrometro") fProgramacionClima("HumedadMaxima") = Consulta("HumedadMaxima") fProgramacionClima("HumedadMinima") = Consulta("HumedadMinima") fProgramacionClima("HumedadMedia") = Consulta("HumedadMedia") fProgramacionClima("Radiacion") = Consulta("Radiacion") fProgramacionClima("RadiacionNeta") = Consulta("RadiacionNeta") fProgramacionClima("HorasSol") = Consulta("HorasSol") fProgramacionClima("Viento") = Consulta("Viento") fProgramacionClima("Lluvia") = Consulta("Lluvia") fProgramacionClima.Update End If Consulta.MoveNext Wend fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado fProgramacion.Edit fProgramacion("Pantalla23") = "T" fProgramacion.Update End If End IfSSPanel1.Visible = FalseCommand1.Visible = TrueCommand2.Visible = TrueEnd SubPrivate Sub EmpiezaPrograma() Dim contador Dim leecolor Mes = Month(Date) Ano = Year(Date) CargaInicial If TipoDatos = "D" Then Mensaje.Caption = "Cliquea en un día y entra los datos meteorológicos" SSDiario.Visible = True CalculaDias For contador = 0 To 41 If SSPANEL2(contador).Visible = True Then fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst Dim fechar fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(SSPANEL2(contador).Caption) + 100), 2))) fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D" If fProgramacionClima.NoMatch = False Then 'Registro encontrado leecolor = fProgramacionClima("Color") Else leecolor = "G" End If If leecolor = "G" Then SSPANEL2(contador).BackColor = &HC0C0C0 If leecolor = "V" Then SSPANEL2(contador).BackColor = &H80FF80 If leecolor = "R" Then SSPANEL2(contador).BackColor = &HFF& End If Next contador End If If TipoDatos = "M" Then Mensaje.Caption = "Cliquea en un mes y entra los datos meteorológicos" SSMesario.Visible = True TituloMes.Caption = "Entrada mensual" ' NomMes(Mes) + "-" + Str(Ano) For contador = 1 To 12 fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst fProgramacionClima.Seek "=", NombreProgramacion, Right(Str(contador + 100), 2), "M" If fProgramacionClima.NoMatch = False Then 'Registro encontrado

Page 194: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

194

leecolor = fProgramacionClima("Color") Else leecolor = "G" End If If leecolor = "G" Then SSMES(contador - 1).BackColor = &HC0C0C0 If leecolor = "V" Then SSMES(contador - 1).BackColor = &H80FF80 If leecolor = "R" Then SSMES(contador - 1).BackColor = &HFF& Next contador End IfEnd SubPrivate Sub Boton_Click(Index As Integer) Select Case Index Case 0 Mes = Mes - 1 If Mes = 0 Then Mes = 12 Ano = Ano - 1 End If Case 1 Ano = Ano - 1 Case 2 Ano = Ano + 1 Case 3 Mes = Mes + 1 If Mes = 13 Then Mes = 1 Ano = Ano + 1 End If End Select CalculaDias Dim contador Dim leecolor For contador = 0 To 41 If SSPANEL2(contador).Visible = True Then fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst Dim fechar fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(SSPANEL2(contador).Caption) + 100), 2))) fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D" If fProgramacionClima.NoMatch = False Then 'Registro encontrado leecolor = fProgramacionClima("Color") Else leecolor = "G" End If If leecolor = "G" Then SSPANEL2(contador).BackColor = &HC0C0C0 If leecolor = "V" Then SSPANEL2(contador).BackColor = &H80FF80 If leecolor = "R" Then SSPANEL2(contador).BackColor = &HFF& End If Next contador Titulo.Caption = Right(Str(Dia + 100), 2) + "-" + Right(Str(Mes + 100), 2) + "-" + Str(Ano)End SubPrivate Sub ComandoAceptar_Click() Comando(0).Visible = True SSEntradaDatos.Visible = False Titulo.Visible = False '>> poner codigo de color segun datos Dim QueColor QueColor = Preguntacolor If TipoDatos = "M" Then SSMesario.Visible = True SSMesario.Enabled = True SSMES(NumeroPicado).BackColor = QueColor GrabarDatosMes End If If TipoDatos = "D" Then SSDiario.Visible = True SSDiario.Enabled = True SSPANEL2(NumeroPicado).BackColor = &H80FF80 GrabarDatosdia End If fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion

Page 195: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

195

If fProgramacion.NoMatch = False Then 'Registro encontrado fProgramacion.Edit fProgramacion("Pantalla23") = "T" fProgramacion.Update End If '>> poner codigo de grabacion de datosEnd SubPrivate Sub ComandoSalir_Click()Comando(0).Visible = TrueSSEntradaDatos.Visible = False Titulo.Visible = False If TipoDatos = "M" Then SSMesario.Visible = True SSMesario.Enabled = True End If If TipoDatos = "D" Then SSDiario.Visible = True SSDiario.Enabled = True End IfEnd SubPrivate Sub CargaInicial() NomMes(1) = "ENERO" NomMes(2) = "FEBRERO" NomMes(3) = "MARZO" NomMes(4) = "ABRIL" NomMes(5) = "MAYO" NomMes(6) = "JUNIO" NomMes(7) = "JULIO" NomMes(8) = "AGOSTO" NomMes(9) = "SEPTIEMBRE" NomMes(10) = "OCTUBRE" NomMes(11) = "NOVIEMBRE" NomMes(12) = "DICIEMBRE"End SubPrivate Sub CalculaDias() Dim num For num = 0 To 41 SSPANEL2(num).Caption = "" SSPANEL2(num).Visible = False 'EntradaDato(Num).Text = "" 'EntradaDato(Num).Visible = False Next num Dim NumDias Dim CadenaDias SSPanel13.Caption = NomMes(Mes) + " - " + Str(Ano) If (Ano = 4 * Int(Ano / 4) And Ano <> 100 * Int(Ano / 100)) Then CadenaDias = "312931303130313130313031" Else CadenaDias = "312831303130313130313031" End If Dim MesCal Dim AnoCal Dim NumFil: NumFil = 0 Dim NumCol: NumCol = 0 Dim Numero: Numero = 0 Dim DiaMes: DiaMes = 0 NumDias = Val(Mid$(CadenaDias, (2 * Mes) - 1, 2)) For DiaMes = 1 To NumDias MesCal = Mes AnoCal = Ano If Mes <= 2 Then MesCal = MesCal + 12 AnoCal = AnoCal - 1 End If Numero = DiaMes + 2 * MesCal + Int(0.6 * (MesCal + 1)) + AnoCal + Int(AnoCal / 4) - Int(AnoCal / 100) + Int(AnoCal /400) + 2 Numero = (Int((Numero / 7 - Int(Numero / 7)) * 7 + 0.5)) + 1 If Numero < 3 Then NumCol = Numero + 5 Else NumCol = Numero - 2 End If Dim Pos

Page 196: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

196

Pos = (NumFil * 7) + (NumCol - 1) SSPANEL2(Pos).Visible = True SSPANEL2(Pos).Caption = DiaMes If NumCol = 7 Then NumFil = NumFil + 1 End If DoEvents Next DiaMes DoEvents '>>leer los que estan cargadosEnd SubPrivate Sub SSMES_Click(Index As Integer) Comando(0).Visible = False SSDiario.Enabled = False SSEntradaDatos.Visible = True Call Apaga(3) Call Apaga(4) Call Enciende(5) Posiciona (1) QueMes = Index + 1 Titulo.Caption = NomMes(QueMes) Titulo.Visible = True NumeroPicado = Index Check1_Click Check2_Click Posiciona (1) Me.Mensaje.Caption = Mensajes(1)'leedatos fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst fProgramacionClima.Seek "=", NombreProgramacion, Right(Str(Index + 101), 2), "M" If fProgramacionClima.NoMatch = False Then 'Registro encontrado Entrada(1) = NoNulo(fProgramacionClima("TemperaturaMaxima")) Entrada(2) = NoNulo(fProgramacionClima("TemperaturaMinima")) Entrada(3) = NoNulo(fProgramacionClima("HumedadMaxima")) Entrada(4) = NoNulo(fProgramacionClima("HumedadMinima")) Entrada(5) = NoNulo(fProgramacionClima("HumedadMedia")) Entrada(6) = NoNulo(fProgramacionClima("Viento")) Entrada(7) = NoNulo(fProgramacionClima("RadiacionNeta")) Entrada(8) = NoNulo(fProgramacionClima("HorasSol")) Entrada(9) = NoNulo(fProgramacionClima("Lluvia")) Check1.Value = 0: If fProgramacionClima("Psicrometro") = "S" Then Check1.Value = 1 Check2.Value = 0: If fProgramacionClima("Radiacion") = "S" Then Check2.Value = 1 Else Dim contador For contador = 1 To 9 Entrada(contador).Text = "" Next contador End If '--End SubPrivate Sub SSPANEL2_Click(Index As Integer) Dia = SSPANEL2(Index).Caption Dim Corte1 As String Dim Corte2 As String Corte1 = Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Dia + 100), 2) Corte2 = Mid(Date$, 7, 4) + Mid(Date$, 1, 2) + Mid(Date$, 4, 2) If Val(Corte1) >= Val(Corte2) Then MsgBox ("No se puede escoger una fecha mayor que la de ayer") Else SSDiario.Enabled = False SSEntradaDatos.Visible = True Titulo.Caption = Right(Str(Dia + 100), 2) + "-" + Right(Str(Mes + 100), 2) + "-" + Str(Ano) Titulo.Visible = True Posiciona (1) NumeroPicado = Index Check1_Click Check2_Click Me.Mensaje.Caption = Mensajes(1)'lee datos Dim contador fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst Dim fechar

Page 197: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

197

fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(Dia) + 100), 2))) fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D" If fProgramacionClima.NoMatch = False Then 'Registro encontrado Entrada(1) = NoNulo(fProgramacionClima("TemperaturaMaxima")) Entrada(2) = NoNulo(fProgramacionClima("TemperaturaMinima")) Entrada(3) = NoNulo(fProgramacionClima("HumedadMaxima")) Entrada(4) = NoNulo(fProgramacionClima("HumedadMinima")) Entrada(5) = NoNulo(fProgramacionClima("HumedadMedia")) Entrada(6) = NoNulo(fProgramacionClima("Viento")) Entrada(7) = NoNulo(fProgramacionClima("RadiacionNeta")) Entrada(8) = NoNulo(fProgramacionClima("HorasSol")) Entrada(9) = NoNulo(fProgramacionClima("Lluvia")) Check1.Value = 0: If fProgramacionClima("Psicrometro") = "S" Then Check1.Value = 1 Check2.Value = 0: If fProgramacionClima("Radiacion") = "S" Then Check2.Value = 1 Else For contador = 1 To 9 Entrada(contador).Text = "" Next contador End If '-- End IfEnd Sub'***********************************************************************Private Sub Check1_Click() If Check1.Value = 1 Then Call Enciende(3) Call Enciende(4) Call Apaga(5) End If If Check1.Value = 0 Then Call Apaga(3) Call Apaga(4) Call Enciende(5) End If Posiciona (1)End SubPrivate Sub Check2_Click() If Check2.Value = 1 Then Call Enciende(7) Call Apaga(8) End If If Check2.Value = 0 Then Call Apaga(7) Call Enciende(8) End If Posiciona (1)End SubPrivate Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Atras = 1 End IfEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index Case 1 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "S", 5, 1) Case 2 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "S", 5, 1) Case 3 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0) Case 4 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0) Case 5 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0) Case 6 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 0) Case 7 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 0) Case 8 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 1) Case 9 KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 6, 0) End SelectEnd Sub

Page 198: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

198

Function TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales) As Integer Dim EstaMal Dim EstaMal1 Select Case tipo Case "N" 'Comprobación de Campo Numerico If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45 If Tecla = 8 Then TrataCampo = Tecla If Tecla = 46 Then Tecla = 44 If Tecla = 44 Then TrataCampo = Tecla Dim num For num = 1 To Len(Campo) If Mid(Campo, num, 1) = "," And Tecla = 44 Then TrataCampo = 0 End If Next num If Len(Campo) = 0 And Tecla = 48 Then TrataCampo = 0 End If If Len(Campo) = 1 And Campo = "0" And Tecla = 48 Then TrataCampo = 0 End If If Decimales = 0 And TrataCampo = 46 Then TrataCampo = 0 End If If Decimales > 0 Then Dim Flag Dim CuentaDecimales CuentaDecimales = 0 Flag = False For num = 1 To Len(Campo) If Flag = True Then CuentaDecimales = CuentaDecimales + 1 If Mid(Campo, num, 1) = "." Then Flag = True End If Next num If CuentaDecimales = Decimales Then TrataCampo = 0 End If End If If Len(Campo) = Longitud And TrataCampo <> 8 Then TrataCampo = 0 End If Case "A" 'Tipo Alfanumerico TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 End If Case "F" 'Tipo Fecha If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 8 Then TrataCampo = Tecla If Tecla = 45 Then TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then EstaMal = "S" If Tecla = 13 Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "S" End If

Page 199: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

199

Else Dim estamal2 EstaMal = "N" End If If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then EstaMal = "S" If EstaMal1 <> "S" Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "" End If End If End Select If Tecla = 13 Then If EstaMal = "S" Then Posiciona (Indice) Else If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then Call MoverCampo(FormaMe, "AD") Else Posiciona (Indice) End If End If End If If Tecla = 9 Then 'hacia atras If Atras = 1 Then Call MoverCampo(FormaMe, "AT") Else Call MoverCampo(FormaMe, "AD") End If End IfEnd FunctionFunction Apaga(Index) Entrada(Index).Enabled = False Entrada(Index).BackColor = &H8000000B DoEventsEnd FunctionFunction Enciende(Index) Entrada(Index).Enabled = True Entrada(Index).BackColor = &H80000005 DoEventsEnd FunctionFunction Comprobacion(FormaMe, Indice, Campo, tipo) Dim ValorN Comprobacion = "OK" If tipo = "N" Then ValorN = Val(Campo) End If Select Case Indice Case 1 'temperatura If ValorN < -50 Or ValorN > 70 Then MsgBox ("¿Que se puede cultivar con esta temperatura?") Comprobacion = "" End If Case 2 'temperatura If ValorN < -50 Or ValorN > 70 Then MsgBox ("¿Que se puede cultivar con esta temperatura?") Comprobacion = "" End If If ValorN > Val(FormaMe.Entrada(1)) Then MsgBox ("La temperatura mínima no puede ser mayor que la mínima") Comprobacion = "" End If Case 3 'humedad If ValorN < 0 Or ValorN > 100 Then MsgBox ("Entra correctamente la humedad") Comprobacion = "" End If Case 4 'humedad If ValorN < 0 Or ValorN > 100 Then MsgBox ("Entra correctamente la humedad") Comprobacion = "" End If If ValorN > Val(FormaMe.Entrada(3)) Then

Page 200: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

200

MsgBox ("La humedad mínima no puede ser mayor que la mínima") Comprobacion = "" End If Case 5 'humedad If ValorN < 0 Or ValorN > 100 Then MsgBox ("Entra correctamente la humedad") Comprobacion = "" End If Case 6 'viento If ValorN < 0 Or ValorN > 3600 Then MsgBox ("Entra correctamente el viento. Km/día") Comprobacion = "" End If Case 7 'radiacion If ValorN < 0 Then MsgBox ("Entra correctamente la radiación solar en MJ/m2·período") Comprobacion = "" End If Case 8 'Horas de sol If ValorN < 0 Or ValorN > 24 Then MsgBox ("Entra correctamente las horas de sol al día") Comprobacion = "" End If Case 9 'Lluvia If ValorN < 0 Or ValorN > 400 Then MsgBox ("Entra correctamente la cantidad de lluvia en litros/m2·periodo") Comprobacion = "" End If End SelectEnd FunctionPrivate Sub MoverCampo(FormaMe, Como) If Como = "AD" Then ' adelante If Indice + 1 > 9 Then 'antes 14 Indice = 0 End If Indice = Indice + 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice + 1 Loop End If If Como = "AT" Then 'atras If Indice - 1 < 1 Then Indice = 10 End If Indice = Indice - 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice - 1 Loop End If Posiciona (Indice)Me.Mensaje.Caption = Mensajes(Indice) DoEventsEnd SubFunction MoverFoco(Numero) Posiciona (Numero)End FunctionFunction Preguntacolor() 'Gris = &HC0C0C0 'Verde = &H80FF80 'Rojo = &HFF& Preguntacolor = &HFF& If Check1.Value = 1 And Check2.Value = 1 And _ Trim(Entrada(1)) = "" And _ Trim(Entrada(2)) = "" And _ Trim(Entrada(3)) = "" And _ Trim(Entrada(4)) = "" And _ Trim(Entrada(6)) = "" And _ Trim(Entrada(7)) = "" Then Preguntacolor = &HC0C0C0 End If If Check1.Value = 1 And Check2.Value = 1 And _ Trim(Entrada(1)) <> "" And _ Trim(Entrada(2)) <> "" And _

Page 201: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

201

Trim(Entrada(3)) <> "" And _ Trim(Entrada(4)) <> "" And _ Trim(Entrada(6)) <> "" And _ Trim(Entrada(7)) <> "" Then Preguntacolor = &H80FF80 End If If Check1.Value = 1 And Check2.Value = 0 And _ Trim(Entrada(1)) = "" And _ Trim(Entrada(2)) = "" And _ Trim(Entrada(3)) = "" And _ Trim(Entrada(4)) = "" And _ Trim(Entrada(6)) = "" And _ Trim(Entrada(8)) = "" Then Preguntacolor = &HC0C0C0 End If If Check1.Value = 1 And Check2.Value = 0 And _ Trim(Entrada(1)) <> "" And _ Trim(Entrada(2)) <> "" And _ Trim(Entrada(3)) <> "" And _ Trim(Entrada(4)) <> "" And _ Trim(Entrada(6)) <> "" And _ Trim(Entrada(8)) <> "" Then Preguntacolor = &H80FF80 End If If Check1.Value = 0 And Check2.Value = 1 And _ Trim(Entrada(1)) = "" And _ Trim(Entrada(2)) = "" And _ Trim(Entrada(5)) = "" And _ Trim(Entrada(6)) = "" And _ Trim(Entrada(7)) = "" Then Preguntacolor = &HC0C0C0 End If If Check1.Value = 0 And Check2.Value = 1 And _ Trim(Entrada(1)) <> "" And _ Trim(Entrada(2)) <> "" And _ Trim(Entrada(5)) <> "" And _ Trim(Entrada(6)) <> "" And _ Trim(Entrada(7)) <> "" Then Preguntacolor = &H80FF80 End If If Check1.Value = 0 And Check2.Value = 0 And _ Trim(Entrada(1)) = "" And _ Trim(Entrada(2)) = "" And _ Trim(Entrada(5)) = "" And _ Trim(Entrada(6)) = "" And _ Trim(Entrada(8)) = "" Then Preguntacolor = &HC0C0C0 End If If Check1.Value = 0 And Check2.Value = 0 And _ Trim(Entrada(1)) <> "" And _ Trim(Entrada(2)) <> "" And _ Trim(Entrada(5)) <> "" And _ Trim(Entrada(6)) <> "" And _ Trim(Entrada(8)) <> "" Then Preguntacolor = &H80FF80 End If If Preguntacolor = &HC0C0C0 Then vColor = "G" If Preguntacolor = &H80FF80 Then vColor = "V" If Preguntacolor = &HFF& Then vColor = "R"End FunctionFunction GrabarDatosMes() Dim ExisteFichero fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst fProgramacionClima.Seek "=", NombreProgramacion, Right(Str(QueMes + 100), 2), TipoDatos If fProgramacionClima.NoMatch = False Then 'Registro encontrado ExisteFichero = "SI" Else ExisteFichero = "NO" End If If ExisteFichero = "NO" Then fProgramacionClima.AddNew Else

Page 202: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

202

fProgramacionClima.Edit End If fProgramacionClima("NombreProgramacion") = NombreProgramacion fProgramacionClima("Fecha") = Right(Str(QueMes + 100), 2) fProgramacionClima("Clima") = TipoDatos fProgramacionClima("Color") = vColor fProgramacionClima("TemperaturaMaxima") = Entrada(1) fProgramacionClima("TemperaturaMinima") = Entrada(2) If Check1.Value = 1 Then fProgramacionClima("HumedadMaxima") = Entrada(3) fProgramacionClima("HumedadMinima") = Entrada(4) Else fProgramacionClima("HumedadMedia") = Entrada(5) End If fProgramacionClima("Viento") = Entrada(6) If Check2.Value = 1 Then fProgramacionClima("RadiacionNeta") = Entrada(7) Else fProgramacionClima("HorasSol") = Entrada(8) End If fProgramacionClima("Lluvia") = Entrada(9) fProgramacionClima("Psicrometro") = "N" If Check1.Value = 1 Then fProgramacionClima("Psicrometro") = "S" End If fProgramacionClima("Radiacion") = "N" If Check2.Value = 1 Then fProgramacionClima("Radiacion") = "S" End If fProgramacionClima.UpdateEnd FunctionFunction GrabarDatosdia() Dim ExisteFichero fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst Dim fechar fechar = Trim((Str(Ano) + Right(Str(Mes + 100), 2) + Right(Str(Val(Dia) + 100), 2))) fProgramacionClima.Seek "=", NombreProgramacion, fechar, "D" If fProgramacionClima.NoMatch = False Then 'Registro encontrado ExisteFichero = "SI" Else ExisteFichero = "NO" End If If ExisteFichero = "NO" Then fProgramacionClima.AddNew Else fProgramacionClima.Edit End If fProgramacionClima("NombreProgramacion") = NombreProgramacion fProgramacionClima("Fecha") = fechar fProgramacionClima("Clima") = TipoDatos fProgramacionClima("Color") = vColor fProgramacionClima("TemperaturaMaxima") = Entrada(1) fProgramacionClima("TemperaturaMinima") = Entrada(2) If Check1.Value = 1 Then fProgramacionClima("HumedadMaxima") = Entrada(3) fProgramacionClima("HumedadMinima") = Entrada(4) Else fProgramacionClima("HumedadMedia") = Entrada(5) End If fProgramacionClima("Viento") = Entrada(6) If Check2.Value = 1 Then fProgramacionClima("RadiacionNeta") = Entrada(7) Else fProgramacionClima("HorasSol") = Entrada(8) End If fProgramacionClima("Lluvia") = Entrada(9) fProgramacionClima("Psicrometro") = "N" If Check1.Value = 1 Then fProgramacionClima("Psicrometro") = "S" End If fProgramacionClima("Radiacion") = "N" If Check2.Value = 1 Then

Page 203: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

203

fProgramacionClima("Radiacion") = "S" End If fProgramacionClima.UpdateEnd FunctionSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 204: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

204

RIEGOS24.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Object ="DBLIST32.OCX"Option Explicit'Dim Atras Dim Mensajes(41) As String Dim Alertas(41) As String Dim ValorControl As Control Dim ValorTabla As String Dim Indice As Integer Dim Atras As Integer Dim Campos(41) As String Dim ExisteFichero As String Dim QueMes Dim vColor Dim Tierra(20)Private Sub Form_Load()Indice = 1Mensajes(1) = "Entra la cantidad de Arena (%)" Mensajes(2) = "Entra la cantidad de Arcilla (%)" Mensajes(3) = "Entra la cantidad de Limo (%)" Mensajes(4) = "Cliquea a la derecha, si quieres escoger textura" Mensajes(5) = "Entra la capacidad de campo (% suelo seco)" Mensajes(6) = "Entra el punto de marchitez(% suelo seco)" Mensajes(7) = "Entra los segundos de latitud del lugar" Mensajes(8) = "Entra la latitud del lugar" Mensajes(9) = "Entra los grados de longitud del lugar" Mensajes(10) = "Entra los minutos de longitud del lugar" Mensajes(11) = "Entra la densidad aparente" Mensajes(13) = "Entra el porcentaje de pendiente" Mensajes(14) = "Entra la infiltración" Mensajes(15) = "Entra el porcentaje de eficiencia en el lavado de sales" Alertas(0) = "" Alertas(1) = "Entra la descripción" Alertas(2) = "Entra el nombre" Alertas(3) = "Entra la población" Alertas(4) = "Entra la provincia" Alertas(5) = "El valor de los grados de latitud van de 0 a 180" Alertas(6) = "El valor de los minutos de latitud van de 0 a 59" Alertas(7) = "El valor de los segundos de latitud van de 0 a 59" Alertas(8) = "El valor de la latitud es N o S" Alertas(9) = "El valor de los grados de longitud van de 0 a 180" Alertas(10) = "El valor de los minutos de longitud van de 0 a 59" Alertas(11) = "El valor de los segundos de longitud van de 0 a 59" Alertas(12) = "El valor de la longitud es E u O" Alertas(13) = "La altitud va de 0 a 3000 metros" Alertas(14) = "El número de cultivos va de 1 5" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 24, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Mensaje.Caption = Mensajes(1) CargarDatos Posiciona (1)End SubPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me

Page 205: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

205

End SelectEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Call MoverFP("NombreProgramacion", Entrada(0)) Call MoverFP("Arena", Entrada(1)) Call MoverFP("Arcilla", Entrada(2)) Call MoverFP("Limo", Entrada(3)) Call MoverFP("TipoSuelo", Entrada(4)) Call MoverFP("CapacidadCampo", Entrada(5)) Call MoverFP("PuntoMarchitamiento", Entrada(6)) Call MoverFP("AguaDisponible", Entrada(7)) Call MoverFP("PesoSueloSeco", Entrada(8)) Call MoverFP("VolumenSueloSeco", Entrada(9)) Call MoverFP("DensidadReal", Entrada(10)) Call MoverFP("DensidadAparente", Entrada(11)) Call MoverFP("Porosidad", Entrada(12)) Call MoverFP("PendienteTerreno", Entrada(13)) Call MoverFP("TasaInfiltracion", Entrada(14)) Call MoverFP("EficienciaLavado", Entrada(15)) End IfEnd SubPrivate Sub GrabarDatos() fProgramacion.Edit fProgramacion("Arena") = Entrada(1).Text fProgramacion("Arcilla") = Entrada(2).Text fProgramacion("Limo") = Entrada(3).Text fProgramacion("TipoSuelo") = Entrada(4).Text fProgramacion("CapacidadCampo") = Entrada(5).Text fProgramacion("PuntoMarchitamiento") = Entrada(6).Text fProgramacion("AguaDisponible") = Entrada(7).Text fProgramacion("PesoSueloSeco") = Entrada(8).Text fProgramacion("VolumenSueloSeco") = Entrada(9).Text fProgramacion("DensidadReal") = Entrada(10).Text fProgramacion("DensidadAparente") = Entrada(11).Text fProgramacion("Porosidad") = Entrada(12).Text fProgramacion("PendienteTerreno") = Entrada(13).Text fProgramacion("TasaInfiltracion") = Entrada(14).Text fProgramacion("EficienciaLavado") = Entrada(15).Text fProgramacion("Pantalla24") = "T" fProgramacion.UpdateEnd SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End SubPrivate Sub ComandoLista_Click(Index As Integer) Select Case Index Case 1 ValorTabla = "Texturas" Call CargaDBLista ' (ValorTabla, "Cultivo") End Select Posiciona (1) Indice = 1End SubPrivate Sub CargaDBLista() '(Fichero, Campo) Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM Texturas ORDER BY Textura ;") Set Datos.Recordset = Consulta Datos.Refresh DBLista.ZOrder 0 DBLista.Left = Entrada(4).Left 'Control.Left DBLista.Top = Entrada(4).Top 'Control.Top DBLista.Width = Entrada(4).Width 'Control.Width DBLista.Height = 4000 DBLista.ListField = "Textura" DBLista.Refresh DBLista.Visible = TrueEnd SubPrivate Sub DBLista_DblClick() Entrada(4).Text = DBLista.Text

Page 206: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

206

Entrada(1) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "Arena") Entrada(2) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "Arcilla") Entrada(3) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "Limo") Entrada(8) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "PesoSueloSeco") Entrada(9) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "VolumenSueloSeco") Entrada(11) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "DensidadAparente") Entrada(10) = "2,65" Entrada(15) = LeerFichero("Texturas", "ORDEN", DBLista.Text, "EficienciaLavado") DBLista.Visible = False Posiciona (1)End Sub'*****************************************************************************************Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Atras = 1 End IfEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "", 50, 0, "S") Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 2, "S") Case 9: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 2, "S") Case 10: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 2, "S") Case 11: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 0, "S") Case 12: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 13: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 14: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 15: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Comando(5).Visible = True End SelectEnd SubFunction TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer Dim EstaMal Dim EstaMal1 Select Case tipo Case "N" 'Comprobación de Campo Numerico If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45 If Tecla = 8 Then TrataCampo = Tecla If Tecla = 46 Then Tecla = 44 If Tecla = 44 Then TrataCampo = Tecla Dim num For num = 1 To Len(Campo) If Mid(Campo, num, 1) = "," And Tecla = 44 Then TrataCampo = 0 End If Next num If Len(Campo) = 0 And Tecla = 48 And Cero <> "S" Then TrataCampo = 0 End If If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then TrataCampo = 0 End If If Decimales = 0 And TrataCampo = 46 Then TrataCampo = 0 End If If Decimales > 0 Then Dim Flag Dim CuentaDecimales CuentaDecimales = 0 Flag = False For num = 1 To Len(Campo) If Flag = True Then CuentaDecimales = CuentaDecimales + 1

Page 207: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

207

If Mid(Campo, num, 1) = "." Then Flag = True End If Next num If CuentaDecimales = Decimales Then TrataCampo = 0 End If End If If Len(Campo) = Longitud And TrataCampo <> 8 Then TrataCampo = 0 End If Case "A" 'Tipo Alfanumerico TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 End If Case "F" 'Tipo Fecha If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 8 Then TrataCampo = Tecla If Tecla = 45 Then TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then EstaMal = "S" If Tecla = 13 Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "S" End If Else Dim estamal2 EstaMal = "N" End If If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then EstaMal = "S" If EstaMal1 <> "S" Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "" End If End If End Select If Tecla = 13 Then If EstaMal = "S" Then Posiciona (Indice) Else If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then Call MoverCampo(FormaMe, "AD") Else Posiciona (Indice) End If End If End If If Tecla = 9 Then 'hacia atras If Atras = 1 Then Call MoverCampo(FormaMe, "AT") Else Call MoverCampo(FormaMe, "AD") End If End IfEnd FunctionPrivate Sub MoverCampo(FormaMe, Como) If Como = "AD" Then ' adelante If Indice + 1 > 15 Then Indice = 0 End If

Page 208: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

208

Indice = Indice + 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice + 1 Loop End If If Como = "AT" Then 'atras If Indice - 1 < 1 Then Indice = 16 End If Indice = Indice - 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice - 1 Loop End If Posiciona (Indice)Me.Mensaje.Caption = Mensajes(Indice) DoEventsEnd SubFunction Comprobacion(FormaMe, Indice, Campo, tipo) Dim ValorN Comprobacion = "OK" If tipo = "N" Then ValorN = Val(Campo) End If Select Case Indice Case 1 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If If ValorN > 100 Then MsgBox ("La cifra no puede exceder de 100") Comprobacion = "" End If Case 2 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If If ValorN > 100 Then MsgBox ("La cifra no puede exceder de 100") Comprobacion = "" End If Case 3 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If If ValorN > 100 Then MsgBox ("La cifra no puede exceder de 100") Comprobacion = "" End If If Val(Entrada(1)) + Val(Entrada(2)) + Val(Entrada(3)) = 100 Then If Entrada(1) <> "" And Entrada(2) <> "" And Entrada(3) <> "" Then 'ReDim Tierra(7) Tierra(1) = Entrada(1) Tierra(2) = Entrada(2) Tierra(3) = Entrada(3) CalculaTextura Entrada(4) = Tierra(4) Entrada(5) = Tierra(5) Entrada(6) = Tierra(6) Entrada(7) = Tierra(7) Entrada(14).Text = LeerFichero("Texturas", "ORDEN", Entrada(4), "Infiltracion") End If Else MsgBox ("Los 3 porcentajes han de sumar 100") Comprobacion = "" End If Case 5 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = ""

Page 209: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

209

End If Case 6 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = "" End If Case 10 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = "" End If If ValorN > 0 Then Tierra(8) = Entrada(8) Tierra(9) = Entrada(9) Tierra(10) = Entrada(10) 'CalculaDensidadPorosidad Entrada(11) = Tierra(11) Entrada(12) = Tierra(12) End If Case 11 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = "" End If Case 13 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = "" Else 'Tierra(13) = Entrada(13) 'CalculaDisminucionInfiltracion 'Entrada(14) = Tierra(14) End If Case 14 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = "" End If Case 15 ' If Campo = "" Then MsgBox ("Has de entrar algún valor") Comprobacion = "" End If End SelectEnd FunctionPrivate Sub CalculaTextura() Dim Are: Are = Val(Tierra(1)) Dim Arc: Arc = Val(Tierra(2)) Dim Lim: Lim = Val(Tierra(3)) Dim Textura If Lim >= 80 And Are <= 12 Then Textura = "LIMOSO" If (Lim >= 50 And Lim <= 80 And Are <= 50 And Arc <= 28) Or (Lim >= 80 And Lim <= 92 And Are <= 8 And Arc <= 20 AndArc >= 12) Then Textura = "FRANCO-LIMOSO" If Are >= 22 And Are <= 52 And Arc >= 8 And Arc <= 28 And Lim >= 28 And Lim <= 50 Then Textura = "FRANCO" If Are <= 20 And Arc >= 28 And Arc <= 40 Then Textura = "FRANCO-ARCILLOSO-LIMOSO" If Are >= 20 And Are <= 45 And Arc <= 40 And Arc >= 28 Then Textura = "FRANCO-ARCILLOSO" If Arc >= 40 And Are <= 45 And Lim <= 40 Then Textura = "ARCILLOSO" If Arc >= 45 And Are >= 45 Then Textura = "ARCILLOSO-ARENOSO" If Arc >= 40 And Lim >= 40 Then Textura = "ARCILLOSO-LIMOSO" If Arc >= 20 And Arc <= 35 And Are >= 45 And Lim <= 28 Then Textura = "FRANCO-ARCILLOSO-ARENOSO" If (Are >= 52 And Are <= 85 And Arc <= 20 And Lim >= (-2 * Arc + 30)) Or (Are >= 42 And Are < 52 And Arc <= 8 And Lim<= 50) Then Textura = "FRANCO-ARENOSO" If Are >= 70 And Are <= 90 And Arc <= 15 And Lim >= (-1.5 * Arc + 15) And Lim <= (-2 * Arc + 30) Then Textura ="ARENOSO-FRANCO" If Are >= 85 And Arc <= 10 And Lim <= (-1.5 * Arc + 15) Then Textura = "ARENOSO" Tierra(4) = Textura Tierra(5) = Int((0.48 * Arc) + (0.162 * Lim) + (0.023 * Are) + 2.62) Tierra(6) = Int((0.302 * Arc) + (0.102 * Lim) + (0.0147 * Are)) Tierra(7) = Int(Tierra(5) - Tierra(6))End SubPrivate Sub CalculaDensidadPorosidad() Dim PSS: PSS = Tierra(8) Dim VSS: VSS = Tierra(9)

Page 210: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

210

Dim dr As Double: dr = CDbl(Tierra(10)) Dim Da As Double Tierra(11) = Format((CDbl(PSS) / CDbl(VSS)), "####0.00") Da = CDbl(Tierra(11)) Tierra(12) = Format(((dr - Da) / dr) * 100, "##0")End SubPrivate Sub CalculaDisminucionInfiltracion() Dim Pendiente: Pendiente = Tierra(13) Dim Disminucion If Val(Pendiente) >= 0 And Val(Pendiente) <= 5 Then Disminucion = 0 If Val(Pendiente) > 5 And Val(Pendiente) <= 8 Then Disminucion = 20 If Val(Pendiente) > 8 And Val(Pendiente) <= 12 Then Disminucion = 40 If Val(Pendiente) > 12 And Val(Pendiente) <= 20 Then Disminucion = 60 If Val(Pendiente) > 20 And Val(Pendiente) <= 100 Then Disminucion = 75 'Tierra(14) = Tierra(1) - (Tierra(14) * (Format(Disminucion, "##0") / 100))End SubSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 211: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

211

RIEGOS25.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Option Explicit'Dim Atras Dim Mensajes(41) As String Dim Alertas(41) As String Dim ValorControl As Control Dim ValorTabla As String Dim Indice As Integer Dim Atras As Integer Dim Campos(41) As String Dim ExisteFichero As String Dim QueMes Dim vColor Dim Matriz(20)Private Sub Form_Load()Indice = 1Mensajes(0) = "" Mensajes(1) = "Entra la conductividad del agua de riego" Alertas(0) = "" Alertas(1) = "Entra la descripción" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 25, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Mensaje.Caption = Mensajes(1) CargarDatos Posiciona (1)End SubPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me End SelectEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Call MoverFP("NombreProgramacion", Entrada(0)) Call MoverFP("ConductividadElectrica", Entrada(1)) End IfEnd SubPrivate Sub GrabarDatos() fProgramacion.Edit fProgramacion("ConductividadElectrica") = Entrada(1).Text fProgramacion("Pantalla25") = "T" fProgramacion.UpdateEnd SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End SubFunction BorraDatos() 'Dim num 'For num = 31 To 41 ' Entrada(num) = "" 'Next numEnd Function

Page 212: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

212

Private Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Atras = 1 End IfEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 1, "S") Comando(5).Visible = True End SelectEnd SubFunction TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer Dim EstaMal Dim EstaMal1 Select Case tipo Case "N" 'Comprobación de Campo Numerico If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45 If Tecla = 8 Then TrataCampo = Tecla If Tecla = 46 Then Tecla = 44 If Tecla = 44 Then TrataCampo = Tecla Dim num For num = 1 To Len(Campo) If Mid(Campo, num, 1) = "," And Tecla = 44 Then TrataCampo = 0 End If Next num If Len(Campo) = 0 And Tecla = 48 Then TrataCampo = 0 End If If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then TrataCampo = 0 End If If Decimales = 0 And TrataCampo = 46 Then TrataCampo = 0 End If If Decimales > 0 Then Dim Flag Dim CuentaDecimales CuentaDecimales = 0 Flag = False For num = 1 To Len(Campo) If Flag = True Then CuentaDecimales = CuentaDecimales + 1 If Mid(Campo, num, 1) = "." Then Flag = True End If Next num If CuentaDecimales = Decimales Then TrataCampo = 0 End If End If If Len(Campo) = Longitud And TrataCampo <> 8 Then TrataCampo = 0 End If Case "A" 'Tipo Alfanumerico TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 End If Case "F" 'Tipo Fecha If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else

Page 213: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

213

TrataCampo = Tecla End If If Tecla = 8 Then TrataCampo = Tecla If Tecla = 45 Then TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then EstaMal = "S" If Tecla = 13 Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "S" End If Else Dim estamal2 EstaMal = "N" End If If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then EstaMal = "S" If EstaMal1 <> "S" Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "" End If End If End Select If Tecla = 13 Then If EstaMal = "S" Then Posiciona (Indice) Else If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then Call MoverCampo(FormaMe, "AD") Else Posiciona (Indice) End If End If End If If Tecla = 9 Then 'hacia atras If Atras = 1 Then Call MoverCampo(FormaMe, "AT") Else Call MoverCampo(FormaMe, "AD") End If End IfEnd FunctionPrivate Sub MoverCampo(FormaMe, Como) If Como = "AD" Then ' adelante If Indice + 1 > 1 Then Indice = 0 End If Indice = Indice + 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice + 1 Loop End If If Como = "AT" Then 'atras If Indice - 1 < 1 Then Indice = 1 End If Indice = Indice - 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice - 1 Loop End If Posiciona (Indice)Me.Mensaje.Caption = Mensajes(Indice) DoEventsEnd SubFunction Comprobacion(FormaMe, Indice, Campo, tipo) Dim ValorN Comprobacion = "OK" If tipo = "N" Then ValorN = Val(Campo) End If Select Case Indice Case 1 '

Page 214: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

214

If Campo = "" Then MsgBox ("Entra alguna cifra") Comprobacion = "" End If End SelectEnd FunctionSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 215: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

215

RIEGOS26.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Object ="DBLIST32.OCX"Option Explicit Dim Mensajes(41) As String Dim Alertas(41) As String Dim ValorControl As Control Dim ValorTabla As String Dim Indice As Integer Dim Atras As Integer Dim Campos(41) As String Dim ExisteFichero As String Dim QueMes Dim vColor Dim Matriz(20)Private Sub Form_Load()Indice = 1Mensajes(1) = "Entra el sistema de riego ó cliquea en opciones ..." Mensajes(2) = "Entra el tipo de riego (L para localizadd ó S para supericie)" Mensajes(3) = "Entra la eficiencia de la aplicación (%)" Mensajes(4) = "Entra el caudal de la instalación" Mensajes(5) = "Entra el porcentaje de área sombreada por el cultivo" Mensajes(6) = "Entra los minutos de latitud del lugar" Mensajes(7) = "Entra los segundos de latitud del lugar" Alertas(0) = "" Alertas(1) = "Entra la descripción" Alertas(2) = "Entra el nombre" Alertas(3) = "Entra la población" Alertas(4) = "Entra la provincia" Alertas(5) = "El valor de los grados de latitud van de 0 a 180" Alertas(6) = "El valor de los minutos de latitud van de 0 a 59" Alertas(7) = "El valor de los segundos de latitud van de 0 a 59" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 26, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Mensaje.Caption = Mensajes(1) CargarDatos Posiciona (1)End SubPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me End SelectEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Call MoverFP("NombreProgramacion", Entrada(0)) Call MoverFP("SistemaRiego", Entrada(1)) Call MoverFP("TipoRiego", Entrada(2)) Call MoverFP("EficienciaAplicacion", Entrada(3)) Call MoverFP("CaudalInstalacion", Entrada(4)) Call MoverFP("FraccionAreaSombreada", Entrada(5)) Call MoverFP("NumeroEmisores", Entrada(6)) Call MoverFP("CaudalEmisor", Entrada(7))

Page 216: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

216

Call MoverFP("CoeficienteUniformidad", Entrada(8)) End If If Entrada(2) = "S" Then Entrada(5).Visible = FalseEnd SubPrivate Sub GrabarDatos() fProgramacion.Edit fProgramacion("SistemaRiego") = UCase(Entrada(1).Text) fProgramacion("TipoRiego") = UCase(Entrada(2).Text) fProgramacion("EficienciaAplicacion") = Entrada(3).Text fProgramacion("CaudalInstalacion") = Entrada(4).Text fProgramacion("FraccionAreaSombreada") = Entrada(5).Text fProgramacion("NumeroEmisores") = Entrada(6).Text fProgramacion("CaudalEmisor") = Entrada(7).Text fProgramacion("CoeficienteUniformidad") = Entrada(8).Text fProgramacion("Pantalla26") = "T" fProgramacion.UpdateEnd SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End SubPrivate Sub ComandoLista_Click(Index As Integer) Select Case Index Case 1 ValorTabla = "SistemasRiego" Call CargaDBLista ' (ValorTabla, "Cultivo") End Select Indice = 1 Posiciona (Indice)End SubPrivate Sub CargaDBLista() '(Fichero, Campo) Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM SistemasRiego ORDER BY SistemaRiego ;") Set Datos.Recordset = Consulta Datos.Refresh DBLista.ZOrder 0 DBLista.Left = Entrada(1).Left 'Control.Left DBLista.Top = Entrada(1).Top 'Control.Top DBLista.Width = Entrada(1).Width 'Control.Width DBLista.Height = 4000 DBLista.ListField = "SistemaRiego" DBLista.Refresh DBLista.Visible = TrueEnd SubPrivate Sub DBLista_DblClick() Entrada(1).Text = DBLista.Text Entrada(1) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "SistemaRiego") Entrada(2) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "TipoRiego") Entrada(3) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "EficienciaAplicacion") DBLista.Visible = False Posiciona (1)End SubPrivate Sub dblista_click() Entrada(1).Text = DBLista.Text Entrada(1) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "SistemaRiego") Entrada(2) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "TipoRiego") Entrada(3) = LeerFichero("SistemasRiego", "ORDEN", DBLista.Text, "EficienciaAplicacion") DBLista.Visible = False Posiciona (1)End SubPrivate Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Atras = 1 End IfEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Entrada(2) = UCase(Entrada(2)) If UCase(Entrada(2)) = "S" Then Entrada(5).Visible = False Else Entrada(5).Visible = True End If If Index = 4 And Entrada(5).Visible = False Then Comando(5).Visible = True

Page 217: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

217

End If If Index = 5 And Entrada(5).Visible = True Then Comando(5).Visible = True End If Select Case Index Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "N", 50, 0, "S") Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "A", "N", 1, 0, "S") Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 0, "S") Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 5, 0, "S") Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 7, 1, "S") Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") End SelectEnd SubFunction TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer Dim EstaMal Dim EstaMal1 Select Case tipo Case "N" 'Comprobación de Campo Numerico If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45 If Tecla = 8 Then TrataCampo = Tecla If Tecla = 46 Then Tecla = 44 If Tecla = 44 Then TrataCampo = Tecla Dim num For num = 1 To Len(Campo) If Mid(Campo, num, 1) = "," And Tecla = 44 Then TrataCampo = 0 End If Next num If Len(Campo) = 0 And Tecla = 48 Then TrataCampo = 0 End If If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then TrataCampo = 0 End If If Decimales = 0 And TrataCampo = 46 Then TrataCampo = 0 End If If Decimales > 0 Then Dim Flag Dim CuentaDecimales CuentaDecimales = 0 Flag = False For num = 1 To Len(Campo) If Flag = True Then CuentaDecimales = CuentaDecimales + 1 If Mid(Campo, num, 1) = "." Then Flag = True End If Next num If CuentaDecimales = Decimales Then TrataCampo = 0 End If End If If Len(Campo) = Longitud And TrataCampo <> 8 Then TrataCampo = 0 End If Case "A" 'Tipo Alfanumerico TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 End If Case "F" 'Tipo Fecha If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0

Page 218: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

218

End If If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 8 Then TrataCampo = Tecla If Tecla = 45 Then TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then EstaMal = "S" If Tecla = 13 Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "S" End If Else Dim estamal2 EstaMal = "N" End If If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then EstaMal = "S" If EstaMal1 <> "S" Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "" End If End If End Select If Tecla = 13 Then If EstaMal = "S" Then Posiciona (Indice) Else If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then Call MoverCampo(FormaMe, "AD") Else Posiciona (Indice) End If End If End If If Tecla = 9 Then 'hacia atras If Atras = 1 Then Call MoverCampo(FormaMe, "AT") Else Call MoverCampo(FormaMe, "AD") End If End IfEnd FunctionPrivate Sub MoverCampo(FormaMe, Como) If Como = "AD" Then ' adelante If Indice + 1 > 8 Then Indice = 0 End If Indice = Indice + 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice + 1 If Indice > 8 Then Indice = 1 End If Loop End If If Como = "AT" Then 'atras If Indice - 1 < 1 Then Indice = 9 End If Indice = Indice - 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice - 1 Loop End If Posiciona (Indice)Me.Mensaje.Caption = Mensajes(Indice) DoEventsEnd SubFunction Comprobacion(FormaMe, Indice, Campo, tipo)

Page 219: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

219

Dim ValorN Comprobacion = "OK" If tipo = "N" Then ValorN = Val(Campo) End If Select Case Indice Case 1 ' If Campo = "" Then MsgBox ("Entra algún el sistema de riego") Comprobacion = "" End If Case 2 ' If Campo = "" Then MsgBox ("Entra el tipo de riego (L=goteo,aspersion,infiltración S=resto") Comprobacion = "" End If If UCase(Campo) <> "L" And UCase(Campo) <> "S" Then MsgBox ("Entra el tipo de riego (L=goteo,aspersion,infiltración S=resto") Comprobacion = "" End If Case 3 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If If ValorN < 0 Then MsgBox ("Entra un valor superior a 0") Comprobacion = "" End If If ValorN > 100 Then MsgBox ("La cifra no puede exceder de 100") Comprobacion = "" End If Case 4 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If If ValorN < 0 Then MsgBox ("Entra un valor superior a 0") Comprobacion = "" End If Case 5 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If If ValorN < 0 Then MsgBox ("Entra un valor superior a 0") Comprobacion = "" End If If ValorN > 100 Then MsgBox ("La cifra no puede exceder de 100") Comprobacion = "" End If End SelectEnd FunctionSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd Sub

Page 220: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

220

RIEGOS27.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"Option Explicit'Dim Atras Dim Mensajes(41) As String Dim Alertas(41) As String Dim ValorControl As Control Dim ValorTabla As String Dim Indice As Integer Dim Atras As Integer Dim Campos(41) As String Dim ExisteFichero As String Dim QueMes Dim vColor Dim Matriz(20)Private Sub Form_Load() Indice = 1 Mensajes(0) = "" Mensajes(1) = "Entra el porcentaje de RFU agotada para emepezar el riego" Mensajes(2) = "Entra el intérvalo de riego Si quires fijarlo. En caso contrario, deja el campo en blanco" Mensajes(3) = "Entra el porcentaje de recarga de la RFU en el riego" Mensajes(5) = "Entra el porcentaje de RFU lleno de agua, al inicio de la programación" Mensajes(6) = "Entra el porcentaje de lluvia efectiva" Mensajes(7) = "Entra la constante de la ecuación" Mensajes(8) = "Entra la constante de la ecuación" Mensajes(9) = "Entra el valor de corte de la lluvia" Mensajes(10) = "Entra la constante de la ecuación" Mensajes(11) = "Entra la constante de la ecuación" Mensajes(12) = "Entra el porcentaje de disminución deseado debido a la conductividad del agua" Alertas(0) = "" Alertas(1) = "Entra la descripción" Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 27, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Mensaje.Caption = Mensajes(1) CargarDatos Posiciona (1)End SubPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir Case 5 ' Salida del formulario Call GrabarDatos Unload Me End SelectEnd SubPrivate Sub CargarDatos() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Call MoverFP("NombreProgramacion", Entrada(0)) Call MoverFP("AgotamientoRFU", Entrada(1)) Call MoverFP("IntervaloRiego", Entrada(2)) Call MoverFP("RecargaRFU", Entrada(3)) Call MoverFP("DosisFija", Entrada(4)) Call MoverFP("ReservaInicial", Entrada(5)) Option1 = fProgramacion("Lluvia1") Option2 = fProgramacion("Lluvia2") Option3 = fProgramacion("Lluvia3")

Page 221: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

221

Option4 = fProgramacion("Lluvia4") If Option1 = False And Option2 = False And Option3 = False And Option4 = False Then Option1 = True Option1_Click End If If Option1 = True Then Option1 = True Option1_Click End If Call MoverFP("LluviaP", Entrada(6)) Call MoverFP("LluviaA1", Entrada(7)) Call MoverFP("LluviaB1", Entrada(8)) Call MoverFP("LluviaC1", Entrada(9)) Call MoverFP("LluviaA2", Entrada(10)) Call MoverFP("LluviaB2", Entrada(11)) Call MoverFP("RendimientoSal", Entrada(12)) End IfEnd SubPrivate Sub GrabarDatos() fProgramacion.Edit fProgramacion("AgotamientoRFU") = Entrada(1).Text fProgramacion("IntervaloRiego") = Entrada(2).Text fProgramacion("RecargaRFU") = Entrada(3).Text fProgramacion("DosisFija") = Entrada(4).Text fProgramacion("ReservaInicial") = Entrada(5).Text fProgramacion("Pantalla27") = "T" fProgramacion("Lluvia1") = Option1.Value fProgramacion("Lluvia2") = Option2.Value fProgramacion("Lluvia3") = Option3.Value fProgramacion("Lluvia4") = Option4.Value fProgramacion("LluviaP") = Entrada(6).Text fProgramacion("LluviaA1") = Entrada(7).Text fProgramacion("LluviaB1") = Entrada(8).Text fProgramacion("LluviaC1") = Entrada(9).Text fProgramacion("LluviaA2") = Entrada(10).Text fProgramacion("LluviaB2") = Entrada(11).Text fProgramacion("RendimientoSal") = Entrada(12).TextfProgramacion.UpdateEnd SubPrivate Sub MoverFP(Campo As String, Pantalla) Pantalla.Text = NoNulo(fProgramacion(Campo))End SubPrivate Sub Entrada_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Atras = 1 End IfEnd SubPrivate Sub Entrada_KeyPress(Index As Integer, KeyAscii As Integer) Select Case Index Case 1: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "N") Case 2: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "S") Case 3: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "S") Case 4: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 1, "N") Case 5: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 1, "S") Case 6: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 7: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S") Case 8: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 9: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 10: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 4, 2, "S") Case 11: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Case 12: KeyAscii = TrataCampo(Me, Index, Entrada(Index).Text, KeyAscii, "N", "N", 3, 0, "S") Comando(5).Visible = True End SelectEnd SubFunction TrataCampo(FormaMe, Index, Campo, Tecla, tipo, Signo, Longitud, Decimales, Cero) As Integer Dim EstaMal Dim EstaMal1 Select Case tipo Case "N" 'Comprobación de Campo Numerico If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla

Page 222: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

222

End If If Tecla = 45 And Signo = "S" And Len(Campo) = 0 Then TrataCampo = 45 If Tecla = 8 Then TrataCampo = Tecla If Tecla = 46 Then Tecla = 44 If Tecla = 44 Then TrataCampo = Tecla Dim num For num = 1 To Len(Campo) If Mid(Campo, num, 1) = "," And Tecla = 44 Then TrataCampo = 0 End If Next num If Len(Campo) = 0 And Tecla = 48 And Cero <> "S" Then TrataCampo = 0 End If If Len(Campo) = 1 And Campo = "0" And Cero <> "S" And Tecla = 48 Then TrataCampo = 0 End If If Decimales = 0 And TrataCampo = 46 Then TrataCampo = 0 End If If Decimales > 0 Then Dim Flag Dim CuentaDecimales CuentaDecimales = 0 Flag = False For num = 1 To Len(Campo) If Flag = True Then CuentaDecimales = CuentaDecimales + 1 If Mid(Campo, num, 1) = "." Then Flag = True End If Next num If CuentaDecimales = Decimales Then TrataCampo = 0 End If End If If Len(Campo) = Longitud And TrataCampo <> 8 Then TrataCampo = 0 End If Case "A" 'Tipo Alfanumerico TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 End If Case "F" 'Tipo Fecha If Len(Campo) = 2 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If Len(Campo) = 5 And Tecla <> 45 And Tecla <> 8 And Tecla <> 13 Then Tecla = 0 End If If (Tecla < 48 Or Tecla > 57) And Tecla <> 8 Then TrataCampo = 0 Else TrataCampo = Tecla End If If Tecla = 8 Then TrataCampo = Tecla If Tecla = 45 Then TrataCampo = Tecla If Len(Campo) = Longitud And Tecla <> 8 Then TrataCampo = 0 If Len(Campo) > 8 And (Mid$(Campo, 3, 1) <> "-" Or Mid$(Campo, 6, 1) <> "-") And Tecla <> 8 Then EstaMal = "S" If Tecla = 13 Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = "S" End If Else Dim estamal2 EstaMal = "N" End If If Len(Campo) > 0 And Len(Campo) < 10 And Tecla = 13 Then EstaMal = "S" If EstaMal1 <> "S" Then MsgBox ("La fecha es incorrecta. Formato:dd-mm-aaaa") EstaMal1 = ""

Page 223: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

223

End If End If End Select If Tecla = 13 Then If EstaMal = "S" Then Posiciona (Indice) Else If Comprobacion(FormaMe, Indice, Campo, tipo) = "OK" Then Call MoverCampo(FormaMe, "AD") Else Posiciona (Indice) End If End If End If If Tecla = 9 Then 'hacia atras If Atras = 1 Then Call MoverCampo(FormaMe, "AT") Else Call MoverCampo(FormaMe, "AD") End If End IfEnd FunctionPrivate Sub MoverCampo(FormaMe, Como) If Como = "AD" Then ' adelante If Indice + 1 > 12 Then Indice = 0 End If Indice = Indice + 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice + 1 If Indice > 12 Then Indice = 0 End If Loop End If If Como = "AT" Then 'atras If Indice - 1 < 1 Then Indice = 13 End If Indice = Indice - 1 Do While Entrada(Indice).Enabled = False Or Entrada(Indice).Visible = False Indice = Indice - 1 Loop End If Posiciona (Indice) Me.Mensaje.Caption = Mensajes(Indice) DoEventsEnd SubFunction Comprobacion(FormaMe, Indice, Campo, tipo) Dim ValorN Comprobacion = "OK" If tipo = "N" Then ValorN = Val(Campo) End If Select Case Indice Case 1 ' If Campo = "" Then MsgBox ("Entra alguna cifra") Comprobacion = "" End If If ValorN > 200 Then MsgBox ("La cifra no puede exceder de 200") Comprobacion = "" End If Case 2 ' 'If Campo = "" Then ' MsgBox ("Entra algún porcentaje") ' Comprobacion = "" 'End If Case 3 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = ""

Page 224: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

224

End If Case 5 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If Case 6 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If Case 7 ' If Campo = "" Then MsgBox ("Entra algún valor") Comprobacion = "" End If Case 8 ' If Campo = "" Then MsgBox ("Entra algún valor") Comprobacion = "" End If Case 9 ' If Campo = "" Then MsgBox ("Entra algún valor") Comprobacion = "" End If Case 10 ' If Campo = "" Then MsgBox ("Entra algún valor") Comprobacion = "" End If Case 11 ' If Campo = "" Then MsgBox ("Entra algún valor") Comprobacion = "" End If Case 12 ' If Campo = "" Then MsgBox ("Entra algún porcentaje") Comprobacion = "" End If End SelectEnd FunctionSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd SubPrivate Sub Option1_Click() apagaP Label(6).Visible = True Entrada(6).Visible = True Posiciona (1)End SubPrivate Sub Option2_Click() apagaP Label(7).Visible = True Label(8).Visible = True Posiciona (1)End SubPrivate Sub Option3_Click() apagaP Label(9).Visible = True Label(10).Visible = True Posiciona (1)End SubPrivate Sub Option4_Click() apagaP Label(11).Visible = True Label(12).Visible = True Label(13).Visible = True Label(15).Visible = True Entrada(7).Visible = True

Page 225: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

225

Entrada(8).Visible = True Entrada(9).Visible = True Entrada(10).Visible = True Entrada(11).Visible = True Posiciona (1)End SubFunction apagaP() Label(6).Visible = False Entrada(6).Visible = False Label(7).Visible = False Label(8).Visible = False Label(9).Visible = False Label(10).Visible = False Label(11).Visible = False Label(12).Visible = False Label(13).Visible = False Label(15).Visible = False Entrada(7).Visible = False Entrada(8).Visible = False Entrada(9).Visible = False Entrada(10).Visible = False Entrada(11).Visible = False Posiciona (1)End Function

Page 226: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

226

RIEGOS31.FRM' Víctor Yusta. Dicembre-1998Object ="THREED32.OCX"'Option ExplicitDim Mensajes(41) As StringDim Alertas(41) As StringDim ValorControl As ControlDim ValorTabla As StringDim DiasMes(12) As IntegerDim DiaPeso(12) As IntegerDim Datos(12) As DoubleDim Indice As IntegerDim Atras As IntegerDim Campos(41) As StringDim ExisteFichero As StringDim QueMesDim vColorDim FechaPlantacion As String * 8Dim MatrizCalculo(40) As String ' del 1 al 20 datos, del 21 al 40 resultadosDim ReservaInicial As DoubleDim InicioRiego As StringDim CuentaDim Primero As String Dim TabuPrivate Sub Form_Load() Tabu = vbTab Cuenta = 0 ReservaInicial = 0 InicioRiego = "00" 'CC a capacidad de campo, 00 con las reservas a 0 Primero = "SI" Call CargaDiasMes Call CargaPantalla(Me) BaseDatos Me.Caption = LeerFichero("Menu", "Orden", 31, "Titulo") + " " + NombreProgramacion Call DibujaMensaje(Me) Call DibujaPanelComandos(Me) Show Entrada(0).Text = NombreProgramacion Mensaje.Caption = "Escoge una opción" 'Pulsa la tecla de Cálculo" Call AnalizaDatosEnd SubPrivate Sub AnalizaDatos() Dim Falta As String Dim Sortir: Sortir = "NO" fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado If Trim(NoNulo(fProgramacion("Pantalla21"))) = "" And Sortir = "NO" Then Falta = " Faltan datos de la finca " GoSub SalidaFalta End If If Trim(NoNulo(fProgramacion("Pantalla22"))) = "" And Sortir = "NO" Then Falta = " Faltan datos del cultivo " GoSub SalidaFalta End If If Trim(NoNulo(fProgramacion("Pantalla23"))) = "" And Sortir = "NO" Then Falta = " Faltan datos climáticos " GoSub SalidaFalta End If If Trim(NoNulo(fProgramacion("Pantalla24"))) = "" And Sortir = "NO" Then Falta = " Faltan datos del suelo " GoSub SalidaFalta End If If Trim(NoNulo(fProgramacion("Pantalla25"))) = "" And Sortir = "NO" Then Falta = " Faltan datos del agua de riego " GoSub SalidaFalta End If If Trim(NoNulo(fProgramacion("Pantalla26"))) = "" And Sortir = "NO" Then Falta = " Faltan datos del tipo de riego " GoSub SalidaFalta End If If Trim(NoNulo(fProgramacion("Pantalla27"))) = "" And Sortir = "NO" Then

Page 227: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

227

Falta = " Faltan datos de rpogramación del riego" GoSub SalidaFalta End If If Sortir = "NO" Then If fProgramacion("Pantalla21") = "C" And _ fProgramacion("Pantalla22") = "C" And _ fProgramacion("Pantalla23") = "C" And _ fProgramacion("Pantalla24") = "C" And _ fProgramacion("Pantalla25") = "C" And _ fProgramacion("Pantalla26") = "C" And _ fProgramacion("Pantalla27") = "C" Then Call MostrarInformacion1 Call MostrarInformacion2 Else EmpiezaACalcular Call CursorLibre(Me) End If Else Salir End If End IfExit SubSalidaFalta: MsgBox (Falta) Sortir = "SI"ReturnEnd SubPrivate Sub Comando_Click(Index As Integer) Select Case Index Case 0 ' Salida del formulario Salir End SelectEnd SubFunction CargaDiasMes() ' Se ha puesto un año no bisiesto DiasMes(1) = 31 DiasMes(2) = 28 DiasMes(3) = 31 DiasMes(4) = 30 DiasMes(5) = 31 DiasMes(6) = 30 DiasMes(7) = 31 DiasMes(8) = 31 DiasMes(9) = 30 DiasMes(10) = 31 DiasMes(11) = 30 DiasMes(12) = 31 DiaPeso(1) = 15 DiaPeso(2) = 46 DiaPeso(3) = 74 DiaPeso(4) = 105 DiaPeso(5) = 135 DiaPeso(6) = 166 DiaPeso(7) = 196 DiaPeso(8) = 227 DiaPeso(9) = 258 DiaPeso(10) = 288 DiaPeso(11) = 319 DiaPeso(12) = 349End FunctionPrivate Sub Form_Unload(Cancel As Integer) SalirEnd SubPrivate Sub Salir() Unload Me Load RiegosEnd SubPrivate Sub EmpiezaACalcular() Call CursorOcupado(Me) DoEvents Mensaje.Caption = "ESPERA un momento" fProgramacion.Index = "Programacion" fProgramacion.MoveFirst

Page 228: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

228

fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Dim vTipo Dim vClima vTipo = fProgramacion("Tipo") vClima = fProgramacion("Clima") Dim nnn nnn = fProgramacion("FechaPlantacion") FechaPlantacion = Mid(nnn, 7, 4) + Mid(nnn, 4, 2) + Mid(nnn, 1, 2) If vClima = "M" Then CalculaMensual End If If vClima = "D" Then CalculaDiario End If End If fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado fProgramacion.Edit fProgramacion("Pantalla21") = "C" fProgramacion("Pantalla22") = "C" fProgramacion("Pantalla23") = "C" fProgramacion("Pantalla24") = "C" fProgramacion("Pantalla25") = "C" fProgramacion("Pantalla26") = "C" fProgramacion("Pantalla27") = "C" fProgramacion.Update End If DoEvents Call MostrarInformacion1 Call MostrarInformacion2 Mensaje.Caption = "YA ESTÁ" 'Parrilla.Visible = TrueEnd SubPrivate Function CalculaDiario() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Dim vTipo As String Dim vClima As String Dim vLatitud As Double Dim vAltitud As Double Dim cFechaPlantacion Dim cFechaFinal vTipo = fProgramacion("Tipo") vClima = fProgramacion("Clima") vLatitud = fProgramacion("LatitudGrados") + (fProgramacion("LatitudGrados") / 60) + (fProgramacion("LatitudGrados") /3600) vAltitud = fProgramacion("Altitud") cFechaPlantacion = Mid(fProgramacion("FechaPlantacion"), 7, 4) + Mid(fProgramacion("FechaPlantacion"), 4, 2) +Mid(fProgramacion("FechaPlantacion"), 1, 2) 'cFechaFinal = Consulta Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM ProgramacionClima WHERE NombreProgramacion ='" & NombreProgramacion & "' and Clima = '" & "D" & "' ORDER BY Fecha ;") If Consulta.RecordCount <> 0 Then Consulta.MoveFirst While Not Consulta.EOF Call GrabarDatosDiarios(Consulta("Fecha"), "TemperaturaMaxima", Consulta("TemperaturaMaxima"), 4) Call GrabarDatosDiarios(Consulta("Fecha"), "TemperaturaMinima", Consulta("TemperaturaMinima"), 4) Call GrabarDatosDiarios(Consulta("Fecha"), "HumedadMaxima", Consulta("HumedadMaxima"), 3) Call GrabarDatosDiarios(Consulta("Fecha"), "HumedadMinima", Consulta("HumedadMinima"), 3) Call GrabarDatosDiarios(Consulta("Fecha"), "HumedadMedia", Consulta("HumedadMedia"), 3) Call GrabarDatosDiarios(Consulta("Fecha"), "Viento", Consulta("Viento"), 3) Call GrabarDatosDiarios(Consulta("Fecha"), "RadiacionNeta", Consulta("RadiacionNeta"), 5) Call GrabarDatosDiarios(Consulta("Fecha"), "HorasSol", Consulta("HorasSol"), 4) Call GrabarDatosDiarios(Consulta("Fecha"), "Lluvia", Consulta("Lluvia"), 6) Call GrabarDatosDiarios(Consulta("Fecha"), "Radiacion", Consulta("Radiacion"), 1) Call GrabarDatosDiarios(Consulta("Fecha"), "Psicrometro", Consulta("Psicrometro"), 1) Consulta.MoveNext

Page 229: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

229

Wend End If Call CalculoBalanceHidrico(vTipo, vClima, vLatitud, vAltitud) End IfEnd FunctionFunction GrabarDatosDiarios(Fecha, Campo, Valor, Longitud) fBalanceHidrico.Index = "PROGRAMACION" fBalanceHidrico.MoveFirst fBalanceHidrico.Seek "=", NombreProgramacion, Fecha, "D" If fBalanceHidrico.NoMatch = False Then 'Registro encontrado fBalanceHidrico.Edit Else fBalanceHidrico.AddNew End If fBalanceHidrico("NombreProgramacion") = NombreProgramacion fBalanceHidrico("Fecha") = Fecha fBalanceHidrico("Clima") = "D" fBalanceHidrico(Campo) = Valor fBalanceHidrico.UpdateEnd FunctionPrivate Function CalculaMensual() fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Dim vTipo As String Dim vClima As String Dim vLatitud As Double Dim vAltitud As Double vTipo = fProgramacion("Tipo") vClima = fProgramacion("Clima") vLatitud = fProgramacion("LatitudGrados") + (fProgramacion("LatitudGrados") / 60) + (fProgramacion("LatitudGrados") /3600) vAltitud = fProgramacion("Altitud") Call CargaDatosEstimacion(NombreProgramacion, vClima, "TemperaturaMaxima", 4, "N", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "TemperaturaMinima", 4, "N", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "HumedadMedia", 3, "S", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "HumedadMaxima", 3, "S", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "HumedadMinima", 3, "S", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "Viento", 3, "S", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "RadiacionNeta", 5, "N", "M") Call CargaDatosEstimacion(NombreProgramacion, vClima, "HorasSol", 4, "N", "D") Call CargaDatosEstimacion(NombreProgramacion, vClima, "Lluvia", 6, "N", "M") Call CalculoBalanceHidrico(vTipo, vClima, vLatitud, vAltitud) End IfEnd FunctionFunction CargaDatosEstimacion(NombreProgramacion, vClima, Campo, Longitud, Entero, Mensual) Dim num Dim NumAlfa For num = 1 To 12 NumAlfa = Right(Str(num + 100), 2) fProgramacionClima.Index = "PROGRAMACION" fProgramacionClima.MoveFirst fProgramacionClima.Seek "=", NombreProgramacion, NumAlfa, "M" If fProgramacionClima.NoMatch = False Then 'Registro encontrado Dim vPsicrometro Dim vRadiacion vPsicrometro = fProgramacionClima("Psicrometro") vRadiacion = fProgramacionClima("Radiacion") If Mensual = "M" Then Datos(num) = CarNum(Trim(fProgramacionClima(Campo))) / DiasMes(num) Else Datos(num) = (CarNum(NoNulo(Trim(fProgramacionClima(Campo))))) End If If Entero = "S" Then Datos(num) = Int(Datos(num)) End If Next num Call CalculaDatosEstimacion(NombreProgramacion, vClima, Campo, Longitud, vPsicrometro, vRadiacion)End FunctionFunction CalculaDatosEstimacion(NombreProgramacion, vClima, Campo, Longitud, vPsicrometro, vRadiacion) Dim DesdeDia Dim HastaDia Dim DesdeValor

Page 230: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

230

Dim HastaValor Dim Valor As Double: Valor = 0 Dim num As Double For num = 1 To 365 'ESTO SIRVE PARA EL CASO QUE SE QUIERA IGUALAR LOS DATOS DEL MES A LOS DIAS DEL MES 'Dim num1 'For num1 = 1 To 12 'If Val(Left(MesDia(num), 2)) = num1 Then Valor = Datos(Val(Left(MesDia(num), 2))) 'End If 'Next num1 'ESTO SIRVE EN EL CASO QUE SE QUIERA BALANCEAR LOS DATOS 'If num >= 1 And num <= DiaPeso(1) Then ' DesdeDia = -16 ' DiaPeso(12) ' HastaDia = DiaPeso(1) ' DesdeValor = Datos(12) ' HastaValor = Datos(1) ' Valor = ((HastaValor - DesdeValor) / (HastaDia - DesdeDia)) * num + (DesdeValor - (((HastaValor - DesdeValor) /(HastaDia - DesdeDia)) * DesdeDia)) 'End If 'Dim Num1 'For Num1 = 1 To 11 ' If num > DiaPeso(Num1) And num <= DiaPeso(Num1 + 1) Then ' DesdeDia = DiaPeso(Num1) ' HastaDia = DiaPeso(Num1 + 1) ' DesdeValor = Datos(Num1) ' HastaValor = Datos(Num1 + 1) ' Valor = ((HastaValor - DesdeValor) / (HastaDia - DesdeDia)) * num + (DesdeValor - (((HastaValor - DesdeValor) /(HastaDia - DesdeDia)) * DesdeDia)) ' End If 'Next Num1 'If num > DiaPeso(12) And num <= 365 Then ' DesdeDia = DiaPeso(12) ' HastaDia = 380 ' DesdeValor = Datos(1) ' HastaValor = Datos(12) ' Valor = ((HastaValor - DesdeValor) / (HastaDia - DesdeDia)) * num + (DesdeValor - (((HastaValor - DesdeValor) /(HastaDia - DesdeDia)) * DesdeDia)) 'End If 'GRABACION DE DATOS fBalanceHidrico.Index = "PROGRAMACION" fBalanceHidrico.MoveFirst Dim NumAlfa As String NumAlfa = NumCar(num) fBalanceHidrico.Seek "=", NombreProgramacion, "1998" + MesDia(num), "M" If fBalanceHidrico.NoMatch = False Then 'Registro encontrado fBalanceHidrico.Edit Else fBalanceHidrico.AddNew End If fBalanceHidrico("NombreProgramacion") = NombreProgramacion fBalanceHidrico("Fecha") = "1998" + MesDia(num) fBalanceHidrico("Clima") = "M" fBalanceHidrico("Psicrometro") = vPsicrometro fBalanceHidrico("Radiacion") = vRadiacion fBalanceHidrico(Campo) = Left(NumCar(Valor), Longitud) fBalanceHidrico.Update Next numEnd FunctionPrivate Sub CalculoBalanceHidrico(vTipo As String, vClima As String, vLatitud As Double, vAltitud As Double) Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset("SELECT * FROM BalanceHidrico WHERE NombreProgramacion= '" &NombreProgramacion & "' and Clima= '" & vClima & "' ORDER BY Fecha ;") Consulta.MoveFirst If Consulta.RecordCount <> 0 Then Consulta.MoveFirst While Not Consulta.EOF Dim vFecha As String vFecha = Right(Trim(Consulta("Fecha")), 4) Dim vNumDia As Integer vNumDia = DiaDelAno(vFecha) Dim vTMax As Double vTMax = CarNum(Trim(Consulta("TemperaturaMaxima")))

Page 231: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

231

Dim vTmin As Double vTmin = CarNum(Trim(Consulta("TemperaturaMinima"))) Dim vHRMaxima As Double vHRMaxima = CarNum(Trim(NoNulo(Consulta("HumedadMaxima")))) Dim vHRMinima As Double vHRMinima = CarNum(Trim(NoNulo(Consulta("HumedadMinima")))) Dim vHRMedia As Double vHRMedia = CarNum(Trim(NoNulo(Consulta("HumedadMedia")))) Dim vVientoDia As Double vVientoDia = CarNum(Trim(Consulta("Viento"))) Dim vHorasSol As Double vHorasSol = CarNum(Trim(NoNulo(Consulta("HorasSol")))) Dim vPsicrometro As String vPsicrometro = Consulta("Psicrometro") Dim vRadiacion As String vRadiacion = Consulta("Radiacion") Dim vRadiacionNeta As Double vRadiacionNeta = CarNum(Trim(NoNulo(Consulta("RadiacionNeta")))) Consulta.Edit Dim nETo As Double nETo = NumCar(CalculavETo(vLatitud, vAltitud, vNumDia, vTMax, vTmin, vHRMaxima, vHRMinima, vHRMedia,vVientoDia, vRadiacionNeta, vHorasSol, vRadiacion, vPsicrometro)) Consulta("ETo") = Left(nETo, 5) ' meter condicional de Kc4 If (vTipo = "A" Or vTipo = "B" Or vTipo = "D") Then Consulta("DiasCultivo") = DiferenciaFechas(FechaPlantacion, Consulta("Fecha")) Consulta("Kc") = Left(NumCar(CalculaKc4(nETo, Consulta("DiasCultivo"))), 4) Consulta("Raices") = Left(NumCar(CalculaRaices4(Consulta("DiasCultivo"))), 3) Else Consulta("DiasCultivo") = DiferenciaFechas(FechaPlantacion, Consulta("Fecha")) Consulta("Kc") = Left(NumCar(CalculaKc12(vFecha)), 4) Consulta("Raices") = Left(NumCar(CalculaRaices12), 3) End If Dim nKl As Double nKl = NumCar(CalculaKl()) Consulta("Kl") = Left(nKl, 4) Consulta("ETc") = Left(NumCar(CarNum(Consulta("ETo")) * CarNum(Consulta("Kc")) * CarNum(Consulta("Kl"))), 5) Consulta("Fraccion") = Left(NumCar(CalculaFraccion(Consulta("ETc"))), 4) Consulta("LluviaEfectiva") = Left(NumCar(CalculaLluviaEfectiva(Consulta("Lluvia"))), 4) MatrizCalculo(1) = Consulta("Etc") MatrizCalculo(2) = NoNulo(Consulta("LluviaEfectiva")) MatrizCalculo(3) = NoNulo(Consulta("AporteCapilar")) MatrizCalculo(4) = NoNulo(Consulta("Escorrentia")) MatrizCalculo(5) = NoNulo(Consulta("Raices")) MatrizCalculo(6) = NoNulo(Consulta("Fraccion")) MatrizCalculo(7) = NoNulo(Consulta("Reserva")) MatrizCalculo(8) = Consulta("Fecha") CalculaMatrizCalculo Consulta("RfuMaxima") = MatrizCalculo(21) Consulta("RfuMinima") = MatrizCalculo(22) Consulta("Reserva") = MatrizCalculo(23) Consulta("DosisNeta") = MatrizCalculo(24) Consulta("TipoRiego") = MatrizCalculo(25) Consulta("EficienciaAplicacion") = MatrizCalculo(26) Consulta("Lavado") = MatrizCalculo(27) Consulta("EficienciaLavado") = MatrizCalculo(28) Consulta("DosisBruta") = MatrizCalculo(29) Consulta("CC") = MatrizCalculo(31) Consulta("PM") = MatrizCalculo(32) Consulta("DensidadAparente") = MatrizCalculo(33) Consulta("AguaUtil") = MatrizCalculo(34) Consulta("DosisBrutaTotal") = MatrizCalculo(35) Consulta("Tiempo1") = MatrizCalculo(36) Consulta("Tiempo2") = MatrizCalculo(37) Consulta("Notas") = MatrizCalculo(38) Consulta.Update Consulta.MoveNext Wend End IfEnd SubPrivate Function CalculaKl() As Double fProgramacion.Index = "Programacion" fProgramacion.MoveFirst

Page 232: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

232

fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Dim nArea As Double If CarNum(fProgramacion("FraccionAreaSombreada")) <> 0 Then nArea = CarNum(fProgramacion("FraccionAreaSombreada")) / 100 Else nArea = 1 End If If fProgramacion("TipoRiego") <> "L" Then nArea = 1 End If Dim Suma As Double: Suma = 0 Dim Mayor As Double: Mayor = 0 Dim Menor As Double: Menor = 9999 Dim Fml1 As Double: Fml1 = 1.34 * nArea Dim Fml2 As Double: Fml2 = 0.1 * nArea Dim Fml3 As Double: Fml3 = (0.5 * nArea) + 0.5 Dim Fml4 As Double: Fml4 = (0.85 * nArea) + 0.15 If Fml1 > Mayor Then Mayor = Fml1 If Fml2 > Mayor Then Mayor = Fml2 If Fml3 > Mayor Then Mayor = Fml3 If Fml4 > Mayor Then Mayor = Fml4 If Fml1 < Menor Then Menor = Fml1 If Fml2 < Menor Then Menor = Fml2 If Fml3 < Menor Then Menor = Fml3 If Fml4 < Menor Then Menor = Fml4 If Fml1 <> Mayor And Fml1 <> Menor Then Suma = Suma + Fml1 End If If Fml2 <> Mayor And Fml2 <> Menor Then Suma = Suma + Fml2 End If If Fml3 <> Mayor And Fml3 <> Menor Then Suma = Suma + Fml3 End If If Fml4 <> Mayor And Fml4 <> Menor Then Suma = Suma + Fml4 End If CalculaKl = Suma / 2 End IfEnd FunctionPrivate Function CalculavETo(Latitud As Double, Altitud As Double, NumDia As Integer, TMax As Double, TMin As Double,HRMax As Double, HRMin As Double, HRMedia As Double, VientoDia As Double, ERadN As Double, vHorasSol AsDouble, vRadiacion As String, vPsicrometro As String) As Double ' definicion variables Dim WST As Double Dim Emisividad As Double Dim G As Double Dim sigma As Double Dim Rads As Double Dim fnN As Double Dim nN As Double Dim n As Double Dim AngHor As Double Dim YY As Double Dim XX As Double Dim LatRad As Double Dim Decli As Double Dim dr As Double Dim Albedo 'Dim Altitud As Double 'Dim TMin As Double 'Dim TMax As Double Dim ETaero As Double Dim gamma As Double Dim gammaast As Double Dim delta As Double Dim t As Double Dim U2 As Double Dim eaMin As Double Dim eaMax As Double Dim ea As Double Dim edTmin As Double

Page 233: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

233

Dim edTmax As Double Dim ed As Double Dim Presion As Double Dim landa As Double' Dim Vientodia As Double Dim VientoSeg As Double' Dim HrMedia As Double' Dim HRMin As Double' Dim HrMax As Double Dim rc As Double Dim LAI As Double Dim AlturaCultivo As Double Dim ra As Double Dim d As Double Dim Zom As Double Dim HorasSol As Double Dim Rada As Double Dim Radn As Double Dim Radns As Double Dim Radnl As Double 'Dim NumDia As Double 'Dim Latitud As Double Dim ETrad As Double Dim vETo As Double 'Dim ERadN As Double: ERadN = 0 'Entradas 'Altitud = 35 'Latitud = 40.558 'TMax = 26.5 'TMin = 23.1 'HrMax = 69.7 'HrMin = 69.7 'HRMedia = 69.7 'VientoDia = 181 HorasSol = 8.4 'ERadN = 2.8' NumDia = 213 '15-7-1998 Albedo = 0.23 AlturaCultivo = 0.12 'Calculos t = (TMax + TMin) / 2 U2 = VientoDia / 86.4 Presion = (101.3) * ((293 - (0.0065 * Altitud)) / (293)) ^ 5.253 eaMin = 0.6108 * Exp((17.27 * TMin) / (TMin + 237.3)) eaMax = 0.6108 * Exp((17.27 * TMax) / (TMax + 237.3)) ea = (eaMin + eaMax) / 2 'ea = 0.6108 * Exp((17.27 * T) / (T + 237.3)) '(eaMin + eaMax) / 2 If vPsicrometro = "N" Then 'con Humedad Relativa Media ed = (HRMedia) / ((50 / eaMin) + (50 / eaMax)) HRMin = (ed / eaMax) * 100 Else ''Con humedades relativas maximas y minimas ed = (eaMin * HRMax) / 200 + (eaMax * HRMin) / 200 End If landa = 2.501 - (0.002361 * (t)) LAI = 24 * AlturaCultivo rc = 200 / LAI d = (2 * AlturaCultivo) / 3 Zom = 0.123 * AlturaCultivo If U2 = 0 Then U2 = 1 ra = (Log((2 - d) / (Zom)) * Log((1.9 - d) / (0.1 * Zom)) / (0.41 * 0.41 * U2)) gamma = 0.0016286 * (Presion / landa) gammaast = gamma * (1 + (rc / ra)) delta = (4098 * ea) / (t + 237.3) ^ 2 WST = (gamma / (delta + gammaast)) ETaero = (gamma / (delta + gammaast)) * (900 / (t + 273)) * U2 * (ea - ed) dr = (1 + 0.033 * Cos((2 * Pi / 365) * NumDia)) Decli = 0.4093 * Sin(((2 * Pi * NumDia) / 365) - 1.39) LatRad = Latitud * (Pi / 180) XX = Sin(Decli) * Sin(LatRad) YY = Cos(Decli) * Cos(LatRad) AngHor = ArcoCosenoRad(-1 * Tan(LatRad) * Tan(Decli))

Page 234: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

234

Rada = 37.586 * dr * ((AngHor * XX) + (YY * Sin(AngHor))) n = (24 * AngHor) / Pi nN = HorasSol / n Rads = Rada * (0.25 + 0.5 * nN) Radns = (1 - Albedo) * Rads fnN = 0.1 + (0.9 * nN) sigma = 0.00000000245 * ((TMax + 273.16) ^ 4 + (TMin + 273.16) ^ 4) Emisividad = 0.34 + (Sqr(ed) * -0.139) Radnl = sigma * fnN * Emisividad If vRadiacion = "N" Then Radn = Radns - Radnl Else Radn = ERadN End If G = 0 ETrad = (delta / (delta + gammaast)) * (Radn / landa) vETo = ETaero + ETrad CalculavETo = vEToEnd FunctionPrivate Function CalculaKc12(vFecha) As Double fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado CalculaKc12 = CarNum(NoNulo(fProgramacion("Kc" + (Left(vFecha, 2))))) End IfEnd FunctionPrivate Function CalculaRaices12() As Double fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado CalculaRaices12 = fProgramacion("Raices") End IfEnd FunctionPrivate Function CalculaKc4(nETo As Double, cDiaCultivo) As Double Dim nDiaCultivo As Double: nDiaCultivo = Val(cDiaCultivo) fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Dim nIntervaloDeRiego As Double: nIntervaloRiego = 0 nIntervaloDeRiego = CarNum(fProgramacion("IntervaloRiego")) Dim vKcI As String Dim vKcM As String Dim vKcF As String Dim nKcI As Double Dim nKcM As Double Dim nKcF As Double Dim vDiasI As String Dim vDiasD As String Dim vDiasM As String Dim vDiasF As String Dim nDiasI As Double Dim nDiasD As Double Dim nDiasM As Double Dim nDiasF As Double vKcI = fProgramacion("KcI") vKcM = fProgramacion("KcM") vKcF = fProgramacion("KcF") vDiasI = fProgramacion("DiasI") vDiasD = fProgramacion("DiasD") vDiasM = fProgramacion("DiasM") vDiasF = fProgramacion("DiasF") If RTrim(vKcI) = "*" Or RTrim(vKcI) = "" Then nKcI = KcInicial(nIntervaloDeRiego, nETo) Else nKcI = CarNum(vKcI) End If nKcM = CarNum(vKcM) nKcF = CarNum(vKcF) nDiasI = CarNum(vDiasI) nDiasD = CarNum(vDiasD)

Page 235: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

235

nDiasM = CarNum(vDiasM) nDiasF = CarNum(vDiasF) CalculaKc4 = 0 Dim Valor As Double If nDiaCultivo > 0 And nDiaCultivo <= nDiasI Then Valor = nKcI End If If nDiaCultivo > nDiasI And nDiaCultivo <= nDiasI + nDiasD Then Valor = EstimacionKc4(nKcI, nKcM, nDiasD, nDiaCultivo - nDiasI) End If If nDiaCultivo > nDiasI + nDiasD And nDiaCultivo <= nDiasI + nDiasD + nDiasM Then Valor = nKcM End If If nDiaCultivo > nDiasI + nDiasD + nDiasM And nDiaCultivo <= nDiasI + nDiasD + nDiasM + nDiasF Then Valor = EstimacionKc4(nKcM, nKcF, nDiasF, nDiaCultivo - (nDiasI + nDiasD + nDiasM)) End If CalculaKc4 = Valor End IfEnd FunctionFunction KcInicial(vFrecuenciaRiego As Double, nETo As Double) As Double If vFrecuenciaRiego = 0 Then vFrecuenciaRiego = 7 If vFrecuenciaRiego = 1 Then vFrecuenciaRiego = 2 If vFrecuenciaRiego > 20 Then vFrecuenciaRiego = 20 Dim Kc(20) Dim vMaxima Dim vMinima If vFrecuenciaRiego = 2 Then vMinima = 2: vMaxima = 2 If vFrecuenciaRiego = 3 Then vMinima = 2: vMaxima = 4 If vFrecuenciaRiego = 4 Then vMinima = 4: vMaxima = 4 If vFrecuenciaRiego = 5 Then vMinima = 4: vMaxima = 7 If vFrecuenciaRiego = 6 Then vMinima = 4: vMaxima = 7 If vFrecuenciaRiego = 7 Then vMinima = 7: vMaxima = 7 If vFrecuenciaRiego = 8 Then vMinima = 7: vMaxima = 10 If vFrecuenciaRiego = 9 Then vMinima = 7: vMaxima = 10 If vFrecuenciaRiego = 10 Then vMinima = 10: vMaxima = 10 If vFrecuenciaRiego = 11 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 12 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 13 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 14 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 15 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 16 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 17 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 18 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 19 Then vMinima = 10: vMaxima = 20 If vFrecuenciaRiego = 20 Then vMinima = 20: vMaxima = 20 Kc(2) = (0.0025 * nETo * nETo) - (0.0588 * nETo) + 1.1068 Kc(4) = (0.0043 * nETo * nETo) - (0.097 * nETo) + 1.0403 Kc(7) = (0.0053 * nETo * nETo) - (0.1049 * nETo) + 0.8502 Kc(10) = (0.0053 * nETo * nETo) - (0.1009 * nETo) + 0.6915 Kc(20) = (0.0046 * nETo * nETo) - (0.0824 * nETo) + 0.52 If vMaxima <> vMinima Then KcInicial = Kc(vMaxima) + ((vFrecuenciaRiego - vMinima) * ((Kc(vMinima) - Kc(vMaxima)) / (vMaxima - vMinima))) Else KcInicial = Kc(vMaxima) End IfEnd FunctionFunction EstimacionKc4(vKc1 As Double, vKc2 As Double, Vdias As Double, Vdia As Double) As Double EstimacionKc4 = vKc1 + (((vKc2 - vKc1) / Vdias) * Vdia)End FunctionPrivate Function CalculaRaices4(cDiaCultivo) As Double Dim nDiaCultivo As Double: nDiaCultivo = Val(cDiaCultivo) fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Dim vRaicesI As String Dim vRaicesM As String Dim vRaicesF As String Dim nRaicesI As Double Dim nRaicesM As Double Dim nRaicesF As Double Dim vDiasI As String Dim vDiasD As String

Page 236: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

236

Dim vDiasM As String Dim vDiasF As String Dim nDiasI As Double Dim nDiasD As Double Dim nDiasM As Double Dim nDiasF As Double vRaicesI = fProgramacion("RaicesI") vRaicesM = fProgramacion("RaicesM") vRaicesF = fProgramacion("RaicesF") vDiasI = fProgramacion("DiasI") vDiasD = fProgramacion("DiasD") vDiasM = fProgramacion("DiasM") vDiasF = fProgramacion("DiasF") nRaicesI = CarNum(vRaicesI) nRaicesM = CarNum(vRaicesM) nRaicesF = CarNum(vRaicesF) nDiasI = CarNum(vDiasI) nDiasD = CarNum(vDiasD) nDiasM = CarNum(vDiasM) nDiasF = CarNum(vDiasF) CalculaRaices4 = 0 Dim Valor As Double If nDiaCultivo > 0 And nDiaCultivo <= nDiasI Then Valor = nRaicesI End If If nDiaCultivo > nDiasI And nDiaCultivo <= nDiasI + nDiasD Then Valor = EstimacionRaices4(nRaicesI, nRaicesM, nDiasD, nDiaCultivo - nDiasI) End If If nDiaCultivo > nDiasI + nDiasD And nDiaCultivo <= nDiasI + nDiasD + nDiasM Then Valor = nRaicesM End If If nDiaCultivo > nDiasI + nDiasD + nDiasM And nDiaCultivo <= nDiasI + nDiasD + nDiasM + nDiasF Then Valor = EstimacionRaices4(nRaicesM, nRaicesF, nDiasF, nDiaCultivo - (nDiasI + nDiasD + nDiasM)) End If CalculaRaices4 = Valor End IfEnd FunctionFunction EstimacionRaices4(vRaices1 As Double, vRaices2 As Double, Vdias As Double, Vdia As Double) As Double EstimacionRaices4 = vRaices1 + (((vRaices2 - vRaices1) / Vdias) * Vdia)End FunctionPrivate Function CalculaFraccion(cETc As String) As Double Dim nETc As Double: nETc = CarNum(cETc) Dim nFraccion As Double: nFraccion = 0 fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado nFraccion = fProgramacion("Fraccion") End If CalculaFraccion = nFraccion ' Es una regla que pone FAO-46 pero no se aplica PARA AUMENTAR O DISMINIUIR LA FRACCION DE AGUADISPONIBLE EN FUNCION DE LA ETO 'If nETc < 3 Then CalculaFraccion = 1.3 * nFraccion 'If nETc > 8 Then CalculaFraccion = 0.7 * nFraccion 'If nETc = 0 Then CalculaFraccion = 0End FunctionPrivate Function CalculaLluviaEfectiva(cLluvia As String) As Double Dim nTipoLluvia As Integer Dim nLluviaP As Double Dim nLluviaA1 As Double Dim nLluviaB1 As Double Dim nLluviaC1 As Double Dim nLluviaA2 As Double Dim nLluviaB2 As Double fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado If fProgramacion("Lluvia1") = True Then nTipoLluvia = 1 nLluviaP = CarNum(fProgramacion("LluviaP")) End If If fProgramacion("Lluvia2") = True Then nTipoLluvia = 2

Page 237: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

237

If fProgramacion("Lluvia3") = True Then nTipoLluvia = 3 If fProgramacion("Lluvia4") = True Then nTipoLluvia = 4 nLluviaA1 = CarNum(fProgramacion("LluviaA1")) nLluviaB1 = CarNum(fProgramacion("LluviaB1")) nLluviaC1 = CarNum(fProgramacion("LluviaC1")) nLluviaA2 = CarNum(fProgramacion("LluviaA2")) nLluviaB2 = CarNum(fProgramacion("LluviaB2")) End If End If Dim nLluvia As Double: nLluvia = CarNum(cLluvia) Dim nLluviaEfectiva As Double: nLluviaEfectiva = 0 If nTipoLluvia = 1 Then 'metodo del porcentaje CalculaLluviaEfectiva = nLluvia * (nLluviaP / 100) End If If nTipoLluvia = 2 Then 'metodo FAO/AGWL If nLluvia * 30 < 70 Then CalculaLluviaEfectiva = ((nLluvia * 30 * 0.6) - 10) / 30 Else CalculaLluviaEfectiva = ((nLluvia * 30 * 0.8) - 25) / 30 End If End If If nTipoLluvia = 3 Then 'metodo USDA If nLluvia * 30 < 250 Then CalculaLluviaEfectiva = ((nLluvia * 30 * (125 - (0.2 * nLluvia * 30))) / 125) / 30 Else CalculaLluviaEfectiva = (125 + (nLluvia * 30 * 0.1)) / 30 End If End If If nTipoLluvia = 4 Then 'metodo empírico If nLluvia * 30 < nLluviaC1 Then CalculaLluviaEfectiva = (((nLluvia * 30 * nLluviaA1) - (nLluviaB1))) / 30 Else CalculaLluviaEfectiva = (((nLluvia * 30 * nLluviaA2) - (nLluviaB2))) / 30 End If End If' If Metodo = "A" Then 'metodo de Martin de Santa Olalla DE LLUVIA EFECTIVA' If nLluvia > 7 Then CalculaLluviaEfectiva = 0.98 * nLluvia' If nLluvia <= 7 Then CalculaLluviaEfectiva = 0.9 * nLluvia' If nLluvia <= 5 Then CalculaLluviaEfectiva = 0.76 * nLluvia' If nLluvia <= 3 Then CalculaLluviaEfectiva = 0.65 * nLluvia' If nLluvia <= 0 Then CalculaLluviaEfectiva = 0 * nLluvia' End IfEnd FunctionFunction DiferenciaFechas(cFechaInicial As String, cFechaFinal As String) As Double Dim AnoI As Integer: AnoI = Val(Mid(cFechaInicial, 1, 4)) Dim MesI As Integer: MesI = Val(Mid(cFechaInicial, 5, 2)) Dim DiaI As Integer: DiaI = Val(Mid(cFechaInicial, 7, 2)) Dim AnoF As Integer: AnoF = Val(Mid(cFechaFinal, 1, 4)) Dim MesF As Integer: MesF = Val(Mid(cFechaFinal, 5, 2)) Dim DiaF As Integer: DiaF = Val(Mid(cFechaFinal, 7, 2)) Dim FechaInicial As Date: FechaInicial = DateSerial(AnoI, MesI, DiaI) Dim FechaFinal As Date: FechaFinal = DateSerial(AnoF, MesF, DiaF) Dim Numerodias As Double DiferenciaFechas = FechaFinal - FechaInicial + 1End FunctionFunction MesDia(NumeroDia as integer) 'Dar en string mesdia ("mmdd")End FunctionFunction DiaDelAno(MesDia as string) Dar en integer el número de díaEnd FunctionPrivate Sub CalculaMatrizCalculo() '''CalculaDosisNeta = AguaDisponible * (DensidadAparente / 10) * nFraccion * PorcentajeMojado * nRaices 'Datos entrada Dim cNotas As String: cNotas = "" Dim nETc As Double: nETc = CarNum(MatrizCalculo(1)) Dim nLluviaEfectiva As Double: nLluviaEfectiva = CarNum(MatrizCalculo(2)) Dim nRaices As Double: nRaices = CarNum(MatrizCalculo(5)) Dim nFraccion As Double: nFraccion = CarNum(MatrizCalculo(6)) Dim nReserva As Double: nReserva = CarNum(MatrizCalculo(1)) 'Datos salida Dim nCapacidadCampo As Double: nCapacidadCampo = 0

Page 238: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

238

Dim nPuntoMarchitez As Double: nPuntoMarchitez = 0 Dim nDensidadAparente As Double: nDensidadAparente = 0 Dim nRfuMaxima As Double: nRfuMaxima = 0 Dim nRFUMinima As Double: nRFUMinima = 0 Dim nDosisNeta As Double: nDosisNeta = 0 Dim vTipoRiego As String: vTipoRiego = "" Dim nEficienciaAplicacion As Double: nEficienciaAplicacion = 0 Dim nEficienciaLavado As Double: nEficienciaLavado = 0 Dim nLavado As Double: nLavado = 0 Dim nDosisBruta As Double: nDosisBruta = 0 Dim nConductividadElectrica As Double Dim nECe100 As Double Dim nRenEsp As Double Dim nMaxECe As Double Dim nAguaUtil As Double Dim nReservaInicial As Double 'Calculos fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado nCapacidadCampo = NumCar(fProgramacion("CapacidadCampo")) nPuntoMarchitez = NumCar(fProgramacion("PuntoMarchitamiento")) nDensidadAparente = NumCar(fProgramacion("DensidadAparente")) vTipoRiego = fProgramacion("TipoRiego") nEficienciaAplicacion = NumCar(fProgramacion("EficienciaAplicacion")) nEficienciaLavado = CarNum(fProgramacion("EficienciaLavado")) nConductividadElectrica = CarNum(fProgramacion("ConductividadElectrica")) nECe100 = CarNum(fProgramacion("ECe100")) nMaxECe = CarNum(fProgramacion("MaxECe")) nRenEsp = CarNum(fProgramacion("RendimientoSal")) nReservaInicial = CarNum(fProgramacion("ReservaInicial")) 'Dim nRFUMinima nRFUMinima = CarNum(fProgramacion("AgotamientoRFU")) / 100 Dim nRecargaRFU nRecargaRFU = CarNum(fProgramacion("RecargaRFU")) / 100 Dim nIntervaloRiego nIntervaloRiego = CarNum(fProgramacion("IntervaloRiego")) Dim nSuperficie nSuperficie = CarNum(fProgramacion("SuperficieFinca")) Dim nPendiente: nPendiente = 0 nPendiente = CarNum(fProgramacion("PendienteTerreno")) Dim nInfiltracion nInfiltracion = CarNum(fProgramacion("TasaInfiltracion")) Dim nCaudal nCaudal = CarNum(fProgramacion("CaudalInstalacion")) End If nAguaUtil = (nCapacidadCampo - nPuntoMarchitez) * (nDensidadAparente / 10) * nRaices nRfuMaxima = (nCapacidadCampo - nPuntoMarchitez) * (nDensidadAparente / 10) * nRaices * nFraccion nRFUMinima = nRfuMaxima * (1 - nRFUMinima) If Primero = "SI" And nRaices > 0 Then Primero = "NO" ReservaInicial = nRfuMaxima * (nReservaInicial / 100) End If If ReservaInicial = 0 Then nReserva = -nETc + nLluviaEfectiva Else nReserva = ReservaInicial - nETc + nLluviaEfectiva End If ReservaInicial = nReserva If nReserva > nRfuMaxima Then nReserva = nRfuMaxima ReservaInicial = nRfuMaxima End If nDosisNeta = 0 If nReserva < nRFUMinima And nIntervaloRiego <> 0 Then nDosisNeta = (nRfuMaxima * nRecargaRFU) - nReserva nReserva = nReserva + nDosisNeta ReservaInicial = nReserva End If If nReserva < nRFUMinima And nIntervaloRiego = 0 Then nDosisNeta = (nRfuMaxima * nRecargaRFU) - nReserva nReserva = nReserva + nDosisNeta

Page 239: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

239

ReservaInicial = nReserva End If If nIntervaloRiego > 0 And Cuenta = nIntervaloRiego Then Cuenta = 0 nDosisNeta = (nRfuMaxima * nRecargaRFU) - nReserva If nDosisNeta < 0 Then nDosisNeta = 0 nReserva = nReserva + nDosisNeta ReservaInicial = nReserva End If If nDosisNeta > 0 Then 'Calculo de lavado al 100% Dim FraccionLavado As Double If vTipoRiego = "S" Then Dim nECe As Double nECe = ((nECe100 - nMaxECe) * nRenEsp / 100) + nMaxECe nLavado = nConductividadElectrica / ((5 * nECe) - nConductividadElectrica) FraccionLavado = 1 - nLavado End If If vTipoRiego = "L" Then nLavado = nConductividadElectrica / (2 * nMaxECe) FraccionLavado = 1 - nLavado End If If FraccionLavado < 0 Then cNotas = "AGUA MUY SALINA." Else If FraccionLavado * (nEficienciaLavado / 100) < (nEficienciaAplicacion / 100) Then 'se aplica lavado de sales nDosisBruta = nDosisNeta / (FraccionLavado * (nEficienciaLavado / 100)) cNotas = "Se aplica lavado de sales." Else nDosisBruta = nDosisNeta / (nEficienciaAplicacion / 100) cNotas = "Se aplica eficiencia aplicación." End If End If Else nEficienciaAplicacion = 0 nEficienciaLavado = 0 nDosisBruta = 0 End If Dim nDosisBrutaTotal As Double: nDosisBrutaTotal = 0 nDosisBrutaTotal = (nDosisBruta * nSuperficie) / 1000 MatrizCalculo(21) = Left(NumCar(nRfuMaxima), 5) MatrizCalculo(22) = Left(NumCar(nRFUMinima), 5) MatrizCalculo(23) = Left(NumCar(nReserva), 5) MatrizCalculo(24) = Left(NumCar(nDosisNeta), 5) MatrizCalculo(25) = vTipoRiego MatrizCalculo(26) = Left(NumCar(nEficienciaAplicacion), 3) MatrizCalculo(27) = Left(NumCar(nLavado), 5) MatrizCalculo(28) = Left(NumCar(nEficienciaLavado), 5) MatrizCalculo(29) = Left(NumCar(nDosisBruta), 5) MatrizCalculo(31) = Left(NumCar(nCapacidadCampo), 10) MatrizCalculo(32) = Left(NumCar(nPuntoMarchitez), 10) MatrizCalculo(33) = Left(NumCar(nDensidadAparente), 10) MatrizCalculo(34) = Left(NumCar(nAguaUtil), 10) MatrizCalculo(35) = Left(NumCar(nDosisBrutaTotal), 8) Dim Disminucion: Disminucion = 0 ' DISMINUCION EN FUNCION DE LA PENDIENTE (NO SE APLICA)

'If Val(nPendiente) >= 0 And Val(nPendiente) <= 5 Then Disminucion = 0 'If Val(nPendiente) > 5 And Val(nPendiente) <= 8 Then Disminucion = 20 'If Val(nPendiente) > 8 And Val(nPendiente) <= 12 Then Disminucion = 40 'If Val(nPendiente) > 12 And Val(nPendiente) <= 20 Then Disminucion = 60 'If Val(nPendiente) > 20 And Val(nPendiente) <= 100 Then Disminucion = 75

Dim nInfil As Double: nInfil = 0 Dim nTiempo1 As Double: nTiempo1 = 0 If nDosisBruta > 0 Then nInfil = nInfiltracion - (nInfiltracion * (Disminucion / 100)) nTiempo1 = nDosisBruta / nInfil End If MatrizCalculo(36) = Left(NumCar(nTiempo1), 10) Dim nTiempo2 As Double: nTiempo2 = 0 If nDosisBrutaTotal > 0 Then nTiempo2 = nDosisBrutaTotal / nCaudal End If

Page 240: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

240

MatrizCalculo(37) = Left(NumCar(nTiempo2), 10) If nTiempo1 > nTiempo2 Then cNotas = cNotas End If If nTiempo1 < nTiempo2 Then cNotas = cNotas End If MatrizCalculo(38) = Left(cNotas, 100) Cuenta = Cuenta + 1End SubSub Posiciona(Lugar As Integer) Me.Entrada(Lugar).SelStart = 0 Me.Entrada(Lugar).SelLength = Len(Entrada(Lugar)) Me.Entrada(Lugar).SetFocusEnd SubPrivate Sub MostrarInformacion1() 'Detalle Dim tETc As Double: tETc = 0 Dim tPE As Double: tPE = 0 Dim tRiegos As Double: tRiegos = 0 Dim tDN As Double: tDN = 0 Dim tDB As Double: tDB = 0 Dim tDBT As Double: tDBT = 0 Dim Numero: Numero = 0 Dim Informacion Open "C:\Riegos\RiegosDetalle.txt" For Output As #1 Dim Busca: Busca = "" Busca = Busca + "SELECT * " Busca = Busca + "FROM BalanceHidrico " Busca = Busca + "WHERE " Busca = Busca + "NombreProgramacion = '" & NombreProgramacion & "' and Raices <> '0' " Busca = Busca + "ORDER BY " Busca = Busca + "Fecha ;" Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset(Busca) If Consulta.RecordCount <> 0 Then Consulta.MoveFirst fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Print #1, " BALANCE HÍDRICO ", Date, Time Print #1, " " Print #1, "Programación........................................: " + Consulta("NombreProgramacion") Print #1, "Finca...............................................: " + fProgramacion("NombreFinca") Print #1, "Población...........................................: " + fProgramacion("Poblacion") Print #1, "Provincia...........................................: " + fProgramacion("Provincia") Print #1, "Latitud [g,m,s].....................................: " + Str(fProgramacion("LatitudGrados")) + "º " +Str(fProgramacion("LatitudMinutos")) + "' " + Str(fProgramacion("LatitudSegundos")) + "'' " + fProgramacion("Latitud") + "º " Print #1, "Longitud [g,m,s]....................................: " + Str(fProgramacion("LongitudGrados")) + "º " +Str(fProgramacion("LongitudMinutos")) + "' " + Str(fProgramacion("LongitudSegundos")) + "'' " + fProgramacion("Longitud")+ "º " Print #1, "Altitud [m].........................................: " + Str(fProgramacion("Altitud")) Print #1, "Superficie [m2].....................................: " + fProgramacion("SuperficieFinca") Print #1, "Cultivo.............................................: " + fProgramacion("Cultivo") Print #1, "Fracción agua disponible en el suelo................: " + fProgramacion("Fraccion") Print #1, "Clase textural......................................: " + fProgramacion("TipoSuelo") Print #1, "Densidad aparente [g/cm3]...........................: " + fProgramacion("DensidadAparente") Print #1, "Capacidad de Campo [% peso].........................: " + fProgramacion("CapacidadCampo") Print #1, "Punto de Marchitamiento [%peso].....................: " + fProgramacion("PuntoMarchitamiento") Print #1, "Sistema Riego.......................................: " + fProgramacion("SistemaRiego") Print #1, "Eficiencia en la aplicación [%].....................: " + fProgramacion("EficienciaAplicacion") Print #1, "Caudal instalación riego [m3/parcela]...............: " + fProgramacion("CaudalInstalacion") Print #1, "Conductividad agua de riego [dS/m)..................: " + fProgramacion("ConductividadElectrica") Print #1, "Eficiencia en el lavado de sales [%]................: " + fProgramacion("EficienciaLavado") Print #1, "Rendimiento mínimo deseado debido a salinidad [%]...: " + fProgramacion("RendimientoSal") Print #1, "Fecha Plantación/Inicio.............................: " + fProgramacion("FechaPlantacion") Print #1, "Momento de Riego. Agotamiento de la RFU [%].........: " + fProgramacion("AgotamientoRFU") Print #1, "Intervalo de riego [días]...........................: " + fProgramacion("IntervaloRiego") Print #1, "Dosis de riego. Recarga de la RFU [%]...............: " + fProgramacion("RecargaRFU") Print #1, "Nivel de agua de la RFU al inicio [%]...............: " + fProgramacion("ReservaInicial") Print #1, " " Print #1, " "

Page 241: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

241

Print #1, "Fecha " + " " + "ETo " + " " + "Kc " + " " + "Kl " + " " + "ETcKl" + " " + "P.E. " + " " + "Raices" + " " + "F.A."+ " " + "R.F.U." + " " + "Reserva" + " " + "d.n. " + " " + "d.b. " + " " + "D.B. " + " " + "tiempoI" + " " + "tiempoC" Print #1, " " + " " + "[mm] " + " " + "[] " + " " + "[] " + " " + "[mm] " + " " + "[mm] " + " " + "[cm] " + " " + "[] " + " " +"[mm] " + " " + "[mm] " + " " + "[mm] " + " " + "[mm] " + " " + "[m3/par]" + " " + "[horas]" + " " + "[hora] " Print #1, "----------" + " " + "-----" + " " + "----" + " " + "----" + " " + "-----" + " " + "------" + " " + "------" + " " + "----" + " " + "------" + " " + "-------" + " " + "-----" + " " + "-----" + " " + "--------" + " " + "-------" + " " + "-------" Primero = "NO" End If Dim cFecha As String Dim cETo As String * 5 Dim cKc As String * 4 Dim cKl As String * 4 Dim cETc As String * 5 Dim cPE As String * 6 Dim cRaices As String * 6 Dim cFA As String * 4 Dim cRFU As String * 6 Dim cReserva As String * 7 Dim cDN As String * 5 Dim cDB As String * 5 Dim cDBT As String * 8 Dim cTiempo1 As String * 6 Dim cTiempo2 As String * 6 While Not Consulta.EOF Numero = Numero + 1 cFecha = Mid(Consulta("Fecha"), 7, 2) + "-" + Mid(Consulta("Fecha"), 5, 2) + "-" + Mid(Consulta("Fecha"), 1, 4) Dim nETo: nETo = CarNum(Consulta("ETo")): RSet cETo = Format(nETo, "#0.00") Dim nKc: nKc = CarNum(Consulta("Kc")): RSet cKc = Format(nKc, "0.00") Dim nKl: nKl = CarNum(Consulta("Kl")): RSet cKl = Format(nKl, "0.00") Dim nETc: nETc = CarNum(Consulta("ETc")): RSet cETc = Format(nETc, "#0.00") Dim nPE: nPE = CarNum(Consulta("LluviaEfectiva")): RSet cPE = Format(nPE, "##0.00") Dim nRaices: nRaices = CarNum(Consulta("Raices")): RSet cRaices = Format(nRaices, "##0") Dim nFA: nFA = CarNum(Consulta("Fraccion")): RSet cFA = Format(nFA, "0.00") Dim nRFU: nRFU = CarNum(Consulta("RFUMaxima")): RSet cRFU = Format(nRFU, "##0.0") Dim nReserva: nReserva = CarNum(Consulta("Reserva")): RSet cReserva = Format(nReserva, "##0.00") Dim nDN: nDN = CarNum(Consulta("DosisNeta")): RSet cDN = Format(nDN, "##0.00") Dim nDB: nDB = CarNum(Consulta("DosisBruta")): RSet cDB = Format(nDB, "##0.00") Dim nDBT: nDBT = CarNum(Consulta("DosisBrutaTotal")): RSet cDBT = Format(nDBT, "#####0.0") Dim nTiempo1: nTiempo1 = CarNum(Consulta("Tiempo1")): RSet cTiempo1 = Format(nTiempo1, "###0.0") Dim nTiempo2: nTiempo2 = CarNum(Consulta("Tiempo2")): RSet cTiempo2 = Format(nTiempo2, "###0.0") tETc = tETc + nETc tPE = tPE + nPE If nDN > 0 Then tRiegos = tRiegos + 1 tDN = tDN + nDN tDB = tDB + nDB tDBT = tDBT + nDBT End If Informacion = "" Informacion = Informacion + cFecha + " " Informacion = Informacion + cETo + " " Informacion = Informacion + cKc + " " Informacion = Informacion + cKl + " " Informacion = Informacion + cETc + " " Informacion = Informacion + cPE + " " Informacion = Informacion + cRaices + " " Informacion = Informacion + cFA + " " Informacion = Informacion + cRFU + " " Informacion = Informacion + cReserva + " " Informacion = Informacion + cDN + " " Informacion = Informacion + cDB + " " Informacion = Informacion + cDBT + " " Informacion = Informacion + cTiempo1 + " " Informacion = Informacion + cTiempo2 + " " Print #1, Informacion DoEvents Consulta.MoveNext Wend Print #1, " " Print #1, "Total ETc·Kl [mm]..................: " + Str(Int(tETc)) Print #1, "Total P.E. [mm]....................: " + Str(Int(tPE)) Print #1, "Número de Riegos...................: " + Str(Int(tRiegos)) Print #1, "Total dosis neta [mm]..............: " + Str(Int(tDN))

Page 242: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

242

Print #1, "Total dosis bruta [mm].............: " + Str(Int(tDB)) Print #1, "Total dosis bruta [m3/parcela].....: " + Str(Int(tDBT)) Print #1, " " Print #1, "----------------------------------------------------------------------------------" Print #1, "NOTAS:" Print #1, " - Cuando el intervalo de riego está en blanco, no se tiene en cuenta. " Print #1, " - ETo [mm] = Evapotranspiración de referencia." Print #1, " - Kc [] = Constante de cultivo." Print #1, " - Kl [] = Coeficiente de localización. Sólo en riego localizado." Print #1, " - ETcKl [mm]= Evapotranspiración de cultivo por coeficiente de localización" Print #1, " - P.E. [cm]= Lluvia efectiva (véase método aplicado)" Print #1, " - Raíces [cm] = Profundidad efectiva de las raíces " Print #1, " - R.F.U. [mm] = Volumen de agua máximo de la Reserva Fácilmente Utilizable (RFU)" Print #1, " - Reserva [mm] = Volumen de agua existente en la RFU al final del día" Print #1, " - d.n. [mm] = Dosis neta de riego" Print #1, " - d.b. [mm] = Dosis bruta de riego" Print #1, " - D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela" Print #1, " - tiempoI [horas] = Tiempo mínimo previsto de riego debido a la infiltración" Print #1, " - tiempoC [horas] = Tiempo mínimo previsto de riego debido al Caudal" Print #1, " - De las dos cifras anteriores, la mayor de ellas será el tiempo mínimo de riego" Print #1, "----------------------------------------------------------------------------------" End If Close #1 Command3.Visible = TrueEnd Sub'***********************************************************************************Private Sub MostrarInformacion2() ' riegos Dim tRiegos As Double: tRiegos = 0 Dim tDN As Double: tDN = 0 Dim tDB As Double: tDB = 0 Dim tDBT As Double: tDBT = 0 Dim Numero: Numero = 0 Dim Informacion Open "C:\Riegos\RiegosResumen.txt" For Output As #1 Dim Busca: Busca = "" Busca = Busca + "SELECT * " Busca = Busca + "FROM BalanceHidrico " Busca = Busca + "WHERE " Busca = Busca + "NombreProgramacion = '" & NombreProgramacion & "' and Raices <> '0' and DosisBruta <> '0' " Busca = Busca + "ORDER BY " Busca = Busca + "Fecha ;" Dim Consulta As Recordset Set Consulta = BaseDeDatos.OpenRecordset(Busca) If Consulta.RecordCount <> 0 Then Consulta.MoveFirst fProgramacion.Index = "Programacion" fProgramacion.MoveFirst fProgramacion.Seek "=", NombreProgramacion If fProgramacion.NoMatch = False Then 'Registro encontrado Print #1, " RIEGOS A EFECTUAR ", Date, Time Print #1, " " Print #1, "Programación........................................: " + Consulta("NombreProgramacion") Print #1, "Finca...............................................: " + fProgramacion("NombreFinca") Print #1, "Población...........................................: " + fProgramacion("Poblacion") Print #1, "Provincia...........................................: " + fProgramacion("Provincia") Print #1, "Latitud [g,m,s].....................................: " + Str(fProgramacion("LatitudGrados")) + "º " +Str(fProgramacion("LatitudMinutos")) + "' " + Str(fProgramacion("LatitudSegundos")) + "'' " + fProgramacion("Latitud") + "º " Print #1, "Longitud [g,m,s]....................................: " + Str(fProgramacion("LongitudGrados")) + "º " +Str(fProgramacion("LongitudMinutos")) + "' " + Str(fProgramacion("LongitudSegundos")) + "'' " + fProgramacion("Longitud")+ "º " Print #1, "Altitud [m].........................................: " + Str(fProgramacion("Altitud")) Print #1, "Superficie [m2].....................................: " + fProgramacion("SuperficieFinca") Print #1, "Cultivo.............................................: " + fProgramacion("Cultivo") Print #1, "Fracción agua disponible en el suelo................: " + fProgramacion("Fraccion") Print #1, "Clase textural......................................: " + fProgramacion("TipoSuelo") Print #1, "Densidad aparente [g/cm3]...........................: " + fProgramacion("DensidadAparente") Print #1, "Capacidad de Campo [% peso].........................: " + fProgramacion("CapacidadCampo") Print #1, "Punto de Marchitamiento [%peso].....................: " + fProgramacion("PuntoMarchitamiento") Print #1, "Sistema Riego.......................................: " + fProgramacion("SistemaRiego") Print #1, "Eficiencia en la aplicación [%].....................: " + fProgramacion("EficienciaAplicacion") Print #1, "Caudal instalación riego [m3/parcela]...............: " + fProgramacion("CaudalInstalacion") Print #1, "Conductividad agua de riego [dS/m]..................: " + fProgramacion("ConductividadElectrica")

Page 243: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

243

Print #1, "Eficiencia en el lavado de sales [%]................: " + fProgramacion("EficienciaLavado") Print #1, "Rendimiento mínimo deseado debido a salinidad [%]...: " + fProgramacion("RendimientoSal") Print #1, "Fecha Plantación/Inicio.............................: " + fProgramacion("FechaPlantacion") Print #1, "Momento de Riego. Agotamiento de la RFU [%].........: " + fProgramacion("AgotamientoRFU") Print #1, "Intervalo de riego [días]...........................: " + fProgramacion("IntervaloRiego") Print #1, "Dosis de riego. Recarga de la RFU [%]...............: " + fProgramacion("RecargaRFU") Print #1, "Nivel de agua de la RFU al inicio [%]...............: " + fProgramacion("ReservaInicial") Print #1, " " Print #1, " " Print #1, "Fecha " + " " + "d.n. " + " " + "d.b. " + " " + "D.B. " + " " + "tiempoI" + " " + "tiempoF" + " " + " Notas" Print #1, " " + " " + "[mm] " + " " + "[mm] " + " " + "[m3/par]" + " " + "[horas]" + " " + "[hora] " + " " + "" Print #1, "----------" + " " + "-----" + " " + "-----" + " " + "--------" + " " + "-------" + " " + "-------" + " " + "-------------------------------------------" Primero = "NO" End If Dim cFecha As String Dim cETo As String * 5 Dim cKc As String * 4 Dim cKl As String * 4 Dim cETc As String * 5 Dim cPE As String * 6 Dim cRaices As String * 6 Dim cFA As String * 4 Dim cRFU As String * 6 Dim cReserva As String * 7 Dim cDN As String * 5 Dim cDB As String * 5 Dim cDBT As String * 8 Dim cTiempo1 As String * 6 Dim cTiempo2 As String * 6 While Not Consulta.EOF Numero = Numero + 1 cFecha = Mid(Consulta("Fecha"), 7, 2) + "-" + Mid(Consulta("Fecha"), 5, 2) + "-" + Mid(Consulta("Fecha"), 1, 4) Dim nETo: nETo = CarNum(Consulta("ETo")): RSet cETo = Format(nETo, "#0.00") Dim nKc: nKc = CarNum(Consulta("Kc")): RSet cKc = Format(nKc, "0.00") Dim nKl: nKl = CarNum(Consulta("Kl")): RSet cKl = Format(nKl, "0.00") Dim nETc: nETc = CarNum(Consulta("ETc")): RSet cETc = Format(nETc, "#0.00") Dim nPE: nPE = CarNum(Consulta("LluviaEfectiva")): RSet cPE = Format(nPE, "##0.00") Dim nRaices: nRaices = CarNum(Consulta("Raices")): RSet cRaices = Format(nRaices, "##0") Dim nFA: nFA = CarNum(Consulta("Fraccion")): RSet cFA = Format(nFA, "0.00") Dim nRFU: nRFU = CarNum(Consulta("RFUMaxima")): RSet cRFU = Format(nRFU, "##0.0") Dim nReserva: nReserva = CarNum(Consulta("Reserva")): RSet cReserva = Format(nReserva, "##0.00") Dim nDN: nDN = CarNum(Consulta("DosisNeta")): RSet cDN = Format(nDN, "##0.00") Dim nDB: nDB = CarNum(Consulta("DosisBruta")): RSet cDB = Format(nDB, "##0.00") Dim nDBT: nDBT = CarNum(Consulta("DosisBrutaTotal")): RSet cDBT = Format(nDBT, "#####0.0") Dim nTiempo1: nTiempo1 = CarNum(Consulta("Tiempo1")): RSet cTiempo1 = Format(nTiempo1, "###0.0") Dim nTiempo2: nTiempo2 = CarNum(Consulta("Tiempo2")): RSet cTiempo2 = Format(nTiempo2, "###0.0") Dim cNotas: cNotas = Consulta("Notas") If nDN > 0 Then tRiegos = tRiegos + 1 tDN = tDN + nDN tDB = tDB + nDB tDBT = tDBT + nDBT End If Informacion = "" Informacion = Informacion + cFecha + " " Informacion = Informacion + cDN + " " Informacion = Informacion + cDB + " " Informacion = Informacion + cDBT + " " Informacion = Informacion + cTiempo1 + " " Informacion = Informacion + cTiempo2 + " " Informacion = Informacion + cNotas + " " Print #1, Informacion DoEvents Consulta.MoveNext Wend Print #1, " " Print #1, "Número de Riegos...................: " + Str(Int(tRiegos)) Print #1, "Total dosis neta [mm]..............: " + Str(Int(tDN)) Print #1, "Total dosis bruta [mm].............: " + Str(Int(tDB)) Print #1, "Total dosis bruta [m3/parcela].....: " + Str(Int(tDBT))

Page 244: Programa para el cálculo de las necesidades hídricas en cultivos

7. Anejo 5

244

Print #1, " " Print #1, "----------------------------------------------------------------------------------" Print #1, "NOTAS:" Print #1, " - Cuando el intervalo de riego está en blanco, no se tiene en cuenta. " Print #1, " - d.n. [mm] = Dosis neta de riego" Print #1, " - d.b. [mm] = Dosis bruta de riego" Print #1, " - D.B. [m3/parcela] = Dosis bruta de riego a aplicar en la parcela" Print #1, " - tiempoI [horas] = Tiempo mínimo previsto de riego debido a la infiltración" Print #1, " - tiempoC [horas] = Tiempo mínimo previsto de riego debido al Caudal" Print #1, " - De las dos cifras anteriores, la mayor de ellas será el tiempo mínimo de riego" Print #1, "----------------------------------------------------------------------------------" Else Print #1, " NO HAY RIEGOS" End If Close #1 Command4.Visible = True Comando(0).Visible = True Label1.Visible = FalseEnd SubPrivate Sub Command3_Click() Dim ReturnValue ReturnValue = Shell("c:\Archivos de Programa\Accesorios\Wordpad.exe c:\Riegos\RiegosDetalle.txt", 1) AppActivate ReturnValueEnd SubPrivate Sub Command4_Click() Dim ReturnValue ReturnValue = Shell("c:\Archivos de Programa\Accesorios\Wordpad.exe c:\Riegos\RiegosResumen.txt", 1) AppActivate ReturnValueEnd Sub