SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE READ_PGD_ISBA_n(HPROGRAM,OLAND_USE) 00003 ! ######################################### 00004 ! 00005 !!**** *READ_PGD_ISBA_n* - routine to initialise ISBA physiographic variables 00006 !! 00007 !! PURPOSE 00008 !! ------- 00009 !! 00010 !!** METHOD 00011 !! ------ 00012 !! 00013 !! EXTERNAL 00014 !! -------- 00015 !! 00016 !! 00017 !! IMPLICIT ARGUMENTS 00018 !! ------------------ 00019 !! 00020 !! REFERENCE 00021 !! --------- 00022 !! 00023 !! 00024 !! AUTHOR 00025 !! ------ 00026 !! V. Masson *Meteo France* 00027 !! 00028 !! MODIFICATIONS 00029 !! ------------- 00030 !! Original 01/2003 00031 !! P. Le Moigne 12/2004 : add type of photosynthesis 00032 !! B. Decharme 2008 : add XWDRAIN 00033 !! B. Decharme 06/2009 : add topographic index statistics 00034 !! A.L. Gibelin 04/2009 : dimension NBIOMASS for ISBA-A-gs 00035 !! B. Decharme 07/2012 : files of data for permafrost area and for SOC top and sub soil 00036 !------------------------------------------------------------------------------- 00037 ! 00038 !* 0. DECLARATIONS 00039 ! ------------ 00040 ! 00041 USE MODD_TYPE_DATE_SURF 00042 ! 00043 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER 00044 ! 00045 USE MODD_SURF_PAR, ONLY : XUNDEF 00046 USE MODD_SURF_ATM_n, ONLY : CNATURE 00047 USE MODD_ISBA_n, ONLY : NPATCH, TTIME, XCOVER, XZS, CISBA, CPEDOTF, & 00048 CPHOTO, LTR_ML, CRUNOFF, XCLAY, XSAND, & 00049 XSOC, LSOCP, LNOF, XRM_PATCH, & 00050 NGROUND_LAYER, NNBIOMASS, & 00051 XAOSIP, XAOSIM, XAOSJP, XAOSJM, & 00052 XHO2IP, XHO2IM, XHO2JP, XHO2JM, & 00053 XSSO_SLOPE, XSSO_STDEV, XRUNOFFB, & 00054 XZ0EFFJPDIR, LCOVER, LECOCLIMAP, LCTI, & 00055 XWDRAIN, XTI_MIN, XTI_MAX, XTI_MEAN, & 00056 XTI_STD, XTI_SKEW, XSOILGRID, XPH, XFERT, & 00057 LPERM, XPERM 00058 USE MODD_ISBA_GRID_n, ONLY : XLAT, XLON, XMESH_SIZE, CGRID, XGRID_PAR, NDIM 00059 USE MODD_ISBA_PAR, ONLY : XOPTIMGRID 00060 USE MODD_GR_BIOG_n, ONLY : XISOPOT, XMONOPOT 00061 USE MODD_CH_ISBA_n, ONLY : LCH_BIO_FLUX, LCH_NO_FLUX 00062 ! 00063 USE MODI_READ_SURF 00064 USE MODI_READ_GRID 00065 USE MODI_READ_LCOVER 00066 USE MODI_READ_PGD_ISBA_PAR_n 00067 USE MODI_READ_PGD_TSZ0_PAR_n 00068 ! 00069 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00070 USE PARKIND1 ,ONLY : JPRB 00071 ! 00072 USE MODI_GET_TYPE_DIM_n 00073 USE MODI_READ_LECOCLIMAP 00074 ! 00075 USE MODI_ABOR1_SFX 00076 IMPLICIT NONE 00077 ! 00078 !* 0.1 Declarations of arguments 00079 ! ------------------------- 00080 ! 00081 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! calling program 00082 LOGICAL, INTENT(IN) :: OLAND_USE ! 00083 ! 00084 !* 0.2 Declarations of local variables 00085 ! ------------------------------- 00086 ! 00087 INTEGER :: IRESP ! Error code after redding 00088 ! 00089 CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read 00090 ! 00091 ! 00092 INTEGER :: JLAYER ! loop counter on layers 00093 INTEGER :: IVERSION, IBUGFIX ! surface version 00094 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00095 ! 00096 !------------------------------------------------------------------------------- 00097 ! 00098 !* 1D physical dimension 00099 ! 00100 IF (LHOOK) CALL DR_HOOK('READ_PGD_ISBA_N',0,ZHOOK_HANDLE) 00101 YRECFM='SIZE_NATURE' 00102 CALL GET_TYPE_DIM_n('NATURE',NDIM) 00103 ! 00104 YRECFM='VERSION' 00105 CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP) 00106 ! 00107 YRECFM='BUG' 00108 CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP) 00109 ! 00110 !* 2. Dimension initializations: 00111 ! ------------------------- 00112 ! 00113 !* soil scheme 00114 ! 00115 YRECFM='ISBA' 00116 CALL READ_SURF(HPROGRAM,YRECFM,CISBA,IRESP) 00117 ! 00118 IF (IVERSION>=7) THEN 00119 ! 00120 !* Pedo-transfert function 00121 ! 00122 YRECFM='PEDOTF' 00123 CALL READ_SURF(HPROGRAM,YRECFM,CPEDOTF,IRESP) 00124 ! 00125 ELSE 00126 CPEDOTF = 'CH78' 00127 ENDIF 00128 ! 00129 !* type of photosynthesis 00130 ! 00131 YRECFM='PHOTO' 00132 CALL READ_SURF(HPROGRAM,YRECFM,CPHOTO,IRESP) 00133 ! 00134 !* new radiative transfert 00135 ! 00136 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=2) THEN 00137 ! 00138 YRECFM='TR_ML' 00139 CALL READ_SURF(HPROGRAM,YRECFM,LTR_ML,IRESP) 00140 ! 00141 ELSE 00142 LTR_ML = .FALSE. 00143 ENDIF 00144 ! 00145 !* threshold to remove little fractions of patches 00146 ! 00147 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN 00148 ! 00149 YRECFM='RM_PATCH' 00150 CALL READ_SURF(HPROGRAM,YRECFM,XRM_PATCH,IRESP) 00151 ! 00152 ELSE 00153 XRM_PATCH = 0.0 00154 ENDIF 00155 ! 00156 !* number of soil layers 00157 ! 00158 YRECFM='GROUND_LAYER' 00159 CALL READ_SURF(HPROGRAM,YRECFM,NGROUND_LAYER,IRESP) 00160 ! 00161 !* Reference grid for DIF 00162 ! 00163 IF(CISBA=='DIF') THEN 00164 ALLOCATE(XSOILGRID(NGROUND_LAYER)) 00165 XSOILGRID=XUNDEF 00166 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=2) THEN 00167 YRECFM='SOILGRID' 00168 CALL READ_SURF(HPROGRAM,YRECFM,XSOILGRID,IRESP,HDIR='-') 00169 ELSE 00170 XSOILGRID(1:NGROUND_LAYER)=XOPTIMGRID(1:NGROUND_LAYER) 00171 ENDIF 00172 ELSE 00173 ALLOCATE(XSOILGRID(0)) 00174 ENDIF 00175 ! 00176 !* number of biomass pools 00177 ! 00178 IF (IVERSION>=6) THEN 00179 YRECFM='NBIOMASS' 00180 CALL READ_SURF(HPROGRAM,YRECFM,NNBIOMASS,IRESP) 00181 ELSE 00182 SELECT CASE (CPHOTO) 00183 CASE ('AGS','LAI','AST','LST') 00184 NNBIOMASS = 1 00185 CASE ('NIT') 00186 NNBIOMASS = 3 00187 CASE ('NCB') 00188 NNBIOMASS = 6 00189 END SELECT 00190 ENDIF 00191 ! 00192 !* number of tiles 00193 ! 00194 YRECFM='PATCH_NUMBER' 00195 CALL READ_SURF(HPROGRAM,YRECFM,NPATCH,IRESP) 00196 ! 00197 ! 00198 !* 3. Physiographic data fields: 00199 ! ------------------------- 00200 ! 00201 ! 00202 !* 3.1 Cover classes : 00203 ! ------------- 00204 ! 00205 ALLOCATE(LCOVER(JPCOVER)) 00206 CALL READ_LCOVER(HPROGRAM,LCOVER) 00207 ! 00208 ALLOCATE(XCOVER(NDIM,JPCOVER)) 00209 CALL READ_SURF(HPROGRAM,'COVER',XCOVER(:,:),LCOVER,IRESP) 00210 ! 00211 !* 3.2 Orography : 00212 ! --------- 00213 ! 00214 ! 00215 ALLOCATE(XZS(NDIM)) 00216 YRECFM='ZS' 00217 CALL READ_SURF(HPROGRAM,YRECFM,XZS(:),IRESP) 00218 ! 00219 ! 00220 !* latitude, longitude, mesh size, and heading of JP axis (deg from N clockwise) 00221 ! 00222 ALLOCATE(XLAT (NDIM)) 00223 ALLOCATE(XLON (NDIM)) 00224 ALLOCATE(XMESH_SIZE (NDIM)) 00225 ALLOCATE(XZ0EFFJPDIR(NDIM)) 00226 CALL READ_GRID(HPROGRAM,CGRID,XGRID_PAR,XLAT,XLON,XMESH_SIZE,IRESP,XZ0EFFJPDIR) 00227 ! 00228 !* clay fraction : attention, seul un niveau est present dans le fichier 00229 !* on rempli tout les niveaux de XCLAY avec les valeurs du fichiers 00230 ! 00231 ALLOCATE(XCLAY(NDIM,NGROUND_LAYER)) 00232 YRECFM='CLAY' 00233 CALL READ_SURF(HPROGRAM,YRECFM,XCLAY(:,1),IRESP) 00234 DO JLAYER=2,NGROUND_LAYER 00235 XCLAY(:,JLAYER)=XCLAY(:,1) 00236 END DO 00237 ! 00238 !* sand fraction 00239 ! 00240 ALLOCATE(XSAND(NDIM,NGROUND_LAYER)) 00241 YRECFM='SAND' 00242 CALL READ_SURF(HPROGRAM,YRECFM,XSAND(:,1),IRESP) 00243 DO JLAYER=2,NGROUND_LAYER 00244 XSAND(:,JLAYER)=XSAND(:,1) 00245 END DO 00246 ! 00247 !* Soil organic carbon profile 00248 ! 00249 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN 00250 YRECFM='SOCP' 00251 CALL READ_SURF(HPROGRAM,YRECFM,LSOCP,IRESP) 00252 ELSE 00253 LSOCP=.FALSE. 00254 ENDIF 00255 ! 00256 IF(LSOCP)THEN 00257 ! 00258 ALLOCATE(XSOC (NDIM,NGROUND_LAYER)) 00259 ! 00260 YRECFM='SOC_TOP' 00261 CALL READ_SURF(HPROGRAM,YRECFM,XSOC(:,1),IRESP) 00262 YRECFM='SOC_SUB' 00263 CALL READ_SURF(HPROGRAM,YRECFM,XSOC(:,2),IRESP) 00264 ! 00265 DO JLAYER=2,NGROUND_LAYER 00266 XSOC (:,JLAYER)=XSOC (:,2) 00267 END DO 00268 ! 00269 ELSE 00270 ! 00271 ALLOCATE(XSOC (0,1)) 00272 ! 00273 ENDIF 00274 ! 00275 !* permafrost distribution 00276 ! 00277 IF (IVERSION>7 .OR. IVERSION==7 .AND. IBUGFIX>=3) THEN 00278 YRECFM='PERMAFROST' 00279 CALL READ_SURF(HPROGRAM,YRECFM,LPERM,IRESP) 00280 ELSE 00281 LPERM=.FALSE. 00282 ENDIF 00283 ! 00284 IF(LPERM)THEN 00285 ! 00286 ALLOCATE(XPERM (NDIM)) 00287 ! 00288 YRECFM='PERM' 00289 CALL READ_SURF(HPROGRAM,YRECFM,XPERM(:),IRESP) 00290 ! 00291 ELSE 00292 ! 00293 ALLOCATE(XPERM (0)) 00294 ! 00295 ENDIF 00296 ! 00297 IF (IVERSION>7 .OR. (IVERSION==7 .AND. IBUGFIX>=3)) THEN 00298 YRECFM='NO' 00299 CALL READ_SURF(HPROGRAM,YRECFM,LNOF,IRESP) 00300 ELSE 00301 LNOF = .FALSE. 00302 ENDIF 00303 ! 00304 !SOILNOX 00305 ! 00306 IF (LCH_NO_FLUX) THEN 00307 ! 00308 IF (LNOF) THEN 00309 ! 00310 ALLOCATE(XPH(NDIM)) 00311 YRECFM='PH' 00312 CALL READ_SURF(HPROGRAM,YRECFM,XPH(:),IRESP) 00313 ! 00314 ALLOCATE(XFERT(NDIM)) 00315 YRECFM='FERT' 00316 CALL READ_SURF(HPROGRAM,YRECFM,XFERT(:),IRESP) 00317 ! 00318 ELSE 00319 CALL ABOR1_SFX("READ_PGD_ISBAn: WITH LCH_NO_FLUX=T, PH AND FERT FIELDS ARE GIVEN AT PGD STEP") 00320 ENDIF 00321 ! 00322 ELSE 00323 ALLOCATE(XPH (0)) 00324 ALLOCATE(XFERT(0)) 00325 END IF 00326 ! 00327 !* subgrid-scale orography parameters to compute dynamical roughness length 00328 ! 00329 ALLOCATE(XAOSIP(NDIM)) 00330 YRECFM='AOSIP' 00331 CALL READ_SURF(HPROGRAM,YRECFM,XAOSIP,IRESP) 00332 ! 00333 ALLOCATE(XAOSIM(NDIM)) 00334 YRECFM='AOSIM' 00335 CALL READ_SURF(HPROGRAM,YRECFM,XAOSIM,IRESP) 00336 00337 ALLOCATE(XAOSJP(NDIM)) 00338 YRECFM='AOSJP' 00339 CALL READ_SURF(HPROGRAM,YRECFM,XAOSJP,IRESP) 00340 ! 00341 ALLOCATE(XAOSJM(NDIM)) 00342 YRECFM='AOSJM' 00343 CALL READ_SURF(HPROGRAM,YRECFM,XAOSJM,IRESP) 00344 ! 00345 ALLOCATE(XHO2IP(NDIM)) 00346 YRECFM='HO2IP' 00347 CALL READ_SURF(HPROGRAM,YRECFM,XHO2IP,IRESP) 00348 ! 00349 ALLOCATE(XHO2IM(NDIM)) 00350 YRECFM='HO2IM' 00351 CALL READ_SURF(HPROGRAM,YRECFM,XHO2IM,IRESP) 00352 ! 00353 ALLOCATE(XHO2JP(NDIM)) 00354 YRECFM='HO2JP' 00355 CALL READ_SURF(HPROGRAM,YRECFM,XHO2JP,IRESP) 00356 ! 00357 ALLOCATE(XHO2JM(NDIM)) 00358 YRECFM='HO2JM' 00359 CALL READ_SURF(HPROGRAM,YRECFM,XHO2JM,IRESP) 00360 ! 00361 !* orographic parameter to compute effective surface of energy exchanges 00362 ! 00363 ALLOCATE(XSSO_SLOPE(NDIM)) 00364 YRECFM='SSO_SLOPE' 00365 CALL READ_SURF(HPROGRAM,YRECFM,XSSO_SLOPE,IRESP) 00366 ! 00367 !* orographic standard deviation for subgrid-scale orographic drag 00368 ! 00369 ALLOCATE(XSSO_STDEV(NDIM)) 00370 YRECFM='SSO_STDEV' 00371 CALL READ_SURF(HPROGRAM,YRECFM,XSSO_STDEV(:),IRESP) 00372 ! 00373 !* orographic runoff coefficient 00374 ! 00375 ALLOCATE(XRUNOFFB(NDIM)) 00376 YRECFM='RUNOFFB' 00377 CALL READ_SURF(HPROGRAM,YRECFM,XRUNOFFB,IRESP) 00378 ! 00379 !* subgrid drainage coefficient 00380 ! 00381 ALLOCATE(XWDRAIN(NDIM)) 00382 IF (IVERSION<=3) THEN 00383 XWDRAIN = 0. 00384 ELSE 00385 YRECFM='WDRAIN' 00386 CALL READ_SURF(HPROGRAM,YRECFM,XWDRAIN,IRESP) 00387 ENDIF 00388 ! 00389 !* topographic index statistics 00390 ! 00391 IF(CRUNOFF=='SGH ' .AND. IVERSION>=5) THEN 00392 ! 00393 YRECFM='CTI' 00394 CALL READ_SURF(HPROGRAM,YRECFM,LCTI,IRESP) 00395 ! 00396 IF (.NOT.LCTI) CALL ABOR1_SFX("READ_PGD_ISBA_n:WITH CRUNOFF=SGH, CTI MAPS MUST BE GIVEN TO PGD") 00397 ! 00398 ALLOCATE(XTI_MIN(NDIM)) 00399 ALLOCATE(XTI_MAX(NDIM)) 00400 ALLOCATE(XTI_MEAN(NDIM)) 00401 ALLOCATE(XTI_STD(NDIM)) 00402 ALLOCATE(XTI_SKEW(NDIM)) 00403 ! 00404 YRECFM='TI_MIN' 00405 CALL READ_SURF(HPROGRAM,YRECFM,XTI_MIN,IRESP) 00406 ! 00407 YRECFM='TI_MAX' 00408 CALL READ_SURF(HPROGRAM,YRECFM,XTI_MAX,IRESP) 00409 ! 00410 YRECFM='TI_MEAN' 00411 CALL READ_SURF(HPROGRAM,YRECFM,XTI_MEAN,IRESP) 00412 ! 00413 YRECFM='TI_STD' 00414 CALL READ_SURF(HPROGRAM,YRECFM,XTI_STD,IRESP) 00415 ! 00416 YRECFM='TI_SKEW' 00417 CALL READ_SURF(HPROGRAM,YRECFM,XTI_SKEW,IRESP) 00418 ! 00419 ELSE 00420 ! 00421 ALLOCATE(XTI_MIN(0)) 00422 ALLOCATE(XTI_MAX(0)) 00423 ALLOCATE(XTI_MEAN(0)) 00424 ALLOCATE(XTI_STD(0)) 00425 ALLOCATE(XTI_SKEW(0)) 00426 ! 00427 ENDIF 00428 ! 00429 !------------------------------------------------------------------------------- 00430 ! 00431 !* biogenic chemical emissions 00432 ! 00433 IF (LCH_BIO_FLUX) THEN 00434 ALLOCATE(XISOPOT(NDIM)) 00435 YRECFM='EMIS_ISOPOT' 00436 CALL READ_SURF(HPROGRAM,YRECFM,XISOPOT,IRESP) 00437 ! 00438 ALLOCATE(XMONOPOT(NDIM)) 00439 YRECFM='EMIS_MONOPOT' 00440 CALL READ_SURF(HPROGRAM,YRECFM,XMONOPOT,IRESP) 00441 ELSE 00442 ALLOCATE(XISOPOT (0)) 00443 ALLOCATE(XMONOPOT(0)) 00444 END IF 00445 ! 00446 !------------------------------------------------------------------------------- 00447 ! 00448 !* 4. Physiographic data fields not to be computed by ecoclimap 00449 ! --------------------------------------------------------- 00450 ! 00451 CALL READ_LECOCLIMAP(HPROGRAM,LECOCLIMAP) 00452 ! 00453 CALL READ_PGD_ISBA_PAR_n(HPROGRAM,NDIM,OLAND_USE) 00454 IF (CNATURE == 'TSZ0') CALL READ_PGD_TSZ0_PAR_n(HPROGRAM) 00455 ! 00456 IF (LHOOK) CALL DR_HOOK('READ_PGD_ISBA_N',1,ZHOOK_HANDLE) 00457 !------------------------------------------------------------------------------- 00458 ! 00459 END SUBROUTINE READ_PGD_ISBA_n