SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/hor_interpol.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE HOR_INTERPOL(KLUOUT,PFIELDIN,PFIELDOUT)
00003 !     #################################################################################
00004 !
00005 !!****  *HOR_INTERPOL * - Call the interpolation of a surface field
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 !!      P. Le Moigne 10/2005, Phasage Arome
00025 !!------------------------------------------------------------------
00026 !
00027 !
00028 USE MODD_PREP,       ONLY : CINGRID_TYPE, CINTERP_TYPE
00029 !
00030 USE MODI_HOR_INTERPOL_GAUSS
00031 USE MODI_HOR_INTERPOL_ROTLATLON
00032 USE MODI_HOR_INTERPOL_AROME
00033 USE MODI_HOR_INTERPOL_CONF_PROJ
00034 USE MODI_HOR_INTERPOL_CARTESIAN
00035 USE MODI_HOR_INTERPOL_LATLON
00036 !
00037 !
00038 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00039 USE PARKIND1  ,ONLY : JPRB
00040 !
00041 USE MODI_ABOR1_SFX
00042 !
00043 USE MODI_HOR_INTERPOL_BUFFER
00044 IMPLICIT NONE
00045 !
00046 !*      0.1    declarations of arguments
00047 !
00048 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00049 REAL, DIMENSION(:,:), INTENT(IN)   :: PFIELDIN  ! field to interpolate horizontally
00050 REAL, DIMENSION(:,:), INTENT(OUT)  :: PFIELDOUT ! interpolated field
00051 !
00052 !*      0.2    declarations of local variables
00053 !
00054 INTEGER :: JL ! loop counter
00055 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00056 !
00057 !-------------------------------------------------------------------------------------
00058 !
00059 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL',0,ZHOOK_HANDLE)
00060 SELECT CASE (CINTERP_TYPE)
00061 !
00062 !*      1.     Interpolation with horibl (from gaussian, Legendre or regular grid)
00063 !              -------------------------------------------------------------------
00064 !
00065   CASE('HORIBL')
00066     SELECT CASE(CINGRID_TYPE)
00067 !
00068 !*      1.1    Interpolation from gaussian or Legendre
00069 !
00070       CASE ('GAUSS     ')
00071         CALL HOR_INTERPOL_GAUSS(KLUOUT,PFIELDIN,PFIELDOUT)
00072 !
00073 !*      1.2    Interpolation from regular grid
00074 !
00075       CASE ('AROME     ')
00076         CALL HOR_INTERPOL_AROME(KLUOUT,PFIELDIN,PFIELDOUT)
00077 !
00078 !*      1.3    Interpolation from regular lat/lon coord
00079 !
00080       CASE ('LATLON    ')
00081         CALL HOR_INTERPOL_LATLON(KLUOUT,PFIELDIN,PFIELDOUT)
00082 !
00083 !*      1.4    Interpolation from rotated lat/lon coord
00084 !
00085       CASE ('ROTLATLON ')
00086         CALL HOR_INTERPOL_ROTLATLON(KLUOUT,PFIELDIN,PFIELDOUT)        
00087 
00088       CASE DEFAULT
00089         CALL ABOR1_SFX('HOR_INTERPOL: WRONG GRID TYPE'//CINGRID_TYPE)
00090 
00091     END SELECT
00092 !
00093 !*      2.     Prescribed uniform field
00094 !              ------------------------
00095 !
00096   CASE('UNIF  ')
00097     DO JL=1,SIZE(PFIELDIN,2)
00098       PFIELDOUT(:,JL) = PFIELDIN(1,JL)
00099     END DO
00100 !
00101 !*      3.     Bilinear interpolation
00102 !              ----------------------
00103 !
00104   CASE('BILIN ')
00105     SELECT CASE(CINGRID_TYPE)
00106       CASE ('CONF PROJ ')
00107         CALL HOR_INTERPOL_CONF_PROJ(KLUOUT,PFIELDIN,PFIELDOUT)
00108       CASE ('CARTESIAN ')
00109         CALL HOR_INTERPOL_CARTESIAN(KLUOUT,PFIELDIN,PFIELDOUT)
00110     END SELECT
00111 !
00112 !*      4.     no interpolation, only packing
00113 !              ------------------------------
00114 !
00115   CASE('BUFFER')
00116     CALL HOR_INTERPOL_BUFFER(KLUOUT,PFIELDIN,PFIELDOUT)
00117 
00118 !
00119 !*      4.     no interpolation
00120 !              ----------------
00121 !
00122   CASE('NONE  ')
00123     DO JL=1,SIZE(PFIELDIN,2)
00124       PFIELDOUT(:,JL) = PFIELDIN(:,JL)
00125     END DO
00126 
00127   CASE DEFAULT 
00128     CALL ABOR1_SFX('HOR_INTERPOL: WRONG INTERPOLATION TYPE'//CINTERP_TYPE)
00129 
00130 END SELECT
00131 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL',1,ZHOOK_HANDLE)
00132 !
00133 !-------------------------------------------------------------------------------------
00134 END SUBROUTINE HOR_INTERPOL