[Nek5000-users] Mesh-Generation - Poisson solver

nek5000-users at lists.mcs.anl.gov nek5000-users at lists.mcs.anl.gov
Mon May 9 05:27:06 CDT 2011


Hi David,

The solver computes the displacement for the entire mesh ---

That was the goal of using the PDE-based approach and is
important if you have very thin meshes near the displaced
boundary.

To blend to the interior, I use the Gordon Hall scheme
(also known as trans-finite interpolation) on each element.
This can usually be invoked with the simple call:

       call fix_geom

I confess I've not tried fix_geom for 2D but I think it
should work.

It is not a bad idea to call fix_geom after calling the
Poisson clean up that you have below --- the advantage
of fix_geom is that it generally will get points back
onto a proper GLL displacement.   (This is by no means
rigorous... it's been developed more or less on a case-by-case
basis.)

Paul


On Mon, 9 May 2011, David Tempelmann wrote:

> Hi Paul,
>
> I've been using the "blending"-feature for the wing mesh that I got from
> you quite a bit now and it works nicely. However, I thought I had
> understood what it does but now I realized that I do not.
>
> The following part of the code that I got from you does the blending by
> solving a Poisson equation if I understand it right. In the beginning I
> thought that it solves a Poisson equation for each element where the
> coordinates of the GLL points along the edges are given as boundary
> conditions. But now I realized that also points at the upper edge (edge
> 3) of some elements (mostly the first 2-3 above the wall) are displaced.
> That means that those points can not be prescribed as boundary conditions.
>
> Could you explain what kind of equation you solve and what it does to
> the coordinates?
>
> Thanks a lot!
>
> David
>
> subroutine move_sides(xmn,ymn,zmn)  ! Blend xmn --> xm1
>      include 'SIZE'
>      include 'TOTAL'
>
>      parameter (ltt=lx1*ly1*lz1*lelt)
>      common /scrns/ h1(ltt),h2(ltt),ta(ltt),tb(ltt)
>
>      character*4 name
>
>      call set_tmsk(tmask)
>
>
>      do ipass=1,ndim  ! x- and y-component of displacement
>
>         write(name,4) ipass
>  4      format('mov',i1)
>
>         n = nx1*ny1*nz1*nelv
>         imesh  = 1
>         ifield = 1
>         isd    = 1
>         call rzero(t ,n)
>         call rzero(bq,n)
>         call rone (h1,n)
>         call rzero(h2,n)
>
>         if (ipass.eq.1) call sub3(tb,xmn,xm1,n) ! Boundary displacement
>         if (ipass.eq.2) call sub3(tb,ymn,ym1,n)
>         if (ipass.eq.3) call sub3(tb,zmn,zm1,n)
>
>         call axhelm  (ta,tb,h1,h2,imesh,isd)
>         call chsign  (ta,n)
>
>         tolmv = 1.e-5
>         nmxh  = 100
>
> c        Blend displacement into interior
>         call hmholtz(name,t,ta,h1,h2,tmask,vmult,imesh,tolmv,nmxh,isd)
>
>         if (ipass.eq.1) call add3(vx,t,tb,n)  ! vx = t+t_bdry = total
> displacement
>         if (ipass.eq.2) call add3(vy,t,tb,n)  ! vy = t+t_bdry
>         if (ipass.eq.3) call add3(vz,t,tb,n)  ! vz = t+t_bdry
>
>      enddo
>
>      call add2(xm1,vx,n) ! New mesh
>      call add2(ym1,vy,n)
>      call add2(zm1,vz,n)
>
>      call outpost(vx,vy,vz,pr,t,'   ')
>
>      return
>      end
>



More information about the Nek5000-users mailing list