SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/init_isban.F90
Go to the documentation of this file.
00001 !#############################################################
00002 SUBROUTINE INIT_ISBA_n    (HPROGRAM,HINIT,OLAND_USE,                    &
00003                              KI,KSV,KSW,                                &
00004                              HSV,PCO2,PRHOA,                            &
00005                              PZENITH,PAZIM,PSW_BANDS,PDIR_ALB,PSCA_ALB, &
00006                              PEMIS,PTSRAD,                              &
00007                              KYEAR, KMONTH,KDAY, PTIME,                 &
00008                              HATMFILE,HATMFILETYPE,                     &
00009                              HTEST                                      )  
00010 !#############################################################
00011 !
00012 !!****  *INIT_ISBA_n* - routine to initialize ISBA
00013 !!
00014 !!    PURPOSE
00015 !!    -------
00016 !!
00017 !!**  METHOD
00018 !!    ------
00019 !!
00020 !!    EXTERNAL
00021 !!    --------
00022 !!
00023 !!
00024 !!    IMPLICIT ARGUMENTS
00025 !!    ------------------
00026 !!
00027 !!    REFERENCE
00028 !!    ---------
00029 !!
00030 !!
00031 !!    AUTHOR
00032 !!    ------
00033 !!      V. Masson   *Meteo France*      
00034 !!
00035 !!    MODIFICATIONS
00036 !!    -------------
00037 !!      Original    01/2004
00038 !!      Modified by P. Le Moigne (11/2004): miscellaneous diagnostics
00039 !!      Modified by P. Le Moigne (06/2006): seeding and irrigation    
00040 !!      Modified by B. Decharme    (2008) : SGH and Flooding scheme
00041 !!      Modified by B. Decharme  (01/2009): optional deep soil temperature as in Arpege
00042 !!      Modified by R. Hamdi     (01/2009): Cp and L
00043 !!      Modified by B. Decharme  (06/2009): read topographic index statistics
00044 !!      Modified by P. Le Moigne (01/2009): Beljaars sso
00045 !!      Modified by B. Decharme  (08/2009): Active Trip coupling variable if Earth System Model
00046 !!      A.L. Gibelin   04/09 : change BSLAI_NITRO initialisation
00047 !!      A.L. Gibelin   04/09 : modifications for CENTURY model 
00048 !!      A.L. Gibelin   06/09 : soil carbon initialisation
00049 !!      B. Decharme    07/11 : read pgd+prep
00050 !!      R. Alkama      05/12 : new carbon spinup
00051 !!
00052 !-------------------------------------------------------------------------------
00053 !
00054 !*       0.    DECLARATIONS
00055 !              ------------
00056 !
00057 USE MODD_ISBA_n,   ONLY : CROUGH ,CISBA, CPHOTO, CRUNOFF, CALBEDO, CSCOND,    &
00058                           CC1DRY, CSOILFRZ, CDIFSFCOND, CSNOWRES, CRESPSL,    &
00059                           NNLITTER, NNLITTLEVS, NNSOILCARB, NPATCH,           &
00060                           TSNOW, TTIME, XTSTEP, XOUT_TSTEP,                   &
00061                           LTRIP, LFLOOD, LGLACIER, LVEGUPD, LCANOPY_DRAG,     &
00062                           CCPSURF, CHORT, XCGMAX, XCDRAG, CKSAT,              &
00063                           CSOC, CTOPREG, CRAIN, LSPINUPCARBS,                 &
00064                           LSPINUPCARBW, NNBYEARSOLD, NSPINS, NSPINW
00065 !
00066 USE MODD_CH_ISBA_n,      ONLY : LCH_BIO_FLUX, CCH_DRY_DEP  
00067 
00068 USE MODD_DIAG_ISBA_n,    ONLY : N2M, LSURF_BUDGET, LRAD_BUDGET,          &
00069                                   XDIAG_TSTEP, LPGD,  L2M_MIN_ZS, LCOEF, &
00070                                   LSURF_VARS, LPATCH_BUDGET  
00071 USE MODD_DIAG_EVAP_ISBA_n, ONLY : LSURF_EVAP_BUDGET, LSURF_BUDGETC, LRESET_BUDGETC, &
00072                                   LWATER_BUDGET
00073 USE MODD_DIAG_MISC_ISBA_n, ONLY : LSURF_MISC_BUDGET, LSURF_DIAG_ALBEDO, LSURF_MISC_DIF  
00074 USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
00075 USE MODD_AGRI,           ONLY : LAGRIP
00076 !
00077 USE MODD_SNOW_PAR, ONLY : LSNOWDRIFT,LSNOWDRIFT_SUBLIM, XZ0ICEZ0SNOW,XRHOTHRESHOLD_ICE,&
00078                  XALBICE1,XALBICE2,XALBICE3, XVAGING_NOGLACIER, XVAGING_GLACIER
00079 !
00080 USE MODD_READ_NAMELIST,  ONLY : LNAM_READ
00081 !
00082 USE MODI_INIT_IO_SURF_n
00083 !
00084 USE MODI_GET_LUOUT
00085 USE MODI_ABOR1_SFX
00086 USE MODI_DEFAULT_ISBA
00087 USE MODI_DEFAULT_CH_DEP
00088 USE MODI_DEFAULT_CH_BIO_FLUX
00089 USE MODI_DEFAULT_DIAG_ISBA
00090 USE MODI_READ_DEFAULT_ISBA_n
00091 USE MODI_READ_ISBA_CONF_n
00092 USE MODI_READ_PREP_ISBA_SNOW
00093 USE MODI_READ_PREP_ISBA_CARBON
00094 USE MODI_READ_SURF
00095 USE MODI_PREP_CTRL_ISBA
00096 USE MODI_READ_ISBA_DATE
00097 USE MODI_READ_PGD_ISBA_n
00098 USE MODI_COMPUTE_ISBA_PARAMETERS
00099 USE MODI_READ_NAM_PREP_ISBA_n
00100 !
00101 USE MODI_SET_SURFEX_FILEIN
00102 !
00103 USE MODI_END_IO_SURF_n
00104 !
00105 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00106 USE PARKIND1  ,ONLY : JPRB
00107 !
00108 IMPLICIT NONE
00109 !
00110 !*       0.1   Declarations of arguments
00111 !              -------------------------
00112 !
00113  CHARACTER(LEN=6),                 INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00114  CHARACTER(LEN=3),                 INTENT(IN)  :: HINIT     ! choice of fields to initialize
00115 LOGICAL,                          INTENT(IN)  :: OLAND_USE !
00116 INTEGER,                          INTENT(IN)  :: KI        ! number of points
00117 INTEGER,                          INTENT(IN)  :: KSV       ! number of scalars
00118 INTEGER,                          INTENT(IN)  :: KSW       ! number of short-wave spectral bands
00119  CHARACTER(LEN=6), DIMENSION(KSV), INTENT(IN)  :: HSV       ! name of all scalar variables
00120 REAL,             DIMENSION(KI),  INTENT(IN)  :: PCO2      ! CO2 concentration (kg/m3)
00121 REAL,             DIMENSION(KI),  INTENT(IN)  :: PRHOA     ! air density
00122 REAL,             DIMENSION(KI),  INTENT(IN)  :: PZENITH   ! solar zenithal angle
00123 REAL,             DIMENSION(KI),  INTENT(IN)  :: PAZIM     ! solar azimuthal angle (rad from N, clock)
00124 REAL,             DIMENSION(KSW), INTENT(IN)  :: PSW_BANDS ! middle wavelength of each band
00125 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PDIR_ALB  ! direct albedo for each band
00126 REAL,             DIMENSION(KI,KSW),INTENT(OUT) :: PSCA_ALB  ! diffuse albedo for each band
00127 REAL,             DIMENSION(KI),  INTENT(OUT) :: PEMIS     ! emissivity
00128 REAL,             DIMENSION(KI),  INTENT(OUT) :: PTSRAD    ! radiative temperature
00129 INTEGER,                          INTENT(IN)  :: KYEAR     ! current year (UTC)
00130 INTEGER,                          INTENT(IN)  :: KMONTH    ! current month (UTC)
00131 INTEGER,                          INTENT(IN)  :: KDAY      ! current day (UTC)
00132 REAL,                             INTENT(IN)  :: PTIME     ! current time since
00133                                                           !  midnight (UTC, s)
00134 !
00135  CHARACTER(LEN=28),                INTENT(IN)  :: HATMFILE    ! atmospheric file name
00136  CHARACTER(LEN=6),                 INTENT(IN)  :: HATMFILETYPE! atmospheric file type
00137  CHARACTER(LEN=2),                 INTENT(IN)  :: HTEST       ! must be equal to 'OK'
00138 !
00139 !
00140 !*       0.2   Declarations of local variables
00141 !              -------------------------------
00142 !
00143 INTEGER           :: ILUOUT   ! unit of output listing file
00144 !
00145 INTEGER           :: IVERSION       ! surface version
00146 !
00147 INTEGER :: IRESP   ! return code
00148 !
00149 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00150 !
00151 !-------------------------------------------------------------------------------
00152 !
00153 !               Initialisation for IO
00154 !
00155 !
00156 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_N',0,ZHOOK_HANDLE)
00157  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00158 !
00159 IF (HTEST/='OK') THEN
00160   CALL ABOR1_SFX('INIT_ISBAN: FATAL ERROR DURING ARGUMENT TRANSFER')
00161 END IF
00162 !
00163 !               Other little things
00164 !
00165 LSURF_DIAG_ALBEDO = .FALSE.
00166 !
00167 IF (LNAM_READ) THEN
00168  !
00169  !*       0.     Defaults
00170 !               --------
00171 
00172  !        0.1. Hard defaults
00173  !      
00174  CALL DEFAULT_ISBA(XTSTEP, XOUT_TSTEP,                           &
00175                      CROUGH,CRUNOFF,CALBEDO,CSCOND,              &
00176                      CC1DRY, CSOILFRZ, CDIFSFCOND, CSNOWRES,     &
00177                      CCPSURF, XCGMAX, XCDRAG, CKSAT, CSOC,       &
00178                      CTOPREG, CRAIN, CHORT, LFLOOD, LTRIP,       &
00179                      LGLACIER, LCANOPY_DRAG, LVEGUPD,            &
00180                      LSPINUPCARBS, LSPINUPCARBW                  )
00181  !                  
00182  CALL DEFAULT_CH_DEP(CCH_DRY_DEP)
00183  CALL DEFAULT_CH_BIO_FLUX(LCH_BIO_FLUX)                  
00184  CALL DEFAULT_DIAG_ISBA(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,   &
00185                         LCOEF,LSURF_VARS,LSURF_EVAP_BUDGET,        &
00186                         LSURF_MISC_BUDGET,LSURF_BUDGETC,           &
00187                         LSURF_MISC_DIF,LPATCH_BUDGET,              &
00188                         LPGD,LRESET_BUDGETC,LWATER_BUDGET,         &
00189                         XDIAG_TSTEP                                )  
00190  !
00191  CALL DEFAULT_CROCUS(LSNOWDRIFT,LSNOWDRIFT_SUBLIM,XZ0ICEZ0SNOW,XRHOTHRESHOLD_ICE,&
00192                  XALBICE1,XALBICE2,XALBICE3,XVAGING_NOGLACIER,XVAGING_GLACIER)
00193  ! 
00194 ENDIF
00195 !
00196 !        0.2. Defaults from file header
00197 !    
00198  CALL READ_DEFAULT_ISBA_n(HPROGRAM)
00199 !
00200  CALL READ_ISBA_CONF_n(HPROGRAM)
00201 !
00202 !
00203 !*       1.     Reading of configuration:
00204 !               -------------------------
00205 !
00206 !* initialization of snow and carbon schemes
00207 !
00208 NNBYEARSOLD = 0
00209 NSPINS      = 1
00210 NSPINW      = 1
00211 !
00212 IF (HINIT=='PRE') THEN 
00213   CALL READ_PREP_ISBA_SNOW(HPROGRAM,TSNOW%SCHEME,TSNOW%NLAYER) 
00214 !
00215 !* initialization of soil carbon scheme
00216 !
00217   CALL READ_PREP_ISBA_CARBON(HPROGRAM,CRESPSL)
00218 !
00219   IF (CRESPSL=='CNT') THEN
00220     NNLITTER = 2
00221     NNLITTLEVS = 2
00222     NNSOILCARB = 3
00223   ELSE
00224     NNLITTER = 0
00225     NNLITTLEVS = 0
00226     NNSOILCARB = 0
00227   ENDIF
00228 
00229 ELSEIF (HINIT=='ALL') THEN
00230 !
00231   CALL INIT_IO_SURF_n(HPROGRAM,'NATURE','ISBA  ','READ ')
00232   CALL READ_SURF(HPROGRAM,'VERSION',IVERSION,IRESP)
00233 !
00234   IF (IVERSION<6) THEN
00235     CRESPSL='DEF'
00236   ELSE  
00237     CALL READ_SURF(HPROGRAM,'RESPSL',CRESPSL,IRESP)
00238     CALL READ_SURF(HPROGRAM,'NLITTER',NNLITTER,IRESP)
00239     CALL READ_SURF(HPROGRAM,'NLITTLEVS',NNLITTLEVS,IRESP)
00240     CALL READ_SURF(HPROGRAM,'NSOILCARB',NNSOILCARB,IRESP)
00241     IF(IVERSION>=7.AND.(LSPINUPCARBS.OR.LSPINUPCARBW))THEN
00242       CALL READ_SURF(HPROGRAM,'NBYEARSOLD',NNBYEARSOLD,IRESP)
00243     ENDIF
00244   ENDIF
00245 !
00246   CALL END_IO_SURF_n(HPROGRAM)
00247 !
00248 ENDIF
00249 !
00250 !-------------------------------------------------------------------------------
00251 !
00252 !*       2.     Physiographic fields
00253 !               --------------------
00254 !
00255 !
00256 !* date
00257 !
00258 SELECT CASE (HINIT)
00259   CASE ('PGD')
00260     TTIME%TDATE%YEAR = NUNDEF
00261     TTIME%TDATE%MONTH= NUNDEF
00262     TTIME%TDATE%DAY  = NUNDEF
00263     TTIME%TIME       = XUNDEF
00264 
00265   CASE ('PRE')
00266     CALL PREP_CTRL_ISBA(N2M,LSURF_BUDGET,L2M_MIN_ZS,LRAD_BUDGET,LCOEF,LSURF_VARS,&
00267                           LSURF_EVAP_BUDGET,LSURF_MISC_BUDGET,LSURF_BUDGETC,     &
00268                           LPATCH_BUDGET,LSURF_MISC_DIF,ILUOUT                    )    
00269     IF (LNAM_READ) CALL READ_NAM_PREP_ISBA_n(HPROGRAM)                        
00270     CALL READ_ISBA_DATE(HPROGRAM,HINIT,ILUOUT,HATMFILE,HATMFILETYPE,KYEAR,KMONTH,KDAY,PTIME,TTIME)
00271 
00272   CASE DEFAULT
00273     CALL INIT_IO_SURF_n(HPROGRAM,'NATURE','ISBA  ','READ ')
00274     CALL READ_SURF(HPROGRAM,'DTCUR',TTIME,IRESP)
00275     CALL END_IO_SURF_n(HPROGRAM)
00276 END SELECT
00277 !
00278 !-----------------------------------------------------------------------------------------------------
00279 ! READ PGD FILE
00280 !-----------------------------------------------------------------------------------------------------
00281 !
00282 ! initialization for I/O
00283 !
00284  CALL SET_SURFEX_FILEIN(HPROGRAM,'PGD ') ! change input file name to pgd name
00285  CALL INIT_IO_SURF_n(HPROGRAM,'NATURE','ISBA  ','READ ')
00286 !
00287 !
00288 !*       2.1    Cover, soil and orographic fields:
00289 !               ---------------------------------
00290 !
00291  CALL READ_PGD_ISBA_n(HPROGRAM,OLAND_USE)
00292 IF ( CPHOTO/='NON' .AND. NPATCH/=12) THEN
00293   CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND NPATCH')
00294 ENDIF
00295 IF ( CPHOTO/='LAI' .AND. CPHOTO/='LST' .AND. CPHOTO/='NIT' .AND. CPHOTO/='NCB' .AND. LAGRIP) THEN
00296   CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LAGRIP')
00297 ENDIF
00298 IF ( CPHOTO/='NCB' .AND. CRESPSL=='CNT') THEN
00299   CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND CRESPSL')
00300 ENDIF
00301 IF (HINIT=='PRE' .AND. TSNOW%SCHEME.NE.'3-L' .AND. TSNOW%SCHEME.NE.'CRO' .AND. CISBA=='DIF') THEN
00302     CALL ABOR1_SFX("INIT_ISBAN: WITH CISBA = DIF, CSNOW MUST BE 3-L OR CRO")
00303 ENDIF
00304 IF(CPHOTO/='NCB'.AND.LSPINUPCARBW)THEN
00305   CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CPHOTO AND LSPINUPCARBW (if not NCB must be false)')
00306 ENDIF
00307 IF(CRESPSL/='CNT'.AND.LSPINUPCARBS)THEN
00308   CALL ABOR1_SFX('INIT_ISBAN: INCONSISTENCY BETWEEN CRESPSL AND LSPINUPCARBS (if not CNT must be false)')
00309 ENDIF
00310 !
00311  CALL END_IO_SURF_n(HPROGRAM)
00312  CALL SET_SURFEX_FILEIN(HPROGRAM,'PREP') ! restore input file name
00313 !
00314 !-----------------------------------------------------------------------------------------------------
00315 ! END READ PGD FILE
00316 !-----------------------------------------------------------------------------------------------------
00317 !
00318 IF (OLAND_USE .OR. HINIT=='PGD') THEN
00319   IF (LHOOK) CALL DR_HOOK('INIT_ISBA_N',1,ZHOOK_HANDLE)
00320   RETURN
00321 END IF
00322 !
00323  CALL COMPUTE_ISBA_PARAMETERS(HPROGRAM,HINIT,OLAND_USE,                  &
00324                              KI,KSV,KSW,                                &
00325                              HSV,PCO2,PRHOA,                            &
00326                              PZENITH,PSW_BANDS,PDIR_ALB,PSCA_ALB,       &
00327                              PEMIS,PTSRAD,                              &
00328                              HTEST                                )
00329 !  
00330 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_N',1,ZHOOK_HANDLE)
00331 !
00332 END SUBROUTINE INIT_ISBA_n