birect.f.html | ![]() |
Source file: birect.f | |
Directory: /home/rjl/git/rjleveque/clawpack-4.x/amrclaw/2d/lib | |
Converted: Sun May 15 2011 at 19:16:13 using clawcode2html | |
This documentation file will not reflect any later changes in the source file. |
c c -------------------------------------------------- c subroutine birect(mptr1) c implicit double precision (a-h,o-z) include "call.i" c c ::::::::::::: BIRECT ::::::::::::::::::::::::::::::::::::::: c check each grid, starting with mptr1 (either newstl or lstart) c to see that it has no more than max1d points in either dimensions. c needed so that scratch array space in stepgrid not exceeded. c c also check for too small grids - but has never happened. c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: c mptr = mptr1 level = node(nestlevel,mptr) hx = hxposs(level) hy = hyposs(level) c 10 continue cxlo = rnode(cornxlo,mptr) cxhi = rnode(cornxhi,mptr) cylo = rnode(cornylo,mptr) cyhi = rnode(cornyhi,mptr) nx = node(ndihi,mptr) - node(ndilo,mptr) + 1 ny = node(ndjhi,mptr) - node(ndjlo,mptr) + 1 minsize = 2*nghost c c check number of rows first - if too many, bisect grid with vertical c line down the middle. make sure new grid corners are anchored c on coarse grid point. make sure if bisecting coarse grid that c new grids have even number of points c if (nx + 2*nghost .gt. max1d) then nxl = nx/2 if (level .gt. 1) then lratio = intratx(level-1) else lratio = 2 endif nxl = (nxl/lratio)*lratio nxr = nx - nxl cxmid = cxlo + nxl*hx mptrnx = nodget(dummy) node(levelptr,mptrnx) = node(levelptr,mptr) node(levelptr,mptr) = mptrnx rnode(cornxhi,mptr) = cxmid node(ndihi,mptrnx) = node(ndihi,mptr) node(ndihi,mptr) = node(ndilo,mptr) + nxl - 1 node(ndilo,mptrnx) = node(ndihi,mptr) + 1 node(ndjhi,mptrnx) = node(ndjhi,mptr) node(ndjlo,mptrnx) = node(ndjlo,mptr) rnode(cornxlo,mptrnx) = cxmid rnode(cornylo,mptrnx) = cylo rnode(cornyhi,mptrnx) = cyhi rnode(cornxhi,mptrnx) = cxhi rnode(timemult,mptrnx) = rnode(timemult,mptr) node(nestlevel,mptrnx) = node(nestlevel,mptr) go to 10 c c check number of columns next - if too many, bisect grid with horizontal c line down the middle c else if (ny + 2*nghost .gt. max1d) then nyl = ny/2 if (level .gt. 1) then lratio = intraty(level-1) else lratio = 2 endif nyl = (nyl/lratio)*lratio nyr = ny - nyl cymid = cylo + nyl*hy mptrnx = nodget(dummy) node(levelptr,mptrnx) = node(levelptr,mptr) node(levelptr,mptr) = mptrnx rnode(cornyhi,mptr) = cymid node(ndjhi,mptrnx) = node(ndjhi,mptr) node(ndjhi,mptr) = node(ndjlo,mptr) + nyl - 1 node(ndjlo,mptrnx) = node(ndjhi,mptr) + 1 node(ndihi,mptrnx) = node(ndihi,mptr) node(ndilo,mptrnx) = node(ndilo,mptr) rnode(cornxlo,mptrnx) = cxlo rnode(cornylo,mptrnx) = cymid rnode(cornyhi,mptrnx) = cyhi rnode(cornxhi,mptrnx) = cxhi node(nestlevel,mptrnx) = node(nestlevel,mptr) rnode(timemult,mptrnx) = rnode(timemult,mptr) go to 10 c c grid ok - check the next c else mptr = node(levelptr,mptr) if (mptr.ne.0) go to 10 endif return end