Newer
Older
!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!#############################################################
SUBROUTINE INIT_ISBA_n (DTCO, OREAD_BUDGETC, UG, U, USS, GCP, IM, DTZ,&
NDST, SLT, BLOWSNW, SV, HPROGRAM, HINIT, &
OLAND_USE, &
KI, KSV, KSW, HSV, PCO2, PRHOA, PZENITH, &
PAZIM, PSW_BANDS, PDIR_ALB, PSCA_ALB, PEMIS, &
PTSRAD, PTSURF, PMEGAN_FIELDS, KYEAR, KMONTH, &
KDAY, PTIME, TPDATE_END, HATMFILE, HATMFILETYPE, HTEST )
!#############################################################
!
!!**** *INIT_ISBA_n* - routine to initialize ISBA
!!
!! PURPOSE
!! -------
!!
!!** METHOD
!! ------
!!
!! EXTERNAL
!! --------
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! MODIFICATIONS
!! -------------
!! Original 01/2004
!! Modified by P. Le Moigne (11/2004): miscellaneous diagnostics
!! Modified by P. Le Moigne (06/2006): seeding and irrigation
!! Modified by B. Decharme (2008) : SGH and Flooding scheme
!! Modified by B. Decharme (01/2009): optional deep soil temperature as in Arpege
!! Modified by R. Hamdi (01/2009): Cp and L
!! Modified by B. Decharme (06/2009): read topographic index statistics
!! Modified by P. Le Moigne (01/2009): Beljaars sso
!! Modified by B. Decharme (08/2009): Active Trip coupling variable if Earth System Model
!! A.L. Gibelin 04/09 : change BSLAI_NITRO initialisation
!! A.L. Gibelin 04/09 : modifications for CENTURY model
!! A.L. Gibelin 06/09 : soil carbon initialisation
!! B. Decharme 07/11 : read pgd+prep
!! R. Alkama 05/12 : new carbon spinup
!! J.Escobar 11/13 : add USE MODI_DEFAULT_CROCUS
!! B. Decharme 04/2013 new coupling variables
!! P. Samuelsson 10/14 : MEB
!! P. Wautelet 16/02/2018: bug correction: allocate some work arrays to 0,1,1 instead of 0,0,1 (crash with XLF)
!! V.VIonnet 2017 : Blow snow
!! P.Tulet 06/16 : add MEGAN coupling

Juan Escobar
committed
!! J.Pianezzej 02/2019 : correction for use of MEGAN
! P. Wautelet 21/11/2019: initialize YSNOW_SCHEME

RODIER Quentin
committed
! S. Donnier 02/2020 : correction for ECOCLIMAP SG (20 vegtypes possible)
!!
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_SURFEX_n, ONLY : ISBA_MODEL_t
!
USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
USE MODD_SSO_n, ONLY : SSO_t
USE MODD_GRID_CONF_PROJ_n, ONLY : GRID_CONF_PROJ_t
USE MODD_SLT_n, ONLY : SLT_t
USE MODD_SV_n, ONLY : SV_t
USE MODD_BLOWSNW_n, ONLY : BLOWSNW_t
!
USE MODD_DATA_COVER, ONLY : XDATA_LAI, XDATA_H_TREE, &
XDATA_ALBNIR_VEG, XDATA_ALBVIS_VEG, &
XDATA_ALBUV_VEG, XDATA_RSMIN, &
XDATA_ROOT_EXTINCTION,XDATA_ROOT_LIN, &
XDATA_RGL, XDATA_CV, XDATA_GAMMA, XDATA_GMES, &
XDATA_GC, XDATA_BSLAI, XDATA_SEFOLD, XDATA_LAIMIN,&
XDATA_DMAX, XDATA_STRESS, XDATA_F2I, &
XDATA_VEG, XDATA_GREEN, XDATA_Z0, XDATA_Z0_O_Z0H, &
XDATA_EMIS_ECO, XDATA_WRMAX_CF, &
XDATA_CE_NITRO,XDATA_CF_NITRO,XDATA_CNA_NITRO, &
XDATA_SOILRC_SO2, XDATA_SOILRC_O3, XDATA_RE25, &
XDATA_GMES_ST, XDATA_BSLAI_ST, XDATA_SEFOLD_ST, &
XDATA_GC_ST, XDATA_DMAX_ST
!
USE MODD_WRITE_SURF_ATM, ONLY : LSPLIT_PATCH
USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF
USE MODD_AGRI, ONLY : LAGRIP
!
USE MODE_TARTES, ONLY : INIT_TARTES
USE MODE_SNOWCRO_FLANNER, ONLY : READ_FZ06
!
USE MODD_READ_NAMELIST, ONLY : LNAM_READ
!
USE MODD_CO2V_PAR, ONLY : XMCO2, XSPIN_CO2
USE MODD_CSTS, ONLY : XMD
!
USE MODI_INIT_IO_SURF_n
!
USE MODI_GET_LUOUT
USE MODI_ABOR1_SFX
USE MODI_DEFAULT_ISBA
USE MODI_DEFAULT_CH_DEP
USE MODI_DEFAULT_CH_BIO_FLUX
USE MODI_DEFAULT_DIAG_ISBA
USE MODI_READ_DEFAULT_ISBA_n
USE MODI_READ_ISBA_CONF_n
USE MODI_READ_PREP_ISBA_SNOW
USE MODI_READ_PREP_ISBA_CARBON
USE MODI_READ_SURF
USE MODI_PREP_CTRL_ISBA
USE MODI_READ_ISBA_DATE
USE MODI_READ_PGD_ISBA_n
USE MODI_COMPUTE_ISBA_PARAMETERS
USE MODI_READ_NAM_PREP_ISBA_n
!
USE MODI_SET_SURFEX_FILEIN
!
USE MODI_END_IO_SURF_n
!
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
USE PARKIND1 ,ONLY : JPRB
!
IMPLICIT NONE
!
!* 0.1 Declarations of arguments
! -------------------------
!
!
TYPE(DATA_COVER_t), INTENT(INOUT) :: DTCO
TYPE(SURF_ATM_GRID_t), INTENT(INOUT) :: UG
TYPE(SURF_ATM_t), INTENT(INOUT) :: U
TYPE(SSO_t), INTENT(INOUT) :: USS
TYPE(GRID_CONF_PROJ_t),INTENT(INOUT) :: GCP
!
TYPE(ISBA_MODEL_t), INTENT(INOUT) :: IM
!
TYPE(BLOWSNW_t), INTENT(INOUT) :: BLOWSNW
!
CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
CHARACTER(LEN=3), INTENT(IN) :: HINIT ! choice of fields to initialize
LOGICAL, INTENT(IN) :: OLAND_USE !
INTEGER, INTENT(IN) :: KI ! number of points
INTEGER, INTENT(IN) :: KSV ! number of scalars
INTEGER, INTENT(IN) :: KSW ! number of short-wave spectral bands
CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN) :: HSV ! name of all scalar variables
REAL, DIMENSION(KI), INTENT(IN) :: PCO2 ! CO2 concentration (kg/m3)
REAL, DIMENSION(KI), INTENT(IN) :: PRHOA ! air density
REAL, DIMENSION(KI), INTENT(IN) :: PZENITH ! solar zenithal angle
REAL, DIMENSION(KI), INTENT(IN) :: PAZIM ! solar azimuthal angle (rad from N, clock)
REAL, DIMENSION(KSW), INTENT(IN) :: PSW_BANDS ! middle wavelength of each band
REAL, DIMENSION(KI,IM%MSF%NMEGAN_NBR),INTENT(IN) :: PMEGAN_FIELDS
REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB ! direct albedo for each band
REAL, DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB ! diffuse albedo for each band
REAL, DIMENSION(KI), INTENT(OUT) :: PEMIS ! emissivity
REAL, DIMENSION(KI), INTENT(OUT) :: PTSRAD ! radiative temperature
REAL, DIMENSION(KI), INTENT(OUT) :: PTSURF ! surface effective temperature (K)
!
INTEGER, INTENT(IN) :: KYEAR ! current year (UTC)
INTEGER, INTENT(IN) :: KMONTH ! current month (UTC)
INTEGER, INTENT(IN) :: KDAY ! current day (UTC)
REAL, INTENT(IN) :: PTIME ! current time since
! midnight (UTC, s)
TYPE(DATE), INTENT(INOUT) :: TPDATE_END
!
CHARACTER(LEN=28), INTENT(IN) :: HATMFILE ! atmospheric file name
CHARACTER(LEN=6), INTENT(IN) :: HATMFILETYPE! atmospheric file type
CHARACTER(LEN=2), INTENT(IN) :: HTEST ! must be equal to 'OK'
!
!
!* 0.2 Declarations of local variables
! -------------------------------
!
REAL, DIMENSION(KI) :: ZCO2 ! CO2 concentration (kg/m3)
REAL :: ZSPINCO2
INTEGER :: ISPINEND
INTEGER :: ILUOUT ! unit of output listing file
INTEGER :: IVERSION ! surface version
INTEGER :: IRESP ! return code
INTEGER :: ISIZE_LMEB_PATCH ! Number of patches where multi-energy balance should be applied
!
CHARACTER(LEN=3) :: YSNOW_SCHEME
INTEGER :: ISNOW_NLAYER, JP
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
!-------------------------------------------------------------------------------
!
! Initialisation for IO
!
!
IF (LHOOK) CALL DR_HOOK('INIT_ISBA_N',0,ZHOOK_HANDLE)
CALL GET_LUOUT(HPROGRAM,ILUOUT)
!
IF (HTEST/='OK') THEN
CALL ABOR1_SFX('INIT_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
END IF
!
! Other little things
!
IF (LNAM_READ) THEN
!
!* 0. Defaults
! --------
! 0.1. Hard defaults
!
CALL DEFAULT_ISBA(IM%O%XTSTEP, IM%O%XOUT_TSTEP, &
IM%O%CRUNOFF, IM%O%CSCOND, &
IM%O%CC1DRY, IM%O%CSOILFRZ, IM%O%CDIFSFCOND, IM%O%CSNOWRES, &
IM%O%CCPSURF, IM%O%XCGMAX, IM%O%XCDRAG, IM%O%CKSAT, IM%O%LSOC, &
IM%O%CRAIN, IM%O%CHORT, IM%O%LGLACIER, IM%O%LCANOPY_DRAG, &
IM%O%LVEGUPD, IM%O%LSPINUPCARBS, IM%O%LSPINUPCARBW, &
IM%O%XSPINMAXS, IM%O%XSPINMAXW, IM%O%XCO2_START, IM%O%XCO2_END, &
IM%O%NNBYEARSPINS, IM%O%NNBYEARSPINW, IM%O%LNITRO_DILU )

Juan Escobar
committed
CALL DEFAULT_CH_BIO_FLUX(IM%CHI%LCH_BIO_FLUX,PDAILYPAR=IM%MGN%XDAILYPAR,PDAILYTEMP=IM%MGN%XDAILYTEMP)
CALL DEFAULT_DIAG_ISBA(IM%ID%O%N2M, IM%ID%O%LSURF_BUDGET, IM%ID%O%L2M_MIN_ZS, IM%ID%O%LRAD_BUDGET, &
IM%ID%O%LCOEF, IM%ID%O%LSURF_VARS, IM%ID%DE%LSURF_EVAP_BUDGET, &
IM%ID%DM%LSURF_MISC_BUDGET, IM%ID%DM%LSURF_DIAG_ALBEDO, &
IM%ID%O%LSURF_BUDGETC, IM%ID%DM%LSURF_MISC_DIF, IM%ID%O%LPATCH_BUDGET, &
IM%ID%O%LPGD, IM%ID%O%LRESET_BUDGETC, IM%ID%DE%LWATER_BUDGET, &
IM%ID%DM%LPROSNOW,IM%ID%DM%LVOLUMETRIC_SNOWLIQ,IM%ID%O%XDIAG_TSTEP )
CALL DEFAULT_CROCUS(IM%O%LSNOWDRIFT, IM%O%LSNOWDRIFT_SUBLIM, IM%O%LSNOW_ABS_ZENITH, &
IM%O%CSNOWMETAMO, IM%O%CSNOWRAD)
!
ENDIF
!
! 0.2. Defaults from file header
!
CALL READ_DEFAULT_ISBA_n(IM%CHI, IM%MGN, IM%ID%DE, IM%ID%O, IM%ID%DM, IM%O, HPROGRAM)
CALL READ_ISBA_CONF_n(IM%CHI, IM%MGN, IM%ID%DE, IM%ID%O, IM%ID%DM, IM%O, HPROGRAM)
CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'FULL ','ISBA ','READ ')
CALL READ_SURF(HPROGRAM,'VERSION',IVERSION,IRESP)
!
!* 1. Reading of configuration:
! -------------------------
!
!* initialization of snow and carbon schemes
!
IM%O%NNBYEARSOLD = 1
IM%O%NSPINS = 1
IM%O%NSPINW = 1
YSNOW_SCHEME=' '
!
CALL READ_PREP_ISBA_SNOW(HPROGRAM,YSNOW_SCHEME,ISNOW_NLAYER)
!
!* initialization of soil carbon scheme
!
CALL READ_PREP_ISBA_CARBON(HPROGRAM,IM%O%CRESPSL)
IF (IM%O%CRESPSL=='CNT') THEN
IM%O%NNLITTER = 2
IM%O%NNLITTLEVS = 2
IM%O%NNSOILCARB = 3
IM%O%NNLITTER = 0
IM%O%NNLITTLEVS = 0
IM%O%NNSOILCARB = 0
ENDIF
ELSEIF (HINIT=='ALL') THEN
!
CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'NATURE','ISBA ','READ ')
!
CALL READ_SURF(HPROGRAM,'RESPSL',IM%O%CRESPSL,IRESP)
CALL READ_SURF(HPROGRAM,'NLITTER',IM%O%NNLITTER,IRESP)
CALL READ_SURF(HPROGRAM,'NLITTLEVS',IM%O%NNLITTLEVS,IRESP)
CALL READ_SURF(HPROGRAM,'NSOILCARB',IM%O%NNSOILCARB,IRESP)
IF(IVERSION>=7.AND.(IM%O%LSPINUPCARBS.OR.IM%O%LSPINUPCARBW))THEN
CALL READ_SURF(HPROGRAM,'NBYEARSOLD',IM%O%NNBYEARSOLD,IRESP)
IF (IM%O%CISBA/="DIF") THEN
IM%O%NLAYER_DUN = 2
IM%O%NLAYER_HORT = 2
ENDIF
!
!-------------------------------------------------------------------------------
!
!* 2. Physiographic fields
! --------------------
!
!
!* date
!
SELECT CASE (HINIT)
CASE ('PGD')
IM%S%TTIME%TDATE%YEAR = NUNDEF
IM%S%TTIME%TDATE%MONTH= NUNDEF
IM%S%TTIME%TDATE%DAY = NUNDEF
IM%S%TTIME%TIME = XUNDEF
CALL PREP_CTRL_ISBA(IM%ID%O, IM%ID%DE%LSURF_EVAP_BUDGET, IM%ID%DM%LSURF_MISC_BUDGET, &
IM%ID%DM%LSURF_MISC_DIF, ILUOUT)
IF (LNAM_READ) CALL READ_NAM_PREP_ISBA_n(HPROGRAM)
CALL READ_ISBA_DATE(HPROGRAM, HINIT, ILUOUT, HATMFILE, HATMFILETYPE, KYEAR, KMONTH, KDAY, PTIME, IM%S%TTIME)
TPDATE_END = IM%S%TTIME%TDATE
CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'FULL ','SURF ','READ ')
CALL READ_SURF(HPROGRAM,'DTCUR',IM%S%TTIME,IRESP)
CALL END_IO_SURF_n(HPROGRAM)
END SELECT
!
!-----------------------------------------------------------------------------------------------------
! READ PGD FILE
!-----------------------------------------------------------------------------------------------------
!
! initialization for I/O
!
CALL SET_SURFEX_FILEIN(HPROGRAM,'PGD ') ! change input file name to pgd name
CALL INIT_IO_SURF_n(DTCO, U, HPROGRAM,'NATURE','ISBA ','READ ')
!
!
!* 2.1 Cover, soil and orographic fields:
! ---------------------------------
!
CALL READ_PGD_ISBA_n(IM%CHI, DTCO, IM%DTV, DTZ, IM%GB, IM%G, IM%ISS, IM%O, IM%S, IM%K, &
UG, U, USS, GCP, SV, HPROGRAM, OLAND_USE, TPDATE_END)
!
IF (HINIT=='PRE') THEN
DO JP = 1,IM%O%NPATCH
IM%NPE%AL(JP)%TSNOW%SCHEME = YSNOW_SCHEME
IM%NPE%AL(JP)%TSNOW%NLAYER = ISNOW_NLAYER
ENDDO
ENDIF
ISIZE_LMEB_PATCH=COUNT(IM%O%LMEB_PATCH(:))
!
!
!* 2.2 Check:
! ------
!

RODIER Quentin
committed
! modif ECOSG
!IF ( IM%O%CPHOTO/='NON' .AND. IM%O%NPATCH/=12 .AND. IM%O%NPATCH/=19 )THEN
IF ( IM%O%CPHOTO/='NON' .AND. IM%O%NPATCH/=12 .AND. IM%O%NPATCH/=19 .AND. IM%O%NPATCH/=20 )THEN
! fin modif ECOSG
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND NPATCH')
ENDIF
!
IF (HINIT=='PRE' .AND. YSNOW_SCHEME.NE.'3-L' .AND. YSNOW_SCHEME.NE.'CRO' .AND. IM%O%CISBA=='DIF') THEN
CALL ABOR1_SFX("INIT_ISBAN: WITH CISBA = DIF, CSNOW MUST BE 3-L OR CRO")
ENDIF
IF ( IM%O%CPHOTO/='NIT' .AND. IM%O%CPHOTO/='NCB' .AND. LAGRIP) THEN
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LAGRIP')
ENDIF
IF ( IM%O%CPHOTO/='NCB' .AND. IM%O%CRESPSL=='CNT') THEN
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND CRESPSL')
ENDIF
IF (HINIT=='PRE' .AND. ISIZE_LMEB_PATCH>0 .AND. YSNOW_SCHEME.NE.'3-L' .AND. YSNOW_SCHEME.NE.'CRO') THEN
CALL ABOR1_SFX("INIT_ISBAN: WITH LMEB_PATCH = TRUE, CSNOW MUST BE 3-L OR CRO")
ENDIF
IF(IM%O%CPHOTO/='NCB'.AND.IM%O%LSPINUPCARBW)THEN
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LSPINUPCARBW (if not NCB must be false)')
ENDIF
IF(IM%O%CRESPSL/='CNT'.AND.IM%O%LSPINUPCARBS)THEN
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CRESPSL AND LSPINUPCARBS (if not CNT must be false)')
ENDIF
IF(IM%O%LSPINUPCARBW.AND.REAL(IM%O%NNBYEARSPINW)>REAL(IM%O%NNBYEARSPINS)*0.5)THEN
WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
WRITE(ILUOUT,*)'INIT_ISBAN: INCONSISTENCY BETWEEN NNBYEARSPINW AND NNBYEARSPINS'
WRITE(ILUOUT,*)'NNBYEARSPINW MUST BE < TO 0.5 * NNBYEARSPINS'
WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN NNBYEARSPINW AND NNBYEARSPINS')
ENDIF
IF(IM%O%LSPINUPCARBS.AND.(IM%O%XCO2_START==XUNDEF.OR.IM%O%XCO2_END==XUNDEF))THEN
WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
WRITE(ILUOUT,*)'INIT_ISBAN: INCONSISTENCY BETWEEN LSPINUPCARBS AND XCO2_START OR XCO2_END'
WRITE(ILUOUT,*)'FOR ISBA-CC SPINUP XCO2_START AND XCO2_END MUST BE DEFINED'
WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN LSPINUPCARBS AND XCO2_START OR XCO2_END')
ENDIF
!
CALL END_IO_SURF_n(HPROGRAM)
CALL SET_SURFEX_FILEIN(HPROGRAM,'PREP') ! restore input file name
!
!-------------------------------------------------------------------------------
!
! During soil carbon spinup with ISBA-CC:
! (1) grass parameters are attributed to all agricultural PFT with atmospheric CO2 concentration
! fixed to Pre-industrial CO2 consentration XCO2_START
! (2) Atmospheric CO2 concentration rampin up from XCO2_START to XCO2_END
!
ISPINEND=IM%O%NNBYEARSPINS-NINT(IM%O%NNBYEARSPINS*XSPIN_CO2)
IF ( IM%O%LSPINUPCARBS .AND. (IM%O%NNBYEARSOLD <= ISPINEND) ) THEN
CALL INI_DATA_PARAM(PH_TREE=XDATA_H_TREE,PLAI=XDATA_LAI, &
PALBNIR_VEG=XDATA_ALBNIR_VEG, PALBVIS_VEG=XDATA_ALBVIS_VEG, &
PALBUV_VEG=XDATA_ALBUV_VEG, PRSMIN=XDATA_RSMIN, &
PRGL=XDATA_RGL, PCV=XDATA_CV, PGAMMA=XDATA_GAMMA, &
PGMES=XDATA_GMES, PGC=XDATA_GC, PBSLAI=XDATA_BSLAI, &
PSEFOLD=XDATA_SEFOLD, PLAIMIN_OUT=XDATA_LAIMIN, PDMAX=XDATA_DMAX, &
PSTRESS=XDATA_STRESS, PF2I=XDATA_F2I, PVEG_OUT=XDATA_VEG, &
PGREEN=XDATA_GREEN, PZ0=XDATA_Z0, PZ0_O_Z0H=XDATA_Z0_O_Z0H, &
PEMIS_ECO=XDATA_EMIS_ECO, PWRMAX_CF=XDATA_WRMAX_CF, &
PROOT_LIN=XDATA_ROOT_LIN, PROOT_EXTINCTION=XDATA_ROOT_EXTINCTION, &
PSOILRC_SO2=XDATA_SOILRC_SO2, PSOILRC_O3=XDATA_SOILRC_O3, PRE25=XDATA_RE25, &
PCE_NITRO=XDATA_CE_NITRO,PCF_NITRO=XDATA_CF_NITRO,PCNA_NITRO=XDATA_CNA_NITRO, &
PGMES_ST=XDATA_GMES_ST, PGC_ST=XDATA_GC_ST, PBSLAI_ST=XDATA_BSLAI_ST, &
PSEFOLD_ST=XDATA_SEFOLD_ST, PDMAX_ST=XDATA_DMAX_ST, OAGRI_TO_GRASS=IM%O%LAGRI_TO_GRASS)
ZCO2(:) = PRHOA(:) * IM%O%XCO2_START * 1.E-6 * XMCO2 / XMD
ELSEIF(IM%O%LSPINUPCARBS .AND. (IM%O%NNBYEARSOLD > ISPINEND) .AND. (IM%O%NNBYEARSOLD <= IM%O%NNBYEARSPINS) )THEN
ZSPINCO2 = IM%O%XCO2_START + (IM%O%XCO2_END-IM%O%XCO2_START) * REAL(IM%O%NNBYEARSOLD - ISPINEND) / &
REAL(IM%O%NNBYEARSPINS - ISPINEND)
!
ZCO2(:) = PRHOA(:) * ZSPINCO2 * 1.E-6 * XMCO2 / XMD
!
ELSE
!
ZCO2(:) = PCO2(:)
!
ENDIF
!
!-----------------------------------------------------------------------------------------------------
! END READ PGD FILE
!-----------------------------------------------------------------------------------------------------
!
!-----------------------------------------------------------------------------------------------------
! Make sure some diags are conputed when coupled with atmosphere
!-----------------------------------------------------------------------------------------------------
!
IF(LCPL_GCM.AND.IM%ID%O%LSURF_BUDGET) THEN
IM%ID%DE%LSURF_EVAP_BUDGET=.TRUE.
ENDIF
!
!-----------------------------------------------------------------------------------------------------
!
IF (OLAND_USE .OR. HINIT=='PGD') THEN
IF (LHOOK) CALL DR_HOOK('INIT_ISBA_N',1,ZHOOK_HANDLE)
CALL COMPUTE_ISBA_PARAMETERS(DTCO, OREAD_BUDGETC, UG, U, &
IM%O, IM%DTV, IM%SB, IM%S, IM%G, IM%K, IM%NK, &
IM%NG, IM%NP, IM%NPE, IM%NAG, IM%NISS, IM%ISS, &
IM%NCHI, IM%CHI, IM%MGN, IM%MSF, IM%ID, IM%GB, &
IM%NGB, NDST, SLT,BLOWSNW, SV, HPROGRAM,HINIT, &
OLAND_USE,KI,KSV,KSW, HSV,ZCO2,PRHOA, &
PZENITH,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
PEMIS,PTSRAD,PTSURF,PMEGAN_FIELDS, HTEST )
CALL READ_FZ06('drdt_bst_fit_60.nc')
ENDIF
!
IF ( IM%O%CSNOWRAD=="TAR" .OR. IM%O%CSNOWRAD=="TA1" .OR. IM%O%CSNOWRAD=="TA2" ) THEN
IF (HINIT=='ALL') THEN
YSNOW_SCHEME = IM%NPE%AL(1)%TSNOW%SCHEME
ISNOW_NLAYER = IM%NPE%AL(1)%TSNOW%NLAYER
ENDIF
!
IF (.NOT.LSPLIT_PATCH) THEN
ALLOCATE(IM%S%XWORK_WR(KI,IM%O%NPATCH))
IM%S%XWORK_WR(:,:) = XUNDEF
ALLOCATE(IM%S%XWSN_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
ALLOCATE(IM%S%XRHO_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
ALLOCATE(IM%S%XALB_WR(KI,IM%O%NPATCH))
IF (YSNOW_SCHEME=='3-L' .OR. YSNOW_SCHEME=='CRO') THEN
ALLOCATE(IM%S%XHEA_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
ALLOCATE(IM%S%XAGE_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
IF (YSNOW_SCHEME=='CRO') THEN
ALLOCATE(IM%S%XSG1_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
ALLOCATE(IM%S%XSG2_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
ALLOCATE(IM%S%XHIS_WR(KI,ISNOW_NLAYER,IM%O%NPATCH))
ELSE

WAUTELET Philippe
committed
ALLOCATE(IM%S%XSG1_WR(0,1,1))
ALLOCATE(IM%S%XSG2_WR(0,1,1))
ALLOCATE(IM%S%XHIS_WR(0,1,1))

WAUTELET Philippe
committed
ALLOCATE(IM%S%XHEA_WR(0,1,1))
ALLOCATE(IM%S%XAGE_WR(0,1,1))
ENDIF
ALLOCATE(IM%S%TDATE_WR(KI,IM%O%NPATCH))
ELSE
ALLOCATE(IM%S%XWORK_WR(0,1))

WAUTELET Philippe
committed
ALLOCATE(IM%S%XWSN_WR(0,1,1))
ALLOCATE(IM%S%XRHO_WR(0,1,1))

WAUTELET Philippe
committed
ALLOCATE(IM%S%XHEA_WR(0,1,1))
ALLOCATE(IM%S%XAGE_WR(0,1,1))
ALLOCATE(IM%S%XSG1_WR(0,1,1))
ALLOCATE(IM%S%XSG2_WR(0,1,1))
ALLOCATE(IM%S%XHIS_WR(0,1,1))
ALLOCATE(IM%S%TDATE_WR(0,1))
ENDIF
!
IF (LHOOK) CALL DR_HOOK('INIT_ISBA_N',1,ZHOOK_HANDLE)
!
END SUBROUTINE INIT_ISBA_n