SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_teb_greenroof_buffer.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_TEB_GREENROOF_BUFFER(HPROGRAM,HSURF,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_TEB_GREENROOF_BUFFER* - initializes ISBA fields from operational BUFFER
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!    Based on "prep_teb_garden_buffer"
00013 !!
00014 !!    REFERENCE
00015 !!    ---------
00016 !!      
00017 !!
00018 !!    AUTHOR
00019 !!    ------
00020 !!    A. Lemonsu & C. de Munck  
00021 !!
00022 !!    MODIFICATIONS
00023 !!    -------------
00024 !!      Original    07/2011
00025 !!------------------------------------------------------------------
00026 !
00027 
00028 !
00029 USE MODE_READ_BUFFER
00030 !
00031 USE MODD_TYPE_DATE_SURF
00032 !
00033 USE MODI_PREP_BUFFER_GRID
00034 USE MODI_INTERP_GRID
00035 !
00036 USE MODD_PREP,               ONLY : CINTERP_TYPE
00037 USE MODD_PREP_TEB_GREENROOF, ONLY : XGRID_SOIL, XWR_DEF
00038 USE MODD_DATA_COVER_PAR,     ONLY : NVEGTYPE
00039 USE MODD_SURF_PAR,           ONLY : XUNDEF
00040 USE MODD_GRID_BUFFER,        ONLY : NNI
00041 !
00042 !
00043 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00044 USE PARKIND1  ,ONLY : JPRB
00045 !
00046 IMPLICIT NONE
00047 !
00048 !*      0.1    declarations of arguments
00049 !
00050  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM    ! program calling surf. schemes
00051  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF       ! type of field
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_BUF  ! current date and time
00058  CHARACTER(LEN=6)                :: YINMODEL    ! model from which buffer originates
00059 REAL, DIMENSION(:,:), POINTER   :: ZFIELD      ! field read
00060 REAL, DIMENSION(:),   POINTER   :: ZFIELD1D    ! field read
00061 REAL, DIMENSION(:,:), POINTER   :: ZD          ! depth of field in the soil
00062 INTEGER                         :: JVEGTYPE    ! loop counter on vegtypes
00063 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00064 !
00065 !-------------------------------------------------------------------------------------
00066 !
00067 !*      1.     Reading of grid
00068 !              ---------------
00069 !
00070 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GREENROOF_BUFFER',0,ZHOOK_HANDLE)
00071  CALL PREP_BUFFER_GRID(KLUOUT,YINMODEL,TZTIME_BUF)
00072 
00073 !
00074 !*      2.     Reading of field
00075 !              ----------------
00076 !
00077 !*      3.     Transformation into physical quantity to be interpolated
00078 !              --------------------------------------------------------
00079 !
00080 SELECT CASE(HSURF)
00081 !
00082 !*      3.1    Profile of temperature in the soil
00083 !
00084   CASE('TG    ')
00085      !* reading of the profile and its depth definition
00086      SELECT CASE(YINMODEL)
00087      CASE('ALADIN')
00088         CALL READ_BUFFER_TG(KLUOUT,YINMODEL,ZFIELD,ZD)
00089      END SELECT
00090      CALL SOIL_PROFILE_BUFFER
00091 
00092   CASE('WG    ')
00093      !* reading of the profile and its depth definition
00094      SELECT CASE(YINMODEL)
00095      CASE('ARPEGE','ALADIN','MOCAGE')
00096         CALL READ_BUFFER_WG(KLUOUT,YINMODEL,ZFIELD,ZD)
00097      END SELECT
00098      CALL SOIL_PROFILE_BUFFER
00099 
00100 
00101 !*      3.3    Profile of soil ice content
00102 
00103   CASE('WGI   ')    
00104      !* reading of the profile and its depth definition
00105      SELECT CASE(YINMODEL)
00106        CASE('ALADIN')
00107          CALL READ_BUFFER_WGI(KLUOUT,YINMODEL,ZFIELD,ZD)
00108      END SELECT
00109      CALL SOIL_PROFILE_BUFFER
00110 !
00111 !*      3.4    Water content intercepted on leaves, LAI
00112 !
00113   CASE('WR     ')
00114      ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00115      PFIELD(:,:,:) = XWR_DEF
00116 !
00117   CASE('LAI    ')
00118      ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00119      PFIELD(:,:,:) = XUNDEF
00120 !
00121 !
00122 !*      3.5    Other fields
00123 !
00124   CASE('ZS     ')
00125      CALL READ_BUFFER_ZS(KLUOUT,YINMODEL,ZFIELD1D)
00126      ALLOCATE(PFIELD(SIZE(ZFIELD1D,1),1,1))
00127      PFIELD(:,1,1)=ZFIELD1D(:)
00128      DEALLOCATE(ZFIELD1D)
00129 END SELECT
00130 !
00131 !*      4.     Interpolation method
00132 !              --------------------
00133 !
00134 CINTERP_TYPE='BUFFER'
00135 !
00136 !
00137 !-------------------------------------------------------------------------------------
00138 !-------------------------------------------------------------------------------------
00139 !
00140 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GREENROOF_BUFFER',1,ZHOOK_HANDLE)
00141 CONTAINS
00142 !
00143 !-------------------------------------------------------------------------------------
00144 !-------------------------------------------------------------------------------------
00145 SUBROUTINE SOIL_PROFILE_BUFFER
00146 !-------------------------------------------------------------------------------------
00147 !
00148 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUT   ! work array
00149 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00150 !
00151 !-------------------------------------------------------------------------------------
00152 !
00153      !
00154      !* interpolation on fine vertical grid
00155      IF (LHOOK) CALL DR_HOOK('SOIL_PROFILE_BUFFER',0,ZHOOK_HANDLE)
00156      ALLOCATE(ZOUT  (SIZE(ZFIELD,1),SIZE(XGRID_SOIL)))
00157      CALL INTERP_GRID(ZD,ZFIELD,XGRID_SOIL,ZOUT)
00158      !
00159      !* extends definition to all vegtypes.
00160      ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(XGRID_SOIL),NVEGTYPE))
00161      DO JVEGTYPE=1,NVEGTYPE
00162        PFIELD(:,:,JVEGTYPE)=ZOUT(:,:)
00163      END DO
00164      !* end
00165      DEALLOCATE(ZOUT)
00166      DEALLOCATE(ZFIELD)
00167      DEALLOCATE(ZD)
00168 IF (LHOOK) CALL DR_HOOK('SOIL_PROFILE_BUFFER',1,ZHOOK_HANDLE)
00169 
00170 END SUBROUTINE SOIL_PROFILE_BUFFER
00171 !
00172 !-------------------------------------------------------------------------------------
00173 END SUBROUTINE PREP_TEB_GREENROOF_BUFFER