SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/modd_surf_atmn.F90
Go to the documentation of this file.
00001 !     ####################
00002       MODULE MODD_SURF_ATM_n
00003 !     ######################
00004 !
00005 !!****  *MODD_SURF_ATM - declaration of surface parameters
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !     Declaration of surface parameters
00010 !
00011 !!
00012 !!**  IMPLICIT ARGUMENTS
00013 !!    ------------------
00014 !!      None 
00015 !!
00016 !!    REFERENCE
00017 !!    ---------
00018 !!
00019 !!    AUTHOR
00020 !!    ------
00021 !!      V. Masson and A. Boone   *Meteo France*
00022 !!
00023 !!    MODIFICATIONS
00024 !!    -------------
00025 !!      Original       01/2004
00026 !
00027 !*       0.   DECLARATIONS
00028 !             ------------
00029 !
00030 USE MODD_TYPE_DATE_SURF
00031 !
00032 !
00033 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00034 USE PARKIND1  ,ONLY : JPRB
00035 !
00036 IMPLICIT NONE
00037 
00038 TYPE SURF_ATM_t
00039 !
00040 !-----------------------------------------------------------------------------------------------------
00041 !
00042 ! Type of each surface scheme
00043 !
00044   CHARACTER(LEN=6) :: CTOWN      ! name of the urban surface scheme
00045   CHARACTER(LEN=6) :: CNATURE    ! name of the soil&vegetation surface scheme
00046   CHARACTER(LEN=6) :: CWATER     ! name of the scheme for inland water
00047   CHARACTER(LEN=6) :: CSEA       ! name for the ocean scheme
00048 !
00049 !-----------------------------------------------------------------------------------------------------
00050 !
00051 ! Surface/Tile Fractions:
00052 !
00053   REAL, POINTER, DIMENSION(:)   :: XTOWN     ! urban surface fraction of the grid box   (-)
00054   REAL, POINTER, DIMENSION(:)   :: XNATURE   ! natural surface fraction of the grid box (-)
00055   REAL, POINTER, DIMENSION(:)   :: XWATER    ! inland water fraction of the grid box    (-)
00056   REAL, POINTER, DIMENSION(:)   :: XSEA      ! sea/ocean fraction of the grid box       (-)
00057 !
00058 !-------------------------------------------------------------------------------
00059 !
00060 ! type of initialization of vegetation: from cover types (ecoclimap) or parameters prescribed
00061 !
00062   LOGICAL                        :: LECOCLIMAP ! T: parameters computed from ecoclimap
00063 !                                              ! F: they are read in the file
00064 !
00065 !-------------------------------------------------------------------------------
00066 !
00067 ! change water (not lake) to nature and/or town to rock : arrange cover properly
00068 !
00069   LOGICAL                        :: LWATER_TO_NATURE ! T: Change Wetland treated as inland water into nature 
00070   LOGICAL                        :: LTOWN_TO_ROCK    ! T: Change Town into Rock
00071 !
00072 !-------------------------------------------------------------------------------
00073 !
00074 ! include urban green areas for urbanized covers
00075 !
00076   LOGICAL                        :: LGARDEN    ! T: define urban green areas
00077 !                                              ! F: no urban green areas
00078 !
00079 !-----------------------------------------------------------------------------------------------------
00080 !
00081 ! Masks and number of grid elements for each tile surface
00082 !
00083 ! Sea/Ocean:
00084 !
00085   INTEGER                               :: NSIZE_SEA    ! number of grid points by proc containing a
00086 !                                                     ! sea surface                              (-)
00087   INTEGER                               :: NDIM_SEA     ! total number of grid points containing a
00088 !                                                     ! sea surface                             (-)
00089   INTEGER, POINTER, DIMENSION(:)    :: NR_SEA       ! sea/ocean surface mask                  (-)
00090 !
00091 ! Inland Water:
00092 !
00093   INTEGER                               :: NSIZE_WATER  ! number of grid points containing an 
00094 !                                                     ! inland water surface                    (-)
00095   INTEGER                               :: NDIM_WATER   ! total number of grid points by proc containing an
00096 !                                                     ! inland surface
00097   INTEGER, POINTER, DIMENSION(:)    :: NR_WATER
00098 !
00099 ! Town:
00100 !
00101   INTEGER                               :: NSIZE_TOWN   ! number of grid points by proc containing an 
00102 !                                                     ! urban surface                           (-)
00103   INTEGER                               :: NDIM_TOWN    ! total number of grid points containing an
00104 !                                                     ! urban surface
00105   INTEGER, POINTER, DIMENSION(:)    :: NR_TOWN      ! urban surface mask                      (-)
00106 !
00107 ! Natural surface:
00108 !
00109   INTEGER                               :: NSIZE_NATURE ! number of grid points by proc containing a 
00110 !                                                     ! natural surface                         (-)
00111   INTEGER                               :: NDIM_NATURE  ! total number of grid points containing a
00112 !                                                     ! natural surface                         (-)
00113   INTEGER, POINTER, DIMENSION(:)    :: NR_NATURE    ! natural surface mask                    (-)
00114 !
00115 ! All surfaces:
00116 !
00117   INTEGER                               :: NSIZE_FULL   ! total number of grid points by proc     (-)
00118   INTEGER                               :: NDIM_FULL    ! total number of grid points             (-)
00119 !
00120 !-----------------------------------------------------------------------------------------------------
00121 !
00122 ! Surface fields (only 1 horizontal dimension)
00123 !
00124   REAL, POINTER, DIMENSION(:,:) :: XCOVER    ! fraction of each ecosystem for each grid box (-)
00125   LOGICAL, POINTER, DIMENSION(:):: LCOVER    ! GCOVER(i)=T --> ith cover field is not 0.
00126   REAL, POINTER, DIMENSION(:)   :: XZS       ! orography                                    (m)
00127 !
00128 !-------------------------------------------------------------------------------
00129 !
00130   TYPE (DATE_TIME)                      :: TTIME            ! current date and time
00131 !
00132   REAL                                  :: XOUT_TSTEP       ! output writing time step
00133 !
00134 !-----------------------------------------------------------------------------------------------------
00135 !
00136 ! flag used to Read/Write precipitation forcing from/into the restart file for ARPEGE/ALADIN run
00137 !
00138   LOGICAL    :: LINIT_PRECIP
00139 !
00140 !-----------------------------------------------------------------------------------------------------
00141 !
00142 !
00143 
00144 
00145 END TYPE SURF_ATM_t
00146 
00147 TYPE(SURF_ATM_t), ALLOCATABLE, TARGET, SAVE :: SURF_ATM_MODEL(:)
00148 
00149  CHARACTER(LEN=6), POINTER :: CTOWN=>NULL()
00150 !$OMP THREADPRIVATE(CTOWN)
00151  CHARACTER(LEN=6), POINTER :: CNATURE=>NULL()
00152 !$OMP THREADPRIVATE(CNATURE)
00153  CHARACTER(LEN=6), POINTER :: CWATER=>NULL()
00154 !$OMP THREADPRIVATE(CWATER)
00155  CHARACTER(LEN=6), POINTER :: CSEA=>NULL()
00156 !$OMP THREADPRIVATE(CSEA)
00157 REAL, POINTER, DIMENSION(:)   :: XTOWN=>NULL()
00158 !$OMP THREADPRIVATE(XTOWN)
00159 REAL, POINTER, DIMENSION(:)   :: XNATURE=>NULL()
00160 !$OMP THREADPRIVATE(XNATURE)
00161 REAL, POINTER, DIMENSION(:)   :: XWATER=>NULL()
00162 !$OMP THREADPRIVATE(XWATER)
00163 REAL, POINTER, DIMENSION(:)   :: XSEA=>NULL()
00164 !$OMP THREADPRIVATE(XSEA)
00165 LOGICAL, POINTER :: LECOCLIMAP=>NULL()
00166 !$OMP THREADPRIVATE(LECOCLIMAP)
00167 LOGICAL, POINTER :: LWATER_TO_NATURE=>NULL()
00168 !$OMP THREADPRIVATE(LWATER_TO_NATURE)
00169 LOGICAL, POINTER :: LTOWN_TO_ROCK=>NULL()
00170 !$OMP THREADPRIVATE(LTOWN_TO_ROCK)
00171 LOGICAL, POINTER :: LGARDEN=>NULL()
00172 !$OMP THREADPRIVATE(LGARDEN)
00173 INTEGER, POINTER :: NSIZE_SEA=>NULL()
00174 !$OMP THREADPRIVATE(NSIZE_SEA)
00175 INTEGER, POINTER :: NDIM_SEA=>NULL()
00176 !$OMP THREADPRIVATE(NDIM_SEA)
00177 INTEGER, POINTER, DIMENSION(:)    :: NR_SEA=>NULL()
00178 !$OMP THREADPRIVATE(NR_SEA)
00179 INTEGER, POINTER :: NSIZE_WATER=>NULL()
00180 !$OMP THREADPRIVATE(NSIZE_WATER)
00181 INTEGER, POINTER :: NDIM_WATER=>NULL()
00182 !$OMP THREADPRIVATE(NDIM_WATER)
00183 INTEGER, POINTER, DIMENSION(:)    :: NR_WATER=>NULL()
00184 !$OMP THREADPRIVATE(NR_WATER)
00185 INTEGER, POINTER :: NSIZE_TOWN=>NULL()
00186 !$OMP THREADPRIVATE(NSIZE_TOWN)
00187 INTEGER, POINTER :: NDIM_TOWN=>NULL()
00188 !$OMP THREADPRIVATE(NDIM_TOWN)
00189 INTEGER, POINTER, DIMENSION(:)    :: NR_TOWN=>NULL()
00190 !$OMP THREADPRIVATE(NR_TOWN)
00191 INTEGER, POINTER :: NSIZE_NATURE=>NULL()
00192 !$OMP THREADPRIVATE(NSIZE_NATURE)
00193 INTEGER, POINTER :: NDIM_NATURE=>NULL()
00194 !$OMP THREADPRIVATE(NDIM_NATURE)
00195 INTEGER, POINTER, DIMENSION(:)    :: NR_NATURE=>NULL()
00196 !$OMP THREADPRIVATE(NR_NATURE)
00197 INTEGER, POINTER :: NSIZE_FULL=>NULL()
00198 !$OMP THREADPRIVATE(NSIZE_FULL)
00199 INTEGER, POINTER :: NDIM_FULL=>NULL()
00200 !$OMP THREADPRIVATE(NDIM_FULL)
00201 REAL, POINTER, DIMENSION(:,:) :: XCOVER=>NULL()
00202 !$OMP THREADPRIVATE(XCOVER)
00203 LOGICAL, POINTER, DIMENSION(:):: LCOVER=>NULL()
00204 !$OMP THREADPRIVATE(LCOVER)
00205 REAL, POINTER, DIMENSION(:)   :: XZS=>NULL()
00206 !$OMP THREADPRIVATE(XZS)
00207 TYPE (DATE_TIME), POINTER :: TTIME=>NULL()
00208 !$OMP THREADPRIVATE(TTIME)
00209 REAL, POINTER :: XOUT_TSTEP=>NULL()
00210 !$OMP THREADPRIVATE(XOUT_TSTEP)
00211 LOGICAL, POINTER :: LINIT_PRECIP=>NULL()
00212 !$OMP THREADPRIVATE(LINIT_PRECIP)
00213 CONTAINS
00214 
00215 SUBROUTINE SURF_ATM_GOTO_MODEL(KFROM, KTO, LKFROM)
00216 LOGICAL, INTENT(IN) :: LKFROM
00217 INTEGER, INTENT(IN) :: KFROM, KTO
00218 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00219 
00220 !
00221 ! Save current state for allocated arrays
00222 IF (LKFROM) THEN
00223 SURF_ATM_MODEL(KFROM)%XTOWN=>XTOWN
00224 SURF_ATM_MODEL(KFROM)%XNATURE=>XNATURE
00225 SURF_ATM_MODEL(KFROM)%XWATER=>XWATER
00226 SURF_ATM_MODEL(KFROM)%XSEA=>XSEA
00227 SURF_ATM_MODEL(KFROM)%NR_SEA=>NR_SEA
00228 SURF_ATM_MODEL(KFROM)%NR_WATER=>NR_WATER
00229 SURF_ATM_MODEL(KFROM)%NR_TOWN=>NR_TOWN
00230 SURF_ATM_MODEL(KFROM)%NR_NATURE=>NR_NATURE
00231 SURF_ATM_MODEL(KFROM)%XCOVER=>XCOVER
00232 SURF_ATM_MODEL(KFROM)%LCOVER=>LCOVER
00233 SURF_ATM_MODEL(KFROM)%XZS=>XZS
00234 ENDIF
00235 !
00236 ! Current model is set to model KTO
00237 IF (LHOOK) CALL DR_HOOK('MODD_SURF_ATM_N:SURF_ATM_GOTO_MODEL',0,ZHOOK_HANDLE)
00238 
00239 CTOWN=>SURF_ATM_MODEL(KTO)%CTOWN
00240 CNATURE=>SURF_ATM_MODEL(KTO)%CNATURE
00241 CWATER=>SURF_ATM_MODEL(KTO)%CWATER
00242 CSEA=>SURF_ATM_MODEL(KTO)%CSEA
00243 XTOWN=>SURF_ATM_MODEL(KTO)%XTOWN
00244 XNATURE=>SURF_ATM_MODEL(KTO)%XNATURE
00245 XWATER=>SURF_ATM_MODEL(KTO)%XWATER
00246 XSEA=>SURF_ATM_MODEL(KTO)%XSEA
00247 LECOCLIMAP=>SURF_ATM_MODEL(KTO)%LECOCLIMAP
00248 LWATER_TO_NATURE=>SURF_ATM_MODEL(KTO)%LWATER_TO_NATURE
00249 LTOWN_TO_ROCK=>SURF_ATM_MODEL(KTO)%LTOWN_TO_ROCK
00250 LGARDEN=>SURF_ATM_MODEL(KTO)%LGARDEN
00251 NSIZE_SEA=>SURF_ATM_MODEL(KTO)%NSIZE_SEA
00252 NDIM_SEA=>SURF_ATM_MODEL(KTO)%NDIM_SEA
00253 NR_SEA=>SURF_ATM_MODEL(KTO)%NR_SEA
00254 NSIZE_WATER=>SURF_ATM_MODEL(KTO)%NSIZE_WATER
00255 NDIM_WATER=>SURF_ATM_MODEL(KTO)%NDIM_WATER
00256 NR_WATER=>SURF_ATM_MODEL(KTO)%NR_WATER
00257 NSIZE_TOWN=>SURF_ATM_MODEL(KTO)%NSIZE_TOWN
00258 NDIM_TOWN=>SURF_ATM_MODEL(KTO)%NDIM_TOWN
00259 NR_TOWN=>SURF_ATM_MODEL(KTO)%NR_TOWN
00260 NSIZE_NATURE=>SURF_ATM_MODEL(KTO)%NSIZE_NATURE
00261 NDIM_NATURE=>SURF_ATM_MODEL(KTO)%NDIM_NATURE
00262 NR_NATURE=>SURF_ATM_MODEL(KTO)%NR_NATURE
00263 NSIZE_FULL=>SURF_ATM_MODEL(KTO)%NSIZE_FULL
00264 NDIM_FULL=>SURF_ATM_MODEL(KTO)%NDIM_FULL
00265 XCOVER=>SURF_ATM_MODEL(KTO)%XCOVER
00266 LCOVER=>SURF_ATM_MODEL(KTO)%LCOVER
00267 XZS=>SURF_ATM_MODEL(KTO)%XZS
00268 TTIME=>SURF_ATM_MODEL(KTO)%TTIME
00269 XOUT_TSTEP=>SURF_ATM_MODEL(KTO)%XOUT_TSTEP
00270 LINIT_PRECIP=>SURF_ATM_MODEL(KTO)%LINIT_PRECIP
00271 
00272 IF (LHOOK) CALL DR_HOOK('MODD_SURF_ATM_N:SURF_ATM_GOTO_MODEL',1,ZHOOK_HANDLE)
00273 
00274 END SUBROUTINE SURF_ATM_GOTO_MODEL
00275 
00276 SUBROUTINE SURF_ATM_ALLOC(KMODEL)
00277 INTEGER, INTENT(IN) :: KMODEL
00278 INTEGER :: J
00279 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00280 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_N:SURF_ATM_ALLOC",0,ZHOOK_HANDLE)
00281 ALLOCATE(SURF_ATM_MODEL(KMODEL))
00282 DO J=1,KMODEL
00283   NULLIFY(SURF_ATM_MODEL(J)%XTOWN)
00284   NULLIFY(SURF_ATM_MODEL(J)%XNATURE)
00285   NULLIFY(SURF_ATM_MODEL(J)%XWATER)
00286   NULLIFY(SURF_ATM_MODEL(J)%XSEA)
00287   NULLIFY(SURF_ATM_MODEL(J)%NR_SEA)
00288   NULLIFY(SURF_ATM_MODEL(J)%NR_WATER)
00289   NULLIFY(SURF_ATM_MODEL(J)%NR_TOWN)
00290   NULLIFY(SURF_ATM_MODEL(J)%NR_NATURE)
00291   NULLIFY(SURF_ATM_MODEL(J)%XCOVER)
00292   NULLIFY(SURF_ATM_MODEL(J)%LCOVER)
00293   NULLIFY(SURF_ATM_MODEL(J)%XZS)
00294 ENDDO
00295 SURF_ATM_MODEL(:)%CTOWN=' '
00296 SURF_ATM_MODEL(:)%CNATURE=' '
00297 SURF_ATM_MODEL(:)%CWATER=' '
00298 SURF_ATM_MODEL(:)%CSEA=' '
00299 SURF_ATM_MODEL(:)%LECOCLIMAP=.FALSE.
00300 SURF_ATM_MODEL(:)%LWATER_TO_NATURE=.FALSE.
00301 SURF_ATM_MODEL(:)%LTOWN_TO_ROCK=.FALSE.
00302 SURF_ATM_MODEL(:)%LGARDEN=.FALSE.
00303 SURF_ATM_MODEL(:)%NSIZE_SEA=0
00304 SURF_ATM_MODEL(:)%NDIM_SEA=0
00305 SURF_ATM_MODEL(:)%NSIZE_WATER=0
00306 SURF_ATM_MODEL(:)%NDIM_WATER=0
00307 SURF_ATM_MODEL(:)%NSIZE_TOWN=0
00308 SURF_ATM_MODEL(:)%NDIM_TOWN=0
00309 SURF_ATM_MODEL(:)%NSIZE_NATURE=0
00310 SURF_ATM_MODEL(:)%NDIM_NATURE=0
00311 SURF_ATM_MODEL(:)%NSIZE_FULL=0
00312 SURF_ATM_MODEL(:)%NDIM_FULL=0
00313 SURF_ATM_MODEL(:)%XOUT_TSTEP=0.
00314 SURF_ATM_MODEL(:)%LINIT_PRECIP=.FALSE.
00315 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_N:SURF_ATM_ALLOC",1,ZHOOK_HANDLE)
00316 END SUBROUTINE SURF_ATM_ALLOC
00317 
00318 SUBROUTINE SURF_ATM_DEALLO
00319 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00320 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_N:SURF_ATM_DEALLO",0,ZHOOK_HANDLE)
00321 IF (ALLOCATED(SURF_ATM_MODEL)) DEALLOCATE(SURF_ATM_MODEL)
00322 IF (LHOOK) CALL DR_HOOK("MODD_SURF_ATM_N:SURF_ATM_DEALLO",1,ZHOOK_HANDLE)
00323 END SUBROUTINE SURF_ATM_DEALLO
00324 
00325 END MODULE MODD_SURF_ATM_n
00326