SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_teb_garden_grib.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_TEB_GARDEN_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_TEB_GARDEN_GRIB* - initializes ISBA fields 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 !!      S. Riette   05/2010 READ_GRIB_WGI_ECMWF's interface modified
00025 !!------------------------------------------------------------------
00026 !
00027 
00028 !
00029 USE MODE_READ_GRIB
00030 !
00031 USE MODD_TYPE_DATE_SURF
00032 !
00033 USE MODI_PREP_GRIB_GRID
00034 USE MODI_INTERP_GRID
00035 !
00036 USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE
00037 USE MODD_PREP_TEB_GARDEN,ONLY : XGRID_SOIL, XWR_DEF
00038 USE MODD_DATA_COVER_PAR, ONLY : NVEGTYPE
00039 USE MODD_SURF_PAR,       ONLY : XUNDEF
00040 USE MODD_GRID_GRIB,      ONLY : CGRIB_FILE, NNI
00041 !
00042 !
00043 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00044 USE PARKIND1  ,ONLY : JPRB
00045 !
00046 USE MODI_ABOR1_SFX
00047 !
00048 IMPLICIT NONE
00049 !
00050 !*      0.1    declarations of arguments
00051 !
00052  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00053  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00054  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
00055 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00056 REAL,DIMENSION(:,:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
00057 !
00058 !*      0.2    declarations of local variables
00059 !
00060 TYPE (DATE_TIME)                :: TZTIME_GRIB    ! current date and time
00061  CHARACTER(LEN=6)                :: YINMODEL       ! model from which GRIB file originates
00062 REAL, DIMENSION(:)  , POINTER   :: ZMASK => NULL()          ! Land mask
00063 REAL, DIMENSION(:,:), POINTER   :: ZFIELD => NULL()         ! field read
00064 REAL, DIMENSION(:),   POINTER   :: ZFIELD1D => NULL()       ! field read
00065 REAL, DIMENSION(:,:), POINTER   :: ZD => NULL()             ! depth of field in the soil
00066 INTEGER                         :: JVEGTYPE       ! loop counter on vegtypes
00067 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00068 !
00069 !-------------------------------------------------------------------------------------
00070 !
00071 !*      1.     Reading of grid
00072 !              ---------------
00073 !
00074 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GARDEN_GRIB',0,ZHOOK_HANDLE)
00075 !
00076 IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE=""
00077 !
00078  CALL PREP_GRIB_GRID(HFILE,KLUOUT,YINMODEL,CINGRID_TYPE,TZTIME_GRIB)
00079 !
00080  CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,YINMODEL,ZMASK)
00081 !
00082 !*      2.     Reading of field
00083 !              ----------------
00084 !
00085 !*      3.     Transformation into physical quantity to be interpolated
00086 !              --------------------------------------------------------
00087 !
00088 SELECT CASE(HSURF)
00089 !
00090 !*      3.1    Profile of temperature in the soil
00091 !
00092   CASE('TG    ')
00093      !* reading of the profile and its depth definition
00094      SELECT CASE(YINMODEL)
00095        CASE('ECMWF ')
00096          CALL READ_GRIB_TG_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00097        CASE('ARPEGE','ALADIN','MOCAGE')
00098          CALL READ_GRIB_TG_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00099        CASE('HIRLAM')
00100          CALL READ_GRIB_TG_HIRLAM(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00101      END SELECT
00102      CALL SOIL_PROFILE_GRIB
00103 
00104   CASE('WG    ')
00105      !* reading of the profile and its depth definition
00106      SELECT CASE(YINMODEL)
00107        CASE('ECMWF ')
00108          CALL READ_GRIB_WG_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00109        CASE('ARPEGE','ALADIN','MOCAGE')
00110          CALL READ_GRIB_WG_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00111        CASE('HIRLAM')
00112          CALL READ_GRIB_WG_HIRLAM(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00113      END SELECT
00114      CALL SOIL_PROFILE_GRIB
00115 
00116 
00117 !*      3.3    Profile of soil ice content
00118 
00119   CASE('WGI   ')    
00120      !* reading of the profile and its depth definition
00121      SELECT CASE(YINMODEL)
00122        CASE('ECMWF ')
00123          CALL READ_GRIB_WGI_ECMWF(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00124        CASE('ARPEGE','ALADIN','MOCAGE')
00125          CALL READ_GRIB_WGI_METEO_FRANCE(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD,ZD)
00126        CASE('HIRLAM')
00127          CALL READ_GRIB_WGI_HIRLAM(HFILE,KLUOUT,ZFIELD,ZD)
00128      END SELECT
00129      CALL SOIL_PROFILE_GRIB
00130 !
00131 !*      3.4    Water content intercepted on leaves, LAI
00132 !
00133   CASE('WR     ')
00134      ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00135      PFIELD(:,:,:) = XWR_DEF
00136 !
00137   CASE('LAI    ')
00138      ALLOCATE(PFIELD(NNI,1,NVEGTYPE))
00139      PFIELD(:,:,:) = XUNDEF
00140 !
00141 !
00142 !*      3.5    Other fields
00143 !
00144   CASE('ZS     ')
00145      CALL READ_GRIB_ZS_LAND(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD1D)
00146      ALLOCATE(PFIELD(SIZE(ZFIELD1D,1),1,1))
00147      PFIELD(:,1,1)=ZFIELD1D(:)
00148      DEALLOCATE(ZFIELD1D)
00149 
00150   CASE DEFAULT
00151      CALL ABOR1_SFX('PREP_TEB_GARDEN_GRIB: OPTION NOT SUPPORTED - '//HSURF)
00152 
00153 END SELECT
00154 !
00155 DEALLOCATE(ZMASK)
00156 !
00157 !*      4.     Interpolation method
00158 !              --------------------
00159 !
00160 CINTERP_TYPE='HORIBL'
00161 !
00162 !-------------------------------------------------------------------------------------
00163 !-------------------------------------------------------------------------------------
00164 !
00165 IF (LHOOK) CALL DR_HOOK('PREP_TEB_GARDEN_GRIB',1,ZHOOK_HANDLE)
00166 CONTAINS
00167 !
00168 !-------------------------------------------------------------------------------------
00169 !-------------------------------------------------------------------------------------
00170 SUBROUTINE SOIL_PROFILE_GRIB
00171 !-------------------------------------------------------------------------------------
00172 !
00173 REAL, DIMENSION(:,:), ALLOCATABLE :: ZOUT   ! work array
00174 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00175 !
00176 !-------------------------------------------------------------------------------------
00177 !
00178      !
00179      !* interpolation on fine vertical grid
00180      IF (LHOOK) CALL DR_HOOK('SOIL_PROFILE_GRIB',0,ZHOOK_HANDLE)
00181      ALLOCATE(ZOUT  (SIZE(ZFIELD,1),SIZE(XGRID_SOIL)))
00182      CALL INTERP_GRID(ZD,ZFIELD,XGRID_SOIL,ZOUT)
00183      !
00184      !* extends definition to all vegtypes.
00185      ALLOCATE(PFIELD(SIZE(ZFIELD,1),SIZE(XGRID_SOIL),NVEGTYPE))
00186      DO JVEGTYPE=1,NVEGTYPE
00187        PFIELD(:,:,JVEGTYPE)=ZOUT(:,:)
00188      END DO
00189      !* end
00190      DEALLOCATE(ZOUT)
00191      DEALLOCATE(ZFIELD)
00192      DEALLOCATE(ZD)
00193 IF (LHOOK) CALL DR_HOOK('SOIL_PROFILE_GRIB',1,ZHOOK_HANDLE)
00194 
00195 END SUBROUTINE SOIL_PROFILE_GRIB
00196 !
00197 !-------------------------------------------------------------------------------------
00198 END SUBROUTINE PREP_TEB_GARDEN_GRIB