[Nek5000-users] findpts

nek5000-users at lists.mcs.anl.gov nek5000-users at lists.mcs.anl.gov
Sun Sep 9 06:41:09 CDT 2018


Check out the hemi example. This will show you how to use the interpolation tool.

> On 9 Sep 2018, at 13:27, "nek5000-users at lists.mcs.anl.gov" <nek5000-users at lists.mcs.anl.gov> wrote:
> 
> Hi nek,
> 
> I wrote before in terms of findpts subroutine and tried some code. Unfortunately, I failed to get it right. May I attach my code here and please help me to sort it.
> 
> I want to map the given set of arbitrary points xyz(ldim,n) below to the local coordinates in the mesh (velocity grid). Currently, I stop at how to use findpts results to return ix, iy, iz and iel (element number). Can anyone help me finish it?
> 
>       subroutine interp_p(ielll,ixx,iyy,izz,xyz,n) !find elememt and processor for points xyz
> 
>       include 'SIZE'
>       include 'TOTAL'
> 
>       real xyz(ldim,n), r(n), s(n), s(n)
>       logical ifjac,ifpts
> 
>       integer rcodee(n), ielll(n), nidd(n)	  
>       integer nfail, inn
>       real dist(lpart)	  
>       real rst(lpart*ldim)	  
> 
>       parameter(nmax=lpart,nfldmax=ldim) 
>       common /rv_intp/ pts(ldim*nmax)
>       common /iv_intp/ ihandle
> 
>       integer icalld,e
>       save    icalld
>       data    icalld /0/
> 
>       nfail = 0
>       nxyz  = nx1*ny1*nz1
>       ntot  = nxyz*nelt
> 
>       if (n.gt.nmax) call exitti ('ABORT: interp_p() n > nmax!$',n)
>       
>       if (nelgt.ne.nelgv) call exitti
>      $   ('ABORT: interp_p() nelgt.ne.nelgv not yet supported!$',nelgv)
> 
>       do i=1,n				! ? not moving -> save?
>          pts(i)     = xyz(1,i)
>          pts(i + n) = xyz(2,i)
>          if (if3d)  pts(i + n*2) = xyz(3,i)
>       enddo
> 
>       if (icalld.eq.0) then		! interpolation setup	!? intpts_done(ih_intp_v)?
>         icalld = 1
>         tolin  = 1.e-8
>         call intpts_setup(tolin,ihandle)
>       endif
> 
>       nflds  = ndim ! number of fields to interpolate
> 
>       ! interpolate
>       ifjac  = .true.           ! output transpose (of Jacobian)
>       ifpts  = .true.            ! find points
>       if(nio.eq.0) write(6,*) 'call findpts'
>       call fintpts(ihandle,rcodee,1,ielll,1,rst,ndim,dist,1,pts(1),1,pts(n+1)
>      $             ,1,pts(2*n+1),1,n)
>       do inn = 1, n ! check return code
>          if(rcodee(inn) .eq. 1) then
>             nfail = nfail + 1
>             if(nfail .le. 5) write(6,'(a,1p4e15.7)') 
>      $     ' WARNING: point on boundary or outside the mesh xy[z]d^2: ',
>      $     (pts(inn+k*n),k=0,ndim-1),dist(inn)
>             endif
>          elseif(rcodee(inn) .eq. 2) then
>             nfail = nfail + 1
>             if(nfail .le. 5) write(6,'(a,1p3e15.7)') 
>      $     ' WARNING: point not within mesh xy[z]: !',
>      $     (pts(inn+k*n),k=0,ndim-1)
>          endif
>       enddo
> 
> 
> Kind regards,
> 
> Jian
> 
> _______________________________________________
> 
> Nek5000-users mailing list
> 
> Nek5000-users at lists.mcs.anl.gov
> 
> https://lists.mcs.anl.gov/mailman/listinfo/nek5000-users
> 



More information about the Nek5000-users mailing list