SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
diag_watflux_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_watflux_init_n (&
7  dgu, dgw, w, &
8  hprogram,klu,ksw)
9 ! #####################
10 !
11 !!**** *DIAG_WATFLUX_INIT_n* - routine to initialize WATFLUX diagnostic variables
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !!** METHOD
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !!
30 !! AUTHOR
31 !! ------
32 !! V. Masson *Meteo France*
33 !!
34 !! MODIFICATIONS
35 !! -------------
36 !! Original 01/2004
37 ! B. decharme 04/2013 : Add EVAP and SUBL diag
38 !-------------------------------------------------------------------------------
39 !
40 !* 0. DECLARATIONS
41 ! ------------
42 !
43 !
44 !
47 USE modd_watflux_n, ONLY : watflux_t
48 !
49 !
50 !
51 #ifdef SFX_OL
52 USE modn_io_offline, ONLY : lrestart
53 #endif
54 USE modd_surf_par, ONLY : xundef
55 USE modd_sfx_oasis, ONLY : lcpl_sea, lcpl_seaice
56 !
57 !
59 !
60 USE yomhook ,ONLY : lhook, dr_hook
61 USE parkind1 ,ONLY : jprb
62 !
63 IMPLICIT NONE
64 !
65 !* 0.1 Declarations of arguments
66 ! -------------------------
67 !
68 !
69 !
70 !
71 TYPE(diag_surf_atm_t), INTENT(INOUT) :: dgu
72 TYPE(diag_watflux_t), INTENT(INOUT) :: dgw
73 TYPE(watflux_t), INTENT(INOUT) :: w
74 !
75 INTEGER, INTENT(IN) :: klu ! size of arrays
76 INTEGER, INTENT(IN) :: ksw ! number of SW spectral bands
77  CHARACTER(LEN=6), INTENT(IN):: hprogram ! program calling
78 !
79 !* 0.2 Declarations of local variables
80 ! -------------------------------
81 !
82 INTEGER :: iversion
83 INTEGER :: iresp ! IRESP : return-code if a problem appears
84  CHARACTER(LEN=12) :: yrec ! Name of the article to be read
85 REAL(KIND=JPRB) :: zhook_handle
86 !
87 !-------------------------------------------------------------------------------
88 !
89 !* surface energy budget
90 !
91 IF (lhook) CALL dr_hook('DIAG_WATFLUX_INIT_N',0,zhook_handle)
92 !
93 ALLOCATE(dgw%XDIAG_TS(klu))
94 dgw%XDIAG_TS = xundef
95 !
96 IF (dgw%LSURF_BUDGET.OR.dgw%LSURF_BUDGETC) THEN
97  ALLOCATE(dgw%XRN (klu))
98  ALLOCATE(dgw%XH (klu))
99  ALLOCATE(dgw%XLE (klu))
100  ALLOCATE(dgw%XLEI (klu))
101  ALLOCATE(dgw%XGFLUX (klu))
102  ALLOCATE(dgw%XEVAP (klu))
103  ALLOCATE(dgw%XSUBL (klu))
104  ALLOCATE(dgw%XSWD (klu))
105  ALLOCATE(dgw%XSWU (klu))
106  ALLOCATE(dgw%XLWD (klu))
107  ALLOCATE(dgw%XLWU (klu))
108  ALLOCATE(dgw%XSWBD (klu,ksw))
109  ALLOCATE(dgw%XSWBU (klu,ksw))
110  ALLOCATE(dgw%XFMU (klu))
111  ALLOCATE(dgw%XFMV (klu))
112  !
113  dgw%XRN = xundef
114  dgw%XH = xundef
115  dgw%XLE = xundef
116  dgw%XLEI = xundef
117  dgw%XGFLUX = xundef
118  dgw%XEVAP = xundef
119  dgw%XSUBL = xundef
120  dgw%XSWD = xundef
121  dgw%XSWU = xundef
122  dgw%XLWD = xundef
123  dgw%XLWU = xundef
124  dgw%XSWBD = xundef
125  dgw%XSWBU = xundef
126  dgw%XFMU = xundef
127  dgw%XFMV = xundef
128 ELSE
129  ALLOCATE(dgw%XRN (0))
130  ALLOCATE(dgw%XH (0))
131  ALLOCATE(dgw%XLE (0))
132  ALLOCATE(dgw%XLEI (0))
133  ALLOCATE(dgw%XGFLUX (0))
134  ALLOCATE(dgw%XEVAP (0))
135  ALLOCATE(dgw%XSUBL (0))
136  ALLOCATE(dgw%XSWD (0))
137  ALLOCATE(dgw%XSWU (0))
138  ALLOCATE(dgw%XLWD (0))
139  ALLOCATE(dgw%XLWU (0))
140  ALLOCATE(dgw%XSWBD (0,0))
141  ALLOCATE(dgw%XSWBU (0,0))
142  ALLOCATE(dgw%XFMU (0))
143  ALLOCATE(dgw%XFMV (0))
144 END IF
145 !
146 !* cumulative surface energy budget
147 !
148 #ifdef SFX_OL
149 IF (dgw%LSURF_BUDGETC .OR. (lrestart .AND. .NOT.dgw%LRESET_BUDGETC)) THEN
150 #else
151 IF (dgw%LSURF_BUDGETC .OR. .NOT.dgw%LRESET_BUDGETC) THEN
152 #endif
153 !
154  ALLOCATE(dgw%XRNC (klu))
155  ALLOCATE(dgw%XHC (klu))
156  ALLOCATE(dgw%XLEC (klu))
157  ALLOCATE(dgw%XLEIC (klu))
158  ALLOCATE(dgw%XGFLUXC (klu))
159  ALLOCATE(dgw%XEVAPC (klu))
160  ALLOCATE(dgw%XSUBLC (klu))
161  ALLOCATE(dgw%XSWDC (klu))
162  ALLOCATE(dgw%XSWUC (klu))
163  ALLOCATE(dgw%XLWDC (klu))
164  ALLOCATE(dgw%XLWUC (klu))
165  ALLOCATE(dgw%XFMUC (klu))
166  ALLOCATE(dgw%XFMVC (klu))
167 !
168  IF (.NOT. dgu%LREAD_BUDGETC) THEN
169  dgw%XRNC = 0.0
170  dgw%XHC = 0.0
171  dgw%XLEC = 0.0
172  dgw%XLEIC = 0.0
173  dgw%XGFLUXC = 0.0
174  dgw%XEVAPC = 0.0
175  dgw%XSUBLC = 0.0
176  dgw%XSWDC = 0.0
177  dgw%XSWUC = 0.0
178  dgw%XLWDC = 0.0
179  dgw%XLWUC = 0.0
180  dgw%XFMUC = 0.0
181  dgw%XFMVC = 0.0
182  ELSEIF (dgu%LREAD_BUDGETC.AND.dgw%LRESET_BUDGETC) THEN
183  dgw%XRNC = 0.0
184  dgw%XHC = 0.0
185  dgw%XLEC = 0.0
186  dgw%XLEIC = 0.0
187  dgw%XGFLUXC = 0.0
188  dgw%XEVAPC = 0.0
189  dgw%XSUBLC = 0.0
190  dgw%XSWDC = 0.0
191  dgw%XSWUC = 0.0
192  dgw%XLWDC = 0.0
193  dgw%XLWUC = 0.0
194  dgw%XFMUC = 0.0
195  dgw%XFMVC = 0.0
196  ELSE
197  yrec='RNC_WAT'
198  CALL read_surf(&
199  hprogram,yrec,dgw%XRNC,iresp)
200  yrec='HC_WAT'
201  CALL read_surf(&
202  hprogram,yrec,dgw%XHC ,iresp)
203  yrec='LEC_WAT'
204  CALL read_surf(&
205  hprogram,yrec,dgw%XLEC,iresp)
206  yrec='LEIC_WAT'
207  CALL read_surf(&
208  hprogram,yrec,dgw%XLEIC,iresp)
209  yrec='GFLUXC_WAT'
210  CALL read_surf(&
211  hprogram,yrec,dgw%XGFLUXC,iresp)
212  yrec='SWDC_WAT'
213  CALL read_surf(&
214  hprogram,yrec,dgw%XSWDC,iresp)
215  yrec='SWUC_WAT'
216  CALL read_surf(&
217  hprogram,yrec,dgw%XSWUC,iresp)
218  yrec='LWDC_WAT'
219  CALL read_surf(&
220  hprogram,yrec,dgw%XLWDC,iresp)
221  yrec='LWUC_WAT'
222  CALL read_surf(&
223  hprogram,yrec,dgw%XLWUC,iresp)
224  yrec='FMUC_WAT'
225  CALL read_surf(&
226  hprogram,yrec,dgw%XFMUC,iresp)
227  yrec='FMVC_WAT'
228  CALL read_surf(&
229  hprogram,yrec,dgw%XFMVC,iresp)
230 !
231  CALL read_surf(&
232  hprogram,'VERSION',iversion,iresp)
233  IF (iversion<8)THEN
234  dgw%XEVAPC = 0.0
235  dgw%XSUBLC = 0.0
236  ELSE
237  yrec='EVAPC_WAT'
238  CALL read_surf(&
239  hprogram,yrec,dgw%XEVAPC,iresp)
240  yrec='SUBLC_WAT'
241  CALL read_surf(&
242  hprogram,yrec,dgw%XSUBLC,iresp)
243  ENDIF
244 !
245  ENDIF
246 ELSE
247  ALLOCATE(dgw%XRNC (0))
248  ALLOCATE(dgw%XHC (0))
249  ALLOCATE(dgw%XLEC (0))
250  ALLOCATE(dgw%XLEIC (0))
251  ALLOCATE(dgw%XGFLUXC (0))
252  ALLOCATE(dgw%XEVAPC (0))
253  ALLOCATE(dgw%XSUBLC (0))
254  ALLOCATE(dgw%XSWDC (0))
255  ALLOCATE(dgw%XSWUC (0))
256  ALLOCATE(dgw%XLWDC (0))
257  ALLOCATE(dgw%XLWUC (0))
258  ALLOCATE(dgw%XFMUC (0))
259  ALLOCATE(dgw%XFMVC (0))
260 ENDIF
261 !
262 !* parameters at 2m
263 !
264 IF (dgw%N2M>=1) THEN
265  ALLOCATE(dgw%XRI (klu))
266  ALLOCATE(dgw%XT2M (klu))
267  ALLOCATE(dgw%XT2M_MIN(klu))
268  ALLOCATE(dgw%XT2M_MAX(klu))
269  ALLOCATE(dgw%XQ2M (klu))
270  ALLOCATE(dgw%XHU2M (klu))
271  ALLOCATE(dgw%XHU2M_MIN(klu))
272  ALLOCATE(dgw%XHU2M_MAX(klu))
273  ALLOCATE(dgw%XZON10M (klu))
274  ALLOCATE(dgw%XMER10M (klu))
275  ALLOCATE(dgw%XWIND10M (klu))
276  ALLOCATE(dgw%XWIND10M_MAX(klu))
277  !
278  dgw%XRI = xundef
279  dgw%XT2M = xundef
280  dgw%XT2M_MIN = xundef
281  dgw%XT2M_MAX = 0.0
282  dgw%XQ2M = xundef
283  dgw%XHU2M = xundef
284  dgw%XHU2M_MIN= xundef
285  dgw%XHU2M_MAX=-xundef
286  dgw%XZON10M = xundef
287  dgw%XMER10M = xundef
288  dgw%XWIND10M = xundef
289  dgw%XWIND10M_MAX = 0.0
290 ELSE
291  ALLOCATE(dgw%XRI (0))
292  ALLOCATE(dgw%XT2M (0))
293  ALLOCATE(dgw%XT2M_MIN (0))
294  ALLOCATE(dgw%XT2M_MAX (0))
295  ALLOCATE(dgw%XQ2M (0))
296  ALLOCATE(dgw%XHU2M (0))
297  ALLOCATE(dgw%XHU2M_MIN(0))
298  ALLOCATE(dgw%XHU2M_MAX(0))
299  ALLOCATE(dgw%XZON10M (0))
300  ALLOCATE(dgw%XMER10M (0))
301  ALLOCATE(dgw%XWIND10M (0))
302  ALLOCATE(dgw%XWIND10M_MAX(0))
303 END IF
304 !
305 !* transfer coefficients
306 !
307 IF (dgw%LCOEF) THEN
308  ALLOCATE(dgw%XCD (klu))
309  ALLOCATE(dgw%XCH (klu))
310  ALLOCATE(dgw%XCE (klu))
311  ALLOCATE(dgw%XZ0 (klu))
312  ALLOCATE(dgw%XZ0H (klu))
313  !
314  dgw%XCD = xundef
315  dgw%XCH = xundef
316  dgw%XCE = xundef
317  dgw%XZ0 = xundef
318  dgw%XZ0H = xundef
319 ELSE
320  ALLOCATE(dgw%XCD (0))
321  ALLOCATE(dgw%XCH (0))
322  ALLOCATE(dgw%XCE (0))
323  ALLOCATE(dgw%XZ0 (0))
324  ALLOCATE(dgw%XZ0H (0))
325 END IF
326 !
327 !
328 !* surface humidity
329 !
330 IF (dgw%LSURF_VARS) THEN
331  ALLOCATE(dgw%XQS (klu))
332  !
333  dgw%XQS = xundef
334 ELSE
335  ALLOCATE(dgw%XQS (0))
336 END IF
337 !
338 IF(lcpl_sea)THEN
339 !
340  ALLOCATE(w%XCPL_WATER_WIND(klu))
341  ALLOCATE(w%XCPL_WATER_FWSU(klu))
342  ALLOCATE(w%XCPL_WATER_FWSV(klu))
343  ALLOCATE(w%XCPL_WATER_SNET(klu))
344  ALLOCATE(w%XCPL_WATER_HEAT(klu))
345  ALLOCATE(w%XCPL_WATER_EVAP(klu))
346  ALLOCATE(w%XCPL_WATER_RAIN(klu))
347  ALLOCATE(w%XCPL_WATER_SNOW(klu))
348  ALLOCATE(w%XCPL_WATER_FWSM(klu))
349  w%XCPL_WATER_WIND(:) = 0.0
350  w%XCPL_WATER_FWSU(:) = 0.0
351  w%XCPL_WATER_FWSV(:) = 0.0
352  w%XCPL_WATER_SNET(:) = 0.0
353  w%XCPL_WATER_HEAT(:) = 0.0
354  w%XCPL_WATER_EVAP(:) = 0.0
355  w%XCPL_WATER_RAIN(:) = 0.0
356  w%XCPL_WATER_SNOW(:) = 0.0
357  w%XCPL_WATER_FWSM(:) = 0.0
358 !
359 ELSE
360  ALLOCATE(w%XCPL_WATER_WIND(0))
361  ALLOCATE(w%XCPL_WATER_FWSU(0))
362  ALLOCATE(w%XCPL_WATER_FWSV(0))
363  ALLOCATE(w%XCPL_WATER_SNET(0))
364  ALLOCATE(w%XCPL_WATER_HEAT(0))
365  ALLOCATE(w%XCPL_WATER_EVAP(0))
366  ALLOCATE(w%XCPL_WATER_RAIN(0))
367  ALLOCATE(w%XCPL_WATER_SNOW(0))
368  ALLOCATE(w%XCPL_WATER_FWSM(0))
369 ENDIF
370 !
371 IF(lcpl_seaice)THEN
372  ALLOCATE(w%XCPL_WATERICE_SNET(klu))
373  ALLOCATE(w%XCPL_WATERICE_HEAT(klu))
374  ALLOCATE(w%XCPL_WATERICE_EVAP(klu))
375  w%XCPL_WATERICE_SNET(:) = 0.0
376  w%XCPL_WATERICE_HEAT(:) = 0.0
377  w%XCPL_WATERICE_EVAP(:) = 0.0
378 ELSE
379  ALLOCATE(w%XCPL_WATERICE_SNET(0))
380  ALLOCATE(w%XCPL_WATERICE_HEAT(0))
381  ALLOCATE(w%XCPL_WATERICE_EVAP(0))
382 ENDIF
383 IF (lhook) CALL dr_hook('DIAG_WATFLUX_INIT_N',1,zhook_handle)
384 !
385 !-------------------------------------------------------------------------------
386 !
387 END SUBROUTINE diag_watflux_init_n
subroutine diag_watflux_init_n(DGU, DGW, W, HPROGRAM, KLU, KSW)