SURFEX v8.1
General documentation of Surfex
allocate_physio.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 allocate_physio (IO, KK, PK, PEK, KVEGTYPE )
7 ! ##########################################################################
8 !
9 !!**** *ALLOCATE_PHYSIO* -
10 !!
11 !! PURPOSE
12 !! -------
13 !!
14 !!** METHOD
15 !! ------
16 !!
17 !! EXTERNAL
18 !! --------
19 !!
20 !!
21 !! IMPLICIT ARGUMENTS
22 !! ------------------
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !!
32 !! MODIFICATIONS
33 !! -------------
34 !! Original xx/xxxx
35 !! Modified 10/2014 P. Samuelsson MEB
36 !
37 !
40 !
42 !
43 USE modd_agri, ONLY : lagrip
44 !
45 USE modd_treedrag, ONLY : ltreedrag
46 !
47 USE yomhook ,ONLY : lhook, dr_hook
48 USE parkind1 ,ONLY : jprb
49 !
50 IMPLICIT NONE
51 !
52 !
53 TYPE(isba_options_t), INTENT(INOUT) :: IO
54 TYPE(isba_k_t), INTENT(INOUT) :: KK
55 TYPE(isba_p_t), INTENT(INOUT) :: PK
56 TYPE(isba_pe_t), INTENT(INOUT) :: PEK
57 !
58 INTEGER, INTENT(IN) :: KVEGTYPE
59 !
60 INTEGER :: ISIZE
61 INTEGER :: ISIZE_LMEB_PATCH ! Number of patches with MEB=true
62 !
63 !
64 REAL(KIND=JPRB) :: ZHOOK_HANDLE
65 !
66 !-------------------------------------------------------------------------------
67 !
68 ! Mask and number of grid elements containing patches/tiles:
69 !
70 IF (lhook) CALL dr_hook('ALLOCATE_PHYSIO',0,zhook_handle)
71 !
72 isize = pk%NSIZE_P
73 !
74 isize_lmeb_patch=count(io%LMEB_PATCH(:))
75 !
76 ALLOCATE(pk%XDG (isize,io%NGROUND_LAYER))
77 ALLOCATE(pk%XD_ICE (isize ))
78 !
79 ALLOCATE(pek%XLAI (isize ))
80 ALLOCATE(pek%XVEG (isize ))
81 ALLOCATE(pek%XZ0 (isize ))
82 ALLOCATE(pek%XEMIS (isize ))
83 !
84 ALLOCATE(pek%XRSMIN (isize ))
85 ALLOCATE(pek%XGAMMA (isize ))
86 ALLOCATE(pek%XWRMAX_CF (isize ))
87 ALLOCATE(pek%XRGL (isize ))
88 ALLOCATE(pek%XCV (isize ))
89 ALLOCATE(pek%XALBNIR_VEG (isize ))
90 ALLOCATE(pek%XALBVIS_VEG (isize ))
91 ALLOCATE(pek%XALBUV_VEG (isize ))
92 !
93 ALLOCATE(pk%XZ0_O_Z0H (isize ))
94 !
95 IF (isize_lmeb_patch>0 .OR. io%CPHOTO/='NON') THEN
96  ALLOCATE(pek%XBSLAI (isize ))
97 ELSE
98  ALLOCATE(pek%XBSLAI (0))
99 ENDIF
100 ! - vegetation: Ags parameters ('AGS', 'LAI', 'AST', 'LST', 'NIT' options)
101 !
102 IF (io%CPHOTO/='NON'.OR.ltreedrag) THEN
103  ALLOCATE(pk%XH_TREE (isize ))
104 ELSE
105  ALLOCATE(pk%XH_TREE (0 ))
106 ENDIF
107 !
108 IF (io%CPHOTO/='NON') THEN
109  ALLOCATE(pk%XRE25 (isize ))
110  ALLOCATE(pk%XDMAX (isize ))
111  ALLOCATE(pek%XLAIMIN (isize ))
112  ALLOCATE(pek%XSEFOLD (isize ))
113  ALLOCATE(pek%XGMES (isize ))
114  ALLOCATE(pek%XGC (isize ))
115  ALLOCATE(pek%XF2I (isize ))
116  ALLOCATE(pek%LSTRESS (isize ))
117  IF (io%CPHOTO=='NIT' .OR. io%CPHOTO=='NCB') THEN
118  ALLOCATE(pek%XCE_NITRO (isize ))
119  ALLOCATE(pek%XCF_NITRO (isize ))
120  ALLOCATE(pek%XCNA_NITRO (isize ))
121  ELSE
122  ALLOCATE(pek%XCE_NITRO (0))
123  ALLOCATE(pek%XCF_NITRO (0))
124  ALLOCATE(pek%XCNA_NITRO (0))
125  ENDIF
126 ELSE
127  ALLOCATE(pk%XRE25 (0))
128  ALLOCATE(pk%XDMAX (0))
129  ALLOCATE(pek%XLAIMIN (0))
130  ALLOCATE(pek%XSEFOLD (0))
131  ALLOCATE(pek%XGMES (0))
132  ALLOCATE(pek%XGC (0))
133  ALLOCATE(pek%XF2I (0))
134  ALLOCATE(pek%LSTRESS (0))
135  ALLOCATE(pek%XCE_NITRO (0))
136  ALLOCATE(pek%XCF_NITRO (0))
137  ALLOCATE(pek%XCNA_NITRO(0))
138 ENDIF
139 !
140 ! - Irrigation, seeding and reaping
141 !
142 IF (lagrip .AND. (io%CPHOTO == 'NIT' .OR. io%CPHOTO == 'NCB')) THEN
143  ALLOCATE(pek%TSEED (isize ))
144  ALLOCATE(pek%TREAP (isize ))
145  ALLOCATE(pek%XWATSUP (isize ))
146  ALLOCATE(pek%XIRRIG (isize ))
147 ELSE
148  ALLOCATE(pek%TSEED (0))
149  ALLOCATE(pek%TREAP (0))
150  ALLOCATE(pek%XWATSUP (0))
151  ALLOCATE(pek%XIRRIG (0))
152 ENDIF
153 !
154 ! - ISBA-DF scheme
155 !
156 IF(io%CISBA=='DIF')THEN
157  ALLOCATE(pk%XROOTFRAC (isize,io%NGROUND_LAYER))
158  ALLOCATE(pk%NWG_LAYER (isize))
159  ALLOCATE(pk%XDROOT (isize))
160  ALLOCATE(pk%XDG2 (isize))
161 ELSE
162  ALLOCATE(pk%XROOTFRAC (0,0))
163  ALLOCATE(pk%NWG_LAYER (0) )
164  ALLOCATE(pk%XDROOT (0) )
165  ALLOCATE(pk%XDG2 (0) )
166 ENDIF
167 !
168 ALLOCATE(pek%XGNDLITTER (isize))
169 ALLOCATE(pek%XZ0LITTER (isize))
170 ALLOCATE(pek%XH_VEG (isize))
171 !
172 IF (lhook) CALL dr_hook('ALLOCATE_PHYSIO',1,zhook_handle)
173 !
174 END SUBROUTINE allocate_physio
integer, parameter jprb
Definition: parkind1.F90:32
subroutine allocate_physio(IO, KK, PK, PEK, KVEGTYPE)
logical lhook
Definition: yomhook.F90:15
static int count
Definition: memory_hook.c:21