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