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