Skip to content
Snippets Groups Projects
modn_isban.F90 14.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • !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
    
    !SFX_LIC for details. version 1.
    
    !##################
    MODULE MODN_ISBA_n
    !##################
    !
    !!****  *MODN_ISBA_n* - declaration of namelist NAM_ISBA_n
    !!
    !!    PURPOSE
    !!    -------
    !       The purpose of this module is to specify  the namelist NAM_ISBA_n
    !     which concern the surface configuration of one nested  model.
    !
    !!
    !!**  IMPLICIT ARGUMENTS
    !!    ------------------
    !!
    !!    REFERENCE
    !!    ---------
    !!
    !!       
    !!    AUTHOR
    !!    ------
    
    !!      V. Masson    *Meteo France*
    
    !!
    !!    MODIFICATIONS
    !!    -------------
    
    !!      Modified    08/2009 by B. Decharme : LSURF_BUDGETC for all tiles
    !!      Modified by A.L. Gibelin, 04/2009: add carbon spinup
    
    !!      P. Tulet & M. Leriche 06/2017 : coupling megan online
    
    !!      P. Wautelet 01/2019: initialize XDROUGHT, XDAILYPAR, XDAILYTEMP, XMODPREC to prevent not initialized errors later on
    
    !!
    !-------------------------------------------------------------------------------
    !
    !*       0.   DECLARATIONS
    !             ------------
    !
    !
    
    USE MODD_SURF_PAR, ONLY : XUNDEF
    USE YOMHOOK      , ONLY : LHOOK,   DR_HOOK
    USE PARKIND1     , ONLY : JPRB
    
    CHARACTER(LEN=4)  :: CC1DRY
    CHARACTER(LEN=4)  :: CSCOND
    CHARACTER(LEN=3)  :: CSOILFRZ
    CHARACTER(LEN=4)  :: CDIFSFCOND
    CHARACTER(LEN=3)  :: CSNOWRES
    CHARACTER(LEN=3)  :: CCPSURF
    CHARACTER(LEN=4)  :: CRUNOFF
    CHARACTER(LEN=3)  :: CKSAT
    
    LOGICAL           :: LSOC
    
    CHARACTER(LEN=3)  :: CRAIN
    CHARACTER(LEN=3)  :: CHORT         
    
    REAL  :: XTSTEP
    REAL  :: XOUT_TSTEP
    REAL  :: XCGMAX
    REAL  :: XCDRAG
    REAL  :: XSPINMAXS
    REAL  :: XSPINMAXW
    
    REAL  :: XCO2_START
    REAL  :: XCO2_END
    
    INTEGER  :: NNBYEARSPINS
    INTEGER  :: NNBYEARSPINW
    LOGICAL  :: LPGD
    LOGICAL  :: LSURF_EVAP_BUDGET
    LOGICAL  :: LSURF_BUDGET
    LOGICAL  :: LRAD_BUDGET
    LOGICAL  :: LSURF_BUDGETC
    LOGICAL  :: LRESET_BUDGETC
    LOGICAL  :: LPATCH_BUDGET
    LOGICAL  :: LSURF_MISC_BUDGET
    
    LOGICAL  :: LSURF_DIAG_ALBEDO
    
    LOGICAL  :: LSURF_MISC_DIF
    LOGICAL  :: LWATER_BUDGET
    
    LOGICAL  :: LPROSNOW
    LOGICAL  :: LVOLUMETRIC_SNOWLIQ
    
    REAL     :: XDIAG_TSTEP
    REAL     :: XALBICE1, XALBICE2,XALBICE3
    REAL     :: XRHOTHRESHOLD_ICE
    REAL     :: XZ0ICEZ0SNOW
    REAL     :: XVAGING_NOGLACIER,XVAGING_GLACIER
    
    REAL     :: XPERCENTAGEPORE
    
    INTEGER  :: N2M
    LOGICAL  :: L2M_MIN_ZS
    LOGICAL  :: LCOEF
    LOGICAL  :: LSURF_VARS
    LOGICAL  :: LCH_BIO_FLUX
    
    LOGICAL  :: LSOILNOX
    
    LOGICAL  :: LCH_NO_FLUX
    
    REAL     :: XDROUGHT = XUNDEF
    REAL     :: XDAILYPAR = XUNDEF
    REAL     :: XDAILYTEMP = XUNDEF
    REAL     :: XMODPREC = XUNDEF
    
    LOGICAL  :: LGLACIER
    LOGICAL  :: LVEGUPD
    
    LOGICAL  :: LNITRO_DILU
    
    LOGICAL  :: LSPINUPCARBS
    LOGICAL  :: LSPINUPCARBW
    LOGICAL  :: LCANOPY_DRAG
    
    LOGICAL  :: LPERTSURF
    
    LOGICAL  :: LSNOWDRIFT
    LOGICAL  :: LSNOWDRIFT_SUBLIM
    
    LOGICAL  :: LSNOW_ABS_ZENITH
     CHARACTER(3) :: CSNOWMETAMO
     CHARACTER(3) :: CSNOWRAD
    
     CHARACTER(LEN=6)  :: CCH_DRY_DEP, CPARAMBVOC
    
     CHARACTER(LEN=28) :: CCHEM_SURF_FILE
    !
    
    NAMELIST/NAM_ISBAn/CC1DRY,CSCOND,CSOILFRZ,CDIFSFCOND,CSNOWRES,CCPSURF, &
    
                         XTSTEP,XCGMAX,XCDRAG,LGLACIER,LCANOPY_DRAG,LVEGUPD,LPERTSURF
    NAMELIST/NAM_ISBA_AGSn/LNITRO_DILU
    NAMELIST/NAM_SGH_ISBAn/CRUNOFF,CKSAT,LSOC,CRAIN,CHORT
    NAMELIST/NAM_DIAG_ISBAn/LPGD,LSURF_EVAP_BUDGET,LSURF_MISC_BUDGET,LSURF_DIAG_ALBEDO,LPATCH_BUDGET, &
    
                            LSURF_MISC_DIF, LWATER_BUDGET, LPROSNOW, LVOLUMETRIC_SNOWLIQ
    
    NAMELIST/NAM_DIAG_SURFn/N2M,L2M_MIN_ZS,LSURF_BUDGET,LRAD_BUDGET, &
    
                            LSURF_BUDGETC,LRESET_BUDGETC,LCOEF,LSURF_VARS
    
    NAMELIST/NAM_CH_CONTROLn/CCHEM_SURF_FILE
    
    NAMELIST/NAM_CH_ISBAn/LCH_BIO_FLUX,CCH_DRY_DEP,LCH_NO_FLUX, CPARAMBVOC, LSOILNOX, XDROUGHT,&
                          XMODPREC, XDAILYPAR, XDAILYTEMP
    
    NAMELIST/NAM_SPINUP_CARBn/LSPINUPCARBS,LSPINUPCARBW,XSPINMAXS,XSPINMAXW,NNBYEARSPINS,&
            NNBYEARSPINW, XCO2_START, XCO2_END
    NAMELIST/NAM_ISBA_SNOWn/LSNOWDRIFT,LSNOWDRIFT_SUBLIM, LSNOW_ABS_ZENITH, CSNOWMETAMO, CSNOWRAD
    
    SUBROUTINE INIT_NAM_ISBAn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBAN',0,ZHOOK_HANDLE)
    
      CC1DRY = IO%CC1DRY
      CSCOND = IO%CSCOND
      CSOILFRZ = IO%CSOILFRZ
      CDIFSFCOND = IO%CDIFSFCOND
      CSNOWRES = IO%CSNOWRES
      CCPSURF = IO%CCPSURF
      XTSTEP = IO%XTSTEP
      XOUT_TSTEP = IO%XOUT_TSTEP
      XCGMAX = IO%XCGMAX
      XCDRAG = IO%XCDRAG
      LGLACIER = IO%LGLACIER
      LVEGUPD = IO%LVEGUPD  
      LCANOPY_DRAG = IO%LCANOPY_DRAG
      LPERTSURF = IO%LPERTSURF
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_ISBAn
    
    
    SUBROUTINE INIT_NAM_ISBA_AGSn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBA_AGSN',0,ZHOOK_HANDLE)
    
      LNITRO_DILU = IO%LNITRO_DILU
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBA_AGSN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_ISBA_AGSn
    
    
    SUBROUTINE INIT_NAM_SGH_ISBAn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_SGH_ISBAN',0,ZHOOK_HANDLE)
    
      CRUNOFF = IO%CRUNOFF
      CKSAT=IO%CKSAT
      LSOC=IO%LSOC
      CRAIN=IO%CRAIN
      CHORT=IO%CHORT
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_SGH_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_SGH_ISBAn
    
    
    SUBROUTINE UPDATE_NAM_ISBAn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_ISBAN',0,ZHOOK_HANDLE)
    
      IO%CC1DRY = CC1DRY
      IO%CSCOND = CSCOND
      IO%CSOILFRZ = CSOILFRZ
      IO%CDIFSFCOND = CDIFSFCOND
      IO%CSNOWRES = CSNOWRES
      IO%CCPSURF = CCPSURF
      IO%XTSTEP = XTSTEP
      IO%XOUT_TSTEP = XOUT_TSTEP
      IO%XCGMAX = XCGMAX
      IO%XCDRAG = XCDRAG
      IO%LGLACIER = LGLACIER
      IO%LVEGUPD = LVEGUPD  
      IO%LCANOPY_DRAG = LCANOPY_DRAG
      IO%LPERTSURF = LPERTSURF
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_ISBAn
    
    
    SUBROUTINE UPDATE_NAM_ISBA_AGSn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_ISBA_AGSN',0,ZHOOK_HANDLE)
    
      IO%LNITRO_DILU = LNITRO_DILU
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_ISBA_AGSN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_ISBA_AGSn
    
    
    SUBROUTINE UPDATE_NAM_SGH_ISBAn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_SGH_ISBAN',0,ZHOOK_HANDLE)
    
      IO%CRUNOFF=CRUNOFF
      IO%CKSAT=CKSAT
      IO%LSOC=LSOC
      IO%CRAIN=CRAIN
      IO%CHORT=CHORT
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_SGH_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_SGH_ISBAn
    
    
    SUBROUTINE INIT_NAM_DIAG_ISBAn (DE, DGO, DMI)
    
    !
      USE MODD_DIAG_EVAP_ISBA_n, ONLY : DIAG_EVAP_ISBA_t
    
      USE MODD_DIAG_n, ONLY : DIAG_OPTIONS_t
    
      USE MODD_DIAG_MISC_ISBA_n, ONLY : DIAG_MISC_ISBA_t
    !
      IMPLICIT NONE
    
      TYPE(DIAG_EVAP_ISBA_t), INTENT(INOUT) :: DE
      TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO
      TYPE(DIAG_MISC_ISBA_t), INTENT(INOUT) :: DMI
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_DIAG_ISBAN',0,ZHOOK_HANDLE)
    
      LPGD = DGO%LPGD
      LSURF_EVAP_BUDGET = DE%LSURF_EVAP_BUDGET
      LWATER_BUDGET = DE%LWATER_BUDGET
      LSURF_MISC_BUDGET = DMI%LSURF_MISC_BUDGET
      LSURF_DIAG_ALBEDO = DMI%LSURF_DIAG_ALBEDO
      LSURF_MISC_DIF = DMI%LSURF_MISC_DIF
      LPATCH_BUDGET = DGO%LPATCH_BUDGET
      LPROSNOW = DMI%LPROSNOW
      LVOLUMETRIC_SNOWLIQ = DMI%LPROSNOW
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_DIAG_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_DIAG_ISBAn
    
    
    SUBROUTINE UPDATE_NAM_DIAG_ISBAn (DE, DGO, DMI)
    
    !
      USE MODD_DIAG_EVAP_ISBA_n, ONLY : DIAG_EVAP_ISBA_t
    
      USE MODD_DIAG_n, ONLY : DIAG_OPTIONS_t
    
      USE MODD_DIAG_MISC_ISBA_n, ONLY : DIAG_MISC_ISBA_t
    !
      IMPLICIT NONE
    
      TYPE(DIAG_EVAP_ISBA_t), INTENT(INOUT) :: DE
      TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO
      TYPE(DIAG_MISC_ISBA_t), INTENT(INOUT) :: DMI
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_DIAG_ISBAN',0,ZHOOK_HANDLE)
    
      DGO%LPGD = LPGD
      DE%LSURF_EVAP_BUDGET = LSURF_EVAP_BUDGET
      DE%LWATER_BUDGET = LWATER_BUDGET
      DMI%LSURF_MISC_BUDGET = LSURF_MISC_BUDGET
      DMI%LSURF_DIAG_ALBEDO = LSURF_DIAG_ALBEDO
      DMI%LSURF_MISC_DIF = LSURF_MISC_DIF
      DGO%LPATCH_BUDGET = LPATCH_BUDGET
      DMI%LPROSNOW = LPROSNOW
      DMI%LVOLUMETRIC_SNOWLIQ = LVOLUMETRIC_SNOWLIQ  
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_DIAG_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_DIAG_ISBAn
    
    
    SUBROUTINE INIT_NAM_DIAG_SURFn (DGO)
    
    !
      USE MODD_DIAG_EVAP_ISBA_n, ONLY : DIAG_EVAP_ISBA_t
    
      USE MODD_DIAG_n, ONLY : DIAG_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_DIAG_SURFN',0,ZHOOK_HANDLE)
    
      XDIAG_TSTEP = DGO%XDIAG_TSTEP  
      N2M = DGO%N2M
      L2M_MIN_ZS = DGO%L2M_MIN_ZS
      LSURF_BUDGET = DGO%LSURF_BUDGET
      LRAD_BUDGET = DGO%LRAD_BUDGET
      LSURF_BUDGETC = DGO%LSURF_BUDGETC
      LRESET_BUDGETC = DGO%LRESET_BUDGETC  
      LCOEF = DGO%LCOEF
      LSURF_VARS = DGO%LSURF_VARS
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_DIAG_SURFN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_DIAG_SURFn
    
    
    SUBROUTINE UPDATE_NAM_DIAG_SURFn (DGO)
    
    !
      USE MODD_DIAG_EVAP_ISBA_n, ONLY : DIAG_EVAP_ISBA_t
    
      USE MODD_DIAG_n, ONLY : DIAG_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(DIAG_OPTIONS_t), INTENT(INOUT) :: DGO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_DIAG_SURFN',0,ZHOOK_HANDLE)
    
      DGO%XDIAG_TSTEP = XDIAG_TSTEP  
      DGO%N2M = N2M
      DGO%L2M_MIN_ZS = L2M_MIN_ZS
      DGO%LSURF_BUDGET = LSURF_BUDGET
      DGO%LRAD_BUDGET = LRAD_BUDGET 
      DGO%LSURF_BUDGETC = LSURF_BUDGETC
      DGO%LRESET_BUDGETC = LRESET_BUDGETC  
      DGO%LCOEF = LCOEF
      DGO%LSURF_VARS = LSURF_VARS
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_DIAG_SURFN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_DIAG_SURFn
    
    
    SUBROUTINE INIT_NAM_CH_CONTROLn (CHI)
    !
      USE MODD_CH_ISBA_n, ONLY : CH_ISBA_t
    !
      IMPLICIT NONE
    
    !
      TYPE(CH_ISBA_t), INTENT(INOUT) :: CHI
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_CH_CONTROLN',0,ZHOOK_HANDLE)
    
      CCHEM_SURF_FILE = CHI%CCHEM_SURF_FILE
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_CH_CONTROLN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_CH_CONTROLn
    
    
    SUBROUTINE UPDATE_NAM_CH_CONTROLn (CHI)
    !
      USE MODD_CH_ISBA_n, ONLY : CH_ISBA_t
    !
      IMPLICIT NONE
    
    !
      TYPE(CH_ISBA_t), INTENT(INOUT) :: CHI
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_CH_CONTROLN',0,ZHOOK_HANDLE)
    
      CHI%CCHEM_SURF_FILE = CCHEM_SURF_FILE
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_CH_CONTROLN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_CH_CONTROLn
    
    
    SUBROUTINE INIT_NAM_CH_ISBAn (CHI, MGN)
    
    !
      USE MODD_CH_ISBA_n, ONLY : CH_ISBA_t
    
      USE MODD_MEGAN_n, ONLY : MEGAN_t  
    
    !
      IMPLICIT NONE
    
    !
      TYPE(CH_ISBA_t), INTENT(INOUT) :: CHI
    
      TYPE(MEGAN_t), INTENT(INOUT) :: MGN
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_CH_ISBAN',0,ZHOOK_HANDLE)
    
      LCH_BIO_FLUX = CHI%LCH_BIO_FLUX
      LCH_NO_FLUX = CHI%LCH_NO_FLUX
      CCH_DRY_DEP = CHI%CCH_DRY_DEP
    
      CPARAMBVOC = CHI%CPARAMBVOC
      LSOILNOX = CHI%LSOILNOX
      XDROUGHT = MGN%XDROUGHT
      XMODPREC = MGN%XMODPREC
      XDAILYPAR = MGN%XDAILYPAR
      XDAILYTEMP = MGN%XDAILYTEMP  
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_CH_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_CH_ISBAn
    
    
    SUBROUTINE UPDATE_NAM_CH_ISBAn (CHI, MGN)
    
    !
      USE MODD_CH_ISBA_n, ONLY : CH_ISBA_t
    
      USE MODD_MEGAN_n, ONLY : MEGAN_t
    
    !
      IMPLICIT NONE
    
    !
      TYPE(CH_ISBA_t), INTENT(INOUT) :: CHI
    
      TYPE(MEGAN_t), INTENT(INOUT) :: MGN
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_CH_ISBAN',0,ZHOOK_HANDLE)
    
      CHI%LCH_BIO_FLUX = LCH_BIO_FLUX
      CHI%LCH_NO_FLUX = LCH_NO_FLUX
      CHI%CCH_DRY_DEP = CCH_DRY_DEP
    
      CHI%CPARAMBVOC = CPARAMBVOC
      CHI%LSOILNOX = LSOILNOX
      MGN%XDROUGHT = XDROUGHT
      MGN%XMODPREC = XMODPREC
      MGN%XDAILYPAR = XDAILYPAR
      MGN%XDAILYTEMP = XDAILYTEMP
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_CH_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_CH_ISBAn
    
    
    SUBROUTINE INIT_NAM_SPINUP_CARB_ISBAn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_SPINUP_CARB_ISBAN',0,ZHOOK_HANDLE)
    
      LSPINUPCARBS = IO%LSPINUPCARBS
      LSPINUPCARBW = IO%LSPINUPCARBW  
      XSPINMAXS   = IO%XSPINMAXS
      XSPINMAXW   = IO%XSPINMAXW  
      NNBYEARSPINS = IO%NNBYEARSPINS
      NNBYEARSPINW = IO%NNBYEARSPINW
      XCO2_START = IO%XCO2_START
      XCO2_END = IO%XCO2_END
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_SPINUP_CARB_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE INIT_NAM_SPINUP_CARB_ISBAn
    
    
    SUBROUTINE UPDATE_NAM_SPINUP_CARB_ISBAn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_SPINUP_CARB_ISBAN',0,ZHOOK_HANDLE)
    
      IO%LSPINUPCARBS = LSPINUPCARBS
      IO%LSPINUPCARBW = LSPINUPCARBW  
      IO%XSPINMAXS   = XSPINMAXS
      IO%XSPINMAXW   = XSPINMAXW  
      IO%NNBYEARSPINS = NNBYEARSPINS
      IO%NNBYEARSPINW = NNBYEARSPINW
      IO%XCO2_START = XCO2_START
      IO%XCO2_END = XCO2_END
    
    IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:UPDATE_NAM_SPINUP_CARB_ISBAN',1,ZHOOK_HANDLE)
    END SUBROUTINE UPDATE_NAM_SPINUP_CARB_ISBAn
    
    
    SUBROUTINE INIT_NAM_ISBA_SNOWn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBA_SNOWn',0,ZHOOK_HANDLE)
    
      LSNOWDRIFT = IO%LSNOWDRIFT
      LSNOWDRIFT_SUBLIM =  IO%LSNOWDRIFT_SUBLIM
      LSNOW_ABS_ZENITH = IO%LSNOW_ABS_ZENITH
      CSNOWMETAMO = IO%CSNOWMETAMO
      CSNOWRAD = IO%CSNOWRAD  
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBA_SNOWn',1,ZHOOK_HANDLE)
    
    END SUBROUTINE INIT_NAM_ISBA_SNOWn
    
    SUBROUTINE UPDATE_NAM_ISBA_SNOWn (IO)
    
      USE MODD_ISBA_OPTIONS_n, ONLY : ISBA_OPTIONS_t
    
    !
      IMPLICIT NONE
    
      TYPE(ISBA_OPTIONS_t), INTENT(INOUT) :: IO
    
      REAL(KIND=JPRB) :: ZHOOK_HANDLE
    
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBA_SNOWn',0,ZHOOK_HANDLE)
    
      IO%LSNOWDRIFT = LSNOWDRIFT
      IO%LSNOWDRIFT_SUBLIM = LSNOWDRIFT_SUBLIM
      IO%LSNOW_ABS_ZENITH = LSNOW_ABS_ZENITH
      IO%CSNOWMETAMO = CSNOWMETAMO
      IO%CSNOWRAD=CSNOWRAD  
    
      IF (LHOOK) CALL DR_HOOK('MODN_ISBA_N:INIT_NAM_ISBA_SNOWn',1,ZHOOK_HANDLE)
    
    END SUBROUTINE UPDATE_NAM_ISBA_SNOWn
    
    
    END MODULE MODN_ISBA_n