|
SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE INIT_ISBA_MIXPAR(HISBA,KDECADE,KDECADE2,PCOVER,HPHOTO,HSFTYPE) 00003 ! ############################################################## 00004 ! 00005 !!**** *INIT_ISBA_MIXPAR* 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! This routine makes pre-calculations relative to dependances between 00010 !! parameters. 00011 !! 00012 !! METHOD 00013 !! ------ 00014 !! First are treated parameters varying in time. Then, other ones. 00015 !! * XPAR_VEGTYPE is needed as soon as 1 LDATA_ is true to use av_pgd_param. 00016 !! * XPAR_LAI is needed as soon as av_pgd_param is called with YLAI 00017 !! * XPAR_VEG is needed as soon as av_pgd_param is called with YVEG 00018 !! * XPAR_H_TREE is needed as soon as Z0 is calculated by ini_data_param by point 00019 !! 00020 !! EXTERNAL 00021 !! -------- 00022 !! 00023 !! IMPLICIT ARGUMENTS 00024 !! ------------------ 00025 !! 00026 !! REFERENCE 00027 !! --------- 00028 !! 00029 !! AUTHOR 00030 !! ------ 00031 !! 00032 !! S. Faroux Meteo-France 00033 !! 00034 !! MODIFICATION 00035 !! ------------ 00036 !! 00037 !! Original 16/11/10 00038 !! 00039 !---------------------------------------------------------------------------- 00040 ! 00041 !* 0. DECLARATION 00042 ! ----------- 00043 ! 00044 USE MODD_SURF_PAR, ONLY : XUNDEF 00045 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE 00046 ! 00047 USE MODD_ISBA_GRID_n, ONLY : NDIM 00048 USE MODD_ISBA_n, ONLY : NGROUND_LAYER 00049 USE MODD_DATA_ISBA_n, ONLY : NTIME, XPAR_VEGTYPE, XPAR_LAI, XPAR_H_TREE, & 00050 XPAR_VEG, XPAR_Z0, XPAR_EMIS, XPAR_DICE, & 00051 XPAR_RSMIN, XPAR_GAMMA, XPAR_WRMAX_CF, XPAR_RGL, & 00052 XPAR_CV, XPAR_Z0_O_Z0H, & 00053 XPAR_ALBNIR_VEG, XPAR_ALBVIS_VEG, XPAR_ALBUV_VEG, & 00054 XPAR_ALBNIR_SOIL, XPAR_ALBVIS_SOIL, XPAR_ALBUV_SOIL, & 00055 XPAR_GMES, XPAR_BSLAI, XPAR_SEFOLD, XPAR_GC, XPAR_DMAX, & 00056 XPAR_RE25, XPAR_LAIMIN, XPAR_F2I, & 00057 XPAR_CE_NITRO,XPAR_CF_NITRO,XPAR_CNA_NITRO, & 00058 LPAR_STRESS, XPAR_IRRIG, XPAR_WATSUP, & 00059 XPAR_DG, XPAR_ROOT_EXTINCTION, XPAR_ROOT_LIN, LDATA_DG, & 00060 LDATA_ROOTFRAC, LDATA_ROOT_EXTINCTION, LDATA_ROOT_LIN, & 00061 LDATA_VEGTYPE, LDATA_LAI, LDATA_H_TREE, & 00062 LDATA_VEG, LDATA_Z0, LDATA_EMIS, LDATA_DICE, & 00063 LDATA_RSMIN, LDATA_GAMMA, LDATA_WRMAX_CF, LDATA_RGL, & 00064 LDATA_CV, LDATA_Z0_O_Z0H, LDATA_ROOT_DEPTH, & 00065 LDATA_ALBNIR_VEG, LDATA_ALBVIS_VEG, LDATA_ALBUV_VEG, & 00066 LDATA_ALBVIS_SOIL, LDATA_ALBNIR_SOIL, LDATA_ALBUV_SOIL, & 00067 LDATA_GMES, LDATA_BSLAI, LDATA_SEFOLD, LDATA_GC, LDATA_DMAX, & 00068 LDATA_RE25, LDATA_LAIMIN, LDATA_F2I, & 00069 LDATA_CE_NITRO,LDATA_CF_NITRO, LDATA_CNA_NITRO, & 00070 LDATA_STRESS, LDATA_IRRIG, LDATA_WATSUP, LDATA_MIXPAR 00071 ! 00072 USE MODD_DATA_COVER, ONLY : XDATA_VEGTYPE, XDATA_LAI, XDATA_H_TREE, XDATA_VEG, & 00073 XDATA_IRRIG, XDATA_WATSUP 00074 ! 00075 USE MODI_INI_DATA_PARAM 00076 USE MODI_AV_PGD 00077 ! 00078 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00079 USE PARKIND1 ,ONLY : JPRB 00080 ! 00081 IMPLICIT NONE 00082 ! 00083 !* 0.1 Declaration of arguments 00084 ! ------------------------ 00085 ! 00086 CHARACTER(LEN=*), INTENT(IN) :: HISBA 00087 INTEGER, INTENT(IN) :: KDECADE 00088 INTEGER, INTENT(OUT) :: KDECADE2 00089 REAL, DIMENSION(:,:), INTENT(IN) :: PCOVER 00090 CHARACTER(LEN=*), INTENT(IN) :: HPHOTO ! type of photosynthesis 00091 CHARACTER(LEN=*), INTENT(IN) :: HSFTYPE ! nature / garden 00092 ! 00093 ! 00094 !* 0.2 Declaration of local variables 00095 ! ------------------------------ 00096 ! 00097 REAL, DIMENSION(12) :: XSTRESS ! 1. if defensive /0. if offensive 00098 ! 00099 CHARACTER(LEN=3) :: YTREE, YNAT, YVEG 00100 ! 00101 INTEGER :: JVEGTYPE 00102 ! 00103 !* 0.3 Declaration of namelists 00104 ! ------------------------ 00105 ! 00106 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00107 ! 00108 DATA XSTRESS /1.,1.,1.,0.,1.,0.,1.,0.,1.,0.,0.,0./ 00109 !------------------------------------------------------------------------------- 00110 ! 00111 !* 1. Initializations 00112 ! --------------- 00113 ! 00114 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_MIXPAR',0,ZHOOK_HANDLE) 00115 ! 00116 IF (.NOT.LDATA_MIXPAR) THEN 00117 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_MIXPAR',1,ZHOOK_HANDLE) 00118 RETURN 00119 ENDIF 00120 ! 00121 IF (HSFTYPE=='NAT') THEN 00122 YNAT='NAT' 00123 YTREE='TRE' 00124 YVEG='VEG' 00125 ELSEIF (HSFTYPE=='GRD') THEN 00126 YNAT='GRD' 00127 YTREE='GRT' 00128 YVEG='GRV' 00129 ENDIF 00130 ! 00131 KDECADE2 = KDECADE 00132 IF (NTIME==2) KDECADE2 = KDECADE2 + 10 00133 KDECADE2 = (KDECADE2-1) * NTIME / 36 + 1 00134 IF (NTIME==2) KDECADE2 = MOD(KDECADE2,2) 00135 ! 00136 ! 1. Arrays needed further 00137 ! ------------------------ 00138 ! 00139 !XPAR_VEGTYPE will be needed to use ini_data_param by point 00140 IF (.NOT.LDATA_VEGTYPE) THEN 00141 ALLOCATE(XPAR_VEGTYPE (NDIM,NVEGTYPE)) 00142 DO JVEGTYPE=1,NVEGTYPE 00143 CALL AV_PGD (XPAR_VEGTYPE(:,JVEGTYPE),PCOVER ,XDATA_VEGTYPE(:,JVEGTYPE),YNAT,'ARI') 00144 END DO 00145 ENDIF 00146 !xpar_lai: needed for av_pgd_param with YLAI 00147 IF (.NOT.LDATA_LAI) THEN 00148 ALLOCATE(XPAR_LAI(NDIM,NTIME,NVEGTYPE)) 00149 CALL AV_PGD(XPAR_LAI(:,KDECADE2,:),PCOVER,XDATA_LAI(:,KDECADE,:),YVEG,'ARI',KDECADE=KDECADE2) 00150 ENDIF 00151 !veg 00152 IF (.NOT.LDATA_VEG) THEN 00153 ALLOCATE(XPAR_VEG(NDIM,NTIME,NVEGTYPE)) 00154 IF (LDATA_LAI) THEN 00155 CALL INI_DATA_PARAM(XPAR_VEGTYPE,PLAI=XPAR_LAI,PVEG_OUT=XPAR_VEG) 00156 LDATA_VEG=.TRUE. 00157 ELSE 00158 CALL AV_PGD(XPAR_VEG(:,KDECADE2,:),PCOVER,XDATA_VEG(:,KDECADE,:),YNAT,'ARI') 00159 ENDIF 00160 ENDIF 00161 !ht: needed to calculate z0, if not calculated yet during extrapolation 00162 IF (.NOT.LDATA_H_TREE .AND. .NOT.LDATA_Z0 .AND. LDATA_LAI) THEN 00163 ALLOCATE(XPAR_H_TREE(NDIM,NVEGTYPE)) 00164 CALL AV_PGD(XPAR_H_TREE,PCOVER,XDATA_H_TREE,YTREE,'ARI') 00165 ENDIF 00166 ! 00167 !dg: initialization for ROOTFRAC 00168 !ROOTFRAC depends on ROOT_DEPTH, DG, ROOT_EXT, ROOT_LIN 00169 IF (.NOT.LDATA_ROOTFRAC .AND. HISBA=='DIF' .AND. LDATA_ROOT_DEPTH) THEN 00170 ! 00171 IF (.NOT.LDATA_ROOT_EXTINCTION) THEN 00172 ALLOCATE(XPAR_ROOT_EXTINCTION(NDIM,NVEGTYPE)) 00173 CALL INI_DATA_PARAM(XPAR_VEGTYPE,PROOT_EXTINCTION=XPAR_ROOT_EXTINCTION) 00174 LDATA_ROOT_EXTINCTION = .TRUE. 00175 ENDIF 00176 ! 00177 IF (.NOT.LDATA_ROOT_LIN) THEN 00178 ALLOCATE(XPAR_ROOT_LIN(NDIM,NVEGTYPE)) 00179 CALL INI_DATA_PARAM(XPAR_VEGTYPE,PROOT_LIN=XPAR_ROOT_LIN) 00180 LDATA_ROOT_LIN = .TRUE. 00181 ENDIF 00182 ! 00183 ENDIF 00184 ! 00185 !dice: depth of the soil column for the calculation of the frozen soil fraction (m) 00186 IF (LDATA_DG .AND. .NOT.LDATA_DICE) THEN 00187 ! 00188 ALLOCATE(XPAR_DICE(NDIM,NVEGTYPE)) 00189 ! 00190 IF(HISBA/='DIF')THEN 00191 XPAR_DICE(:,:)=MAX(0.2,0.8*XPAR_DG(:,2,:)) 00192 LDATA_DICE=.TRUE. 00193 ENDIF 00194 ! 00195 ENDIF 00196 ! 00197 ! 2. Calculations of parameters dependant on others 00198 ! ------------------------------------------------- 00199 ! 00200 !emis 00201 IF (.NOT.LDATA_EMIS .AND. LDATA_VEG) THEN 00202 ALLOCATE(XPAR_EMIS(NDIM,NTIME,NVEGTYPE)) 00203 CALL INI_DATA_PARAM(XPAR_VEGTYPE,PVEG_IN=XPAR_VEG,PEMIS_ECO=XPAR_EMIS) 00204 LDATA_EMIS=.TRUE. 00205 ENDIF 00206 !z0 00207 IF (.NOT.LDATA_Z0 .AND. (LDATA_LAI .OR.LDATA_H_TREE)) THEN 00208 ALLOCATE(XPAR_Z0(NDIM,NTIME,NVEGTYPE)) 00209 CALL INI_DATA_PARAM(XPAR_VEGTYPE,PLAI=XPAR_LAI,PH_TREE=XPAR_H_TREE,PZ0=XPAR_Z0) 00210 LDATA_Z0=.TRUE. 00211 ENDIF 00212 00213 !RSMIN 00214 IF (LDATA_LAI) THEN 00215 IF (.NOT.LDATA_RSMIN) THEN 00216 ALLOCATE(XPAR_RSMIN(NDIM,NVEGTYPE)) 00217 CALL INI_DATA_PARAM(XPAR_VEGTYPE,PRSMIN=XPAR_RSMIN) 00218 ENDIF 00219 LDATA_RSMIN=.TRUE. 00220 ENDIF 00221 00222 !parameters calculated on veg fraction 00223 IF (LDATA_VEG) THEN 00224 ! 00225 LDATA_LAI=.TRUE. 00226 ! 00227 IF (.NOT.LDATA_GAMMA) ALLOCATE(XPAR_GAMMA (NDIM,NVEGTYPE)) 00228 IF (.NOT.LDATA_WRMAX_CF) ALLOCATE(XPAR_WRMAX_CF (NDIM,NVEGTYPE)) 00229 IF (.NOT.LDATA_RGL) ALLOCATE(XPAR_RGL (NDIM,NVEGTYPE)) 00230 IF (.NOT.LDATA_CV) ALLOCATE(XPAR_CV (NDIM,NVEGTYPE)) 00231 IF (.NOT.LDATA_ALBNIR_VEG) ALLOCATE(XPAR_ALBNIR_VEG(NDIM,NVEGTYPE)) 00232 IF (.NOT.LDATA_ALBVIS_VEG) ALLOCATE(XPAR_ALBVIS_VEG(NDIM,NVEGTYPE)) 00233 IF (.NOT.LDATA_ALBUV_VEG) ALLOCATE(XPAR_ALBUV_VEG (NDIM,NVEGTYPE)) 00234 IF (.NOT.LDATA_GMES) ALLOCATE(XPAR_GMES (NDIM,NVEGTYPE)) 00235 IF (.NOT.LDATA_BSLAI) ALLOCATE(XPAR_BSLAI (NDIM,NVEGTYPE)) 00236 IF (.NOT.LDATA_SEFOLD) ALLOCATE(XPAR_SEFOLD (NDIM,NVEGTYPE)) 00237 IF (.NOT.LDATA_GC) ALLOCATE(XPAR_GC (NDIM,NVEGTYPE)) 00238 IF (.NOT.LDATA_LAIMIN) ALLOCATE(XPAR_LAIMIN (NDIM,NVEGTYPE)) 00239 IF (.NOT.LDATA_F2I) ALLOCATE(XPAR_F2I (NDIM,NVEGTYPE)) 00240 IF (.NOT.LDATA_CE_NITRO) ALLOCATE(XPAR_CE_NITRO (NDIM,NVEGTYPE)) 00241 IF (.NOT.LDATA_CF_NITRO) ALLOCATE(XPAR_CF_NITRO (NDIM,NVEGTYPE)) 00242 IF (.NOT.LDATA_CNA_NITRO) ALLOCATE(XPAR_CNA_NITRO (NDIM,NVEGTYPE)) 00243 ! 00244 IF (.NOT.LDATA_GAMMA) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGAMMA=XPAR_GAMMA) 00245 IF (.NOT.LDATA_WRMAX_CF) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PWRMAX_CF=XPAR_WRMAX_CF) 00246 IF (.NOT.LDATA_RGL) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PRGL=XPAR_RGL) 00247 IF (.NOT.LDATA_CV) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCV=XPAR_CV) 00248 IF (.NOT.LDATA_ALBNIR_VEG) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PALBNIR_VEG=XPAR_ALBNIR_VEG) 00249 IF (.NOT.LDATA_ALBVIS_VEG) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PALBVIS_VEG=XPAR_ALBVIS_VEG) 00250 IF (.NOT.LDATA_ALBUV_VEG) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PALBUV_VEG=XPAR_ALBUV_VEG) 00251 IF (HPHOTO == 'AST' .OR. HPHOTO == 'LST' .OR. HPHOTO == 'NIT' .OR. HPHOTO=='NCB') THEN 00252 IF (.NOT.LDATA_GMES) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGMES_ST=XPAR_GMES) 00253 IF (.NOT.LDATA_BSLAI) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PBSLAI_ST=XPAR_BSLAI) 00254 IF (.NOT.LDATA_SEFOLD) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PSEFOLD_ST=XPAR_SEFOLD) 00255 IF (.NOT.LDATA_GC) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGC_ST=XPAR_GC) 00256 ELSE 00257 IF (.NOT.LDATA_GMES) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGMES=XPAR_GMES) 00258 IF (.NOT.LDATA_BSLAI) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PBSLAI=XPAR_BSLAI) 00259 IF (.NOT.LDATA_SEFOLD) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PSEFOLD=XPAR_SEFOLD) 00260 IF (.NOT.LDATA_GC) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PGC=XPAR_GC) 00261 ENDIF 00262 IF (.NOT.LDATA_LAIMIN) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PLAIMIN=XPAR_LAIMIN) 00263 IF (.NOT.LDATA_F2I) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PF2I=XPAR_F2I) 00264 IF (.NOT.LDATA_CE_NITRO) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCE_NITRO=XPAR_CE_NITRO) 00265 IF (.NOT.LDATA_CF_NITRO) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCF_NITRO=XPAR_CF_NITRO) 00266 IF (.NOT.LDATA_CNA_NITRO) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PCNA_NITRO=XPAR_CNA_NITRO) 00267 ! 00268 LDATA_GAMMA=.TRUE. 00269 LDATA_WRMAX_CF=.TRUE. 00270 LDATA_RGL=.TRUE. 00271 LDATA_CV=.TRUE. 00272 LDATA_ALBNIR_VEG=.TRUE. 00273 LDATA_ALBVIS_VEG=.TRUE. 00274 LDATA_ALBUV_VEG=.TRUE. 00275 LDATA_GMES=.TRUE. 00276 LDATA_BSLAI=.TRUE. 00277 LDATA_SEFOLD=.TRUE. 00278 LDATA_GC=.TRUE. 00279 LDATA_LAIMIN=.TRUE. 00280 LDATA_F2I=.TRUE. 00281 LDATA_CE_NITRO=.TRUE. 00282 LDATA_CF_NITRO=.TRUE. 00283 LDATA_CNA_NITRO=.TRUE. 00284 ! 00285 LDATA_STRESS=.TRUE. 00286 ! 00287 ALLOCATE(LPAR_STRESS (NDIM,NVEGTYPE)) 00288 LPAR_STRESS(:,:) = .TRUE. 00289 DO JVEGTYPE=1,NVEGTYPE 00290 IF(XSTRESS(JVEGTYPE)<1.) LPAR_STRESS(:,JVEGTYPE) = .FALSE. 00291 ENDDO 00292 ! 00293 IF (.NOT.LDATA_IRRIG) THEN 00294 ALLOCATE(XPAR_IRRIG (NDIM,NTIME,NVEGTYPE)) 00295 CALL AV_PGD(XPAR_IRRIG(:,KDECADE2,:),PCOVER,XDATA_IRRIG(:,:),YVEG,'ARI',KDECADE=KDECADE2) 00296 LDATA_IRRIG=.TRUE. 00297 ENDIF 00298 ! 00299 IF (.NOT.LDATA_WATSUP) THEN 00300 ALLOCATE(XPAR_WATSUP (NDIM,NTIME,NVEGTYPE)) 00301 CALL AV_PGD(XPAR_WATSUP(:,KDECADE2,:),PCOVER,XDATA_WATSUP(:,:),YVEG,'ARI',KDECADE=KDECADE2) 00302 LDATA_WATSUP=.TRUE. 00303 ENDIF 00304 ! 00305 ENDIF 00306 ! 00307 ! 00308 IF (LDATA_VEGTYPE) THEN 00309 IF (.NOT.LDATA_Z0_O_Z0H) ALLOCATE(XPAR_Z0_O_Z0H (NDIM,NVEGTYPE)) 00310 IF (.NOT.LDATA_DMAX) ALLOCATE(XPAR_DMAX (NDIM,NVEGTYPE)) 00311 IF (.NOT.LDATA_RE25) ALLOCATE(XPAR_RE25 (NDIM,NVEGTYPE)) 00312 IF (.NOT.LDATA_Z0_O_Z0H) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PZ0_O_Z0H=XPAR_Z0_O_Z0H) 00313 IF (HPHOTO == 'AST' .OR. HPHOTO == 'LST' .OR. HPHOTO == 'NIT' .OR. HPHOTO=='NCB') THEN 00314 IF (.NOT.LDATA_DMAX) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PDMAX_ST=XPAR_DMAX) 00315 ELSE 00316 IF (.NOT.LDATA_DMAX) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PDMAX=XPAR_DMAX) 00317 ENDIF 00318 IF (.NOT.LDATA_RE25) CALL INI_DATA_PARAM(XPAR_VEGTYPE,PRE25=XPAR_RE25) 00319 ! 00320 LDATA_Z0_O_Z0H=.TRUE. 00321 LDATA_DMAX=.TRUE. 00322 LDATA_RE25=.TRUE. 00323 ENDIF 00324 ! 00325 IF (LHOOK) CALL DR_HOOK('INIT_ISBA_MIXPAR',1,ZHOOK_HANDLE) 00326 ! 00327 !------------------------------------------------------------------------------- 00328 ! 00329 END SUBROUTINE INIT_ISBA_MIXPAR
1.8.0