SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_nam_pgd_gauss_index.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_NAM_PGD_GAUSS_INDEX(HPROGRAM,OINDEX_STORE,HINDEX_1KM,HINDEX_10KM,    &
00003                                             HINDEX_100KM,HCOVER,HZS,HCLAY,HSAND,HCTI,      &
00004                                             HPERM,HSOC_TOP,HSOC_SUB,                       & 
00005                                             OIMP_COVER,OIMP_ZS,OIMP_CLAY,OIMP_SAND,        &
00006                                             OIMP_CTI,OIMP_PERM,OIMP_SOC,                   &
00007                                             OUNIF_COVER,OUNIF_ZS,OUNIF_SAND,               &
00008                                             OUNIF_CLAY,OUNIF_CTI,OUNIF_PERM,OUNIF_SOC,     &
00009                                             OSTOP_PGD                 )  
00010 !     ####################################################################################
00011 !!
00012 !!    PURPOSE
00013 !!    -------
00014 !!     
00015 !!    *READ_NAM_PGD_GAUSS_INDEX* reads namelist for Gauss grid index
00016 !!
00017 !!    METHOD
00018 !!    ------
00019 !!   
00020 !!    EXTERNAL
00021 !!    --------
00022 !!
00023 !!
00024 !!    IMPLICIT ARGUMENTS
00025 !!    ------------------
00026 !!
00027 !!
00028 !!    REFERENCE
00029 !!    ---------
00030 !!
00031 !!    AUTHOR
00032 !!    ------
00033 !!
00034 !!    B. Decharme                   Meteo-France
00035 !!
00036 !!    MODIFICATION
00037 !!    ------------
00038 !!
00039 !!    Original     02/2010
00040 !----------------------------------------------------------------------------
00041 !
00042 !*    0.     DECLARATION
00043 !            -----------
00044 !
00045 USE MODD_SURF_PAR,       ONLY : XUNDEF
00046 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
00047 USE MODD_SURF_ATM_n,     ONLY : CNATURE
00048 !
00049 USE MODI_GET_LUOUT
00050 USE MODI_OPEN_NAMELIST
00051 USE MODI_CLOSE_NAMELIST
00052 !
00053 USE MODE_POS_SURF
00054 !
00055 USE MODI_READ_NAM_PGD_COVER
00056 USE MODI_READ_NAM_PGD_OROGRAPHY
00057 !
00058 !
00059 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00060 USE PARKIND1  ,ONLY : JPRB
00061 !
00062 USE MODI_ABOR1_SFX
00063 !
00064 USE MODI_READ_NAM_PGD_ISBA
00065 IMPLICIT NONE
00066 !
00067 !*    0.1    Declaration of dummy arguments
00068 !            ------------------------------
00069 !
00070  CHARACTER(LEN=6),    INTENT(IN)    :: HPROGRAM     
00071 LOGICAL,             INTENT(OUT)   :: OINDEX_STORE
00072  CHARACTER(LEN=28),   INTENT(OUT)   :: HINDEX_1KM
00073  CHARACTER(LEN=28),   INTENT(OUT)   :: HINDEX_10KM
00074  CHARACTER(LEN=28),   INTENT(OUT)   :: HINDEX_100KM
00075  CHARACTER(LEN=28),   INTENT(OUT)   :: HCOVER
00076  CHARACTER(LEN=28),   INTENT(OUT)   :: HZS
00077  CHARACTER(LEN=28),   INTENT(OUT)   :: HCLAY
00078  CHARACTER(LEN=28),   INTENT(OUT)   :: HSAND
00079  CHARACTER(LEN=28),   INTENT(OUT)   :: HCTI
00080  CHARACTER(LEN=28),   INTENT(OUT)   :: HPERM
00081  CHARACTER(LEN=28),   INTENT(OUT)   :: HSOC_TOP
00082  CHARACTER(LEN=28),   INTENT(OUT)   :: HSOC_SUB
00083 LOGICAL,             INTENT(OUT)   :: OIMP_COVER
00084 LOGICAL,             INTENT(OUT)   :: OIMP_ZS
00085 LOGICAL,             INTENT(OUT)   :: OIMP_CLAY
00086 LOGICAL,             INTENT(OUT)   :: OIMP_SAND
00087 LOGICAL,             INTENT(OUT)   :: OIMP_CTI
00088 LOGICAL,             INTENT(OUT)   :: OIMP_PERM
00089 LOGICAL,             INTENT(OUT)   :: OIMP_SOC
00090 LOGICAL,             INTENT(OUT)   :: OUNIF_COVER
00091 LOGICAL,             INTENT(OUT)   :: OUNIF_ZS 
00092 LOGICAL,             INTENT(OUT)   :: OUNIF_SAND
00093 LOGICAL,             INTENT(OUT)   :: OUNIF_CLAY
00094 LOGICAL,             INTENT(OUT)   :: OUNIF_CTI
00095 LOGICAL,             INTENT(OUT)   :: OUNIF_PERM
00096 LOGICAL,             INTENT(OUT)   :: OUNIF_SOC
00097 LOGICAL,             INTENT(OUT)   :: OSTOP_PGD
00098 !
00099 !
00100 !*    0.2    Declaration of local variables
00101 !            ------------------------------
00102 !
00103 INTEGER                         :: ILUOUT    ! output listing logical unit
00104 INTEGER                         :: ILUNAM    ! namelist file logical unit
00105 LOGICAL                         :: GFOUND    ! flag when namelist is present
00106 !
00107 !*    0.3    Declaration of cover namelist
00108 !            -----------------------------
00109 !
00110 REAL, DIMENSION(JPCOVER) :: XUNIF_COVER    ! value of each cover (cover will be
00111 !                                                   uniform on the horizontal)
00112  CHARACTER(LEN=28)        :: YCOVER         ! file name for cover types
00113  CHARACTER(LEN=6)         :: YCOVERFILETYPE ! data file type
00114 REAL                     :: XRM_COVER      ! limit of coverage under which the
00115                                            ! cover is removed. Default is 1.E-6
00116 REAL                     :: XRM_COAST      ! limit of coast coverage under which
00117                                            ! the coast is replaced by sea or
00118                                            ! inland water. Default is 1.
00119 REAL                     :: XRM_LAKE       ! limit of inland lake coverage under which
00120                                            ! the water is removed. Default is 0.0                                        
00121 REAL                     :: XRM_SEA        ! limit of sea coverage under which
00122                                            ! the sea is removed. Default is 0.0
00123 LOGICAL                  :: LORCA_GRID     ! flag to compatibility between Surfex and Orca grid 
00124                                            ! (Earth Model over Antarctic)
00125 REAL                     :: XLAT_ANT       ! Lattitude limit from Orca grid (Antartic)
00126 LOGICAL                  :: LIMP_COVER     ! Imposed values for Cover from another PGD file
00127 !
00128 !*    0.4    Declaration of orography namelist
00129 !            ---------------------------------
00130 !
00131  CHARACTER(LEN=28)        :: YZS         ! file name for orography
00132  CHARACTER(LEN=6)         :: YZSFILETYPE ! data file type
00133 REAL                     :: XUNIF_ZS    ! uniform orography
00134  CHARACTER(LEN=3)         :: COROGTYPE   ! orogpraphy type 
00135 REAL                     :: XENV        ! parameter for enveloppe orography:
00136 LOGICAL                  :: LIMP_ZS     ! Imposed orography from another PGD file
00137 !
00138 !*    0.5    Declaration of Nature namelist
00139 !            ------------------------------
00140 !
00141 INTEGER                  :: NPATCH           ! number of patches
00142 INTEGER                  :: NGROUND_LAYER    ! number of soil layers
00143  CHARACTER(LEN=3)         :: CISBA            ! ISBA option
00144  CHARACTER(LEN=4)         :: CPEDOTF          !
00145  CHARACTER(LEN=3)         :: CPHOTO           ! photosynthesis option
00146 LOGICAL                  :: GTR_ML           ! new radiative transfert
00147 REAL                     :: ZRM_PATCH        ! threshold to remove little fractions of patches
00148  CHARACTER(LEN=28)        :: YSAND            ! file name for sand fraction
00149  CHARACTER(LEN=28)        :: YCLAY            ! file name for clay fraction
00150  CHARACTER(LEN=28)        :: YCTI             ! file name for topographic index
00151  CHARACTER(LEN=28)        :: YPERM            ! file name for permafrost distribution
00152  CHARACTER(LEN=28)        :: YRUNOFFB         ! file name for runoffb parameter
00153  CHARACTER(LEN=28)        :: YWDRAIN          ! file name for wdrain parameter
00154  CHARACTER(LEN=28)        :: YSOC_TOP         ! file name for organic carbon
00155  CHARACTER(LEN=28)        :: YSOC_SUB         ! file name for organic carbon
00156  CHARACTER(LEN=6)         :: YSANDFILETYPE    ! sand data file type
00157  CHARACTER(LEN=6)         :: YCLAYFILETYPE    ! clay data file type
00158  CHARACTER(LEN=6)         :: YCTIFILETYPE     ! topographic index data file type
00159  CHARACTER(LEN=6)         :: YPERMFILETYPE    ! permafrost distribution data file type
00160  CHARACTER(LEN=6)         :: YRUNOFFBFILETYPE ! subgrid runoff data file type
00161  CHARACTER(LEN=6)         :: YWDRAINFILETYPE  ! subgrid drainage data file type
00162  CHARACTER(LEN=6)         :: YSOCFILETYPE     ! organic carbon data file type
00163 LOGICAL                  :: LIMP_SAND        ! Imposed maps of Sand from another PGD file
00164 LOGICAL                  :: LIMP_CLAY        ! Imposed maps of Clay from another PGD file
00165 LOGICAL                  :: LIMP_CTI         ! Imposed values for topographic index statistics from another PGD file
00166 LOGICAL                  :: LIMP_PERM        ! Imposed maps of permafrost distribution
00167 LOGICAL                  :: LIMP_SOC         ! Imposed maps of organic carbon
00168 REAL                     :: XUNIF_SAND       ! uniform value of sand fraction
00169 REAL                     :: XUNIF_CLAY       ! uniform value of clay fraction
00170 REAL                     :: XUNIF_RUNOFFB    ! uniform value of subgrid runoff coefficient
00171 REAL                     :: XUNIF_WDRAIN     ! uniform value of subgrid drainage coefficient
00172 REAL                     :: XUNIF_PERM       ! uniform value of permafrost distribution
00173 REAL                     :: XUNIF_SOC_TOP    ! uniform value of organic carbon top soil (kg/m2)
00174 REAL                     :: XUNIF_SOC_SUB    ! uniform value of organic carbon sub soil (kg/m2)
00175 REAL, DIMENSION(150)     :: ZSOILGRID        ! Soil layer thickness for DIF
00176 !
00177 ! NO flux
00178 !
00179  CHARACTER(LEN=28)        :: YPH           ! file name for pH
00180  CHARACTER(LEN=28)        :: YFERT         ! file name for fertilisation rate
00181  CHARACTER(LEN=6)         :: YPHFILETYPE   ! pH data file type
00182  CHARACTER(LEN=6)         :: YFERTFILETYPE ! fertilisation data file type
00183 REAL                     :: XUNIF_PH      ! uniform value of pH
00184 REAL                     :: XUNIF_FERT    ! uniform value of fertilisation rate
00185 !
00186 !*    0.6    Declaration of gauss namelist
00187 !            -----------------------------
00188 !
00189 LOGICAL                  :: LINDEX_STORE
00190 LOGICAL                  :: LSTOP_PGD
00191 !
00192  CHARACTER(LEN=28)        :: YINDEX_1KM        ! file name for gauss index at 1km
00193  CHARACTER(LEN=28)        :: YINDEX_10KM       ! file name for gauss index at 10km
00194  CHARACTER(LEN=28)        :: YINDEX_100KM      ! file name for gauss index at 100km
00195 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00196 !
00197 NAMELIST/NAM_GAUSS_INDEX/ LINDEX_STORE, LSTOP_PGD, YINDEX_1KM, YINDEX_10KM, YINDEX_100KM
00198 !
00199 !---------------------------------------------------------------
00200 !
00201 !*    1.      Initializations
00202 !             ---------------
00203 !
00204 IF (LHOOK) CALL DR_HOOK('READ_NAM_PGD_GAUSS_INDEX',0,ZHOOK_HANDLE)
00205 LINDEX_STORE    = .TRUE.
00206 LSTOP_PGD       = .FALSE.
00207 !
00208 YINDEX_1KM      = '                          '
00209 YINDEX_10KM     = '                          '
00210 YINDEX_100KM    = '                          '
00211 !
00212 XUNIF_COVER(:) = XUNDEF
00213 !
00214  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00215 !
00216 !-------------------------------------------------------------------------------
00217 !
00218 !*    2.      Read gauss index namelists
00219 !             --------------------------
00220 !
00221  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00222 !
00223  CALL POSNAM(ILUNAM,'NAM_GAUSS_INDEX',GFOUND,ILUOUT)
00224 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_GAUSS_INDEX)
00225 !
00226  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00227 !
00228 !-------------------------------------------------------------------------------
00229 !
00230 !*    3.      Read all namelists
00231 !             ------------------
00232 !
00233 ! Cover
00234 !
00235  CALL READ_NAM_PGD_COVER(HPROGRAM, YCOVER, YCOVERFILETYPE, XUNIF_COVER,  &
00236                           XRM_COVER, XRM_COAST, XRM_LAKE, XRM_SEA,        &
00237                           LORCA_GRID, XLAT_ANT, LIMP_COVER                )  
00238 !
00239 ! Orography
00240 !
00241  CALL READ_NAM_PGD_OROGRAPHY(HPROGRAM, YZS, YZSFILETYPE, XUNIF_ZS, &
00242                               COROGTYPE, XENV, LIMP_ZS   )  
00243 !
00244 ! Nature field
00245 !
00246 IF(CNATURE=='ISBA')THEN
00247 !
00248    CALL READ_NAM_PGD_ISBA(HPROGRAM, NPATCH, NGROUND_LAYER, CISBA, CPEDOTF,             &
00249                             CPHOTO, GTR_ML, ZRM_PATCH,                                 &
00250                             YCLAY, YCLAYFILETYPE, XUNIF_CLAY, LIMP_CLAY,               &
00251                             YSAND, YSANDFILETYPE, XUNIF_SAND, LIMP_SAND,               &
00252                             YSOC_TOP, YSOC_SUB, YSOCFILETYPE, XUNIF_SOC_TOP,           &
00253                             XUNIF_SOC_SUB, LIMP_SOC, YCTI, YCTIFILETYPE, LIMP_CTI,     &
00254                             YPERM, YPERMFILETYPE, XUNIF_PERM, LIMP_PERM,               & 
00255                             YRUNOFFB, YRUNOFFBFILETYPE, XUNIF_RUNOFFB,                 &
00256                             YWDRAIN,  YWDRAINFILETYPE , XUNIF_WDRAIN, ZSOILGRID,       &
00257                             YPH, YPHFILETYPE, XUNIF_PH, YFERT, YFERTFILETYPE,          &
00258                             XUNIF_FERT                                )  
00259 !
00260 ENDIF
00261 !
00262 !-------------------------------------------------------------------------------
00263 !
00264 OINDEX_STORE = LINDEX_STORE
00265 HINDEX_1KM   = YINDEX_1KM
00266 HINDEX_10KM  = YINDEX_10KM
00267 HINDEX_100KM = YINDEX_100KM
00268 OSTOP_PGD    = LSTOP_PGD
00269 !
00270 IF(LSTOP_PGD.AND..NOT.OINDEX_STORE)THEN
00271   WRITE(ILUOUT,*) ' '
00272   WRITE(ILUOUT,*) '***********************************************************'
00273   WRITE(ILUOUT,*) '* Error in READ_NAM_PGD_GAUSS_INDEX                       *'
00274   WRITE(ILUOUT,*) '* IF LSTOP_PGD, LINDEX_STORE must be True (default)       *'
00275   WRITE(ILUOUT,*) '***********************************************************'
00276   WRITE(ILUOUT,*) ' '
00277   CALL ABOR1_SFX('READ_NAM_PGD_GAUSS_INDEX: IF LSTOP_PGD, LINDEX_STORE must be True')        
00278 ENDIF
00279 !
00280 GFOUND=(LEN_TRIM(YINDEX_1KM)/=0.OR.LEN_TRIM(YINDEX_10KM)/=0.OR.LEN_TRIM(YINDEX_100KM)/=0)
00281 !
00282 IF(LSTOP_PGD.AND.GFOUND)THEN
00283   WRITE(ILUOUT,*) ' '
00284   WRITE(ILUOUT,*) '***************************************************************'
00285   WRITE(ILUOUT,*) '* Error in READ_NAM_PGD_GAUSS_INDEX                           *'
00286   WRITE(ILUOUT,*) '* IF file index is defined, LSTOP_PGD must be false (default) *'
00287   WRITE(ILUOUT,*) '***************************************************************'
00288   WRITE(ILUOUT,*) ' '
00289   CALL ABOR1_SFX('READ_NAM_PGD_GAUSS_INDEX: IF YINDEX, LSTOP_PGD must be false')        
00290 ENDIF
00291 !
00292 HCOVER = YCOVER
00293 HZS    = YZS
00294 HCLAY  = YCLAY
00295 HSAND  = YSAND
00296 HCTI   = YCTI
00297 HPERM  = YPERM
00298 HSOC_TOP  = YSOC_TOP
00299 HSOC_SUB  = YSOC_SUB
00300 !
00301 OIMP_COVER = LIMP_COVER
00302 OIMP_ZS    = LIMP_ZS
00303 OIMP_CLAY  = LIMP_CLAY
00304 OIMP_SAND  = LIMP_SAND
00305 OIMP_CTI   = LIMP_CTI
00306 OIMP_PERM  = LIMP_PERM
00307 OIMP_SOC   = LIMP_SOC
00308 !
00309 OUNIF_COVER = (ANY(XUNIF_COVER/=0.))
00310 OUNIF_ZS    = (XUNIF_ZS/=XUNDEF)
00311 OUNIF_SAND  = (XUNIF_SAND/=XUNDEF)
00312 OUNIF_CLAY  = (XUNIF_CLAY/=XUNDEF)
00313 OUNIF_CTI   = (LEN_TRIM(YCTI)==0)
00314 OUNIF_PERM  = (XUNIF_PERM/=XUNDEF)
00315 OUNIF_SOC   = (XUNIF_SOC_TOP/=XUNDEF.AND.XUNIF_SOC_TOP/=XUNDEF)
00316 !
00317 IF (LHOOK) CALL DR_HOOK('READ_NAM_PGD_GAUSS_INDEX',1,ZHOOK_HANDLE)
00318 !
00319 !-------------------------------------------------------------------------------
00320 !
00321 END SUBROUTINE READ_NAM_PGD_GAUSS_INDEX