Skip to content
Snippets Groups Projects
hor_interpol_1cov.F90 3.65 KiB
Newer Older
  • Learn to ignore specific revisions
  • !SURFEX_LIC Copyright 1994-2014 Meteo-France 
    !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
    !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
    !SURFEX_LIC for details. version 1.
    !     #########
    SUBROUTINE HOR_INTERPOL_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
    !     #################################################################################
    !
    !!****  *HOR_INTERPOL * - Call the interpolation of a surface field
    !!
    !!    PURPOSE
    !!    -------
    !
    !!**  METHOD
    !!    ------
    !!
    !!    REFERENCE
    !!    ---------
    !!      
    !!
    !!    AUTHOR
    !!    ------
    !!     M.Moge (adapted from  HOR_INTERPOL)
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!      Original     06/2015
    !!------------------------------------------------------------------
    !
    !
    USE MODD_PREP,       ONLY : CINGRID_TYPE, CINTERP_TYPE
    !
    USE MODI_HOR_INTERPOL_GAUSS_1COV
    USE MODI_HOR_INTERPOL_ROTLATLON_1COV
    USE MODI_HOR_INTERPOL_AROME_1COV
    USE MODI_HOR_INTERPOL_CONF_PROJ_1COV
    USE MODI_HOR_INTERPOL_CARTESIAN_1COV
    USE MODI_HOR_INTERPOL_LATLON_1COV
    !
    !
    USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
    USE PARKIND1  ,ONLY : JPRB
    !
    USE MODI_ABOR1_SFX
    !
    USE MODI_HOR_INTERPOL_BUFFER
    IMPLICIT NONE
    !
    !*      0.1    declarations of arguments
    !
    INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
    REAL, DIMENSION(:), INTENT(IN)   :: PFIELDIN  ! field to interpolate horizontally
    REAL, DIMENSION(:), INTENT(OUT)  :: PFIELDOUT ! interpolated field
    !
    !*      0.2    declarations of local variables
    !
    INTEGER :: JL ! loop counter
    REAL(KIND=JPRB) :: ZHOOK_HANDLE
    !
    !-------------------------------------------------------------------------------------
    !
    IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL_1COV',0,ZHOOK_HANDLE)
    SELECT CASE (CINTERP_TYPE)
    !
    !*      1.     Interpolation with horibl (from gaussian, Legendre or regular grid)
    !              -------------------------------------------------------------------
    !
      CASE('HORIBL')
        SELECT CASE(CINGRID_TYPE)
    !
    !*      1.1    Interpolation from gaussian or Legendre
    !
          CASE ('GAUSS     ')
            CALL HOR_INTERPOL_GAUSS_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
    !
    !*      1.2    Interpolation from regular grid
    !
          CASE ('AROME     ')
            CALL HOR_INTERPOL_AROME_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
    !
    !*      1.3    Interpolation from regular lat/lon coord
    !
          CASE ('LATLON    ')
            CALL HOR_INTERPOL_LATLON_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
    !
    !*      1.4    Interpolation from rotated lat/lon coord
    !
          CASE ('ROTLATLON ')
            CALL HOR_INTERPOL_ROTLATLON_1COV(KLUOUT,PFIELDIN,PFIELDOUT)        
    !
          CASE DEFAULT
            CALL ABOR1_SFX('HOR_INTERPOL_1COV: WRONG GRID TYPE'//CINGRID_TYPE)
    
        END SELECT
    !
    !*      2.     Prescribed uniform field
    !              ------------------------
    !
      CASE('UNIF  ')
        PFIELDOUT(:) = PFIELDIN(1)
    !
    !*      3.     Bilinear interpolation
    !              ----------------------
    !
      CASE('BILIN ')
        SELECT CASE(CINGRID_TYPE)
          CASE ('CONF PROJ ')
            CALL HOR_INTERPOL_CONF_PROJ_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
          CASE ('CARTESIAN ')
            CALL HOR_INTERPOL_CARTESIAN_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
        END SELECT
    !
    !*      4.     no interpolation, only packing
    !              ------------------------------
    !
      CASE('BUFFER')
        CALL HOR_INTERPOL_BUFFER_1COV(KLUOUT,PFIELDIN,PFIELDOUT)
    
    !
    !*      4.     no interpolation
    !              ----------------
    !
      CASE('NONE  ')
        PFIELDOUT(:) = PFIELDIN(:)
    
      CASE DEFAULT 
        CALL ABOR1_SFX('HOR_INTERPOL_1COV: WRONG INTERPOLATION TYPE'//CINTERP_TYPE)
    
    END SELECT
    IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL_1COV',1,ZHOOK_HANDLE)
    !
    !-------------------------------------------------------------------------------------
    END SUBROUTINE HOR_INTERPOL_1COV