SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_surf_atmn.F90
Go to the documentation of this file.
00001 !#############################################################
00002 SUBROUTINE INIT_SURF_ATM_n(HPROGRAM,HINIT, OLAND_USE,                   &
00003                              KI,KSV,KSW,                                &
00004                              HSV,PCO2,PRHOA,                            &
00005                              PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
00006                              PEMIS,PTSRAD,                              &
00007                              KYEAR, KMONTH,KDAY, PTIME,                 &
00008                              HATMFILE,HATMFILETYPE,                     &
00009                              HTEST                                      )  
00010 !#############################################################
00011 !
00012 !!****  *INIT_SURF_ATM_n* - routine to initialize GROUND
00013 !!
00014 !!    PURPOSE
00015 !!    -------
00016 !!
00017 !!**  METHOD
00018 !!    ------
00019 !!
00020 !!    EXTERNAL
00021 !!    --------
00022 !!
00023 !!
00024 !!    IMPLICIT ARGUMENTS
00025 !!    ------------------
00026 !!
00027 !!    REFERENCE
00028 !!    ---------
00029 !!
00030 !!
00031 !!    AUTHOR
00032 !!    ------
00033 !!      V. Masson   *Meteo France*      
00034 !!
00035 !!    MODIFICATIONS
00036 !!    -------------
00037 !!      Original    01/2003
00038 !      (P.Tulet )             01/11/03  initialisation of the surface chemistry!
00039 !!     (D.Gazen)    01/12/03  change emissions handling for surf. externalization
00040 !!     (P.LeMoigne) 18/07/05  get 1d mask only if associated tile exists    
00041 !!     (B.Decharme)  03/2009  New keys read for arrange cover by user
00042 !!     (B.Decharme)  04/2009  Read precipitation forcing from the restart file for ARPEGE/ALADIN run
00043 !!     (A. Lemonsu)    2009   New key read for urban green areas
00044 !!     (B.Decharme)  07/2011  Read pgd+prep
00045 !!     (S. Queguiner)  2011   Modif chemistry (2.4)
00046 !-------------------------------------------------------------------------------
00047 !
00048 !*       0.    DECLARATIONS
00049 !              ------------
00050 !
00051 USE MODD_READ_NAMELIST,  ONLY : LNAM_READ
00052 USE MODD_SURF_CONF,      ONLY : CPROGNAME
00053 USE MODD_SURF_ATM,       ONLY : XCISMIN, XVMODMIN, LALDTHRES,            &
00054                                 LDRAG_COEF_ARP, LALDZ0H, LNOSOF,         &
00055                                 LRW_PRECIP, XEDB, XEDC, XEDD, XEDK,      &
00056                                 XUSURIC, XUSURID, XUSURICL,              &
00057                                 XVCHRNK, XVZ0CM, XDELTA_MAX, XRIMAX,     &
00058                                 XWINDMIN, LVZIUSTAR0_ARP,                &
00059                                 XRZHZ0M, XVZIUSTAR0, LRRGUST_ARP,        &
00060                                 XRRSCALE, XRRGAMMA, XUTILGUST, LCPL_ARP, &
00061                                 LQVNPLUS, LVERTSHIFT  
00062 USE MODD_SURF_ATM_n,     ONLY : CSEA,      CWATER,      CTOWN,      CNATURE,      &
00063                                 XSEA,      XWATER,      XTOWN,      XNATURE,      &
00064                                 NSIZE_SEA, NSIZE_WATER, NSIZE_TOWN, NSIZE_NATURE, &
00065                                 NR_SEA,    NR_WATER,    NR_TOWN,    NR_NATURE,    &
00066                                 XCOVER, XOUT_TSTEP, TTIME,                        &
00067                                 NDIM_FULL, NSIZE_FULL,                            &
00068                                 NDIM_NATURE, NDIM_SEA, NDIM_WATER, NDIM_TOWN,     &
00069                                 LECOCLIMAP, LWATER_TO_NATURE, LTOWN_TO_ROCK,      &
00070                                 LGARDEN 
00071 USE MODD_SURF_ATM_SSO_n, ONLY : CROUGH, XAOSIP, XAOSIM, XAOSJP, XAOSJM, &
00072                                 XHO2IP, XHO2IM, XHO2JP, XHO2JM,         &
00073                                 XZ0EFFIP, XZ0EFFIM, XZ0EFFJP, XZ0EFFJM, &
00074                                 XZ0REL, XZ0EFFJPDIR, XFRACZ0, XCOEFBE
00075 USE MODD_CH_SURF_n,      ONLY : CCH_NAMES, LCH_EMIS, LRW_CH_EMIS, &
00076                                 LCH_SURF_EMIS, CCHEM_SURF_FILE, CAER_NAMES,&
00077                                 CCH_EMIS
00078 USE MODD_SV_n,           ONLY : NBEQ, CSV, NSV_CHSBEG, NSV_CHSEND, &
00079                                 NSV_DSTBEG, NSV_DSTEND, NDSTEQ,    &
00080                                 NSV_SLTBEG, NSV_SLTEND, NSLTEQ,    &
00081                                 NAEREQ, NSV_AERBEG, NSV_AEREND 
00082 USE MODD_DST_SURF,       ONLY : NDSTMDE, NDST_MDEBEG, LVARSIG_DST, LRGFIX_DST 
00083 USE MODD_SLT_SURF,       ONLY : NSLTMDE, NSLT_MDEBEG, LVARSIG_SLT, LRGFIX_SLT                                
00084 USE MODD_SURF_ATM_GRID_n,ONLY : XLAT, XLON, XMESH_SIZE, CGRID, XGRID_PAR, &
00085                                 NGRID_PAR, XGRID_FULL_PAR
00086 
00087 USE MODD_DIAG_SURF_ATM_n,ONLY : N2M, L2M_MIN_ZS, LSURF_BUDGET,     &
00088                                 LRAD_BUDGET, LCOEF, XDIAG_TSTEP,   &
00089                                 LFRAC, LSURF_VARS, LDIAG_GRID,     &
00090                                 LSURF_BUDGETC, LRESET_BUDGETC,     &
00091                                 LPROVAR_TO_DIAG, LSELECT, CSELECT  
00092 USE MODD_DATA_COVER_PAR, ONLY : NTILESFC
00093 USE MODD_DATA_COVER,     ONLY : LCLIM_LAI, NYEAR, XDATA_LAI_ALL_YEARS, XDATA_LAI, &
00094                                 NECO2_START_YEAR, NECO2_END_YEAR  
00095 !
00096 USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
00097 USE MODD_CHS_AEROSOL,    ONLY : LVARSIGI, LVARSIGJ
00098 USE MODD_WRITE_SURF_ATM, ONLY : LNOWRITE_CANOPY, LNOWRITE_TEXFILE  
00099 !
00100 USE MODD_SURFEX_MPI, ONLY : XTIME_INIT_SEA, XTIME_INIT_WATER, XTIME_INIT_NATURE, XTIME_INIT_TOWN, &
00101                             NRANK, NPIO, NWG_LAYER_TOT
00102 USE MODD_SURFEX_OMP, ONLY : NINDX2, NWORK, XWORK, XWORK2
00103 !
00104 USE MODI_INIT_IO_SURF_n
00105 USE MODI_DEFAULT_SSO
00106 USE MODI_DEFAULT_CH_SURF_ATM
00107 USE MODI_DEFAULT_DIAG_SURF_ATM
00108 USE MODI_READ_DEFAULT_SURF_ATM_n
00109 USE MODI_READ_SURF_ATM_CONF_n
00110 USE MODI_READ_SURF_ATM_DATE
00111 USE MODI_READ_NAM_PREP_SURF_n
00112 USE MODI_READ_SURF
00113 USE MODI_GET_SIZE_FULL_n
00114 USE MODI_READ_COVER_n
00115 USE MODI_READ_SSO_n
00116 USE MODI_SUBSCALE_Z0EFF
00117 USE MODI_READ_SSO_CANOPY_n
00118 USE MODI_READ_DUMMY_n
00119 USE MODI_READ_GRID
00120 USE MODI_READ_GRIDTYPE
00121 USE MODI_END_IO_SURF_n
00122 USE MODI_PREP_CTRL_SURF_ATM
00123 USE MODI_AVERAGE_RAD
00124 USE MODI_WRITE_COVER_TEX_START
00125 USE MODI_WRITE_COVER_TEX_END
00126 USE MODI_INIT_CHEMICAL_n
00127 USE MODI_CH_INIT_DEPCONST
00128 USE MODI_CH_INIT_EMISSION_n
00129 USE MODI_CH_INIT_SNAP_n
00130 USE MODI_OPEN_NAMELIST
00131 USE MODI_CLOSE_NAMELIST
00132 USE MODI_READ_PRECIP_n
00133 USE MODI_ABOR1_SFX
00134 USE MODI_ALLOC_DIAG_SURF_ATM_n
00135 USE MODI_GET_1D_MASK
00136 USE MODI_INI_DATA_COVER
00137 USE MODI_INIT_INLAND_WATER_n
00138 USE MODI_INIT_NATURE_n
00139 USE MODI_INIT_SEA_n
00140 USE MODI_INIT_TOWN_n
00141 USE MODI_READ_ARRANGE_COVER
00142 USE MODI_READ_COVER_GARDEN
00143 USE MODI_READ_ECO2_IRRIG
00144 USE MODI_READ_LCLIM_LAI
00145 USE MODI_READ_LECOCLIMAP
00146 USE MODI_SURF_VERSION
00147 USE MODI_WRITE_COVER_TEX_COVER
00148 USE MODI_GET_LUOUT
00149 USE MODI_SET_SURFEX_FILEIN
00150 !
00151 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00152 USE PARKIND1  ,ONLY : JPRB
00153 !
00154 IMPLICIT NONE
00155 !
00156 #ifndef NOMPI
00157 INCLUDE 'mpif.h'
00158 #endif
00159 !
00160 !*       0.1   Declarations of arguments
00161 !              -------------------------
00162 !
00163  CHARACTER(LEN=6),                 INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00164  CHARACTER(LEN=3),                 INTENT(IN)  :: HINIT     ! choice of fields to initialize
00165 LOGICAL,                          INTENT(IN)  :: OLAND_USE ! 
00166 INTEGER,                          INTENT(IN)  :: KI        ! number of points
00167 INTEGER,                          INTENT(IN)  :: KSV       ! number of scalars
00168 INTEGER,                          INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00169  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN)  :: HSV       ! name of all scalar variables
00170 REAL,             DIMENSION(KI),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
00171 REAL,             DIMENSION(KI),  INTENT(IN)  :: PRHOA     ! air density
00172 REAL,             DIMENSION(KI),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
00173 REAL,             DIMENSION(KI),  INTENT(IN)  :: PAZIM     ! solar azimuthal angle (rad from N, clock)
00174 REAL,             DIMENSION(KSW), INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
00175 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
00176 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
00177 REAL,             DIMENSION(KI),  INTENT(OUT) :: PEMIS     ! emissivity
00178 REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSRAD    ! radiative temperature
00179 INTEGER,                          INTENT(IN)  :: KYEAR     ! current year (UTC)
00180 INTEGER,                          INTENT(IN)  :: KMONTH    ! current month (UTC)
00181 INTEGER,                          INTENT(IN)  :: KDAY      ! current day (UTC)
00182 REAL,                             INTENT(IN)  :: PTIME     ! current time since
00183                                                           !  midnight (UTC, s)
00184 !
00185  CHARACTER(LEN=28),                INTENT(IN)  :: HATMFILE    ! atmospheric file name
00186  CHARACTER(LEN=6),                 INTENT(IN)  :: HATMFILETYPE! atmospheric file type
00187  CHARACTER(LEN=2),                 INTENT(IN)  :: HTEST       ! must be equal to 'OK'
00188 !
00189 !*       0.2   Declarations of local variables
00190 !              -------------------------------
00191 !
00192 INTEGER           :: ISWB     ! number of shortwave bands
00193 INTEGER           :: JTILE    ! loop counter on tiles
00194 INTEGER           :: IRESP    ! error return code
00195 INTEGER           :: ILUOUT   ! unit of output listing file
00196 INTEGER           :: ICH      ! unit of input chemical file
00197 INTEGER           :: IVERSION, IBUGFIX       ! surface version
00198 !
00199 REAL, DIMENSION(:,:), ALLOCATABLE                       :: ZFRAC_TILE     ! fraction of each surface type
00200 REAL, DIMENSION(KI,KSW,NTILESFC) :: ZDIR_ALB_TILE  ! direct albedo
00201 REAL, DIMENSION(KI,KSW,NTILESFC) :: ZSCA_ALB_TILE  ! diffuse albedo
00202 REAL, DIMENSION(KI,NTILESFC)                 :: ZEMIS_TILE     ! emissivity
00203 REAL, DIMENSION(KI,NTILESFC)                 :: ZTSRAD_TILE    ! radiative temperature
00204 !
00205 REAL, DIMENSION(:),     ALLOCATABLE :: ZP_ZENITH   ! zenithal angle
00206 REAL, DIMENSION(:),     ALLOCATABLE :: ZP_AZIM     ! azimuthal angle
00207 REAL, DIMENSION(:),     ALLOCATABLE :: ZP_CO2      ! air CO2 concentration
00208 REAL, DIMENSION(:),     ALLOCATABLE :: ZP_RHOA     ! air density
00209 REAL, DIMENSION(:,:),   ALLOCATABLE :: ZP_DIR_ALB  ! direct albedo
00210 REAL, DIMENSION(:,:),   ALLOCATABLE :: ZP_SCA_ALB  ! diffuse albedo
00211 REAL, DIMENSION(:),     ALLOCATABLE :: ZP_EMIS     ! emissivity
00212 REAL, DIMENSION(:),     ALLOCATABLE :: ZP_TSRAD    ! radiative temperature
00213 !
00214 DOUBLE PRECISION :: XTIME0
00215 !
00216 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00217 !-------------------------------------------------------------------------------
00218 !
00219 IF (LHOOK) CALL DR_HOOK('INIT_SURF_ATM_N',0,ZHOOK_HANDLE)
00220 !
00221 !
00222 CPROGNAME=HPROGRAM
00223 !
00224 IF (HTEST/='OK') THEN
00225    CALL ABOR1_SFX('INIT_SURF_ATMN: FATAL ERROR DURING ARGUMENT TRANSFER')
00226 END IF
00227 !
00228 !-------------------------------------------------------------------------------
00229 !
00230  CALL SURF_VERSION
00231 !
00232 !-------------------------------------------------------------------------------
00233 !
00234  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00235 !
00236 IF (LNAM_READ) THEN
00237  !
00238  !*       0.     Defaults
00239  !               --------
00240  !
00241  !        0.1. Hard defaults
00242  !      
00243  CALL DEFAULT_SSO(CROUGH,XFRACZ0,XCOEFBE)
00244  CALL DEFAULT_CH_SURF_ATM(CCHEM_SURF_FILE,LCH_SURF_EMIS)
00245  CALL DEFAULT_DIAG_SURF_ATM(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET, &
00246                             LCOEF,LSURF_VARS,LSURF_BUDGETC,          &
00247                             LRESET_BUDGETC,LSELECT, LPROVAR_TO_DIAG, &
00248                             LDIAG_GRID, LFRAC, XDIAG_TSTEP )                       
00249  !
00250 ENDIF
00251 !
00252 !        0.2. Defaults from file header
00253 !    
00254  CALL READ_DEFAULT_SURF_ATM_n(HPROGRAM)
00255 !
00256 !*       1.     Reading of configuration
00257 !               ------------------------
00258 !
00259 !        1.1. general options (diagnostics, etc...)
00260 !
00261  CALL READ_SURF_ATM_CONF_n(HPROGRAM)
00262 !
00263  CALL WRITE_COVER_TEX_START(HPROGRAM)
00264  CALL WRITE_COVER_TEX_COVER
00265 !
00266 !        1.2. Date
00267 !
00268 SELECT CASE (HINIT)
00269   CASE ('PGD')
00270     TTIME%TDATE%YEAR = NUNDEF
00271     TTIME%TDATE%MONTH= NUNDEF
00272     TTIME%TDATE%DAY  = NUNDEF
00273     TTIME%TIME       = XUNDEF
00274         
00275   CASE ('PRE')
00276     ! check that diagnostics are off if hinit=='pre'
00277     CALL PREP_CTRL_SURF_ATM(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,    &
00278                               LSURF_BUDGETC,LRESET_BUDGETC,LNOWRITE_TEXFILE,LSELECT,ILUOUT,&
00279                               LPROVAR_TO_DIAG)  
00280     ! preparation of fields  (date not present in PGD file)
00281     IF (LNAM_READ) CALL READ_NAM_PREP_SURF_n(HPROGRAM)
00282     CALL READ_SURF_ATM_DATE(HPROGRAM,HINIT,ILUOUT,HATMFILE,HATMFILETYPE,KYEAR,KMONTH,KDAY,PTIME,TTIME)
00283 
00284   CASE DEFAULT
00285     CALL INIT_IO_SURF_n(HPROGRAM,'FULL  ','SURF  ','READ ')
00286     CALL READ_SURF(HPROGRAM,'DTCUR',TTIME,IRESP)
00287     CALL END_IO_SURF_n(HPROGRAM)
00288 
00289 END SELECT
00290 !
00291 !-----------------------------------------------------------------------------------------------------
00292 ! READ PGD FILE
00293 !-----------------------------------------------------------------------------------------------------
00294 !
00295 !        1.3. Schemes used
00296 !
00297 !         Initialisation for IO
00298 !
00299  CALL SET_SURFEX_FILEIN(HPROGRAM,'PGD ') ! change input file name to pgd name
00300  CALL INIT_IO_SURF_n(HPROGRAM,'FULL  ','SURF  ','READ ')
00301 !
00302  CALL READ_SURF(HPROGRAM,'VERSION',IVERSION,IRESP)
00303  CALL READ_SURF(HPROGRAM,'BUG',IBUGFIX,IRESP)
00304 !
00305 !         reading
00306 !
00307  CALL READ_SURF(HPROGRAM,'SEA   ',CSEA   ,IRESP)
00308  CALL READ_SURF(HPROGRAM,'WATER ',CWATER ,IRESP)
00309  CALL READ_SURF(HPROGRAM,'NATURE',CNATURE,IRESP)
00310  CALL READ_SURF(HPROGRAM,'TOWN  ',CTOWN  ,IRESP)
00311 !
00312  CALL READ_SURF(HPROGRAM,'DIM_FULL  ',NDIM_FULL,  IRESP)
00313 IF (HINIT=='PRE') THEN
00314   NINDX2 = NDIM_FULL
00315   ALLOCATE(NWORK(NDIM_FULL))
00316   ALLOCATE(XWORK(NDIM_FULL))
00317   ALLOCATE(XWORK2(NDIM_FULL,2))
00318 ENDIF  
00319  CALL READ_SURF(HPROGRAM,'DIM_SEA   ',NDIM_SEA,   IRESP)
00320  CALL READ_SURF(HPROGRAM,'DIM_NATURE',NDIM_NATURE,IRESP)
00321  CALL READ_SURF(HPROGRAM,'DIM_WATER ',NDIM_WATER, IRESP)
00322  CALL READ_SURF(HPROGRAM,'DIM_TOWN  ',NDIM_TOWN,  IRESP)
00323  CALL READ_LECOCLIMAP(HPROGRAM,LECOCLIMAP)
00324  CALL READ_ARRANGE_COVER(HPROGRAM,LWATER_TO_NATURE,LTOWN_TO_ROCK)
00325  CALL READ_COVER_GARDEN(HPROGRAM,LGARDEN)
00326 !
00327 !* reads if climatological LAI is used or not for ecoclimap2. If not, looks for year to be used.
00328  CALL READ_LCLIM_LAI(HPROGRAM,LCLIM_LAI)
00329 IF (.NOT. LCLIM_LAI .AND. TTIME%TDATE%YEAR >= NECO2_START_YEAR &
00330                      .AND. TTIME%TDATE%YEAR <= NECO2_END_YEAR   ) NYEAR=TTIME%TDATE%YEAR
00331  CALL INI_DATA_COVER
00332  CALL READ_ECO2_IRRIG(HPROGRAM)
00333 !
00334 !
00335 !*       2.     Cover fields and grid:
00336 !               ---------------------
00337 !
00338 !        2.0. Get number of points on this proc
00339 !
00340  CALL GET_SIZE_FULL_n(HPROGRAM,NDIM_FULL,NSIZE_FULL)
00341 !
00342 !        2.1. Read cover
00343 !
00344  CALL READ_COVER_n(HPROGRAM)
00345 !
00346 !        2.2. Read grid
00347 !
00348 ALLOCATE(XLAT       (NSIZE_FULL))
00349 ALLOCATE(XLON       (NSIZE_FULL))
00350 ALLOCATE(XMESH_SIZE (NSIZE_FULL))
00351 ALLOCATE(XZ0EFFJPDIR(NSIZE_FULL))
00352  CALL READ_GRID(HPROGRAM,CGRID,XGRID_PAR,XLAT,XLON,XMESH_SIZE,IRESP,XZ0EFFJPDIR)
00353 NGRID_PAR=SIZE(XGRID_PAR)
00354 !
00355 IF (NRANK==NPIO) THEN
00356   !
00357   IF (.NOT.ASSOCIATED(XGRID_FULL_PAR)) THEN
00358     CALL READ_GRIDTYPE(HPROGRAM,CGRID,NGRID_PAR,NDIM_FULL,.FALSE.,HDIR='A')
00359     ALLOCATE(XGRID_FULL_PAR(NGRID_PAR))
00360     CALL READ_GRIDTYPE(HPROGRAM,CGRID,NGRID_PAR,NDIM_FULL,.TRUE.,&
00361                        XGRID_FULL_PAR,IRESP,HDIR='A')
00362   ENDIF
00363   !
00364 ENDIF
00365 !
00366 !*       2.4     Allocation of chemical species name, chemical index of HSV array 
00367 !
00368  CALL INIT_CHEMICAL_n(ILUOUT, KSV, HSV, NBEQ, CSV, NAEREQ,            &
00369                      NSV_CHSBEG, NSV_CHSEND, NSV_AERBEG, NSV_AEREND, &
00370                      CCH_NAMES, CAER_NAMES, NDSTEQ, NSV_DSTBEG,      &
00371                      NSV_DSTEND, NSLTEQ, NSV_SLTBEG, NSV_SLTEND      )
00372 !
00373 !        2.4 Initialize Chemical Emissions
00374 !
00375  CALL READ_SURF(HPROGRAM,'CH_EMIS',LCH_EMIS,IRESP)
00376 !
00377 IF (LCH_EMIS) THEN
00378   !
00379   IF ( IVERSION<7 .OR. IVERSION==7 .AND. IBUGFIX<3 ) THEN
00380     CCH_EMIS='AGGR'
00381   ELSE
00382     CALL READ_SURF(HPROGRAM,'CH_EMIS_OPT',CCH_EMIS,IRESP)
00383   END IF
00384   !
00385   IF (CCH_EMIS=='AGGR') LRW_CH_EMIS = .TRUE.
00386   !
00387   IF (NBEQ > 0) THEN
00388     !
00389     CALL OPEN_NAMELIST(HPROGRAM,ICH,HFILE=CCHEM_SURF_FILE)
00390     !
00391     IF (LCH_SURF_EMIS) THEN
00392       IF (CCH_EMIS=='AGGR') THEN
00393         CALL CH_INIT_EMISSION_n(HPROGRAM,NSIZE_FULL,ICH,PRHOA) 
00394       ELSE
00395         CALL CH_INIT_SNAP_n(HPROGRAM,NSIZE_FULL,HINIT,ICH,PRHOA)
00396       END IF
00397     ENDIF
00398     !
00399     !*       2.5 Initialization of dry deposition scheme (chemistry)
00400     !    
00401     IF (HINIT=='ALL') CALL CH_INIT_DEPCONST(ICH,ILUOUT,CSV(NSV_CHSBEG:NSV_CHSEND))
00402     !
00403     CALL CLOSE_NAMELIST(HPROGRAM,ICH)
00404     !
00405   ENDIF
00406   !
00407 END IF
00408 !
00409 !*       2.5 Subgrid orography
00410 !
00411  CALL READ_SSO_n(HPROGRAM)
00412 !
00413 !*       2.6 Orographic roughness length
00414 !
00415 ALLOCATE(XZ0EFFIP(NSIZE_FULL))
00416 ALLOCATE(XZ0EFFIM(NSIZE_FULL))
00417 ALLOCATE(XZ0EFFJP(NSIZE_FULL))
00418 ALLOCATE(XZ0EFFJM(NSIZE_FULL))
00419 ALLOCATE(XZ0REL  (NSIZE_FULL))
00420 !
00421  CALL SUBSCALE_Z0EFF(XAOSIP,XAOSIM,XAOSJP,XAOSJM,         &
00422                     XHO2IP,XHO2IM,XHO2JP,XHO2JM,0.,      &
00423                     XZ0EFFIP,XZ0EFFIM,XZ0EFFJP,XZ0EFFJM, &
00424                     XZ0REL                               )
00425 !
00426 !*       2.7 Dummy fields
00427 !
00428  CALL READ_DUMMY_n(HPROGRAM)
00429 !
00430 !         End of IO
00431 !
00432  CALL END_IO_SURF_n(HPROGRAM)
00433  CALL SET_SURFEX_FILEIN(HPROGRAM,'PREP') ! restore input file name
00434 !
00435 !-----------------------------------------------------------------------------------------------------
00436 ! END READ PGD FILE
00437 !-----------------------------------------------------------------------------------------------------
00438 !
00439 !
00440 !         Initialisation for IO
00441 !
00442  CALL INIT_IO_SURF_n(HPROGRAM,'FULL  ','SURF  ','READ ')
00443 !
00444 !*       2.8 Allocations and Initialization of diagnostics
00445 !
00446 IF (HINIT=='ALL') CALL ALLOC_DIAG_SURF_ATM_n(HPROGRAM,KSW)
00447 !
00448 !
00449 !*       Canopy fields if Beljaars et al 2004 parameterization is used
00450 !
00451 IF (CROUGH=='BE04') CALL READ_SSO_CANOPY_n(HPROGRAM,HINIT)
00452 !
00453 !*       Precip fields (for ARPEGE/ALADIN run)
00454 !
00455  CALL READ_PRECIP_n(HPROGRAM,HINIT)
00456 !
00457 !         End of IO
00458 !
00459  CALL END_IO_SURF_n(HPROGRAM)
00460 !
00461 !-----------------------------------------------------------------------------------------------------
00462 !
00463 !*       4.     Initialization of masks for each surface
00464 !               ----------------------------------------
00465 !
00466 !* number of geographical points
00467 NSIZE_NATURE    = COUNT(XNATURE(:) > 0.0)
00468 NSIZE_TOWN      = COUNT(XTOWN(:)   > 0.0)
00469 NSIZE_WATER     = COUNT(XWATER(:)  > 0.0)
00470 NSIZE_SEA       = COUNT(XSEA(:)    > 0.0)
00471 !
00472 ALLOCATE(NR_NATURE (NSIZE_NATURE))
00473 ALLOCATE(NR_TOWN   (NSIZE_TOWN  ))
00474 ALLOCATE(NR_WATER  (NSIZE_WATER ))
00475 ALLOCATE(NR_SEA    (NSIZE_SEA   ))
00476 !
00477 IF (NSIZE_SEA   >0)CALL GET_1D_MASK( NSIZE_SEA,    NSIZE_FULL, XSEA   , NR_SEA   )
00478 IF (NSIZE_WATER >0)CALL GET_1D_MASK( NSIZE_WATER,  NSIZE_FULL, XWATER , NR_WATER )
00479 IF (NSIZE_TOWN  >0)CALL GET_1D_MASK( NSIZE_TOWN,   NSIZE_FULL, XTOWN  , NR_TOWN  )
00480 IF (NSIZE_NATURE>0)CALL GET_1D_MASK( NSIZE_NATURE, NSIZE_FULL, XNATURE, NR_NATURE)
00481 !
00482 !* number of shortwave spectral bands
00483 ISWB=SIZE(PSW_BANDS)
00484 !
00485 !* tile number
00486 ALLOCATE(ZFRAC_TILE(NSIZE_FULL,NTILESFC))
00487 JTILE = 0
00488 !
00489 !
00490 !*       5.     Default values
00491 !               --------------
00492 !
00493 ZDIR_ALB_TILE = XUNDEF
00494 ZSCA_ALB_TILE = XUNDEF
00495 ZEMIS_TILE    = XUNDEF
00496 ZTSRAD_TILE   = XUNDEF
00497 !
00498 #ifndef NOMPI
00499 XTIME0 = MPI_WTIME()
00500 #endif
00501 !
00502 !*       6.     Initialization of sea
00503 !               ---------------------
00504 !
00505 JTILE               = JTILE + 1
00506 ZFRAC_TILE(:,JTILE) = XSEA(:)
00507 !
00508 ! pack variables which are arguments to this routine
00509  CALL PACK_SURF_INIT_ARG(NSIZE_SEA,NR_SEA)
00510 !
00511 ! initialization
00512 IF (NDIM_SEA>0) &
00513   CALL INIT_SEA_n(HPROGRAM,HINIT,NSIZE_SEA,KSV,KSW,                  &
00514                   HSV,ZP_CO2,ZP_RHOA,                                &
00515                   ZP_ZENITH,ZP_AZIM,PSW_BANDS,ZP_DIR_ALB,ZP_SCA_ALB, &
00516                   ZP_EMIS,ZP_TSRAD,                                  &
00517                   KYEAR,KMONTH,KDAY,PTIME, HATMFILE,HATMFILETYPE,    &
00518                   'OK'                                               )  
00519 !
00520 !
00521  CALL UNPACK_SURF_INIT_ARG(JTILE,NSIZE_SEA,NR_SEA)  
00522 !
00523 #ifndef NOMPI
00524 XTIME_INIT_SEA = XTIME_INIT_SEA + (MPI_WTIME() - XTIME0)*100./MAX(1,NSIZE_SEA)
00525 XTIME0 = MPI_WTIME()
00526 #endif
00527 !
00528 !*       7.     Initialization of lakes
00529 !               -----------------------
00530 !
00531 !
00532 JTILE               = JTILE + 1
00533 ZFRAC_TILE(:,JTILE) = XWATER(:)
00534 !
00535 ! pack variables which are arguments to this routine
00536  CALL PACK_SURF_INIT_ARG(NSIZE_WATER,NR_WATER)
00537 !
00538 ! initialization
00539 IF (NDIM_WATER>0) &
00540   CALL INIT_INLAND_WATER_n(HPROGRAM,HINIT,NSIZE_WATER,KSV,KSW,                &
00541                            HSV,ZP_CO2,ZP_RHOA,                                &
00542                            ZP_ZENITH,ZP_AZIM,PSW_BANDS,ZP_DIR_ALB,ZP_SCA_ALB, &
00543                            ZP_EMIS,ZP_TSRAD,                                  &
00544                            KYEAR,KMONTH,KDAY,PTIME, HATMFILE,HATMFILETYPE,    &
00545                            'OK'                                               )
00546 !
00547  CALL UNPACK_SURF_INIT_ARG(JTILE,NSIZE_WATER,NR_WATER)
00548 !
00549 #ifndef NOMPI
00550 XTIME_INIT_WATER = XTIME_INIT_WATER + (MPI_WTIME() - XTIME0)*100./MAX(1,NSIZE_WATER)
00551 XTIME0 = MPI_WTIME()
00552 #endif
00553 !
00554 !*       8.     Initialization of vegetation scheme
00555 !               -----------------------------------
00556 !
00557 !
00558 JTILE               = JTILE + 1
00559 ZFRAC_TILE(:,JTILE) = XNATURE(:)
00560 !
00561 ! pack variables which are arguments to this routine
00562  CALL PACK_SURF_INIT_ARG(NSIZE_NATURE,NR_NATURE)
00563 !
00564 !$OMP SINGLE
00565 ALLOCATE(NWG_LAYER_TOT(NDIM_FULL,1))
00566 !$OMP END SINGLE
00567 !
00568 ! initialization
00569 IF (NDIM_NATURE>0) &
00570   CALL INIT_NATURE_n(HPROGRAM,HINIT,OLAND_USE,NSIZE_NATURE,KSV,KSW,     &
00571                      HSV,ZP_CO2,ZP_RHOA,                                &
00572                      ZP_ZENITH,ZP_AZIM,PSW_BANDS,ZP_DIR_ALB,ZP_SCA_ALB, &
00573                      ZP_EMIS,ZP_TSRAD,                                  &
00574                      KYEAR,KMONTH,KDAY,PTIME, HATMFILE,HATMFILETYPE,    &
00575                      'OK'                                               )
00576 !
00577 !
00578  CALL UNPACK_SURF_INIT_ARG(JTILE,NSIZE_NATURE,NR_NATURE)  
00579 !
00580 #ifndef NOMPI
00581 XTIME_INIT_NATURE = XTIME_INIT_NATURE + (MPI_WTIME() - XTIME0)*100./MAX(1,NSIZE_NATURE)
00582 XTIME0 = MPI_WTIME()
00583 #endif
00584 !
00585 !*       9.     Initialization of urban scheme
00586 !               ------------------------------
00587 !
00588 !
00589 JTILE               = JTILE + 1
00590 ZFRAC_TILE(:,JTILE) = XTOWN(:)
00591 !
00592 ! pack variables which are arguments to this routine
00593  CALL PACK_SURF_INIT_ARG(NSIZE_TOWN,NR_TOWN)
00594 !
00595 ! initialization
00596 IF (NDIM_TOWN>0) &
00597   CALL INIT_TOWN_n(HPROGRAM,HINIT,NSIZE_TOWN,KSV,KSW,                 &
00598                    HSV,ZP_CO2,ZP_RHOA,                                &
00599                    ZP_ZENITH,ZP_AZIM,PSW_BANDS,ZP_DIR_ALB,ZP_SCA_ALB, &
00600                    ZP_EMIS,ZP_TSRAD,                                  &
00601                    KYEAR,KMONTH,KDAY,PTIME, HATMFILE,HATMFILETYPE,    &
00602                    'OK'                                               )  
00603 !
00604 !
00605  CALL UNPACK_SURF_INIT_ARG(JTILE,NSIZE_TOWN,NR_TOWN)  
00606 !
00607 #ifndef NOMPI
00608 XTIME_INIT_TOWN = XTIME_INIT_TOWN + (MPI_WTIME() - XTIME0)*100./MAX(1,NSIZE_TOWN)
00609 #endif
00610 !
00611 !
00612 !*      10.     Output radiative fields
00613 !               -----------------------
00614 !
00615 IF (SIZE(PDIR_ALB)>0)                                                   &
00616   CALL AVERAGE_RAD(ZFRAC_TILE,                                            &
00617                    ZDIR_ALB_TILE, ZSCA_ALB_TILE, ZEMIS_TILE, ZTSRAD_TILE, &
00618                    PDIR_ALB,      PSCA_ALB,      PEMIS,      PTSRAD       )  
00619 
00620 DEALLOCATE(ZFRAC_TILE)
00621 !
00622 !
00623 !
00624 !*      11.     check diagnostics flag
00625 !               -----------------------
00626 !
00627 IF(LPROVAR_TO_DIAG)THEN
00628    IF (NDIM_WATER>0.AND.CWATER=='FLAKE ') THEN
00629        CALL ABOR1_SFX('For the moment LPROVAR_TO_DIAG can not be activated with CWATER=FLAKE')
00630    ENDIF
00631    IF (NDIM_TOWN>0.AND.CTOWN=='TEB') THEN
00632        CALL ABOR1_SFX('For the moment LPROVAR_TO_DIAG can not be activated with CTOWN=TEB')
00633    ENDIF
00634 ENDIF 
00635 !
00636 !-------------------------------------------------------------------------------
00637  CALL WRITE_COVER_TEX_END(HPROGRAM)
00638 !-------------------------------------------------------------------------------
00639 !==============================================================================
00640 IF (LHOOK) CALL DR_HOOK('INIT_SURF_ATM_N',1,ZHOOK_HANDLE)
00641 CONTAINS
00642 !==============================================================================
00643 SUBROUTINE PACK_SURF_INIT_ARG(KSIZE,KMASK)
00644 !
00645 INTEGER, INTENT(IN)               :: KSIZE
00646 INTEGER, INTENT(IN), DIMENSION(:) :: KMASK
00647 INTEGER :: JJ
00648 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00649 !
00650 ! input arguments:
00651 !
00652 IF (LHOOK) CALL DR_HOOK('PACK_SURF_INIT_ARG',0,ZHOOK_HANDLE)
00653 ALLOCATE(ZP_CO2          (KSIZE))
00654 ALLOCATE(ZP_RHOA         (KSIZE))
00655 ALLOCATE(ZP_ZENITH       (KSIZE))
00656 ALLOCATE(ZP_AZIM         (KSIZE))
00657 !
00658 !
00659 ! output arguments:
00660 !
00661 ALLOCATE(ZP_DIR_ALB(KSIZE,ISWB))
00662 ALLOCATE(ZP_SCA_ALB(KSIZE,ISWB))
00663 ALLOCATE(ZP_EMIS   (KSIZE))
00664 ALLOCATE(ZP_TSRAD  (KSIZE))
00665 !
00666 IF (KSIZE>0) THEN
00667   ZP_CO2    = 6.E-4
00668   ZP_RHOA   = 1.2
00669   ZP_ZENITH = 0.
00670   ZP_AZIM   = 0.
00671   ZP_DIR_ALB = XUNDEF
00672   ZP_SCA_ALB = XUNDEF
00673   ZP_EMIS    = XUNDEF
00674   ZP_TSRAD   = XUNDEF
00675 END IF
00676 !
00677 DO JJ=1,KSIZE
00678 IF (SIZE(PCO2)>0) &
00679      ZP_CO2   (JJ)     = PCO2        (KMASK(JJ))  
00680 IF (SIZE(PRHOA)>0) &
00681      ZP_RHOA  (JJ)     = PRHOA       (KMASK(JJ))  
00682 IF (SIZE(PZENITH)>0) &
00683      ZP_ZENITH(JJ)     = PZENITH     (KMASK(JJ))  
00684 IF (SIZE(PAZIM  )>0) &
00685      ZP_AZIM  (JJ)     = PAZIM       (KMASK(JJ))  
00686 ENDDO
00687 IF (LHOOK) CALL DR_HOOK('PACK_SURF_INIT_ARG',1,ZHOOK_HANDLE)
00688 !
00689 END SUBROUTINE PACK_SURF_INIT_ARG
00690 !==============================================================================
00691 SUBROUTINE UNPACK_SURF_INIT_ARG(KTILE,KSIZE,KMASK)
00692 !
00693 INTEGER, INTENT(IN) :: KTILE, KSIZE
00694 !
00695 INTEGER, INTENT(IN), DIMENSION(:) :: KMASK
00696 !
00697 INTEGER :: JJ   ! loop counter
00698 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00699 !
00700 !
00701 IF (LHOOK) CALL DR_HOOK('UNPACK_SURF_INIT_ARG',0,ZHOOK_HANDLE)
00702 DO JJ=1,KSIZE
00703 IF (SIZE(ZTSRAD_TILE)>0) &
00704      ZTSRAD_TILE  (KMASK(JJ),KTILE)  = ZP_TSRAD     (JJ)  
00705 IF (SIZE(ZDIR_ALB_TILE)>0) &
00706      ZDIR_ALB_TILE(KMASK(JJ),:,KTILE)= ZP_DIR_ALB   (JJ,:)  
00707 IF (SIZE(ZSCA_ALB_TILE)>0) &
00708      ZSCA_ALB_TILE(KMASK(JJ),:,KTILE)= ZP_SCA_ALB   (JJ,:)  
00709 IF (SIZE(ZEMIS_TILE)>0) &
00710      ZEMIS_TILE   (KMASK(JJ),KTILE)  = ZP_EMIS      (JJ)  
00711 ENDDO
00712 !
00713 DEALLOCATE(ZP_CO2    )
00714 DEALLOCATE(ZP_RHOA   )
00715 DEALLOCATE(ZP_ZENITH )
00716 DEALLOCATE(ZP_AZIM   )
00717 DEALLOCATE(ZP_DIR_ALB)
00718 DEALLOCATE(ZP_SCA_ALB)
00719 DEALLOCATE(ZP_EMIS   )
00720 DEALLOCATE(ZP_TSRAD  )
00721 IF (LHOOK) CALL DR_HOOK('UNPACK_SURF_INIT_ARG',1,ZHOOK_HANDLE)
00722 !
00723 END SUBROUTINE UNPACK_SURF_INIT_ARG
00724 !==============================================================================
00725 !
00726 END SUBROUTINE INIT_SURF_ATM_n