58 iy, id, it, imin, isec, tstep, tstep_prev, dt_since_start, DayofWeek_id, & !input
59 Tmin_id_prev, Tmax_id_prev, lenDay_id_prev, &
61 WaterUseMethod, Ie_start, Ie_end, &
62 LAICalcYes, LAIType, &
63 nsh_real, avkdn, Temp_C, Precip, BaseT_HC, &
64 BaseT_Heating, BaseT_Cooling, &
66 AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, &
67 AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, &
68 CapMax_dec, CapMin_dec, PorMax_dec, PorMin_dec, &
69 Ie_a, Ie_m, DayWatPer, DayWat, &
70 BaseT, BaseTe, GDDFull, SDDFull, LAIMin, LAIMax, LAIPower, &
71 DecidCap_id_prev, StoreDrainPrm_prev, LAI_id_prev, GDD_id_prev, SDD_id_prev, &
72 albDecTr_id_prev, albEveTr_id_prev, albGrass_id_prev, porosity_id_prev, & !input
74 state_id, soilstore_id, SoilStoreCap, H_maintain, & !input
75 HDD_id_next, & !output
76 Tmin_id_next, Tmax_id_next, lenDay_id_next, &
77 albDecTr_id_next, albEveTr_id_next, albGrass_id_next, porosity_id_next, & !output
78 DecidCap_id_next, StoreDrainPrm_next, LAI_id_next, GDD_id_next, SDD_id_next, deltaLAI, WUDay_id)
85 INTEGER,
INTENT(IN) :: iy
86 INTEGER,
INTENT(IN) :: id
87 INTEGER,
INTENT(IN) :: it
88 INTEGER,
INTENT(IN) :: imin
89 INTEGER,
INTENT(IN) :: isec
90 INTEGER,
INTENT(IN) :: tstep
91 INTEGER,
INTENT(IN) :: tstep_prev
92 INTEGER,
INTENT(IN) :: dt_since_start
94 INTEGER,
INTENT(IN) :: WaterUseMethod
95 INTEGER,
INTENT(IN) :: BaseTMethod
96 INTEGER,
INTENT(IN) :: Ie_start
97 INTEGER,
INTENT(IN) :: Ie_end
98 INTEGER,
INTENT(IN) :: LAICalcYes
100 INTEGER,
DIMENSION(nvegsurf),
INTENT(IN) :: LAIType
102 REAL(KIND(1D0)),
INTENT(IN) :: nsh_real
103 REAL(KIND(1D0)),
INTENT(IN) :: avkdn
104 REAL(KIND(1D0)),
INTENT(IN) :: Temp_C
105 REAL(KIND(1D0)),
INTENT(IN) :: Precip
106 REAL(KIND(1D0)),
INTENT(IN) :: BaseT_HC
107 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(IN) :: BaseT_Heating
108 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(IN) :: BaseT_Cooling
109 REAL(KIND(1D0)),
INTENT(IN) :: lat
110 REAL(KIND(1D0)),
INTENT(IN) :: Faut
111 REAL(KIND(1D0)),
INTENT(IN) :: LAI_obs
119 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_DecTr
120 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_EveTr
121 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_Grass
122 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_DecTr
123 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_EveTr
124 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_Grass
125 REAL(KIND(1D0)),
INTENT(IN) :: CapMax_dec
126 REAL(KIND(1D0)),
INTENT(IN) :: CapMin_dec
127 REAL(KIND(1D0)),
INTENT(IN) :: PorMax_dec
128 REAL(KIND(1D0)),
INTENT(IN) :: PorMin_dec
131 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(IN) :: Ie_a
132 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(IN) :: Ie_m
133 REAL(KIND(1D0)),
DIMENSION(7),
INTENT(IN) :: DayWatPer
134 REAL(KIND(1D0)),
DIMENSION(7),
INTENT(IN) :: DayWat
137 REAL(KIND(1D0)),
INTENT(IN) :: H_maintain
138 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: state_id
139 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: soilstore_id
140 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap
143 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseT
144 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseTe
145 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: GDDFull
146 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: SDDFull
147 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMin
148 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMax
149 REAL(KIND(1D0)),
DIMENSION(4, nvegsurf),
INTENT(IN) :: LAIPower
154 REAL(KIND(1D0)),
DIMENSION(3) :: GDD_id
155 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(IN) :: GDD_id_prev
156 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(OUT) :: GDD_id_next
159 REAL(KIND(1D0)),
DIMENSION(3) :: SDD_id
160 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(IN) :: SDD_id_prev
161 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(OUT) :: SDD_id_next
164 REAL(KIND(1D0)) :: Tmin_id
165 REAL(KIND(1D0)),
INTENT(IN) :: Tmin_id_prev
166 REAL(KIND(1D0)),
INTENT(out) :: Tmin_id_next
169 REAL(KIND(1D0)) :: Tmax_id
170 REAL(KIND(1D0)),
INTENT(in) :: Tmax_id_prev
171 REAL(KIND(1D0)),
INTENT(out) :: Tmax_id_next
174 REAL(KIND(1D0)) :: lenDay_id
175 REAL(KIND(1D0)),
INTENT(IN) :: lenDay_id_prev
176 REAL(KIND(1D0)),
INTENT(out) :: lenDay_id_next
179 REAL(KIND(1D0)),
DIMENSION(3) :: LAI_id
180 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(IN) :: LAI_id_prev
181 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(OUT) :: LAI_id_next
187 REAL(KIND(1D0)),
DIMENSION(12) :: HDD_id
188 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(IN) :: HDD_id_prev
189 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(OUT) :: HDD_id_next
209 REAL(KIND(1D0)),
DIMENSION(9),
INTENT(OUT) :: WUDay_id
223 INTEGER,
DIMENSION(3),
INTENT(in) :: DayofWeek_id
225 REAL(KIND(1D0)),
INTENT(OUT) :: deltaLAI
227 REAL(KIND(1D0)) :: DecidCap_id
228 REAL(KIND(1D0)),
INTENT(IN) :: DecidCap_id_prev
229 REAL(KIND(1D0)),
INTENT(OUT) :: DecidCap_id_next
230 REAL(KIND(1D0)) :: albDecTr_id
231 REAL(KIND(1D0)),
INTENT(IN) :: albDecTr_id_prev
232 REAL(KIND(1D0)),
INTENT(OUT) :: albDecTr_id_next
233 REAL(KIND(1D0)) :: albEveTr_id
234 REAL(KIND(1D0)),
INTENT(IN) :: albEveTr_id_prev
235 REAL(KIND(1D0)),
INTENT(OUT) :: albEveTr_id_next
236 REAL(KIND(1D0)) :: albGrass_id
237 REAL(KIND(1D0)),
INTENT(IN) :: albGrass_id_prev
238 REAL(KIND(1D0)),
INTENT(OUT) :: albGrass_id_next
239 REAL(KIND(1D0)) :: porosity_id
240 REAL(KIND(1D0)),
INTENT(INOUT) :: porosity_id_prev
241 REAL(KIND(1D0)),
INTENT(INOUT) :: porosity_id_next
242 REAL(KIND(1D0)),
DIMENSION(6, nsurf) :: StoreDrainPrm
243 REAL(KIND(1D0)),
DIMENSION(6, nsurf),
INTENT(in) :: StoreDrainPrm_prev
244 REAL(KIND(1D0)),
DIMENSION(6, nsurf),
INTENT(out) :: StoreDrainPrm_next
246 LOGICAL :: first_tstep_Q
247 LOGICAL :: last_tstep_Q
248 TYPE(datetime) :: time_now, time_prev, time_next
254 tmin_id = tmin_id_prev
255 tmax_id = tmax_id_prev
256 lenday_id = lenday_id_prev
257 storedrainprm = storedrainprm_prev
258 decidcap_id = decidcap_id_prev
259 albdectr_id = albdectr_id_prev
260 albevetr_id = albevetr_id_prev
261 albgrass_id = albgrass_id_prev
262 porosity_id = porosity_id_prev
266 time_now = datetime(year=iy) + timedelta(days=id - 1, hours=it, minutes=imin, seconds=isec)
267 time_prev = time_now - timedelta(seconds=tstep_prev)
268 time_next = time_now + timedelta(seconds=tstep)
271 first_tstep_q = time_now%getDay() /= time_prev%getDay()
272 last_tstep_q = time_now%getDay() /= time_next%getDay()
276 IF (first_tstep_q)
THEN
296 baset_heating, baset_cooling, &
298 tmin_id, tmax_id, lenday_id, &
311 IF (last_tstep_q)
THEN
313 id, it, imin, tstep, dt_since_start, &
314 tmin_id, tmax_id, lenday_id, &
315 laitype, ie_end, ie_start, laicalcyes, &
316 waterusemethod, dayofweek_id, &
317 albmax_dectr, albmax_evetr, albmax_grass, albmin_dectr, albmin_evetr, albmin_grass, &
318 baset, basete, capmax_dec, capmin_dec, daywat, daywatper, faut, gddfull, &
319 ie_a, ie_m, laimax, laimin, laipower, lat, pormax_dec, pormin_dec, sddfull, lai_obs, &
320 state_id, soilstore_id, soilstorecap, h_maintain, &
337 tmin_id_next = tmin_id
338 tmax_id_next = tmax_id
339 lenday_id_next = lenday_id
340 storedrainprm_next = storedrainprm
341 decidcap_id_next = decidcap_id
342 albdectr_id_next = albdectr_id
343 albevetr_id_next = albevetr_id
344 albgrass_id_next = albgrass_id
345 porosity_id_next = porosity_id
356 id, it, imin, tstep, dt_since_start, & !input
357 Tmin_id, Tmax_id, lenDay_id, &
358 LAIType, Ie_end, Ie_start, LAICalcYes, &
359 WaterUseMethod, DayofWeek_id, &
360 AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, &
361 BaseT, BaseTe, CapMax_dec, CapMin_dec, DayWat, DayWatPer, Faut, GDDFull, &
362 Ie_a, Ie_m, LAIMax, LAIMin, LAIPower, lat, PorMax_dec, PorMin_dec, SDDFull, LAI_obs, &
363 state_id, soilstore_id, SoilStoreCap, H_maintain, & !input
364 GDD_id, SDD_id, & !inout
376 INTEGER,
INTENT(IN) :: id
377 INTEGER,
INTENT(IN) :: it
378 INTEGER,
INTENT(IN) :: imin
379 INTEGER,
INTENT(IN) :: tstep
380 INTEGER,
INTENT(IN) :: dt_since_start
381 INTEGER,
INTENT(IN) :: LAIType(nvegsurf)
382 INTEGER,
INTENT(IN) :: Ie_end
383 INTEGER,
INTENT(IN) :: Ie_start
384 INTEGER,
INTENT(IN) :: LAICalcYes
385 INTEGER,
INTENT(IN) :: WaterUseMethod
386 INTEGER,
INTENT(in) :: DayofWeek_id(3)
388 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_DecTr
389 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_EveTr
390 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_Grass
391 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_DecTr
392 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_EveTr
393 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_Grass
394 REAL(KIND(1D0)),
INTENT(IN) :: BaseT(nvegsurf)
395 REAL(KIND(1D0)),
INTENT(IN) :: BaseTe(nvegsurf)
396 REAL(KIND(1D0)),
INTENT(IN) :: CapMax_dec
397 REAL(KIND(1D0)),
INTENT(IN) :: CapMin_dec
398 REAL(KIND(1D0)),
INTENT(IN) :: DayWat(7)
399 REAL(KIND(1D0)),
INTENT(IN) :: DayWatPer(7)
400 REAL(KIND(1D0)),
INTENT(IN) :: Faut
401 REAL(KIND(1D0)),
INTENT(IN) :: GDDFull(nvegsurf)
402 REAL(KIND(1D0)),
INTENT(IN) :: Ie_a(3)
403 REAL(KIND(1D0)),
INTENT(IN) :: Ie_m(3)
404 REAL(KIND(1D0)),
INTENT(IN) :: LAIMax(nvegsurf)
405 REAL(KIND(1D0)),
INTENT(IN) :: LAIMin(nvegsurf)
406 REAL(KIND(1D0)),
INTENT(IN) :: LAIPower(4, nvegsurf)
407 REAL(KIND(1D0)),
INTENT(IN) :: lat
408 REAL(KIND(1D0)),
INTENT(IN) :: PorMax_dec
409 REAL(KIND(1D0)),
INTENT(IN) :: PorMin_dec
410 REAL(KIND(1D0)),
INTENT(IN) :: SDDFull(nvegsurf)
411 REAL(KIND(1D0)),
INTENT(IN) :: LAI_obs
412 REAL(KIND(1D0)),
INTENT(IN) :: Tmin_id
413 REAL(KIND(1D0)),
INTENT(IN) :: Tmax_id
414 REAL(KIND(1D0)),
INTENT(IN) :: lenDay_id
415 REAL(KIND(1D0)),
INTENT(IN) :: H_maintain
416 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: state_id
417 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: soilstore_id
418 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap
420 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(INOUT) :: GDD_id
421 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(INOUT) :: SDD_id
422 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(INOUT) :: HDD_id
423 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(INOUT) :: LAI_id
426 REAL(KIND(1D0)),
DIMENSION(nvegsurf) :: LAI_id_in
428 REAL(KIND(1D0)),
DIMENSION(9),
INTENT(OUT) :: WUDay_id
429 REAL(KIND(1D0)),
INTENT(OUT) :: deltaLAI
431 REAL(KIND(1D0)),
INTENT(INOUT) :: DecidCap_id
432 REAL(KIND(1D0)),
INTENT(INOUT) :: albDecTr_id
433 REAL(KIND(1D0)),
INTENT(INOUT) :: albEveTr_id
434 REAL(KIND(1D0)),
INTENT(INOUT) :: albGrass_id
435 REAL(KIND(1D0)),
INTENT(INOUT) :: porosity_id
437 REAL(KIND(1D0)),
DIMENSION(6, nsurf),
INTENT(inout) :: StoreDrainPrm
441 dt_since_start, it, imin, tstep, &
446 id, waterusemethod, dayofweek_id, lat, faut, hdd_id, &
447 state_id, soilstore_id, soilstorecap, h_maintain, &
448 ie_a, ie_m, ie_start, ie_end, daywatper, daywat, &
465 tmin_id, tmax_id, lenday_id, &
468 laimin, laimax, laipower, laitype, &
475 albmax_dectr, albmax_evetr, albmax_grass, &
476 albmin_dectr, albmin_evetr, albmin_grass, &
477 capmax_dec, capmin_dec, &
478 pormax_dec, pormin_dec, &
503 BaseT_Heating, BaseT_Cooling, &
505 Tmin_id, Tmax_id, lenDay_id, & !inout
510 INTEGER,
INTENT(IN) :: BaseTMethod
511 INTEGER,
DIMENSION(3),
INTENT(in) :: DayofWeek_id
513 REAL(KIND(1D0)),
INTENT(IN) :: avkdn
514 REAL(KIND(1D0)),
INTENT(IN) :: Temp_C
515 REAL(KIND(1D0)),
INTENT(IN) :: Precip
516 REAL(KIND(1D0)),
INTENT(IN) :: BaseT_HC
517 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(IN) :: BaseT_Heating
518 REAL(KIND(1D0)),
DIMENSION(2),
INTENT(IN) :: BaseT_Cooling
519 REAL(KIND(1D0)),
INTENT(IN) :: nsh_real
520 REAL(KIND(1D0)),
INTENT(INOUT) :: Tmin_id
521 REAL(KIND(1D0)),
INTENT(INOUT) :: Tmax_id
522 REAL(KIND(1D0)),
INTENT(INOUT) :: lenDay_id
530 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(INOUT) :: HDD_id
534 REAL(KIND(1D0)) :: dT_heating
535 REAL(KIND(1D0)) :: dT_cooling
537 REAL(KIND(1D0)) :: BaseT_Heating_use
538 REAL(KIND(1D0)) :: BaseT_Cooling_use
542 IF (dayofweek_id(1) == 1 .OR. dayofweek_id(1) == 7) iu = 2
544 SELECT CASE (basetmethod)
546 baset_heating_use = baset_hc
547 baset_cooling_use = baset_hc
549 baset_heating_use = baset_heating(iu)
550 baset_cooling_use = baset_cooling(iu)
553 CALL errorhint(75,
"RunControl.nml", -999, -999, -999)
558 tmin_id = min(temp_c, tmin_id)
559 tmax_id = max(temp_c, tmax_id)
561 lenday_id = lenday_id + 1/nsh_real
566 dt_heating = baset_heating_use - temp_c
567 dt_cooling = temp_c - baset_cooling_use
569 hdd_id(1) = hdd_id(1) + merge(dt_heating, 0d0, dt_heating >= 0)
570 hdd_id(2) = hdd_id(2) + merge(dt_cooling, 0d0, dt_cooling >= 0)
571 hdd_id(3) = hdd_id(3) + temp_c
573 hdd_id(5) = hdd_id(5) + precip
579 LAImax, LAIMin, & !input
580 AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, &
581 AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, &
582 CapMax_dec, CapMin_dec, &
583 PorMax_dec, PorMin_dec, &
584 LAI_id, LAI_id_prev, &
585 DecidCap_id, & !inout
596 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAImax
597 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMin
599 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_DecTr
600 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_EveTr
601 REAL(KIND(1D0)),
INTENT(IN) :: AlbMax_Grass
602 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_DecTr
603 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_EveTr
604 REAL(KIND(1D0)),
INTENT(IN) :: AlbMin_Grass
605 REAL(KIND(1D0)),
INTENT(IN) :: CapMax_dec
606 REAL(KIND(1D0)),
INTENT(IN) :: CapMin_dec
607 REAL(KIND(1D0)),
INTENT(IN) :: PorMax_dec
608 REAL(KIND(1D0)),
INTENT(IN) :: PorMin_dec
609 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAI_id, LAI_id_prev
611 REAL(KIND(1D0)),
INTENT(INOUT) :: DecidCap_id
612 REAL(KIND(1D0)),
INTENT(INOUT) :: albDecTr_id
613 REAL(KIND(1D0)),
INTENT(INOUT) :: albEveTr_id
614 REAL(KIND(1D0)),
INTENT(INOUT) :: albGrass_id
615 REAL(KIND(1D0)),
INTENT(INOUT) :: porosity_id
617 REAL(KIND(1D0)),
DIMENSION(6, nsurf),
INTENT(inout) :: StoreDrainPrm
619 REAL(KIND(1D0)),
INTENT(OUT) :: deltaLAI
623 REAL(KIND(1D0)) :: albChangeDecTr
624 REAL(KIND(1D0)) :: albChangeEveTr
625 REAL(KIND(1D0)) :: albChangeGrass
626 REAL(KIND(1D0)) :: CapChange
628 REAL(KIND(1D0)) :: deltaLAIEveTr
629 REAL(KIND(1D0)) :: deltaLAIGrass
630 REAL(KIND(1D0)) :: porChange
647 IF ((lai_id(iv) - lai_id_prev(iv)) /= 0)
THEN
648 deltalai = (lai_id(iv) - lai_id_prev(iv))/(laimax(iv) - laimin(iv))
649 albchangedectr = (albmax_dectr - albmin_dectr)*deltalai
650 capchange = (capmin_dec - capmax_dec)*deltalai
651 porchange = (pormin_dec - pormax_dec)*deltalai
655 IF ((lai_id(iv) - lai_id_prev(iv)) /= 0)
THEN
656 deltalaievetr = (lai_id(iv) - lai_id_prev(iv))/(laimax(iv) - laimin(iv))
657 albchangeevetr = (albmax_evetr - albmin_evetr)*deltalaievetr
661 IF ((lai_id(iv) - lai_id_prev(iv)) /= 0)
THEN
662 deltalaigrass = (lai_id(iv) - lai_id_prev(iv))/(laimax(iv) - laimin(iv))
663 albchangegrass = (albmax_grass - albmin_grass)*deltalaigrass
670 decidcap_id = decidcap_id - capchange
671 storedrainprm(6,
decidsurf) = decidcap_id
672 porosity_id = porosity_id + porchange
678 albdectr_id = albdectr_id + albchangedectr
679 albevetr_id = albevetr_id + albchangeevetr
680 albgrass_id = albgrass_id + albchangegrass
685 id, LAICalcYes, & !input
687 Tmin_id_prev, Tmax_id_prev, lenDay_id_prev, &
690 LAIMin, LAIMax, LAIPower, LAIType, &
692 GDD_id, SDD_id, & !inout
701 INTEGER,
INTENT(IN) :: id
702 INTEGER,
INTENT(IN) :: LAICalcYes
704 REAL(KIND(1D0)),
INTENT(IN) :: lat
705 REAL(KIND(1D0)),
INTENT(IN) :: LAI_obs
706 REAL(KIND(1D0)),
INTENT(IN) :: Tmin_id_prev
707 REAL(KIND(1D0)),
INTENT(IN) :: Tmax_id_prev
708 REAL(KIND(1D0)),
INTENT(IN) :: lenDay_id_prev
712 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseT
713 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseTe
714 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: GDDFull
715 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: SDDFull
716 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMin
717 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMax
718 REAL(KIND(1D0)),
DIMENSION(4, nvegsurf),
INTENT(IN) :: LAIPower
720 INTEGER,
DIMENSION(nvegsurf),
INTENT(IN) :: LAIType
722 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(INOUT) :: GDD_id
723 REAL(KIND(1D0)),
DIMENSION(3),
INTENT(INOUT) :: SDD_id
724 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(OUT) :: LAI_id_next
725 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAI_id_prev
727 REAL(KIND(1D0)) :: delta_SDD
728 REAL(KIND(1D0)) :: delta_GDD
729 REAL(KIND(1D0)) :: indHelp
730 REAL(KIND(1D0)),
DIMENSION(3) :: GDD_id_prev
731 REAL(KIND(1D0)),
DIMENSION(3) :: SDD_id_prev
746 delta_gdd = ((tmin_id_prev + tmax_id_prev)/2 - baset(iv))
747 delta_sdd = ((tmin_id_prev + tmax_id_prev)/2 - basete(iv))
751 IF (delta_gdd < 0)
THEN
756 IF (delta_sdd > 0) delta_sdd = 0
759 gdd_id(iv) = gdd_id_prev(iv) + delta_gdd
760 sdd_id(iv) = sdd_id_prev(iv) + delta_sdd
763 IF (sdd_id(iv) <= sddfull(iv) .AND. indhelp < 0)
THEN
767 IF (gdd_id(iv) >= gddfull(iv))
THEN
768 gdd_id(iv) = gddfull(iv)
769 IF (sdd_id(iv) < -critdays) gdd_id(iv) = 0
772 IF (sdd_id(iv) <= sddfull(iv))
THEN
773 sdd_id(iv) = sddfull(iv)
774 IF (gdd_id(iv) > critdays) sdd_id(iv) = 0
778 IF (sdd_id(iv) < -critdays .AND. sdd_id(iv) > sddfull(iv)) gdd_id(iv) = 0
779 IF (gdd_id(iv) > critdays .AND. gdd_id(iv) < gddfull(iv)) sdd_id(iv) = 0
784 IF (id == 140 .AND. sdd_id(iv) /= 0) sdd_id(iv) = 0
786 IF (gdd_id(iv) > critdays .AND. id < 170) sdd_id(iv) = 0
788 IF (sdd_id(iv) < -critdays .AND. id > 170) gdd_id(iv) = 0
790 IF (laitype(iv) < 0.5)
THEN
791 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN
792 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
793 ELSEIF (sdd_id(iv) < 0 .AND. sdd_id(iv) > sddfull(iv))
THEN
794 lai_id_next(iv) = (lai_id_prev(iv)**laipower(3, iv)*sdd_id(iv)*laipower(4, iv)) + lai_id_prev(iv)
796 lai_id_next(iv) = lai_id_prev(iv)
798 ELSEIF (laitype(iv) >= 0.5)
THEN
799 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN
800 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
802 ELSEIF (lenday_id_prev <= 12 .AND. sdd_id(iv) > sddfull(iv))
THEN
803 lai_id_next(iv) = (lai_id_prev(iv)*laipower(3, iv)*(1 - sdd_id(iv))*laipower(4, iv)) + lai_id_prev(iv)
805 lai_id_next(iv) = lai_id_prev(iv)
809 ELSEIF (lat < 0)
THEN
811 IF (id == 300 .AND. sdd_id(iv) /= 0) sdd_id(iv) = 0
813 IF (gdd_id(iv) > critdays .AND. id > 250) sdd_id(iv) = 0
815 IF (sdd_id(iv) < -critdays .AND. id < 250) gdd_id(iv) = 0
817 IF (laitype(iv) < 0.5)
THEN
818 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN
819 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
820 ELSEIF (sdd_id(iv) < 0 .AND. sdd_id(iv) > sddfull(iv))
THEN
821 lai_id_next(iv) = (lai_id_prev(iv)**laipower(3, iv)*sdd_id(iv)*laipower(4, iv)) + lai_id_prev(iv)
823 lai_id_next(iv) = lai_id_prev(iv)
826 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN
827 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
829 ELSEIF (sdd_id(iv) < 0 .AND. sdd_id(iv) > sddfull(iv))
THEN
830 lai_id_next(iv) = (lai_id_prev(iv)*laipower(3, iv)*(1 - sdd_id(iv))*laipower(4, iv)) + lai_id_prev(iv)
832 lai_id_next(iv) = lai_id_prev(iv)
838 IF (lai_id_next(iv) > laimax(iv))
THEN
839 lai_id_next(iv) = laimax(iv)
840 ELSEIF (lai_id_next(iv) < laimin(iv))
THEN
841 lai_id_next(iv) = laimin(iv)
846 IF (laicalcyes == 0)
THEN
848 lai_id_next = lai_obs
855 id, WaterUseMethod, DayofWeek_id, lat, FrIrriAuto, HDD_id, & !input
856 state_id, soilstore_id, SoilStoreCap, H_maintain, & !input
857 Ie_a, Ie_m, Ie_start, Ie_end, DayWatPer, DayWat, &
862 INTEGER,
INTENT(IN) :: id
863 INTEGER,
INTENT(IN) :: WaterUseMethod
864 INTEGER,
INTENT(IN) :: Ie_start
865 INTEGER,
INTENT(IN) :: Ie_end
866 INTEGER,
DIMENSION(3),
INTENT(IN) :: DayofWeek_id
868 REAL(KIND(1D0)),
INTENT(IN) :: lat
869 REAL(KIND(1D0)),
INTENT(IN) :: FrIrriAuto
871 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(IN) :: HDD_id
872 REAL(KIND(1D0)),
DIMENSION(NVegSurf),
INTENT(IN) :: Ie_a
873 REAL(KIND(1D0)),
DIMENSION(NVegSurf),
INTENT(IN) :: Ie_m
874 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: DayWatPer
875 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: DayWat
878 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: state_id
879 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(IN) :: soilstore_id
880 REAL(KIND(1D0)),
DIMENSION(nsurf),
INTENT(in) :: SoilStoreCap
881 REAL(KIND(1D0)),
INTENT(IN) :: H_maintain
883 REAL(KIND(1D0)),
DIMENSION(9),
INTENT(OUT) :: WUDay_id
885 REAL(KIND(1D0)),
DIMENSION(3) :: h_need
886 REAL(KIND(1D0)),
DIMENSION(3) :: store_total
887 REAL(KIND(1D0)),
DIMENSION(3) :: WUDay_P
888 REAL(KIND(1D0)),
DIMENSION(3) :: WUDay_A
889 REAL(KIND(1D0)),
DIMENSION(3) :: WUDay_M
890 REAL(KIND(1D0)),
DIMENSION(3) :: WUDay_total
896 REAL(KIND(1D0)) :: temp_avg
897 REAL(KIND(1D0)) :: days_since_rain
901 days_since_rain = hdd_id(12)
906 IF (waterusemethod == 0)
THEN
910 IF (daywat(wd) == 1.0)
THEN
913 IF (id >= ie_start - 1 .AND. id <= ie_end + 1) calc = 1
916 IF (id >= ie_end .AND. id <= ie_start) calc = 0
926 h_need = soilstorecap(3:5) + h_maintain
927 store_total = state_id(3:5) + soilstore_id(3:5)
928 wuday_p = h_need - store_total
929 wuday_p = merge(wuday_p, 0d0, wuday_p > 0)
932 wuday_a = frirriauto*(ie_a(1) + ie_a(2)*temp_avg + ie_a(3)*days_since_rain)*daywatper(wd)
933 wuday_a = merge(wuday_a, 0d0, wuday_a > 0)
935 wuday_a = wuday_a + wuday_p
938 wuday_m = (1 - frirriauto)*(ie_m(1) + ie_m(2)*temp_avg + ie_m(3)*days_since_rain)*daywatper(wd)
939 wuday_m = merge(wuday_m, 0d0, wuday_m > 0)
942 wuday_total = wuday_p + wuday_a + wuday_m
945 wuday_id([((i - 1)*3 + 1, i=1, 3)]) = wuday_total
946 wuday_id([((i - 1)*3 + 2, i=1, 3)]) = wuday_a
947 wuday_id([((i - 1)*3 + 3, i=1, 3)]) = wuday_m
958 dt_since_start, it, imin, tstep, & !input
961 INTEGER,
INTENT(IN) :: dt_since_start, it, imin, tstep
963 REAL(KIND(1D0)),
DIMENSION(12),
INTENT(INOUT) :: HDD_id
967 REAL(KIND(1D0)) :: tstepcount
970 tstepcount = (it*60 + imin)*60/tstep*1.
972 hdd_id(1) = hdd_id(1)/tstepcount
973 hdd_id(2) = hdd_id(2)/tstepcount
974 hdd_id(3) = hdd_id(3)/tstepcount
978 floor(dt_since_start/(24*60*60)*1.))
979 hdd_id(4) = (hdd_id(4)*days_prev + hdd_id(3))/(days_prev + 1)
982 IF (hdd_id(5) > 0)
THEN
985 hdd_id(6) = hdd_id(6) + 1
989 hdd_id(6 + 1:6 + 6) = hdd_id(1:6)
997 INTEGER,
INTENT(IN) :: it
998 INTEGER,
INTENT(IN) :: imin
1000 REAL(KIND(1D0)),
DIMENSION(6),
INTENT(INOUT) :: HDD_id
1001 REAL(KIND(1D0)) :: HDD_id_mav, HDD_id_daysSR
1005 hdd_id_mav = hdd_id(4)
1007 hdd_id_dayssr = hdd_id(6)
1008 IF (it == 0 .AND. imin == 0)
THEN
1010 hdd_id(4) = hdd_id_mav
1011 hdd_id(6) = hdd_id_dayssr
1017 id, datetimeline, & !input
1018 Gridiv, NumberOfGrids, &
1025 INTEGER,
INTENT(IN) :: id
1029 REAL(KIND(1D0)),
DIMENSION(5),
INTENT(IN) :: datetimeline
1031 INTEGER,
INTENT(IN) :: Gridiv
1032 INTEGER,
INTENT(IN) :: NumberOfGrids
1033 REAL(KIND(1D0)),
DIMENSION(ncolumnsDataOutDailyState - 5),
INTENT(IN) :: DailyStateLine
1034 REAL(KIND(1D0)),
DIMENSION(ndays, ncolumnsDataOutDailyState, NumberOfGrids),
INTENT(INOUT) :: dataOutDailyState
1037 dataoutdailystate(id, 1:5, gridiv) = datetimeline
1045 it, imin, nsh_real, & !input
1046 GDD_id, HDD_id, LAI_id, &
1048 Tmin_id, Tmax_id, lenday_id, &
1055 deltaLAI, VegPhenLumps, &
1056 SnowAlb, SnowDens, &
1064 INTEGER,
INTENT(IN) :: it
1065 INTEGER,
INTENT(IN) :: imin
1066 REAL(KIND(1D0)),
INTENT(IN) :: nsh_real
1068 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: GDD_id
1069 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: SDD_id
1070 REAL(KIND(1D0)),
DIMENSION(6),
INTENT(IN) :: HDD_id
1071 REAL(KIND(1D0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAI_id
1073 REAL(KIND(1D0)),
INTENT(IN) :: DecidCap_id
1074 REAL(KIND(1D0)),
INTENT(IN) :: albDecTr_id
1075 REAL(KIND(1D0)),
INTENT(IN) :: albEveTr_id
1076 REAL(KIND(1D0)),
INTENT(IN) :: albGrass_id
1077 REAL(KIND(1D0)),
INTENT(IN) :: porosity_id
1078 REAL(KIND(1D0)),
INTENT(IN) :: Tmin_id
1079 REAL(KIND(1D0)),
INTENT(IN) :: Tmax_id
1080 REAL(KIND(1D0)),
INTENT(IN) :: lenday_id
1081 REAL(KIND(1D0)),
DIMENSION(9),
INTENT(IN) :: WUDay_id
1083 REAL(KIND(1D0)),
INTENT(IN) :: deltaLAI
1084 REAL(KIND(1D0)),
INTENT(IN) :: VegPhenLumps
1085 REAL(KIND(1D0)),
INTENT(IN) :: SnowAlb
1086 REAL(KIND(1D0)),
DIMENSION(7),
INTENT(IN) :: SnowDens
1087 REAL(KIND(1D0)),
INTENT(IN) :: a1
1088 REAL(KIND(1D0)),
INTENT(IN) :: a2
1089 REAL(KIND(1D0)),
INTENT(IN) :: a3
1091 REAL(KIND(1D0)),
DIMENSION(ncolumnsDataOutDailyState - 5),
INTENT(OUT) :: DailyStateLine
1094 dailystateline = -999
1095 IF (it == 23 .AND. imin == (nsh_real - 1)/nsh_real*60)
THEN
1107 dailystateline = [hdd_id, gdd_id, sdd_id, tmin_id, tmax_id, lenday_id, lai_id, decidcap_id, porosity_id, &
1108 albevetr_id, albdectr_id, albgrass_id, wuday_id, deltalai, vegphenlumps, snowalb, snowdens, &
integer, parameter ivgrass
integer, parameter nvegsurf
integer, parameter ivdecid
integer, parameter ncolumnsdataoutdailystate
integer, parameter ivconif
integer, parameter decidsurf
subroutine update_gddlai(id, LAICalcYes, lat, LAI_obs, Tmin_id_prev, Tmax_id_prev, lenDay_id_prev, BaseT, BaseTe, GDDFull, SDDFull, LAIMin, LAIMax, LAIPower, LAIType, LAI_id_prev, GDD_id, SDD_id, LAI_id_next)
subroutine suews_cal_dailystate(iy, id, it, imin, isec, tstep, tstep_prev, dt_since_start, DayofWeek_id, Tmin_id_prev, Tmax_id_prev, lenDay_id_prev, BaseTMethod, WaterUseMethod, Ie_start, Ie_end, LAICalcYes, LAIType, nsh_real, avkdn, Temp_C, Precip, BaseT_HC, BaseT_Heating, BaseT_Cooling, lat, Faut, LAI_obs, AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, CapMax_dec, CapMin_dec, PorMax_dec, PorMin_dec, Ie_a, Ie_m, DayWatPer, DayWat, BaseT, BaseTe, GDDFull, SDDFull, LAIMin, LAIMax, LAIPower, DecidCap_id_prev, StoreDrainPrm_prev, LAI_id_prev, GDD_id_prev, SDD_id_prev, albDecTr_id_prev, albEveTr_id_prev, albGrass_id_prev, porosity_id_prev, HDD_id_prev, state_id, soilstore_id, SoilStoreCap, H_maintain, HDD_id_next, Tmin_id_next, Tmax_id_next, lenDay_id_next, albDecTr_id_next, albEveTr_id_next, albGrass_id_next, porosity_id_next, DecidCap_id_next, StoreDrainPrm_next, LAI_id_next, GDD_id_next, SDD_id_next, deltaLAI, WUDay_id)
subroutine update_hdd(dt_since_start, it, imin, tstep, HDD_id)
subroutine update_dailystate_day(BaseTMethod, DayofWeek_id, avkdn, Temp_C, Precip, BaseT_HC, BaseT_Heating, BaseT_Cooling, nsh_real, Tmin_id, Tmax_id, lenDay_id, HDD_id)
subroutine update_dailystateline(it, imin, nsh_real, GDD_id, HDD_id, LAI_id, SDD_id, Tmin_id, Tmax_id, lenday_id, DecidCap_id, albDecTr_id, albEveTr_id, albGrass_id, porosity_id, WUDay_id, deltaLAI, VegPhenLumps, SnowAlb, SnowDens, a1, a2, a3, DailyStateLine)
subroutine update_wateruse(id, WaterUseMethod, DayofWeek_id, lat, FrIrriAuto, HDD_id, state_id, soilstore_id, SoilStoreCap, H_maintain, Ie_a, Ie_m, Ie_start, Ie_end, DayWatPer, DayWat, WUDay_id)
subroutine update_dailystate_start(it, imin, HDD_id)
subroutine update_veg(LAImax, LAIMin, AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, CapMax_dec, CapMin_dec, PorMax_dec, PorMin_dec, LAI_id, LAI_id_prev, DecidCap_id, albDecTr_id, albEveTr_id, albGrass_id, porosity_id, StoreDrainPrm, deltaLAI)
subroutine update_dailystate_end(id, it, imin, tstep, dt_since_start, Tmin_id, Tmax_id, lenDay_id, LAIType, Ie_end, Ie_start, LAICalcYes, WaterUseMethod, DayofWeek_id, AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, BaseT, BaseTe, CapMax_dec, CapMin_dec, DayWat, DayWatPer, Faut, GDDFull, Ie_a, Ie_m, LAIMax, LAIMin, LAIPower, lat, PorMax_dec, PorMin_dec, SDDFull, LAI_obs, state_id, soilstore_id, SoilStoreCap, H_maintain, GDD_id, SDD_id, HDD_id, LAI_id, DecidCap_id, albDecTr_id, albEveTr_id, albGrass_id, porosity_id, StoreDrainPrm, WUDay_id, deltaLAI)
subroutine suews_update_dailystate(id, datetimeline, Gridiv, NumberOfGrids, DailyStateLine, dataOutDailyState)
subroutine errorhint(errh, ProblemFile, VALUE, value2, valueI)