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