[Nek5000-users] New code+recycling BC

nek5000-users at lists.mcs.anl.gov nek5000-users at lists.mcs.anl.gov
Mon May 3 09:25:12 CDT 2010


Hi,

when updating the code from rev. 404 (oldvel.png) to 503
(newvel.png), I realized a problem with the recycling
(periodic) boundary condition for a channel simulation I am doing -
compare the attached pictures of velocity on the inflow plane (the 
inflow is the Y/Z plane). For the two cases, SIZE/SIZEu, .rea, the 
restart step and .usr are the exact same.

Here are the relevant pieces from .usr. Have any of the functions
changed or am I doing something wrong? It seems as if the element
ordering is not what it was before.
I did this based on the jet example.

Thanks,
Markus


c-----------------------------------------------------------------------
        subroutine userbc (ix,iy,iz,iside,eg)
        include 'SIZE'
        include 'TOTAL'
        include 'NEKUSE'

        common /cvelbc/ uin(lx1,ly1,lz1,lelv)
       $              , vin(lx1,ly1,lz1,lelv)
       $              , win(lx1,ly1,lz1,lelv)
       $              , tin(lx1,ly1,lz1,lelv)

        integer e,eg

        e = gllel(eg)

        ux=uin(ix,iy,iz,e)
        uy=vin(ix,iy,iz,e)
        uz=win(ix,iy,iz,e)
.
....

c-----------------------------------------------------------------------
        subroutine userchk
        include 'SIZE'
        include 'TOTAL'
        include 'ZPER'  ! for nelx,nely,nelz
        include 'RESTART' !Needs to be here for prepost to work
        common /cvlmsk/ vlmsk(lx1,ly1,lz1,lelt),vvol,
       &                wt(lx1*ly1*lz1,lelt),vol_per

        integer e,f,eg,ninx,niny,ninz

.c-----Computations for recycling BC
        speed = glsc2(vx,wt,n)/vol_per ! Where vol_per is the volume of
the recycling box
        starg = 1.0
        addtemp = 1.0
        call set_inflow(starg,speed,addtemp)   ! set up inflow BCs
.
....

c-----------------------------------------------------------------------
        subroutine set_inflow(starg,speed,addtemp)   ! set up inflow BCs

        include 'SIZE'
        include 'TOTAL'

        integer icalld,e,eg,f
        save    icalld
        data    icalld /0/

        common /cvelbc/ uin(lx1,ly1,lz1,lelv)
       $              , vin(lx1,ly1,lz1,lelv)
       $              , win(lx1,ly1,lz1,lelv)
       $              , tin(lx1,ly1,lz1,lelv)

        common /scruz/  ptr(lx1,ly1,lz1,lelv)
        integer ptr,gs_bc_hndl
        save        gs_bc_hndl

        real ratio
        save ratio
        data ratio / 1. /

        common /nekmpi/ mid,mp,nekcomm,nekgroup,nekreal

        n = nx1*ny1*nz1*nelv

        if (icalld.eq.0) then
           icalld = 1
           nxyz = nx1*ny1*nz1

           do e=1,nelv
              eg = lglel(e)
              eo = nxyz*(eg-1)    ! offset
              do i=1,nxyz
                 ptr(i,1,1,e) = i+eo
              enddo

              do k=2,nz1-1        ! get rid of interior pointers
              do j=2,ny1-1            do i=2,nx1-1
                 ptr(i,j,k,e) = 0
              enddo
              enddo
              enddo

              nface = 2*ndim
              do f=1,nface        ! connect inflow to elems downstream
                 ioff = nxyz*8    ! 5 elements in X to end of "periodic" 
sec.
                 if (cbc(f,e,1).eq.'v  ') then
                   call iface_add(ptr,f,e,ioff,nx1,ny1,nz1)
                 endif
              enddo

           enddo

           call gs_setup(gs_bc_hndl,ptr,n,nekcomm,np) ! connect v +
downstream

        endif

        call copy(uin,vx,n)
        call copy(vin,vy,n)
        call copy(win,vz,n)
        call copy(tin,t,n)

        call col2(uin,v1mask,n)
        call col2(vin,v2mask,n)
        call col2(win,v3mask,n)
        call col2(tin,tmask,n)

        call gs_op(gs_bc_hndl,uin,1,1,0)  ! 1 ==> +  ! uin(inflow) =
vx(slab_k)
        call gs_op(gs_bc_hndl,vin,1,1,0)  ! 1 ==> +
        call gs_op(gs_bc_hndl,win,1,1,0)  ! 1 ==> +
        call gs_op(gs_bc_hndl,tin,1,1,0)  ! 1 ==> +

        if (speed.gt.0) then
           ratio = .5*(starg/speed + ratio)
           call cmult(uin,ratio,n)
           call cmult(vin,ratio,n)
           call cmult(win,ratio,n)
           call cadd(tin,addtemp,n) !Substract added heat
        endif

        return
        end



-------------- next part --------------
A non-text attachment was scrubbed...
Name: oldvel.png
Type: image/png
Size: 71571 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/nek5000-users/attachments/20100503/687e6f7b/attachment.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: newvel.png
Type: image/png
Size: 31195 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/nek5000-users/attachments/20100503/687e6f7b/attachment-0001.png>


More information about the Nek5000-users mailing list