SURFEX v7.3
General documentation of Surfex
|
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