Newer
Older
!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!SFX_LIC for details. version 1.
! #########
SUBROUTINE PREP_SEAFLUX_GRIB(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
! #################################################################################
!
!!**** *PREP_SEAFLUX_GRIB* - prepares SEAFLUX fields from operational GRIB
!!
!! PURPOSE
!! -------
!
!!** METHOD
!! ------
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!! S. Malardel
!!
!! MODIFICATIONS
!! -------------
!! Original 01/2004
!! Modified 05/2018, S. Faroux/P. Wautelet: bug correction for allocation of PFIELD
!!------------------------------------------------------------------
!
!
USE MODE_READ_GRIB
!
USE MODD_GRID_GRIB, ONLY : CGRIB_FILE, NNI, CINMODEL
!
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
USE PARKIND1 ,ONLY : JPRB
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling surf. schemes
CHARACTER(LEN=7), INTENT(IN) :: HSURF ! type of field
CHARACTER(LEN=28), INTENT(IN) :: HFILE ! name of file
INTEGER, INTENT(IN) :: KLUOUT ! logical unit of output listing
REAL,DIMENSION(:,:), POINTER :: PFIELD ! field to interpolate horizontally
!
!* 0.2 declarations of local variables
!
REAL, DIMENSION(:) , POINTER :: ZMASK => NULL() ! Land mask
REAL, DIMENSION(:), POINTER :: ZFIELD => NULL() ! field read
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!
!-------------------------------------------------------------------------------------
!
!* 1. Reading of grid
! ---------------
!
IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_GRIB',0,ZHOOK_HANDLE)
!
IF (TRIM(HFILE).NE.CGRIB_FILE) CGRIB_FILE=""
!
CALL READ_GRIB_LAND_MASK(HFILE,KLUOUT,CINMODEL,ZMASK)
!
!* 2. Reading of field
! ----------------
!-----------------
SELECT CASE(HSURF)
!-----------------
!
!* 1. Orography
! ---------
!
CASE('ZS ')
SELECT CASE (CINMODEL)
CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM')
CALL READ_GRIB_ZS_SEA(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD)
ALLOCATE(PFIELD(SIZE(ZFIELD),1))
PFIELD(:,1) = ZFIELD(:)
DEALLOCATE(ZFIELD)
END SELECT
!
! --------------------
!
CASE('SST ')
SELECT CASE (CINMODEL)
CASE ('ECMWF ','ARPEGE','ALADIN','MOCAGE','HIRLAM')
CALL READ_GRIB_SST(HFILE,KLUOUT,CINMODEL,ZMASK,ZFIELD)
ALLOCATE(PFIELD(SIZE(ZFIELD),1))
PFIELD(:,1) = ZFIELD(:)
DEALLOCATE(ZFIELD)
END SELECT
!
!* 3. Sea surface salinity and ice fraction
! -------------------------------------
!
CASE('SSS ','SIC ')
ALLOCATE(PFIELD(NNI,1))
END SELECT
!
DEALLOCATE(ZMASK)
!
!* 4. Interpolation method
! --------------------
!
IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_GRIB',1,ZHOOK_HANDLE)
!
!-------------------------------------------------------------------------------------
END SUBROUTINE PREP_SEAFLUX_GRIB