SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/prep_seaflux_grib.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE PREP_SEAFLUX_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
00003 !     #################################################################################
00004 !
00005 !!****  *PREP_SEAFLUX_GRIB* - prepares SEAFLUX fields from operational GRIB
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    01/2004
00024 !!------------------------------------------------------------------
00025 !
00026 
00027 !
00028 USE MODE_READ_GRIB
00029 !
00030 USE MODD_TYPE_DATE_SURF
00031 !
00032 USE MODI_PREP_GRIB_GRID
00033 !
00034 USE MODD_PREP,       ONLY : CINGRID_TYPE, CINTERP_TYPE
00035 USE MODD_GRID_GRIB,  ONLY : CGRIB_FILE
00036 !
00037 !
00038 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00039 USE PARKIND1  ,ONLY : JPRB
00040 !
00041 IMPLICIT NONE
00042 !
00043 !*      0.1    declarations of arguments
00044 !
00045  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
00046  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
00047  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
00048 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00049 REAL,DIMENSION(:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
00050 !
00051 !*      0.2    declarations of local variables
00052 !
00053 TYPE (DATE_TIME)                :: TZTIME_GRIB    ! current date and time
00054  CHARACTER(LEN=6)              :: YINMODEL ! model from which GRIB file originates
00055 REAL, DIMENSION(:)  ,     POINTER :: ZMASK => NULL()          ! Land mask
00056 REAL, DIMENSION(:),       POINTER :: ZFIELD => NULL()   ! field read
00057 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00058 !
00059 !-------------------------------------------------------------------------------------
00060 !
00061 !*      1.     Reading of grid
00062 !              ---------------
00063 !
00064 IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_GRIB',0,ZHOOK_HANDLE)
00065 !
00066 IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE=""
00067 !
00068  CALL PREP_GRIB_GRID(HFILE,KLUOUT,YINMODEL,CINGRID_TYPE,TZTIME_GRIB)
00069 !
00070  CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,YINMODEL,ZMASK)
00071 !
00072 !*      2.     Reading of field
00073 !              ----------------
00074 !-----------------
00075 SELECT CASE(HSURF)
00076 !-----------------
00077 !
00078 !* 1.  Orography
00079 !      ---------
00080 !
00081   CASE('ZS     ')
00082     SELECT CASE (YINMODEL)
00083       CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00084         CALL READ_GRIB_ZS_SEA(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD)
00085         ALLOCATE(PFIELD(SIZE(ZFIELD),1))
00086         PFIELD(:,1) = ZFIELD(:)
00087         DEALLOCATE(ZFIELD)
00088     END SELECT
00089 
00090 !
00091 !* 3.  Temperature profiles
00092 !      --------------------
00093 !
00094   CASE('SST    ')
00095     SELECT CASE (YINMODEL)
00096       CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE')
00097         CALL READ_GRIB_SST(HFILE,KLUOUT,YINMODEL,ZMASK,ZFIELD)
00098         ALLOCATE(PFIELD(SIZE(ZFIELD),1))
00099         PFIELD(:,1) = ZFIELD(:)
00100         DEALLOCATE(ZFIELD)
00101     END SELECT
00102 
00103 END SELECT
00104 !
00105 DEALLOCATE(ZMASK)
00106 !
00107 !*      4.     Interpolation method
00108 !              --------------------
00109 !
00110 CINTERP_TYPE='HORIBL'
00111 IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_GRIB',1,ZHOOK_HANDLE)
00112 !
00113 !-------------------------------------------------------------------------------------
00114 END SUBROUTINE PREP_SEAFLUX_GRIB