7 hprogram,kluout,knpts,kcode,px,py,pfield,knear_nbr)
61 USE modi_get_interp_halo
62 USE modi_get_near_meshes
63 USE modi_sum_on_all_procs
65 USE yomhook
,ONLY : lhook, dr_hook
66 USE parkind1
,ONLY : jprb
77 CHARACTER(LEN=6),
INTENT(IN) :: hprogram
78 INTEGER,
INTENT(IN) :: kluout
79 INTEGER,
INTENT(IN) :: knpts
80 INTEGER,
DIMENSION(:),
INTENT(INOUT) :: kcode
87 REAL,
DIMENSION(:),
INTENT(IN) :: px
88 REAL,
DIMENSION(:),
INTENT(IN) :: py
89 REAL,
DIMENSION(:,:),
INTENT(INOUT) :: pfield
90 INTEGER,
INTENT(IN) :: knear_nbr
101 REAL,
DIMENSION(0:KNPTS) :: zndist
102 REAL,
DIMENSION(0:KNPTS,SIZE(PFIELD,2)) :: znval
103 REAL,
DIMENSION(SIZE(PFIELD,2)) :: zsum
111 INTEGER,
DIMENSION(SIZE(PFIELD,1)) :: iindex
112 INTEGER,
DIMENSION(SIZE(PFIELD,1)) :: iindex_all
113 INTEGER,
DIMENSION(SIZE(KCODE)) :: isize
116 REAL(KIND=JPRB) :: zhook_handle
119 IF (lhook) CALL dr_hook(
'INTERPOL_NPTS',0,zhook_handle)
127 IF(ug%CGRID==
'GAUSS'.OR.ihalo==0)
THEN
134 iscan_all = count(kcode(:)>0)
138 IF (kcode(jd)>0)
THEN
144 ELSEIF (.NOT.
ASSOCIATED(ug%NNEAR))
THEN
145 ALLOCATE(ug%NNEAR(il,knear_nbr))
147 CALL
get_near_meshes(ug%CGRID,ug%NGRID_PAR,u%NSIZE_FULL,ug%XGRID_PAR,knear_nbr,ug%NNEAR)
152 IF (kcode(jl)/=0) cycle
154 zndist(1:knpts) = 1.e20
156 znval(0:knpts,:) = 0.
158 IF(ug%CGRID==
'GAUSS'.OR.ihalo==0)
THEN
160 IF (u%NDIM_FULL/=isize0)
THEN
167 iindex(:) = iindex_all(:)
173 IF (ug%NNEAR(jl,jd)>0)
THEN
174 IF (kcode(ug%NNEAR(jl,jd))>0)
THEN
176 iindex(icount) = ug%NNEAR(jl,jd)
182 IF (icount>=knpts)
THEN
186 ELSEIF (knear_nbr>=u%NDIM_FULL .AND. icount>=1)
THEN
200 zdist= ( ( px(jd)-px(jl) ) ** 2 ) + ( ( py(jd)-py(jl) ) ** 2 )
202 IF ( zdist>zndist(inpts) ) cycle
206 IF ( zdist>zndist(jp-1) )
THEN
209 DO jpp = inpts,jp+1,-1
210 zndist(jpp) = zndist(jpp-1)
211 znval(jpp,:) = znval(jpp-1,:)
216 znval(jp,:) = pfield(jd,:)
226 zndist(:) = sqrt(zndist(:))
231 pfield(jl,:) = pfield(jl,:) + znval(jp,:)/zndist(jp)
232 zsum(:) = zsum(:) + 1./zndist(jp)
234 pfield(jl,:) = pfield(jl,:) / zsum(:)
238 IF (lhook) CALL dr_hook(
'INTERPOL_NPTS',1,zhook_handle)
integer function sum_on_all_procs(HPROGRAM, HGRID, OIN, HNAME)
subroutine interpol_npts(UG, U, HPROGRAM, KLUOUT, KNPTS, KCODE, PX, PY, PFIELD, KNEAR_NBR)
subroutine get_near_meshes(HGRID, KGRID_PAR, KL, PGRID_PAR, KNEAR_NBR, KNEAR)
subroutine get_interp_halo(HPROGRAM, HGRID, KHALO)