SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
diag_teb_initn.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 diag_teb_init_n (DGT, DGUT, &
7  hprogram,klu,ksw)
8 ! #####################
9 !
10 !!**** *DIAG_TEB_INIT_n* - routine to initialize TEB diagnostic variables
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
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 01/2004
36 !! V. Masson 10/2013 Adds integrated UTCI diagnostics
37 ! B. decharme 04/2013 : Add DIAG_TS
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 USE modd_diag_teb_n, ONLY : diag_teb_t
46 !
47 USE modd_surf_par, ONLY : xundef
49 !
50 USE modd_utci, ONLY : nutci_stress
51 
52 !
54 !
55 !
56 USE yomhook ,ONLY : lhook, dr_hook
57 USE parkind1 ,ONLY : jprb
58 !
59 IMPLICIT NONE
60 !
61 !* 0.1 Declarations of arguments
62 ! -------------------------
63 !
64 !
65 TYPE(diag_teb_t), INTENT(INOUT) :: dgt
66 TYPE(diag_utci_teb_t), INTENT(INOUT) :: dgut
67 !
68 INTEGER, INTENT(IN) :: klu ! size of arrays
69 INTEGER, INTENT(IN) :: ksw ! spectral bands
70  CHARACTER(LEN=6), INTENT(IN):: hprogram ! program calling
71 !
72 !* 0.2 Declarations of local variables
73 ! -------------------------------
74 !
75 INTEGER :: iresp ! IRESP : return-code if a problem appears
76  CHARACTER(LEN=12) :: yrec ! Name of the article to be read
77 REAL(KIND=JPRB) :: zhook_handle
78 !
79 !-------------------------------------------------------------------------------
80 !
81 !* surface energy budget
82 !
83 IF (lhook) CALL dr_hook('DIAG_TEB_INIT_N',0,zhook_handle)
84 !
85 ALLOCATE(dgt%XDIAG_TS(klu))
86 dgt%XDIAG_TS = xundef
87 !
88 IF (dgt%LSURF_BUDGET) THEN
89  ALLOCATE(dgt%XRN (klu))
90  ALLOCATE(dgt%XH (klu))
91  ALLOCATE(dgt%XLE (klu))
92  ALLOCATE(dgt%XGFLUX (klu))
93  ALLOCATE(dgt%XSWD (klu))
94  ALLOCATE(dgt%XSWU (klu))
95  ALLOCATE(dgt%XSWBD (klu,ksw))
96  ALLOCATE(dgt%XSWBU (klu,ksw))
97  ALLOCATE(dgt%XLWD (klu))
98  ALLOCATE(dgt%XLWU (klu))
99  ALLOCATE(dgt%XFMU (klu))
100  ALLOCATE(dgt%XFMV (klu))
101  ALLOCATE(dgt%XSFCO2 (klu))
102  !
103  dgt%XRN = xundef
104  dgt%XH = xundef
105  dgt%XLE = xundef
106  dgt%XGFLUX = xundef
107  dgt%XSWD = xundef
108  dgt%XSWU = xundef
109  dgt%XSWBD = xundef
110  dgt%XSWBU = xundef
111  dgt%XLWD = xundef
112  dgt%XLWU = xundef
113  dgt%XFMU = xundef
114  dgt%XFMV = xundef
115  dgt%XSFCO2 = xundef
116 ELSE
117  ALLOCATE(dgt%XRN (0))
118  ALLOCATE(dgt%XH (0))
119  ALLOCATE(dgt%XLE (0))
120  ALLOCATE(dgt%XGFLUX (0))
121  ALLOCATE(dgt%XSWD (0))
122  ALLOCATE(dgt%XSWU (0))
123  ALLOCATE(dgt%XSWBD (0,0))
124  ALLOCATE(dgt%XSWBU (0,0))
125  ALLOCATE(dgt%XLWD (0))
126  ALLOCATE(dgt%XLWU (0))
127  ALLOCATE(dgt%XFMU (0))
128  ALLOCATE(dgt%XFMV (0))
129  ALLOCATE(dgt%XSFCO2 (0))
130 END IF
131 !
132 !* parameters at 2m
133 !
134 IF (dgt%N2M>=1) THEN
135  ALLOCATE(dgt%XRI (klu))
136  ALLOCATE(dgt%XT2M (klu))
137  ALLOCATE(dgt%XT2M_MIN (klu))
138  ALLOCATE(dgt%XT2M_MAX (klu))
139  ALLOCATE(dgt%XQ2M (klu))
140  ALLOCATE(dgt%XHU2M (klu))
141  ALLOCATE(dgt%XHU2M_MIN(klu))
142  ALLOCATE(dgt%XHU2M_MAX(klu))
143  ALLOCATE(dgt%XZON10M (klu))
144  ALLOCATE(dgt%XMER10M (klu))
145  ALLOCATE(dgt%XWIND10M (klu))
146  ALLOCATE(dgt%XWIND10M_MAX(klu))
147  !
148  dgt%XRI = xundef
149  dgt%XT2M = xundef
150  dgt%XT2M_MIN = xundef
151  dgt%XT2M_MAX = -xundef
152  dgt%XQ2M = xundef
153  dgt%XHU2M = xundef
154  dgt%XHU2M_MIN= xundef
155  dgt%XHU2M_MAX=-xundef
156  dgt%XZON10M = xundef
157  dgt%XMER10M = xundef
158  dgt%XWIND10M = xundef
159  dgt%XWIND10M_MAX = -xundef
160 ELSE
161  ALLOCATE(dgt%XRI (0))
162  ALLOCATE(dgt%XT2M (0))
163  ALLOCATE(dgt%XT2M_MIN (0))
164  ALLOCATE(dgt%XT2M_MAX (0))
165  ALLOCATE(dgt%XQ2M (0))
166  ALLOCATE(dgt%XHU2M (0))
167  ALLOCATE(dgt%XHU2M_MIN(0))
168  ALLOCATE(dgt%XHU2M_MAX(0))
169  ALLOCATE(dgt%XZON10M (0))
170  ALLOCATE(dgt%XMER10M (0))
171  ALLOCATE(dgt%XWIND10M (0))
172  ALLOCATE(dgt%XWIND10M_MAX(0))
173 END IF
174 !!
175 !* miscellaneous fields
176 !
177 IF (dgt%N2M>0 .AND. dgut%LUTCI) THEN
178  !
179  ALLOCATE(dgut%XUTCI_IN (klu))
180  ALLOCATE(dgut%XUTCI_OUTSUN (klu))
181  ALLOCATE(dgut%XUTCI_OUTSHADE (klu))
182  ALLOCATE(dgut%XTRAD_SUN (klu))
183  ALLOCATE(dgut%XTRAD_SHADE (klu))
184  ALLOCATE(dgut%XUTCIC_IN (klu,nutci_stress))
185  ALLOCATE(dgut%XUTCIC_OUTSUN (klu,nutci_stress))
186  ALLOCATE(dgut%XUTCIC_OUTSHADE(klu,nutci_stress))
187  !
188  dgut%XUTCI_IN = xundef
189  dgut%XUTCI_OUTSUN = xundef
190  dgut%XUTCI_OUTSHADE = xundef
191  dgut%XTRAD_SUN = xundef
192  dgut%XTRAD_SHADE = xundef
193  dgut%XUTCIC_IN = 0.
194  dgut%XUTCIC_OUTSUN = 0.
195  dgut%XUTCIC_OUTSHADE = 0.
196  !
197 ELSE
198  ALLOCATE(dgut%XUTCI_IN (0))
199  ALLOCATE(dgut%XUTCI_OUTSUN (0))
200  ALLOCATE(dgut%XUTCI_OUTSHADE (0))
201  ALLOCATE(dgut%XTRAD_SUN (0))
202  ALLOCATE(dgut%XTRAD_SHADE (0))
203  ALLOCATE(dgut%XUTCIC_IN (0,0))
204  ALLOCATE(dgut%XUTCIC_OUTSUN (0,0))
205  ALLOCATE(dgut%XUTCIC_OUTSHADE(0,0))
206 ENDIF
207 !
208 !* transfer coefficients
209 !
210 IF (dgt%LCOEF) THEN
211  ALLOCATE(dgt%XCD (klu))
212  ALLOCATE(dgt%XCH (klu))
213  ALLOCATE(dgt%XCE (klu))
214  ALLOCATE(dgt%XZ0 (klu))
215  ALLOCATE(dgt%XZ0H (klu))
216  !
217  dgt%XCD = xundef
218  dgt%XCH = xundef
219  dgt%XCE = xundef
220  dgt%XZ0 = xundef
221  dgt%XZ0H = xundef
222 ELSE
223  ALLOCATE(dgt%XCD (0))
224  ALLOCATE(dgt%XCH (0))
225  ALLOCATE(dgt%XCE (0))
226  ALLOCATE(dgt%XZ0 (0))
227  ALLOCATE(dgt%XZ0H (0))
228 END IF
229 !
230 !
231 !* surface humidity
232 !
233 IF (dgt%LSURF_VARS) THEN
234  ALLOCATE(dgt%XQS (klu))
235  !
236  dgt%XQS = xundef
237 ELSE
238  ALLOCATE(dgt%XQS (0))
239 END IF
240 IF (lhook) CALL dr_hook('DIAG_TEB_INIT_N',1,zhook_handle)
241 !
242 !-------------------------------------------------------------------------------
243 !
244 END SUBROUTINE diag_teb_init_n
subroutine diag_teb_init_n(DGT, DGUT, HPROGRAM, KLU, KSW)