SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/hor_interpol_latlon.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE HOR_INTERPOL_LATLON(KLUOUT,PFIELDIN,PFIELDOUT)
00003 !     #################################################################################
00004 !
00005 !!****  *HOR_INTERPOL_LATLON* - Interpolation from a lat/lon regular grid
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    REFERENCE
00014 !!    ---------
00015 !!      
00016 !!
00017 !!    AUTHOR
00018 !!    ------
00019 !!     C. Lebeaupin Brossier 
00020 !!
00021 !!    MODIFICATIONS
00022 !!    -------------
00023 !!      Original    01/2004
00024 !!------------------------------------------------------------------
00025 !
00026 !
00027 !
00028 USE MODD_PREP,       ONLY : XLAT_OUT, XLON_OUT, LINTERP
00029 USE MODD_GRID_LATLONREGUL, ONLY : XILAT1, XILON1, XILAT2, XILON2,&
00030                                     NINLAT, NINLON, NILENGTH,XILATARRAY  
00031 USE MODD_SURF_PAR,   ONLY : XUNDEF
00032 !
00033 USE MODI_ADAPT_HORIBL_SURF
00034 !
00035 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00036 USE PARKIND1  ,ONLY : JPRB
00037 !
00038 IMPLICIT NONE
00039 !
00040 !*      0.1    declarations of arguments
00041 !
00042 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00043 REAL, DIMENSION(:,:), INTENT(IN)    :: PFIELDIN  ! field to interpolate horizontally
00044 REAL, DIMENSION(:,:), INTENT(OUT)   :: PFIELDOUT ! interpolated field
00045 !
00046 !*      0.2    declarations of local variables
00047 !
00048 INTEGER, DIMENSION(:), ALLOCATABLE :: IMASKIN  ! input mask
00049 INTEGER, DIMENSION(:), ALLOCATABLE :: IMASKOUT ! output mask
00050 INTEGER                         :: INO      ! output number of points
00051 INTEGER                         :: JL       ! loop counter
00052 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00053 !
00054 !-------------------------------------------------------------------------------------
00055 !*      1.    Allocations
00056 !
00057 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL_LATLON',0,ZHOOK_HANDLE)
00058 INO = SIZE(XLAT_OUT)
00059 !
00060 ALLOCATE(IMASKIN (NILENGTH))
00061 !
00062 ALLOCATE(IMASKOUT(INO))
00063 !
00064 !*      2.    Initializations
00065 !
00066 IMASKOUT = 1
00067 !
00068 !
00069 !*      3.    Input mask
00070 !
00071 DO JL=1,SIZE(PFIELDIN,2)
00072   IMASKIN(:) = 1
00073   WHERE(PFIELDIN(:,JL)==XUNDEF) IMASKIN = 0
00074 !
00075 !
00076 !*      4.    Interpolation with horibl
00077 !
00078   CALL ADAPT_HORIBL_SURF(XILATARRAY,XILAT1,XILON1,XILAT2,XILON2,NINLAT,NINLON,NILENGTH, &
00079                            PFIELDIN(:,JL),INO,XLON_OUT,XLAT_OUT,PFIELDOUT(:,JL),.FALSE.,  &
00080                            KLUOUT,LINTERP,IMASKIN,IMASKOUT)  
00081 END DO
00082 !
00083 !*      6.    Deallocations
00084 !
00085 IF (ALLOCATED(IMASKIN )) DEALLOCATE(IMASKIN )
00086 IF (ALLOCATED(IMASKOUT)) DEALLOCATE(IMASKOUT)
00087 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL_LATLON',1,ZHOOK_HANDLE)
00088 !-------------------------------------------------------------------------------
00089 END SUBROUTINE HOR_INTERPOL_LATLON