flglvl.f.html | ![]() |
Source file: flglvl.f | |
Directory: /home/rjl/git/rjleveque/clawpack-4.x/amrclaw/2d/lib | |
Converted: Sun May 15 2011 at 19:16:14 using clawcode2html | |
This documentation file will not reflect any later changes in the source file. |
c c ----------------------------------------------------------- c subroutine flglvl(nvar,naux,lcheck,nxypts,index,lbase,ldom2, . npts,t0) c implicit double precision (a-h,o-z) include "call.i" c c :::::::::::::::::::: FLGLVL ::::::::::::::::::::::::::::::::: c c flglvl = controls the error estimation/flagging bad pts. for c an entire level of grids. returns pointer into alloc c where the (x,y) coordinations of the flagged pts. are. c input parameters: c lcheck = level to be flagged c output parameters: c nxypts = no. of flagged pts. total c index = starting index in alloc of the flagged pts. c (which occupy 2*nxypts locations). c c :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: c c nxypts = 0 c c reserve space for entire domain worth of flagged points at c level lcheck. bits would be better, but integer will do c dom2 - holds domain flags c dom - holds flagged pts. c dom3 - scratch c isize = iregsz(lcheck) jsize = jregsz(lcheck) ibytesPerDP = 8 ldom = igetsp((isize+2)*(jsize+2)/ibytesPerDP+1) c c prepare domain in ldom2 (so can use ldom as scratch array before c putting in the flags) c idim = iregsz(lbase) jdim = jregsz(lbase) call domprep(alloc(ldom2),lbase,idim,jdim) call domshrink(alloc(ldom2),alloc(ldom),idim,jdim) do 6 lev = lbase+1, lcheck call domup(alloc(ldom2),alloc(ldom),idim,jdim, 1 intratx(lev-1)*idim,intraty(lev-1)*jdim,lev-1) idim = intratx(lev-1)*idim jdim = intraty(lev-1)*jdim call domshrink(alloc(ldom2),alloc(ldom),idim,jdim) 6 continue c # finish by transferring from iflags to iflags2 call domcopy(alloc(ldom2),alloc(ldom),isize,jsize) c numbad = 0 c always call spest to set up stuff (initialize iflags, fill locbig) c call spest(nvar,naux,lcheck,alloc(ldom),isize,jsize,t0) c ### modified to pass in ldom instead of alloc(ldom) - called iflags in spest - c ### since spest calls igetsp, if alloc is resized and moved, need relative c ### indexing, or iflags would have invalid address on the inside call spest(nvar,naux,lcheck,ldom,isize,jsize,t0) if (tol .gt. 0.) call errest(nvar,naux,lcheck) if (ibuff .gt. 0) then ! get scratch storage for bufnst ibytesPerDP = 8 ldom3 = igetsp((isize+2)*(jsize+2)/ibytesPerDP+1) ! incase need to resize endif call bufnst(nvar,naux,numbad,lcheck,alloc(ldom),isize,jsize,ldom3) if (ibuff .gt. 0) then ! return scratch storage for bufnst call reclam(ldom3,(isize+2)*(jsize+2)/ibytesPerDP+1) endif nxypts = nxypts + numbad c c colate flagged pts into flagged points array c if (nxypts .gt. 0) then index = igetsp(2*nxypts) call colate(alloc(index),nxypts,lcheck, 1 alloc(ldom),alloc(ldom2),isize,jsize,npts) else npts = nxypts endif call reclam(ldom, (isize+2)*(jsize+2)/ibytesPerDP+1) return end