SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
pack_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 pack_diag_patch_n (DGEI, DGI, DGMI, I, PKDI, &
7  ksize,ksw,kpatch)
8 !##############################################
9 !
10 !!**** *PACK_DIAG_PATCH_n* - packs ISBA diagnostics
11 !!
12 !! PURPOSE
13 !! -------
14 !
15 !!** METHOD
16 !! ------
17 !!
18 !! REFERENCE
19 !! ---------
20 !!
21 !!
22 !! AUTHOR
23 !! ------
24 !! V. Masson
25 !!
26 !! MODIFICATIONS
27 !! -------------
28 !! Original 01/2004
29 !! Modified 10/2004 by P. Le Moigne: Halstead coefficient
30 !! Modified 10/2005 by P. Le Moigne: Allocation (not EBA case)
31 !! Modified 2008 by B. Decharme : Allocation for the floodplains
32 !! Modified 04-09 by A.L. Gibelin : Add carbon diagnostics
33 !! B. Decharme 04/2013 DIF lateral subsurface drainage
34 !! Sublimation diag flux
35 !! Modified 10-14 by P. Samuelsson: MEB
36 !!
37 !!------------------------------------------------------------------
38 !
39 !
40 !
41 !
42  ! End For multi-energy balance
43 
44 
45 !
46 !
48 USE modd_diag_isba_n, ONLY : diag_isba_t
50 USE modd_isba_n, ONLY : isba_t
52 !
53 USE modi_abor1_sfx
54 !
55 USE yomhook ,ONLY : lhook, dr_hook
56 USE parkind1 ,ONLY : jprb
57 !
58 IMPLICIT NONE
59 !
60 !
61 TYPE(diag_evap_isba_t), INTENT(INOUT) :: dgei
62 TYPE(diag_isba_t), INTENT(INOUT) :: dgi
63 TYPE(diag_misc_isba_t), INTENT(INOUT) :: dgmi
64 TYPE(isba_t), INTENT(INOUT) :: i
65 TYPE(pack_diag_isba_t), INTENT(INOUT) :: pkdi
66 !
67 INTEGER, INTENT(IN) :: ksize, ksw, kpatch
68 !
69 INTEGER :: isize_simple, isize_ground, isize_snow, isize_ksw, &
70  isize_abc, isize_0, isize_00
71 REAL(KIND=JPRB) :: zhook_handle
72 !
73 !------------------------------------------------------------------------
74 IF (lhook) CALL dr_hook('PACK_DIAG_PATCH_N',0,zhook_handle)
75 !
76 ! Packed surface module variables:
77 !
78 ALLOCATE(pkdi%XBLOCK_SIMPLE(ksize,pkdi%NSIZE_SIMPLE))
79 ALLOCATE(pkdi%XBLOCK_GROUND(ksize,i%NGROUND_LAYER,pkdi%NSIZE_GROUND))
80 ALLOCATE(pkdi%XBLOCK_SNOW(ksize,i%TSNOW%NLAYER,pkdi%NSIZE_SNOW))
81 ALLOCATE(pkdi%XBLOCK_KSW(ksize,ksw,pkdi%NSIZE_KSW))
82 ALLOCATE(pkdi%XBLOCK_ABC(ksize,SIZE(i%XABC),pkdi%NSIZE_ABC))
83 ALLOCATE(pkdi%XBLOCK_0(0,pkdi%NSIZE_0))
84 ALLOCATE(pkdi%XBLOCK_00(0,0,pkdi%NSIZE_00))
85 !
86 isize_simple=0
87 isize_ground=0
88 isize_snow=0
89 isize_ksw=0
90 isize_abc=0
91 isize_0=0
92 isize_00=0
93 !
94 isize_simple = isize_simple + 1
95 pkdi%XP_CH => pkdi%XBLOCK_SIMPLE(:,isize_simple)
96 isize_simple = isize_simple + 1
97 pkdi%XP_CE => pkdi%XBLOCK_SIMPLE(:,isize_simple)
98 isize_simple = isize_simple + 1
99 pkdi%XP_CD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
100 isize_simple = isize_simple + 1
101 pkdi%XP_CDN => pkdi%XBLOCK_SIMPLE(:,isize_simple)
102 isize_simple = isize_simple + 1
103 pkdi%XP_RI => pkdi%XBLOCK_SIMPLE(:,isize_simple)
104 isize_simple = isize_simple + 1
105 pkdi%XP_HU => pkdi%XBLOCK_SIMPLE(:,isize_simple)
106 isize_simple = isize_simple + 1
107 pkdi%XP_HUG => pkdi%XBLOCK_SIMPLE(:,isize_simple)
108 isize_simple = isize_simple + 1
109 pkdi%XP_ALBT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
110 isize_simple = isize_simple + 1
111 pkdi%XP_RN => pkdi%XBLOCK_SIMPLE(:,isize_simple)
112 isize_simple = isize_simple + 1
113 pkdi%XP_H => pkdi%XBLOCK_SIMPLE(:,isize_simple)
114 isize_simple = isize_simple + 1
115 pkdi%XP_LEI => pkdi%XBLOCK_SIMPLE(:,isize_simple)
116 isize_simple = isize_simple + 1
117 pkdi%XP_LEG => pkdi%XBLOCK_SIMPLE(:,isize_simple)
118 isize_simple = isize_simple + 1
119 pkdi%XP_LEGI => pkdi%XBLOCK_SIMPLE(:,isize_simple)
120 isize_simple = isize_simple + 1
121 pkdi%XP_LEV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
122 isize_simple = isize_simple + 1
123 pkdi%XP_LES => pkdi%XBLOCK_SIMPLE(:,isize_simple)
124 isize_simple = isize_simple + 1
125 pkdi%XP_LER => pkdi%XBLOCK_SIMPLE(:,isize_simple)
126 isize_simple = isize_simple + 1
127 pkdi%XP_LETR => pkdi%XBLOCK_SIMPLE(:,isize_simple)
128 isize_simple = isize_simple + 1
129 pkdi%XP_GFLUX => pkdi%XBLOCK_SIMPLE(:,isize_simple)
130 isize_simple = isize_simple + 1
131 pkdi%XP_EVAP => pkdi%XBLOCK_SIMPLE(:,isize_simple)
132 isize_simple = isize_simple + 1
133 pkdi%XP_SUBL => pkdi%XBLOCK_SIMPLE(:,isize_simple)
134 isize_simple = isize_simple + 1
135 pkdi%XP_RESTORE => pkdi%XBLOCK_SIMPLE(:,isize_simple)
136 isize_simple = isize_simple + 1
137 pkdi%XP_DRAIN => pkdi%XBLOCK_SIMPLE(:,isize_simple)
138 isize_simple = isize_simple + 1
139 pkdi%XP_QSB => pkdi%XBLOCK_SIMPLE(:,isize_simple)
140 isize_simple = isize_simple + 1
141 pkdi%XP_RUNOFF => pkdi%XBLOCK_SIMPLE(:,isize_simple)
142 isize_simple = isize_simple + 1
143 pkdi%XP_MELT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
144 isize_simple = isize_simple + 1
145 pkdi%XP_MELTADV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
146 isize_simple = isize_simple + 1
147 pkdi%XP_SRSFC => pkdi%XBLOCK_SIMPLE(:,isize_simple)
148 isize_simple = isize_simple + 1
149 pkdi%XP_RRSFC => pkdi%XBLOCK_SIMPLE(:,isize_simple)
150 isize_simple = isize_simple + 1
151 pkdi%XP_SNOWFREE_ALB=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
152 !
153 isize_simple = isize_simple + 1
154 pkdi%XP_HORT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
155 isize_simple = isize_simple + 1
156 pkdi%XP_DRIP => pkdi%XBLOCK_SIMPLE(:,isize_simple)
157 isize_simple = isize_simple + 1
158 pkdi%XP_RRVEG => pkdi%XBLOCK_SIMPLE(:,isize_simple)
159 isize_simple = isize_simple + 1
160 pkdi%XP_IRRIG_FLUX=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
161 !
162 isize_ksw = isize_ksw + 1
163 pkdi%XP_SWBD => pkdi%XBLOCK_KSW(:,:,isize_ksw)
164 isize_ksw = isize_ksw + 1
165 pkdi%XP_SWBU => pkdi%XBLOCK_KSW(:,:,isize_ksw)
166 !
167 isize_simple = isize_simple + 1
168 pkdi%XP_SWD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
169 isize_simple = isize_simple + 1
170 pkdi%XP_SWU => pkdi%XBLOCK_SIMPLE(:,isize_simple)
171 isize_simple = isize_simple + 1
172 pkdi%XP_LWD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
173 isize_simple = isize_simple + 1
174 pkdi%XP_LWU => pkdi%XBLOCK_SIMPLE(:,isize_simple)
175 isize_simple = isize_simple + 1
176 pkdi%XP_FMU => pkdi%XBLOCK_SIMPLE(:,isize_simple)
177 isize_simple = isize_simple + 1
178 pkdi%XP_FMV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
179 !
180 isize_simple = isize_simple + 1
181 pkdi%XP_Z0_WITH_SNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
182 isize_simple = isize_simple + 1
183 pkdi%XP_Z0H_WITH_SNOW=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
184 isize_simple = isize_simple + 1
185 pkdi%XP_Z0EFF => pkdi%XBLOCK_SIMPLE(:,isize_simple)
186 !
187 isize_simple = isize_simple + 1
188 pkdi%XP_CG => pkdi%XBLOCK_SIMPLE(:,isize_simple)
189 isize_simple = isize_simple + 1
190 pkdi%XP_C1 => pkdi%XBLOCK_SIMPLE(:,isize_simple)
191 isize_simple = isize_simple + 1
192 pkdi%XP_C2 => pkdi%XBLOCK_SIMPLE(:,isize_simple)
193 isize_simple = isize_simple + 1
194 pkdi%XP_WGEQ => pkdi%XBLOCK_SIMPLE(:,isize_simple)
195 isize_simple = isize_simple + 1
196 pkdi%XP_CT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
197 isize_simple = isize_simple + 1
198 pkdi%XP_RS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
199 isize_simple = isize_simple + 1
200 pkdi%XP_HV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
201 isize_simple = isize_simple + 1
202 pkdi%XP_QS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
203 !
204 isize_simple = isize_simple + 1
205 pkdi%XP_TS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
206 isize_simple = isize_simple + 1
207 pkdi%XP_TSRAD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
208 !
209 isize_simple = isize_simple + 1
210 pkdi%XP_RESP_AUTO => pkdi%XBLOCK_SIMPLE(:,isize_simple)
211 isize_simple = isize_simple + 1
212 pkdi%XP_RESP_ECO => pkdi%XBLOCK_SIMPLE(:,isize_simple)
213 isize_simple = isize_simple + 1
214 pkdi%XP_GPP => pkdi%XBLOCK_SIMPLE(:,isize_simple)
215 !
216 isize_simple = isize_simple + 1
217 pkdi%XP_IFLOOD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
218 isize_simple = isize_simple + 1
219 pkdi%XP_PFLOOD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
220 isize_simple = isize_simple + 1
221 pkdi%XP_LE_FLOOD => pkdi%XBLOCK_SIMPLE(:,isize_simple)
222 isize_simple = isize_simple + 1
223 pkdi%XP_LEI_FLOOD=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
224 !
225 IF (i%TSNOW%SCHEME=='3-L' .OR. i%TSNOW%SCHEME=='CRO') THEN
226  isize_simple = isize_simple + 1
227  pkdi%XP_RNSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
228  isize_simple = isize_simple + 1
229  pkdi%XP_HSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
230  isize_simple = isize_simple + 1
231  pkdi%XP_HPSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
232  isize_simple = isize_simple + 1
233  pkdi%XP_GFLUXSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
234  isize_simple = isize_simple + 1
235  pkdi%XP_USTARSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
236  isize_simple = isize_simple + 1
237  pkdi%XP_GRNDFLUX => pkdi%XBLOCK_SIMPLE(:,isize_simple)
238  isize_simple = isize_simple + 1
239  pkdi%XP_LESL => pkdi%XBLOCK_SIMPLE(:,isize_simple)
240  isize_simple = isize_simple + 1
241  pkdi%XP_SNDRIFT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
242  isize_simple = isize_simple + 1
243  pkdi%XP_CDSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
244  isize_simple = isize_simple + 1
245  pkdi%XP_CHSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
246  isize_simple = isize_simple + 1
247  pkdi%XP_SNOWHMASS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
248  isize_simple = isize_simple + 1
249  pkdi%XP_RN_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
250  isize_simple = isize_simple + 1
251  pkdi%XP_H_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
252  isize_simple = isize_simple + 1
253  pkdi%XP_LEG_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
254  isize_simple = isize_simple + 1
255  pkdi%XP_LEGI_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
256  isize_simple = isize_simple + 1
257  pkdi%XP_LEV_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
258  isize_simple = isize_simple + 1
259  pkdi%XP_LETR_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
260  isize_simple = isize_simple + 1
261  pkdi%XP_USTAR_ISBA=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
262  isize_simple = isize_simple + 1
263  pkdi%XP_LER_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
264  isize_simple = isize_simple + 1
265  pkdi%XP_LE_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
266  isize_simple = isize_simple + 1
267  pkdi%XP_LEI_ISBA => pkdi%XBLOCK_SIMPLE(:,isize_simple)
268  isize_simple = isize_simple + 1
269  pkdi%XP_GFLUX_ISBA=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
270  isize_snow = isize_snow + 1
271  pkdi%XP_SNOWLIQ => pkdi%XBLOCK_SNOW(:,:,isize_snow)
272  isize_snow = isize_snow + 1
273  pkdi%XP_SNOWDZ => pkdi%XBLOCK_SNOW(:,:,isize_snow)
274  isize_simple = isize_simple + 1
275  pkdi%XP_SWNET_N => pkdi%XBLOCK_SIMPLE(:,isize_simple)
276  isize_simple = isize_simple + 1
277  pkdi%XP_SWNET_NS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
278  isize_simple = isize_simple + 1
279  pkdi%XP_LWNET_N => pkdi%XBLOCK_SIMPLE(:,isize_simple)
280 ELSE
281  isize_0 = isize_0 + 1
282  pkdi%XP_RNSNOW => pkdi%XBLOCK_0(:,isize_0)
283  isize_0 = isize_0 + 1
284  pkdi%XP_HSNOW => pkdi%XBLOCK_0(:,isize_0)
285  isize_0 = isize_0 + 1
286  pkdi%XP_HPSNOW => pkdi%XBLOCK_0(:,isize_0)
287  isize_0 = isize_0 + 1
288  pkdi%XP_GFLUXSNOW => pkdi%XBLOCK_0(:,isize_0)
289  isize_0 = isize_0 + 1
290  pkdi%XP_USTARSNOW => pkdi%XBLOCK_0(:,isize_0)
291  isize_0 = isize_0 + 1
292  pkdi%XP_GRNDFLUX => pkdi%XBLOCK_0(:,isize_0)
293  isize_0 = isize_0 + 1
294  pkdi%XP_LESL => pkdi%XBLOCK_0(:,isize_0)
295  isize_0 = isize_0 + 1
296  pkdi%XP_SNDRIFT => pkdi%XBLOCK_0(:,isize_0)
297  isize_0 = isize_0 + 1
298  pkdi%XP_CDSNOW => pkdi%XBLOCK_0(:,isize_0)
299  isize_0 = isize_0 + 1
300  pkdi%XP_CHSNOW => pkdi%XBLOCK_0(:,isize_0)
301  isize_0 = isize_0 + 1
302  pkdi%XP_SNOWHMASS => pkdi%XBLOCK_0(:,isize_0)
303  isize_0 = isize_0 + 1
304  pkdi%XP_RN_ISBA => pkdi%XBLOCK_0(:,isize_0)
305  isize_0 = isize_0 + 1
306  pkdi%XP_H_ISBA => pkdi%XBLOCK_0(:,isize_0)
307  isize_0 = isize_0 + 1
308  pkdi%XP_LEG_ISBA => pkdi%XBLOCK_0(:,isize_0)
309  isize_0 = isize_0 + 1
310  pkdi%XP_LEGI_ISBA => pkdi%XBLOCK_0(:,isize_0)
311  isize_0 = isize_0 + 1
312  pkdi%XP_LEV_ISBA => pkdi%XBLOCK_0(:,isize_0)
313  isize_0 = isize_0 + 1
314  pkdi%XP_LETR_ISBA => pkdi%XBLOCK_0(:,isize_0)
315  isize_0 = isize_0 + 1
316  pkdi%XP_USTAR_ISBA=> pkdi%XBLOCK_0(:,isize_0)
317  isize_0 = isize_0 + 1
318  pkdi%XP_LER_ISBA => pkdi%XBLOCK_0(:,isize_0)
319  isize_0 = isize_0 + 1
320  pkdi%XP_LE_ISBA => pkdi%XBLOCK_0(:,isize_0)
321  isize_0 = isize_0 + 1
322  pkdi%XP_LEI_ISBA => pkdi%XBLOCK_0(:,isize_0)
323  isize_0 = isize_0 + 1
324  pkdi%XP_GFLUX_ISBA=> pkdi%XBLOCK_0(:,isize_0)
325  isize_00 = isize_00 + 1
326  pkdi%XP_SNOWLIQ => pkdi%XBLOCK_00(:,:,isize_00)
327  isize_00 = isize_00 + 1
328  pkdi%XP_SNOWDZ => pkdi%XBLOCK_00(:,:,isize_00)
329  isize_0 = isize_0 + 1
330  pkdi%XP_SWNET_N => pkdi%XBLOCK_0(:,isize_0)
331  isize_0 = isize_0 + 1
332  pkdi%XP_SWNET_NS => pkdi%XBLOCK_0(:,isize_0)
333  isize_0 = isize_0 + 1
334  pkdi%XP_LWNET_N => pkdi%XBLOCK_0(:,isize_0)
335 END IF
336 !
337 IF(i%TSNOW%SCHEME/='EBA') THEN
338  isize_snow = isize_snow + 1
339  pkdi%XP_SNOWTEMP => pkdi%XBLOCK_SNOW(:,:,isize_snow)
340 ELSE
341  isize_00 = isize_00 + 1
342  pkdi%XP_SNOWTEMP => pkdi%XBLOCK_00(:,:,isize_00)
343 ENDIF
344 !
345 IF(i%TSNOW%SCHEME=='EBA') THEN
346  isize_simple = isize_simple + 1
347  pkdi%XP_SNOWFREE_ALB_VEG=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
348  isize_simple = isize_simple + 1
349  pkdi%XP_SNOWFREE_ALB_SOIL=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
350 ELSE
351  isize_0 = isize_0 + 1
352  pkdi%XP_SNOWFREE_ALB_VEG=> pkdi%XBLOCK_0(:,isize_0)
353  isize_0 = isize_0 + 1
354  pkdi%XP_SNOWFREE_ALB_SOIL=> pkdi%XBLOCK_0(:,isize_0)
355 ENDIF
356 !
357 IF (i%LTR_ML) THEN
358  isize_simple = isize_simple + 1
359  pkdi%XP_FAPAR => pkdi%XBLOCK_SIMPLE(:,isize_simple)
360  isize_simple = isize_simple + 1
361  pkdi%XP_FAPIR => pkdi%XBLOCK_SIMPLE(:,isize_simple)
362  isize_simple = isize_simple + 1
363  pkdi%XP_FAPAR_BS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
364  isize_simple = isize_simple + 1
365  pkdi%XP_FAPIR_BS => pkdi%XBLOCK_SIMPLE(:,isize_simple)
366 ELSE
367  isize_0 = isize_0 + 1
368  pkdi%XP_FAPAR => pkdi%XBLOCK_0(:,isize_0)
369  isize_0 = isize_0 + 1
370  pkdi%XP_FAPIR => pkdi%XBLOCK_0(:,isize_0)
371  isize_0 = isize_0 + 1
372  pkdi%XP_FAPAR_BS => pkdi%XBLOCK_0(:,isize_0)
373  isize_0 = isize_0 + 1
374  pkdi%XP_FAPIR_BS => pkdi%XBLOCK_0(:,isize_0)
375 END IF
376 !
377 IF (i%CPHOTO/='NON') THEN
378  isize_abc = isize_abc + 1
379  pkdi%XP_IACAN => pkdi%XBLOCK_ABC(:,:,isize_abc)
380 ELSE
381  isize_00 = isize_00 + 1
382  pkdi%XP_IACAN => pkdi%XBLOCK_00(:,:,isize_00)
383 END IF
384 !
385 IF (dgi%N2M>=1) THEN
386  isize_simple = isize_simple + 1
387  pkdi%XP_T2M => pkdi%XBLOCK_SIMPLE(:,isize_simple)
388  isize_simple = isize_simple + 1
389  pkdi%XP_Q2M => pkdi%XBLOCK_SIMPLE(:,isize_simple)
390  isize_simple = isize_simple + 1
391  pkdi%XP_HU2M => pkdi%XBLOCK_SIMPLE(:,isize_simple)
392  isize_simple = isize_simple + 1
393  pkdi%XP_ZON10M => pkdi%XBLOCK_SIMPLE(:,isize_simple)
394  isize_simple = isize_simple + 1
395  pkdi%XP_MER10M => pkdi%XBLOCK_SIMPLE(:,isize_simple)
396 ELSE
397  isize_0 = isize_0 + 1
398  pkdi%XP_T2M => pkdi%XBLOCK_0(:,isize_0)
399  isize_0 = isize_0 + 1
400  pkdi%XP_Q2M => pkdi%XBLOCK_0(:,isize_0)
401  isize_0 = isize_0 + 1
402  pkdi%XP_HU2M => pkdi%XBLOCK_0(:,isize_0)
403  isize_0 = isize_0 + 1
404  pkdi%XP_ZON10M => pkdi%XBLOCK_0(:,isize_0)
405  isize_0 = isize_0 + 1
406  pkdi%XP_MER10M => pkdi%XBLOCK_0(:,isize_0)
407 END IF
408 !
409 IF (dgmi%LSURF_MISC_BUDGET) THEN
410  isize_ground = isize_ground + 1
411  pkdi%XP_SWI => pkdi%XBLOCK_GROUND(:,:,isize_ground)
412  isize_ground = isize_ground + 1
413  pkdi%XP_TSWI => pkdi%XBLOCK_GROUND(:,:,isize_ground)
414  isize_simple = isize_simple + 1
415  pkdi%XP_TWSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
416  isize_simple = isize_simple + 1
417  pkdi%XP_TDSNOW => pkdi%XBLOCK_SIMPLE(:,isize_simple)
418 ELSE
419  isize_00 = isize_00 + 1
420  pkdi%XP_SWI => pkdi%XBLOCK_00(:,:,isize_00)
421  isize_00 = isize_00 + 1
422  pkdi%XP_TSWI => pkdi%XBLOCK_00(:,:,isize_00)
423  isize_0 = isize_0 + 1
424  pkdi%XP_TWSNOW => pkdi%XBLOCK_0(:,isize_0)
425  isize_0 = isize_0 + 1
426  pkdi%XP_TDSNOW => pkdi%XBLOCK_0(:,isize_0)
427 ENDIF
428 !
429 IF(i%LGLACIER)THEN
430  isize_simple = isize_simple + 1
431  pkdi%XP_ICEFLUX=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
432 ELSE
433  isize_0 = isize_0 + 1
434  pkdi%XP_ICEFLUX=> pkdi%XBLOCK_0(:,isize_0)
435 ENDIF
436 !
437 ! MEB STUFF START
438 IF (i%LMEB_PATCH(kpatch))THEN
439  isize_simple = isize_simple + 1
440  pkdi%XP_SWUP => pkdi%XBLOCK_SIMPLE(:,isize_simple)
441  isize_simple = isize_simple + 1
442  pkdi%XP_SWNET_V => pkdi%XBLOCK_SIMPLE(:,isize_simple)
443  isize_simple = isize_simple + 1
444  pkdi%XP_SWNET_G => pkdi%XBLOCK_SIMPLE(:,isize_simple)
445  isize_simple = isize_simple + 1
446  pkdi%XP_LWUP => pkdi%XBLOCK_SIMPLE(:,isize_simple)
447  isize_simple = isize_simple + 1
448  pkdi%XP_LWNET_V => pkdi%XBLOCK_SIMPLE(:,isize_simple)
449  isize_simple = isize_simple + 1
450  pkdi%XP_LWNET_G => pkdi%XBLOCK_SIMPLE(:,isize_simple)
451  isize_simple = isize_simple + 1
452  pkdi%XP_LEVCV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
453  isize_simple = isize_simple + 1
454  pkdi%XP_LESC => pkdi%XBLOCK_SIMPLE(:,isize_simple)
455  isize_simple = isize_simple + 1
456  pkdi%XP_H_V_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
457  isize_simple = isize_simple + 1
458  pkdi%XP_H_G_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
459 ! ISIZE_SIMPLE = ISIZE_SIMPLE + 1
460 ! XP_LETRGV => XBLOCK_SIMPLE(:,ISIZE_SIMPLE)
461  isize_simple = isize_simple + 1
462  pkdi%XP_LETRCV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
463 ! ISIZE_SIMPLE = ISIZE_SIMPLE + 1
464 ! XP_LERGV => XBLOCK_SIMPLE(:,ISIZE_SIMPLE)
465  isize_simple = isize_simple + 1
466  pkdi%XP_LELITTER => pkdi%XBLOCK_SIMPLE(:,isize_simple)
467  isize_simple = isize_simple + 1
468  pkdi%XP_LELITTERI => pkdi%XBLOCK_SIMPLE(:,isize_simple)
469  isize_simple = isize_simple + 1
470  pkdi%XP_DRIPLIT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
471  isize_simple = isize_simple + 1
472  pkdi%XP_RRLIT => pkdi%XBLOCK_SIMPLE(:,isize_simple)
473  isize_simple = isize_simple + 1
474  pkdi%XP_LERCV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
475  isize_simple = isize_simple + 1
476  pkdi%XP_H_C_A => pkdi%XBLOCK_SIMPLE(:,isize_simple)
477  isize_simple = isize_simple + 1
478  pkdi%XP_H_N_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
479  isize_simple = isize_simple + 1
480  pkdi%XP_LE_C_A => pkdi%XBLOCK_SIMPLE(:,isize_simple)
481  isize_simple = isize_simple + 1
482  pkdi%XP_LE_V_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
483  isize_simple = isize_simple + 1
484  pkdi%XP_LE_G_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
485  isize_simple = isize_simple + 1
486  pkdi%XP_LE_N_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
487  isize_simple = isize_simple + 1
488  pkdi%XP_EVAP_N_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
489  isize_simple = isize_simple + 1
490  pkdi%XP_EVAP_G_C => pkdi%XBLOCK_SIMPLE(:,isize_simple)
491  isize_simple = isize_simple + 1
492  pkdi%XP_SR_GN => pkdi%XBLOCK_SIMPLE(:,isize_simple)
493  isize_simple = isize_simple + 1
494  pkdi%XP_MELTCV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
495  isize_simple = isize_simple + 1
496  pkdi%XP_FRZCV => pkdi%XBLOCK_SIMPLE(:,isize_simple)
497  isize_simple = isize_simple + 1
498  pkdi%XP_SWDOWN_GN => pkdi%XBLOCK_SIMPLE(:,isize_simple)
499  isize_simple = isize_simple + 1
500  pkdi%XP_LWDOWN_GN => pkdi%XBLOCK_SIMPLE(:,isize_simple)
501 ELSE
502  isize_0 = isize_0 + 1
503  pkdi%XP_SWUP => pkdi%XBLOCK_0(:,isize_0)
504  isize_0 = isize_0 + 1
505  pkdi%XP_SWNET_V => pkdi%XBLOCK_0(:,isize_0)
506  isize_0 = isize_0 + 1
507  pkdi%XP_SWNET_G => pkdi%XBLOCK_0(:,isize_0)
508  isize_0 = isize_0 + 1
509  pkdi%XP_LWUP => pkdi%XBLOCK_0(:,isize_0)
510  isize_0 = isize_0 + 1
511  pkdi%XP_LWNET_V => pkdi%XBLOCK_0(:,isize_0)
512  isize_0 = isize_0 + 1
513  pkdi%XP_LWNET_G => pkdi%XBLOCK_0(:,isize_0)
514  isize_0 = isize_0 + 1
515  pkdi%XP_LEVCV => pkdi%XBLOCK_0(:,isize_0)
516  isize_0 = isize_0 + 1
517  pkdi%XP_LESC => pkdi%XBLOCK_0(:,isize_0)
518  isize_0 = isize_0 + 1
519  pkdi%XP_H_V_C => pkdi%XBLOCK_0(:,isize_0)
520  isize_0 = isize_0 + 1
521  pkdi%XP_H_G_C => pkdi%XBLOCK_0(:,isize_0)
522 ! ISIZE_0 = ISIZE_0 + 1
523 ! XP_LETRGV => XBLOCK_0(:,ISIZE_0)
524  isize_0 = isize_0 + 1
525  pkdi%XP_LETRCV => pkdi%XBLOCK_0(:,isize_0)
526 ! ISIZE_0 = ISIZE_0 + 1
527 ! XP_LERGV => XBLOCK_0(:,ISIZE_0)
528  isize_0 = isize_0 + 1
529  pkdi%XP_LELITTER => pkdi%XBLOCK_0(:,isize_0)
530  isize_0 = isize_0 + 1
531  pkdi%XP_LELITTERI => pkdi%XBLOCK_0(:,isize_0)
532  isize_0 = isize_0 + 1
533  pkdi%XP_DRIPLIT => pkdi%XBLOCK_0(:,isize_0)
534  isize_0 = isize_0 + 1
535  pkdi%XP_RRLIT => pkdi%XBLOCK_0(:,isize_0)
536  isize_0 = isize_0 + 1
537  pkdi%XP_LERCV => pkdi%XBLOCK_0(:,isize_0)
538  isize_0 = isize_0 + 1
539  pkdi%XP_H_C_A => pkdi%XBLOCK_0(:,isize_0)
540  isize_0 = isize_0 + 1
541  pkdi%XP_H_N_C => pkdi%XBLOCK_0(:,isize_0)
542  isize_0 = isize_0 + 1
543  pkdi%XP_LE_C_A => pkdi%XBLOCK_0(:,isize_0)
544  isize_0 = isize_0 + 1
545  pkdi%XP_LE_V_C => pkdi%XBLOCK_0(:,isize_0)
546  isize_0 = isize_0 + 1
547  pkdi%XP_LE_G_C => pkdi%XBLOCK_0(:,isize_0)
548  isize_0 = isize_0 + 1
549  pkdi%XP_LE_N_C => pkdi%XBLOCK_0(:,isize_0)
550  isize_0 = isize_0 + 1
551  pkdi%XP_EVAP_N_C => pkdi%XBLOCK_0(:,isize_0)
552  isize_0 = isize_0 + 1
553  pkdi%XP_EVAP_G_C => pkdi%XBLOCK_0(:,isize_0)
554  isize_0 = isize_0 + 1
555  pkdi%XP_SR_GN => pkdi%XBLOCK_0(:,isize_0)
556  isize_0 = isize_0 + 1
557  pkdi%XP_MELTCV => pkdi%XBLOCK_0(:,isize_0)
558  isize_0 = isize_0 + 1
559  pkdi%XP_FRZCV => pkdi%XBLOCK_0(:,isize_0)
560  isize_0 = isize_0 + 1
561  pkdi%XP_SWDOWN_GN => pkdi%XBLOCK_0(:,isize_0)
562  isize_0 = isize_0 + 1
563  pkdi%XP_LWDOWN_GN => pkdi%XBLOCK_0(:,isize_0)
564 ENDIF
565 isize_0 = isize_0 + 1
566 pkdi%XP_LETRGV => pkdi%XBLOCK_0(:,isize_0)
567 isize_0 = isize_0 + 1
568 pkdi%XP_LERGV => pkdi%XBLOCK_0(:,isize_0)
569 !
570 IF(dgei%LWATER_BUDGET)THEN
571  isize_simple = isize_simple + 1
572  pkdi%XP_DWG=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
573  isize_simple = isize_simple + 1
574  pkdi%XP_DWGI=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
575  isize_simple = isize_simple + 1
576  pkdi%XP_DWR=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
577  isize_simple = isize_simple + 1
578  pkdi%XP_DSWE=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
579  isize_simple = isize_simple + 1
580  pkdi%XP_WATBUD=> pkdi%XBLOCK_SIMPLE(:,isize_simple)
581 ELSE
582  isize_0 = isize_0 + 1
583  pkdi%XP_DWG=> pkdi%XBLOCK_0(:,isize_0)
584  isize_0 = isize_0 + 1
585  pkdi%XP_DWGI=> pkdi%XBLOCK_0(:,isize_0)
586  isize_0 = isize_0 + 1
587  pkdi%XP_DWR=> pkdi%XBLOCK_0(:,isize_0)
588  isize_0 = isize_0 + 1
589  pkdi%XP_DSWE=> pkdi%XBLOCK_0(:,isize_0)
590  isize_0 = isize_0 + 1
591  pkdi%XP_WATBUD=> pkdi%XBLOCK_0(:,isize_0)
592 ENDIF
593 !
594 !
595 IF (isize_simple.GT.pkdi%NSIZE_SIMPLE) &
596  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_SIMPLE / NUMBER OF FIELDS")
597 IF (isize_ground.GT.pkdi%NSIZE_GROUND) &
598  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_GROUND / NUMBER OF FIELDS")
599 IF (isize_snow.GT.pkdi%NSIZE_SNOW) &
600  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_SNOW / NUMBER OF FIELDS")
601 IF (isize_ksw.GT.pkdi%NSIZE_KSW) &
602  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_KSW / NUMBER OF FIELDS")
603 IF (isize_abc.GT.pkdi%NSIZE_ABC) &
604  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_3 / NUMBER OF FIELDS")
605 IF (isize_0.GT.pkdi%NSIZE_0) &
606  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_0 / NUMBER OF FIELDS")
607 IF (isize_00.GT.pkdi%NSIZE_00) &
608  CALL abor1_sfx("PACK_DIAG_PATCH_n: PROBLEM DEFINING SIZE_00 / NUMBER OF FIELDS")
609 !
610 IF (lhook) CALL dr_hook('PACK_DIAG_PATCH_N',1,zhook_handle)
611 !------------------------------------------------------------------------
612 !
613 END SUBROUTINE pack_diag_patch_n
subroutine pack_diag_patch_n(DGEI, DGI, DGMI, I, PKDI, KSIZE, KSW, KPATCH)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6