SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/compute_isba_parameters.F90
Go to the documentation of this file.
00001 !#############################################################
00002 SUBROUTINE COMPUTE_ISBA_PARAMETERS(HPROGRAM,HINIT,OLAND_USE,            &
00003                              KI,KSV,KSW,                                &
00004                              HSV,PCO2,PRHOA,                            &
00005                              PZENITH,PSW_BANDS,PDIR_ALB,PSCA_ALB,       &
00006                              PEMIS,PTSRAD,                              &
00007                              HTEST                                      )  
00008 !#############################################################
00009 !
00010 !!****  *COMPUTE_ISBA_PARAMETERS_n* - routine to initialize ISBA
00011 !!
00012 !!    PURPOSE
00013 !!    -------
00014 !!
00015 !!**  METHOD
00016 !!    ------
00017 !!
00018 !!    EXTERNAL
00019 !!    --------
00020 !!
00021 !!
00022 !!    IMPLICIT ARGUMENTS
00023 !!    ------------------
00024 !!
00025 !!    REFERENCE
00026 !!    ---------
00027 !!
00028 !!
00029 !!    AUTHOR
00030 !!    ------
00031 !!      V. Masson   *Meteo France*      
00032 !!
00033 !!    MODIFICATIONS
00034 !!    -------------
00035 !!      Original    01/2004
00036 !!      Modified by P. Le Moigne (11/2004): miscellaneous diagnostics
00037 !!      Modified by P. Le Moigne (06/2006): seeding and irrigation    
00038 !!      Modified by B. Decharme    (2008) : SGH and Flooding scheme
00039 !!      Modified by B. Decharme  (01/2009): optional deep soil temperature as in Arpege
00040 !!      Modified by R. Hamdi     (01/2009): Cp and L
00041 !!      Modified by B. Decharme  (06/2009): read topographic index statistics
00042 !!      Modified by P. Le Moigne (01/2009): Beljaars sso
00043 !!      Modified by B. Decharme  (08/2009): Active Trip coupling variable if Earth System Model
00044 !!      A.L. Gibelin   04/09 : change BSLAI_NITRO initialisation
00045 !!      A.L. Gibelin   04/09 : modifications for CENTURY model 
00046 !!      A.L. Gibelin   06/09 : soil carbon initialisation
00047 !!      Modified by B. Decharme  (09/2012): Bug in exponential profile calculation with DIF
00048 !!
00049 !-------------------------------------------------------------------------------
00050 !
00051 !*       0.    DECLARATIONS
00052 !              ------------
00053 !
00054 USE MODD_SURFEX_MPI, ONLY : NWG_LAYER_TOT, NWG_SIZE,  NPIO, NCOMM, NPROC, NRANK, WLOG_MPI
00055 !
00056 USE MODD_IO_SURF_ASC,  ONLY : NMASK_asc => NMASK
00057 USE MODD_IO_SURF_FA ,  ONLY : NMASK_fa => NMASK
00058 USE MODD_IO_SURF_LFI,  ONLY : NMASK_lfi => NMASK
00059 !
00060 USE MODD_ISBA_n,   ONLY : CROUGH, CISBA, CPEDOTF, CPHOTO, CRUNOFF, CALBEDO,   &
00061                           CSCOND, CRESPSL, LTR_ML, NNBIOMASS, NNLITTER,       &
00062                           NNLITTLEVS, NNSOILCARB, XCLAY, XSAND, XSOC,         &
00063                           XWWILT, XWFC, XWSAT, XRM_PATCH,                     &
00064                           XCOVER, XVEG, XLAI, XRSMIN, XGAMMA, XRGL, XCV,      &
00065                           XDG, NWG_LAYER, XDROOT, XDG2, XDZG, XDZDIF,         &
00066                           XZ0, XZ0_O_Z0H, XABC, XPOI, XANMAX, XFZERO, XEPSO,  &
00067                           XGAMM, XQDGAMM, XQDGMES, XT1GMES, XT2GMES, XAMAX,   &
00068                           XQDAMAX, XT1AMAX, XT2AMAX, XAH, XBH, XTAU_WOOD,     &
00069                           XINCREASE, XTURNOVER, XALBNIR_VEG, XALBVIS_VEG,     &
00070                           XALBUV_VEG, XEMIS, XVEGTYPE, XGMES, XRE25, XBSLAI,  &
00071                           XLAIMIN, XGC,XDMAX, LSTRESS, XF2I,                  &
00072                           XSEFOLD, XH_TREE, XPATCH, NPATCH, XWRMAX_CF,        &
00073                           NR_NATURE_P, NSIZE_NATURE_P,                        &
00074                           XALBNIR_DRY, XALBVIS_DRY, XALBUV_DRY,               &
00075                           XALBNIR_WET, XALBVIS_WET, XALBUV_WET,               &
00076                           XALBNIR_SOIL, XALBVIS_SOIL, XALBUV_SOIL,            &
00077                           XWG, XTG, TSNOW, XALBNIR, XALBVIS, XALBUV,          &
00078                           XEMIS_NAT, XFAPARC, XFAPIRC, XLAI_EFFC, XMUS,       &
00079                           XAOSIP,XAOSIM,XAOSJP,XAOSJM,                        &
00080                           XHO2IP,XHO2IM,XHO2JP,XHO2JM,                        &
00081                           XZ0EFFIP,XZ0EFFIM,XZ0EFFJP,XZ0EFFJM, XZ0REL,        &
00082                           XVEGTYPE_PATCH,XROOTFRAC,XRUNOFFD,XSOILWGHT,        &
00083                           XCGSAT, XC1SAT, XC2REF, XC3, XC4B, XACOEF, XPCOEF,  &
00084                           XTAUICE, XBCOEF, XCONDSAT,                          &
00085                           XHCAPSOIL, XCONDDRY, XCONDSLD, XC4REF, XMPOTSAT,    &
00086                           XTDEEP, XGAMMAT, NGROUND_LAYER, XSOILGRID, TTIME,   &
00087                           XCE_NITRO, XCF_NITRO,                               &
00088                           XCNA_NITRO, XBSLAI_NITRO, CCPSURF, TSEED,           &
00089                           TREAP, XWATSUP, XIRRIG, XCGMAX,                     &
00090                           CKSAT, CTOPREG, CRAIN, LSOCP, CSOC, XFRACSOC,       &
00091                           XTI_MIN, XTI_MAX, XTI_MEAN, XTI_STD, XTI_SKEW,      &
00092                           XTAB_FSAT, XTAB_WTOP, XD_ICE, XKSAT_ICE,            &
00093                           XFSAT, XMUF, LTRIP, LFLOOD, XFFLOOD, XFFROZEN,      &
00094                           XPIFLOOD, XCPL_EFLOOD, XCPL_PFLOOD, XCPL_IFLOOD,    &
00095                           XCPL_DRAIN, XCPL_RUNOFF, LGLACIER,                  &
00096                           LTEMP_ARP, NTEMPLAYER_ARP, XPSN, XPSNG, XPSNV,      &
00097                           XPSNV_A, XFF, XFFG, XFFV, XPCPS, XPLVTT, XPLSTT,    &
00098                           LCANOPY, LCANOPY_DRAG, XDIR_ALB_WITH_SNOW,          &
00099                           XSCA_ALB_WITH_SNOW, XALBF, XEMISF, XCPL_ICEFLUX,    &
00100                           NLAYER_HORT, NLAYER_DUN, XF_PARAM, XC_DEPTH_RATIO
00101 !
00102 USE MODD_CH_ISBA_n, ONLY : CSV, CCH_NAMES, NBEQ, NSV_CHSBEG, NSV_CHSEND,         &
00103                            CCHEM_SURF_FILE, NDSTEQ, NSV_DSTBEG, NSV_DSTEND,      &
00104                            NSV_AERBEG, NSV_AEREND, NAEREQ, CDSTNAMES, CAER_NAMES,&
00105                            NSLTEQ, NSV_SLTBEG,  NSV_SLTEND, CSLTNAMES,           &
00106                            LCH_BIO_FLUX, CCH_DRY_DEP  
00107 !
00108 USE MODD_DEEPSOIL,       ONLY : LPHYSDOMC, LDEEPSOIL, XTDEEP_CLI, XGAMMAT_CLI
00109 USE MODD_AGRI,           ONLY : LAGRIP, XTHRESHOLD
00110 USE MODD_AGRI_n,         ONLY : NIRRINUM, XTHRESHOLDSPT, LIRRIDAY, LIRRIGATE
00111 !
00112 USE MODD_DIAG_ISBA_n,      ONLY : LPATCH_BUDGET
00113 USE MODD_DIAG_MISC_ISBA_n, ONLY : LSURF_DIAG_ALBEDO
00114 !
00115 USE MODD_SURF_ATM,    ONLY : LCPL_ESM
00116 USE MODD_SURF_ATM_n,  ONLY : NDIM_FULL
00117 !
00118 USE MODD_SGH_PAR,        ONLY : NDIMTAB, XICE_DEPH_MAX, XF_DECAY
00119 !
00120 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00121 USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
00122 USE MODD_SNOW_PAR,       ONLY : XEMISSN
00123 !
00124 USE MODD_TOPODYN, ONLY : NNCAT, NMESHT
00125 USE MODD_SURF_ATM_n, ONLY : NR_NATURE, NDIM_FULL
00126 !
00127 USE MODD_DST_n
00128 USE MODD_SLT_n
00129 !
00130 USE MODI_GET_LUOUT
00131 USE MODI_ABOR1_SFX
00132 USE MODI_INIT_IO_SURF_n
00133 USE MODI_ALLOCATE_PHYSIO
00134 USE MODI_INIT_ISBA_MIXPAR
00135 USE MODI_CONVERT_PATCH_ISBA
00136 USE MODI_INIT_VEG_PGD_n
00137 USE MODI_INIT_TOP
00138 USE MODI_EXP_DECAY_SOIL_DIF
00139 USE MODI_EXP_DECAY_SOIL_FR
00140 USE MODI_CARBON_INIT
00141 USE MODI_SOILTEMP_ARP_PAR
00142 USE MODI_WRITE_COVER_TEX_ISBA
00143 USE MODI_WRITE_COVER_TEX_ISBA_PAR
00144 USE MODI_END_IO_SURF_n
00145 !
00146 USE MODI_READ_ISBA_n
00147 USE MODI_INIT_ISBA_LANDUSE
00148 USE MODI_READ_ISBA_CANOPY_n
00149 USE MODI_INIT_VEG_n
00150 USE MODI_AVERAGED_ALBEDO_EMIS_ISBA
00151 USE MODI_DIAG_ISBA_INIT_n
00152 USE MODI_INIT_SURF_TOPD
00153 USE MODI_ISBA_SOC_PARAMETERS
00154 !
00155 USE MODI_GATHER_AND_WRITE_MPI
00156 !
00157 USE MODI_READ_AND_SEND_MPI
00158 USE MODI_ISBA_TO_TOPD
00159 USE MODI_OPEN_FILE
00160 USE MODI_CLOSE_FILE
00161 !
00162 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00163 USE PARKIND1  ,ONLY : JPRB
00164 !
00165 IMPLICIT NONE
00166 !
00167 #ifndef NOMPI
00168 INCLUDE "mpif.h"
00169 #endif
00170 !
00171 !*       0.1   Declarations of arguments
00172 !              -------------------------
00173 !
00174  CHARACTER(LEN=6),                 INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00175  CHARACTER(LEN=3),                 INTENT(IN)  :: HINIT     ! choice of fields to initialize
00176 LOGICAL,                          INTENT(IN)  :: OLAND_USE !
00177 INTEGER,                          INTENT(IN)  :: KI        ! number of points
00178 INTEGER,                          INTENT(IN)  :: KSV       ! number of scalars
00179 INTEGER,                          INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00180  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN)  :: HSV       ! name of all scalar variables
00181 REAL,             DIMENSION(KI),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
00182 REAL,             DIMENSION(KI),  INTENT(IN)  :: PRHOA     ! air density
00183 REAL,             DIMENSION(KI),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
00184 REAL,             DIMENSION(KSW), INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
00185 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
00186 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
00187 REAL,             DIMENSION(KI),  INTENT(OUT) :: PEMIS     ! emissivity
00188 REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSRAD    ! radiative temperature
00189 !
00190  CHARACTER(LEN=2),                 INTENT(IN)  :: HTEST       ! must be equal to 'OK'
00191 !
00192 !
00193 !*       0.2   Declarations of local variables
00194 !              -------------------------------
00195 !
00196 REAL, DIMENSION(NDIM_FULL)   :: ZF_PARAM, ZC_DEPTH_RATIO
00197 !
00198 REAL, DIMENSION(KI)     :: ZTSRAD_NAT !radiative temperature
00199 !
00200 REAL, DIMENSION(:,:), ALLOCATABLE :: ZWG1 ! work array for surface water content
00201 REAL, DIMENSION(:,:), ALLOCATABLE :: ZTG1 ! work array for surface temperature
00202 !
00203 REAL, DIMENSION(:),   ALLOCATABLE :: ZM, ZWORK
00204 REAL, DIMENSION(:,:), ALLOCATABLE :: ZF
00205 !
00206 INTEGER :: IDIM_FULL, JL
00207 INTEGER           :: JILU     ! loop increment
00208 INTEGER           :: ILUOUT   ! unit of output listing file
00209 INTEGER           :: IDECADE, IDECADE2  ! decade of simulation
00210 INTEGER :: JPATCH  ! loop counter on tiles
00211 INTEGER           :: IUNIT       ! unit of f/dc map file
00212 INTEGER           :: INFOMPI
00213 !
00214 LOGICAL                           :: LWORK
00215 !
00216 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00217 !
00218 !-------------------------------------------------------------------------------
00219 !
00220 !               Initialisation for IO
00221 !
00222 IF (LHOOK) CALL DR_HOOK('COMPUTE_ISBA_PARAMETERS',0,ZHOOK_HANDLE)
00223  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00224 !
00225 IF (HTEST/='OK') THEN
00226   CALL ABOR1_SFX('COMPUTE_ISBA_PARAMETERS: FATAL ERROR DURING ARGUMENT TRANSFER')
00227 END IF
00228 !
00229 !
00230 !*       2.3    Physiographic data fields from land cover:
00231 !               -----------------------------------------
00232 !
00233  CALL ALLOCATE_PHYSIO(CPHOTO, CISBA, KI, NVEGTYPE, NGROUND_LAYER, NPATCH, &
00234                      XVEGTYPE, XLAI, XVEG, XZ0, XEMIS, XDG, XD_ICE,      &
00235                      XRSMIN, XGAMMA, XWRMAX_CF, XRGL, XCV,               &
00236                      XZ0_O_Z0H, XALBNIR_VEG, XALBVIS_VEG, XALBUV_VEG,    &
00237                      XH_TREE, XRE25, XLAIMIN, XBSLAI, XSEFOLD,           &
00238                      XGMES, XGC, XF2I, XDMAX, LSTRESS,                   &
00239                      XCE_NITRO, XCF_NITRO, XCNA_NITRO,                   &
00240                      TSEED, TREAP, XWATSUP, XIRRIG,                      &
00241                      XROOTFRAC, NWG_LAYER, XDROOT, XDG2                  )
00242 !
00243 IF (TTIME%TDATE%MONTH /= NUNDEF) THEN
00244   IDECADE = 3 * ( TTIME%TDATE%MONTH - 1 ) + MIN(TTIME%TDATE%DAY-1,29) / 10 + 1
00245 ELSE
00246   IDECADE = 1
00247 END IF
00248 !
00249 IDECADE2 = IDECADE
00250 !
00251  CALL INIT_ISBA_MIXPAR(CISBA,IDECADE,IDECADE2,XCOVER,CPHOTO,'NAT')
00252 !
00253  CALL CONVERT_PATCH_ISBA(CISBA,IDECADE,IDECADE2,XCOVER,CPHOTO,LAGRIP,           &
00254                         'NAT',PVEG=XVEG,PLAI=XLAI,                             &
00255                         PRSMIN=XRSMIN,PGAMMA=XGAMMA,PWRMAX_CF=XWRMAX_CF,       &
00256                         PRGL=XRGL,PCV=XCV,PSOILGRID=XSOILGRID,                 &
00257                         PDG=XDG,KWG_LAYER=NWG_LAYER,PDROOT=XDROOT,PDG2=XDG2,   &
00258                         PZ0=XZ0,PZ0_O_Z0H=XZ0_O_Z0H,                           &
00259                         PALBNIR_VEG=XALBNIR_VEG,PALBVIS_VEG=XALBVIS_VEG,       &
00260                         PALBUV_VEG=XALBUV_VEG,PEMIS_ECO=XEMIS,                 &
00261                         PVEGTYPE=XVEGTYPE,PROOTFRAC=XROOTFRAC,                 &
00262                         PGMES=XGMES,PBSLAI=XBSLAI,PLAIMIN=XLAIMIN,             &
00263                         PSEFOLD=XSEFOLD,PGC=XGC,                               &
00264                         PDMAX=XDMAX,PF2I=XF2I,OSTRESS=LSTRESS,PH_TREE=XH_TREE, &
00265                         PRE25=XRE25,PCE_NITRO=XCE_NITRO,PCF_NITRO=XCF_NITRO,   &
00266                         PCNA_NITRO=XCNA_NITRO,PD_ICE=XD_ICE,TPSEED=TSEED,      &
00267                         TPREAP=TREAP,PWATSUP=XWATSUP,PIRRIG=XIRRIG             )
00268 !
00269 IF(CISBA=='DIF')THEN
00270   IDIM_FULL = SIZE(NWG_LAYER_TOT,1)
00271 !$OMP SINGLE
00272   DEALLOCATE(NWG_LAYER_TOT)
00273   ALLOCATE(NWG_LAYER_TOT(IDIM_FULL,SIZE(NWG_LAYER,2)))
00274 !$OMP END SINGLE        
00275   DO JL = 1,SIZE(NWG_LAYER,2)
00276     IF (HPROGRAM=='ASCII ') THEN
00277       CALL GATHER_AND_WRITE_MPI(NWG_LAYER(:,JL),NWG_LAYER_TOT(:,JL),NMASK_asc)
00278     ELSEIF (HPROGRAM=='LFI   ') THEN
00279       CALL GATHER_AND_WRITE_MPI(NWG_LAYER(:,JL),NWG_LAYER_TOT(:,JL),NMASK_lfi)
00280     ELSEIF (HPROGRAM=='FA    ') THEN
00281       CALL GATHER_AND_WRITE_MPI(NWG_LAYER(:,JL),NWG_LAYER_TOT(:,JL),NMASK_fa)
00282     ELSE
00283       CALL ABOR1_SFX("COMPUTE_ISBA_PARAMETERS: WITH CISBA=DIF, THE GATHERING OF "//&
00284          "NWG_LAYER FOR ALL PROCS MUST BE IMPLEMENTED IN AROME AND MESONH CASES ")
00285     ENDIF
00286   ENDDO
00287   NWG_SIZE = 0
00288   IF (NRANK==NPIO) NWG_SIZE=MAXVAL(NWG_LAYER_TOT(:,:),NWG_LAYER_TOT(:,:)/=NUNDEF)
00289   IF (NPROC>1) THEN
00290 !$OMP SINGLE   
00291 #ifndef NOMPI
00292     CALL MPI_BCAST(NWG_SIZE,KIND(NWG_SIZE)/4,MPI_INTEGER,NPIO,NCOMM,INFOMPI)
00293 #endif
00294 !$OMP END SINGLE
00295   ENDIF  
00296   !
00297 ENDIF
00298 !
00299 !-------------------------------------------------------------------------------
00300 !
00301  CALL INIT_VEG_PGD_n(HPROGRAM, ILUOUT, KI, NPATCH, NGROUND_LAYER, TTIME%TDATE%MONTH,   &
00302                   XVEGTYPE, XPATCH, XVEGTYPE_PATCH, NSIZE_NATURE_P, NR_NATURE_P,    &
00303                   XRM_PATCH, &
00304                   LDEEPSOIL, LPHYSDOMC, XTDEEP_CLI, XGAMMAT_CLI, XTDEEP, XGAMMAT,   &
00305                   LAGRIP, XTHRESHOLD, NIRRINUM, LIRRIDAY, LIRRIGATE, XTHRESHOLDSPT, &
00306                   CPHOTO, HINIT, LTR_ML, NNBIOMASS, PCO2, PRHOA, XABC, XPOI,  &
00307                   XGMES, XGC, XDMAX, XANMAX, XFZERO, XEPSO, XGAMM, XQDGAMM,   & 
00308                   XQDGMES, XT1GMES, XT2GMES, XAMAX, XQDAMAX, XT1AMAX, XT2AMAX,&
00309                   XAH, XBH, XTAU_WOOD, XINCREASE, XTURNOVER,                  &
00310                   KSV, HSV, NBEQ, CSV, NAEREQ, NSV_CHSBEG, NSV_CHSEND,        &
00311                   NSV_AERBEG, NSV_AEREND, CCH_NAMES, CAER_NAMES, NDSTEQ,      &
00312                   NSV_DSTBEG, NSV_DSTEND, NSLTEQ, NSV_SLTBEG, NSV_SLTEND,     &
00313                   CDSTNAMES, CSLTNAMES, CCHEM_SURF_FILE,                      &
00314                   XSFDST, XSFDSTM, XSFSLT,                                    &
00315                   XAOSIP, XAOSIM, XAOSJP, XAOSJM, XHO2IP, XHO2IM, XHO2JP,     &
00316                   XHO2JM, XZ0, XZ0EFFIP, XZ0EFFIM, XZ0EFFJP, XZ0EFFJM, XZ0REL,&
00317                   XCLAY, XSAND, CPEDOTF,                                      &
00318                   XCONDSAT, XMPOTSAT, XBCOEF, XWWILT, XWFC, XWSAT,            &
00319                   XTAUICE, XCGSAT, XC1SAT, XC2REF, XC3, XC4B, XACOEF, XPCOEF, &
00320                   XC4REF, XPCPS, XPLVTT, XPLSTT,                              &
00321                   CSCOND, CISBA, XHCAPSOIL, XCONDDRY, XCONDSLD, CCPSURF,      &
00322                   XDG, XDROOT, XDG2, XROOTFRAC, XRUNOFFD, XDZG, XDZDIF,       &
00323                   XSOILWGHT, NWG_LAYER, NLAYER_HORT, NLAYER_DUN, XD_ICE,      &
00324                   XKSAT_ICE, XALBNIR_DRY, XALBVIS_DRY, XALBUV_DRY,            &
00325                   XALBNIR_WET, XALBVIS_WET, XALBUV_WET, XBSLAI_NITRO,         &
00326                   XCE_NITRO, XCNA_NITRO, XCF_NITRO                            )  
00327 !
00328 !-------------------------------------------------------------------------------
00329 !
00330 IF(CISBA=='DIF') THEN
00331   !
00332   IF( CKSAT=='SGH' )THEN 
00333     !
00334     ALLOCATE(ZWORK(KI))
00335     ALLOCATE(ZF(KI,NPATCH))
00336     ZWORK(:) = XUNDEF
00337     ZF(:,:)  = XUNDEF          
00338     DO JPATCH=1,NPATCH    
00339       IF (NSIZE_NATURE_P(JPATCH) == 0 ) CYCLE 
00340       DO JILU=1,KI
00341         IF(XPATCH(JILU,JPATCH)>0.0)THEN
00342           !no profile for non vegetated area : f and root = 0.0
00343           LWORK=(XDROOT(JILU,JPATCH)==0.0.OR.XDROOT(JILU,JPATCH)==XUNDEF)
00344           ZF   (JILU,JPATCH) = MIN(XF_DECAY,4.0/MAX(0.01,XDROOT(JILU,JPATCH)))
00345           ZF   (JILU,JPATCH) = MERGE(0.0,ZF    (JILU,JPATCH),LWORK) 
00346           ZWORK(JILU       ) = MERGE(0.0,XDROOT(JILU,JPATCH),LWORK)
00347         ENDIF
00348       ENDDO
00349       CALL EXP_DECAY_SOIL_DIF(ZF(:,JPATCH),XDG(:,:,JPATCH),NWG_LAYER(:,JPATCH),ZWORK(:),&
00350                               XCONDSAT(:,:,JPATCH))
00351     ENDDO  
00352     DEALLOCATE(ZWORK)
00353     DEALLOCATE(ZF)
00354   ENDIF
00355   !  
00356   IF(CSOC=='SGH')THEN   
00357     IF(.NOT.LSOCP)THEN
00358       CALL ABOR1_SFX('CSOC=SGH can be activated only if SOC data given in PGD fields')
00359     ENDIF
00360     ALLOCATE(XFRACSOC(KI,NGROUND_LAYER))
00361     XFRACSOC(:,:)=0.0
00362     CALL ISBA_SOC_PARAMETERS(XPATCH,XDG,XSOC,XBCOEF,XMPOTSAT,   &
00363                              XCONDSAT,XWSAT,XHCAPSOIL,XCONDDRY, &
00364                              XCONDSLD,XWFC,XWWILT,XFRACSOC )
00365   ELSE
00366     ALLOCATE(XFRACSOC(0,0))
00367   ENDIF
00368 ! 
00369 ELSE
00370   ALLOCATE(XFRACSOC(0,0))
00371 ENDIF
00372 !
00373 !Topmodel
00374 !  
00375 IF ((CKSAT=='SGH' .OR. CKSAT=='EXP') .AND. HINIT/='PRE' .AND. CISBA/='DIF') THEN
00376   ALLOCATE(ZF(KI,NPATCH))
00377   ZF (:,:) = XUNDEF
00378 ENDIF
00379 !
00380 !CRUNOFF used in hydro_sgh and isba_sgh_update
00381 IF( CRUNOFF=='SGH ') THEN 
00382 !
00383   ALLOCATE(XTAB_FSAT(KI,NDIMTAB))
00384   ALLOCATE(XTAB_WTOP(KI,NDIMTAB))
00385 !
00386   XTAB_FSAT(:,:) = 0.0
00387   XTAB_WTOP(:,:) = 0.0
00388 !
00389   IF(HINIT/='PRE')THEN
00390 !
00391     WHERE(XCLAY(:,1)==XUNDEF.AND.XTI_MEAN(:)/=XUNDEF) XTI_MEAN(:)=XUNDEF
00392 !
00393     IF(CTOPREG/='DEF')THEN
00394        WRITE(ILUOUT,*)'!'
00395        WRITE(ILUOUT,*)'  YOU USE TOPMODEL WITHOUT THE REGRESSION    ' 
00396        WRITE(ILUOUT,*)' OF WOLOCK AND MCCABE (2000) (OPTION TOPREG) '
00397        WRITE(ILUOUT,*)'!'
00398     ENDIF
00399 !      
00400     ALLOCATE(ZM(KI))
00401     ZM (:) = XUNDEF
00402 !
00403     CALL INIT_TOP (CISBA, CTOPREG, ILUOUT, XPATCH, XRUNOFFD, &
00404                    XDZG, XWWILT, XWSAT, XTI_MIN,             &
00405                    XTI_MAX, XTI_MEAN, XTI_STD, XTI_SKEW,     &
00406                    XSOILWGHT, XTAB_FSAT, XTAB_WTOP, ZM       )  
00407 !
00408 !
00409     IF (CKSAT=='SGH' .AND. CISBA/='DIF') THEN
00410 !     Exponential decay factor calculate using soil properties 
00411 !     (eq. 11, Decharme et al., J. Hydrometeor, 2006)
00412       DO JILU=1,KI
00413         IF (ZM(JILU)/=XUNDEF) ZF(JILU,:) = (XWSAT(JILU,1)-XWWILT(JILU,1))/ZM(JILU)
00414       ENDDO
00415 !       
00416     ENDIF
00417 !
00418     DEALLOCATE(ZM)
00419 !
00420   ENDIF
00421 ! 
00422 ELSE                  
00423 !  
00424   ALLOCATE(XTAB_FSAT(0,0))
00425   ALLOCATE(XTAB_WTOP(0,0))
00426 !                  
00427 ENDIF  
00428 ! 
00429 !Exponential decay for ISBA-FR option
00430 !CKSAT used in hydro_soil.F90 and soil.F90
00431 IF(HINIT/='PRE'.AND.CISBA/='DIF')THEN 
00432   !
00433   IF(CKSAT=='SGH') THEN
00434     !
00435     WHERE(ZF(:,:)==XUNDEF.AND.XDG(:,2,:)/=XUNDEF) 
00436       ZF(:,:) = 4.0/XDG(:,2,:)
00437     ENDWHERE
00438     ZF(:,:) = MIN(ZF(:,:),XF_DECAY)
00439     !
00440     ALLOCATE(XF_PARAM (KI))
00441     ALLOCATE(XC_DEPTH_RATIO (KI))
00442     XF_PARAM(:) = ZF(:,1)
00443     XC_DEPTH_RATIO(:) = 1.25
00444     !
00445     DO JPATCH=1,NPATCH
00446       IF (NSIZE_NATURE_P(JPATCH) == 0 ) CYCLE
00447         CALL EXP_DECAY_SOIL_FR(CISBA, ZF(:,JPATCH),XC1SAT(:,JPATCH),XC2REF(:,JPATCH),   &
00448                                 XDG(:,:,JPATCH),XD_ICE(:,JPATCH),XC4REF(:,JPATCH),      &
00449                                 XC3(:,:,JPATCH),XCONDSAT(:,:,JPATCH),XKSAT_ICE(:,JPATCH))  
00450     ENDDO                       
00451     ! 
00452   ELSEIF ( CKSAT=='EXP' .AND. CISBA=='3-L' ) THEN
00453     !
00454     ALLOCATE(XF_PARAM (KI))
00455     ALLOCATE(XC_DEPTH_RATIO (KI))
00456     XF_PARAM(:) = XUNDEF
00457     XC_DEPTH_RATIO(:) = XUNDEF
00458     !
00459     IF (HPROGRAM/='AROME ' .AND. HPROGRAM/='MESONH ') THEN
00460       !
00461       CALL OPEN_FILE('ASCII ',IUNIT,HFILE='carte_f_dc.txt',HFORM='FORMATTED',HACTION='READ ')
00462       DO JILU=1,NDIM_FULL
00463         READ(IUNIT,*) ZF_PARAM(JILU), ZC_DEPTH_RATIO(JILU)
00464       ENDDO
00465       CALL CLOSE_FILE('ASCII ',IUNIT)
00466       CALL READ_AND_SEND_MPI(ZF_PARAM,XF_PARAM,NR_NATURE)
00467       CALL READ_AND_SEND_MPI(ZC_DEPTH_RATIO,XC_DEPTH_RATIO,NR_NATURE)
00468       !
00469     ELSE
00470       WRITE(ILUOUT,*) "COMPUTE_ISBA_PARAMETERS: WITH CKSAT=EXP, IN NOT OFFLINE "//&
00471                       "MODE, TOPMODEL FILE FOR F_PARAM IS NOT READ "
00472     ENDIF
00473     !
00474     DO JPATCH=1,NPATCH
00475       WHERE (XF_PARAM(:)/=XUNDEF)
00476         ZF(:,JPATCH) = XF_PARAM(:)
00477       ELSEWHERE
00478         ZF(:,JPATCH) = 4.0/XDG(:,2,JPATCH)
00479         ZF(:,JPATCH) = MIN(ZF(:,JPATCH),XF_DECAY)
00480       ENDWHERE
00481     ENDDO
00482     !
00483     DO JPATCH=1,NPATCH
00484       CALL EXP_DECAY_SOIL_FR(CISBA, ZF(:,JPATCH),XC1SAT(:,JPATCH),XC2REF(:,JPATCH), &
00485                              XDG(:,:,JPATCH),XD_ICE(:,JPATCH),XC4REF(:,JPATCH),   &
00486                              XC3(:,:,JPATCH),XCONDSAT(:,:,JPATCH),                &
00487                              XKSAT_ICE(:,JPATCH))  
00488     ENDDO    
00489     !
00490     DEALLOCATE(ZF)
00491     !    
00492   ENDIF
00493   ! 
00494 ENDIF
00495 !
00496 !
00497 !*       2.10   Soil carbon
00498 !               -----------                        
00499 !
00500 IF (HINIT == 'ALL' .AND. CRESPSL=='CNT' .AND. CPHOTO == 'NCB') THEN
00501   CALL CARBON_INIT(NNBIOMASS, NNLITTER, NNLITTLEVS, NNSOILCARB)
00502 ENDIF
00503 !
00504 !Rainfall spatial distribution
00505 !CRAIN used in HYDRO_VEG and HYDRO_SGH and ISBA_SGH_UPDATE
00506 IF(CRAIN=='SGH')THEN
00507   ALLOCATE(XMUF(KI))
00508   XMUF(:)=0.0
00509 ELSE
00510   ALLOCATE(XMUF(0))
00511 ENDIF
00512 !
00513 ALLOCATE(XFSAT(KI))  
00514 XFSAT(:) = 0.0
00515 !
00516 !-------------------------------------------------------------------------------
00517 !
00518 !*       6.2    Initialize of TRIP or ESM coupling:'
00519 !               ------------------------------------
00520 !
00521 IF(LCPL_ESM)THEN
00522    LTRIP=.TRUE.
00523    IF(.NOT.LGLACIER)THEN
00524      CALL ABOR1_SFX('LGLACIER MUST BE ACTIVATED WITH EARTH SYSTEM MODEL')
00525    ENDIF
00526 ENDIF
00527 !
00528 IF(LGLACIER)THEN
00529    ALLOCATE(XCPL_ICEFLUX(KI))
00530    XCPL_ICEFLUX(:) = 0.0
00531 ELSE
00532    ALLOCATE(XCPL_ICEFLUX(0))
00533 ENDIF
00534 !
00535 IF(LTRIP)THEN
00536 !        
00537   ALLOCATE(XCPL_DRAIN (KI))
00538   ALLOCATE(XCPL_RUNOFF(KI))
00539   XCPL_DRAIN  = 0.0
00540   XCPL_RUNOFF = 0.0
00541 !
00542   IF(LFLOOD)THEN
00543     !
00544     ALLOCATE(XFFLOOD      (KI))
00545     ALLOCATE(XPIFLOOD     (KI))
00546     ALLOCATE(XCPL_EFLOOD  (KI))
00547     ALLOCATE(XCPL_PFLOOD  (KI))
00548     ALLOCATE(XCPL_IFLOOD  (KI))
00549     ALLOCATE(XFF          (KI,NPATCH))
00550     ALLOCATE(XFFG         (KI,NPATCH))
00551     ALLOCATE(XFFV         (KI,NPATCH))  
00552     ALLOCATE(XFFROZEN     (KI,NPATCH))  
00553     ALLOCATE(XALBF        (KI,NPATCH))  
00554     ALLOCATE(XEMISF       (KI,NPATCH))  
00555     XFFLOOD       = 0.0
00556     XPIFLOOD      = 0.0
00557     XCPL_EFLOOD   = 0.0
00558     XCPL_PFLOOD   = 0.0
00559     XCPL_IFLOOD   = 0.0
00560     XFF           = 0.0
00561     XFFG          = 0.0
00562     XFFV          = 0.0
00563     XFFROZEN      = 0.0
00564     XALBF         = 0.0
00565     XEMISF        = 0.0
00566   ELSE
00567     ALLOCATE(XFFLOOD      (0))
00568     ALLOCATE(XPIFLOOD     (0))
00569     ALLOCATE(XCPL_EFLOOD  (0))
00570     ALLOCATE(XCPL_PFLOOD  (0))
00571     ALLOCATE(XCPL_IFLOOD  (0))
00572     ALLOCATE(XFF        (0,0))
00573     ALLOCATE(XFFG       (0,0))
00574     ALLOCATE(XFFV       (0,0))
00575     ALLOCATE(XFFROZEN   (0,0))
00576     ALLOCATE(XALBF      (0,0))  
00577     ALLOCATE(XEMISF     (0,0))      
00578   ENDIF
00579   !
00580 ELSE
00581 !        
00582   ALLOCATE(XCPL_DRAIN (0))
00583   ALLOCATE(XCPL_RUNOFF(0))   
00584 !  
00585 ENDIF
00586 !
00587 !-------------------------------------------------------------------------------
00588 !
00589 !*      7.     ISBA time-varying deep force-restore temperature initialization
00590 !              ---------------------------------------------------------------
00591 !
00592  CALL SOILTEMP_ARP_PAR(HPROGRAM,LTEMP_ARP,NTEMPLAYER_ARP)
00593 !
00594 !-------------------------------------------------------------------------------
00595 !
00596 !*       9.     Prints of cover parameters in a tex file
00597 !               ----------------------------------------
00598 !
00599  CALL WRITE_COVER_TEX_ISBA    (NPATCH,NGROUND_LAYER,CISBA)
00600  CALL WRITE_COVER_TEX_ISBA_PAR(NPATCH,NGROUND_LAYER,CISBA,CPHOTO,XSOILGRID)
00601 !
00602 !* if only physiographic fields are to be initialized, stop here.
00603 !
00604 IF (HINIT/='ALL') THEN
00605   IF (LHOOK) CALL DR_HOOK('COMPUTE_ISBA_PARAMETERS',1,ZHOOK_HANDLE)
00606   RETURN
00607 END IF
00608 !
00609 !-------------------------------------------------------------------------------
00610 !
00611  CALL INIT_IO_SURF_n(HPROGRAM,'NATURE','ISBA  ','READ ')
00612 !
00613 !*      10.     Prognostic and semi-prognostic fields
00614 !               -------------------------------------
00615 !
00616  CALL READ_ISBA_n(HPROGRAM)
00617 !
00618 !-------------------------------------------------------------------------------
00619 !
00620 !*      11.  Extrapolation of the prognostic and semi-prognostic fields
00621 !                           LAND USE case 
00622 !               -------------------------------------
00623 !
00624 IF (OLAND_USE) THEN
00625    CALL INIT_ISBA_LANDUSE(HPROGRAM)  
00626 END IF
00627 !
00628 !-------------------------------------------------------------------------------
00629 !
00630 !*      12.     Canopy air fields:
00631 !               -----------------
00632 !
00633  CALL READ_ISBA_CANOPY_n(HPROGRAM)
00634 !
00635 !-------------------------------------------------------------------------------
00636 !
00637 ALLOCATE(XDIR_ALB_WITH_SNOW(KI,KSW,NPATCH))
00638 ALLOCATE(XSCA_ALB_WITH_SNOW(KI,KSW,NPATCH))
00639 XDIR_ALB_WITH_SNOW = 0.0
00640 XSCA_ALB_WITH_SNOW = 0.0
00641 !
00642 !-------------------------------------------------------------------------------
00643 !
00644  CALL INIT_VEG_n(NPATCH, KI, LCANOPY, CROUGH, TSNOW, &
00645                    CPHOTO, XLAIMIN, XH_TREE, XVEGTYPE_PATCH, XLAI, XZ0, XVEG, XEMIS, &
00646                    LTR_ML, XFAPARC, XFAPIRC, XLAI_EFFC, XMUS, &
00647                    XALBNIR_SOIL, XALBVIS_SOIL, XALBUV_SOIL, XALBNIR, XALBVIS, XALBUV, &
00648                    LSURF_DIAG_ALBEDO, XPSN, XPSNG, XPSNV, XPSNV_A, &
00649                    PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD ) 
00650 !
00651 !
00652 ALLOCATE(ZWG1(KI,NPATCH))
00653 ALLOCATE(ZTG1(KI,NPATCH))
00654 DO JPATCH=1,NPATCH
00655   ZWG1(:,JPATCH) = XWG(:,1,JPATCH)
00656   ZTG1(:,JPATCH) = XTG(:,1,JPATCH)
00657 END DO
00658 !
00659  CALL CONVERT_PATCH_ISBA(CISBA,IDECADE,IDECADE2,XCOVER,CPHOTO,LAGRIP,'NAT',&
00660                           PWG1 = ZWG1, &
00661                           PALBNIR_SOIL=XALBNIR_SOIL, &
00662                           PALBVIS_SOIL=XALBVIS_SOIL, &
00663                           PALBUV_SOIL=XALBUV_SOIL )
00664 !
00665 DEALLOCATE(ZWG1)
00666 !
00667 ALLOCATE(XEMIS_NAT   (KI))
00668 XEMIS_NAT (:) = XUNDEF
00669 !
00670  CALL AVERAGED_ALBEDO_EMIS_ISBA(LFLOOD, CALBEDO, PZENITH,                 &
00671                                  XVEG,XZ0,XLAI,ZTG1,                     &
00672                                  XPATCH,                                 &
00673                                  PSW_BANDS,                              &
00674                                  XALBNIR_VEG,XALBVIS_VEG,XALBUV_VEG,     &
00675                                  XALBNIR_SOIL,XALBVIS_SOIL,XALBUV_SOIL,  &
00676                                  XEMIS,                                  &
00677                                  TSNOW,                                  &
00678                                  XALBNIR,XALBVIS,XALBUV,                 &
00679                                  PDIR_ALB, PSCA_ALB,                     &
00680                                  XEMIS_NAT,ZTSRAD_NAT                    )  
00681 !
00682 PEMIS  = XEMIS_NAT
00683 PTSRAD = ZTSRAD_NAT
00684 !
00685 DEALLOCATE(ZTG1)
00686 !-------------------------------------------------------------------------------
00687 !
00688 !*      15.     ISBA diagnostics initialization
00689 !               -------------------------------
00690 !
00691 IF(NPATCH<=1) LPATCH_BUDGET=.FALSE.
00692 !
00693  CALL DIAG_ISBA_INIT_n(HPROGRAM,KI,KSW)
00694 !
00695 !-------------------------------------------------------------------------------
00696 !
00697  CALL INIT_SURF_TOPD(HPROGRAM,NDIM_FULL)
00698 !
00699 !-------------------------------------------------------------------------------
00700 !
00701 !         End of IO
00702 !
00703  CALL END_IO_SURF_n(HPROGRAM)
00704 IF (LHOOK) CALL DR_HOOK('COMPUTE_ISBA_PARAMETERS',1,ZHOOK_HANDLE)
00705 !
00706 END SUBROUTINE COMPUTE_ISBA_PARAMETERS