SURFEX v8.1
General documentation of Surfex
irrigation_update.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE irrigation_update (NAG, NPE, KPATCH, PTSTEP, KMONTH, KDAY, PTIME)
7 ! ####################################################################
8 !
9 !!**** *IRRIGATION_UPDATE* - routine to update irrigation fields
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !! P. Le Moigne *Meteo France*
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original 06/2006
35 !-------------------------------------------------------------------------------
36 !
37 !* 0. DECLARATIONS
38 ! ------------
39 !
40 USE modd_isba_n, ONLY : isba_npe_t
41 USE modd_agri_n, ONLY : agri_np_t
42 !
43 USE modd_agri, ONLY : jpstage, xthreshold
44 !
45 USE yomhook ,ONLY : lhook, dr_hook
46 USE parkind1 ,ONLY : jprb
47 !
48 IMPLICIT NONE
49 !
50 TYPE(isba_npe_t), INTENT(INOUT) :: NPE
51 TYPE(agri_np_t), INTENT(INOUT) :: NAG
52 !
53 INTEGER, INTENT(IN) :: KPATCH
54 REAL, INTENT(IN) :: PTSTEP, PTIME
55 INTEGER, INTENT(IN) :: KMONTH, KDAY
56 !
57 INTEGER :: JI, JP
58 LOGICAL :: GMASK
59 REAL(KIND=JPRB) :: ZHOOK_HANDLE
60 !
61 !* 0.1 Declarations of arguments
62 !-------------------------------------------------------------------------------
63 !
64 ! Mask to realize update only once a day
65 !
66 IF (lhook) CALL dr_hook('MODI_IRRIGATION_UPDATE:IRRIGATION_UPDATE',0,zhook_handle)
67 gmask = ( ptime - ptstep < 0. ) .AND. ( ptime >= 0. )
68 !
69 DO jp = 1,kpatch
70  !
71  IF (gmask) THEN
72  !
73  WHERE( (npe%AL(jp)%XIRRIG(:).GT.0.).AND.(nag%AL(jp)%LIRRIDAY(:)) .AND.(nag%AL(jp)%NIRRINUM(:).LT.jpstage))
74  nag%AL(jp)%NIRRINUM (:) = nag%AL(jp)%NIRRINUM(:) + 1
75  nag%AL(jp)%LIRRIDAY (:) = .false.
76  ENDWHERE
77  !
78  DO ji = 1,SIZE(npe%AL(jp)%XIRRIG,1)
79  nag%AL(jp)%XTHRESHOLDSPT(ji)= xthreshold(nag%AL(jp)%NIRRINUM(ji))
80  ENDDO
81  !
82  END IF
83  !
84  ! Reinitialization of irrigation stage (necessary for runs from August to August)
85  !
86  IF((kmonth==1).AND.(kday==1)) nag%AL(jp)%NIRRINUM(:) = 1
87  !
88  nag%AL(jp)%LIRRIGATE(:) = .false.
89  !
90  DO ji = 1,SIZE(npe%AL(jp)%XIRRIG,1)
91  !
92  ! Activate irrigation after seeding date
93  !
94  IF (kmonth == npe%AL(jp)%TSEED(ji)%TDATE%MONTH .AND. kday .GE. npe%AL(jp)%TSEED(ji)%TDATE%DAY) THEN
95  nag%AL(jp)%LIRRIGATE(ji) = .true.
96  END IF
97  IF (kmonth > npe%AL(jp)%TSEED(ji)%TDATE%MONTH) THEN
98  nag%AL(jp)%LIRRIGATE(ji) = .true.
99  END IF
100  !
101  ! Stop irrigation after reaping date
102  !
103  IF (kmonth == npe%AL(jp)%TREAP(ji)%TDATE%MONTH .AND. kday .GT. npe%AL(jp)%TREAP(ji)%TDATE%DAY) THEN
104  nag%AL(jp)%LIRRIGATE(ji) = .false.
105  END IF
106  IF (kmonth > npe%AL(jp)%TREAP(ji)%TDATE%MONTH) THEN
107  nag%AL(jp)%LIRRIGATE(ji) = .false.
108  END IF
109  ENDDO
110  !
111 ENDDO
112 !
113 IF (lhook) CALL dr_hook('MODI_IRRIGATION_UPDATE:IRRIGATION_UPDATE',1,zhook_handle)
114 !
115 END SUBROUTINE irrigation_update
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine irrigation_update(NAG, NPE, KPATCH, PTSTEP, KMONTH, KD