SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_teb_grib.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_TEB_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_TEB_GRIB* - prepares TEB field from operational GRIB
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     V. Masson 
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    01/2004
00024 !!------------------------------------------------------------------
00025 !
00026 
00027 !
00028 USE MODD_TYPE_DATE_SURF
00029 !
00030 USE MODI_PREP_GRIB_GRID
00031 USE MODE_READ_GRIB
00032 USE MODI_INTERP_GRID
00033 !
00034 USE MODD_PREP,       ONLY : CINGRID_TYPE, CINTERP_TYPE
00035 USE MODD_GRID_GRIB,  ONLY : CGRIB_FILE, NNI
00036 USE MODD_PREP_TEB,   ONLY : XGRID_ROAD, XGRID_WALL, XGRID_ROOF, XGRID_FLOOR, &
00037                             XTI_BLD, XTI_ROAD, XHUI_BLD, XTI_BLD_DEF,        &
00038                             XHUI_BLD_DEF
00039 USE MODD_SURF_PAR,   ONLY : XUNDEF
00040 !
00041 !
00042 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00043 USE PARKIND1  ,ONLY : JPRB
00044 !
00045 IMPLICIT NONE
00046 !
00047 !*      0.1    declarations of arguments
00048 !
00049  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00050  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00051  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
00052 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00053 REAL,DIMENSION(:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
00054 !
00055 !*      0.2    declarations of local variables
00056 !
00057 TYPE (DATE_TIME)                :: TZTIME_GRIB    ! current date and time
00058  CHARACTER(LEN=6)                :: YINMODEL ! model from which GRIB file originates
00059 REAL, DIMENSION(:)  , POINTER   :: ZMASK => NULL()          ! Land mask
00060 REAL, DIMENSION(:),   POINTER   :: ZFIELD1D => NULL() ! 1D field read
00061 REAL, DIMENSION(:,:), POINTER   :: ZFIELD => NULL()   ! field read
00062 REAL, DIMENSION(:,:), POINTER   :: ZD => NULL()             ! depth of field in the soil
00063 REAL                            :: ZTI_BLD !indoor air temperature
00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00065 !
00066 !-------------------------------------------------------------------------------------
00067 !
00068 !*      1.     Reading of grid
00069 !              ---------------
00070 !
00071 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GRIB',0,ZHOOK_HANDLE)
00072 !
00073 IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE=""
00074 !
00075  CALL PREP_GRIB_GRID(HFILE,KLUOUT,YINMODEL,CINGRID_TYPE,TZTIME_GRIB)
00076 !
00077  CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,YINMODEL,ZMASK)
00078 !
00079 IF (HSURF=='T_FLOOR' .OR. HSURF=='T_WALL' .OR. HSURF=='T_ROOF' .OR.  HSURF=='T_WIN2' .OR. HSURF=='TI_BLD' .OR. HSURF=='T_MASS') THEN
00080   ZTI_BLD = XTI_BLD_DEF
00081   IF (XTI_BLD/=XUNDEF) ZTI_BLD=XTI_BLD
00082 ENDIF
00083 !
00084 !---------------------------------------------------------------------------------------
00085 SELECT CASE(HSURF)
00086 !---------------------------------------------------------------------------------------
00087 !
00088 !*     2.      Orography
00089 !              ---------
00090 !
00091   CASE('ZS     ')
00092     SELECT CASE (YINMODEL)
00093       CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00094         CALL READ_GRIB_ZS_LAND(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D)
00095         ALLOCATE(PFIELD(SIZE(ZFIELD1D),1))
00096         PFIELD(:,1) = ZFIELD1D(:)
00097         DEALLOCATE(ZFIELD1D)
00098     END SELECT
00099 !
00100 !*      3.     Profile of temperatures in roads
00101 !              --------------------------------
00102 !
00103   CASE('T_ROAD')
00104      !* reading of the profile and its depth definition
00105      SELECT CASE(YINMODEL)
00106        CASE('ECMWF ')
00107          CALL READ_GRIB_TG_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00108        CASE('ARPEGE','ALADIN','MOCAGE')
00109          CALL READ_GRIB_TG_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00110      END SELECT
00111      !* if deep road temperature is prescribed
00112      IF (XTI_ROAD/=XUNDEF) THEN
00113        ZFIELD(:,2:) = XTI_ROAD 
00114      END IF
00115      CALL TEB_PROFILE_GRIB(XGRID_ROAD)
00116 !
00117 !*      3.bis  Profile of temperatures in floors
00118 !              --------------------------------
00119 
00120   CASE('T_FLOOR')    
00121      !* reading of the profile and its depth definition
00122      SELECT CASE(YINMODEL)
00123        CASE('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00124          CALL READ_GRIB_TF_TEB(HFILE,KLUOUT,YINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD)
00125      END SELECT
00126      !* if deep road temperature is prescribed
00127      IF (XTI_ROAD/=XUNDEF) THEN
00128        ZFIELD(:,2:) = XTI_ROAD 
00129      END IF
00130      CALL TEB_PROFILE_GRIB(XGRID_FLOOR)
00131 !
00132 !*      4.     Profile of temperatures in walls
00133 !              --------------------------------
00134 
00135   CASE('T_WALLA','T_WALLB')
00136      CALL READ_GRIB_T_TEB(HFILE,KLUOUT,YINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD)
00137      CALL TEB_PROFILE_GRIB(XGRID_WALL)
00138 
00139   CASE('T_WIN1')
00140     SELECT CASE (YINMODEL)
00141       CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00142         CALL READ_GRIB_TS(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D)
00143         ALLOCATE(PFIELD(NNI,1))
00144         PFIELD(:,1) = ZFIELD1D(:)
00145         DEALLOCATE(ZFIELD1D)
00146     END SELECT
00147 !
00148 !*      5.     Profile of temperatures in roofs
00149 !              --------------------------------
00150 !
00151   CASE('T_ROOF')    
00152      CALL READ_GRIB_T_TEB(HFILE,KLUOUT,YINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD)
00153      CALL TEB_PROFILE_GRIB(XGRID_ROOF)
00154 !
00155 !*      5.bis    Profile of temperatures in thermal mass
00156 !              -----------------------------------------
00157 !
00158   CASE('T_MASS')    
00159      ALLOCATE(PFIELD(NNI,3))
00160      PFIELD(:,:) = ZTI_BLD
00161 !
00162 !*      6.     Canyon air temperature
00163 !              ----------------------
00164 !
00165   CASE('T_CAN  ')
00166     SELECT CASE (YINMODEL)
00167       CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00168         CALL READ_GRIB_T2(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D)
00169         ALLOCATE(PFIELD(SIZE(ZFIELD1D),1))
00170         PFIELD(:,1) = ZFIELD1D(:)
00171         DEALLOCATE(ZFIELD1D)
00172     END SELECT
00173 !
00174 !*      7.      Canyon air humidity
00175 !               -------------------
00176 !
00177   CASE('Q_CAN  ')
00178     SELECT CASE (YINMODEL)
00179       CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00180         ALLOCATE(PFIELD(NNI,1))
00181         PFIELD(:,1) = 0.01
00182     END SELECT
00183 
00184 !
00185 !*      9.     Deep road temperature
00186 !              ---------------------
00187 
00188   CASE('TI_ROAD')    
00189      IF (XTI_ROAD==XUNDEF) THEN
00190        CALL READ_GRIB_T2(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D)
00191        ALLOCATE(PFIELD(SIZE(ZFIELD1D),1))
00192        PFIELD(:,1) = ZFIELD1D(:)
00193        DEALLOCATE(ZFIELD1D)
00194      ELSE
00195        ALLOCATE(PFIELD(NNI,1))
00196        PFIELD = XTI_ROAD
00197      END IF
00198 
00199 
00200 !*      9.     Building temperatures/moisture
00201 !              --------------------
00202 
00203   CASE('TI_BLD ')    
00204      ALLOCATE(PFIELD(NNI,1))
00205      PFIELD = ZTI_BLD
00206 
00207   CASE('T_WIN2')
00208      ALLOCATE(PFIELD(NNI,1))
00209      PFIELD = ZTI_BLD
00210 
00211   CASE('QI_BLD ')
00212      ALLOCATE(PFIELD(NNI,1))
00213      PFIELD(:,1) = XUNDEF
00214 
00215 !*     10.     Other quantities (water reservoirs)
00216 !              ----------------
00217 
00218   CASE DEFAULT
00219     ALLOCATE(PFIELD(NNI,1))
00220     PFIELD = 0.
00221 
00222 END SELECT
00223 !
00224 DEALLOCATE(ZMASK)
00225 !
00226 !*      4.     Interpolation method
00227 !              --------------------
00228 !
00229 CINTERP_TYPE='HORIBL'
00230 !
00231 !-------------------------------------------------------------------------------------
00232 !-------------------------------------------------------------------------------------
00233 !
00234 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GRIB',1,ZHOOK_HANDLE)
00235 CONTAINS
00236 !
00237 !-------------------------------------------------------------------------------------
00238 !-------------------------------------------------------------------------------------
00239 SUBROUTINE TEB_PROFILE_GRIB(PGRID)
00240 !-------------------------------------------------------------------------------------
00241 !
00242 REAL, DIMENSION(:),   INTENT(IN)  :: PGRID  ! destination grid
00243 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00244 !
00245 !
00246 !-------------------------------------------------------------------------------------
00247 !
00248 !* interpolation on fine vertical grid
00249 IF (LHOOK) CALL DR_HOOK('TEB_PROFILE_GRIB',0,ZHOOK_HANDLE)
00250 ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(PGRID)))
00251  CALL INTERP_GRID(ZD,ZFIELD,PGRID,PFIELD)
00252 !
00253 !* end
00254 DEALLOCATE(ZFIELD)
00255 DEALLOCATE(ZD)
00256 IF (LHOOK) CALL DR_HOOK('TEB_PROFILE_GRIB',1,ZHOOK_HANDLE)
00257 
00258 END SUBROUTINE TEB_PROFILE_GRIB
00259 !
00260 !-------------------------------------------------------------------------------------
00261 END SUBROUTINE PREP_TEB_GRIB