SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_veg_pgdn.F90
Go to the documentation of this file.
00001 !#############################################################
00002 SUBROUTINE INIT_VEG_PGD_n(HPROGRAM, KLUOUT, KI, KPATCH, KGROUND_LAYER, KMONTH,        &
00003                         PVEGTYPE, PPATCH, PVEGTYPE_PATCH, KSIZE_NATURE_P, KR_NATURE_P,  &
00004                         PRM_PATCH, &
00005                         ODEEPSOIL, OPHYSDOMC, PTDEEP_CLI, PGAMMAT_CLI, PTDEEP, PGAMMAT, &
00006                         OAGRIP, PTHRESHOLD, KIRRINUM, OIRRIDAY, OIRRIGATE, PTHRESHOLDSPT, &
00007                         HPHOTO, HINIT, OTR_ML, KNBIOMASS, PCO2, PRHOA, PABC, PPOI,  &
00008                         PGMES, PGC, PDMAX, PANMAX, PFZERO, PEPSO, PGAMM, PQDGAMM,   &
00009                         PQDGMES, PT1GMES, PT2GMES, PAMAX, PQDAMAX, PT1AMAX, PT2AMAX,&
00010                         PAH, PBH, PTAU_WOOD, PINCREASE, PTURNOVER,                  &
00011                         KSV, HSV, KBEQ, HSVO, KAEREQ, KSV_CHSBEG, KSV_CHSEND,       &
00012                         KSV_AERBEG, KSV_AEREND, HCH_NAMES, HAER_NAMES, KDSTEQ,      &
00013                         KSV_DSTBEG, KSV_DSTEND, KSLTEQ, KSV_SLTBEG, KSV_SLTEND,     &
00014                         HDSTNAMES, HSLTNAMES, HCHEM_SURF_FILE,                      &
00015                         PSFDST, PSFDSTM, PSFSLT,                                    &
00016                         PAOSIP, PAOSIM, PAOSJP, PAOSJM, PHO2IP, PHO2IM, PHO2JP,     &
00017                         PHO2JM, PZ0, PZ0EFFIP, PZ0EFFIM, PZ0EFFJP, PZ0EFFJM, PZ0REL,&
00018                         PCLAY, PSAND, HPEDOTF,                                      &
00019                         PCONDSAT, PMPOTSAT, PBCOEF, PWWILT, PWFC, PWSAT,            &
00020                         PTAUICE, PCGSAT, PC1SAT, PC2REF, PC3, PC4B, PACOEF, PPCOEF, &
00021                         PC4REF, PPCPS, PPLVTT, PPLSTT,                              &
00022                         HSCOND, HISBA, PHCAPSOIL, PCONDDRY, PCONDSLD, HCPSURF,      &
00023                         PDG, PDROOT, PDG2, PROOTFRAC, PRUNOFFD, PDZG, PDZDIF,       &
00024                         PSOILWGHT, KWG_LAYER, KLAYER_HORT, KLAYER_DUN, PD_ICE,      &
00025                         PKSAT_ICE, PALBNIR_DRY, PALBVIS_DRY, PALBUV_DRY,            &
00026                         PALBNIR_WET, PALBVIS_WET, PALBUV_WET, PBSLAI_NITRO,         &
00027                         PCE_NITRO, PCNA_NITRO, PCF_NITRO                            )  
00028 !#############################################################
00029 !
00030 !!****  *INIT_VEG_PGD_n_n* - routine to initialize ISBA
00031 !!
00032 !!    PURPOSE
00033 !!    -------
00034 !!
00035 !!**  METHOD
00036 !!    ------
00037 !!
00038 !!    EXTERNAL
00039 !!    --------
00040 !!
00041 !!
00042 !!    IMPLICIT ARGUMENTS
00043 !!    ------------------
00044 !!
00045 !!    REFERENCE
00046 !!    ---------
00047 !!
00048 !!
00049 !!    AUTHOR
00050 !!    ------
00051 !!      V. Masson   *Meteo France*      
00052 !!
00053 !!    MODIFICATIONS
00054 !!    -------------
00055 !!
00056 !-------------------------------------------------------------------------------
00057 !
00058 !*       0.    DECLARATIONS
00059 !              ------------
00060 !
00061 USE MODD_SURF_ATM,       ONLY : LCPL_ARP
00062 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00063 USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
00064 USE MODD_CSTS,           ONLY : XCPD, XLVTT, XLSTT
00065 USE MODD_SNOW_PAR,       ONLY : XEMISSN
00066 USE MODD_ISBA_PAR,       ONLY : XTAU_ICE
00067 !
00068 USE MODD_SGH_PAR,        ONLY : XICE_DEPH_MAX
00069 !
00070 USE MODI_SURF_PATCH
00071 USE MODI_GET_1D_MASK
00072 USE MODI_CO2_INIT_n
00073 USE MODI_INIT_CHEMICAL_n
00074 USE MODI_OPEN_NAMELIST
00075 USE MODI_CH_INIT_DEP_ISBA_n
00076 USE MODI_CLOSE_NAMELIST
00077 USE MODI_INIT_DST
00078 USE MODI_INIT_SLT
00079 USE MODI_SUBSCALE_Z0EFF
00080 !
00081 USE MODE_SOIL
00082 !
00083 USE MODI_HEATCAPZ
00084 USE MODI_THRMCONDZ
00085 USE MODI_ABOR1_SFX
00086 USE MODI_DIF_LAYER
00087 USE MODI_DRY_WET_SOIL_ALBEDOS
00088 !
00089 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00090 USE PARKIND1  ,ONLY : JPRB
00091 !
00092 IMPLICIT NONE
00093 !
00094 !*       0.1   Declarations of arguments
00095 !              -------------------------
00096 !
00097  CHARACTER(LEN=6), INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00098 INTEGER, INTENT(IN)  :: KLUOUT
00099 !
00100 INTEGER, INTENT(IN)  :: KI
00101 INTEGER, INTENT(IN)  :: KPATCH
00102 INTEGER, INTENT(IN)  :: KGROUND_LAYER
00103 INTEGER, INTENT(IN)  :: KMONTH
00104 !
00105 REAL, DIMENSION(:,:), POINTER :: PVEGTYPE
00106 REAL, DIMENSION(:,:), POINTER :: PPATCH
00107 REAL, DIMENSION(:,:,:), POINTER :: PVEGTYPE_PATCH
00108 INTEGER, DIMENSION(:), POINTER :: KSIZE_NATURE_P
00109 INTEGER, DIMENSION(:,:), POINTER :: KR_NATURE_P
00110 !
00111 REAL, INTENT(IN) :: PRM_PATCH
00112 !
00113 LOGICAL, INTENT(IN) :: ODEEPSOIL
00114 LOGICAL, INTENT(IN) :: OPHYSDOMC
00115 REAL, DIMENSION(:), INTENT(IN) :: PTDEEP_CLI
00116 REAL, DIMENSION(:), INTENT(IN) :: PGAMMAT_CLI
00117 REAL, DIMENSION(:), POINTER :: PTDEEP
00118 REAL, DIMENSION(:), POINTER :: PGAMMAT
00119 !
00120 LOGICAL, INTENT(IN) :: OAGRIP
00121 REAL, DIMENSION(:), INTENT(IN) :: PTHRESHOLD
00122 INTEGER, DIMENSION(:,:), POINTER :: KIRRINUM
00123 LOGICAL, DIMENSION(:,:), POINTER :: OIRRIDAY
00124 LOGICAL, DIMENSION(:,:), POINTER :: OIRRIGATE
00125 REAL, DIMENSION(:,:), POINTER :: PTHRESHOLDSPT
00126 !
00127  CHARACTER(LEN=3), INTENT(IN) :: HPHOTO
00128  CHARACTER(LEN=3), INTENT(IN) :: HINIT
00129 LOGICAL, INTENT(IN) :: OTR_ML
00130 INTEGER, INTENT(IN) :: KNBIOMASS
00131 REAL, DIMENSION(:), INTENT(IN) :: PCO2
00132 REAL, DIMENSION(:), INTENT(IN) :: PRHOA
00133 REAL, DIMENSION(:), POINTER :: PABC
00134 REAL, DIMENSION(:), POINTER :: PPOI
00135 REAL, DIMENSION(:,:), INTENT(IN) :: PGMES
00136 REAL, DIMENSION(:,:), INTENT(IN) :: PGC
00137 REAL, DIMENSION(:,:), INTENT(IN):: PDMAX
00138 REAL, DIMENSION(:,:), POINTER :: PANMAX
00139 REAL, DIMENSION(:,:), POINTER :: PFZERO
00140 REAL, DIMENSION(:,:), POINTER :: PEPSO
00141 REAL, DIMENSION(:,:), POINTER :: PGAMM
00142 REAL, DIMENSION(:,:), POINTER :: PQDGAMM
00143 REAL, DIMENSION(:,:), POINTER :: PQDGMES
00144 REAL, DIMENSION(:,:), POINTER :: PT1GMES
00145 REAL, DIMENSION(:,:), POINTER :: PT2GMES
00146 REAL, DIMENSION(:,:), POINTER :: PAMAX
00147 REAL, DIMENSION(:,:), POINTER :: PQDAMAX
00148 REAL, DIMENSION(:,:), POINTER :: PT1AMAX
00149 REAL, DIMENSION(:,:), POINTER :: PT2AMAX
00150 REAL, DIMENSION(:,:), POINTER :: PAH
00151 REAL, DIMENSION(:,:), POINTER :: PBH
00152 REAL, DIMENSION(:,:), POINTER :: PTAU_WOOD
00153 REAL, DIMENSION(:,:,:), POINTER :: PINCREASE
00154 REAL, DIMENSION(:,:,:), POINTER :: PTURNOVER
00155 !
00156 INTEGER,                          INTENT(IN) :: KSV      ! number of scalars
00157  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV      ! name of all scalar variables
00158 INTEGER,                         INTENT(OUT) :: KBEQ     ! number of chemical variables
00159  CHARACTER(LEN=6), DIMENSION(:), POINTER :: HSVO          ! name of scalar species without # and @
00160 INTEGER,                         INTENT(OUT) :: KAEREQ  ! number of aerosol variables
00161 INTEGER,                         INTENT(OUT) :: KSV_CHSBEG  ! first chemical var.
00162 INTEGER,                         INTENT(OUT) :: KSV_CHSEND  ! last  chemical var.
00163 INTEGER,                         INTENT(OUT) :: KSV_AERBEG  ! first aerosol var.
00164 INTEGER,                         INTENT(OUT) :: KSV_AEREND  ! last  aerosol var.
00165  CHARACTER(LEN=6), DIMENSION(:), POINTER :: HCH_NAMES
00166  CHARACTER(LEN=6), DIMENSION(:), POINTER :: HAER_NAMES     
00167 INTEGER,                         INTENT(OUT) :: KDSTEQ     ! number of chemical variables
00168 INTEGER,                         INTENT(OUT) :: KSV_DSTBEG  ! first chemical var.
00169 INTEGER,                         INTENT(OUT) :: KSV_DSTEND  ! last  chemical var.
00170 INTEGER,                         INTENT(OUT) :: KSLTEQ     ! number of chemical variables
00171 INTEGER,                         INTENT(OUT) :: KSV_SLTBEG  ! first chemical var.
00172 INTEGER,                         INTENT(OUT) :: KSV_SLTEND  ! last  chemical var.
00173  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: HDSTNAMES
00174  CHARACTER(LEN=6), DIMENSION(:), POINTER, OPTIONAL :: HSLTNAMES
00175 !
00176  CHARACTER(LEN=28), INTENT(OUT) :: HCHEM_SURF_FILE
00177 !
00178 REAL, DIMENSION(:,:,:), POINTER :: PSFDST
00179 REAL, DIMENSION(:,:,:), POINTER :: PSFDSTM
00180 REAL, DIMENSION(:,:,:), POINTER :: PSFSLT
00181 !
00182 REAL, DIMENSION(:), INTENT(IN) :: PAOSIP
00183 REAL, DIMENSION(:), INTENT(IN) :: PAOSIM
00184 REAL, DIMENSION(:), INTENT(IN) :: PAOSJP
00185 REAL, DIMENSION(:), INTENT(IN) :: PAOSJM
00186 REAL, DIMENSION(:), INTENT(IN) :: PHO2IP
00187 REAL, DIMENSION(:), INTENT(IN) :: PHO2IM
00188 REAL, DIMENSION(:), INTENT(IN) :: PHO2JP
00189 REAL, DIMENSION(:), INTENT(IN) :: PHO2JM
00190 REAL, DIMENSION(:,:), INTENT(IN) :: PZ0
00191 REAL, DIMENSION(:,:), POINTER :: PZ0EFFIP
00192 REAL, DIMENSION(:,:), POINTER :: PZ0EFFIM
00193 REAL, DIMENSION(:,:), POINTER :: PZ0EFFJP
00194 REAL, DIMENSION(:,:), POINTER :: PZ0EFFJM
00195 REAL, DIMENSION(:), POINTER :: PZ0REL
00196 !
00197 REAL, DIMENSION(:,:), INTENT(IN) :: PCLAY
00198 REAL, DIMENSION(:,:), INTENT(IN) :: PSAND
00199  CHARACTER(LEN=4), INTENT(IN) :: HPEDOTF
00200 REAL, DIMENSION(:,:,:), POINTER :: PCONDSAT
00201 REAL, DIMENSION(:,:), POINTER :: PMPOTSAT
00202 REAL, DIMENSION(:,:), POINTER :: PBCOEF
00203 REAL, DIMENSION(:,:), POINTER :: PWWILT
00204 REAL, DIMENSION(:,:), POINTER :: PWFC
00205 REAL, DIMENSION(:,:), POINTER :: PWSAT
00206 REAL, DIMENSION(:), POINTER :: PTAUICE
00207 REAL, DIMENSION(:), POINTER :: PCGSAT
00208 REAL, DIMENSION(:,:), POINTER :: PC1SAT
00209 REAL, DIMENSION(:,:), POINTER :: PC2REF
00210 REAL, DIMENSION(:,:,:), POINTER :: PC3
00211 REAL, DIMENSION(:), POINTER :: PC4B
00212 REAL, DIMENSION(:), POINTER :: PACOEF
00213 REAL, DIMENSION(:), POINTER :: PPCOEF
00214 REAL, DIMENSION(:,:), POINTER :: PC4REF
00215 !
00216 REAL, DIMENSION(:,:), POINTER :: PPCPS
00217 REAL, DIMENSION(:,:), POINTER :: PPLVTT
00218 REAL, DIMENSION(:,:), POINTER :: PPLSTT
00219 !
00220  CHARACTER(LEN=4), INTENT(IN) :: HSCOND
00221  CHARACTER(LEN=3), INTENT(IN) :: HISBA
00222 REAL, DIMENSION(:,:), POINTER :: PHCAPSOIL
00223 REAL, DIMENSION(:,:), POINTER :: PCONDDRY
00224 REAL, DIMENSION(:,:), POINTER :: PCONDSLD
00225  CHARACTER(LEN=3), INTENT(IN) :: HCPSURF
00226 !
00227 REAL, DIMENSION(:,:,:), INTENT(IN) :: PDG
00228 REAL, DIMENSION(:,:), INTENT(IN) :: PDROOT
00229 REAL, DIMENSION(:,:), INTENT(IN) :: PDG2
00230 REAL, DIMENSION(:,:,:), INTENT(IN) :: PROOTFRAC
00231 REAL, DIMENSION(:,:), POINTER :: PRUNOFFD
00232 REAL, DIMENSION(:,:,:), POINTER :: PDZG
00233 REAL, DIMENSION(:,:,:), POINTER :: PDZDIF
00234 REAL, DIMENSION(:,:,:), POINTER :: PSOILWGHT
00235 INTEGER, DIMENSION(:,:), INTENT(IN) :: KWG_LAYER
00236 INTEGER, INTENT(OUT) :: KLAYER_HORT
00237 INTEGER, INTENT(OUT) :: KLAYER_DUN
00238 !
00239 REAL, DIMENSION(:,:), INTENT(INOUT) :: PD_ICE
00240 REAL, DIMENSION(:,:), POINTER :: PKSAT_ICE
00241 !
00242 REAL, DIMENSION(:), POINTER :: PALBNIR_DRY
00243 REAL, DIMENSION(:), POINTER :: PALBVIS_DRY
00244 REAL, DIMENSION(:), POINTER :: PALBUV_DRY
00245 REAL, DIMENSION(:), POINTER :: PALBNIR_WET
00246 REAL, DIMENSION(:), POINTER :: PALBVIS_WET
00247 REAL, DIMENSION(:), POINTER :: PALBUV_WET
00248 !
00249 REAL, DIMENSION(:,:), POINTER :: PBSLAI_NITRO
00250 REAL, DIMENSIOn(:,:), INTENT(IN) :: PCE_NITRO
00251 REAL, DIMENSIOn(:,:), INTENT(IN) :: PCNA_NITRO
00252 REAL, DIMENSIOn(:,:), INTENT(IN) :: PCF_NITRO
00253 !
00254 !*       0.2   Declarations of local variables
00255 !              -------------------------------
00256 !
00257 INTEGER :: JPATCH  ! loop counter on tiles
00258 INTEGER :: JILU,JP, JMAXLOC    ! loop increment
00259 INTEGER :: JLAYER  ! loop counter on layers
00260 !
00261 INTEGER :: ICH     ! unit of input chemistry file
00262 INTEGER :: ISIZE
00263 !
00264 REAL, DIMENSION(SIZE(PCO2))       :: ZCO2  ! CO2 concentration  (kg/kg)
00265 !
00266 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00267 !
00268 !-------------------------------------------------------------------------------
00269 !
00270 !               Initialisation for IO
00271 !
00272 IF (LHOOK) CALL DR_HOOK('INIT_VEG_PGD_n',0,ZHOOK_HANDLE)
00273 !
00274 !*       2.4    Fraction of each tile
00275 !               ---------------------
00276 !
00277 ALLOCATE(PPATCH         (KI,KPATCH))
00278 ALLOCATE(PVEGTYPE_PATCH (KI,NVEGTYPE,KPATCH))
00279 ALLOCATE(KSIZE_NATURE_P (KPATCH))
00280 ALLOCATE(KR_NATURE_P    (KI,KPATCH))
00281 !
00282  CALL SURF_PATCH(KPATCH,PVEGTYPE,PPATCH,PVEGTYPE_PATCH)
00283 !
00284 !*       2.5    Masks for tiles
00285 !               ---------------
00286 !
00287 IF (PRM_PATCH/=0.) THEN
00288   !
00289   WRITE(KLUOUT,*) " REMOVE PATCH below 5 % add to dominant patch " 
00290   ! remove small fraction of PATCHES and add to MAIN PATCH
00291   DO JP = 1,KI
00292     !1) find most present patch maximum value 
00293     JMAXLOC = MAXVAL(MAXLOC(PPATCH(JP,:)))
00294     !2) FIND small value of cover 
00295     DO JPATCH = 1,KPATCH
00296       IF ( PPATCH(JP,JPATCH)<PRM_PATCH ) THEN
00297         PPATCH(JP,JMAXLOC) = PPATCH(JP,JMAXLOC) + PPATCH(JP,JPATCH)
00298         PPATCH(JP,JPATCH) = 0.0
00299        ENDIF
00300     ENDDO
00301   ENDDO
00302   !
00303 ENDIF
00304 !
00305 DO JPATCH=1,KPATCH
00306   KSIZE_NATURE_P(JPATCH) = COUNT(PPATCH(:,JPATCH) > 0.0)
00307 ENDDO
00308 !
00309 KR_NATURE_P(:,:) = 0
00310 DO JPATCH=1,KPATCH
00311   CALL GET_1D_MASK(KSIZE_NATURE_P(JPATCH),KI,PPATCH(:,JPATCH),KR_NATURE_P(:KSIZE_NATURE_P(JPATCH),JPATCH))
00312 ENDDO
00313 !
00314 !
00315 !*       2.6    Miscellaneous fields for ISBA:
00316 !               -----------------------------
00317 !
00318 !* default value for:
00319 ! lateral water flux, deep soil temperature climatology and its relaxation time-scale
00320 !
00321 ALLOCATE(PTDEEP (KI))
00322 ALLOCATE(PGAMMAT(KI))
00323 PTDEEP (:) = XUNDEF
00324 PGAMMAT(:) = XUNDEF
00325 !
00326 IF (ODEEPSOIL) THEN
00327    DO JILU = 1, KI
00328       PTDEEP (JILU) = PTDEEP_CLI (KMONTH)
00329       PGAMMAT(JILU) = 1. / PGAMMAT_CLI(KMONTH)
00330    END DO
00331    !
00332    WRITE(KLUOUT,*)' LDEEPSOIL = ',ODEEPSOIL,' LPHYSDOMC = ',OPHYSDOMC
00333    WRITE(KLUOUT,*)' XTDEEP    = ',MINVAL(PTDEEP(:)),MAXVAL(PTDEEP(:))
00334    WRITE(KLUOUT,*)' XGAMMAT   = ',MINVAL(PGAMMAT(:)),MAXVAL(PGAMMAT(:))
00335 ENDIF
00336 !
00337 !
00338 !*       2.7    Irrigation
00339 !               ----------
00340 !
00341 IF (OAGRIP) THEN
00342    ALLOCATE(KIRRINUM(KI,KPATCH))
00343    ALLOCATE(OIRRIDAY(KI,KPATCH))
00344    ALLOCATE(OIRRIGATE(KI,KPATCH))
00345    ALLOCATE(PTHRESHOLDSPT(KI,KPATCH))
00346    !
00347    KIRRINUM (:,:) = 1
00348    OIRRIDAY (:,:) = .FALSE.                          
00349    OIRRIGATE(:,:) = .FALSE.                          
00350    !
00351    DO JILU = 1, KI
00352       DO JPATCH = 1, KPATCH
00353          PTHRESHOLDSPT(JILU,JPATCH) = PTHRESHOLD(KIRRINUM(JILU,JPATCH))
00354       END DO
00355    END DO
00356 ELSE
00357    ALLOCATE(KIRRINUM(0,0))
00358    ALLOCATE(OIRRIDAY(0,0))
00359    ALLOCATE(OIRRIGATE(0,0))
00360    ALLOCATE(PTHRESHOLDSPT(0,0))
00361 ENDIF
00362 !
00363 !
00364 !*       2.8    Additional fields for ISBA-AGS:
00365 !               ------------------------------                        
00366 !
00367 IF(HPHOTO /= 'NON' .AND. HINIT == 'ALL') THEN
00368   IF (OTR_ML) THEN
00369     ISIZE = 10
00370   ELSE
00371     ISIZE = 3
00372   ENDIF
00373   ALLOCATE(PABC(ISIZE))
00374   ALLOCATE(PPOI(ISIZE))
00375   PABC(:) = 0.
00376   PPOI(:) = 0.          
00377   ZCO2(:) = PCO2(:) / PRHOA(:)
00378   ALLOCATE(PANMAX        (KI,KPATCH))
00379   ALLOCATE(PFZERO        (KI,KPATCH))
00380   ALLOCATE(PEPSO         (KI,KPATCH))
00381   ALLOCATE(PGAMM         (KI,KPATCH))
00382   ALLOCATE(PQDGAMM       (KI,KPATCH))
00383   ALLOCATE(PQDGMES       (KI,KPATCH))
00384   ALLOCATE(PT1GMES       (KI,KPATCH))
00385   ALLOCATE(PT2GMES       (KI,KPATCH))
00386   ALLOCATE(PAMAX         (KI,KPATCH))
00387   ALLOCATE(PQDAMAX       (KI,KPATCH))
00388   ALLOCATE(PT1AMAX       (KI,KPATCH))
00389   ALLOCATE(PT2AMAX       (KI,KPATCH))
00390   ALLOCATE(PAH           (KI,KPATCH))
00391   ALLOCATE(PBH           (KI,KPATCH))
00392   ALLOCATE(PTAU_WOOD     (KI,KPATCH))
00393   ALLOCATE(PINCREASE     (KI,KNBIOMASS,KPATCH))
00394   ALLOCATE(PTURNOVER     (KI,KNBIOMASS,KPATCH))
00395   CALL CO2_INIT_n(HPHOTO, KSIZE_NATURE_P, KR_NATURE_P, PVEGTYPE_PATCH, &
00396                   ZCO2, PGMES, PGC, PDMAX, PABC, PPOI, PANMAX, &
00397                   PFZERO, PEPSO, PGAMM, PQDGAMM, PQDGMES,      &
00398                   PT1GMES, PT2GMES, PAMAX, PQDAMAX,            &
00399                   PT1AMAX, PT2AMAX, PAH, PBH, PTAU_WOOD,       &
00400                   PINCREASE, PTURNOVER                         )
00401 ELSE
00402   ALLOCATE(PABC(0))
00403   ALLOCATE(PPOI(0))
00404   ALLOCATE(PANMAX        (0,0))
00405   ALLOCATE(PFZERO        (0,0))
00406   ALLOCATE(PEPSO         (0,0))
00407   ALLOCATE(PGAMM         (0,0))
00408   ALLOCATE(PQDGAMM       (0,0))
00409   ALLOCATE(PQDGMES       (0,0))
00410   ALLOCATE(PT1GMES       (0,0))
00411   ALLOCATE(PT2GMES       (0,0))
00412   ALLOCATE(PAMAX         (0,0))
00413   ALLOCATE(PQDAMAX       (0,0))
00414   ALLOCATE(PT1AMAX       (0,0))
00415   ALLOCATE(PT2AMAX       (0,0))
00416   ALLOCATE(PAH           (0,0))
00417   ALLOCATE(PBH           (0,0))
00418   ALLOCATE(PTAU_WOOD     (0,0))
00419   ALLOCATE(PINCREASE     (0,0,0))
00420   ALLOCATE(PTURNOVER     (0,0,0))  
00421 END IF
00422 !
00423 !-------------------------------------------------------------------------------
00424 !
00425 !        3.  Initialize Chemical Deposition
00426 !            ------------------------------
00427 !
00428 !        3.1 Chemical gazes
00429 !            --------------
00430 !
00431  CALL INIT_CHEMICAL_n(KLUOUT, KSV, HSV, KBEQ, HSVO, KAEREQ,           &
00432                      KSV_CHSBEG, KSV_CHSEND, KSV_AERBEG, KSV_AEREND, &
00433                      HCH_NAMES, HAER_NAMES, KDSTEQ, KSV_DSTBEG,      &
00434                      KSV_DSTEND, KSLTEQ, KSV_SLTBEG, KSV_SLTEND,     &
00435                      HDSTNAMES=HDSTNAMES, HSLTNAMES=HSLTNAMES        )
00436 !
00437 IF (KSV /= 0) THEN
00438   !
00439   IF (KBEQ > 0) THEN
00440     CALL OPEN_NAMELIST(HPROGRAM, ICH, HFILE=HCHEM_SURF_FILE)
00441     CALL CH_INIT_DEP_ISBA_n(ICH, KLUOUT, HSVO, KI)
00442     CALL CLOSE_NAMELIST(HPROGRAM, ICH)
00443   END IF
00444   !
00445   IF (KDSTEQ >=1) THEN
00446     ALLOCATE (PSFDST (KI, KDSTEQ, KPATCH))  !Output array
00447     ALLOCATE (PSFDSTM(KI, KDSTEQ, KPATCH))  !Output array
00448     PSFDST(:,:,:)  = 0.
00449     PSFDSTM(:,:,:) = 0.     
00450     CALL INIT_DST(HPROGRAM,KSIZE_NATURE_P,KR_NATURE_P, &
00451                   KPATCH,PVEGTYPE_PATCH)    
00452   ELSE
00453     ALLOCATE(PSFDST (0,0,0))
00454     ALLOCATE(PSFDSTM(0,0,0))
00455   END IF
00456   !
00457   IF (KSLTEQ >=1) THEN
00458     ALLOCATE (PSFSLT(KI,KSLTEQ,KPATCH))  !Output array
00459     CALL INIT_SLT(HPROGRAM)   
00460   ELSE
00461     ALLOCATE(PSFSLT(0,0,0))
00462   END IF
00463   !
00464 ENDIF
00465 !
00466 !-------------------------------------------------------------------------------
00467 !
00468 !*       4.     Orographic roughness length
00469 !               ---------------------------
00470 !
00471 ALLOCATE(PZ0EFFIP(KI,KPATCH))
00472 ALLOCATE(PZ0EFFIM(KI,KPATCH))
00473 ALLOCATE(PZ0EFFJP(KI,KPATCH))
00474 ALLOCATE(PZ0EFFJM(KI,KPATCH))
00475 ALLOCATE(PZ0REL  (KI))
00476 !
00477 IF (SIZE(PAOSIP)>0)                                      &
00478  CALL SUBSCALE_Z0EFF(PAOSIP,PAOSIM,PAOSJP,PAOSJM,         &
00479                     PHO2IP,PHO2IM,PHO2JP,PHO2JM,PZ0,     &
00480                     PZ0EFFIP,PZ0EFFIM,PZ0EFFJP,PZ0EFFJM, &
00481                     PZ0REL                               ) 
00482 !
00483 !-------------------------------------------------------------------------------
00484 !
00485 !*       5.1     Soil hydraulic characteristics:
00486 !                -------------------------------
00487 !
00488 ALLOCATE(PCONDSAT (KI,KGROUND_LAYER,KPATCH))
00489 ALLOCATE(PMPOTSAT (KI,KGROUND_LAYER))
00490 ALLOCATE(PBCOEF   (KI,KGROUND_LAYER))
00491 ALLOCATE(PWWILT   (KI,KGROUND_LAYER)) ! wilting point
00492 ALLOCATE(PWFC     (KI,KGROUND_LAYER)) ! field capacity
00493 ALLOCATE(PWSAT    (KI,KGROUND_LAYER)) ! saturation
00494 ALLOCATE(PTAUICE  (KI))
00495 !        
00496 DO JLAYER=1,KGROUND_LAYER
00497    PBCOEF  (:,JLAYER) = BCOEF_FUNC     (PCLAY(:,JLAYER),PSAND(:,JLAYER),HPEDOTF)
00498    PMPOTSAT(:,JLAYER) = MATPOTSAT_FUNC (PCLAY(:,JLAYER),PSAND(:,JLAYER),HPEDOTF)
00499    DO JPATCH=1,KPATCH
00500       PCONDSAT(:,JLAYER,JPATCH) = HYDCONDSAT_FUNC(PCLAY(:,JLAYER),PSAND(:,JLAYER),HPEDOTF)
00501    ENDDO   
00502    PWSAT (:,JLAYER) = WSAT_FUNC (PCLAY(:,JLAYER),PSAND(:,JLAYER),HPEDOTF)
00503    PWWILT(:,JLAYER) = WWILT_FUNC(PCLAY(:,JLAYER),PSAND(:,JLAYER),HPEDOTF)
00504 END DO
00505 !
00506 IF (HISBA=='2-L' .OR. HISBA=='3-L') THEN
00507   !  field capacity at hydraulic conductivity = 0.1mm/day
00508   PWFC  (:,:) = WFC_FUNC  (PCLAY(:,:),PSAND(:,:),HPEDOTF)
00509 ELSE IF (HISBA=='DIF') THEN
00510   !  field capacity at water potential = 0.33bar        
00511   PWFC  (:,:) = W33_FUNC  (PCLAY(:,:),PSAND(:,:),HPEDOTF)
00512 END IF
00513 !
00514 PTAUICE(:) = XTAU_ICE
00515 !
00516 IF (HISBA=='2-L' .OR. HISBA=='3-L') THEN
00517   ALLOCATE(PCGSAT (KI))
00518   ALLOCATE(PC1SAT (KI,KPATCH))
00519   ALLOCATE(PC2REF (KI,KPATCH))
00520   ALLOCATE(PC3    (KI,2,KPATCH))
00521   ALLOCATE(PC4B   (KI))
00522   ALLOCATE(PACOEF (KI))
00523   ALLOCATE(PPCOEF (KI))
00524   ALLOCATE(PC4REF (KI,KPATCH))
00525   PCGSAT(:)  = CGSAT_FUNC(PCLAY(:,1),PSAND(:,1))
00526   PC4B(:)    = C4B_FUNC(PCLAY(:,1))
00527   !
00528   PACOEF(:)  = ACOEF_FUNC(PCLAY(:,1))
00529   PPCOEF(:)  = PCOEF_FUNC(PCLAY(:,1))
00530   !
00531   DO JPATCH=1,KPATCH
00532     PC1SAT(:,JPATCH) = C1SAT_FUNC(PCLAY(:,1))
00533     PC2REF(:,JPATCH) = C2REF_FUNC(PCLAY(:,1))         
00534     PC4REF(:,JPATCH) = C4REF_FUNC(PCLAY(:,1),PSAND(:,1),       &
00535                                   PDG(:,2,            JPATCH), &
00536                                   PDG(:,KGROUND_LAYER,JPATCH)  )
00537     PC3     (:,1,JPATCH) = C3_FUNC(PCLAY(:,1))
00538     PC3     (:,2,JPATCH) = C3_FUNC(PCLAY(:,2))
00539 
00540   END DO
00541   !
00542 ELSE IF (HISBA=='DIF') THEN
00543   !
00544   ALLOCATE(PCGSAT (0))
00545   ALLOCATE(PC1SAT (0,0))
00546   ALLOCATE(PC2REF (0,0))
00547   ALLOCATE(PC3    (0,0,0))
00548   ALLOCATE(PC4B   (0))
00549   ALLOCATE(PC4REF (0,0))
00550   ALLOCATE(PACOEF (0))
00551   ALLOCATE(PPCOEF (0))
00552   !
00553 END IF
00554 !
00555 !*       5.2     Soil thermal characteristics:
00556 !               --------------------------------
00557 !
00558 ALLOCATE(PPCPS (KI,KPATCH))
00559 ALLOCATE(PPLVTT(KI,KPATCH))
00560 ALLOCATE(PPLSTT(KI,KPATCH))
00561 PPCPS (:,:) = XCPD
00562 PPLVTT(:,:) = XLVTT
00563 PPLSTT(:,:) = XLSTT
00564 !
00565 !CSCOND used in soil.F90 and soildif.F90
00566 IF (HSCOND=='PL98'.OR.HISBA=='DIF') THEN
00567   ALLOCATE(PHCAPSOIL(KI,KGROUND_LAYER))
00568   ! 
00569   CALL HEATCAPZ(PSAND,PWSAT,PHCAPSOIL)
00570   !
00571   IF (HSCOND=='PL98') THEN
00572     !
00573     ALLOCATE(PCONDDRY (KI,KGROUND_LAYER))
00574     ALLOCATE(PCONDSLD (KI,KGROUND_LAYER))
00575     ! 
00576     CALL THRMCONDZ(PSAND,PWSAT,PCONDDRY,PCONDSLD)
00577     !
00578   ELSE
00579     !
00580     ALLOCATE(PCONDDRY (0,0))
00581     ALLOCATE(PCONDSLD (0,0))
00582     !
00583   ENDIF
00584   !
00585 ELSE
00586   ALLOCATE(PHCAPSOIL(0,0))
00587   ALLOCATE(PCONDDRY (0,0))
00588   ALLOCATE(PCONDSLD (0,0))
00589 END IF
00590 !
00591 !-------------------------------------------------------------------------------
00592 !CPSURF used in drag.F90
00593 !CPL_ARP used in drag.F90 and e_budget.F90
00594 IF(HCPSURF=='DRY'.AND.LCPL_ARP) THEN
00595   CALL ABOR1_SFX('CCPSURF=DRY must not be used with LCPL_ARP')
00596 ENDIF
00597 !
00598 !*       6.1    Initialize hydrology
00599 !               --------------------
00600 !
00601 ALLOCATE(PRUNOFFD (KI,KPATCH))
00602 PRUNOFFD(:,:)=XUNDEF
00603 !
00604 IF (HISBA == 'DIF') THEN
00605 !  
00606   ALLOCATE(PDZG       (KI,KGROUND_LAYER,KPATCH))
00607   ALLOCATE(PDZDIF     (KI,KGROUND_LAYER,KPATCH))
00608   ALLOCATE(PSOILWGHT  (KI,KGROUND_LAYER,KPATCH))
00609   CALL DIF_LAYER(KI, KGROUND_LAYER, KPATCH, KSIZE_NATURE_P, &
00610                  PPATCH, PDG, PDROOT, PDG2, PROOTFRAC,      &
00611                  KWG_LAYER, PDZG, PDZDIF, PSOILWGHT,        &
00612                  PRUNOFFD, KLAYER_HORT, KLAYER_DUN  )
00613 !
00614 ELSE
00615 !    
00616   ALLOCATE(PDZG       (0,0,0))
00617   ALLOCATE(PDZDIF     (0,0,0))
00618   ALLOCATE(PSOILWGHT  (0,0,0))
00619   DO JPATCH=1,KPATCH
00620     WHERE(PPATCH(:,JPATCH)>0.0)
00621       PRUNOFFD(:,JPATCH) = PDG(:,2,JPATCH)
00622     ENDWHERE
00623   END DO
00624 !  
00625   KLAYER_DUN=2
00626   KLAYER_HORT=2
00627 !   
00628 ENDIF
00629 !
00630 !Horton (also used by the flooding sheme)
00631 ! 
00632 ALLOCATE(PKSAT_ICE(KI,KPATCH))
00633 !
00634 IF(HISBA/='DIF')THEN
00635   PD_ICE   (:,:)=MIN(PDG(:,2,:),PD_ICE(:,:))
00636   PD_ICE   (:,:)=MAX(XICE_DEPH_MAX,PD_ICE(:,:))
00637   PKSAT_ICE(:,:)=PCONDSAT(:,1,:)
00638 ELSE
00639   PD_ICE   (:,:)=0.0
00640   PKSAT_ICE(:,:)=0.0
00641 ENDIF
00642 !
00643 !-------------------------------------------------------------------------------
00644 !
00645 !*       8.     Physiographic Radiative fields:  
00646 !               ------------------------------
00647 !
00648 !
00649 !* dry and wet bare soil albedos
00650 !
00651 ALLOCATE(PALBNIR_DRY  (KI))
00652 ALLOCATE(PALBVIS_DRY  (KI))
00653 ALLOCATE(PALBUV_DRY   (KI))
00654 ALLOCATE(PALBNIR_WET  (KI))
00655 ALLOCATE(PALBVIS_WET  (KI))
00656 ALLOCATE(PALBUV_WET   (KI))
00657 !
00658  CALL DRY_WET_SOIL_ALBEDOS(PSAND(:,1),PCLAY(:,1),                 &
00659                           PVEGTYPE,                              &
00660                           PALBNIR_DRY,PALBVIS_DRY,PALBUV_DRY,    &
00661                           PALBNIR_WET,PALBVIS_WET,PALBUV_WET     )  
00662 !
00663 !
00664 !
00665 !*       2.9    Nitrogen version for isbaAgs
00666 !               ------------------------------                        
00667 !
00668 IF (HPHOTO=='NIT' .OR. HPHOTO=='NCB') THEN
00669   ALLOCATE(PBSLAI_NITRO            (KI,KPATCH              ))
00670   WHERE ((PCE_NITRO (:,:)*PCNA_NITRO(:,:)+PCF_NITRO (:,:)) /= 0. )
00671       PBSLAI_NITRO(:,:) = 1. / (PCE_NITRO (:,:)*PCNA_NITRO(:,:)+PCF_NITRO (:,:))
00672   ELSEWHERE
00673       PBSLAI_NITRO(:,:) = XUNDEF
00674   ENDWHERE
00675 ELSE
00676   ALLOCATE(PBSLAI_NITRO (0,0))
00677 ENDIF
00678 !
00679 IF (LHOOK) CALL DR_HOOK('INIT_VEG_PGD_n',1,ZHOOK_HANDLE)
00680 !
00681 END SUBROUTINE INIT_VEG_PGD_n