|
errf1.f.html |
|
|
Source file: errf1.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 errf1(rctfine,nvar,rctcrse,mptr,mi2tot,mj2tot,
2 mitot,mjtot,rctflg)
implicit double precision (a-h,o-z)
include "call.i"
dimension rctfine(mitot,mjtot,nvar)
dimension rctcrse(mi2tot,mj2tot,nvar)
dimension rctflg(mitot,mjtot,nvar)
logical allowflag
external allowflag
c
c
c ::::::::::::::::::::::::::::: ERRF1 ::::::::::::::::::::::::::::::::
c
c Richardson error estimator: Used when tol>0 in user input.
c Compare error estimates in rctfine, rctcrse,
c A point is flagged if the error estimate is greater than tol
c and if allowflag(x,y,t,level)=.true. at this point.
c
c ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
c
c
time = rnode(timemult, mptr)
xleft = rnode(cornxlo,mptr)
levm = node(nestlevel, mptr)
hx = hxposs(levm)
ybot = rnode(cornylo,mptr)
hy = hyposs(levm)
dt = possk(levm)
numsp = 0
errmax = 0.0d0
err2 = 0.0d0
c order = dt*dble(2**(iorder+1) - 2)
order = dble(2**(iorder+1) - 2)
c
if (.not. (edebug)) go to 20
write(outunit,107) mptr
107 format(//,' coarsened grid values for grid ',i4)
do 10 jj = nghost+1, mj2tot-nghost
j = mj2tot + 1 - jj
write(outunit,101) (rctcrse(i,j,1),
. i = nghost+1, mi2tot-nghost)
10 continue
write(outunit,108) mptr
108 format(//, ' fine grid values for grid ',i4)
do 15 jj = nghost+1, mjtot-nghost
j = mjtot + 1 - jj
write(outunit,101) (rctfine(i,j,1),i=nghost+1,mitot-nghost)
15 continue
101 format(' ',13f6.3)
c
c zero out the exterior locations so they don't affect err.est.
c
20 continue
jfine = nghost+1
do 35 j = nghost+1, mj2tot-nghost
yofj = ybot + (dble(jfine) - .5d0)*hy
ifine = nghost+1
c
do 30 i = nghost+1, mi2tot-nghost
rflag = goodpt
xofi = xleft + (dble(ifine) - .5d0)*hx
term1 = rctfine(ifine,jfine,1)
term2 = rctfine(ifine+1,jfine,1)
term3 = rctfine(ifine+1,jfine+1,1)
term4 = rctfine(ifine,jfine+1,1)
c # divide by (aval*order) for relative error
aval = (term1+term2+term3+term4)/4.d0
est = dabs((aval-rctcrse(i,j,1))/ order)
if (est .gt. errmax) errmax = est
err2 = err2 + est*est
c write(outunit,102) i,j,est
102 format(' i,j,est ',2i5,e12.5)
c rctcrse(i,j,2) = est
c
if (est .ge. tol .and. allowflag(xofi,yofj,time,levm)) then
rflag = badpt
endif
rctcrse(i,j,1) = rflag
ifine = ifine + 2
30 continue
jfine = jfine + 2
35 continue
c
c transfer flagged points on cell centered coarse grid
c to cell centered fine grid. count flagged points.
c
c initialize rctflg to 0.0 (no flags) before flagging
c
do 40 j = 1, mjtot
do 40 i = 1, mitot
40 rctflg(i,j,1) = goodpt
c
c print out intermediate flagged rctcrse (for debugging)
c
if (eprint) then
err2 = dsqrt(err2/dble((mi2tot-2*nghost)*(mj2tot-2*nghost)))
write(outunit,103) mptr, levm, errmax, err2
103 format(' grid ',i4,' level ',i4,
. ' max. error = ',e15.7,' err2 = ',e15.7)
if (edebug) then
write(outunit,*) ' flagged points on coarsened grid ',
. 'for grid ',mptr
do 45 jj = nghost+1, mj2tot-nghost
j = mj2tot + 1 - jj
write(outunit,106) (nint(rctcrse(i,j,1)),
. i=nghost+1,mi2tot-nghost)
106 format(1h ,80i1)
45 continue
endif
endif
c
jfine = nghost+1
do 70 j = nghost+1, mj2tot-nghost
ifine = nghost+1
do 60 i = nghost+1, mi2tot-nghost
if (rctcrse(i,j,1) .eq. goodpt) go to 55
rctflg(ifine,jfine,1) = badpt
rctflg(ifine+1,jfine,1) = badpt
rctflg(ifine,jfine+1,1) = badpt
rctflg(ifine+1,jfine+1,1)= badpt
55 ifine = ifine + 2
60 continue
jfine = jfine + 2
70 continue
c
c CHANGED ************
c **spatial error estimtaed in sperr.f now, using user routine flag2refine.f***
c
c if (edebug) then
c write(outunit,*)" spatial error for grid ",mptr
c do 75 jjfine = nghost+1, mjtot-nghost
c jfine = mjtot + 1 - jjfine
c write(outunit,101)(sperr(ifine,jfine),
c . ifine=nghost+1,mitot-nghost)
c75 continue
c endif
c
c do 80 jfine = nghost+1, mjtot-nghost
c yofj = ybot + (dble(jfine) - nghost - .5d0)*hy
c do 80 ifine = nghost+1, mitot-nghost
c xofi = xleft + (dble(ifine) - nghost - .5d0)*hx
c if (sperr(ifine,jfine) .gt. tolsp .and. allowflag(xofi,yofj,levm))
c & then
c rflag = rctflg(ifine,jfine,1)
c if (rflag .ne. badpt) then
c rctflg(ifine,jfine,1) = badpt
c numsp = numsp + 1
c endif
c endif
c 80 continue
c
c if (eprint) then
c write(outunit,118) numsp,mptr
c 118 format( i5,' more pts. flagged for spatial error on grid',i4,/)
c if (edebug) then
c do 56 jj = nghost+1, mjtot-nghost
c j = mjtot + 1 - jj
c write(outunit,106)
c & (nint(rctflg(i,j,1)),i=nghost+1,mitot-nghost)
c 56 continue
c endif
c endif
c END OF CHANGE *******************
return
end