SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_pgd_isban.F90
Go to the documentation of this file.
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