8b86dc87ace8dd3d33cc4deb0398dae262a28784
[MNH-git_open_source-lfs.git] / src / SURFEX / diag_teb_garden_initn.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     #########
6       SUBROUTINE DIAG_TEB_GARDEN_INIT_n(HPROGRAM,KLU,KSW)
7 !     #####################
8 !
9 !!****  *DIAG_TEB_GARDEN_INIT_n* - routine to initialize TEB-ISBA diagnostic variables
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 !!      V. Masson   *Meteo France*      
31 !!
32 !!    MODIFICATIONS
33 !!    -------------
34 !!      Original    02/2003 
35 !!      modified    11/2003 by P. LeMoigne: surface cumulated energy budget
36 !!      modified    10/2004 by P. LeMoigne: surface miscellaneous fields
37 !!      B. Decharme    2008    New diag for water budget and allow to reset
38 !               cumulatives variables at the beginning of a run
39 !-------------------------------------------------------------------------------
40 !
41 !*       0.    DECLARATIONS
42 !              ------------
43 !
44 USE MODD_SURF_PAR,          ONLY : XUNDEF
45 USE MODD_TEB_VEG_n,         ONLY : CHORT, CPHOTO
46 USE MODD_TEB_GARDEN_n,      ONLY : NGROUND_LAYER, TSNOW, XABC
47 USE MODD_TYPE_DATE_SURF
48 USE MODD_DIAG_SURF_ATM_n,   ONLY : LREAD_BUDGETC
49 USE MODD_DIAG_TEB_n,        ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS
50 USE MODD_DIAG_MISC_TEB_n,   ONLY : LSURF_MISC_BUDGET  
51 USE MODD_DIAG_TEB_GARDEN_n, ONLY : XRN, XH, XGFLUX, XLEI, XRI, XCD, XCDN, XCH, XCE, &
52                                    XTS, XTSRAD, XFAPAR, XFAPIR, XFAPAR_BS, XFAPIR_BS, &
53                                    XDFAPARC, XDFAPIRC, XZ0_WITH_SNOW, XZ0H_WITH_SNOW, &
54                                    XZ0EFF, XQS, XSWD, XSWU, XSWBD, XSWBU, XLWD, XLWU, &
55                                    XFMU, XFMV, XLEG, XLEGI, XLEV, XLES, XLER, XLETR, &
56                                    XEVAP, XDRAIN, XRUNOFF, XHORT, XDRIP, XMELT, XRRVEG, &
57                                    XHV,  XSWI, XTSWI, XTWSNOW, XTDSNOW, XSEUIL, XGPP, &
58                                    XRESP_AUTO, XRESP_ECO, XALBT, XEMIST, XCG, XC1, XC2, &
59                                    XWGEQ, XCT, XRS, XHU, XHUG, XRESTORE, XUSTAR, XDLAI_EFFC, & 
60                                    XIACAN, XSNOWTEMP, XSNOWLIQ, XSNOWDZ, XSNOWHMASS,        &
61                                    XMELTADV, XIACAN, XIRRIG_FLUX  
62 !
63 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
64 USE PARKIND1  ,ONLY : JPRB
65 !
66 IMPLICIT NONE
67 !
68 !*       0.1   Declarations of arguments
69 !              -------------------------
70 !
71 INTEGER, INTENT(IN)         :: KLU       ! size of arrays
72 INTEGER, INTENT(IN)         :: KSW       ! spectral bands
73  CHARACTER(LEN=6), INTENT(IN):: HPROGRAM  ! program calling
74 !
75 !*       0.2   Declarations of local variables
76 !              -------------------------------
77 !
78 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
79  CHARACTER(LEN=12) :: YREC           ! Name of the article to be read
80 REAL(KIND=JPRB) :: ZHOOK_HANDLE
81 !
82 !-------------------------------------------------------------------------------
83 !
84 IF (LHOOK) CALL DR_HOOK('DIAG_TEB_GARDEN_INIT_N',0,ZHOOK_HANDLE)
85 !
86 ALLOCATE(XRI     (KLU)) 
87 !
88 XRI         = XUNDEF
89 !
90 ALLOCATE(XCD     (KLU)) 
91 ALLOCATE(XCH     (KLU)) 
92 ALLOCATE(XRN     (KLU)) 
93 ALLOCATE(XH      (KLU)) 
94 ALLOCATE(XGFLUX  (KLU)) 
95 ALLOCATE(XQS     (KLU)) 
96 !
97 XCD         = XUNDEF
98 XCH         = XUNDEF
99 XRN         = XUNDEF
100 XH          = XUNDEF
101 XGFLUX      = XUNDEF
102 XQS         = XUNDEF
103 !
104 ALLOCATE(XLEI    (KLU)) 
105 ALLOCATE(XLEG    (KLU)) 
106 ALLOCATE(XLEGI   (KLU)) 
107 ALLOCATE(XLEV    (KLU)) 
108 ALLOCATE(XLES    (KLU)) 
109 ALLOCATE(XLER    (KLU)) 
110 ALLOCATE(XLETR   (KLU)) 
111 ALLOCATE(XEVAP   (KLU)) 
112 ALLOCATE(XDRAIN  (KLU)) 
113 ALLOCATE(XRUNOFF (KLU)) 
114 ALLOCATE(XHORT   (KLU)) 
115 ALLOCATE(XDRIP   (KLU)) 
116 ALLOCATE(XRRVEG  (KLU)) 
117 ALLOCATE(XMELT   (KLU)) 
118 ALLOCATE(XIRRIG_FLUX(KLU))
119 !
120 XLEI        = XUNDEF
121 XLEG        = XUNDEF
122 XLEGI       = XUNDEF
123 XLEV        = XUNDEF
124 XLES        = XUNDEF
125 XLER        = XUNDEF
126 XLETR       = XUNDEF
127 XEVAP       = XUNDEF
128 XDRAIN      = XUNDEF
129 XRUNOFF     = XUNDEF
130 XHORT       = XUNDEF
131 XDRIP       = XUNDEF
132 XRRVEG      = XUNDEF
133 XMELT       = XUNDEF
134 XIRRIG_FLUX = XUNDEF
135 !
136 ALLOCATE(XCG     (KLU)) 
137 ALLOCATE(XC1     (KLU)) 
138 ALLOCATE(XC2     (KLU)) 
139 ALLOCATE(XWGEQ   (KLU)) 
140 ALLOCATE(XCT     (KLU)) 
141 ALLOCATE(XRS     (KLU)) 
142 ALLOCATE(XCDN    (KLU)) 
143 ALLOCATE(XHU     (KLU)) 
144 ALLOCATE(XHUG    (KLU)) 
145 ALLOCATE(XRESTORE(KLU)) 
146 ALLOCATE(XUSTAR  (KLU)) 
147 IF (CPHOTO/='NON') THEN
148   ALLOCATE(XIACAN  (KLU,SIZE(XABC)          ))
149 ELSE
150   ALLOCATE(XIACAN  (0,0))
151 END IF
152 !
153 XCG         = XUNDEF
154 XC1         = XUNDEF
155 XC2         = XUNDEF
156 XWGEQ       = XUNDEF
157 XCT         = XUNDEF
158 XRS         = XUNDEF
159 XCDN        = XUNDEF
160 XHU         = XUNDEF
161 XHUG        = XUNDEF
162 XRESTORE    = XUNDEF
163 XUSTAR      = XUNDEF
164 IF (CPHOTO/='NON') THEN
165   XIACAN    = XUNDEF
166 END IF
167 !
168 ALLOCATE(XSNOWTEMP(KLU,TSNOW%NLAYER        )) 
169 ALLOCATE(XSNOWLIQ (KLU,TSNOW%NLAYER        )) 
170 ALLOCATE(XSNOWDZ  (KLU,TSNOW%NLAYER        )) 
171 ALLOCATE(XSNOWHMASS(KLU)) 
172 ALLOCATE(XMELTADV  (KLU)) 
173 !
174 XSNOWTEMP   = XUNDEF
175 XSNOWLIQ    = XUNDEF
176 XSNOWDZ     = XUNDEF
177 XSNOWHMASS  = XUNDEF
178 XMELTADV    = XUNDEF
179 !
180 ALLOCATE(XHV     (KLU))
181 ALLOCATE(XALBT   (KLU)) 
182 ALLOCATE(XEMIST  (KLU)) 
183 !
184 XHV               = XUNDEF
185 XALBT             = XUNDEF
186 XEMIST            = XUNDEF
187 !
188 ALLOCATE(XFAPAR    (KLU))
189 ALLOCATE(XFAPIR    (KLU))
190 ALLOCATE(XFAPAR_BS (KLU))
191 ALLOCATE(XFAPIR_BS (KLU))
192 ALLOCATE(XDFAPARC  (KLU))
193 ALLOCATE(XDFAPIRC  (KLU))
194 ALLOCATE(XDLAI_EFFC(KLU))
195 !
196 XFAPAR     = XUNDEF
197 XFAPIR     = XUNDEF
198 XFAPAR_BS  = XUNDEF
199 XFAPIR_BS  = XUNDEF
200 XDFAPARC   = XUNDEF
201 XDFAPIRC   = XUNDEF
202 XDLAI_EFFC = XUNDEF
203 !
204 !* surface energy budget
205 !
206 !IF (LSURF_BUDGET) THEN
207   !
208   ALLOCATE(XSWD      (KLU))
209   ALLOCATE(XSWU      (KLU))
210   ALLOCATE(XSWBD     (KLU,KSW))
211   ALLOCATE(XSWBU     (KLU,KSW))
212   ALLOCATE(XLWD      (KLU))
213   ALLOCATE(XLWU      (KLU))
214   ALLOCATE(XFMU      (KLU))
215   ALLOCATE(XFMV      (KLU))
216   !
217   XSWD     = XUNDEF
218   XSWU     = XUNDEF
219   XSWBD    = XUNDEF
220   XSWBU    = XUNDEF
221   XLWD     = XUNDEF
222   XLWU     = XUNDEF
223   XFMU     = XUNDEF
224   XFMV     = XUNDEF
225   !
226 !END IF
227 !
228 !* surface temperature and parameters at 2m
229 !
230 ALLOCATE(XTS    (KLU))
231 XTS     = XUNDEF
232 ALLOCATE(XTSRAD (KLU))
233 XTSRAD  = XUNDEF
234 !
235 !* miscellaneous surface fields
236 !
237 IF (LSURF_MISC_BUDGET) THEN
238   ALLOCATE(XSWI    (KLU,NGROUND_LAYER))
239   ALLOCATE(XTSWI   (KLU,NGROUND_LAYER))
240   ALLOCATE(XTWSNOW (KLU))
241   ALLOCATE(XTDSNOW (KLU))
242   XSWI     = XUNDEF
243   XTSWI    = XUNDEF
244   XTWSNOW  = XUNDEF
245   XTDSNOW  = XUNDEF
246 ELSE
247   ALLOCATE(XSWI    (0,0))
248   ALLOCATE(XTSWI   (0,0))
249   ALLOCATE(XTWSNOW (0))
250   ALLOCATE(XTDSNOW (0))
251 ENDIF
252 !
253 ALLOCATE(XALBT   (KLU))
254 ALLOCATE(XGPP    (KLU))
255 ALLOCATE(XRESP_AUTO  (KLU))
256 ALLOCATE(XRESP_ECO   (KLU))
257 !
258 XALBT    = XUNDEF
259 XGPP     = XUNDEF
260 XRESP_AUTO   = XUNDEF
261 XRESP_ECO    = XUNDEF  
262 !
263 !END IF
264 !
265 !* transfer coefficients
266 !
267 !IF (LCOEF) THEN
268   !
269   ALLOCATE(XCE            (KLU))
270   ALLOCATE(XZ0_WITH_SNOW  (KLU))
271   ALLOCATE(XZ0H_WITH_SNOW (KLU))
272   ALLOCATE(XZ0EFF         (KLU))
273   !
274   XCE            = XUNDEF
275   XZ0_WITH_SNOW  = XUNDEF
276   XZ0H_WITH_SNOW = XUNDEF
277   XZ0EFF         = XUNDEF
278 !END IF
279 !
280 !
281 !* surface humidity
282 !
283 !IF (LSURF_VARS) THEN
284   ALLOCATE(XQS            (KLU))
285   !
286   XQS            = XUNDEF
287 !END IF
288 !
289 !* Irrigation threshold
290 !
291 !IF (LAGRIP) THEN
292   ALLOCATE(XSEUIL(KLU))
293   !
294   XSEUIL         = XUNDEF
295 !END IF
296 !
297 IF (LHOOK) CALL DR_HOOK('DIAG_TEB_GARDEN_INIT_N',1,ZHOOK_HANDLE)
298 !
299 !-------------------------------------------------------------------------------
300 !
301 END SUBROUTINE DIAG_TEB_GARDEN_INIT_n