2D AMRCLAW
griddomup.f
Go to the documentation of this file.
1 c
2 c ----------------------------------------------------
3 c
4  subroutine griddomup(iflags,iflags2,ilo,ihi,jlo,jhi,
5  . mbuff,lev,ilofine,ihifine,jlofine,jhifine)
6 
7  use amr_module
8  implicit double precision (a-h, o-z)
9 
10  integer*1 iflags (ilo-mbuff:ihi+mbuff,jlo-mbuff:jhi+mbuff)
11  integer*1 iflags2(ilofine-mbuff:ihifine+mbuff,
12  . jlofine-mbuff:jhifine+mbuff)
13 
14 c
15 c ::::::::::::::::::::::::::: DOMUP :::::::::::::::::::::
16 c
17 c domain flags for THIS GRID are in iflags. copy into iflags2, which is
18 c at a different level, dimensions differently
19 c
20 c :::::::::::::::::::::::::::::::::::::::::::::::::::::::
21 
22  if (dprint) then
23  write(outunit,*)" from griddomup: flags (before expansion,",
24  . " with buff cells)"
25  do 5 j=jhi+mbuff,jlo-mbuff,-1
26  write(outunit,100)(iflags(i,j),i=ilo-mbuff,ihi+mbuff)
27  5 continue
28  endif
29 c
30  lratiox = intratx(lev)
31  lratioy = intraty(lev)
32 
33  do 10 j = jlofine-mbuff,jhifine+mbuff
34  do 10 i = ilofine-mbuff,ihifine+mbuff
35  iflags2(i,j) = 0
36  10 continue
37 
38 c
39 c careful with buffer - cant just take coarse grid buffer and refine it
40 c since have same size buffer on finer grid
41  do 20 j = jlo,jhi
42  do 20 i = ilo,ihi
43  ifine = i * lratiox - 1 ! subtract 1 so can add in next loop
44  jfine = j * lratioy - 1
45  do 15 mj = 1, lratioy
46  do 15 mi = 1, lratiox
47  iset = min(ifine+mi,ihifine+mbuff) ! might as well include buffer, though done later
48  jset = min(jfine+mj,jhifine+mbuff) ! needed since grids dont align over many levels
49  iset = max(iset,ilofine-mbuff) ! but so expensive
50  jset = max(jset,jlofine-mbuff)
51  iflags2(iset,jset) = iflags(i,j)
52  15 continue
53  20 continue
54 c
55 c need to be careful due to possibly odd buffer size
56 c cant just take coarse cell and do all fine fine cells within, as above loop
57 c
58 c handle left and right buffer zones
59  do 25 j = jlofine-mbuff, jhifine+mbuff
60  do 23 i = ihifine+1, ihifine+mbuff
61 c get coarse indices for fine pt. i,j (in buffer zone)
62  ic = i/lratiox
63  jc = j/lratioy
64  iflags2(i,j) = iflags(ic,jc)
65  23 continue
66  do 24 i = ilofine-mbuff, ilofine-1
67 c get coarse indices for fine pt. i,j (in buffer zone)
68  ic = i/lratiox
69  jc = j/lratioy
70  iflags2(i,j) = iflags(ic,jc)
71  24 continue
72  25 continue
73 
74 c handle top and bottom buffer zones
75  do 33 i = ilofine, ihifine
76  do 35 j = jlofine-mbuff, jlofine-1
77 c get coarse indices for fine pt. i,j (in buffer zone)
78  ic = i/lratiox
79  jc = j/lratioy
80  iflags2(i,j) = iflags(ic,jc)
81  35 continue
82  do 34 j = jhifine+1, jhifine+mbuff
83 c get coarse indices for fine pt. i,j (in buffer zone)
84  ic = i/lratiox
85  jc = j/lratioy
86  iflags2(i,j) = iflags(ic,jc)
87  34 continue
88  33 continue
89 c
90 c do not need to do something special for periodicity. already taken into account when
91 c setting enlarged grid woth buffer zone at level lbase
92 c
93  90 continue
94  if (dprint) then
95  write(outunit,*)"from griddomup: flags (after ref 1 level up,",
96  . "with buff cells)"
97  do 70 j = jlofine-mbuff,jhifine+mbuff,-1
98  write(outunit,100)(iflags2(i,j),i=ilofine-mbuff,ihifine+mbuff)
99  100 format(80i1)
100  70 continue
101  endif
102 
103  return
104  end
subroutine griddomup(iflags, iflags2, ilo, ihi, jlo, jhi, mbuff, lev, ilofine, ihifine, jlofine, jhifine)
Definition: griddomup.f:4