SURFEX v8.1
General documentation of Surfex
init_surf_atmn.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 init_surf_atm_n (YSC, HPROGRAM,HINIT, OLAND_USE, &
7  KI,KSV,KSW, HSV,PCO2,PRHOA, &
8  PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
9  PEMIS,PTSRAD,PTSURF, &
10  KYEAR, KMONTH,KDAY, PTIME, TPDATE_END, &
11  HATMFILE,HATMFILETYPE, HTEST )
12 !#############################################################
13 !
14 !!**** *INIT_SURF_ATM_n* - routine to initialize GROUND
15 !!
16 !! PURPOSE
17 !! -------
18 !!
19 !!** METHOD
20 !! ------
21 !!
22 !! EXTERNAL
23 !! --------
24 !!
25 !!
26 !! IMPLICIT ARGUMENTS
27 !! ------------------
28 !!
29 !! REFERENCE
30 !! ---------
31 !!
32 !!
33 !! AUTHOR
34 !! ------
35 !! V. Masson *Meteo France*
36 !!
37 !! MODIFICATIONS
38 !! -------------
39 !! Original 01/2003
40 ! (P.Tulet ) 01/11/03 initialisation of the surface chemistry!
41 !! (D.Gazen) 01/12/03 change emissions handling for surf. externalization
42 !! (P.LeMoigne) 18/07/05 get 1d mask only if associated tile exists
43 !! (B.Decharme) 03/2009 New keys read for arrange cover by user
44 !! (B.Decharme) 04/2009 Read precipitation forcing from the restart file for ARPEGE/ALADIN run
45 !! (A. Lemonsu) 2009 New key read for urban green areas
46 !! (B.Decharme) 07/2011 Read pgd+prep
47 !! (S. Queguiner) 2011 Modif chemistry (2.4)
48 !! (B. Decharme) 2013 Read grid only once in AROME case
49 !! (G. Tanguy) 2013 Add IF(ALLOCATED(NMASK_FULL)) before deallocate
50 !! B. Decharme 04/2013 new coupling variables
51 !! Delete LPROVAR_TO_DIAG check
52 !! Delete NWG_LAYER_TOT
53 !! (J.Escobar) 10/06/2013: replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
54 !! (J.Durand) 2014 add activation of chemical deposition if LCH_EMIS=F
55 !! R. Séférian 03/2014 Adding decoupling between CO2 seen by photosynthesis and radiative CO2
56 !! M.Leriche & V. Masson 05/16 bug in write emis fields for nest
57 !-------------------------------------------------------------------------------
58 !
59 !* 0. DECLARATIONS
60 ! ------------
61 !
62 USE modd_type_date_surf, ONLY : date
63 !
64 USE modd_surfex_n, ONLY : surfex_t
65 !
66 USE modd_surf_atm, ONLY : xco2uncpl
67 !
68 USE modd_read_namelist, ONLY : lnam_read
69 USE modd_surf_conf, ONLY : cprogname
72 
73 USE modd_data_cover_par, ONLY : ntilesfc
76 !
77 USE modd_surf_par, ONLY : xundef, nundef
80 !
82  nrank, npio, nsize
83 USE modd_surfex_omp, ONLY : nblocktot
84 !
85 USE modd_mask, ONLY: nmask_full
87 !
88 USE modi_init_io_surf_n
89 USE modi_default_sso
90 USE modi_default_ch_surf_atm
91 USE modi_default_diag_surf_atm
92 USE modi_read_default_surf_atm_n
93 USE modi_read_surf_atm_conf_n
94 USE modi_read_surf_atm_date
95 USE modi_read_nam_prep_surf_n
97 USE modi_sunpos
98 USE modi_get_size_full_n
99 USE modi_read_cover_n
100 USE modi_read_sso_n
101 USE modi_subscale_z0eff
102 USE modi_read_sso_canopy_n
103 USE modi_read_dummy_n
104 USE modi_read_grid
105 USE modi_read_gridtype
106 USE modi_end_io_surf_n
107 USE modi_prep_ctrl_surf_atm
108 USE modi_average_rad
109 USE modi_average_tsurf
110 USE modi_init_chemical_n
111 USE modi_ch_init_depconst
112 USE modi_ch_init_emission_n
113 USE modi_ch_init_snap_n
114 USE modi_open_namelist
115 USE modi_close_namelist
116 USE modi_abor1_sfx
117 USE modi_alloc_diag_surf_atm_n
118 USE modi_get_1d_mask
119 USE modi_ini_data_cover
120 USE modi_init_inland_water_n
121 USE modi_init_nature_n
122 USE modi_init_sea_n
123 USE modi_init_town_n
124 USE modi_read_arrange_cover
125 USE modi_read_cover_garden
126 USE modi_read_eco2_irrig
127 USE modi_read_lclim_lai
128 USE modi_read_lecoclimap
129 USE modi_surf_version
130 USE modi_get_luout
131 USE modi_set_surfex_filein
132 !
133 USE modi_init_cpl_gcm_n
134 !
135 USE yomhook ,ONLY : lhook, dr_hook
136 USE parkind1 ,ONLY : jprb
137 !
138 IMPLICIT NONE
139 !
140 #ifdef SFX_MPI
141 include 'mpif.h'
142 #endif
143 !
144 !* 0.1 Declarations of arguments
145 ! -------------------------
146 !
147 !
148 TYPE(surfex_t), INTENT(INOUT) :: YSC
149 !
150  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
151  CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
152 LOGICAL, INTENT(IN) :: OLAND_USE !
153 INTEGER, INTENT(IN) :: KI ! number of points
154 INTEGER, INTENT(IN) :: KSV ! number of scalars
155 INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
156  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables
157 REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3)
158 REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density
159 REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle
160 REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! solar azimuthal angle (rad from N, clock)
161 REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band
162 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band
163 REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band
164 REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity
165 REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature
166 REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
167 !
168 INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
169 INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
170 INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
171 REAL, INTENT(IN) :: PTIME ! current time since
172  ! midnight (UTC, s)
173 TYPE(date), INTENT(INOUT) :: TPDATE_END
174 !
175  CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name
176  CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type
177  CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
178 !
179 !* 0.2 Declarations of local variables
180 ! -------------------------------
181 !
182  CHARACTER(LEN=3) :: YREAD
183 !
184 INTEGER :: ISWB ! number of shortwave bands
185 INTEGER :: JTILE ! loop counter on tiles
186 INTEGER :: IRESP ! error return code
187 INTEGER :: ILUOUT ! unit of output listing file
188 INTEGER :: ICH ! unit of input chemical file
189 INTEGER :: IVERSION, IBUGFIX ! surface version
190 !
191 INTEGER, DIMENSION(:), ALLOCATABLE :: ISIZE_OMP
192 !
193 LOGICAL :: LZENITH ! is the PZENITH field initialized ?
194 !
195 REAL, DIMENSION(:,:), ALLOCATABLE :: ZFRAC_TILE ! fraction of each surface type
196 REAL, DIMENSION(KI,KSW,NTILESFC) :: ZDIR_ALB_TILE ! direct albedo
197 REAL, DIMENSION(KI,KSW,NTILESFC) :: ZSCA_ALB_TILE ! diffuse albedo
198 REAL, DIMENSION(KI,NTILESFC) :: ZEMIS_TILE ! emissivity
199 REAL, DIMENSION(KI,NTILESFC) :: ZTSRAD_TILE ! radiative temperature
200 REAL, DIMENSION(KI,NTILESFC) :: ZTSURF_TILE ! effective temperature
201 REAL, DIMENSION(KI) :: ZZENITH ! zenith angle
202 REAL, DIMENSION(KI) :: ZAZIM ! azimuth angle
203 REAL, DIMENSION(KI) :: ZTSUN ! solar time since midnight
204 !
205 REAL, DIMENSION(:), ALLOCATABLE :: ZP_ZENITH ! zenithal angle
206 REAL, DIMENSION(:), ALLOCATABLE :: ZP_AZIM ! azimuthal angle
207 REAL, DIMENSION(:), ALLOCATABLE :: ZP_CO2 ! air CO2 concentration
208 REAL, DIMENSION(:), ALLOCATABLE :: ZP_RHOA ! air density
209 REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_ALB ! direct albedo
210 REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_ALB ! diffuse albedo
211 REAL, DIMENSION(:), ALLOCATABLE :: ZP_EMIS ! emissivity
212 REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSRAD ! radiative temperature
213 REAL, DIMENSION(:), ALLOCATABLE :: ZP_TSURF ! surface effective temperature
214 !
215 REAL, DIMENSION(:), ALLOCATABLE :: ZZ0VEG
216 REAL :: XTIME0
217 !
218 INTEGER :: ISIZE_FULL
219 !
220 REAL(KIND=JPRB) :: ZHOOK_HANDLE
221 !-------------------------------------------------------------------------------
222 !
223 IF (lhook) CALL dr_hook('INIT_SURF_ATM_N',0,zhook_handle)
224 !
225 !
226  cprogname=hprogram
227 !
228 IF (htest/='OK') THEN
229  CALL abor1_sfx('INIT_SURF_ATMN: FATAL ERROR DURING ARGUMENT TRANSFER')
230 END IF
231 !
232 !-------------------------------------------------------------------------------
233 !
234  CALL surf_version
235 !
236 !-------------------------------------------------------------------------------
237 !
238  CALL get_luout(hprogram,iluout)
239 !
240 IF (lnam_read) THEN
241  !
242  !* 0. Defaults
243  ! --------
244  !
245  ! 0.1. Hard defaults
246  !
247  CALL default_sso(ysc%USS%CROUGH, ysc%USS%XFRACZ0, ysc%USS%XCOEFBE)
248  CALL default_ch_surf_atm(ysc%CHU%CCHEM_SURF_FILE, ysc%CHU%LCH_SURF_EMIS)
249  CALL default_diag_surf_atm(ysc%DUO%N2M, ysc%DUO%LT2MMW, ysc%DUO%LSURF_BUDGET,&
250  ysc%DUO%L2M_MIN_ZS, ysc%DUO%LRAD_BUDGET, ysc%DUO%LCOEF,&
251  ysc%DUO%LSURF_VARS, ysc%DUO%LSURF_BUDGETC, &
252  ysc%DUO%LRESET_BUDGETC, ysc%DUO%LSELECT, &
253  ysc%DUO%LPROVAR_TO_DIAG, ysc%DUO%LDIAG_GRID, &
254  ysc%DUO%LFRAC, ysc%DUO%XDIAG_TSTEP, &
255  ysc%DUO%LSNOWDIMNC, ysc%DUO%LRESETCUMUL )
256  !
257 ENDIF
258 !
259 ! 0.2. Defaults from file header
260 !
261  CALL read_default_surf_atm_n(ysc%CHU, ysc%DUO, ysc%USS, hprogram)
262 !
263 !* 1. Reading of configuration
264 ! ------------------------
265 !
266 ! 1.1. general options (diagnostics, etc...)
267 !
268  CALL read_surf_atm_conf_n(ysc%CHU, ysc%DUO, ysc%USS, hprogram)
269 !
270 IF(xco2uncpl/=xundef)THEN
271  WRITE(iluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
272  WRITE(iluout,*)'!!! !!!'
273  WRITE(iluout,*)'!!! WARNING WARNING !!!'
274  WRITE(iluout,*)'!!! !!!'
275  WRITE(iluout,*)'!!! Decoupling between CO2 for photosynthesis !!!'
276  WRITE(iluout,*)'!!! and atmospheric CO2 activated !!!'
277  WRITE(iluout,*)'!!! In NAM_SURF_ATM XCO2UNCPL =',xco2uncpl,' !!!'
278  WRITE(iluout,*)'!!! !!!'
279  WRITE(iluout,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
280 ENDIF
281 !
282 ! 1.2. Date
283 !
284 SELECT CASE (hinit)
285  CASE ('PGD')
286  ysc%U%TTIME%TDATE%YEAR = nundef
287  ysc%U%TTIME%TDATE%MONTH= nundef
288  ysc%U%TTIME%TDATE%DAY = nundef
289  ysc%U%TTIME%TIME = xundef
290 
291  CASE ('PRE')
292  ! check that diagnostics are off if hinit=='pre'
293  CALL prep_ctrl_surf_atm(ysc%DUO, lnowrite_texfile, iluout)
294  ! preparation of fields (date not present in PGD file)
295  IF (lnam_read) CALL read_nam_prep_surf_n(hprogram)
296  CALL read_surf_atm_date(hprogram,hinit,iluout,hatmfile,hatmfiletype,kyear,kmonth,kday,ptime,ysc%U%TTIME)
297 
298  CASE DEFAULT
299  CALL init_io_surf_n(ysc%DTCO, ysc%U, hprogram,'FULL ','SURF ','READ ')
300  CALL read_surf(hprogram,'DTCUR',ysc%U%TTIME,iresp)
301  CALL end_io_surf_n(hprogram)
302  lwrite_extern = .false.
303 
304 END SELECT
305 !
306 !-----------------------------------------------------------------------------------------------------
307 ! READ PGD FILE
308 !-----------------------------------------------------------------------------------------------------
309 !
310 ! 1.3. Schemes used
311 !
312 ! Initialisation for IO
313 !
314  CALL set_surfex_filein(hprogram,'PGD ') ! change input file name to pgd name
315  CALL init_io_surf_n(ysc%DTCO, ysc%U, hprogram,'FULL ','SURF ','READ ')
316  CALL read_surf(hprogram,'DIM_FULL ',ysc%U%NDIM_FULL, iresp)
317  CALL end_io_surf_n(hprogram)
318  CALL init_io_surf_n(ysc%DTCO, ysc%U, hprogram,'FULL ','SURF ','READ ')
319 
320 !
321  CALL read_surf(hprogram,'VERSION',iversion,iresp)
322  CALL read_surf(hprogram,'BUG',ibugfix,iresp)
323 !
324 IF (iversion>7 .OR. iversion==7 .AND.ibugfix>=2) THEN
325  CALL read_surf(hprogram,'STORAGETYPE',yread,iresp)
326 ENDIF
327 ! reading
328 !
329  CALL read_surf(hprogram,'SEA ',ysc%U%CSEA ,iresp)
330  CALL read_surf(hprogram,'WATER ',ysc%U%CWATER ,iresp)
331  CALL read_surf(hprogram,'NATURE',ysc%U%CNATURE,iresp)
332  CALL read_surf(hprogram,'TOWN ',ysc%U%CTOWN ,iresp)
333 !
334 !
335  CALL read_surf(hprogram,'DIM_SEA ',ysc%U%NDIM_SEA, iresp)
336  CALL read_surf(hprogram,'DIM_NATURE',ysc%U%NDIM_NATURE,iresp)
337  CALL read_surf(hprogram,'DIM_WATER ',ysc%U%NDIM_WATER, iresp)
338  CALL read_surf(hprogram,'DIM_TOWN ',ysc%U%NDIM_TOWN, iresp)
339 !
340  CALL read_lecoclimap(hprogram,ysc%U%LECOCLIMAP,ysc%U%LECOSG)
341  CALL read_arrange_cover(hprogram,ysc%U%LWATER_TO_NATURE,ysc%U%LTOWN_TO_ROCK)
342  CALL read_cover_garden(hprogram,ysc%U%LGARDEN)
343 !
344 !* reads if climatological LAI is used or not for ecoclimap2. If not, looks for year to be used.
345  CALL read_lclim_lai(hprogram,lclim_lai)
346 IF (.NOT. lclim_lai .AND. ysc%U%TTIME%TDATE%YEAR >= neco2_start_year &
347  .AND. ysc%U%TTIME%TDATE%YEAR <= neco2_end_year ) ysc%DTCO%NYEAR=ysc%U%TTIME%TDATE%YEAR
348  CALL ini_data_cover(ysc%DTCO, ysc%U)
349  CALL read_eco2_irrig(ysc%DTCO, hprogram)
350 !
351 !* 2. Cover fields and grid:
352 ! ---------------------
353 !
354 ! 2.0. Get number of points on this proc
355 !
356  CALL get_size_full_n(hprogram,ysc%U%NDIM_FULL,ysc%U%NSIZE_FULL,isize_full)
357  ysc%U%NSIZE_FULL = isize_full
358 !
359 ! 2.1. Read cover
360 !
361  CALL read_cover_n(ysc%DTCO, ysc%U, hprogram)
362 !
363 ! 2.2. Read grid
364 !
365 ALLOCATE(ysc%UG%G%XLAT (ysc%U%NSIZE_FULL))
366 ALLOCATE(ysc%UG%G%XLON (ysc%U%NSIZE_FULL))
367 ALLOCATE(ysc%UG%G%XMESH_SIZE(ysc%U%NSIZE_FULL))
368 ALLOCATE(ysc%USS%XZ0EFFJPDIR(ysc%U%NSIZE_FULL))
369  CALL read_grid(hprogram,ysc%UG%G,iresp,ysc%USS%XZ0EFFJPDIR)
370 !
371 ! 2.3. Initialize zenith and azimuth angles if not done yet
372 !
373 lzenith = all(pzenith /= xundef)
374 IF (.NOT. lzenith) CALL sunpos(kyear, kmonth, kday, ptime, ysc%UG%G%XLON, ysc%UG%G%XLAT, ztsun, zzenith, zazim)
375 !
376 IF (hprogram/='AROME '.AND.nrank==npio) THEN
377  !
378  IF (.NOT.ASSOCIATED(ysc%UG%XGRID_FULL_PAR)) THEN
379 #ifdef MNH_PARALLEL
380  CALL read_gridtype(hprogram,ysc%UG%G%CGRID,ysc%UG%G%NGRID_PAR,ysc%U%NSIZE_FULL,.false.,hdir='H')
381  ALLOCATE(ysc%UG%XGRID_FULL_PAR(ysc%UG%G%NGRID_PAR))
382  CALL read_gridtype(hprogram,ysc%UG%G%CGRID,ysc%UG%G%NGRID_PAR,ysc%U%NSIZE_FULL,.true.,&
383  ysc%UG%XGRID_FULL_PAR,iresp,hdir='H')
384 #else
385  CALL read_gridtype(hprogram,ysc%UG%G%CGRID,ysc%UG%NGRID_FULL_PAR,ysc%U%NDIM_FULL,.false.,hdir='A')
386  ALLOCATE(ysc%UG%XGRID_FULL_PAR(ysc%UG%NGRID_FULL_PAR))
387  CALL read_gridtype(hprogram,ysc%UG%G%CGRID,ysc%UG%NGRID_FULL_PAR,ysc%U%NDIM_FULL,.true.,&
388  ysc%UG%XGRID_FULL_PAR,iresp,hdir='A')
389 #endif
390  ENDIF
391  !
392 ENDIF
393 !
394 !* 2.4 Allocation of chemical species name, chemical index of HSV array
395 !
396  CALL init_chemical_n(iluout, ksv, hsv, ysc%SV, &
397  ysc%CHU%CCH_NAMES, ysc%CHU%CAER_NAMES )
398 !
399 ! 2.4 Initialize Chemical Emissions
400 !
401  CALL read_surf(hprogram,'CH_EMIS',ysc%CHU%LCH_EMIS,iresp)
402 !
403 IF (ysc%CHU%LCH_EMIS) THEN
404  !
405  IF ( iversion<7 .OR. iversion==7 .AND. ibugfix<3 ) THEN
406  ysc%CHU%CCH_EMIS='AGGR'
407  ELSE
408  CALL read_surf(hprogram,'CH_EMIS_OPT',ysc%CHU%CCH_EMIS,iresp)
409  END IF
410  !
411  IF (ysc%CHU%CCH_EMIS=='AGGR') THEN
412  CALL ch_init_emission_n(ysc%CHE, ysc%CHU%XCONVERSION, ysc%SV%CSV, &
413  hprogram,ysc%U%NSIZE_FULL,hinit,prhoa,ysc%CHU%CCHEM_SURF_FILE)
414  ELSE
415  CALL ch_init_snap_n(ysc%CHN, ysc%SV%CSV, &
416  hprogram,ysc%U%NSIZE_FULL,hinit,prhoa,ysc%CHU%CCHEM_SURF_FILE)
417  END IF
418  !
419 ENDIF
420 !
421 !* 2.5 Initialization of dry deposition scheme (chemistry)
422 !
423 IF (ysc%SV%NBEQ .GT. 0) THEN
424 !
425  IF (hinit=='ALL') CALL ch_init_depconst(hprogram,ysc%CHU%CCHEM_SURF_FILE,iluout,ysc%SV%CSV(ysc%SV%NSV_CHSBEG:ysc%SV%NSV_CHSEND))
426 !
427 END IF
428 !
429 !* 2.5 Subgrid orography
430 !
431  CALL read_sso_n(ysc%U%NSIZE_FULL, ysc%U%XSEA, ysc%USS, hprogram)
432 !
433 !* 2.6 Orographic roughness length
434 !
435 ALLOCATE(ysc%USS%XZ0EFFIP(ysc%U%NSIZE_FULL))
436 ALLOCATE(ysc%USS%XZ0EFFIM(ysc%U%NSIZE_FULL))
437 ALLOCATE(ysc%USS%XZ0EFFJP(ysc%U%NSIZE_FULL))
438 ALLOCATE(ysc%USS%XZ0EFFJM(ysc%U%NSIZE_FULL))
439 ALLOCATE(ysc%USS%XZ0REL (ysc%U%NSIZE_FULL))
440 !
441 ALLOCATE(zz0veg(ysc%U%NSIZE_FULL))
442 zz0veg(:) = 0.
443 !
444  CALL subscale_z0eff(ysc%USS,zz0veg,.true.)
445 !
446 DEALLOCATE(zz0veg)
447 !
448 !* 2.7 Dummy fields
449 !
450  CALL read_dummy_n(ysc%DUU,ysc%U%NSIZE_FULL, hprogram)
451 !
452 ! End of IO
453 !
454  CALL end_io_surf_n(hprogram)
455 !
456  CALL set_surfex_filein(hprogram,'PREP') ! restore input file name
457 !
458 !-----------------------------------------------------------------------------------------------------
459 ! END READ PGD FILE
460 !-----------------------------------------------------------------------------------------------------
461 !
462 !
463 ! Initialisation for IO
464 !
465  CALL init_io_surf_n(ysc%DTCO, ysc%U, hprogram,'FULL ','SURF ','READ ')
466 !
467 !* 2.8 Allocations and Initialization of diagnostics
468 !
469 IF (hinit=='ALL') THEN
470  CALL alloc_diag_surf_atm_n(ysc%DUO, ysc%DU, ysc%DUC, ysc%DUP, ysc%DUPC, &
471  ysc%U%NSIZE_FULL, ysc%U%TTIME, hprogram,ksw)
472 ENDIF
473 !
474 !* Canopy fields if Beljaars et al 2004 parameterization is used
475 !
476 IF (ysc%USS%CROUGH=='BE04') THEN
477  CALL read_sso_canopy_n(ysc%DTCO, ysc%SB, ysc%U, hprogram, hinit)
478 ENDIF
479 !
480 !* Physical fields need for ARPEGE/ALADIN climate run
481 !
482  CALL init_cpl_gcm_n(ysc%U, hprogram,hinit)
483 !
484 ! End of IO
485 !
486  CALL end_io_surf_n(hprogram)
487 !
488 !-----------------------------------------------------------------------------------------------------
489 !
490 !* 4. Initialization of masks for each surface
491 ! ----------------------------------------
492 !
493 !* number of geographical points
494 ysc%U%NSIZE_NATURE = count(ysc%U%XNATURE(:) > 0.0)
495 ysc%U%NSIZE_TOWN = count(ysc%U%XTOWN(:) > 0.0)
496 ysc%U%NSIZE_WATER = count(ysc%U%XWATER(:) > 0.0)
497 ysc%U%NSIZE_SEA = count(ysc%U%XSEA(:) > 0.0)
498 !
499 ALLOCATE(ysc%U%NR_NATURE (ysc%U%NSIZE_NATURE))
500 ALLOCATE(ysc%U%NR_TOWN (ysc%U%NSIZE_TOWN ))
501 ALLOCATE(ysc%U%NR_WATER (ysc%U%NSIZE_WATER ))
502 ALLOCATE(ysc%U%NR_SEA (ysc%U%NSIZE_SEA ))
503 !
504 IF (ysc%U%NSIZE_SEA >0)CALL get_1d_mask( ysc%U%NSIZE_SEA, ysc%U%NSIZE_FULL, ysc%U%XSEA , ysc%U%NR_SEA )
505 IF (ysc%U%NSIZE_WATER >0)CALL get_1d_mask( ysc%U%NSIZE_WATER, ysc%U%NSIZE_FULL, ysc%U%XWATER , ysc%U%NR_WATER )
506 IF (ysc%U%NSIZE_TOWN >0)CALL get_1d_mask( ysc%U%NSIZE_TOWN, ysc%U%NSIZE_FULL, ysc%U%XTOWN , ysc%U%NR_TOWN )
507 IF (ysc%U%NSIZE_NATURE>0)CALL get_1d_mask( ysc%U%NSIZE_NATURE, ysc%U%NSIZE_FULL, ysc%U%XNATURE, ysc%U%NR_NATURE)
508 !
509 !* number of shortwave spectral bands
510 iswb=SIZE(psw_bands)
511 !
512 !* tile number
513 ALLOCATE(zfrac_tile(ysc%U%NSIZE_FULL,ntilesfc))
514 jtile = 0
515 !
516 !
517 !* 5. Default values
518 ! --------------
519 !
520 zdir_alb_tile = xundef
521 zsca_alb_tile = xundef
522 zemis_tile = xundef
523 ztsrad_tile = xundef
524 ztsurf_tile = xundef
525 !
526 #ifdef SFX_MPI
527 xtime0 = mpi_wtime()
528 #endif
529 !
530 !* 6. Initialization of sea
531 ! ---------------------
532 !
533 jtile = jtile + 1
534 zfrac_tile(:,jtile) = ysc%U%XSEA(:)
535 !
536 ! pack variables which are arguments to this routine
537  CALL pack_surf_init_arg(ysc%U%NSIZE_SEA,ysc%U%NR_SEA)
538 !
539 ! initialization
540 IF (ysc%U%NDIM_SEA>0) &
541  CALL init_sea_n(ysc%DTCO, ysc%DUO%LREAD_BUDGETC, ysc%UG, ysc%U, ysc%GCP, &
542  ysc%SM, ysc%DLO, ysc%DL, ysc%DLC, &
543  hprogram,hinit,ysc%U%NSIZE_SEA,ksv,ksw, &
544  hsv,zp_co2,zp_rhoa, &
545  zp_zenith,zp_azim,psw_bands,zp_dir_alb,zp_sca_alb, &
546  zp_emis,zp_tsrad,zp_tsurf, &
547  kyear,kmonth,kday,ptime, hatmfile,hatmfiletype, &
548  'OK' )
549 !
550 !
551  CALL unpack_surf_init_arg(jtile,ysc%U%NSIZE_SEA,ysc%U%NR_SEA)
552 !
553 #ifdef SFX_MPI
554 xtime_init_sea = xtime_init_sea + (mpi_wtime() - xtime0)*100./max(1,ysc%U%NSIZE_SEA)
555 xtime0 = mpi_wtime()
556 #endif
557 !
558 !* 7. Initialization of lakes
559 ! -----------------------
560 !
561 !
562 jtile = jtile + 1
563 zfrac_tile(:,jtile) = ysc%U%XWATER(:)
564 !
565 ! pack variables which are arguments to this routine
566  CALL pack_surf_init_arg(ysc%U%NSIZE_WATER,ysc%U%NR_WATER)
567 !
568 ! initialization
569 IF (ysc%U%NDIM_WATER>0) &
570  CALL init_inland_water_n(ysc%DTCO, ysc%DUO%LREAD_BUDGETC, ysc%UG, &
571  ysc%U, ysc%WM, ysc%FM, ysc%DLO, ysc%DL, ysc%DLC, &
572  hprogram,hinit,ysc%U%NSIZE_WATER,ksv,ksw, &
573  hsv,zp_co2,zp_rhoa, &
574  zp_zenith,zp_azim,psw_bands,zp_dir_alb,zp_sca_alb, &
575  zp_emis,zp_tsrad,zp_tsurf, &
576  kyear,kmonth,kday,ptime, hatmfile,hatmfiletype, &
577  'OK' )
578 !
579  CALL unpack_surf_init_arg(jtile,ysc%U%NSIZE_WATER,ysc%U%NR_WATER)
580 !
581 #ifdef SFX_MPI
582 xtime_init_water = xtime_init_water + (mpi_wtime() - xtime0)*100./max(1,ysc%U%NSIZE_WATER)
583 xtime0 = mpi_wtime()
584 #endif
585 !
586 !* 8. Initialization of vegetation scheme
587 ! -----------------------------------
588 !
589 !
590 jtile = jtile + 1
591 zfrac_tile(:,jtile) = ysc%U%XNATURE(:)
592 !
593 ! pack variables which are arguments to this routine
594  CALL pack_surf_init_arg(ysc%U%NSIZE_NATURE,ysc%U%NR_NATURE)
595 !
596 ! initialization
597 IF (ysc%U%NDIM_NATURE>0) &
598  CALL init_nature_n(ysc%DTCO, ysc%DUO%LREAD_BUDGETC, ysc%UG, ysc%U, &
599  ysc%USS, ysc%GCP, ysc%IM, ysc%DTZ, ysc%DLO, ysc%DL,&
600  ysc%DLC, ysc%NDST, ysc%SLT, ysc%SV, &
601  hprogram,hinit,oland_use,ysc%U%NSIZE_NATURE, &
602  ksv,ksw, hsv,zp_co2,zp_rhoa, &
603  zp_zenith,zp_azim,psw_bands,zp_dir_alb,zp_sca_alb, &
604  zp_emis,zp_tsrad,zp_tsurf, &
605  kyear,kmonth,kday,ptime,tpdate_end, &
606  hatmfile,hatmfiletype,'OK' )
607 !
608 !
609  CALL unpack_surf_init_arg(jtile,ysc%U%NSIZE_NATURE,ysc%U%NR_NATURE)
610 !
611 #ifdef SFX_MPI
612 xtime_init_nature = xtime_init_nature + (mpi_wtime() - xtime0)*100./max(1,ysc%U%NSIZE_NATURE)
613 xtime0 = mpi_wtime()
614 #endif
615 !
616 !* 9. Initialization of urban scheme
617 ! ------------------------------
618 !
619 jtile = jtile + 1
620 zfrac_tile(:,jtile) = ysc%U%XTOWN(:)
621 !
622 ! pack variables which are arguments to this routine
623  CALL pack_surf_init_arg(ysc%U%NSIZE_TOWN,ysc%U%NR_TOWN)
624 !
625 ! initialization
626 IF (ysc%U%NDIM_TOWN>0) &
627  CALL init_town_n(ysc%DTCO, ysc%DUO%LREAD_BUDGETC, ysc%UG, ysc%U, ysc%GCP, &
628  ysc%TM, ysc%GDM, ysc%GRM, ysc%DLO, ysc%DL, ysc%DLC, &
629  hprogram,hinit,ysc%U%NSIZE_TOWN,ksv,ksw, &
630  hsv,zp_co2,zp_rhoa, &
631  zp_zenith,zp_azim,psw_bands,zp_dir_alb,zp_sca_alb, &
632  zp_emis,zp_tsrad,zp_tsurf, &
633  kyear,kmonth,kday,ptime, hatmfile,hatmfiletype, &
634  'OK' )
635 !
636 !
637  CALL unpack_surf_init_arg(jtile,ysc%U%NSIZE_TOWN,ysc%U%NR_TOWN)
638 !
639 #ifdef SFX_MPI
640 xtime_init_town = xtime_init_town + (mpi_wtime() - xtime0)*100./max(1,ysc%U%NSIZE_TOWN)
641 #endif
642 !
643 !
644 !* 10. Output radiative and physical fields
645 ! ------------------------------------
646 !
647 IF (SIZE(pdir_alb)>0) &
648  CALL average_rad(zfrac_tile, &
649  zdir_alb_tile, zsca_alb_tile, zemis_tile, ztsrad_tile, &
650  pdir_alb, psca_alb, pemis, ptsrad )
651 !
652 IF (SIZE(ptsurf)>0) &
653  CALL average_tsurf(zfrac_tile, ztsurf_tile, ptsurf)
654 !
655 DEALLOCATE(zfrac_tile)
656 !
657 !-------------------------------------------------------------------------------
658 !==============================================================================
659 IF (lhook) CALL dr_hook('INIT_SURF_ATM_N',1,zhook_handle)
660  CONTAINS
661 !==============================================================================
662 SUBROUTINE pack_surf_init_arg(KSIZE,KMASK)
663 !
664 INTEGER, INTENT(IN) :: KSIZE
665 INTEGER, INTENT(IN), DIMENSION(:) :: KMASK
666 INTEGER :: JJ
667 REAL(KIND=JPRB) :: ZHOOK_HANDLE
668 !
669 ! input arguments:
670 !
671 IF (lhook) CALL dr_hook('PACK_SURF_INIT_ARG',0,zhook_handle)
672 ALLOCATE(zp_co2(ksize))
673 ALLOCATE(zp_rhoa(ksize))
674 ALLOCATE(zp_zenith(ksize))
675 ALLOCATE(zp_azim(ksize))
676 !
677 !
678 ! output arguments:
679 !
680 ALLOCATE(zp_dir_alb(ksize,iswb))
681 ALLOCATE(zp_sca_alb(ksize,iswb))
682 ALLOCATE(zp_emis(ksize))
683 ALLOCATE(zp_tsrad(ksize))
684 ALLOCATE(zp_tsurf(ksize))
685 !
686 IF (ksize>0) THEN
687  zp_co2 = 6.e-4
688  zp_rhoa = 1.2
689  zp_zenith = 0.
690  zp_azim = 0.
691  zp_dir_alb = xundef
692  zp_sca_alb = xundef
693  zp_emis = xundef
694  zp_tsrad = xundef
695  zp_tsurf = xundef
696 END IF
697 !
698 DO jj=1,ksize
699 IF (SIZE(pco2)>0) &
700  zp_co2(jj) = pco2(kmask(jj))
701 IF (SIZE(prhoa)>0) &
702  zp_rhoa(jj) = prhoa(kmask(jj))
703 IF (SIZE(pzenith)>0) THEN
704  IF (lzenith) THEN
705  zp_zenith(jj) = pzenith(kmask(jj))
706  ELSE
707  zp_zenith(jj) = zzenith(kmask(jj))
708  ENDIF
709 ENDIF
710 IF (SIZE(pazim )>0) THEN
711  IF (lzenith) THEN
712  zp_azim(jj) = pazim(kmask(jj))
713  ELSE
714  zp_azim(jj) = zazim(kmask(jj))
715  ENDIF
716 ENDIF
717 ENDDO
718 IF (lhook) CALL dr_hook('PACK_SURF_INIT_ARG',1,zhook_handle)
719 !
720 END SUBROUTINE pack_surf_init_arg
721 !==============================================================================
722 SUBROUTINE unpack_surf_init_arg(KTILE,KSIZE,KMASK)
723 !
724 INTEGER, INTENT(IN) :: KTILE, KSIZE
725 !
726 INTEGER, INTENT(IN), DIMENSION(:) :: KMASK
727 !
728 INTEGER :: JJ ! loop counter
729 REAL(KIND=JPRB) :: ZHOOK_HANDLE
730 !
731 !
732 IF (lhook) CALL dr_hook('UNPACK_SURF_INIT_ARG',0,zhook_handle)
733 DO jj=1,ksize
734 IF (SIZE(ztsrad_tile)>0) &
735  ztsrad_tile(kmask(jj),ktile) = zp_tsrad(jj)
736 IF (SIZE(zdir_alb_tile)>0) &
737  zdir_alb_tile(kmask(jj),:,ktile)= zp_dir_alb(jj,:)
738 IF (SIZE(zsca_alb_tile)>0) &
739  zsca_alb_tile(kmask(jj),:,ktile)= zp_sca_alb(jj,:)
740 IF (SIZE(zemis_tile)>0) &
741  zemis_tile(kmask(jj),ktile) = zp_emis(jj)
742 IF (SIZE(ztsurf_tile)>0) &
743  ztsurf_tile(kmask(jj),ktile) = zp_tsurf(jj)
744 ENDDO
745 !
746 DEALLOCATE(zp_co2 )
747 DEALLOCATE(zp_rhoa )
748 DEALLOCATE(zp_zenith )
749 DEALLOCATE(zp_azim )
750 DEALLOCATE(zp_dir_alb)
751 DEALLOCATE(zp_sca_alb)
752 DEALLOCATE(zp_emis )
753 DEALLOCATE(zp_tsrad )
754 DEALLOCATE(zp_tsurf )
755 IF (lhook) CALL dr_hook('UNPACK_SURF_INIT_ARG',1,zhook_handle)
756 !
757 END SUBROUTINE unpack_surf_init_arg
758 !==============================================================================
759 !
760 END SUBROUTINE init_surf_atm_n
761 
762 
subroutine init_chemical_n(KLUOUT, KSV, HSV, SV, HCH_NAMES, HAER_NAMES, HDSTNAMES, HSLTNAMES)
subroutine average_tsurf(PFRAC_TILE, PTSURF_TILE, PTSURF)
subroutine read_cover_garden(HPROGRAM, OGARDEN, HDIR)
integer ndst_mdebeg
logical lvarsig_dst
subroutine set_surfex_filein(HPROGRAM, HMASK)
real, dimension(:,:,:), allocatable xdata_lai_all_years
subroutine init_surf_atm_n(YSC, HPROGRAM, HINIT, OLAND_USE, KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, PAZIM, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD, PTSURF, KYEAR, KMONTH, KDAY, PTIME, TPDATE_END, HATMFILE, HATMFILETYPE, HTEST)
subroutine read_cover_n(DTCO, U, HPROGRAM)
Definition: read_covern.F90:8
subroutine read_sso_n(KSIZE_FULL, PSEA, USS, HPROGRAM)
Definition: read_sson.F90:7
subroutine ch_init_emission_n(CHE, PCONVERSION, HSV, HPROGRAM, KLU
subroutine get_size_full_n(HPROGRAM, KDIM_FULL, KSIZE_FULL_IN, KSIZE
subroutine alloc_diag_surf_atm_n(DGO, D, DC, ND, NDC, KSIZE_FULL, TPTIME, HPROGRAM, KSW)
subroutine subscale_z0eff(ISSK, PZ0VEG, OZ0REL, OMASK)
subroutine read_surf_atm_conf_n(CHU, DGO, USS, HPROGRAM)
integer, dimension(:), allocatable, target nmask_full
Definition: modd_mask.F90:37
subroutine read_eco2_irrig(DTCO, HPROGRAM)
subroutine init_sea_n(DTCO, OREAD_BUDGETC, UG, U, GCP, SM, DGO, DL, DLC, HPROGRAM, HINIT, KI, KSV, KSW, HSV, PCO2, PRHOA,
Definition: init_sean.F90:9
subroutine ch_init_snap_n(CHN, HSV, HPROGRAM, KLU, HINIT, PRHOA, HCHE
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:7
real, parameter xundef
logical lrgfix_dst
subroutine default_ch_surf_atm(HCHEM_SURF_FILE, OSURF_EMIS)
subroutine init_inland_water_n(DTCO, OREAD_BUDGETC, UG, U, WM, FM
subroutine sunpos(KYEAR, KMONTH, KDAY, PTIME, PLON, PLAT, PTSUN, PZENITH, PAZIMSOL)
Definition: sunpos.F90:8
subroutine read_gridtype( HPROGRAM, HGRID, KGRID_PAR, KLU, OREAD, PGRID
subroutine read_lecoclimap(HPROGRAM, OECOCLIMAP, OECOSG, HDIR)
subroutine prep_ctrl_surf_atm(DGO, ONOWRITE_TEXFILE, KLUOUT)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine read_surf_atm_date( HPROGRAM, HINIT, KLUOUT, HATMFILE, HATMFILETYPE,
character(len=6) cprogname
logical lvarsig_slt
integer, parameter nundef
subroutine read_default_surf_atm_n(CHU, DGO, USS, HPROGRAM)
subroutine default_sso(HROUGH, PFRACZ0, PCOEFBE)
Definition: default_sso.F90:7
subroutine init_cpl_gcm_n(U, HPROGRAM, HINIT)
subroutine end_io_surf_n(HPROGRAM)
Definition: end_io_surfn.F90:7
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:7
subroutine ch_init_depconst(HPROGRAM, HCHEM_SURF_FILE, KLUOUT, HSV)
subroutine get_1d_mask(KSIZE, KFRAC, PFRAC, KMASK)
Definition: get_1d_mask.F90:6
logical lhook
Definition: yomhook.F90:15
subroutine surf_version
Definition: surf_version.F90:7
real, dimension(:,:,:), allocatable xdata_lai
subroutine read_arrange_cover( HPROGRAM, OWATER_TO_NATURE, OTOWN_TO_
subroutine pack_surf_init_arg(KSIZE, KMASK)
subroutine unpack_surf_init_arg(KTILE, KSIZE, KMASK)
subroutine average_rad(PFRAC_TILE, PDIR_ALB_TILE, PSCA_ALB_TILE, PEMIS_TILE, PTRAD_TILE,
Definition: average_rad.F90:8
subroutine read_lclim_lai(HPROGRAM, OCLIM_LAI)
subroutine read_grid(HPROGRAM, G, KRESP, PDIR)
Definition: read_grid.F90:7
subroutine read_nam_prep_surf_n(HPROGRAM)
integer nslt_mdebeg
logical lrgfix_slt
subroutine init_io_surf_n(DTCO, U, HPROGRAM, HMASK, HSCHEME, HACTION
subroutine init_nature_n(DTCO, OREAD_BUDGETC, UG, U, USS, GCP, IM
Definition: init_naturen.F90:7
subroutine ini_data_cover(DTCO, U)
subroutine read_sso_canopy_n(DTCO, SB, U, HPROGRAM, HINIT)
subroutine read_dummy_n(DUU, KSIZE_FULL, HPROGRAM)
Definition: read_dummyn.F90:7
static int count
Definition: memory_hook.c:21
subroutine init_town_n(DTCO, OREAD_BUDGETC, UG, U, GCP, TM, GDM,
Definition: init_townn.F90:7
subroutine default_diag_surf_atm(K2M, OT2MMW, OSURF_BUDGET, O2M_MI