SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
zoom_pgd_isba.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 zoom_pgd_isba (CHI, DTCO, DTI, IG, I, UG, U, USS, &
7  hprogram,hinifile,hinifiletype,hfile,hfiletype,oecoclimap)
8 ! ###########################################################
9 
10 !!
11 !! PURPOSE
12 !! -------
13 !! This program prepares the physiographic data fields.
14 !!
15 !! METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! V. Masson Meteo-France
33 !!
34 !! MODIFICATION
35 !! ------------
36 !!
37 !! Original 13/10/03
38 !! B. Decharme 2008 XWDRAIN
39 !! M.Tomasini 17/04/12 Add interpolation for ISBA variables (MODD_DATA_ISBA_n)
40 !----------------------------------------------------------------------------
41 !
42 !* 0. DECLARATION
43 ! -----------
44 !
45 !
46 !
47 !
48 !
49 !
50 USE modd_ch_isba_n, ONLY : ch_isba_t
52 USE modd_data_isba_n, ONLY : data_isba_t
53 USE modd_isba_grid_n, ONLY : isba_grid_t
54 USE modd_isba_n, ONLY : isba_t
56 USE modd_surf_atm_n, ONLY : surf_atm_t
58 !
59 USE modd_surf_par, ONLY : xundef
60 USE modd_data_cover_par, ONLY : jpcover
61 USE modd_isba_par, ONLY : xoptimgrid
62 USE modd_prep, ONLY : cingrid_type, cinterp_type
63 !
64 USE modi_get_luout
65 USE modi_open_aux_io_surf
67 USE modi_close_aux_io_surf
68 USE modi_get_surf_size_n
69 USE modi_pack_pgd
70 USE modi_zoom_pgd_isba_full
71 USE modi_get_aos_n
72 USE modi_get_sso_n
73 USE modi_pack_pgd_isba
74 !
75 USE yomhook ,ONLY : lhook, dr_hook
76 USE parkind1 ,ONLY : jprb
77 !
78 IMPLICIT NONE
79 !
80 !* 0.1 Declaration of dummy arguments
81 ! ------------------------------
82 !
83 !
84 TYPE(ch_isba_t), INTENT(INOUT) :: chi
85 TYPE(data_cover_t), INTENT(INOUT) :: dtco
86 TYPE(data_isba_t), INTENT(INOUT) :: dti
87 TYPE(isba_grid_t), INTENT(INOUT) :: ig
88 TYPE(isba_t), INTENT(INOUT) :: i
89 TYPE(surf_atm_grid_t), INTENT(INOUT) :: ug
90 TYPE(surf_atm_t), INTENT(INOUT) :: u
91 TYPE(surf_atm_sso_t), INTENT(INOUT) :: uss
92 !
93  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! program calling
94  CHARACTER(LEN=28), INTENT(IN) :: hinifile ! input atmospheric file name
95  CHARACTER(LEN=6), INTENT(IN) :: hinifiletype! input atmospheric file type
96  CHARACTER(LEN=28), INTENT(IN) :: hfile ! output file name
97  CHARACTER(LEN=6), INTENT(IN) :: hfiletype ! output file type
98 LOGICAL, INTENT(IN) :: oecoclimap ! flag to use ecoclimap
99 !
100 !
101 !* 0.2 Declaration of local variables
102 ! ------------------------------
103 !
104 INTEGER :: iversion, ibugfix
105 INTEGER :: iresp
106 INTEGER :: iluout
107 INTEGER :: il ! total 1D dimension (output grid, total surface)
108 INTEGER :: ilu ! total 1D dimension (output grid, ISBA points only)
109 REAL, DIMENSION(:), ALLOCATABLE :: zaosip ! A/S i+ on all surface points
110 REAL, DIMENSION(:), ALLOCATABLE :: zaosim ! A/S i- on all surface points
111 REAL, DIMENSION(:), ALLOCATABLE :: zaosjp ! A/S j+ on all surface points
112 REAL, DIMENSION(:), ALLOCATABLE :: zaosjm ! A/S j- on all surface points
113 REAL, DIMENSION(:), ALLOCATABLE :: zho2ip ! h/2 i+ on all surface points
114 REAL, DIMENSION(:), ALLOCATABLE :: zho2im ! h/2 i- on all surface points
115 REAL, DIMENSION(:), ALLOCATABLE :: zho2jp ! h/2 j+ on all surface points
116 REAL, DIMENSION(:), ALLOCATABLE :: zho2jm ! h/2 j- on all surface points
117 REAL, DIMENSION(:), ALLOCATABLE :: zsso_slope! subgrid slope on all surface points
118 REAL(KIND=JPRB) :: zhook_handle
119 INTEGER :: isize_lmeb_patch
120 !------------------------------------------------------------------------------
121 IF (lhook) CALL dr_hook('ZOOM_PGD_ISBA',0,zhook_handle)
122  CALL get_luout(hprogram,iluout)
123 !
124 !* 1. Preparation of IO for reading in the file
125 ! -----------------------------------------
126 !
127 !* Note that all points are read, even those without physical meaning.
128 ! These points will not be used during the horizontal interpolation step.
129 ! Their value must be defined as XUNDEF.
130 !
131  CALL open_aux_io_surf(&
132  hinifile,hinifiletype,'FULL ')
133 !
134  CALL read_surf(&
135  hinifiletype,'VERSION',iversion,iresp)
136  CALL read_surf(&
137  hinifiletype,'BUG',ibugfix,iresp)
138  CALL read_surf(&
139  hinifiletype,'PATCH_NUMBER',i%NPATCH,iresp)
140 !
141 ALLOCATE(i%LMEB_PATCH(i%NPATCH))
142 !
143 IF (iversion>=8) THEN
144 !
145  CALL read_surf(hinifiletype,'MEB_PATCH',i%LMEB_PATCH(:),iresp,hdir='-')!
146  isize_lmeb_patch = count(i%LMEB_PATCH(:))
147 !
148  IF (isize_lmeb_patch>0)THEN
149  CALL read_surf(hinifiletype,'FORC_MEASURE',i%LFORC_MEASURE,iresp)
150  CALL read_surf(hinifiletype,'MEB_LITTER',i%LMEB_LITTER,iresp)
151  ELSE
152  i%LFORC_MEASURE=.false.
153  i%LMEB_LITTER =.false.
154  ENDIF
155 !
156 ELSE
157  i%LMEB_PATCH(:)=.false.
158  i%LFORC_MEASURE=.false.
159  i%LMEB_LITTER =.false.
160 ENDIF
161 
162 
163  CALL read_surf(&
164  hinifiletype,'GROUND_LAYER',i%NGROUND_LAYER,iresp)
165  CALL read_surf(&
166  hinifiletype,'ISBA',i%CISBA,iresp)
167 IF (iversion >= 7) THEN
168  CALL read_surf(&
169  hinifiletype,'PEDOTF',i%CPEDOTF,iresp)
170 ELSE
171  i%CPEDOTF = 'CH78'
172 ENDIF
173  CALL read_surf(&
174  hinifiletype,'PHOTO',i%CPHOTO,iresp)
175 !
176 IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=2) THEN
177  !
178  CALL read_surf(&
179  hinifiletype,'TR_ML',i%LTR_ML,iresp)
180  !
181 ELSE
182  i%LTR_ML = .false.
183 ENDIF
184 !
185 IF(i%CISBA=='DIF') THEN
186  ALLOCATE(i%XSOILGRID(i%NGROUND_LAYER))
187  i%XSOILGRID=xundef
188  IF (iversion>7 .OR. iversion==7 .AND. ibugfix>=2) THEN
189  CALL read_surf(&
190  hinifiletype,'SOILGRID',i%XSOILGRID,iresp,hdir='-')
191  ELSE
192  i%XSOILGRID(1:i%NGROUND_LAYER)=xoptimgrid(1:i%NGROUND_LAYER)
193  ENDIF
194 ELSE
195  ALLOCATE(i%XSOILGRID(0))
196 ENDIF
197 !
198 !* number of biomass pools
199 !
200 IF (iversion>=6) THEN
201  CALL read_surf(&
202  hprogram,'NBIOMASS',i%NNBIOMASS,iresp)
203 ELSE
204  SELECT CASE (i%CPHOTO)
205  CASE ('AGS','LAI','AST','LST')
206  i%NNBIOMASS = 1
207  CASE ('NIT')
208  i%NNBIOMASS = 3
209  CASE ('NCB')
210  i%NNBIOMASS = 6
211  END SELECT
212 ENDIF
213 !
214  CALL close_aux_io_surf(hinifile,hinifiletype)
215 !
216 !------------------------------------------------------------------------------
217 i%LECOCLIMAP = oecoclimap
218 !
219 !-------------------------------------------------------------------------------
220 !
221 !* 7. Number of points and packing of general fields
222 ! ----------------------------------------------
223 !
224 !
225  CALL get_surf_size_n(dtco, u, &
226  'NATURE',ilu)
227 !
228 ALLOCATE(i%LCOVER (jpcover))
229 ALLOCATE(i%XZS (ilu))
230 ALLOCATE(ig%XLAT (ilu))
231 ALLOCATE(ig%XLON (ilu))
232 ALLOCATE(ig%XMESH_SIZE (ilu))
233 ALLOCATE(i%XZ0EFFJPDIR(ilu))
234 !
235  CALL pack_pgd(dtco, u, &
236  hprogram, 'NATURE', &
237  ig%CGRID, ig%XGRID_PAR, &
238  i%LCOVER, i%XCOVER, i%XZS, &
239  ig%XLAT, ig%XLON, ig%XMESH_SIZE, i%XZ0EFFJPDIR )
240 !
241 !------------------------------------------------------------------------------
242 !
243 !* 3. Reading of sand, clay, runoffb, wdrain and interpolations
244 ! --------------------------------------------------
245 !
246 ALLOCATE(i%XSAND(ilu,i%NGROUND_LAYER))
247 ALLOCATE(i%XCLAY(ilu,i%NGROUND_LAYER))
248 ALLOCATE(i%XRUNOFFB(ilu))
249 ALLOCATE(i%XWDRAIN (ilu))
250  CALL zoom_pgd_isba_full(chi, dtco, dti, ig, i, ug, u, &
251  hprogram,hinifile,hinifiletype)
252 !
253 !-------------------------------------------------------------------------------
254 !
255 !* 8. Packing of ISBA specific fields
256 ! -------------------------------
257 !
258  CALL get_surf_size_n(dtco, u, &
259  'FULL ',il)
260 !
261 ALLOCATE(zaosip(il))
262 ALLOCATE(zaosim(il))
263 ALLOCATE(zaosjp(il))
264 ALLOCATE(zaosjm(il))
265 ALLOCATE(zho2ip(il))
266 ALLOCATE(zho2im(il))
267 ALLOCATE(zho2jp(il))
268 ALLOCATE(zho2jm(il))
269 ALLOCATE(zsso_slope(il))
270 
271  CALL get_aos_n(uss, &
272  hprogram,il,zaosip,zaosim,zaosjp,zaosjm,zho2ip,zho2im,zho2jp,zho2jm)
273  CALL get_sso_n(uss, &
274  hprogram,il,zsso_slope)
275 
276  CALL pack_pgd_isba(dtco, ig, i, u, &
277  hprogram, &
278  zaosip, zaosim, zaosjp, zaosjm, &
279  zho2ip, zho2im, zho2jp, zho2jm, &
280  zsso_slope )
281 !
282 DEALLOCATE(zaosip)
283 DEALLOCATE(zaosim)
284 DEALLOCATE(zaosjp)
285 DEALLOCATE(zaosjm)
286 DEALLOCATE(zho2ip)
287 DEALLOCATE(zho2im)
288 DEALLOCATE(zho2jp)
289 DEALLOCATE(zho2jm)
290 DEALLOCATE(zsso_slope)
291 IF (lhook) CALL dr_hook('ZOOM_PGD_ISBA',1,zhook_handle)
292 !-------------------------------------------------------------------------------
293 !
294 END SUBROUTINE zoom_pgd_isba
subroutine get_surf_size_n(DTCO, U, HTYPE, KL)
subroutine pack_pgd(DTCO, U, HPROGRAM, HSURF, HGRID, PGRID_PAR, OCOVER, PCOVER, PZS, PLAT, PLON, PMESH_SIZE, PDIR)
Definition: pack_pgd.F90:6
subroutine get_aos_n(USS, HPROGRAM, KI, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM)
Definition: get_aosn.F90:6
subroutine zoom_pgd_isba_full(CHI, DTCO, DTI, IG, I, UG, U, HPROGRAM, HINIFILE, HINIFILETYPE)
subroutine zoom_pgd_isba(CHI, DTCO, DTI, IG, I, UG, U, USS, HPROGRAM, HINIFILE, HINIFILETYPE, HFILE, HFILETYPE, OECOCLIMAP)
subroutine close_aux_io_surf(HFILE, HFILETYPE)
subroutine open_aux_io_surf(HFILE, HFILETYPE, HMASK)
subroutine get_sso_n(USS, HPROGRAM, KI, PSSO_SLOPE)
Definition: get_sson.F90:6
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine pack_pgd_isba(DTCO, IG, I, U, HPROGRAM, PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP, PHO2JM, PSSO_SLOPE)