[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