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