SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/hor_interpol_arome.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE HOR_INTERPOL_AROME(KLUOUT,PFIELDIN,PFIELDOUT)
00003 !     #################################################################################
00004 !
00005 !!****  *HOR_INTERPOL_AROME * - Interpolation from an AROME grid
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 !!------------------------------------------------------------------
00025 !
00026 !
00027 !
00028 USE MODD_PREP,       ONLY : XLAT_OUT, XLON_OUT,LINTERP 
00029 USE MODD_GRID_AROME, ONLY : XX, XY, NX, NY, XLAT0, XLON0, XLATOR, XLONOR, XRPK, XBETA
00030 USE MODD_GRID_GRIB,  ONLY : NNI
00031 USE MODD_SURF_PAR,   ONLY : XUNDEF
00032 !
00033 USE MODE_GRIDTYPE_CONF_PROJ
00034 USE MODI_HORIBL_SURF
00035 !
00036 !
00037 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00038 USE PARKIND1  ,ONLY : JPRB
00039 !
00040 IMPLICIT NONE
00041 !
00042 !*      0.1    declarations of arguments
00043 !
00044 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
00045 REAL, DIMENSION(:,:), INTENT(IN)  :: PFIELDIN  ! field to interpolate horizontally
00046 REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELDOUT ! interpolated field
00047 !
00048 !*      0.2    declarations of local variables
00049 !
00050 REAL, DIMENSION(:), ALLOCATABLE :: ZX       ! X coordinate
00051 REAL, DIMENSION(:), ALLOCATABLE :: ZY       ! Y coordinate
00052 INTEGER, DIMENSION(:), ALLOCATABLE :: IMASKIN  ! input mask
00053 INTEGER, DIMENSION(:), ALLOCATABLE :: IMASKOUT ! output mask
00054 INTEGER                         :: INO      ! output number of points
00055 INTEGER                         :: JL       ! loop counter
00056 INTEGER, DIMENSION(:), ALLOCATABLE  :: IX  ! number of points on each line
00057 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00058 !
00059 !-------------------------------------------------------------------------------------
00060 !
00061 !*      1.    Allocations
00062 !
00063 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL_AROME',0,ZHOOK_HANDLE)
00064 INO = SIZE(XLAT_OUT)
00065 !
00066 ALLOCATE(IMASKIN (NNI))
00067 !
00068 ALLOCATE(ZX      (INO))
00069 ALLOCATE(ZY      (INO))
00070 ALLOCATE(IMASKOUT(INO))
00071 IMASKOUT = 1
00072 ALLOCATE(IX(NY))
00073 IX=NX
00074 !
00075 !*      2.    Transformation of latitudes/longitudes into metric coordinates of input grid
00076 !
00077  CALL XY_CONF_PROJ(XLAT0,XLON0,XRPK,XBETA,XLATOR,XLONOR,ZX,ZY,XLAT_OUT,XLON_OUT)
00078 !
00079 !
00080 !*      3.    Input mask
00081 !
00082 DO JL=1,SIZE(PFIELDIN,2)
00083   IMASKIN(:) = 1
00084   WHERE(PFIELDIN(:,JL)==XUNDEF) IMASKIN = 0
00085 !
00086 !
00087 !*      4.    Interpolation with horibl
00088 !
00089   CALL HORIBL_SURF(0.,0.,XY,XX,NY,IX,NNI,PFIELDIN(:,JL),INO,ZX,ZY,PFIELDOUT(:,JL), &
00090                      .FALSE.,KLUOUT,LINTERP,IMASKIN,IMASKOUT)  
00091 END DO
00092 !
00093 !*      5.    Deallocations
00094 !
00095 DEALLOCATE(ZX)
00096 DEALLOCATE(IX)
00097 DEALLOCATE(ZY)
00098 DEALLOCATE(IMASKIN )
00099 DEALLOCATE(IMASKOUT)
00100 IF (LHOOK) CALL DR_HOOK('HOR_INTERPOL_AROME',1,ZHOOK_HANDLE)
00101 
00102 !-------------------------------------------------------------------------------------
00103 END SUBROUTINE HOR_INTERPOL_AROME