SourceForge



subroutine amr_1blk_bcset(mype,ibc,lb,pe, . idest,iopt,iface,jface,kface,surrblks) !------------------------------------------------------------------------ ! ! This routine sets guardcell values at external boundaries in the case ! where a single block is having its guardcells filled. ! ! It can be assumed in writing this routine, that all guardcells for this ! block which are not across an external boundary have already been ! properly filled. ! ! This routine provides code to set boundary conditions for a selection ! of common boundary conditions. ! ! ibc = -21 zero gradient ! ibc = -22 reflecting ! ! ! It is important to point out that any vector components stored ! in either unk or unk_n will have different reflection properties ! across different boundary planes. ! Note, in this example the following case is assumed: ! unk(1,....) is a scalar ! unk(2,....) is the x component of a vector ! unk(3,....) is the y component of a vector ! unk(4,....) is the z component of a vector ! unk(5,....) is a scalar ! ! unk_n all components are scalar. ! ! This is significant because it means that when ibc=-22, unk(2,...) ! changes it sign across x boundary planes but not across y or z ! boundary planes. Similarly unk(3,...) changes it sign across y ! boundary planes but not across x or z boundary planes. ! !------------------------------------------------------------------------ ! ! ! Arguments: ! mype local processor ! ibc the integer specifying the particular boundary ! condition to be imposed ! lb block number of selected block ! pe processor on which block lb is located ! idest selects the storage space in data_1blk.fh which is to ! be used in this call. If the leaf node is having its ! guardcells filled then set this to 1, if its parent ! is being filled set it to 2. ! iface a selector setting designating whether the guarcells ! to be set are at the left, center or right sections ! of the i index range, eg ! iface = -1 left end ! = 0 middle ! = +1 right. For example, if iface=-1, ! the i index applied when filling unk will run ! from 1:nguard, if iface=0 from 1+nguard:nxb+nguard, ! and if iface=+1 from nxb+nguard+1:nxb+2*nguard. ! jface a selector setting designating whether the guarcells ! to be set are at the left, center or right sections ! of the j index range. ! kface a selector setting designating whether the guarcells ! to be set are at the left, center or right sections ! of the k index range. ! ! ! Written : Peter MacNeice August 1998 ! Modified: Peter MacNeice January 2001 !------------------------------------------------------------------------ use paramesh_dimensions use physicaldata use tree use workspace #include "amr_shmem.fh" integer, intent(in) :: mype,ibc,lb,pe integer, intent(in) :: idest,iopt,iface,jface,kface integer, intent(in) :: surrblks(:,:,:,:) real ccoord(3),csize(3) save ccoord,csize integer il,jl,kl,iface,jface,kface,id1,jd1,kd1,i,j,k integer ks,js,is,lbw,ivar real :: fact !--------------------------------------------------------------------------- ! Do not modify this section if(iopt.eq.1) then nguard0 = nguard elseif(iopt.gt.1) then nguard0 = nguard_work endif ilays = nguard0 jlays = nguard0*k2d klays = nguard0*k3d if(iface.eq.0) ilays = nxb if(jface.eq.0) jlays = nyb
if(kface.eq.0) klays = nzb

ip1 = 0
jp1 = 0
kp1 = 0
if(iface.eq.1) ip1 = 1
if(jface.eq.1) jp1 = k2d
if(kface.eq.1) kp1 = k3d


id = 1
if(iface.eq.0) id = 1+nguard0
if(iface.eq.+1) id = nxb+1+nguard0
jd = 1
if(jface.eq.0) jd = 1+nguard0*k2d
if(jface.eq.+1) jd = nyb+(1+nguard0)*k2d
kd = 1
if(kface.eq.0) kd = 1+nguard0*k3d
if(kface.eq.+1) kd = nzb+(1+nguard0)*k3d

!
! Adjust index ranges
il = ilays-1
jl = (jlays-1)*k2d
kl = (klays-1)*k3d


!
! Now reset iface,jface,kface so that blocks next to a boundary
! which treat their diagonal and corner guardcells correctly.
iface0 = iface
jface0 = jface
kface0 = kface
if(iface.ne.0.and.surrblks(1,iface+2,2,2).gt.-20) iface=0
if(jface.ne.0.and.surrblks(1,2,jface+2,2).gt.-20) jface=0
if(kface.ne.0.and.surrblks(1,2,2,kface+2).gt.-20) kface=0


!---------------------------------------------------------------------------
! Section to be modified by user


! Which boundary condition has been specified?


if(ibc.eq.-22) then
!
!-------------------------
! reflecting - all variables

lbw = idest

if(iopt.eq.1) then

!
! Do cell-face-centered data
if(nfacevar.gt.0) then

id1 = id + ip1
jd1 = jd + jp1*k2d
kd1 = kd + kp1*k3d

! set the following index range in facevarx1
!
! facevarx1(:,id1:id1+il,jd:jd+jl,kd:kd+kl,idest) =
! . ????

il0 = 0
if(iface0.eq.0) il0 = 1

fact = 1.
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard*k3d-(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard*k2d-(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id1 ,id1+il+il0
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+2
fact = -1.
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard+1)+gc_off_x)
fact = -1.
endif
facevarx1(:nfacevar,i,j,k,lbw) =
. facevarx1(:nfacevar,is,js,ks,lbw)*fact
enddo
enddo
enddo


! set the following index range in facevary1
!
! facevary1(:,id:id+il,jd1:jd1+jl,kd:kd+kl,idest) =
! . ????

jl0 = 0
if(jface0.eq.0) jl0 = k2d

fact = 1.
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard*k3d-(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd1,jd1+jl+jl0
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
fact = -1.
js = (2*nguard-j+gc_off_y+1)*k2d+1
elseif(jface.eq.1) then
fact = -1.
js = (nyb+(nguard+1)*k2d)
. -(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+1
elseif(iface.eq.1) then
is = (nxb+nguard)-(i-(nxb+nguard+1)+gc_off_x)
endif

facevary1(:nfacevar,i,j,k,lbw) =
. facevary1(:nfacevar,is,js,ks,lbw)*fact
enddo
enddo
enddo

! set the following index range in facevarz1
!
! facevarz1(:,id:id+il,jd:jd+jl,kd1:kd1+kl,idest) =
! . ????

kl0 = 0
if(kface0.eq.0) kl0 = k3d

fact = 1.
do k = kd1,kd1+kl+kl0
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
fact = -1.
ks = (2*nguard-k+gc_off_z+1)*k3d+1
elseif(kface.eq.1) then
fact = -1.
ks = (nzb+(nguard+1)*k3d)
. -(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard*k2d-(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+1
elseif(iface.eq.1) then
is = (nxb+nguard)-(i-(nxb+nguard+1)+gc_off_x)
endif

facevarz1(:nfacevar,i,j,k,lbw) =
. facevarz1(:nfacevar,is,js,ks,lbw)*fact
enddo
enddo
enddo


endif ! end of nfacevar if test


!
! Now do cell centered data


if(nvar.gt.0) then

! set the following index range in unk1
!
! unk1(:,id:id+il,jd:jd+jl,kd:kd+kl,idest) =
! . ????

lbw = idest
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard*k3d-(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard*k2d-(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+1
elseif(iface.eq.1) then
is = nxb+nguard-(i-(nxb+nguard+1)+gc_off_x)
endif

! apply sign change to vector component perpendicular to the appropriate
! boundaries
do ivar = 1,nvar
fact= 1.0
if(ivar.eq.2.and.abs(iface).ne.0)then
fact=-1.0
elseif(ivar.eq.3.and.abs(jface).ne.0)then
fact=-1.0
#if N_DIM == 3
elseif(ivar.eq.4.and.abs(kface).ne.0)then
fact=-1.0
#endif
endif
unk1(ivar,i,j,k,lbw) = fact*unk1(ivar,is,js,ks,lbw)
enddo
enddo
enddo
enddo

endif ! end of nvar if test

!
! Now do cell corner data

if(nvarcorn.gt.0) then

! set the appropriate index range in unk_n1
!

il_extra = 0
iu_extra = 0
if(iface0.eq.0) then
iu_extra = 1
elseif(iface0.eq.+1) then
il_extra = 1
iu_extra = 1
endif
jl_extra = 0
ju_extra = 0
if(jface0.eq.0) then
ju_extra = k2d
elseif(jface0.eq.+1) then
jl_extra = k2d
ju_extra = k2d
endif
kl_extra = 0
ku_extra = 0
if(kface0.eq.0) then
ku_extra = k3d
elseif(kface0.eq.+1) then
kl_extra = k3d
ku_extra = k3d
endif

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard+1-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard+1))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (1+nguard*k2d)+(nguard+1-j)*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard+1))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (nguard+1)+(nguard+1-i)
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard+1))
endif

! apply sign change to vector component perpendicular to the appropriate
! boundaries
do ivar = 1,nvarcorn
fact= 1.0
unk_n1(ivar,i,j,k,lbw) =
. fact*unk_n1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo

endif ! end of nvarcorn if test

!
! Now do cell edge centered data

#ifdef N_DIM > 1

if(nvaredge.gt.0) then
! First unk_e_x1
!
il_extra = 0
iu_extra = 0
jl_extra = 0
ju_extra = 0
if(jface0.eq.0) then
ju_extra = k2d
elseif(jface0.eq.+1) then
jl_extra = k2d
ju_extra = k2d
endif
kl_extra = 0
ku_extra = 0
if(kface0.eq.0) then
ku_extra = k3d
elseif(kface0.eq.+1) then
kl_extra = k3d
ku_extra = k3d
endif

fact = 1.

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard+1-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard+1))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (1+nguard*k2d)+(nguard+1-j)*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard+1))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = nguard+(nguard+1-i)
fact = -1.
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard))
fact = -1.
endif

! apply sign change to vector component perpendicular to the appropriate
! boundaries
do ivar = 1,nvaredge
unk_e_x1(ivar,i,j,k,lbw) =
. fact*unk_e_x1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo

! Now unk_e_y1
!
il_extra = 0
iu_extra = 0
if(iface0.eq.0) then
iu_extra = 1
elseif(iface0.eq.+1) then
il_extra = 1
iu_extra = 1
endif
jl_extra = 0
ju_extra = 0
kl_extra = 0
ku_extra = 0
if(kface0.eq.0) then
ku_extra = k3d
elseif(kface0.eq.+1) then
kl_extra = k3d
ku_extra = k3d
endif

fact = 1.

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard+1-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard+1))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = 1+(nguard-(j-nguard))*k2d
fact = -1.
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard))*k2d
fact = -1.
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (1+nguard)+(nguard+1-i)
elseif(iface.eq.1) then
is = (1+(nxb+nguard))-(i-(nxb+nguard+1))
endif

! apply sign change to vector component perpendicular to the appropriate
! boundaries
do ivar = 1,nvaredge
unk_e_y1(ivar,i,j,k,lbw) =
. fact*unk_e_y1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo

#if N_DIM == 3
! finally unk_e_z1
!

il_extra = 0
iu_extra = 0
if(iface0.eq.0) then
iu_extra = 1
elseif(iface0.eq.+1) then
il_extra = 1
iu_extra = 1
endif
jl_extra = 0
ju_extra = 0
if(jface0.eq.0) then
ju_extra = k2d
elseif(jface0.eq.+1) then
jl_extra = k2d
ju_extra = k2d
endif
kl_extra = 0
ku_extra = 0

fact = 1.

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard-k)*k3d
fact = -1.
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard))*k3d
fact = -1.
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (1+nguard*k2d)+(nguard+1-j)*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard+1))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (nguard+1)+(nguard+1-i)
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard+1))
endif

! apply sign change to vector component perpendicular to the appropriate
! boundaries
do ivar = 1,nvaredge
unk_e_z1(ivar,i,j,k,lbw) =
. fact*unk_e_z1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo
#endif /* N_DIM == 3 */
#endif /* N_DIM > 1 */

endif ! end of nvaredge if test


elseif(iopt.ge.2) then

! set the following index range in work1
!
! work1(id:id+il,jd:jd+jl,kd:kd+kl,idest) =
! . ????

lbw = idest
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard_work-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard_work*k3d-
. (k-(nzb+nguard_work+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard_work-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard_work*k2d-
. (j-(nyb+nguard_work+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard_work-i+gc_off_x)+1
elseif(iface.eq.1) then
is = nxb+nguard_work-
. (i-(nxb+nguard_work+1)+gc_off_x)
endif

work1(i,j,k,lbw) = work1(is,js,ks,lbw)

enddo
enddo
enddo


endif


!-------------------------


elseif(ibc.eq.-21) then


!-------------------------
! zero gradient - all variables

lbw = idest

if(iopt.eq.1) then

!
! Do cell-face-centered data
if(nfacevar.gt.0) then

id1 = id + ip1
jd1 = jd + jp1*k2d
kd1 = kd + kp1*k3d

! set the following index range in facevarx1
!
! facevarx1(:,id1:id1+il,jd:jd+jl,kd:kd+kl,idest) =
! . ????

il0 = 0
if(iface0.eq.0) il0 = 1

fact = 1.
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard*k3d-(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard*k2d-(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id1 ,id1+il+il0
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+2
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard+1)+gc_off_x)
endif
facevarx1(:nfacevar,i,j,k,lbw) =
. facevarx1(:nfacevar,is,js,ks,lbw)*fact
enddo
enddo
enddo


! set the following index range in facevary1
!
! facevary1(:,id:id+il,jd1:jd1+jl,kd:kd+kl,idest) =
! . ????

jl0 = 0
if(jface0.eq.0) jl0 = k2d

fact = 1.
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard*k3d-(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd1,jd1+jl+jl0
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y+1)*k2d+1
elseif(jface.eq.1) then
js = (nyb+(nguard+1)*k2d)
. -(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+1
elseif(iface.eq.1) then
is = (nxb+nguard)-(i-(nxb+nguard+1)+gc_off_x)
endif

facevary1(:nfacevar,i,j,k,lbw) =
. facevary1(:nfacevar,is,js,ks,lbw)*fact
enddo
enddo
enddo

! set the following index range in facevarz1
!
! facevarz1(:,id:id+il,jd:jd+jl,kd1:kd1+kl,idest) =
! . ????

kl0 = 0
if(kface0.eq.0) kl0 = k3d

fact = 1.
do k = kd1,kd1+kl+kl0
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z+1)*k3d+1
elseif(kface.eq.1) then
ks = (nzb+(nguard+1)*k3d)
. -(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard*k2d-(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+1
elseif(iface.eq.1) then
is = (nxb+nguard)-(i-(nxb+nguard+1)+gc_off_x)
endif

facevarz1(:nfacevar,i,j,k,lbw) =
. facevarz1(:nfacevar,is,js,ks,lbw)*fact
enddo
enddo
enddo


endif ! end of nfacevar if test


!
! Now do cell centered data


if(nvar.gt.0) then

! set the following index range in unk1
!
! unk1(:,id:id+il,jd:jd+jl,kd:kd+kl,idest) =
! . ????

lbw = idest
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard*k3d-(k-(nzb+nguard+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard*k2d-(j-(nyb+nguard+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard-i+gc_off_x)+1
elseif(iface.eq.1) then
is = nxb+nguard-(i-(nxb+nguard+1)+gc_off_x)
endif

do ivar = 1,nvar
fact= 1.0
unk1(ivar,i,j,k,lbw) = fact*unk1(ivar,is,js,ks,lbw)
enddo
enddo
enddo
enddo

endif ! end of nvar if test

!
! Now do cell corner data

if(nvarcorn.gt.0) then

! set the appropriate index range in unk_n1
!

il_extra = 0
iu_extra = 0
if(iface0.eq.0) then
iu_extra = 1
elseif(iface0.eq.+1) then
il_extra = 1
iu_extra = 1
endif
jl_extra = 0
ju_extra = 0
if(jface0.eq.0) then
ju_extra = k2d
elseif(jface0.eq.+1) then
jl_extra = k2d
ju_extra = k2d
endif
kl_extra = 0
ku_extra = 0
if(kface0.eq.0) then
ku_extra = k3d
elseif(kface0.eq.+1) then
kl_extra = k3d
ku_extra = k3d
endif

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard+1-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard+1))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (1+nguard*k2d)+(nguard+1-j)*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard+1))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (nguard+1)+(nguard+1-i)
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard+1))
endif

do ivar = 1,nvarcorn
fact= 1.0
unk_n1(ivar,i,j,k,lbw) =
. fact*unk_n1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo

endif ! end of nvarcorn if test

!
! Now do cell edge centered data

#ifdef N_DIM > 1

if(nvaredge.gt.0) then
! First unk_e_x1
!
il_extra = 0
iu_extra = 0
jl_extra = 0
ju_extra = 0
if(jface0.eq.0) then
ju_extra = k2d
elseif(jface0.eq.+1) then
jl_extra = k2d
ju_extra = k2d
endif
kl_extra = 0
ku_extra = 0
if(kface0.eq.0) then
ku_extra = k3d
elseif(kface0.eq.+1) then
kl_extra = k3d
ku_extra = k3d
endif

fact = 1.

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard+1-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard+1))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (1+nguard*k2d)+(nguard+1-j)*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard+1))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = nguard+(nguard+1-i)
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard))
endif

do ivar = 1,nvaredge
unk_e_x1(ivar,i,j,k,lbw) =
. fact*unk_e_x1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo

! Now unk_e_y1
!
il_extra = 0
iu_extra = 0
if(iface0.eq.0) then
iu_extra = 1
elseif(iface0.eq.+1) then
il_extra = 1
iu_extra = 1
endif
jl_extra = 0
ju_extra = 0
kl_extra = 0
ku_extra = 0
if(kface0.eq.0) then
ku_extra = k3d
elseif(kface0.eq.+1) then
kl_extra = k3d
ku_extra = k3d
endif

fact = 1.

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard+1-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard+1))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = 1+(nguard-(j-nguard))*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (1+nguard)+(nguard+1-i)
elseif(iface.eq.1) then
is = (1+(nxb+nguard))-(i-(nxb+nguard+1))
endif

do ivar = 1,nvaredge
unk_e_y1(ivar,i,j,k,lbw) =
. fact*unk_e_y1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo

#if N_DIM == 3
! finally unk_e_z1
!

il_extra = 0
iu_extra = 0
if(iface0.eq.0) then
iu_extra = 1
elseif(iface0.eq.+1) then
il_extra = 1
iu_extra = 1
endif
jl_extra = 0
ju_extra = 0
if(jface0.eq.0) then
ju_extra = k2d
elseif(jface0.eq.+1) then
jl_extra = k2d
ju_extra = k2d
endif
kl_extra = 0
ku_extra = 0

fact = 1.

lbw = idest

do k = kd+kl_extra,kd+kl+ku_extra
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (1+nguard*k3d)+(nguard-k)*k3d
elseif(kface.eq.1) then
ks = (1+(nzb+nguard)*k3d)-(k-(nzb+nguard))*k3d
endif

do j = jd+jl_extra,jd+jl+ju_extra
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (1+nguard*k2d)+(nguard+1-j)*k2d
elseif(jface.eq.1) then
js = (1+(nyb+nguard)*k2d)-(j-(nyb+nguard+1))*k2d
endif

do i = id+il_extra,id+il+iu_extra
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (nguard+1)+(nguard+1-i)
elseif(iface.eq.1) then
is = (nxb+nguard+1)-(i-(nxb+nguard+1))
endif

do ivar = 1,nvaredge
unk_e_z1(ivar,i,j,k,lbw) =
. fact*unk_e_z1(ivar,is,js,ks,lbw)
enddo

enddo
enddo
enddo
#endif /* N_DIM == 3 */
#endif /* N_DIM > 1 */

endif ! end of nvaredge if test


elseif(iopt.ge.2) then

! set the following index range in work1
!
! work1(id:id+il,jd:jd+jl,kd:kd+kl,idest) =
! . ????

lbw = idest
do k = kd,kd+kl
if(kface.eq.0 ) then
ks = k
elseif(kface.eq.-1) then
ks = (2*nguard_work-k+gc_off_z)*k3d+1
elseif(kface.eq.1) then
ks = nzb+nguard_work*k3d-
. (k-(nzb+nguard_work+1)+gc_off_z)*k3d
endif
do j = jd,jd+jl
if(jface.eq.0 ) then
js = j
elseif(jface.eq.-1) then
js = (2*nguard_work-j+gc_off_y)*k2d+1
elseif(jface.eq.1) then
js = nyb+nguard_work*k2d-
. (j-(nyb+nguard_work+1)+gc_off_y)*k2d
endif
do i = id,id+il
if(iface.eq.0 ) then
is = i
elseif(iface.eq.-1) then
is = (2*nguard_work-i+gc_off_x)+1
elseif(iface.eq.1) then
is = nxb+nguard_work-
. (i-(nxb+nguard_work+1)+gc_off_x)
endif

work1(i,j,k,lbw) = work1(is,js,ks,lbw)

enddo
enddo
enddo


endif


!
!-------------------------


endif ! end of test of bc flag


! End of Section to be modified by user
!---------------------------------------------------------------------------

return
end subroutine amr_1blk_bcset