Newer
Older
!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!SFX_LIC for details. version 1.
! #########
SUBROUTINE PREP_TEB_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
! #################################################################################
!
!!**** *PREP_TEB_GRIB* - prepares TEB field from operational GRIB
!!
!! PURPOSE
!! -------
!
!!** METHOD
!! ------
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!! V. Masson
!!
!! MODIFICATIONS
!! -------------
!! Original 01/2004
!!------------------------------------------------------------------
!
!
USE MODD_TYPE_DATE_SURF
!
USE MODE_READ_GRIB
USE MODI_INTERP_GRID
!
USE MODD_GRID_GRIB, ONLY : CGRIB_FILE, NNI, CINMODEL
USE MODD_PREP_TEB, ONLY : XGRID_ROAD, XGRID_WALL, XGRID_ROOF, &
XTI_BLD, XTDEEP_TEB, XTI_BLD_DEF

WAUTELET Philippe
committed
USE MODD_SURF_PAR, ONLY : NFILENAMELGTMAX, XUNDEF
!
!
!USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
!USE PARKIND1 ,ONLY : JPRB
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field

WAUTELET Philippe
committed
CHARACTER(LEN=NFILENAMELGTMAX), INTENT(IN) :: HFILE ! name of file
INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing
REAL,DIMENSION(:,:), POINTER :: PFIELD ! field to interpolate horizontally
!
!* 0.2 declarations of local variables
!
REAL, DIMENSION(:) , POINTER :: ZMASK => NULL() ! Land mask
REAL, DIMENSION(:), POINTER :: ZFIELD1D => NULL() ! 1D field read
REAL, DIMENSION(:,:), POINTER :: ZFIELD => NULL() ! field read
REAL, DIMENSION(:,:), POINTER :: ZD => NULL() ! depth of field in the soil
REAL :: ZTI_BLD !indoor air temperature
!REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
!-------------------------------------------------------------------------------------
!
!* 1. Reading of grid
! ---------------
!
!IF (LHOOK) CALL DR_HOOK('PREP_TEB_GRIB',0,ZHOOK_HANDLE)
!
IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE=""
!
CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,CINMODEL,ZMASK)
!
IF (HSURF=='T_FLOOR' .OR. HSURF(1:6)=='T_WALL' .OR. HSURF=='T_ROOF' .OR. &
HSURF=='T_WIN2' .OR. HSURF=='TI_BLD' .OR. HSURF=='T_MASS' .OR. HSURF=='T_BLD ') THEN
ZTI_BLD = XTI_BLD_DEF
IF (XTI_BLD/=XUNDEF) ZTI_BLD=XTI_BLD
ENDIF
!
!---------------------------------------------------------------------------------------
SELECT CASE(HSURF)
!---------------------------------------------------------------------------------------
!
!* 2. Orography
! ---------
!
CASE('ZS ')
CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP ')
CALL READ_GRIB_ZS_LAND(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD1D)
ALLOCATE(PFIELD(SIZE(ZFIELD1D),1))
PFIELD(:,1) = ZFIELD1D(:)
DEALLOCATE(ZFIELD1D)
END SELECT
!
!* 3. Profile of temperatures in roads
! --------------------------------
!
CASE('T_ROAD')
!* reading of the profile and its depth definition
CALL READ_GRIB_TG_ECMWF(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD,ZD)
CALL READ_GRIB_TG_METEO_FRANCE(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD,ZD)
CASE('HIRLAM')
CALL READ_GRIB_TG_HIRLAM(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD,ZD)
CASE('NCEP ')
CALL READ_GRIB_TG_NCEP(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD,ZD)
END SELECT
!* if deep road temperature is prescribed
IF (XTDEEP_TEB/=XUNDEF) THEN
ZFIELD(:,2:) = XTDEEP_TEB
END IF
CALL TEB_PROFILE_GRIB(XGRID_ROAD)
!
!* 3.bis Profile of temperatures below floors
! --------------------------------
CASE('T_BLD ')
!* reading of the profile and its depth definition
CASE('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP ')
CALL READ_GRIB_TF_TEB(HFILE,KLUOUT,CINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD)
END SELECT
!* if deep road temperature is prescribed
IF (XTDEEP_TEB/=XUNDEF) THEN
ZFIELD(:,2:) = XTDEEP_TEB
CALL TEB_PROFILE_GRIB(XGRID_ROAD)
!
!* 4. Profile of temperatures in walls
! --------------------------------
CASE('T_WALLA','T_WALLB')
CALL READ_GRIB_T_TEB(HFILE,KLUOUT,CINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD)
CALL TEB_PROFILE_GRIB(XGRID_WALL)
CASE('T_WIN1')
CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP ')
CALL READ_GRIB_TS(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD1D)
ALLOCATE(PFIELD(NNI,1))
PFIELD(:,1) = ZFIELD1D(:)
DEALLOCATE(ZFIELD1D)
END SELECT
!
!* 5. Profile of temperatures in roofs
! --------------------------------
!
CASE('T_ROOF')
CALL READ_GRIB_T_TEB(HFILE,KLUOUT,CINMODEL,ZTI_BLD,ZMASK,ZFIELD,ZD)
CALL TEB_PROFILE_GRIB(XGRID_ROOF)
!
!* 5.bis Profile of temperatures in thermal mass
! -----------------------------------------
!
CASE('T_MASS')
ALLOCATE(PFIELD(NNI,3))
PFIELD(:,:) = ZTI_BLD
!
!* 5.bis Profile of temperatures in floors
! -----------------------------------
!
CASE('T_FLOOR')
ALLOCATE(PFIELD(NNI,3))
PFIELD(:,:) = ZTI_BLD
!
!* 6. Canyon air temperature
! ----------------------
!
CASE('T_CAN ')
CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP ')
CALL READ_GRIB_T2_LAND(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD1D)
ALLOCATE(PFIELD(SIZE(ZFIELD1D),1))
PFIELD(:,1) = ZFIELD1D(:)
DEALLOCATE(ZFIELD1D)
END SELECT
!
!* 7. Canyon air humidity
! -------------------
!
CASE('Q_CAN ')
CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM','NCEP ')
ALLOCATE(PFIELD(NNI,1))
PFIELD(:,1) = 0.01
END SELECT
!
!* 9. Deep road temperature
! ---------------------
CASE('TDEEP_T')
IF (XTDEEP_TEB==XUNDEF) THEN
CALL READ_GRIB_T2_LAND(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD1D)
ALLOCATE(PFIELD(SIZE(ZFIELD1D),1))
PFIELD(:,1) = ZFIELD1D(:)
DEALLOCATE(ZFIELD1D)
ELSE
ALLOCATE(PFIELD(NNI,1))
PFIELD = XTDEEP_TEB
END IF
!* 9. Building temperatures/moisture
! --------------------
CASE('TI_BLD ')
ALLOCATE(PFIELD(NNI,1))
PFIELD = ZTI_BLD
CASE('T_WIN2')
ALLOCATE(PFIELD(NNI,1))
PFIELD = ZTI_BLD
CASE('QI_BLD ')
ALLOCATE(PFIELD(NNI,1))
PFIELD(:,1) = XUNDEF
!* 10. Other quantities (water reservoirs)
! ----------------
!
! Robert: These values are hardcoded at the moment
!
CASE('PSOLD')
ALLOCATE(PFIELD(NNI,1))
PFIELD = XUNDEF
!
CASE('VENTNIG')
ALLOCATE(PFIELD(NNI,1))
PFIELD = 0.0
!
CASE('SHADVAC')
ALLOCATE(PFIELD(NNI,1))
PFIELD = 0.0
!
CASE DEFAULT
ALLOCATE(PFIELD(NNI,1))
PFIELD = 0.
END SELECT
!
DEALLOCATE(ZMASK)
!
!* 4. Interpolation method
! --------------------
!
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
!
!IF (LHOOK) CALL DR_HOOK('PREP_TEB_GRIB',1,ZHOOK_HANDLE)
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
!
!-------------------------------------------------------------------------------------
!-------------------------------------------------------------------------------------
SUBROUTINE TEB_PROFILE_GRIB(PGRID)
!-------------------------------------------------------------------------------------
!
REAL, DIMENSION(:), INTENT(IN) :: PGRID ! destination grid
!REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
!
!-------------------------------------------------------------------------------------
!
!* interpolation on fine vertical grid
!IF (LHOOK) CALL DR_HOOK('TEB_PROFILE_GRIB',0,ZHOOK_HANDLE)
ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(PGRID)))
CALL INTERP_GRID(ZD,ZFIELD,PGRID,PFIELD)
!
!* end
DEALLOCATE(ZFIELD)
DEALLOCATE(ZD)
!IF (LHOOK) CALL DR_HOOK('TEB_PROFILE_GRIB',1,ZHOOK_HANDLE)
END SUBROUTINE TEB_PROFILE_GRIB
!
!-------------------------------------------------------------------------------------
END SUBROUTINE PREP_TEB_GRIB