projec.f.html | |
Source file: projec.f | |
Directory: /home/rjl/git/rjleveque/clawpack-4.x/amrclaw/2d/lib | |
Converted: Sun May 15 2011 at 19:16:15 using clawcode2html | |
This documentation file will not reflect any later changes in the source file. |
c c --------------------------------------------------------- c subroutine projec(level,numpro,iflags,isize,jsize) c implicit double precision (a-h,o-z) include "call.i" integer*1 iflags(0:isize+1,0:jsize+1) c c ::::::::::::::::::::::: PROJEC :::::::::::::::::::::::::::::: c for all newly created fine grids, project area onto a coarser c grid 2 levels down. Used to recreate grids 1 level down, and c insure proper level nesting. c c on entry, all coarse grids have already had error estimated, so c add bad flags. count number of 'added' flags only. c c input parameters: c level = project all fine subgrids onto grids at this level. c output parameters: c numpro = number of additional flagged pts. at 'level'. c (initialized to 0 in flglvl) c local variables: c iflags = holds coarser domain flagged points - receives projection c mkid = grid doing the projecting c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: c levpro = level + 2 lrat2x = intratx(level)*intratx(level+1) lrat2y = intraty(level)*intraty(level+1) c mkid = newstl(levpro) 10 if (mkid .eq. 0) go to 90 ilo = node(ndilo,mkid) jlo = node(ndjlo,mkid) ihi = node(ndihi,mkid) jhi = node(ndjhi,mkid) c c project entire region of fine grids into iflags array. c possibly take care of buffering. c adjust since grid descriptor (integer indices) is 0 based, c iflags indexing is 1 based. c ist = ilo/lrat2x jst = jlo/lrat2y iend = ihi/lrat2x jend = jhi/lrat2y if (ibuff .eq. 0) then c ## ensure proper nesting here, since buffering step won't follow if (ist*lrat2x .eq. ilo) ist = ist-1 if (jst*lrat2y .eq. jlo) jst = jst-1 if ((iend+1)*lrat2x .eq. ihi+1) iend = iend+1 if ((jend+1)*lrat2y .eq. jhi+1) jend = jend+1 endif c do 60 j = jst+1, jend+1 do 60 i = ist+1, iend+1 if (iflags(i,j) .eq. goodpt) then iflags(i,j) = badpro numpro = numpro + 1 if (pprint) write(outunit,101) i,j,mkid 101 format(' pt.',2i5,' of grid ',i5,' projected' ) endif 60 continue c c repeat above procedure for wrapped area if nec. if ibuff > 0 c this will be caught in shiftset flagging if (spheredom .and. ibuff .eq. 0) then jst = jlo/lrat2y jend = jhi/lrat2y if (jst .eq. 0) then iwrap1 = iregsz(level) - iend - 1 iwrap2 = iregsz(level) - ist - 1 do 61 i = iwrap1+1, iwrap2+1 if (iflags(i,1) .eq. goodpt) then iflags(i,1) = badpro ! only need to flag 1 wrapped buffer cell numpro = numpro + 1 if (pprint) write(outunit,101) i,1,mkid endif 61 continue endif if (jend .eq. jsize-1) then iwrap1 = iregsz(level) - iend - 1 iwrap2 = iregsz(level) - ist - 1 do 62 i = iwrap1+1, iwrap2+1 if (iflags(i,jsize-1) .eq. goodpt) then iflags(i,jsize-1) = badpro ! only need to flag 1 wrapped buffer cell numpro = numpro + 1 if (pprint) write(outunit,101) i,j,mkid endif 62 continue endif endif c c done with gridpt. loop for grid mkid. c 80 mkid = node(levelptr, mkid) go to 10 c 90 if (numpro .eq. 0) go to 95 write(outunit,102) numpro,level 102 format(i7,' more pts. projected to level ',i5) c 95 if (pprint) then write(outunit,103) level 103 format(/,' from projec: flagged pts. at level ',i4,':') do 110 jj = 1, jsize j = jsize + 1 - jj write(outunit,104) (iflags(i,j),i=1,isize) 104 format(80i1) 110 continue endif c 99 return end