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, &
60 WaterUseMethod, Ie_start, Ie_end, &
61 LAICalcYes, LAIType, &
62 nsh_real, avkdn, Temp_C, Precip, BaseTHDD, &
64 AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, &
65 AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, &
66 CapMax_dec, CapMin_dec, PorMax_dec, PorMin_dec, &
67 Ie_a, Ie_m, DayWatPer, DayWat, &
68 BaseT, BaseTe, GDDFull, SDDFull, LAIMin, LAIMax, LAIPower, &
69 DecidCap_id_prev, StoreDrainPrm_prev, LAI_id_prev, GDD_id_prev, SDD_id_prev, &
70 albDecTr_id_prev, albEveTr_id_prev, albGrass_id_prev, porosity_id_prev, &!input
73 Tmin_id_next, Tmax_id_next, lenDay_id_next, &
74 albDecTr_id_next, albEveTr_id_next, albGrass_id_next, porosity_id_next, &!output
75 DecidCap_id_next, StoreDrainPrm_next, LAI_id_next, GDD_id_next, SDD_id_next, deltaLAI, WUDay_id)
82 INTEGER,
INTENT(IN)::iy
83 INTEGER,
INTENT(IN)::id
84 INTEGER,
INTENT(IN)::it
85 INTEGER,
INTENT(IN)::imin
86 INTEGER,
INTENT(IN)::isec
87 INTEGER,
INTENT(IN)::tstep
88 INTEGER,
INTENT(IN)::tstep_prev
89 INTEGER,
INTENT(IN)::dt_since_start
91 INTEGER,
INTENT(IN)::WaterUseMethod
92 INTEGER,
INTENT(IN)::Ie_start
93 INTEGER,
INTENT(IN)::Ie_end
94 INTEGER,
INTENT(IN)::LAICalcYes
96 INTEGER,
DIMENSION(nvegsurf),
INTENT(IN):: LAIType
98 REAL(KIND(1d0)),
INTENT(IN)::nsh_real
99 REAL(KIND(1d0)),
INTENT(IN)::avkdn
100 REAL(KIND(1d0)),
INTENT(IN)::Temp_C
101 REAL(KIND(1d0)),
INTENT(IN)::Precip
102 REAL(KIND(1d0)),
INTENT(IN)::BaseTHDD
103 REAL(KIND(1d0)),
INTENT(IN)::lat
104 REAL(KIND(1d0)),
INTENT(IN)::Faut
105 REAL(KIND(1d0)),
INTENT(IN)::LAI_obs
113 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_DecTr
114 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_EveTr
115 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_Grass
116 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_DecTr
117 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_EveTr
118 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_Grass
119 REAL(KIND(1d0)),
INTENT(IN)::CapMax_dec
120 REAL(KIND(1d0)),
INTENT(IN)::CapMin_dec
121 REAL(KIND(1d0)),
INTENT(IN)::PorMax_dec
122 REAL(KIND(1d0)),
INTENT(IN)::PorMin_dec
125 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN) ::Ie_a
126 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN) ::Ie_m
127 REAL(KIND(1d0)),
DIMENSION(7),
INTENT(IN) ::DayWatPer
128 REAL(KIND(1d0)),
DIMENSION(7),
INTENT(IN) ::DayWat
131 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) ::BaseT
132 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) ::BaseTe
133 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) ::GDDFull
134 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) ::SDDFull
135 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) ::LAIMin
136 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) ::LAIMax
137 REAL(KIND(1d0)),
DIMENSION(4, nvegsurf),
INTENT(IN) ::LAIPower
141 REAL(KIND(1d0)),
DIMENSION(3) :: GDD_id
142 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN) :: GDD_id_prev
143 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(OUT) :: GDD_id_next
144 REAL(KIND(1d0)),
DIMENSION(3) :: SDD_id
145 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN) :: SDD_id_prev
146 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(OUT) :: SDD_id_next
147 REAL(KIND(1d0)),
DIMENSION(3) :: LAI_id
148 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN) :: LAI_id_prev
149 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(OUT) :: LAI_id_next
150 REAL(KIND(1d0)),
DIMENSION(12) :: HDD_id
151 REAL(KIND(1d0)),
DIMENSION(12),
INTENT(IN) :: HDD_id_prev
152 REAL(KIND(1d0)),
DIMENSION(12),
INTENT(OUT) :: HDD_id_next
153 REAL(KIND(1d0)),
DIMENSION(9),
INTENT(OUT) :: WUDay_id
197 INTEGER,
DIMENSION(3),
INTENT(in)::DayofWeek_id
199 REAL(KIND(1d0))::Tmin_id
200 REAL(KIND(1d0)),
INTENT(IN)::Tmin_id_prev
201 REAL(KIND(1d0)),
INTENT(out)::Tmin_id_next
202 REAL(KIND(1d0))::Tmax_id
203 REAL(KIND(1d0)),
INTENT(in)::Tmax_id_prev
204 REAL(KIND(1d0)),
INTENT(out)::Tmax_id_next
205 REAL(KIND(1d0))::lenDay_id
206 REAL(KIND(1d0)),
INTENT(IN)::lenDay_id_prev
207 REAL(KIND(1d0)),
INTENT(out)::lenDay_id_next
210 REAL(KIND(1d0)),
INTENT(OUT)::deltaLAI
213 REAL(KIND(1d0)):: DecidCap_id
214 REAL(KIND(1d0)),
INTENT(IN):: DecidCap_id_prev
215 REAL(KIND(1d0)),
INTENT(OUT):: DecidCap_id_next
216 REAL(KIND(1d0)):: albDecTr_id
217 REAL(KIND(1d0)),
INTENT(IN):: albDecTr_id_prev
218 REAL(KIND(1d0)),
INTENT(OUT):: albDecTr_id_next
219 REAL(KIND(1d0)):: albEveTr_id
220 REAL(KIND(1d0)),
INTENT(IN):: albEveTr_id_prev
221 REAL(KIND(1d0)),
INTENT(OUT):: albEveTr_id_next
222 REAL(KIND(1d0)):: albGrass_id
223 REAL(KIND(1d0)),
INTENT(IN):: albGrass_id_prev
224 REAL(KIND(1d0)),
INTENT(OUT):: albGrass_id_next
225 REAL(KIND(1d0)):: porosity_id
226 REAL(KIND(1d0)),
INTENT(INOUT):: porosity_id_prev
227 REAL(KIND(1d0)),
INTENT(INOUT):: porosity_id_next
228 REAL(KIND(1d0)),
DIMENSION(6, nsurf)::StoreDrainPrm
229 REAL(KIND(1d0)),
DIMENSION(6, nsurf),
INTENT(in)::StoreDrainPrm_prev
230 REAL(KIND(1d0)),
DIMENSION(6, nsurf),
INTENT(out)::StoreDrainPrm_next
232 LOGICAL :: first_tstep_Q
233 LOGICAL :: last_tstep_Q
234 TYPE(datetime) :: time_now, time_prev, time_next
240 tmin_id = tmin_id_prev
241 tmax_id = tmax_id_prev
242 lenday_id = lenday_id_prev
243 storedrainprm = storedrainprm_prev
244 decidcap_id = decidcap_id_prev
245 albdectr_id = albdectr_id_prev
246 albevetr_id = albevetr_id_prev
247 albgrass_id = albgrass_id_prev
248 porosity_id = porosity_id_prev
252 time_now = datetime(year=iy) + timedelta(days=id - 1, hours=it, minutes=imin, seconds=isec)
253 time_prev = time_now - timedelta(seconds=tstep_prev)
254 time_next = time_now + timedelta(seconds=tstep)
257 first_tstep_q = time_now%getDay() /= time_prev%getDay()
258 last_tstep_q = time_now%getDay() /= time_next%getDay()
262 IF (first_tstep_q)
THEN 281 tmin_id, tmax_id, lenday_id, &
294 IF (last_tstep_q)
THEN 296 id, it, imin, tstep, dt_since_start, &
297 tmin_id, tmax_id, lenday_id, &
298 laitype, ie_end, ie_start, laicalcyes, &
299 waterusemethod, dayofweek_id, &
300 albmax_dectr, albmax_evetr, albmax_grass, albmin_dectr, albmin_evetr, albmin_grass, &
301 baset, basete, capmax_dec, capmin_dec, daywat, daywatper, faut, gddfull, &
302 ie_a, ie_m, laimax, laimin, laipower, lat, pormax_dec, pormin_dec, sddfull, lai_obs, &
319 tmin_id_next = tmin_id
320 tmax_id_next = tmax_id
321 lenday_id_next = lenday_id
322 storedrainprm_next = storedrainprm
323 decidcap_id_next = decidcap_id
324 albdectr_id_next = albdectr_id
325 albevetr_id_next = albevetr_id
326 albgrass_id_next = albgrass_id
327 porosity_id_next = porosity_id
338 id, it, imin, tstep, dt_since_start, &!input
339 Tmin_id, Tmax_id, lenDay_id, &
340 LAIType, Ie_end, Ie_start, LAICalcYes, &
341 WaterUseMethod, DayofWeek_id, &
342 AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, &
343 BaseT, BaseTe, CapMax_dec, CapMin_dec, DayWat, DayWatPer, Faut, GDDFull, &
344 Ie_a, Ie_m, LAIMax, LAIMin, LAIPower, lat, PorMax_dec, PorMin_dec, SDDFull, LAI_obs, &
345 GDD_id, SDD_id, & !inout
357 INTEGER,
INTENT(IN)::id
358 INTEGER,
INTENT(IN)::it
359 INTEGER,
INTENT(IN)::imin
360 INTEGER,
INTENT(IN)::tstep
361 INTEGER,
INTENT(IN)::dt_since_start
362 INTEGER,
INTENT(IN)::LAIType(
nvegsurf)
363 INTEGER,
INTENT(IN)::Ie_end
364 INTEGER,
INTENT(IN)::Ie_start
365 INTEGER,
INTENT(IN)::LAICalcYes
366 INTEGER,
INTENT(IN)::WaterUseMethod
367 INTEGER,
INTENT(in)::DayofWeek_id(3)
369 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_DecTr
370 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_EveTr
371 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_Grass
372 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_DecTr
373 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_EveTr
374 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_Grass
375 REAL(KIND(1d0)),
INTENT(IN)::BaseT(
nvegsurf)
376 REAL(KIND(1d0)),
INTENT(IN)::BaseTe(
nvegsurf)
377 REAL(KIND(1d0)),
INTENT(IN)::CapMax_dec
378 REAL(KIND(1d0)),
INTENT(IN)::CapMin_dec
379 REAL(KIND(1d0)),
INTENT(IN)::DayWat(7)
380 REAL(KIND(1d0)),
INTENT(IN)::DayWatPer(7)
381 REAL(KIND(1d0)),
INTENT(IN)::Faut
382 REAL(KIND(1d0)),
INTENT(IN)::GDDFull(
nvegsurf)
383 REAL(KIND(1d0)),
INTENT(IN)::Ie_a(3)
384 REAL(KIND(1d0)),
INTENT(IN)::Ie_m(3)
385 REAL(KIND(1d0)),
INTENT(IN)::LAIMax(
nvegsurf)
386 REAL(KIND(1d0)),
INTENT(IN)::LAIMin(
nvegsurf)
387 REAL(KIND(1d0)),
INTENT(IN)::LAIPower(4,
nvegsurf)
388 REAL(KIND(1d0)),
INTENT(IN)::lat
389 REAL(KIND(1d0)),
INTENT(IN)::PorMax_dec
390 REAL(KIND(1d0)),
INTENT(IN)::PorMin_dec
391 REAL(KIND(1d0)),
INTENT(IN)::SDDFull(
nvegsurf)
392 REAL(KIND(1d0)),
INTENT(IN)::LAI_obs
393 REAL(KIND(1d0)),
INTENT(IN)::Tmin_id
394 REAL(KIND(1d0)),
INTENT(IN)::Tmax_id
395 REAL(KIND(1d0)),
INTENT(IN)::lenDay_id
397 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(INOUT) ::GDD_id
398 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(INOUT) ::SDD_id
399 REAL(KIND(1d0)),
DIMENSION(12),
INTENT(INOUT) ::HDD_id
400 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(INOUT)::LAI_id
403 REAL(KIND(1d0)),
DIMENSION(nvegsurf)::LAI_id_in
405 REAL(KIND(1d0)),
DIMENSION(9),
INTENT(OUT):: WUDay_id
406 REAL(KIND(1d0)),
INTENT(OUT)::deltaLAI
408 REAL(KIND(1d0)),
INTENT(INOUT):: DecidCap_id
409 REAL(KIND(1d0)),
INTENT(INOUT):: albDecTr_id
410 REAL(KIND(1d0)),
INTENT(INOUT):: albEveTr_id
411 REAL(KIND(1d0)),
INTENT(INOUT):: albGrass_id
412 REAL(KIND(1d0)),
INTENT(INOUT):: porosity_id
414 REAL(KIND(1d0)),
DIMENSION(6, nsurf),
INTENT(inout)::StoreDrainPrm
421 dt_since_start, it, imin, tstep, &
431 id, waterusemethod, dayofweek_id, lat, faut, hdd_id, &
432 ie_a, ie_m, ie_start, ie_end, daywatper, daywat, &
459 tmin_id, tmax_id, lenday_id, &
462 laimin, laimax, laipower, laitype, &
469 albmax_dectr, albmax_evetr, albmax_grass, &
470 albmin_dectr, albmin_evetr, albmin_grass, &
471 capmax_dec, capmin_dec, &
472 pormax_dec, pormin_dec, &
496 Tmin_id, Tmax_id, lenDay_id, &!inout
502 REAL(KIND(1d0)),
INTENT(IN)::avkdn
503 REAL(KIND(1d0)),
INTENT(IN)::Temp_C
504 REAL(KIND(1d0)),
INTENT(IN)::Precip
505 REAL(KIND(1d0)),
INTENT(IN)::BaseTHDD
506 REAL(KIND(1d0)),
INTENT(IN)::nsh_real
507 REAL(KIND(1d0)),
INTENT(INOUT)::Tmin_id
508 REAL(KIND(1d0)),
INTENT(INOUT)::Tmax_id
509 REAL(KIND(1d0)),
INTENT(INOUT)::lenDay_id
517 REAL(KIND(1d0)),
DIMENSION(12),
INTENT(INOUT):: HDD_id
524 tmin_id = min(temp_c, tmin_id)
525 tmax_id = max(temp_c, tmax_id)
527 lenday_id = lenday_id + 1/nsh_real
532 gamma1 = merge(1, 0, (basethdd - temp_c) >= 0)
533 gamma2 = merge(1, 0, (temp_c - basethdd) >= 0)
542 hdd_id(1) = hdd_id(1) + gamma1*(basethdd - temp_c)
543 hdd_id(2) = hdd_id(2) + gamma2*(temp_c - basethdd)
544 hdd_id(3) = hdd_id(3) + temp_c
546 hdd_id(5) = hdd_id(5) + precip
552 LAImax, LAIMin, &!input
553 AlbMax_DecTr, AlbMax_EveTr, AlbMax_Grass, &
554 AlbMin_DecTr, AlbMin_EveTr, AlbMin_Grass, &
555 CapMax_dec, CapMin_dec, &
556 PorMax_dec, PorMin_dec, &
557 LAI_id, LAI_id_prev, &
569 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN)::LAImax
570 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN)::LAIMin
572 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_DecTr
573 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_EveTr
574 REAL(KIND(1d0)),
INTENT(IN)::AlbMax_Grass
575 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_DecTr
576 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_EveTr
577 REAL(KIND(1d0)),
INTENT(IN)::AlbMin_Grass
578 REAL(KIND(1d0)),
INTENT(IN)::CapMax_dec
579 REAL(KIND(1d0)),
INTENT(IN)::CapMin_dec
580 REAL(KIND(1d0)),
INTENT(IN)::PorMax_dec
581 REAL(KIND(1d0)),
INTENT(IN)::PorMin_dec
582 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN)::LAI_id, LAI_id_prev
584 REAL(KIND(1d0)),
INTENT(INOUT)::DecidCap_id
585 REAL(KIND(1d0)),
INTENT(INOUT)::albDecTr_id
586 REAL(KIND(1d0)),
INTENT(INOUT)::albEveTr_id
587 REAL(KIND(1d0)),
INTENT(INOUT)::albGrass_id
588 REAL(KIND(1d0)),
INTENT(INOUT)::porosity_id
590 REAL(KIND(1d0)),
DIMENSION(6, nsurf),
INTENT(inout)::StoreDrainPrm
592 REAL(KIND(1d0)),
INTENT(OUT)::deltaLAI
596 REAL(KIND(1d0))::albChangeDecTr
597 REAL(KIND(1d0))::albChangeEveTr
598 REAL(KIND(1d0))::albChangeGrass
599 REAL(KIND(1d0))::CapChange
601 REAL(KIND(1d0))::deltaLAIEveTr
602 REAL(KIND(1d0))::deltaLAIGrass
603 REAL(KIND(1d0))::porChange
620 IF ((lai_id(iv) - lai_id_prev(iv)) /= 0)
THEN 621 deltalai = (lai_id(iv) - lai_id_prev(iv))/(laimax(iv) - laimin(iv))
622 albchangedectr = (albmax_dectr - albmin_dectr)*deltalai
623 capchange = (capmin_dec - capmax_dec)*deltalai
624 porchange = (pormin_dec - pormax_dec)*deltalai
628 IF ((lai_id(iv) - lai_id_prev(iv)) /= 0)
THEN 629 deltalaievetr = (lai_id(iv) - lai_id_prev(iv))/(laimax(iv) - laimin(iv))
630 albchangeevetr = (albmax_evetr - albmin_evetr)*deltalaievetr
634 IF ((lai_id(iv) - lai_id_prev(iv)) /= 0)
THEN 635 deltalaigrass = (lai_id(iv) - lai_id_prev(iv))/(laimax(iv) - laimin(iv))
636 albchangegrass = (albmax_grass - albmin_grass)*deltalaigrass
643 decidcap_id = decidcap_id - capchange
644 storedrainprm(6,
decidsurf) = decidcap_id
645 porosity_id = porosity_id + porchange
648 albdectr_id = min(max(albdectr_id + albchangedectr, albmin_dectr), albmax_dectr)
649 albevetr_id = min(max(albevetr_id + albchangeevetr, albmin_evetr), albmax_evetr)
650 albgrass_id = min(max(albgrass_id + albchangegrass, albmin_grass), albmax_grass)
658 id, LAICalcYes, & !input
662 LAIMin, LAIMax, LAIPower, LAIType, &
673 INTEGER,
INTENT(IN)::id
674 INTEGER,
INTENT(IN)::LAICalcYes
676 REAL(KIND(1d0)),
INTENT(IN)::lat
677 REAL(KIND(1d0)),
INTENT(IN)::LAI_obs
681 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseT
682 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseTe
683 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: GDDFull
684 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: SDDFull
685 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMin
686 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMax
687 REAL(KIND(1d0)),
DIMENSION(4, nvegsurf),
INTENT(IN):: LAIPower
689 INTEGER,
DIMENSION(nvegsurf),
INTENT(IN):: LAIType
691 REAL(KIND(1d0)),
DIMENSION(5),
INTENT(INOUT) :: GDD_id
692 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(OUT):: LAI_id_next
693 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN)::LAI_id_prev
697 REAL(KIND(1d0))::indHelp
698 REAL(KIND(1d0)),
DIMENSION(5)::GDD_id_prev
712 yes = ((gdd_id_prev(3) + gdd_id_prev(4))/2 - baset(iv))
713 no = ((gdd_id_prev(3) + gdd_id_prev(4))/2 - basete(iv))
725 gdd_id(1) = gdd_id_prev(1) + yes
726 gdd_id(2) = gdd_id_prev(2) + no
729 IF (gdd_id(2) <= sddfull(iv) .AND. indhelp < 0)
THEN 733 IF (gdd_id(1) >= gddfull(iv))
THEN 734 gdd_id(1) = gddfull(iv)
735 IF (gdd_id(2) < -critdays) gdd_id(1) = 0
738 IF (gdd_id(2) <= sddfull(iv))
THEN 739 gdd_id(2) = sddfull(iv)
740 IF (gdd_id(1) > critdays) gdd_id(2) = 0
744 IF (gdd_id(2) < -critdays .AND. gdd_id(2) > sddfull(iv)) gdd_id(1) = 0
745 IF (gdd_id(1) > critdays .AND. gdd_id(1) < gddfull(iv)) gdd_id(2) = 0
750 IF (id == 140 .AND. gdd_id(2) /= 0) gdd_id(2) = 0
752 IF (gdd_id(1) > critdays .AND. id < 170) gdd_id(2) = 0
754 IF (gdd_id(2) < -critdays .AND. id > 170) gdd_id(1) = 0
756 IF (laitype(iv) < 0.5)
THEN 757 IF (gdd_id(1) > 0 .AND. gdd_id(1) < gddfull(iv))
THEN 758 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(1)*laipower(2, iv)) + lai_id_prev(iv)
759 ELSEIF (gdd_id(2) < 0 .AND. gdd_id(2) > sddfull(iv))
THEN 760 lai_id_next(iv) = (lai_id_prev(iv)**laipower(3, iv)*gdd_id(2)*laipower(4, iv)) + lai_id_prev(iv)
762 lai_id_next(iv) = lai_id_prev(iv)
764 ELSEIF (laitype(iv) >= 0.5)
THEN 765 IF (gdd_id(1) > 0 .AND. gdd_id(1) < gddfull(iv))
THEN 766 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(1)*laipower(2, iv)) + lai_id_prev(iv)
768 ELSEIF (gdd_id(5) <= 12 .AND. gdd_id(2) > sddfull(iv))
THEN 769 lai_id_next(iv) = (lai_id_prev(iv)*laipower(3, iv)*(1 - gdd_id(2))*laipower(4, iv)) + lai_id_prev(iv)
771 lai_id_next(iv) = lai_id_prev(iv)
775 ELSEIF (lat < 0)
THEN 777 IF (id == 300 .AND. gdd_id(2) /= 0) gdd_id(2) = 0
779 IF (gdd_id(1) > critdays .AND. id > 250) gdd_id(2) = 0
781 IF (gdd_id(2) < -critdays .AND. id < 250) gdd_id(1) = 0
783 IF (laitype(iv) < 0.5)
THEN 784 IF (gdd_id(1) > 0 .AND. gdd_id(1) < gddfull(iv))
THEN 785 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(1)*laipower(2, iv)) + lai_id_prev(iv)
786 ELSEIF (gdd_id(2) < 0 .AND. gdd_id(2) > sddfull(iv))
THEN 787 lai_id_next(iv) = (lai_id_prev(iv)**laipower(3, iv)*gdd_id(2)*laipower(4, iv)) + lai_id_prev(iv)
789 lai_id_next(iv) = lai_id_prev(iv)
792 IF (gdd_id(1) > 0 .AND. gdd_id(1) < gddfull(iv))
THEN 793 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(1)*laipower(2, iv)) + lai_id_prev(iv)
795 ELSEIF (gdd_id(2) < 0 .AND. gdd_id(2) > sddfull(iv))
THEN 796 lai_id_next(iv) = (lai_id_prev(iv)*laipower(3, iv)*(1 - gdd_id(2))*laipower(4, iv)) + lai_id_prev(iv)
798 lai_id_next(iv) = lai_id_prev(iv)
804 IF (lai_id_next(iv) > laimax(iv))
THEN 805 lai_id_next(iv) = laimax(iv)
806 ELSEIF (lai_id_next(iv) < laimin(iv))
THEN 807 lai_id_next(iv) = laimin(iv)
812 IF (laicalcyes == 0)
THEN 814 lai_id_next = lai_obs
821 id, LAICalcYes, & !input
823 Tmin_id_prev, Tmax_id_prev, lenDay_id_prev, &
826 LAIMin, LAIMax, LAIPower, LAIType, &
828 GDD_id, SDD_id, &!inout
837 INTEGER,
INTENT(IN)::id
838 INTEGER,
INTENT(IN)::LAICalcYes
840 REAL(KIND(1d0)),
INTENT(IN)::lat
841 REAL(KIND(1d0)),
INTENT(IN)::LAI_obs
842 REAL(KIND(1d0)),
INTENT(IN)::Tmin_id_prev
843 REAL(KIND(1d0)),
INTENT(IN)::Tmax_id_prev
844 REAL(KIND(1d0)),
INTENT(IN)::lenDay_id_prev
848 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseT
849 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: BaseTe
850 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: GDDFull
851 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: SDDFull
852 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMin
853 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN) :: LAIMax
854 REAL(KIND(1d0)),
DIMENSION(4, nvegsurf),
INTENT(IN):: LAIPower
856 INTEGER,
DIMENSION(nvegsurf),
INTENT(IN):: LAIType
858 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(INOUT) :: GDD_id
859 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(INOUT) :: SDD_id
860 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(OUT):: LAI_id_next
861 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN)::LAI_id_prev
865 REAL(KIND(1d0))::indHelp
866 REAL(KIND(1d0)),
DIMENSION(3)::GDD_id_prev
867 REAL(KIND(1d0)),
DIMENSION(3)::SDD_id_prev
882 yes = ((tmin_id_prev + tmax_id_prev)/2 - baset(iv))
883 no = ((tmin_id_prev + tmax_id_prev)/2 - basete(iv))
895 gdd_id(iv) = gdd_id_prev(iv) + yes
896 sdd_id(iv) = sdd_id_prev(iv) + no
899 IF (sdd_id(iv) <= sddfull(iv) .AND. indhelp < 0)
THEN 903 IF (gdd_id(iv) >= gddfull(iv))
THEN 904 gdd_id(iv) = gddfull(iv)
905 IF (sdd_id(iv) < -critdays) gdd_id(iv) = 0
908 IF (sdd_id(iv) <= sddfull(iv))
THEN 909 sdd_id(iv) = sddfull(iv)
910 IF (gdd_id(iv) > critdays) sdd_id(iv) = 0
914 IF (sdd_id(iv) < -critdays .AND. sdd_id(iv) > sddfull(iv)) gdd_id(iv) = 0
915 IF (gdd_id(iv) > critdays .AND. gdd_id(iv) < gddfull(iv)) sdd_id(iv) = 0
920 IF (id == 140 .AND. sdd_id(iv) /= 0) sdd_id(iv) = 0
922 IF (gdd_id(iv) > critdays .AND. id < 170) sdd_id(iv) = 0
924 IF (sdd_id(iv) < -critdays .AND. id > 170) gdd_id(iv) = 0
926 IF (laitype(iv) < 0.5)
THEN 927 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN 928 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
929 ELSEIF (sdd_id(iv) < 0 .AND. sdd_id(iv) > sddfull(iv))
THEN 930 lai_id_next(iv) = (lai_id_prev(iv)**laipower(3, iv)*sdd_id(iv)*laipower(4, iv)) + lai_id_prev(iv)
932 lai_id_next(iv) = lai_id_prev(iv)
934 ELSEIF (laitype(iv) >= 0.5)
THEN 935 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN 936 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
938 ELSEIF (lenday_id_prev <= 12 .AND. sdd_id(iv) > sddfull(iv))
THEN 939 lai_id_next(iv) = (lai_id_prev(iv)*laipower(3, iv)*(1 - sdd_id(iv))*laipower(4, iv)) + lai_id_prev(iv)
941 lai_id_next(iv) = lai_id_prev(iv)
945 ELSEIF (lat < 0)
THEN 947 IF (id == 300 .AND. sdd_id(iv) /= 0) sdd_id(iv) = 0
949 IF (gdd_id(iv) > critdays .AND. id > 250) sdd_id(iv) = 0
951 IF (sdd_id(iv) < -critdays .AND. id < 250) gdd_id(iv) = 0
953 IF (laitype(iv) < 0.5)
THEN 954 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN 955 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
956 ELSEIF (sdd_id(iv) < 0 .AND. sdd_id(iv) > sddfull(iv))
THEN 957 lai_id_next(iv) = (lai_id_prev(iv)**laipower(3, iv)*sdd_id(iv)*laipower(4, iv)) + lai_id_prev(iv)
959 lai_id_next(iv) = lai_id_prev(iv)
962 IF (gdd_id(iv) > 0 .AND. gdd_id(iv) < gddfull(iv))
THEN 963 lai_id_next(iv) = (lai_id_prev(iv)**laipower(1, iv)*gdd_id(iv)*laipower(2, iv)) + lai_id_prev(iv)
965 ELSEIF (sdd_id(iv) < 0 .AND. sdd_id(iv) > sddfull(iv))
THEN 966 lai_id_next(iv) = (lai_id_prev(iv)*laipower(3, iv)*(1 - sdd_id(iv))*laipower(4, iv)) + lai_id_prev(iv)
968 lai_id_next(iv) = lai_id_prev(iv)
974 IF (lai_id_next(iv) > laimax(iv))
THEN 975 lai_id_next(iv) = laimax(iv)
976 ELSEIF (lai_id_next(iv) < laimin(iv))
THEN 977 lai_id_next(iv) = laimin(iv)
982 IF (laicalcyes == 0)
THEN 984 lai_id_next = lai_obs
991 id, WaterUseMethod, DayofWeek_id, lat, Faut, HDD_id, &!input
992 Ie_a, Ie_m, Ie_start, Ie_end, DayWatPer, DayWat, &
997 INTEGER,
INTENT(IN) :: id
998 INTEGER,
INTENT(IN) :: WaterUseMethod
999 INTEGER,
INTENT(IN)::Ie_start
1000 INTEGER,
INTENT(IN)::Ie_end
1001 INTEGER,
DIMENSION(3),
INTENT(IN)::DayofWeek_id
1003 REAL(KIND(1d0)),
INTENT(IN)::lat
1004 REAL(KIND(1d0)),
INTENT(IN)::Faut
1006 REAL(KIND(1d0)),
DIMENSION(12),
INTENT(IN)::HDD_id
1007 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN)::Ie_a
1008 REAL(KIND(1d0)),
DIMENSION(3),
INTENT(IN)::Ie_m
1009 REAL(KIND(1d0)),
DIMENSION(7),
INTENT(IN)::DayWatPer
1010 REAL(KIND(1d0)),
DIMENSION(7),
INTENT(IN)::DayWat
1012 REAL(KIND(1d0)),
DIMENSION(9),
INTENT(OUT):: WUDay_id
1017 REAL(KIND(1d0))::temp_avg
1018 REAL(KIND(1d0))::days_since_rain
1021 temp_avg = hdd_id(9)
1022 days_since_rain = hdd_id(12)
1027 IF (waterusemethod == 0)
THEN 1029 wd = dayofweek_id(1)
1031 IF (daywat(wd) == 1.0)
THEN 1034 IF (id >= ie_start - 1 .AND. id <= ie_end + 1) calc = 1
1037 IF (id >= ie_end .AND. id <= ie_start) calc = 0
1046 wuday_id(2) = faut*(ie_a(1) + ie_a(2)*temp_avg + ie_a(3)*days_since_rain)*daywatper(wd)
1047 IF (wuday_id(2) < 0) wuday_id(2) = 0
1050 wuday_id(3) = (1 - faut)*(ie_m(1) + ie_m(2)*temp_avg + ie_m(3)*days_since_rain)*daywatper(wd)
1051 IF (wuday_id(3) < 0) wuday_id(3) = 0
1054 wuday_id(1) = (wuday_id(2) + wuday_id(3))
1057 wuday_id(5) = faut*(ie_a(1) + ie_a(2)*temp_avg + ie_a(3)*days_since_rain)*daywatper(wd)
1058 IF (wuday_id(5) < 0) wuday_id(5) = 0
1061 wuday_id(6) = (1 - faut)*(ie_m(1) + ie_m(2)*temp_avg + ie_m(3)*days_since_rain)*daywatper(wd)
1062 IF (wuday_id(6) < 0) wuday_id(6) = 0
1065 wuday_id(4) = (wuday_id(5) + wuday_id(6))
1068 wuday_id(8) = faut*(ie_a(1) + ie_a(2)*temp_avg + ie_a(3)*days_since_rain)*daywatper(wd)
1069 IF (wuday_id(8) < 0) wuday_id(8) = 0
1072 wuday_id(9) = (1 - faut)*(ie_m(1) + ie_m(2)*temp_avg + ie_m(3)*days_since_rain)*daywatper(wd)
1073 IF (wuday_id(9) < 0) wuday_id(9) = 0
1076 wuday_id(7) = (wuday_id(8) + wuday_id(9))
1095 dt_since_start, it, imin, tstep, & !input
1098 INTEGER,
INTENT(IN)::dt_since_start, it, imin, tstep
1100 REAL(KIND(1d0)),
DIMENSION(12),
INTENT(INOUT):: HDD_id
1104 REAL(KIND(1d0))::tstepcount
1107 tstepcount = (it*60 + imin)*60/tstep*1.
1109 hdd_id(1) = hdd_id(1)/tstepcount
1110 hdd_id(2) = hdd_id(2)/tstepcount
1111 hdd_id(3) = hdd_id(3)/tstepcount
1114 days_prev = min(4, &
1115 floor(dt_since_start/(24*60*60)*1.))
1116 hdd_id(4) = (hdd_id(4)*days_prev + hdd_id(3))/(days_prev + 1)
1119 IF (hdd_id(5) > 0)
THEN 1122 hdd_id(6) = hdd_id(6) + 1
1126 hdd_id(6 + 1:6 + 6) = hdd_id(1:6)
1134 INTEGER,
INTENT(IN) :: it
1135 INTEGER,
INTENT(IN) ::imin
1137 REAL(KIND(1d0)),
DIMENSION(6),
INTENT(INOUT) ::HDD_id
1138 REAL(KIND(1d0))::HDD_id_mav, HDD_id_daysSR
1142 hdd_id_mav = hdd_id(4)
1144 hdd_id_dayssr = hdd_id(6)
1145 IF (it == 0 .AND. imin == 0)
THEN 1147 hdd_id(4) = hdd_id_mav
1148 hdd_id(6) = hdd_id_dayssr
1154 id, datetimeline, &!input
1155 Gridiv, NumberOfGrids, &
1162 INTEGER,
INTENT(IN) ::id
1166 REAL(KIND(1d0)),
DIMENSION(5),
INTENT(IN)::datetimeline
1168 INTEGER,
INTENT(IN)::Gridiv
1169 INTEGER,
INTENT(IN)::NumberOfGrids
1170 REAL(KIND(1d0)),
DIMENSION(ncolumnsDataOutDailyState - 5),
INTENT(IN) :: DailyStateLine
1171 REAL(KIND(1d0)),
DIMENSION(ndays, ncolumnsDataOutDailyState, NumberOfGrids),
INTENT(INOUT):: dataOutDailyState
1174 dataoutdailystate(id, 1:5, gridiv) = datetimeline
1182 it, imin, nsh_real, &!input
1183 GDD_id, HDD_id, LAI_id, &
1185 Tmin_id, Tmax_id, lenday_id, &
1192 deltaLAI, VegPhenLumps, &
1193 SnowAlb, SnowDens, &
1201 INTEGER,
INTENT(IN) ::it
1202 INTEGER,
INTENT(IN) ::imin
1203 REAL(KIND(1d0)),
INTENT(IN) ::nsh_real
1205 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN):: GDD_id
1206 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN):: SDD_id
1207 REAL(KIND(1d0)),
DIMENSION(6),
INTENT(IN):: HDD_id
1208 REAL(KIND(1d0)),
DIMENSION(nvegsurf),
INTENT(IN):: LAI_id
1210 REAL(KIND(1d0)),
INTENT(IN) ::DecidCap_id
1211 REAL(KIND(1d0)),
INTENT(IN) ::albDecTr_id
1212 REAL(KIND(1d0)),
INTENT(IN) ::albEveTr_id
1213 REAL(KIND(1d0)),
INTENT(IN) ::albGrass_id
1214 REAL(KIND(1d0)),
INTENT(IN) ::porosity_id
1215 REAL(KIND(1d0)),
INTENT(IN) ::Tmin_id
1216 REAL(KIND(1d0)),
INTENT(IN) ::Tmax_id
1217 REAL(KIND(1d0)),
INTENT(IN) ::lenday_id
1218 REAL(KIND(1d0)),
DIMENSION(9),
INTENT(IN):: WUDay_id
1220 REAL(KIND(1d0)),
INTENT(IN) ::deltaLAI
1221 REAL(KIND(1d0)),
INTENT(IN) ::VegPhenLumps
1222 REAL(KIND(1d0)),
INTENT(IN) ::SnowAlb
1223 REAL(KIND(1d0)),
DIMENSION(7),
INTENT(IN)::SnowDens
1224 REAL(KIND(1d0)),
INTENT(IN) ::a1
1225 REAL(KIND(1d0)),
INTENT(IN) ::a2
1226 REAL(KIND(1d0)),
INTENT(IN) ::a3
1228 REAL(KIND(1d0)),
DIMENSION(ncolumnsDataOutDailyState - 5),
INTENT(OUT) :: DailyStateLine
1231 dailystateline = -999
1232 IF (it == 23 .AND. imin == (nsh_real - 1)/nsh_real*60)
THEN 1244 dailystateline = [hdd_id, gdd_id, sdd_id, tmin_id, tmax_id, lenday_id, lai_id, decidcap_id, porosity_id, &
1245 albevetr_id, albdectr_id, albgrass_id, wuday_id, deltalai, vegphenlumps, snowalb, snowdens, &
subroutine update_gddlai(id, LAICalcYes, lat, LAI_obs, BaseT, BaseTe, GDDFull, SDDFull, LAIMin, LAIMax, LAIPower, LAIType, LAI_id_prev, GDD_id, LAI_id_next)
integer, parameter ivgrass
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, WaterUseMethod, Ie_start, Ie_end, LAICalcYes, LAIType, nsh_real, avkdn, Temp_C, Precip, BaseTHDD, 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, 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)
integer, parameter ncolumnsdataoutdailystate
subroutine update_dailystate_day(avkdn, Temp_C, Precip, BaseTHDD, nsh_real, Tmin_id, Tmax_id, lenDay_id, HDD_id)
subroutine update_gddlai_x(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_update_dailystate(id, datetimeline, Gridiv, NumberOfGrids, DailyStateLine, dataOutDailyState)
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_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)
integer, parameter ivconif
subroutine update_hdd(dt_since_start, it, imin, tstep, HDD_id)
integer, parameter nvegsurf
subroutine update_dailystate_start(it, imin, HDD_id)
subroutine update_wateruse(id, WaterUseMethod, DayofWeek_id, lat, Faut, HDD_id, Ie_a, Ie_m, Ie_start, Ie_end, DayWatPer, DayWat, WUDay_id)
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, GDD_id, SDD_id, HDD_id, LAI_id, DecidCap_id, albDecTr_id, albEveTr_id, albGrass_id, porosity_id, StoreDrainPrm, WUDay_id, deltaLAI)
integer, parameter decidsurf
integer, parameter ivdecid