xref: /phasta/phSolver/compressible/rstat.f (revision 6d19490585f7c8af089c0c02afe41f917b8960ac)
1*6d194905SKenneth E. Jansen        subroutine rstat (res, ilwork, b)
259599516SKenneth E. Jansenc
359599516SKenneth E. Jansenc----------------------------------------------------------------------
459599516SKenneth E. Jansenc
559599516SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
659599516SKenneth E. Jansenc
759599516SKenneth E. Jansenc input:
859599516SKenneth E. Jansenc  res   (nshg,nflow)   : preconditioned residual
959599516SKenneth E. Jansenc
1059599516SKenneth E. Jansenc output:
1159599516SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
1259599516SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
1359599516SKenneth E. Jansenc
1459599516SKenneth E. Jansenc
1559599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
1659599516SKenneth E. Jansenc----------------------------------------------------------------------
1759599516SKenneth E. Jansenc
1859599516SKenneth E. Jansen        include "common.h"
1959599516SKenneth E. Jansen        include "mpif.h"
2059599516SKenneth E. Jansen        include "auxmpi.h"
2159599516SKenneth E. Jansenc
2259599516SKenneth E. Jansen        dimension res(nshg,nflow)
23*6d194905SKenneth E. Jansen        dimension b(nshg,nflow)
24*6d194905SKenneth E. Jansen        dimension rtmp(nshg,2), nrsmax(1), ilwork(nlwork)
25*6d194905SKenneth E. Jansen        real*8 resnrm(2), totres(2), eachproc(2)
26*6d194905SKenneth E. Jansen        integer jtotrs(2)
2759599516SKenneth E. Jansen        dimension Forin(4), Forout(4)
2859599516SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
2959599516SKenneth E. Jansenc        integer TMRC
3059599516SKenneth E. Jansen
3159599516SKenneth E. Jansen
3259599516SKenneth E. Jansen        real*8  ftots(3,0:MAXSURF),ftot(3),spmasstot(0:MAXSURF),spmasss
3359599516SKenneth E. Jansen
3459599516SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
3559599516SKenneth E. Jansen
3659599516SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
3759599516SKenneth E. Jansenc
3859599516SKenneth E. Jansenc incompressible style data from flx surface
3959599516SKenneth E. Jansenc
4059599516SKenneth E. Jansen      if (numpe > 1) then
4159599516SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(2,isrfIM), spmasss,1,
4259599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
4359599516SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(1,isrfIM), Atots,1,
4459599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
4559599516SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(3,:), Ftots(1,:),MAXSURF+1,
4659599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
4759599516SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(4,:), Ftots(2,:),MAXSURF+1,
4859599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
4959599516SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(5,:), Ftots(3,:),MAXSURF+1,
5059599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
5159599516SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(2,:), spmasstot(:),MAXSURF+1,
5259599516SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
5359599516SKenneth E. Jansen      else
5459599516SKenneth E. Jansen         Ftots=flxID(3:5,:)
5559599516SKenneth E. Jansen         Atots=flxID(1,isrfIM)
5659599516SKenneth E. Jansen         spmasss=flxID(2,isrfIM)
5759599516SKenneth E. Jansen         spmasstot(:)=flxID(2,:)
5859599516SKenneth E. Jansen      endif
59513954efSKenneth E. Jansen! 	if(myrank.eq.0) then
60513954efSKenneth E. Jansen!     write(44,1000)lstep+1,(spmasstot(j),j=1,5)
61513954efSKenneth E. Jansen!     call flush(44)
62513954efSKenneth E. Jansen!	endif
6359599516SKenneth E. Jansen      ftot(1)=sum(Ftots(1,0:MAXSURF))
6459599516SKenneth E. Jansen      ftot(2)=sum(Ftots(2,0:MAXSURF))
6559599516SKenneth E. Jansen      ftot(3)=sum(Ftots(3,0:MAXSURF))
6659599516SKenneth E. Jansenc
6759599516SKenneth E. Jansenc end of incompressible style
6859599516SKenneth E. Jansenc
6959599516SKenneth E. Jansenc
7059599516SKenneth E. Jansenc.... -------------------->  Aerodynamic Forces  <----------------------
7159599516SKenneth E. Jansenc
7259599516SKenneth E. Jansenc.... output the forces and the heat flux
7359599516SKenneth E. Jansenc
7459599516SKenneth E. Jansen        if (iter .eq. nitr) then
7559599516SKenneth E. Jansen          Forin = (/ Force(1), Force(2), Force(3), HFlux /)
7659599516SKenneth E. Jansen          if (numpe > 1) then
7759599516SKenneth E. Jansen          call MPI_REDUCE (Forin(1), Forout(1), 4, MPI_DOUBLE_PRECISION,
7859599516SKenneth E. Jansen     &                                   MPI_SUM, master,
7959599516SKenneth E. Jansen     &                                   MPI_COMM_WORLD,ierr)
8059599516SKenneth E. Jansen          endif
8159599516SKenneth E. Jansen          Force = Forout(1:3)
8259599516SKenneth E. Jansen          HFlux = Forout(4)
8359599516SKenneth E. Jansen          if (myrank .eq. master) then
8459599516SKenneth E. Jansen             write (iforce,1000) lstep+1, (Force(i), i=1,nsd), HFlux,
8559599516SKenneth E. Jansen     &                           spmasss
8659599516SKenneth E. Jansen             call flush(iforce)
8759599516SKenneth E. Jansen          endif
8859599516SKenneth E. Jansen        endif
8959599516SKenneth E. Jansenc
9059599516SKenneth E. Jansenc.... ----------------------->  Convergence  <-------------------------
9159599516SKenneth E. Jansenc
9259599516SKenneth E. Jansenc.... compute the maximum residual and the corresponding node number
9359599516SKenneth E. Jansenc
9459599516SKenneth E. Jansen        rtmp = zero
9559599516SKenneth E. Jansen        do i = 1, nflow
96*6d194905SKenneth E. Jansen          rtmp(:,1) = rtmp(:,1) + res(:,i)**2
97*6d194905SKenneth E. Jansen          rtmp(:,2) = rtmp(:,2) + b(:,i)**2
9859599516SKenneth E. Jansen        enddo
9959599516SKenneth E. Jansen
100*6d194905SKenneth E. Jansen         eachproc(1)=sum(rtmp(:,1))
101*6d194905SKenneth E. Jansen         eachproc(2)=sum(rtmp(:,2))
102*6d194905SKenneth E. Jansen         call drvAllReduce (eachproc,resnrm,2)
10359599516SKenneth E. Jansen
10459599516SKenneth E. Jansenc
10559599516SKenneth E. Jansenc.... approximate the number of entries
10659599516SKenneth E. Jansenc
107*6d194905SKenneth E. Jansen        totres = sqrt(resnrm) / float(nshgt)
108*6d194905SKenneth E. Jansen        if(resfrt(1) .eq. zero) resfrt = totres
109*6d194905SKenneth E. Jansen        jtotrs(1) = int  ( 10.d0 * log10 ( totres(1) / resfrt(1) ) )
110*6d194905SKenneth E. Jansen        jtotrs(2) = int  ( 10.d0 * log10 ( totres(2) / resfrt(2) ) )
11159599516SKenneth E. Jansenc
11259599516SKenneth E. Jansenc.... get the CPU-time
11359599516SKenneth E. Jansenc
11459599516SKenneth E. Jansen        rsec=TMRC()
11559599516SKenneth E. Jansen        cputme = (rsec-ttim(100))
11659599516SKenneth E. Jansenc
11759599516SKenneth E. Jansenc.... output the result
11859599516SKenneth E. Jansenc
11959599516SKenneth E. Jansen        if (myrank .eq. master) then
120513954efSKenneth E. Jansen          !modified to not advance so that solver tolerance satisfaction failure
121513954efSKenneth E. Jansen          ! can be appended. The line wrap occurs in solgmr
122513954efSKenneth E. Jansen          if(usingPETSc.eq.0) then
123*6d194905SKenneth E. Jansen           write(*, 2000, advance="no") lstep+1, cputme,
124*6d194905SKenneth E. Jansen     &           totres(1), jtotrs(1),
125*6d194905SKenneth E. Jansen     &           totres(2), jtotrs(2),
126*6d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
127513954efSKenneth E. Jansen          else
128*6d194905SKenneth E. Jansen           write(*, 2000)       lstep+1, cputme,
129*6d194905SKenneth E. Jansen     &            totres(1), jtotrs(1),
130*6d194905SKenneth E. Jansen     &            totres(2), jtotrs(2),
131*6d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
132513954efSKenneth E. Jansen          endif
133*6d194905SKenneth E. Jansen           write(ihist, 2000)       lstep+1, cputme,
134*6d194905SKenneth E. Jansen     &            totres(1), jtotrs(1),
135*6d194905SKenneth E. Jansen     &            totres(2), jtotrs(2),
136*6d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
13759599516SKenneth E. Jansen          call flush(ihist)
13859599516SKenneth E. Jansen        endif
13959599516SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
14059599516SKenneth E. Jansen
14159599516SKenneth E. Jansenc
14259599516SKenneth E. Jansenc.... return
14359599516SKenneth E. Jansenc
14459599516SKenneth E. Jansen        return
14559599516SKenneth E. Jansenc
14659599516SKenneth E. Jansen1000    format(1p,i6,5e13.5)
147*6d194905SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,1x,'(',i4,')',
148*6d194905SKenneth E. Jansen     &                  1x,e10.3,1x,'(',i4,')',
14959599516SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
15059599516SKenneth E. Jansenc
15159599516SKenneth E. Jansen        end
152513954efSKenneth E. Jansen        subroutine rstatSclr (rest, ilwork)
15359599516SKenneth E. Jansenc
15459599516SKenneth E. Jansenc----------------------------------------------------------------------
15559599516SKenneth E. Jansenc
15659599516SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
15759599516SKenneth E. Jansenc
15859599516SKenneth E. Jansenc input:
15959599516SKenneth E. Jansenc  rest   (nshg)   : preconditioned residual
16059599516SKenneth E. Jansenc
16159599516SKenneth E. Jansenc output:
16259599516SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
16359599516SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
16459599516SKenneth E. Jansenc
16559599516SKenneth E. Jansenc
16659599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
16759599516SKenneth E. Jansenc----------------------------------------------------------------------
16859599516SKenneth E. Jansenc
16959599516SKenneth E. Jansen        include "common.h"
17059599516SKenneth E. Jansen        include "mpif.h"
17159599516SKenneth E. Jansen        include "auxmpi.h"
17259599516SKenneth E. Jansenc
17359599516SKenneth E. Jansen        dimension rest(nshg)
17459599516SKenneth E. Jansen        dimension rtmp(nshg), nrsmax(1), ilwork(nlwork)
17559599516SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
17659599516SKenneth E. Jansenc        integer TMRC
17759599516SKenneth E. Jansen
17859599516SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
17959599516SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
18059599516SKenneth E. Jansenc
18159599516SKenneth E. Jansenc.... ----------------------->  Convergence  <-------------------------
18259599516SKenneth E. Jansenc
18359599516SKenneth E. Jansenc.... compute the maximum residual and the corresponding node number
18459599516SKenneth E. Jansenc
18559599516SKenneth E. Jansen        rtmp = zero
18659599516SKenneth E. Jansen        rtmp = rtmp + rest**2
18759599516SKenneth E. Jansen
18859599516SKenneth E. Jansen        call sumgat (rtmp, 1, resnrm, ilwork)
18959599516SKenneth E. Jansen
19059599516SKenneth E. Jansen        resmaxl = maxval(rtmp)
19159599516SKenneth E. Jansen
19259599516SKenneth E. Jansencontinue on
19359599516SKenneth E. Jansen
19459599516SKenneth E. Jansen        irecvcount = 1
19559599516SKenneth E. Jansen        resvec = resmaxl
19659599516SKenneth E. Jansen        if (numpe > 1) then
19759599516SKenneth E. Jansen        call MPI_ALLREDUCE (resvec, resmax, irecvcount,
19859599516SKenneth E. Jansen     &                    MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD,
19959599516SKenneth E. Jansen     &                    ierr)
20059599516SKenneth E. Jansenc        call MPI_REDUCE_SCATTER (resvec, resmax, irecvcount,
20159599516SKenneth E. Jansenc     &                    MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD,
20259599516SKenneth E. Jansenc     &                    ierr)
20359599516SKenneth E. Jansen        else
20459599516SKenneth E. Jansen          resmax=resmaxl
20559599516SKenneth E. Jansen        endif
20659599516SKenneth E. Jansen        nrsmax = maxloc(rtmp)
20759599516SKenneth E. Jansenc
20859599516SKenneth E. Jansenc.... correct the residuals
20959599516SKenneth E. Jansenc
21059599516SKenneth E. Jansen        if (loctim(itseq) .eq. 0) then
21159599516SKenneth E. Jansen          resnrm = resnrm
21259599516SKenneth E. Jansen          resmax = resmax
21359599516SKenneth E. Jansen        else
21459599516SKenneth E. Jansen          resnrm = resnrm
21559599516SKenneth E. Jansen          resmax = resmax
21659599516SKenneth E. Jansen        endif
21759599516SKenneth E. Jansenc
21859599516SKenneth E. Jansenc.... approximate the number of entries
21959599516SKenneth E. Jansenc
22059599516SKenneth E. Jansen        totres = resnrm / float(nshgt)
22159599516SKenneth E. Jansen        totres = sqrt(totres)
22259599516SKenneth E. Jansen        resmax = sqrt(resmax)
223513954efSKenneth E. Jansen        if (resfrts .eq. zero) resfrts = totres
224513954efSKenneth E. Jansen        jtotrs = int  ( 10.d0 * log10 ( totres / resfrts ) )
22559599516SKenneth E. Jansen        jresmx = int  ( 10.d0 * log10 ( resmax / totres ) )
22659599516SKenneth E. Jansenc
22759599516SKenneth E. Jansenc.... get the CPU-time
22859599516SKenneth E. Jansenc
22959599516SKenneth E. Jansen        rsec=TMRC()
23059599516SKenneth E. Jansen        cputme = (rsec-ttim(100))
23159599516SKenneth E. Jansenc
23259599516SKenneth E. Jansenc.... output the result
23359599516SKenneth E. Jansenc
23459599516SKenneth E. Jansen        if (myrank .eq. master) then
23559599516SKenneth E. Jansen          print 2000,        lstep+1, cputme, totres, jtotrs, nrsmax,
236513954efSKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
23759599516SKenneth E. Jansen          write (ihist,2000) lstep+1, cputme, totres, jtotrs, nrsmax,
238513954efSKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
23959599516SKenneth E. Jansen          call flush(ihist)
24059599516SKenneth E. Jansen        endif
24159599516SKenneth E. Jansen        if(totres.gt.1.0e-9) istop=istop-1
24259599516SKenneth E. Jansen
24359599516SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
24459599516SKenneth E. Jansen
24559599516SKenneth E. Jansenc
24659599516SKenneth E. Jansenc.... return
24759599516SKenneth E. Jansenc
24859599516SKenneth E. Jansen        return
24959599516SKenneth E. Jansenc
25059599516SKenneth E. Jansen1000    format(1p,i6,4e13.5)
25159599516SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,3x,'(',i4,')',3x,'<',i6,'|',i4,'>',
25259599516SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
25359599516SKenneth E. Jansenc
25459599516SKenneth E. Jansen        end
255*6d194905SKenneth E. Jansen        subroutine rstatp (resNrm,resNrmP)
2562801f607SKenneth E. Jansenc
2572801f607SKenneth E. Jansenc----------------------------------------------------------------------
2582801f607SKenneth E. Jansenc
2592801f607SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
2602801f607SKenneth E. Jansenc
2612801f607SKenneth E. Jansenc input:
2622801f607SKenneth E. Jansenc  res   (nshg,nflow)   : preconditioned residual
2632801f607SKenneth E. Jansenc
2642801f607SKenneth E. Jansenc output:
2652801f607SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
2662801f607SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
2672801f607SKenneth E. Jansenc
2682801f607SKenneth E. Jansenc
2692801f607SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
2702801f607SKenneth E. Jansenc----------------------------------------------------------------------
2712801f607SKenneth E. Jansenc
2722801f607SKenneth E. Jansen        include "common.h"
2732801f607SKenneth E. Jansen        include "mpif.h"
2742801f607SKenneth E. Jansen        include "auxmpi.h"
2752801f607SKenneth E. Jansenc
2762801f607SKenneth E. Jansen        dimension Forin(4), Forout(4)
2772801f607SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
2782801f607SKenneth E. Jansenc        integer TMRC
2792801f607SKenneth E. Jansen
2802801f607SKenneth E. Jansen
2812801f607SKenneth E. Jansen        real*8  ftots(3,0:MAXSURF),ftot(3),spmasstot(0:MAXSURF),spmasss
2822801f607SKenneth E. Jansen
2832801f607SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
2842801f607SKenneth E. Jansen
2852801f607SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
2862801f607SKenneth E. Jansenc
2872801f607SKenneth E. Jansenc incompressible style data from flx surface
2882801f607SKenneth E. Jansenc
2892801f607SKenneth E. Jansen      if (numpe > 1) then
2902801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(2,isrfIM), spmasss,1,
2912801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2922801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(1,isrfIM), Atots,1,
2932801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2942801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(3,:), Ftots(1,:),MAXSURF+1,
2952801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2962801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(4,:), Ftots(2,:),MAXSURF+1,
2972801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2982801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(5,:), Ftots(3,:),MAXSURF+1,
2992801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
3002801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(2,:), spmasstot(:),MAXSURF+1,
3012801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
3022801f607SKenneth E. Jansen      else
3032801f607SKenneth E. Jansen         Ftots=flxID(3:5,:)
3042801f607SKenneth E. Jansen         Atots=flxID(1,isrfIM)
3052801f607SKenneth E. Jansen         spmasss=flxID(2,isrfIM)
3062801f607SKenneth E. Jansen         spmasstot(:)=flxID(2,:)
3072801f607SKenneth E. Jansen      endif
3082801f607SKenneth E. Jansen      ftot(1)=sum(Ftots(1,0:MAXSURF))
3092801f607SKenneth E. Jansen      ftot(2)=sum(Ftots(2,0:MAXSURF))
3102801f607SKenneth E. Jansen      ftot(3)=sum(Ftots(3,0:MAXSURF))
3112801f607SKenneth E. Jansenc
3122801f607SKenneth E. Jansenc end of incompressible style
3132801f607SKenneth E. Jansenc
3142801f607SKenneth E. Jansenc
3152801f607SKenneth E. Jansenc.... -------------------->  Aerodynamic Forces  <----------------------
3162801f607SKenneth E. Jansenc
3172801f607SKenneth E. Jansenc.... output the forces and the heat flux
3182801f607SKenneth E. Jansenc
3192801f607SKenneth E. Jansen        if (iter .eq. nitr) then
3202801f607SKenneth E. Jansen          Forin = (/ Force(1), Force(2), Force(3), HFlux /)
3212801f607SKenneth E. Jansen          if (numpe > 1) then
3222801f607SKenneth E. Jansen          call MPI_REDUCE (Forin(1), Forout(1), 4, MPI_DOUBLE_PRECISION,
3232801f607SKenneth E. Jansen     &                                   MPI_SUM, master,
3242801f607SKenneth E. Jansen     &                                   MPI_COMM_WORLD,ierr)
3252801f607SKenneth E. Jansen          endif
3262801f607SKenneth E. Jansen          Force = Forout(1:3)
3272801f607SKenneth E. Jansen          HFlux = Forout(4)
3282801f607SKenneth E. Jansen          if (myrank .eq. master) then
3292801f607SKenneth E. Jansen             write (iforce,1000) lstep+1, (Force(i), i=1,nsd), HFlux,
3302801f607SKenneth E. Jansen     &                           spmasss
3312801f607SKenneth E. Jansen             call flush(iforce)
3322801f607SKenneth E. Jansen          endif
3332801f607SKenneth E. Jansen        endif
3342801f607SKenneth E. Jansen
3352801f607SKenneth E. Jansenc
3362801f607SKenneth E. Jansenc.... approximate the number of entries
3372801f607SKenneth E. Jansenc
338*6d194905SKenneth E. Jansen        totres =resNrm / sqrt(float(nshgt))
339*6d194905SKenneth E. Jansen        if (resfrt(1) .eq. zero) resfrt(1) = totres
340*6d194905SKenneth E. Jansen        jtotrs = int  ( 10.d0 * log10 ( totres / resfrt(1) ) )
341*6d194905SKenneth E. Jansen
342*6d194905SKenneth E. Jansen        totresP =resNrmP / sqrt(float(nshgt))
343*6d194905SKenneth E. Jansen        if (resfrt(2) .eq. zero) resfrt(2) = totresP
344*6d194905SKenneth E. Jansen        jtotrsP = int  ( 10.d0 * log10 ( totresP / resfrt(2) ) )
3452801f607SKenneth E. Jansenc
3462801f607SKenneth E. Jansenc.... get the CPU-time
3472801f607SKenneth E. Jansenc
3482801f607SKenneth E. Jansen        rsec=TMRC()
3492801f607SKenneth E. Jansen        cputme = (rsec-ttim(100))
3502801f607SKenneth E. Jansenc
3512801f607SKenneth E. Jansenc.... output the result
3522801f607SKenneth E. Jansenc
3532801f607SKenneth E. Jansen        if (myrank .eq. master) then
354*6d194905SKenneth E. Jansen           write(*, 2000)       lstep+1, cputme,
355*6d194905SKenneth E. Jansen     &            totresP, jtotrsP,
356*6d194905SKenneth E. Jansen     &            totres , jtotrs,
357*6d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
358*6d194905SKenneth E. Jansen           write(ihist, 2000)       lstep+1, cputme,
359*6d194905SKenneth E. Jansen     &            totresP, jtotrsP,
360*6d194905SKenneth E. Jansen     &            totres , jtotrs,
361*6d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
3622801f607SKenneth E. Jansen          call flush(ihist)
3632801f607SKenneth E. Jansen        endif
3642801f607SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
3652801f607SKenneth E. Jansen
3662801f607SKenneth E. Jansenc
3672801f607SKenneth E. Jansenc.... return
3682801f607SKenneth E. Jansenc
3692801f607SKenneth E. Jansen        return
3702801f607SKenneth E. Jansenc
3712801f607SKenneth E. Jansen1000    format(1p,i6,5e13.5)
372*6d194905SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,1x,'(',i4,')',
373*6d194905SKenneth E. Jansen     &                  1x,e10.3,1x,'(',i4,')',
3742801f607SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
3752801f607SKenneth E. Jansenc
3762801f607SKenneth E. Jansen        end
3772801f607SKenneth E. Jansen        subroutine rstatpSclr (resnrm )
3782801f607SKenneth E. Jansenc
3792801f607SKenneth E. Jansenc----------------------------------------------------------------------
3802801f607SKenneth E. Jansenc
3812801f607SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
3822801f607SKenneth E. Jansenc
3832801f607SKenneth E. Jansenc input:
3842801f607SKenneth E. Jansenc  rest   (nshg)   : preconditioned residual
3852801f607SKenneth E. Jansenc
3862801f607SKenneth E. Jansenc output:
3872801f607SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
3882801f607SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
3892801f607SKenneth E. Jansenc
3902801f607SKenneth E. Jansenc
3912801f607SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
3922801f607SKenneth E. Jansenc----------------------------------------------------------------------
3932801f607SKenneth E. Jansenc
3942801f607SKenneth E. Jansen        include "common.h"
3952801f607SKenneth E. Jansen        include "mpif.h"
3962801f607SKenneth E. Jansen        include "auxmpi.h"
3972801f607SKenneth E. Jansenc
3982801f607SKenneth E. Jansen        dimension rest(nshg)
3992801f607SKenneth E. Jansen        dimension rtmp(nshg), nrsmax(1), ilwork(nlwork)
4002801f607SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
4012801f607SKenneth E. Jansenc        integer TMRC
4022801f607SKenneth E. Jansen
4032801f607SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
4042801f607SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
4052801f607SKenneth E. Jansenc
4062801f607SKenneth E. Jansenc.... ----------------------->  Convergence  <-------------------------
4072801f607SKenneth E. Jansenc
4082801f607SKenneth E. Jansen          resmax = 1
4092801f607SKenneth E. Jansenc
4102801f607SKenneth E. Jansenc.... approximate the number of entries
4112801f607SKenneth E. Jansenc
4122801f607SKenneth E. Jansen        totres = resnrm*resnrm / float(nshgt)
4132801f607SKenneth E. Jansen        totres = sqrt(totres)
4142801f607SKenneth E. Jansen        if (resfrts .eq. zero) resfrts = totres
4152801f607SKenneth E. Jansen        jtotrs = int  ( 10.d0 * log10 ( totres / resfrts ) )
4162801f607SKenneth E. Jansen        jresmx = int  ( 10.d0 * log10 ( resmax / totres ) )
4172801f607SKenneth E. Jansenc
4182801f607SKenneth E. Jansenc.... get the CPU-time
4192801f607SKenneth E. Jansenc
4202801f607SKenneth E. Jansen        rsec=TMRC()
4212801f607SKenneth E. Jansen        cputme = (rsec-ttim(100))
4222801f607SKenneth E. Jansenc
4232801f607SKenneth E. Jansenc.... output the result
4242801f607SKenneth E. Jansenc
4252801f607SKenneth E. Jansen        if (myrank .eq. master) then
4262801f607SKenneth E. Jansen          print 2000,        lstep+1, cputme, totres, jtotrs, nrsmax,
4272801f607SKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
4282801f607SKenneth E. Jansen          write (ihist,2000) lstep+1, cputme, totres, jtotrs, nrsmax,
4292801f607SKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
4302801f607SKenneth E. Jansen          call flush(ihist)
4312801f607SKenneth E. Jansen        endif
4322801f607SKenneth E. Jansen        if(totres.gt.1.0e-9) istop=istop-1
4332801f607SKenneth E. Jansen
4342801f607SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
4352801f607SKenneth E. Jansen
4362801f607SKenneth E. Jansenc
4372801f607SKenneth E. Jansenc.... return
4382801f607SKenneth E. Jansenc
4392801f607SKenneth E. Jansen        return
4402801f607SKenneth E. Jansenc
4412801f607SKenneth E. Jansen1000    format(1p,i6,4e13.5)
4422801f607SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,3x,'(',i4,')',3x,'<',i6,'|',i4,'>',
4432801f607SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
4442801f607SKenneth E. Jansenc
4452801f607SKenneth E. Jansen        end
4462801f607SKenneth E. Jansen
447