SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
unpack_diag_patchn.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 unpack_diag_patch_n (DGI, GB, I, PKDI, PKI, &
7  kmask,ksize,knpatch,kpatch, &
8  pcpl_drain,pcpl_runoff, &
9  pcpl_eflood,pcpl_pflood, &
10  pcpl_iflood,pcpl_iceflux )
11 !##############################################
12 !
13 !!**** *UNPACK_DIAG_PATCH_n* - unpacks ISBA diagnostics
14 !!
15 !! PURPOSE
16 !! -------
17 !
18 !!** METHOD
19 !! ------
20 !!
21 !! REFERENCE
22 !! ---------
23 !!
24 !!
25 !! AUTHOR
26 !! ------
27 !! V. Masson
28 !!
29 !! MODIFICATIONS
30 !! -------------
31 !! Original 01/2004
32 !! Modified 10/2004 by P. Le Moigne: Halstead coefficient
33 !! Modified 10/2005 by P. Le Moigne: Deallocation (EBA)
34 !! Modified 05/2008 by B. Decharme : Flooding scheme
35 !! Modified 01/2010 by B. Decharme : new diag
36 !! Modified 04-09 by A.L. Gibelin : Add carbon diagnostics
37 !! Modified 05-09 by A.L. Gibelin : Add carbon spinup
38 !! Modified 08/2012 by B. Decharme : optimization
39 !! Modified 06/2013 by B. Decharme : add lateral drainage flux diag for DIF
40 !! add tiotale sublimation flux
41 !! Modified 10/2014 by P. Samuelsson: MEB
42 !!
43 !!------------------------------------------------------------------
44 !
45 !
46 !
47 !
48 !
49 !
50 USE modd_diag_isba_n, ONLY : diag_isba_t
51 USE modd_gr_biog_n, ONLY : gr_biog_t
52 USE modd_isba_n, ONLY : isba_t
54 USE modd_pack_isba, ONLY : pack_isba_t
55 !
56 USE yomhook ,ONLY : lhook, dr_hook
57 USE parkind1 ,ONLY : jprb
58 !
59 IMPLICIT NONE
60 !
61 !
62 TYPE(diag_isba_t), INTENT(INOUT) :: dgi
63 TYPE(gr_biog_t), INTENT(INOUT) :: gb
64 TYPE(isba_t), INTENT(INOUT) :: i
65 TYPE(pack_diag_isba_t), INTENT(INOUT) :: pkdi
66 TYPE(pack_isba_t), INTENT(INOUT) :: pki
67 !
68 INTEGER, INTENT(IN) :: ksize, kpatch, knpatch
69 INTEGER, DIMENSION(:), INTENT(IN) :: kmask
70 !
71 !Coupling variable
72 REAL, DIMENSION(:,:), INTENT(OUT) :: pcpl_drain
73 REAL, DIMENSION(:,:), INTENT(OUT) :: pcpl_runoff
74 REAL, DIMENSION(:,:), INTENT(OUT) :: pcpl_eflood
75 REAL, DIMENSION(:,:), INTENT(OUT) :: pcpl_pflood
76 REAL, DIMENSION(:,:), INTENT(OUT) :: pcpl_iflood
77 REAL, DIMENSION(:,:), INTENT(OUT) :: pcpl_iceflux
78 !
79 INTEGER :: jj, ji, jsw
80 REAL(KIND=JPRB) :: zhook_handle
81 !
82 !------------------------------------------------------------------------
83 IF (lhook) CALL dr_hook('UNPACK_DIAG_PATCH_N',0,zhook_handle)
84 !
85 IF (knpatch==1) THEN
86  !
87  dgi%XTS(:, kpatch) = pkdi%XP_TS(:)
88  dgi%XTSRAD(:, kpatch) = pkdi%XP_TSRAD(:)
89  IF (dgi%N2M>=1) THEN
90  dgi%XT2M (:, kpatch) = pkdi%XP_T2M (:)
91  dgi%XQ2M (:, kpatch) = pkdi%XP_Q2M (:)
92  dgi%XHU2M (:, kpatch) = pkdi%XP_HU2M (:)
93  dgi%XZON10M (:, kpatch) = pkdi%XP_ZON10M (:)
94  dgi%XMER10M (:, kpatch) = pkdi%XP_MER10M (:)
95  dgi%XRI (:, kpatch) = pkdi%XP_RI (:)
96 !
97  dgi%XWIND10M(:, kpatch) = sqrt(pkdi%XP_ZON10M(:)**2+pkdi%XP_MER10M(:)**2)
98 !
99  END IF
100  !
101  IF (dgi%LSURF_BUDGET) THEN
102  dgi%XRN (:, kpatch) = pkdi%XP_RN (:)
103  dgi%XH (:, kpatch) = pkdi%XP_H (:)
104  dgi%XGFLUX (:, kpatch) = pkdi%XP_GFLUX (:)
105  dgi%XLEI (:, kpatch) = pkdi%XP_LEI (:)
106  dgi%XSWD (:, kpatch) = pkdi%XP_SWD (:)
107  dgi%XSWU (:, kpatch) = pkdi%XP_SWU (:)
108  dgi%XLWD (:, kpatch) = pkdi%XP_LWD (:)
109  dgi%XLWU (:, kpatch) = pkdi%XP_LWU (:)
110  dgi%XFMU (:, kpatch) = pkdi%XP_FMU (:)
111  dgi%XFMV (:, kpatch) = pkdi%XP_FMV (:)
112  !
113  dgi%XSWBD (:, :, kpatch) = pkdi%XP_SWBD (:,:)
114  dgi%XSWBU (:, :, kpatch) = pkdi%XP_SWBU (:,:)
115  !
116  END IF
117  !
118  IF (dgi%LCOEF) THEN
119  dgi%XCD (:, kpatch) = pkdi%XP_CD (:)
120  dgi%XCH (:, kpatch) = pkdi%XP_CH (:)
121  dgi%XCE (:, kpatch) = pkdi%XP_CE (:)
122  dgi%XZ0_WITH_SNOW (:, kpatch) = pkdi%XP_Z0_WITH_SNOW (:)
123  dgi%XZ0H_WITH_SNOW (:, kpatch) = pkdi%XP_Z0H_WITH_SNOW (:)
124  dgi%XZ0EFF (:, kpatch) = pkdi%XP_Z0EFF (:)
125  END IF
126  !
127  IF (dgi%LSURF_VARS) THEN
128  dgi%XQS (:, kpatch) = pkdi%XP_QS (:)
129  END IF
130  !
131  IF (i%LCPL_RRM) THEN
132  pcpl_drain(:, kpatch) = pkdi%XP_DRAIN (:)
133  pcpl_runoff(:, kpatch) = pkdi%XP_RUNOFF (:)
134  END IF
135  !
136  IF (i%LFLOOD) THEN
137  pcpl_eflood(:, kpatch) = pkdi%XP_LE_FLOOD (:) / pki%XP_LVTT(:) &
138  + pkdi%XP_LEI_FLOOD(:) / pki%XP_LSTT(:)
139  pcpl_pflood(:, kpatch) = pkdi%XP_PFLOOD (:)
140  pcpl_iflood(:, kpatch) = pkdi%XP_IFLOOD (:)
141  END IF
142  !
143  IF(i%LCPL_RRM.AND.i%LGLACIER)THEN
144  pcpl_iceflux(:, kpatch) = pkdi%XP_ICEFLUX (:)
145  ENDIF
146  !
147  IF(i%TSNOW%SCHEME=='3-L' .OR. i%TSNOW%SCHEME=='CRO')THEN
148  i%TSNOW%TEMP(:,:,kpatch) = pkdi%XP_SNOWTEMP(:,:)
149  i%TSNOW%TS (:,kpatch) = pkdi%XP_SNOWTEMP(:,1)
150  ENDIF
151  !
152  IF (i%CPHOTO/='NON') THEN
153  gb%XIACAN(:,:,kpatch) = pkdi%XP_IACAN(:,:)
154  ENDIF
155  !
156 ELSE
157  !
158  DO jj=1,ksize
159  ji = kmask(jj)
160  dgi%XTS (ji, kpatch) = pkdi%XP_TS (jj)
161  dgi%XTSRAD (ji, kpatch) = pkdi%XP_TSRAD (jj)
162  END DO
163  IF (dgi%N2M>=1) THEN
164  DO jj=1,ksize
165  ji = kmask(jj)
166  dgi%XT2M (ji, kpatch) = pkdi%XP_T2M (jj)
167  dgi%XQ2M (ji, kpatch) = pkdi%XP_Q2M (jj)
168  dgi%XHU2M (ji, kpatch) = pkdi%XP_HU2M (jj)
169  dgi%XZON10M (ji, kpatch) = pkdi%XP_ZON10M (jj)
170  dgi%XMER10M (ji, kpatch) = pkdi%XP_MER10M (jj)
171  dgi%XRI (ji, kpatch) = pkdi%XP_RI (jj)
172  !
173  dgi%XWIND10M(ji, kpatch) = sqrt(pkdi%XP_ZON10M(jj)**2+pkdi%XP_MER10M(jj)**2)
174  !
175  END DO
176  END IF
177  !
178  IF (dgi%LSURF_BUDGET) THEN
179  DO jj=1,ksize
180  ji = kmask(jj)
181  dgi%XRN (ji, kpatch) = pkdi%XP_RN (jj)
182  dgi%XH (ji, kpatch) = pkdi%XP_H (jj)
183  dgi%XGFLUX (ji, kpatch) = pkdi%XP_GFLUX (jj)
184  dgi%XLEI (ji, kpatch) = pkdi%XP_LEI (jj)
185  dgi%XSWD (ji, kpatch) = pkdi%XP_SWD (jj)
186  dgi%XSWU (ji, kpatch) = pkdi%XP_SWU (jj)
187  dgi%XLWD (ji, kpatch) = pkdi%XP_LWD (jj)
188  dgi%XLWU (ji, kpatch) = pkdi%XP_LWU (jj)
189  dgi%XFMU (ji, kpatch) = pkdi%XP_FMU (jj)
190  dgi%XFMV (ji, kpatch) = pkdi%XP_FMV (jj)
191  !
192  DO jsw=1,SIZE(dgi%XSWBD,2)
193  dgi%XSWBD (ji, jsw, kpatch) = pkdi%XP_SWBD (jj,jsw)
194  dgi%XSWBU (ji, jsw, kpatch) = pkdi%XP_SWBU (jj,jsw)
195  END DO
196  !
197  END DO
198  END IF
199  !
200  IF (dgi%LCOEF) THEN
201  DO jj=1,ksize
202  ji = kmask(jj)
203  dgi%XCD (ji, kpatch) = pkdi%XP_CD (jj)
204  dgi%XCH (ji, kpatch) = pkdi%XP_CH (jj)
205  dgi%XCE (ji, kpatch) = pkdi%XP_CE (jj)
206  dgi%XZ0_WITH_SNOW (ji, kpatch) = pkdi%XP_Z0_WITH_SNOW (jj)
207  dgi%XZ0H_WITH_SNOW (ji, kpatch) = pkdi%XP_Z0H_WITH_SNOW (jj)
208  dgi%XZ0EFF (ji, kpatch) = pkdi%XP_Z0EFF (jj)
209  END DO
210  END IF
211  !
212  IF (dgi%LSURF_VARS) THEN
213  DO jj=1,ksize
214  ji = kmask(jj)
215  dgi%XQS (ji, kpatch) = pkdi%XP_QS (jj)
216  END DO
217  END IF
218  !
219  IF (i%LCPL_RRM) THEN
220  DO jj=1,ksize
221  ji = kmask(jj)
222  pcpl_drain(ji, kpatch) = pkdi%XP_DRAIN (jj)
223  pcpl_runoff(ji, kpatch) = pkdi%XP_RUNOFF (jj)
224  END DO
225  END IF
226  !
227  IF (i%LFLOOD) THEN
228  DO jj=1,ksize
229  ji = kmask(jj)
230  pcpl_eflood(ji, kpatch) = pkdi%XP_LE_FLOOD (jj) / pki%XP_LVTT(jj) &
231  + pkdi%XP_LEI_FLOOD(jj) / pki%XP_LSTT(jj)
232  pcpl_pflood(ji, kpatch) = pkdi%XP_PFLOOD (jj)
233  pcpl_iflood(ji, kpatch) = pkdi%XP_IFLOOD (jj)
234  END DO
235  END IF
236  !
237  IF(i%LGLACIER)THEN
238  DO jj=1,ksize
239  ji = kmask(jj)
240  pcpl_iceflux(ji, kpatch) = pkdi%XP_ICEFLUX (jj)
241  END DO
242  ENDIF
243  !
244  IF(i%TSNOW%SCHEME=='3-L' .OR. i%TSNOW%SCHEME=='CRO')THEN
245  DO jj=1,ksize
246  ji = kmask(jj)
247  i%TSNOW%TS (ji,kpatch) = pkdi%XP_SNOWTEMP(jj,1)
248  DO jsw=1,SIZE(i%TSNOW%TEMP,2)
249  i%TSNOW%TEMP(ji,jsw,kpatch) = pkdi%XP_SNOWTEMP(jj,jsw)
250  ENDDO
251  ENDDO
252  ENDIF
253  !
254  IF (i%CPHOTO/='NON') THEN
255  DO jj=1,ksize
256  ji = kmask(jj)
257  DO jsw=1,SIZE(gb%XIACAN,2)
258  gb%XIACAN(ji,jsw,kpatch) = pkdi%XP_IACAN(jj,jsw)
259  ENDDO
260  ENDDO
261  ENDIF
262  !
263 ENDIF
264 !
265 !------------------------------------------------------------------------
266 !
267 pkdi%XP_CH => null()
268 pkdi%XP_CE => null()
269 pkdi%XP_CD => null()
270 pkdi%XP_CDN => null()
271 pkdi%XP_RI => null()
272 pkdi%XP_HU => null()
273 pkdi%XP_HUG => null()
274 pkdi%XP_ALBT => null()
275 pkdi%XP_RN => null()
276 pkdi%XP_H => null()
277 pkdi%XP_LEI => null()
278 pkdi%XP_LEG => null()
279 pkdi%XP_LEGI => null()
280 pkdi%XP_LEV => null()
281 pkdi%XP_LES => null()
282 pkdi%XP_LER => null()
283 pkdi%XP_LETR => null()
284 pkdi%XP_GFLUX => null()
285 pkdi%XP_EVAP => null()
286 pkdi%XP_SUBL => null()
287 pkdi%XP_RESTORE => null()
288 pkdi%XP_DRAIN => null()
289 pkdi%XP_QSB => null()
290 pkdi%XP_RUNOFF => null()
291 pkdi%XP_MELT => null()
292 pkdi%XP_MELTADV => null()
293 pkdi%XP_SRSFC => null()
294 pkdi%XP_RRSFC => null()
295 pkdi%XP_SNOWFREE_ALB => null()
296 !
297 pkdi%XP_HORT => null()
298 pkdi%XP_DRIP => null()
299 pkdi%XP_RRVEG => null()
300 pkdi%XP_IRRIG_FLUX => null()
301 !
302 pkdi%XP_SWBD => null()
303 pkdi%XP_SWBU => null()
304 !
305 pkdi%XP_SWD => null()
306 pkdi%XP_SWU => null()
307 pkdi%XP_LWD => null()
308 pkdi%XP_LWU => null()
309 pkdi%XP_FMU => null()
310 pkdi%XP_FMV => null()
311 !
312 pkdi%XP_Z0_WITH_SNOW => null()
313 pkdi%XP_Z0H_WITH_SNOW=> null()
314 pkdi%XP_Z0EFF => null()
315 !
316 pkdi%XP_CG => null()
317 pkdi%XP_C1 => null()
318 pkdi%XP_C2 => null()
319 pkdi%XP_WGEQ => null()
320 pkdi%XP_CT => null()
321 pkdi%XP_RS => null()
322 pkdi%XP_HV => null()
323 pkdi%XP_QS => null()
324 !
325 pkdi%XP_TS => null()
326 pkdi%XP_TSRAD => null()
327 !
328 pkdi%XP_RESP_AUTO => null()
329 pkdi%XP_RESP_ECO => null()
330 pkdi%XP_GPP => null()
331 pkdi%XP_FAPAR => null()
332 pkdi%XP_FAPIR => null()
333 pkdi%XP_FAPAR_BS => null()
334 pkdi%XP_FAPIR_BS => null()
335 !
336 pkdi%XP_IFLOOD => null()
337 pkdi%XP_PFLOOD => null()
338 pkdi%XP_LE_FLOOD => null()
339 pkdi%XP_LEI_FLOOD => null()
340 !
341 pkdi%XP_RNSNOW => null()
342 pkdi%XP_HSNOW => null()
343 pkdi%XP_HPSNOW => null()
344 pkdi%XP_GFLUXSNOW => null()
345 pkdi%XP_USTARSNOW => null()
346 pkdi%XP_GRNDFLUX => null()
347 pkdi%XP_LESL => null()
348 pkdi%XP_SNDRIFT => null()
349 pkdi%XP_CDSNOW => null()
350 pkdi%XP_CHSNOW => null()
351 pkdi%XP_SNOWHMASS => null()
352 pkdi%XP_RN_ISBA => null()
353 pkdi%XP_H_ISBA => null()
354 pkdi%XP_LEG_ISBA => null()
355 pkdi%XP_LEGI_ISBA => null()
356 pkdi%XP_LEV_ISBA => null()
357 pkdi%XP_LETR_ISBA => null()
358 pkdi%XP_USTAR_ISBA => null()
359 pkdi%XP_LER_ISBA => null()
360 pkdi%XP_LE_ISBA => null()
361 pkdi%XP_LEI_ISBA => null()
362 pkdi%XP_GFLUX_ISBA => null()
363 pkdi%XP_SNOWLIQ => null()
364 pkdi%XP_SNOWDZ => null()
365 !
366 pkdi%XP_SNOWTEMP => null()
367 !
368 pkdi%XP_SNOWFREE_ALB_VEG=> null()
369 pkdi%XP_SNOWFREE_ALB_SOIL=> null()
370 !
371 pkdi%XP_IACAN => null()
372 !
373 pkdi%XP_T2M => null()
374 pkdi%XP_Q2M => null()
375 pkdi%XP_HU2M => null()
376 pkdi%XP_ZON10M => null()
377 pkdi%XP_MER10M => null()
378 !
379 pkdi%XP_SWI => null()
380 pkdi%XP_TSWI => null()
381 pkdi%XP_TWSNOW => null()
382 pkdi%XP_TDSNOW => null()
383 !
384 pkdi%XP_ICEFLUX => null()
385 !
386 pkdi%XP_DWG => null()
387 pkdi%XP_DWGI => null()
388 pkdi%XP_DSWE => null()
389 pkdi%XP_WATBUD => null()
390 !
391 pkdi%XP_SWUP => null()
392 ! MEB stuff
393 pkdi%XP_SWNET_V => null()
394 pkdi%XP_SWNET_G => null()
395 pkdi%XP_SWNET_N => null()
396 pkdi%XP_SWNET_NS => null()
397 pkdi%XP_LWUP => null()
398 pkdi%XP_LWNET_V => null()
399 pkdi%XP_LWNET_G => null()
400 pkdi%XP_LWNET_N => null()
401 pkdi%XP_LEVCV => null()
402 pkdi%XP_LESC => null()
403 pkdi%XP_H_V_C => null()
404 pkdi%XP_H_G_C => null()
405 pkdi%XP_LETRGV => null()
406 pkdi%XP_LETRCV => null()
407 pkdi%XP_LERGV => null()
408 pkdi%XP_LELITTER => null()
409 pkdi%XP_LELITTERI => null()
410 pkdi%XP_DRIPLIT => null()
411 pkdi%XP_RRLIT => null()
412 pkdi%XP_LERCV => null()
413 pkdi%XP_H_C_A => null()
414 pkdi%XP_H_N_C => null()
415 pkdi%XP_LE_C_A => null()
416 pkdi%XP_LE_V_C => null()
417 pkdi%XP_LE_G_C => null()
418 pkdi%XP_LE_N_C => null()
419 pkdi%XP_EVAP_N_C => null()
420 pkdi%XP_EVAP_G_C => null()
421 pkdi%XP_SR_GN => null()
422 pkdi%XP_MELTCV => null()
423 pkdi%XP_FRZCV => null()
424 pkdi%XP_SWDOWN_GN => null()
425 pkdi%XP_LWDOWN_GN => null()
426 !
427 DEALLOCATE(pkdi%XBLOCK_SIMPLE)
428 DEALLOCATE(pkdi%XBLOCK_GROUND)
429 DEALLOCATE(pkdi%XBLOCK_SNOW)
430 DEALLOCATE(pkdi%XBLOCK_KSW)
431 DEALLOCATE(pkdi%XBLOCK_ABC)
432 DEALLOCATE(pkdi%XBLOCK_0)
433 DEALLOCATE(pkdi%XBLOCK_00)
434 !
435 IF (lhook) CALL dr_hook('UNPACK_DIAG_PATCH_N',1,zhook_handle)
436 !------------------------------------------------------------------------
437 !
438 END SUBROUTINE unpack_diag_patch_n
subroutine unpack_diag_patch_n(DGI, GB, I, PKDI, PKI, KMASK, KSIZE, KNPATCH, KPATCH, PCPL_DRAIN, PCPL_RUNOFF, PCPL_EFLOOD, PCPL_PFLOOD, PCPL_IFLOOD, PCPL_ICEFLUX)