SURFEX v7.3
General documentation of Surfex
|
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