SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
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 (I, &
7  hphoto, hisba, klu, kvegtype, kground_layer, kpatch, &
8  pvegtype, plai, pveg, pz0, pemis, pdg, pd_ice, &
9  prsmin, pgamma, pwrmax_cf, prgl, pcv, &
10  pz0_o_z0h, palbnir_veg, palbvis_veg, palbuv_veg, &
11  ph_tree, pre25, plaimin, pbslai, psefold, &
12  pgmes, pgc, pf2i, pdmax, ostress, &
13  pce_nitro, pcf_nitro, pcna_nitro, &
14  ptseed, ptreap, pwatsup, pirrig, &
15  prootfrac, kwg_layer, pdroot, pdg2, &
16  pgndlitter,prglgv,pgammagv,prsmingv, &
17  prootfracgv,pwrmax_cfgv,plaigv,pz0litter,ph_veg )
18 ! ##########################################################################
19 !
20 !!**** *ALLOCATE_PHYSIO* -
21 !!
22 !! PURPOSE
23 !! -------
24 !!
25 !!** METHOD
26 !! ------
27 !!
28 !! EXTERNAL
29 !! --------
30 !!
31 !!
32 !! IMPLICIT ARGUMENTS
33 !! ------------------
34 !!
35 !! REFERENCE
36 !! ---------
37 !!
38 !!
39 !! AUTHOR
40 !! ------
41 !!
42 !!
43 !! MODIFICATIONS
44 !! -------------
45 !! Original xx/xxxx
46 !! Modified 10/2014 P. Samuelsson MEB
47 !
48 !
49 USE modd_isba_n, ONLY : isba_t
50 !
52 !
53 USE modd_treedrag, ONLY : ltreedrag
54 !
55 USE yomhook ,ONLY : lhook, dr_hook
56 USE parkind1 ,ONLY : jprb
57 !
58 IMPLICIT NONE
59 !
60 !
61 TYPE(isba_t), INTENT(INOUT) :: i
62 !
63 INTEGER :: isize_lmeb_patch ! Number of patches with MEB=true
64 !
65  CHARACTER(LEN=3),INTENT(IN) :: hphoto
66  CHARACTER(LEN=3),INTENT(IN) :: hisba
67 !
68 INTEGER, INTENT(IN) :: klu
69 INTEGER, INTENT(IN) :: kvegtype
70 INTEGER, INTENT(IN) :: kground_layer
71 INTEGER, INTENT(IN) :: kpatch
72 !
73 REAL, DIMENSION(:,:), POINTER :: pvegtype
74 !
75 REAL, DIMENSION(:,:), POINTER :: plai
76 REAL, DIMENSION(:,:), POINTER :: pveg
77 REAL, DIMENSION(:,:), POINTER :: pz0
78 REAL, DIMENSION(:,:), POINTER :: pemis
79 !
80 REAL, DIMENSION(:,:,:), POINTER :: pdg
81 REAL, DIMENSION(:,:) , POINTER :: pd_ice
82 !
83 REAL, DIMENSION(:,:), POINTER :: prsmin
84 REAL, DIMENSION(:,:), POINTER :: pgamma
85 REAL, DIMENSION(:,:), POINTER :: pwrmax_cf
86 REAL, DIMENSION(:,:), POINTER :: prgl
87 REAL, DIMENSION(:,:), POINTER :: pcv
88 REAL, DIMENSION(:,:), POINTER :: pz0_o_z0h
89 REAL, DIMENSION(:,:), POINTER :: palbnir_veg
90 REAL, DIMENSION(:,:), POINTER :: palbvis_veg
91 REAL, DIMENSION(:,:), POINTER :: palbuv_veg
92 !
93 REAL, DIMENSION(:,:), POINTER :: ph_tree
94 REAL, DIMENSION(:,:), POINTER :: pre25
95 REAL, DIMENSION(:,:), POINTER :: plaimin
96 REAL, DIMENSION(:,:), POINTER :: pbslai
97 REAL, DIMENSION(:,:), POINTER :: psefold
98 REAL, DIMENSION(:,:), POINTER :: pgmes
99 REAL, DIMENSION(:,:), POINTER :: pgc
100 REAL, DIMENSION(:,:), POINTER :: pf2i
101 REAL, DIMENSION(:,:), POINTER :: pdmax
102 LOGICAL, DIMENSION(:,:), POINTER :: ostress
103 REAL, DIMENSION(:,:), POINTER :: pce_nitro
104 REAL, DIMENSION(:,:), POINTER :: pcf_nitro
105 REAL, DIMENSION(:,:), POINTER :: pcna_nitro
106 !
107 TYPE(date_time), DIMENSION(:,:), POINTER :: ptseed
108 TYPE(date_time), DIMENSION(:,:), POINTER :: ptreap
109 REAL, DIMENSION(:,:), POINTER :: pwatsup
110 REAL, DIMENSION(:,:), POINTER :: pirrig
111 !
112 REAL, DIMENSION(:,:,:), POINTER :: prootfrac
113 INTEGER, DIMENSION(:,:), POINTER :: kwg_layer
114 REAL, DIMENSION(:,:), POINTER :: pdroot
115 REAL, DIMENSION(:,:), POINTER :: pdg2
116 !
117 REAL, DIMENSION(:,:), POINTER :: pgndlitter
118 REAL, DIMENSION(:,:), POINTER :: prglgv
119 REAL, DIMENSION(:,:), POINTER :: pgammagv
120 REAL, DIMENSION(:,:), POINTER :: prsmingv
121 REAL, DIMENSION(:,:,:), POINTER :: prootfracgv
122 REAL, DIMENSION(:,:), POINTER :: pwrmax_cfgv
123 REAL, DIMENSION(:,:), POINTER :: plaigv
124 REAL, DIMENSION(:,:), POINTER :: pz0litter
125 REAL, DIMENSION(:,:), POINTER :: ph_veg
126 !
127 REAL(KIND=JPRB) :: zhook_handle
128 !
129 !-------------------------------------------------------------------------------
130 !
131 ! Mask and number of grid elements containing patches/tiles:
132 !
133 IF (lhook) CALL dr_hook('ALLOCATE_PHYSIO',0,zhook_handle)
134 !
135 isize_lmeb_patch=count(i%LMEB_PATCH(:))
136 !
137 ALLOCATE(pvegtype(klu,kvegtype ))
138 !
139 ALLOCATE(plai(klu,kpatch ))
140 ALLOCATE(pveg(klu,kpatch ))
141 ALLOCATE(pz0(klu,kpatch ))
142 ALLOCATE(pemis(klu,kpatch ))
143 !
144 ALLOCATE(pdg(klu,kground_layer,kpatch))
145 ALLOCATE(pd_ice(klu,kpatch ))
146 !
147 ALLOCATE(prsmin(klu,kpatch ))
148 ALLOCATE(pgamma(klu,kpatch ))
149 ALLOCATE(pwrmax_cf(klu,kpatch ))
150 ALLOCATE(prgl(klu,kpatch ))
151 ALLOCATE(pcv(klu,kpatch ))
152 ALLOCATE(pz0_o_z0h(klu,kpatch ))
153 ALLOCATE(palbnir_veg(klu,kpatch ))
154 ALLOCATE(palbvis_veg(klu,kpatch ))
155 ALLOCATE(palbuv_veg(klu,kpatch ))
156 !
157 IF (isize_lmeb_patch>0 .OR. hphoto/='NON') THEN
158  ALLOCATE(pbslai(klu,kpatch ))
159 ELSE
160  ALLOCATE(pbslai(0,0))
161 ENDIF
162 ! - vegetation: Ags parameters ('AGS', 'LAI', 'AST', 'LST', 'NIT' options)
163 !
164 IF (hphoto/='NON'.OR.ltreedrag) THEN
165  ALLOCATE(ph_tree(klu,kpatch ))
166 ELSE
167  ALLOCATE(ph_tree(0,0 ))
168 ENDIF
169 !
170 IF (hphoto/='NON') THEN
171  ALLOCATE(pre25(klu,kpatch ))
172  ALLOCATE(plaimin(klu,kpatch ))
173  ALLOCATE(psefold(klu,kpatch ))
174  ALLOCATE(pgmes(klu,kpatch ))
175  ALLOCATE(pgc(klu,kpatch ))
176  ALLOCATE(pdmax(klu,kpatch ))
177  IF (hphoto/='AGS' .AND. hphoto/='LAI') THEN
178  ALLOCATE(pf2i(klu,kpatch ))
179  ALLOCATE(ostress(klu,kpatch ))
180  IF (hphoto=='NIT' .OR. hphoto=='NCB') THEN
181  ALLOCATE(pce_nitro(klu,kpatch ))
182  ALLOCATE(pcf_nitro(klu,kpatch ))
183  ALLOCATE(pcna_nitro(klu,kpatch ))
184  ELSE
185  ALLOCATE(pce_nitro(0,0))
186  ALLOCATE(pcf_nitro(0,0))
187  ALLOCATE(pcna_nitro(0,0))
188 
189  ENDIF
190  ELSE
191  ALLOCATE(pf2i(0,0))
192  ALLOCATE(ostress(0,0))
193  ALLOCATE(pce_nitro(0,0))
194  ALLOCATE(pcf_nitro(0,0))
195  ALLOCATE(pcna_nitro(0,0))
196  ENDIF
197 ELSE
198  ALLOCATE(pre25(0,0))
199  ALLOCATE(plaimin(0,0))
200  ALLOCATE(psefold(0,0))
201  ALLOCATE(pgmes(0,0))
202  ALLOCATE(pgc(0,0))
203  ALLOCATE(pf2i(0,0))
204  ALLOCATE(pdmax(0,0))
205  ALLOCATE(ostress(0,0))
206  ALLOCATE(pce_nitro(0,0))
207  ALLOCATE(pcf_nitro(0,0))
208  ALLOCATE(pcna_nitro(0,0))
209 ENDIF
210 !
211 ! - Irrigation, seeding and reaping
212 !
213 IF (hphoto == 'LAI' .OR. hphoto == 'LST' .OR. hphoto == 'NIT' .OR. hphoto == 'NCB') THEN
214  ALLOCATE(ptseed(klu,kpatch ))
215  ALLOCATE(ptreap(klu,kpatch ))
216  ALLOCATE(pwatsup(klu,kpatch ))
217  ALLOCATE(pirrig(klu,kpatch ))
218 ELSE
219  ALLOCATE(ptseed(0,0))
220  ALLOCATE(ptreap(0,0))
221  ALLOCATE(pwatsup(0,0))
222  ALLOCATE(pirrig(0,0))
223 ENDIF
224 !
225 ! - ISBA-DF scheme
226 !
227 IF(hisba=='DIF')THEN
228  ALLOCATE(prootfrac(klu,kground_layer,kpatch))
229  ALLOCATE(kwg_layer(klu,kpatch))
230  ALLOCATE(pdroot(klu,kpatch))
231  ALLOCATE(pdg2(klu,kpatch))
232 ELSE
233  ALLOCATE(prootfrac(0,0,0))
234  ALLOCATE(kwg_layer(0,0) )
235  ALLOCATE(pdroot(0,0) )
236  ALLOCATE(pdg2(0,0) )
237 ENDIF
238 !
239 ALLOCATE(pgndlitter(klu,kpatch))
240 ALLOCATE(prglgv(klu,kpatch))
241 ALLOCATE(pgammagv(klu,kpatch))
242 ALLOCATE(prsmingv(klu,kpatch))
243 ALLOCATE(prootfracgv(klu,kground_layer,kpatch))
244 ALLOCATE(pwrmax_cfgv(klu,kpatch))
245 ALLOCATE(plaigv(klu,kpatch))
246 ALLOCATE(pz0litter(klu,kpatch))
247 ALLOCATE(ph_veg(klu,kpatch))
248 !
249 IF (lhook) CALL dr_hook('ALLOCATE_PHYSIO',1,zhook_handle)
250 !
251 END SUBROUTINE allocate_physio
subroutine allocate_physio(I, HPHOTO, HISBA, KLU, KVEGTYPE, KGROUND_LAYER, KPATCH, PVEGTYPE, PLAI, PVEG, PZ0, PEMIS, PDG, PD_ICE, PRSMIN, PGAMMA, PWRMAX_CF, PRGL, PCV, PZ0_O_Z0H, PALBNIR_VEG, PALBVIS_VEG, PALBUV_VEG, PH_TREE, PRE25, PLAIMIN, PBSLAI, PSEFOLD, PGMES, PGC, PF2I, PDMAX, OSTRESS, PCE_NITRO, PCF_NITRO, PCNA_NITRO, PTSEED, PTREAP, PWATSUP, PIRRIG, PROOTFRAC, KWG_LAYER, PDROOT, PDG2, PGNDLITTER, PRGLGV, PGAMMAGV, PRSMINGV, PROOTFRACGV, PWRMAX_CFGV, PLAIGV, PZ0LITTER, PH_VEG)