Juan 8/12/2016: add management of LEN_HREC in MNH & SURFEX
[MNH-git_open_source-lfs.git] / src / SURFEX / diag_teb_greenroof_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_GREENROOF_INIT_n(HPROGRAM,KLU,KSW)
7 !     #####################
8 !
9 !!****  *DIAG_TEB_GREENROOF_INIT_n* - routine to initialize TEB-ISBA diagnostic variables
10 !!
11 !!    PURPOSE
12 !!    -------
13 !!
14 !!**  METHOD
15 !!    ------
16 !!    Based on diag_teb_garden_initn
17 !!
18 !!    EXTERNAL
19 !!    --------
20 !!
21 !!
22 !!    IMPLICIT ARGUMENTS
23 !!    ------------------
24 !!
25 !!    REFERENCE
26 !!    ---------
27 !!
28 !!
29 !!    AUTHOR
30 !!    ------
31 !!      V. Masson   *Meteo France*      
32 !!
33 !!    MODIFICATIONS
34 !!    -------------
35 !!      Original                  02/2003 
36 !!      modified                  11/2003  by P. LeMoigne: surface cumulated energy budget
37 !!      modified                  10/2004  by P. LeMoigne: surface miscellaneous fields
38 !!      B. Decharme               2008     New diag for water budget and allow to reset
39 !!                                         cumulatives variables at the beginning of a run
40 !       C. de Munck & A. Lemonsu  09/2011  Greenroofs
41 !-------------------------------------------------------------------------------
42 !
43 !*       0.    DECLARATIONS
44 !              ------------
45 !
46 USE MODD_SURF_PAR,             ONLY : XUNDEF
47 USE MODD_TEB_VEG_n,            ONLY : CPHOTO, CHORT
48 USE MODD_TEB_GREENROOF_n,      ONLY : NLAYER_GR
49 USE MODD_TYPE_DATE_SURF
50 USE MODD_DIAG_SURF_ATM_n,      ONLY : LREAD_BUDGETC
51 USE MODD_DIAG_TEB_n,           ONLY : N2M, LSURF_BUDGET, LCOEF, LSURF_VARS
52 USE MODD_DIAG_MISC_TEB_n,      ONLY : LSURF_EVAP_BUDGET, LSURF_MISC_BUDGET  
53 USE MODD_DIAG_TEB_GREENROOF_n, ONLY : XRN, XH, XGFLUX, XLEI, XRI, XCD, XCDN, XCH, XCE, &
54                                       XTS, XTSRAD,                                     &
55                                       XZ0_WITH_SNOW, XZ0H_WITH_SNOW, XZ0EFF, XQS,      &
56                                       XSWD, XSWU, XSWBD, XSWBU, XLWD, XLWU, XFMU, XFMV,&
57                                       XLEG, XLEGI, XLEV, XLES, XLER, XLETR, XEVAP,     &
58                                       XDRAIN, XRUNOFF, XHORT, XDRIP, XMELT,            &
59                                       XRRVEG, XHV,  XSWI, XTSWI, XTWSNOW,              &
60                                       XTDSNOW, XSEUIL, XGPP, XRESP_AUTO, XRESP_ECO,    &
61                                       XALBT, XEMIST, XALBT,                            &
62                                       XCG, XC1, XC2, XWGEQ, XCT, XRS, XHU, XHUG,       &
63                                       XRESTORE, XUSTAR,                                &
64                                       XSNOWTEMP, XSNOWLIQ, XSNOWDZ, XSNOWHMASS,        &
65                                       XMELTADV, XIACAN  
66 !
67 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
68 USE PARKIND1  ,ONLY : JPRB
69 !
70 IMPLICIT NONE
71 !
72 !*       0.1   Declarations of arguments
73 !              -------------------------
74 !
75 INTEGER, INTENT(IN)         :: KLU       ! size of arrays
76 INTEGER, INTENT(IN)         :: KSW       ! spectral bands
77  CHARACTER(LEN=6), INTENT(IN):: HPROGRAM  ! program calling
78 !
79 !*       0.2   Declarations of local variables
80 !              -------------------------------
81 !
82 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
83  CHARACTER(LEN=LEN_HREC) :: YREC           ! Name of the article to be read
84 REAL(KIND=JPRB) :: ZHOOK_HANDLE
85 !
86 !-------------------------------------------------------------------------------
87 !
88 IF (LHOOK) CALL DR_HOOK('DIAG_TEB_GREENROOF_INIT_N',0,ZHOOK_HANDLE)
89 XCG         = XUNDEF
90 XC1         = XUNDEF
91 XC2         = XUNDEF
92 XWGEQ       = XUNDEF
93 XCT         = XUNDEF
94 XRS         = XUNDEF
95 XHU         = XUNDEF
96 XHUG        = XUNDEF
97 XHV         = XUNDEF
98 XRESTORE    = XUNDEF
99 XRI         = XUNDEF
100 XUSTAR      = XUNDEF
101 XRN         = XUNDEF
102 XH          = XUNDEF
103 XGFLUX      = XUNDEF
104 XSNOWTEMP   = XUNDEF
105 XSNOWLIQ    = XUNDEF
106 XSNOWDZ     = XUNDEF
107 XSNOWHMASS  = XUNDEF
108 XMELTADV    = XUNDEF
109 IF (CPHOTO/='NON') THEN
110   XIACAN    = XUNDEF
111 END IF
112 XCD         = XUNDEF
113 XCDN        = XUNDEF
114 XCH         = XUNDEF
115 XQS         = XUNDEF
116 XLEI        = XUNDEF
117 XLEG        = XUNDEF
118 XLEGI       = XUNDEF
119 XLEV        = XUNDEF
120 XLES        = XUNDEF
121 XLER        = XUNDEF
122 XLETR       = XUNDEF
123 XEVAP       = XUNDEF
124 XDRAIN      = XUNDEF
125 XRUNOFF     = XUNDEF
126 XHORT       = XUNDEF
127 XDRIP       = XUNDEF
128 XRRVEG      = XUNDEF
129 XMELT       = XUNDEF
130 XALBT       = XUNDEF
131 XEMIST      = XUNDEF
132 !
133 !* surface energy budget
134 !
135 !IF (LSURF_BUDGET) THEN
136   !
137   ALLOCATE(XSWD      (KLU))
138   ALLOCATE(XSWU      (KLU))
139   ALLOCATE(XSWBD     (KLU,KSW))
140   ALLOCATE(XSWBU     (KLU,KSW))
141   ALLOCATE(XLWD      (KLU))
142   ALLOCATE(XLWU      (KLU))
143   ALLOCATE(XFMU      (KLU))
144   ALLOCATE(XFMV      (KLU))
145   !
146   XSWD     = XUNDEF
147   XSWU     = XUNDEF
148   XSWBD    = XUNDEF
149   XSWBU    = XUNDEF
150   XLWD     = XUNDEF
151   XLWU     = XUNDEF
152   XFMU     = XUNDEF
153   XFMV     = XUNDEF
154   !
155 !END IF
156 !
157 !* surface temperature and parameters at 2m
158 !
159 ALLOCATE(XTS    (KLU))
160 XTS     = XUNDEF
161 ALLOCATE(XTSRAD (KLU))
162 XTSRAD  = XUNDEF
163 !
164 !* miscellaneous surface fields
165 !
166 IF (LSURF_MISC_BUDGET) THEN
167   !
168   ALLOCATE(XSWI    (KLU,NLAYER_GR))
169   ALLOCATE(XTSWI   (KLU,NLAYER_GR))
170   ALLOCATE(XTWSNOW (KLU))
171   ALLOCATE(XTDSNOW (KLU))
172   XSWI     = XUNDEF
173   XTSWI    = XUNDEF
174   XTWSNOW  = XUNDEF
175   XTDSNOW  = XUNDEF
176 ENDIF
177
178
179   ALLOCATE(XALBT   (KLU))
180   ALLOCATE(XGPP    (KLU))
181   ALLOCATE(XRESP_AUTO  (KLU))
182   ALLOCATE(XRESP_ECO   (KLU))
183   !
184   XALBT    = XUNDEF
185   XGPP     = XUNDEF
186   XRESP_AUTO   = XUNDEF
187   XRESP_ECO    = XUNDEF  
188   !
189 !END IF
190 !
191 !* transfer coefficients
192 !
193 !IF (LCOEF) THEN
194   !
195   ALLOCATE(XCE            (KLU))
196   ALLOCATE(XZ0_WITH_SNOW  (KLU))
197   ALLOCATE(XZ0H_WITH_SNOW (KLU))
198   ALLOCATE(XZ0EFF         (KLU))
199   !
200   XCE            = XUNDEF
201   XZ0_WITH_SNOW  = XUNDEF
202   XZ0H_WITH_SNOW = XUNDEF
203   XZ0EFF         = XUNDEF
204 !END IF
205 !
206 !
207 !* surface humidity
208 !
209 !IF (LSURF_VARS) THEN
210   ALLOCATE(XQS            (KLU))
211   !
212   XQS            = XUNDEF
213 !END IF
214 !
215 IF (LHOOK) CALL DR_HOOK('DIAG_TEB_GREENROOF_INIT_N',1,ZHOOK_HANDLE)
216 !
217 !
218 !-------------------------------------------------------------------------------
219 !
220 END SUBROUTINE DIAG_TEB_GREENROOF_INIT_n