SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
alloc_diag_surf_atmn.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 alloc_diag_surf_atm_n (DGU, U, &
7  hprogram,ksw)
8 ! #############################################################
9 !
10 !! AUTHOR
11 !! ------
12 !! V. Masson *Meteo France*
13 !!
14 !! MODIFICATIONS
15 !! -------------
16 !! Original 01/2004
17 !! Modified 01/2006 : sea flux parameterization.
18 !! 08/2009 : TIME_BUDGETC for all Tile
19 ! B. decharme 09/2012 : XQS_TILE not initialize
20 ! B. decharme 04/2013 : Add EVAP and SUBL diag
21 !-------------------------------------------------------------------------------
22 !
23 !* 0. DECLARATIONS
24 ! ------------
25 !
27 USE modd_surf_atm_n, ONLY : surf_atm_t
28 !
29 USE modd_data_cover_par, ONLY : ntilesfc
30 USE modd_surf_par, ONLY : xundef
31 
32 
33 !
35 !
36 USE yomhook ,ONLY : lhook, dr_hook
37 USE parkind1 ,ONLY : jprb
38 !
39 IMPLICIT NONE
40 !
41 !* 0.1 Declarations of arguments
42 ! -------------------------
43 !
44 !
45 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
46 TYPE(surf_atm_t), INTENT(INOUT) :: u
47 !
48  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling surf. schemes
49 INTEGER, INTENT(IN) :: ksw ! number of short-wave spectral bands
50 !
51 !* 0.2 Declarations of local variables
52 ! -------------------------------
53 !
54 INTEGER :: iversion
55 INTEGER :: iresp ! IRESP : return-code if a problem appears
56  CHARACTER(LEN=12) :: yrec ! Name of the article to be read
57 REAL(KIND=JPRB) :: zhook_handle
58 !
59 !-------------------------------------------------------------------------------
60 !
61 !
62 ! Initialization: Outputs to atmosphere over each tile:
63 !
64 IF (lhook) CALL dr_hook('ALLOC_DIAG_SURF_ATM_N',0,zhook_handle)
65 ALLOCATE(dgu%XRI_TILE (u%NSIZE_FULL,ntilesfc))
66 ALLOCATE(dgu%XCD_TILE (u%NSIZE_FULL,ntilesfc))
67 ALLOCATE(dgu%XCH_TILE (u%NSIZE_FULL,ntilesfc))
68 ALLOCATE(dgu%XCE_TILE (u%NSIZE_FULL,ntilesfc))
69 ALLOCATE(dgu%XRN_TILE (u%NSIZE_FULL,ntilesfc))
70 ALLOCATE(dgu%XH_TILE (u%NSIZE_FULL,ntilesfc))
71 ALLOCATE(dgu%XLE_TILE (u%NSIZE_FULL,ntilesfc))
72 ALLOCATE(dgu%XLEI_TILE (u%NSIZE_FULL,ntilesfc))
73 ALLOCATE(dgu%XGFLUX_TILE (u%NSIZE_FULL,ntilesfc))
74 ALLOCATE(dgu%XEVAP_TILE (u%NSIZE_FULL,ntilesfc))
75 ALLOCATE(dgu%XSUBL_TILE (u%NSIZE_FULL,ntilesfc))
76 ALLOCATE(dgu%XT2M_TILE (u%NSIZE_FULL,ntilesfc))
77 ALLOCATE(dgu%XTS_TILE (u%NSIZE_FULL,ntilesfc))
78 ALLOCATE(dgu%XT2M_MIN_TILE(u%NSIZE_FULL,ntilesfc))
79 ALLOCATE(dgu%XT2M_MAX_TILE(u%NSIZE_FULL,ntilesfc))
80 ALLOCATE(dgu%XQ2M_TILE (u%NSIZE_FULL,ntilesfc))
81 ALLOCATE(dgu%XHU2M_TILE (u%NSIZE_FULL,ntilesfc))
82 ALLOCATE(dgu%XHU2M_MIN_TILE(u%NSIZE_FULL,ntilesfc))
83 ALLOCATE(dgu%XHU2M_MAX_TILE(u%NSIZE_FULL,ntilesfc))
84 ALLOCATE(dgu%XZON10M_TILE (u%NSIZE_FULL,ntilesfc))
85 ALLOCATE(dgu%XMER10M_TILE (u%NSIZE_FULL,ntilesfc))
86 ALLOCATE(dgu%XQS_TILE (u%NSIZE_FULL,ntilesfc))
87 ALLOCATE(dgu%XZ0_TILE (u%NSIZE_FULL,ntilesfc))
88 ALLOCATE(dgu%XZ0H_TILE (u%NSIZE_FULL,ntilesfc))
89 ALLOCATE(dgu%XSWD_TILE (u%NSIZE_FULL,ntilesfc))
90 ALLOCATE(dgu%XSWU_TILE (u%NSIZE_FULL,ntilesfc))
91 ALLOCATE(dgu%XLWD_TILE (u%NSIZE_FULL,ntilesfc))
92 ALLOCATE(dgu%XLWU_TILE (u%NSIZE_FULL,ntilesfc))
93 ALLOCATE(dgu%XSWBD_TILE (u%NSIZE_FULL,ntilesfc,ksw))
94 ALLOCATE(dgu%XSWBU_TILE (u%NSIZE_FULL,ntilesfc,ksw))
95 ALLOCATE(dgu%XFMU_TILE (u%NSIZE_FULL,ntilesfc))
96 ALLOCATE(dgu%XFMV_TILE (u%NSIZE_FULL,ntilesfc))
97 ALLOCATE(dgu%XWIND10M_TILE(u%NSIZE_FULL,ntilesfc))
98 ALLOCATE(dgu%XWIND10M_MAX_TILE(u%NSIZE_FULL,ntilesfc))
99 !
100 dgu%XRI_TILE = xundef
101 dgu%XCD_TILE = xundef
102 dgu%XCH_TILE = xundef
103 dgu%XCE_TILE = xundef
104 dgu%XRN_TILE = xundef
105 dgu%XH_TILE = xundef
106 dgu%XLE_TILE = xundef
107 dgu%XLEI_TILE = xundef
108 dgu%XGFLUX_TILE = xundef
109 dgu%XEVAP_TILE = xundef
110 dgu%XSUBL_TILE = xundef
111 dgu%XT2M_TILE = xundef
112 dgu%XTS_TILE = xundef
113 dgu%XT2M_MIN_TILE = xundef
114 dgu%XT2M_MAX_TILE = xundef
115 dgu%XQ2M_TILE = xundef
116 dgu%XHU2M_TILE = xundef
117 dgu%XHU2M_MIN_TILE= xundef
118 dgu%XHU2M_MAX_TILE= xundef
119 dgu%XZON10M_TILE = xundef
120 dgu%XMER10M_TILE = xundef
121 dgu%XQS_TILE = xundef
122 dgu%XZ0_TILE = xundef
123 dgu%XZ0H_TILE = xundef
124 dgu%XSWD_TILE = xundef
125 dgu%XSWU_TILE = xundef
126 dgu%XLWD_TILE = xundef
127 dgu%XLWU_TILE = xundef
128 dgu%XSWBD_TILE = xundef
129 dgu%XSWBU_TILE = xundef
130 dgu%XFMU_TILE = xundef
131 dgu%XFMV_TILE = xundef
132 dgu%XWIND10M_TILE = xundef
133 dgu%XWIND10M_MAX_TILE = xundef
134 !
135 ! Initialization: aggregated fields
136 !
137 ALLOCATE(dgu%XAVG_RI (u%NSIZE_FULL))
138 ALLOCATE(dgu%XAVG_CD (u%NSIZE_FULL))
139 ALLOCATE(dgu%XAVG_CH (u%NSIZE_FULL))
140 ALLOCATE(dgu%XAVG_CE (u%NSIZE_FULL))
141 ALLOCATE(dgu%XAVG_RN (u%NSIZE_FULL))
142 ALLOCATE(dgu%XAVG_H (u%NSIZE_FULL))
143 ALLOCATE(dgu%XAVG_LE (u%NSIZE_FULL))
144 ALLOCATE(dgu%XAVG_LEI (u%NSIZE_FULL))
145 ALLOCATE(dgu%XAVG_GFLUX (u%NSIZE_FULL))
146 ALLOCATE(dgu%XAVG_EVAP (u%NSIZE_FULL))
147 ALLOCATE(dgu%XAVG_SUBL (u%NSIZE_FULL))
148 ALLOCATE(dgu%XAVG_T2M (u%NSIZE_FULL))
149 ALLOCATE(dgu%XAVG_TS (u%NSIZE_FULL))
150 ALLOCATE(dgu%XAVG_T2M_MIN(u%NSIZE_FULL))
151 ALLOCATE(dgu%XAVG_T2M_MAX(u%NSIZE_FULL))
152 ALLOCATE(dgu%XAVG_Q2M (u%NSIZE_FULL))
153 ALLOCATE(dgu%XAVG_HU2M (u%NSIZE_FULL))
154 ALLOCATE(dgu%XAVG_HU2M_MIN(u%NSIZE_FULL))
155 ALLOCATE(dgu%XAVG_HU2M_MAX(u%NSIZE_FULL))
156 ALLOCATE(dgu%XAVG_ZON10M (u%NSIZE_FULL))
157 ALLOCATE(dgu%XAVG_MER10M (u%NSIZE_FULL))
158 ALLOCATE(dgu%XAVG_SFCO2 (u%NSIZE_FULL))
159 ALLOCATE(dgu%XAVG_T2M_MIN_ZS (u%NSIZE_FULL))
160 ALLOCATE(dgu%XAVG_Q2M_MIN_ZS (u%NSIZE_FULL))
161 ALLOCATE(dgu%XAVG_HU2M_MIN_ZS (u%NSIZE_FULL))
162 ALLOCATE(dgu%XPS (u%NSIZE_FULL))
163 ALLOCATE(dgu%XRHOA (u%NSIZE_FULL))
164 ALLOCATE(dgu%XAVG_QS (u%NSIZE_FULL))
165 ALLOCATE(dgu%XAVG_Z0 (u%NSIZE_FULL))
166 ALLOCATE(dgu%XAVG_Z0H (u%NSIZE_FULL))
167 ALLOCATE(dgu%XAVG_SWD (u%NSIZE_FULL))
168 ALLOCATE(dgu%XAVG_SWU (u%NSIZE_FULL))
169 ALLOCATE(dgu%XAVG_LWD (u%NSIZE_FULL))
170 ALLOCATE(dgu%XAVG_LWU (u%NSIZE_FULL))
171 ALLOCATE(dgu%XAVG_SWBD (u%NSIZE_FULL,ksw))
172 ALLOCATE(dgu%XAVG_SWBU (u%NSIZE_FULL,ksw))
173 ALLOCATE(dgu%XAVG_FMU (u%NSIZE_FULL))
174 ALLOCATE(dgu%XAVG_FMV (u%NSIZE_FULL))
175 ALLOCATE(dgu%XSSO_FMU (u%NSIZE_FULL))
176 ALLOCATE(dgu%XSSO_FMV (u%NSIZE_FULL))
177 ALLOCATE(dgu%XAVG_WIND10M(u%NSIZE_FULL))
178 ALLOCATE(dgu%XAVG_WIND10M_MAX(u%NSIZE_FULL))
179 !
180 ALLOCATE(dgu%XDIAG_UREF (u%NSIZE_FULL))
181 ALLOCATE(dgu%XDIAG_ZREF (u%NSIZE_FULL))
182 ALLOCATE(dgu%XDIAG_TRAD (u%NSIZE_FULL))
183 ALLOCATE(dgu%XDIAG_EMIS (u%NSIZE_FULL))
184 !
185 dgu%XAVG_RI = xundef
186 dgu%XAVG_CD = xundef
187 dgu%XAVG_CH = xundef
188 dgu%XAVG_CE = xundef
189 dgu%XAVG_RN = xundef
190 dgu%XAVG_H = xundef
191 dgu%XAVG_LE = xundef
192 dgu%XAVG_LEI = xundef
193 dgu%XAVG_GFLUX = xundef
194 dgu%XAVG_EVAP = xundef
195 dgu%XAVG_SUBL = xundef
196 dgu%XAVG_T2M = xundef
197 dgu%XAVG_TS = xundef
198 dgu%XAVG_T2M_MIN = xundef
199 dgu%XAVG_T2M_MAX = xundef
200 dgu%XAVG_Q2M = xundef
201 dgu%XAVG_HU2M = xundef
202 dgu%XAVG_HU2M_MIN= xundef
203 dgu%XAVG_HU2M_MAX= xundef
204 dgu%XAVG_ZON10M = xundef
205 dgu%XAVG_MER10M = xundef
206 dgu%XAVG_SFCO2 = xundef
207 dgu%XAVG_T2M_MIN_ZS = xundef
208 dgu%XAVG_Q2M_MIN_ZS = xundef
209 dgu%XAVG_HU2M_MIN_ZS = xundef
210 dgu%XPS = xundef
211 dgu%XRHOA = xundef
212 dgu%XAVG_QS = xundef
213 dgu%XAVG_Z0 = xundef
214 dgu%XAVG_Z0H = xundef
215 dgu%XAVG_SWD = xundef
216 dgu%XAVG_SWU = xundef
217 dgu%XAVG_LWD = xundef
218 dgu%XAVG_LWU = xundef
219 dgu%XAVG_SWBD = xundef
220 dgu%XAVG_SWBU = xundef
221 dgu%XAVG_FMU = xundef
222 dgu%XAVG_FMV = xundef
223 dgu%XSSO_FMU = xundef
224 dgu%XSSO_FMV = xundef
225 dgu%XAVG_WIND10M = xundef
226 dgu%XAVG_WIND10M_MAX = xundef
227 !
228 dgu%XDIAG_UREF = xundef
229 dgu%XDIAG_ZREF = xundef
230 dgu%XDIAG_TRAD = xundef
231 dgu%XDIAG_EMIS = xundef
232 !
233 IF (dgu%LSURF_BUDGETC) THEN
234 !
235  ALLOCATE(dgu%XRNC_TILE (u%NSIZE_FULL,ntilesfc))
236  ALLOCATE(dgu%XHC_TILE (u%NSIZE_FULL,ntilesfc))
237  ALLOCATE(dgu%XLEC_TILE (u%NSIZE_FULL,ntilesfc))
238  ALLOCATE(dgu%XLEIC_TILE (u%NSIZE_FULL,ntilesfc))
239  ALLOCATE(dgu%XGFLUXC_TILE (u%NSIZE_FULL,ntilesfc))
240  ALLOCATE(dgu%XEVAPC_TILE (u%NSIZE_FULL,ntilesfc))
241  ALLOCATE(dgu%XSUBLC_TILE (u%NSIZE_FULL,ntilesfc))
242  ALLOCATE(dgu%XSWDC_TILE (u%NSIZE_FULL,ntilesfc))
243  ALLOCATE(dgu%XSWUC_TILE (u%NSIZE_FULL,ntilesfc))
244  ALLOCATE(dgu%XLWDC_TILE (u%NSIZE_FULL,ntilesfc))
245  ALLOCATE(dgu%XLWUC_TILE (u%NSIZE_FULL,ntilesfc))
246  ALLOCATE(dgu%XFMUC_TILE (u%NSIZE_FULL,ntilesfc))
247  ALLOCATE(dgu%XFMVC_TILE (u%NSIZE_FULL,ntilesfc))
248 !
249  dgu%XRNC_TILE = xundef
250  dgu%XHC_TILE = xundef
251  dgu%XLEC_TILE = xundef
252  dgu%XLEIC_TILE = xundef
253  dgu%XGFLUXC_TILE = xundef
254  dgu%XEVAPC_TILE = xundef
255  dgu%XSUBLC_TILE = xundef
256  dgu%XSWDC_TILE = xundef
257  dgu%XSWUC_TILE = xundef
258  dgu%XLWDC_TILE = xundef
259  dgu%XLWUC_TILE = xundef
260  dgu%XFMUC_TILE = xundef
261  dgu%XFMVC_TILE = xundef
262 !
263  ALLOCATE(dgu%XAVG_RNC (u%NSIZE_FULL))
264  ALLOCATE(dgu%XAVG_HC (u%NSIZE_FULL))
265  ALLOCATE(dgu%XAVG_LEC (u%NSIZE_FULL))
266  ALLOCATE(dgu%XAVG_LEIC (u%NSIZE_FULL))
267  ALLOCATE(dgu%XAVG_GFLUXC (u%NSIZE_FULL))
268  ALLOCATE(dgu%XAVG_EVAPC (u%NSIZE_FULL))
269  ALLOCATE(dgu%XAVG_SUBLC (u%NSIZE_FULL))
270  ALLOCATE(dgu%XAVG_SWDC (u%NSIZE_FULL))
271  ALLOCATE(dgu%XAVG_SWUC (u%NSIZE_FULL))
272  ALLOCATE(dgu%XAVG_LWDC (u%NSIZE_FULL))
273  ALLOCATE(dgu%XAVG_LWUC (u%NSIZE_FULL))
274  ALLOCATE(dgu%XAVG_FMUC (u%NSIZE_FULL))
275  ALLOCATE(dgu%XAVG_FMVC (u%NSIZE_FULL))
276 !
277  yrec='BUDC'
278  CALL read_surf(hprogram,yrec,dgu%LREAD_BUDGETC,iresp)
279 !
280  IF (.NOT. dgu%LREAD_BUDGETC) THEN
281  dgu%TIME_BUDGETC = u%TTIME
282  dgu%XAVG_RNC = 0.0
283  dgu%XAVG_HC = 0.0
284  dgu%XAVG_LEC = 0.0
285  dgu%XAVG_LEIC = 0.0
286  dgu%XAVG_GFLUXC = 0.0
287  dgu%XAVG_EVAPC = 0.0
288  dgu%XAVG_SUBLC = 0.0
289  dgu%XAVG_SWDC = 0.0
290  dgu%XAVG_SWUC = 0.0
291  dgu%XAVG_LWDC = 0.0
292  dgu%XAVG_LWUC = 0.0
293  dgu%XAVG_FMUC = 0.0
294  dgu%XAVG_FMVC = 0.0
295  ELSEIF (dgu%LREAD_BUDGETC.AND.dgu%LRESET_BUDGETC) THEN
296  dgu%TIME_BUDGETC = u%TTIME
297  dgu%XAVG_RNC = 0.0
298  dgu%XAVG_HC = 0.0
299  dgu%XAVG_LEC = 0.0
300  dgu%XAVG_LEIC = 0.0
301  dgu%XAVG_GFLUXC = 0.0
302  dgu%XAVG_EVAPC = 0.0
303  dgu%XAVG_SUBLC = 0.0
304  dgu%XAVG_SWDC = 0.0
305  dgu%XAVG_SWUC = 0.0
306  dgu%XAVG_LWDC = 0.0
307  dgu%XAVG_LWUC = 0.0
308  dgu%XAVG_FMUC = 0.0
309  dgu%XAVG_FMVC = 0.0
310  ELSE
311  yrec='TBUDC'
312  CALL read_surf(hprogram,yrec,dgu%TIME_BUDGETC,iresp)
313  yrec='RNC'
314  CALL read_surf(hprogram,yrec,dgu%XAVG_RNC,iresp)
315  yrec='HC'
316  CALL read_surf(hprogram,yrec,dgu%XAVG_HC ,iresp)
317  yrec='LEC'
318  CALL read_surf(hprogram,yrec,dgu%XAVG_LEC,iresp)
319  yrec='LEIC'
320  CALL read_surf(hprogram,yrec,dgu%XAVG_LEIC,iresp)
321  yrec='GFLUXC'
322  CALL read_surf(hprogram,yrec,dgu%XAVG_GFLUXC ,iresp)
323  yrec='SWDC'
324  CALL read_surf(hprogram,yrec,dgu%XAVG_SWDC,iresp)
325  yrec='SWUC'
326  CALL read_surf(hprogram,yrec,dgu%XAVG_SWUC,iresp)
327  yrec='LWDC'
328  CALL read_surf(hprogram,yrec,dgu%XAVG_LWDC,iresp)
329  yrec='LWUC'
330  CALL read_surf( &
331  hprogram,yrec,dgu%XAVG_LWUC,iresp)
332  yrec='FMUC'
333  CALL read_surf(&
334  hprogram,yrec,dgu%XAVG_FMUC,iresp)
335  yrec='FMVC'
336  CALL read_surf(&
337  hprogram,yrec,dgu%XAVG_FMVC,iresp)
338 !
339  CALL read_surf(&
340  hprogram,'VERSION',iversion,iresp)
341  IF (iversion<8)THEN
342  dgu%XAVG_EVAPC = 0.0
343  dgu%XAVG_SUBLC = 0.0
344  ELSE
345  yrec='EVAPC'
346  CALL read_surf(&
347  hprogram,yrec,dgu%XAVG_EVAPC,iresp)
348  yrec='SUBLC'
349  CALL read_surf(&
350  hprogram,yrec,dgu%XAVG_SUBLC,iresp)
351  ENDIF
352 !
353  ENDIF
354 !
355 ELSE
356 !
357  ALLOCATE(dgu%XRNC_TILE (0,0))
358  ALLOCATE(dgu%XHC_TILE (0,0))
359  ALLOCATE(dgu%XLEC_TILE (0,0))
360  ALLOCATE(dgu%XLEIC_TILE (0,0))
361  ALLOCATE(dgu%XGFLUXC_TILE (0,0))
362  ALLOCATE(dgu%XEVAPC_TILE (0,0))
363  ALLOCATE(dgu%XSUBLC_TILE (0,0))
364  ALLOCATE(dgu%XSWDC_TILE (0,0))
365  ALLOCATE(dgu%XSWUC_TILE (0,0))
366  ALLOCATE(dgu%XLWDC_TILE (0,0))
367  ALLOCATE(dgu%XLWUC_TILE (0,0))
368  ALLOCATE(dgu%XFMUC_TILE (0,0))
369  ALLOCATE(dgu%XFMVC_TILE (0,0))
370 !
371  ALLOCATE(dgu%XAVG_RNC (0))
372  ALLOCATE(dgu%XAVG_HC (0))
373  ALLOCATE(dgu%XAVG_LEC (0))
374  ALLOCATE(dgu%XAVG_LEIC (0))
375  ALLOCATE(dgu%XAVG_GFLUXC (0))
376  ALLOCATE(dgu%XAVG_EVAPC (0))
377  ALLOCATE(dgu%XAVG_SUBLC (0))
378  ALLOCATE(dgu%XAVG_SWDC (0))
379  ALLOCATE(dgu%XAVG_SWUC (0))
380  ALLOCATE(dgu%XAVG_LWDC (0))
381  ALLOCATE(dgu%XAVG_LWUC (0))
382  ALLOCATE(dgu%XAVG_FMUC (0))
383  ALLOCATE(dgu%XAVG_FMVC (0))
384 !
385 ENDIF
386 IF (lhook) CALL dr_hook('ALLOC_DIAG_SURF_ATM_N',1,zhook_handle)
387 !
388 !-------------------------------------------------------------------------------
389 !
390 END SUBROUTINE alloc_diag_surf_atm_n
subroutine alloc_diag_surf_atm_n(DGU, U, HPROGRAM, KSW)