xref: /phasta/phSolver/compressible/rstat.f (revision 4afff3f1d52c808ccd8c53e36b5e7e6922e4a40c)
16d194905SKenneth 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)
236d194905SKenneth E. Jansen        dimension b(nshg,nflow)
246d194905SKenneth E. Jansen        dimension rtmp(nshg,2), nrsmax(1), ilwork(nlwork)
256d194905SKenneth E. Jansen        real*8 resnrm(2), totres(2), eachproc(2)
266d194905SKenneth 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,
85*4afff3f1SKenneth E. Jansen     &                           spmasss,(ftot(i),i=1,nsd)
8659599516SKenneth E. Jansen             call flush(iforce)
8759599516SKenneth E. Jansen          endif
8859599516SKenneth E. Jansen        endif
89*4afff3f1SKenneth E. Jansen
9059599516SKenneth E. Jansenc
9159599516SKenneth E. Jansenc.... ----------------------->  Convergence  <-------------------------
9259599516SKenneth E. Jansenc
9359599516SKenneth E. Jansenc.... compute the maximum residual and the corresponding node number
9459599516SKenneth E. Jansenc
9559599516SKenneth E. Jansen        rtmp = zero
9659599516SKenneth E. Jansen        do i = 1, nflow
976d194905SKenneth E. Jansen          rtmp(:,1) = rtmp(:,1) + res(:,i)**2
986d194905SKenneth E. Jansen          rtmp(:,2) = rtmp(:,2) + b(:,i)**2
9959599516SKenneth E. Jansen        enddo
10059599516SKenneth E. Jansen
1016d194905SKenneth E. Jansen         eachproc(1)=sum(rtmp(:,1))
1026d194905SKenneth E. Jansen         eachproc(2)=sum(rtmp(:,2))
1036d194905SKenneth E. Jansen         call drvAllReduce (eachproc,resnrm,2)
10459599516SKenneth E. Jansen
10559599516SKenneth E. Jansenc
10659599516SKenneth E. Jansenc.... approximate the number of entries
10759599516SKenneth E. Jansenc
1086d194905SKenneth E. Jansen        totres = sqrt(resnrm) / float(nshgt)
1096d194905SKenneth E. Jansen        if(resfrt(1) .eq. zero) resfrt = totres
1106d194905SKenneth E. Jansen        jtotrs(1) = int  ( 10.d0 * log10 ( totres(1) / resfrt(1) ) )
1116d194905SKenneth E. Jansen        jtotrs(2) = int  ( 10.d0 * log10 ( totres(2) / resfrt(2) ) )
11259599516SKenneth E. Jansenc
11359599516SKenneth E. Jansenc.... get the CPU-time
11459599516SKenneth E. Jansenc
11559599516SKenneth E. Jansen        rsec=TMRC()
11659599516SKenneth E. Jansen        cputme = (rsec-ttim(100))
11759599516SKenneth E. Jansenc
11859599516SKenneth E. Jansenc.... output the result
11959599516SKenneth E. Jansenc
12059599516SKenneth E. Jansen        if (myrank .eq. master) then
121513954efSKenneth E. Jansen          !modified to not advance so that solver tolerance satisfaction failure
122513954efSKenneth E. Jansen          ! can be appended. The line wrap occurs in solgmr
123513954efSKenneth E. Jansen          if(usingPETSc.eq.0) then
1246d194905SKenneth E. Jansen           write(*, 2000, advance="no") lstep+1, cputme,
1256d194905SKenneth E. Jansen     &           totres(1), jtotrs(1),
1266d194905SKenneth E. Jansen     &           totres(2), jtotrs(2),
1276d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
128513954efSKenneth E. Jansen          else
1296d194905SKenneth E. Jansen           write(*, 2000)       lstep+1, cputme,
1306d194905SKenneth E. Jansen     &            totres(1), jtotrs(1),
1316d194905SKenneth E. Jansen     &            totres(2), jtotrs(2),
1326d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
133513954efSKenneth E. Jansen          endif
1346d194905SKenneth E. Jansen           write(ihist, 2000)       lstep+1, cputme,
1356d194905SKenneth E. Jansen     &            totres(1), jtotrs(1),
1366d194905SKenneth E. Jansen     &            totres(2), jtotrs(2),
1376d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
13859599516SKenneth E. Jansen          call flush(ihist)
13959599516SKenneth E. Jansen        endif
14059599516SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
14159599516SKenneth E. Jansen
14259599516SKenneth E. Jansenc
14359599516SKenneth E. Jansenc.... return
14459599516SKenneth E. Jansenc
14559599516SKenneth E. Jansen        return
14659599516SKenneth E. Jansenc
147*4afff3f1SKenneth E. Jansen1000    format(1p,i6,8e13.5)
1486d194905SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,1x,'(',i4,')',
1496d194905SKenneth E. Jansen     &                  1x,e10.3,1x,'(',i4,')',
15059599516SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
15159599516SKenneth E. Jansenc
15259599516SKenneth E. Jansen        end
153513954efSKenneth E. Jansen        subroutine rstatSclr (rest, ilwork)
15459599516SKenneth E. Jansenc
15559599516SKenneth E. Jansenc----------------------------------------------------------------------
15659599516SKenneth E. Jansenc
15759599516SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
15859599516SKenneth E. Jansenc
15959599516SKenneth E. Jansenc input:
16059599516SKenneth E. Jansenc  rest   (nshg)   : preconditioned residual
16159599516SKenneth E. Jansenc
16259599516SKenneth E. Jansenc output:
16359599516SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
16459599516SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
16559599516SKenneth E. Jansenc
16659599516SKenneth E. Jansenc
16759599516SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
16859599516SKenneth E. Jansenc----------------------------------------------------------------------
16959599516SKenneth E. Jansenc
17059599516SKenneth E. Jansen        include "common.h"
17159599516SKenneth E. Jansen        include "mpif.h"
17259599516SKenneth E. Jansen        include "auxmpi.h"
17359599516SKenneth E. Jansenc
17459599516SKenneth E. Jansen        dimension rest(nshg)
17559599516SKenneth E. Jansen        dimension rtmp(nshg), nrsmax(1), ilwork(nlwork)
17659599516SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
17759599516SKenneth E. Jansenc        integer TMRC
17859599516SKenneth E. Jansen
17959599516SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
18059599516SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
18159599516SKenneth E. Jansenc
18259599516SKenneth E. Jansenc.... ----------------------->  Convergence  <-------------------------
18359599516SKenneth E. Jansenc
18459599516SKenneth E. Jansenc.... compute the maximum residual and the corresponding node number
18559599516SKenneth E. Jansenc
18659599516SKenneth E. Jansen        rtmp = zero
18759599516SKenneth E. Jansen        rtmp = rtmp + rest**2
18859599516SKenneth E. Jansen
18959599516SKenneth E. Jansen        call sumgat (rtmp, 1, resnrm, ilwork)
19059599516SKenneth E. Jansen
19159599516SKenneth E. Jansen        resmaxl = maxval(rtmp)
19259599516SKenneth E. Jansen
19359599516SKenneth E. Jansencontinue on
19459599516SKenneth E. Jansen
19559599516SKenneth E. Jansen        irecvcount = 1
19659599516SKenneth E. Jansen        resvec = resmaxl
19759599516SKenneth E. Jansen        if (numpe > 1) then
19859599516SKenneth E. Jansen        call MPI_ALLREDUCE (resvec, resmax, irecvcount,
19959599516SKenneth E. Jansen     &                    MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD,
20059599516SKenneth E. Jansen     &                    ierr)
20159599516SKenneth E. Jansenc        call MPI_REDUCE_SCATTER (resvec, resmax, irecvcount,
20259599516SKenneth E. Jansenc     &                    MPI_DOUBLE_PRECISION, MPI_MAX, MPI_COMM_WORLD,
20359599516SKenneth E. Jansenc     &                    ierr)
20459599516SKenneth E. Jansen        else
20559599516SKenneth E. Jansen          resmax=resmaxl
20659599516SKenneth E. Jansen        endif
20759599516SKenneth E. Jansen        nrsmax = maxloc(rtmp)
20859599516SKenneth E. Jansenc
20959599516SKenneth E. Jansenc.... correct the residuals
21059599516SKenneth E. Jansenc
21159599516SKenneth E. Jansen        if (loctim(itseq) .eq. 0) then
21259599516SKenneth E. Jansen          resnrm = resnrm
21359599516SKenneth E. Jansen          resmax = resmax
21459599516SKenneth E. Jansen        else
21559599516SKenneth E. Jansen          resnrm = resnrm
21659599516SKenneth E. Jansen          resmax = resmax
21759599516SKenneth E. Jansen        endif
21859599516SKenneth E. Jansenc
21959599516SKenneth E. Jansenc.... approximate the number of entries
22059599516SKenneth E. Jansenc
22159599516SKenneth E. Jansen        totres = resnrm / float(nshgt)
22259599516SKenneth E. Jansen        totres = sqrt(totres)
22359599516SKenneth E. Jansen        resmax = sqrt(resmax)
224513954efSKenneth E. Jansen        if (resfrts .eq. zero) resfrts = totres
225513954efSKenneth E. Jansen        jtotrs = int  ( 10.d0 * log10 ( totres / resfrts ) )
22659599516SKenneth E. Jansen        jresmx = int  ( 10.d0 * log10 ( resmax / totres ) )
22759599516SKenneth E. Jansenc
22859599516SKenneth E. Jansenc.... get the CPU-time
22959599516SKenneth E. Jansenc
23059599516SKenneth E. Jansen        rsec=TMRC()
23159599516SKenneth E. Jansen        cputme = (rsec-ttim(100))
23259599516SKenneth E. Jansenc
23359599516SKenneth E. Jansenc.... output the result
23459599516SKenneth E. Jansenc
23559599516SKenneth E. Jansen        if (myrank .eq. master) then
23659599516SKenneth E. Jansen          print 2000,        lstep+1, cputme, totres, jtotrs, nrsmax,
237513954efSKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
23859599516SKenneth E. Jansen          write (ihist,2000) lstep+1, cputme, totres, jtotrs, nrsmax,
239513954efSKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
24059599516SKenneth E. Jansen          call flush(ihist)
24159599516SKenneth E. Jansen        endif
24259599516SKenneth E. Jansen        if(totres.gt.1.0e-9) istop=istop-1
24359599516SKenneth E. Jansen
24459599516SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
24559599516SKenneth E. Jansen
24659599516SKenneth E. Jansenc
24759599516SKenneth E. Jansenc.... return
24859599516SKenneth E. Jansenc
24959599516SKenneth E. Jansen        return
25059599516SKenneth E. Jansenc
25159599516SKenneth E. Jansen1000    format(1p,i6,4e13.5)
25259599516SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,3x,'(',i4,')',3x,'<',i6,'|',i4,'>',
25359599516SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
25459599516SKenneth E. Jansenc
25559599516SKenneth E. Jansen        end
2566d194905SKenneth E. Jansen        subroutine rstatp (resNrm,resNrmP)
2572801f607SKenneth E. Jansenc
2582801f607SKenneth E. Jansenc----------------------------------------------------------------------
2592801f607SKenneth E. Jansenc
2602801f607SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
2612801f607SKenneth E. Jansenc
2622801f607SKenneth E. Jansenc input:
2632801f607SKenneth E. Jansenc  res   (nshg,nflow)   : preconditioned residual
2642801f607SKenneth E. Jansenc
2652801f607SKenneth E. Jansenc output:
2662801f607SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
2672801f607SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
2682801f607SKenneth E. Jansenc
2692801f607SKenneth E. Jansenc
2702801f607SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
2712801f607SKenneth E. Jansenc----------------------------------------------------------------------
2722801f607SKenneth E. Jansenc
2732801f607SKenneth E. Jansen        include "common.h"
2742801f607SKenneth E. Jansen        include "mpif.h"
2752801f607SKenneth E. Jansen        include "auxmpi.h"
2762801f607SKenneth E. Jansenc
2772801f607SKenneth E. Jansen        dimension Forin(4), Forout(4)
2782801f607SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
2792801f607SKenneth E. Jansenc        integer TMRC
2802801f607SKenneth E. Jansen
2812801f607SKenneth E. Jansen
2822801f607SKenneth E. Jansen        real*8  ftots(3,0:MAXSURF),ftot(3),spmasstot(0:MAXSURF),spmasss
2832801f607SKenneth E. Jansen
2842801f607SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
2852801f607SKenneth E. Jansen
2862801f607SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
2872801f607SKenneth E. Jansenc
2882801f607SKenneth E. Jansenc incompressible style data from flx surface
2892801f607SKenneth E. Jansenc
2902801f607SKenneth E. Jansen      if (numpe > 1) then
2912801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(2,isrfIM), spmasss,1,
2922801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2932801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(1,isrfIM), Atots,1,
2942801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2952801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(3,:), Ftots(1,:),MAXSURF+1,
2962801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2972801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(4,:), Ftots(2,:),MAXSURF+1,
2982801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
2992801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(5,:), Ftots(3,:),MAXSURF+1,
3002801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
3012801f607SKenneth E. Jansen         call MPI_ALLREDUCE (flxID(2,:), spmasstot(:),MAXSURF+1,
3022801f607SKenneth E. Jansen     &        MPI_DOUBLE_PRECISION,MPI_SUM, MPI_COMM_WORLD,ierr)
3032801f607SKenneth E. Jansen      else
3042801f607SKenneth E. Jansen         Ftots=flxID(3:5,:)
3052801f607SKenneth E. Jansen         Atots=flxID(1,isrfIM)
3062801f607SKenneth E. Jansen         spmasss=flxID(2,isrfIM)
3072801f607SKenneth E. Jansen         spmasstot(:)=flxID(2,:)
3082801f607SKenneth E. Jansen      endif
3092801f607SKenneth E. Jansen      ftot(1)=sum(Ftots(1,0:MAXSURF))
3102801f607SKenneth E. Jansen      ftot(2)=sum(Ftots(2,0:MAXSURF))
3112801f607SKenneth E. Jansen      ftot(3)=sum(Ftots(3,0:MAXSURF))
3122801f607SKenneth E. Jansenc
3132801f607SKenneth E. Jansenc end of incompressible style
3142801f607SKenneth E. Jansenc
3152801f607SKenneth E. Jansenc
3162801f607SKenneth E. Jansenc.... -------------------->  Aerodynamic Forces  <----------------------
3172801f607SKenneth E. Jansenc
3182801f607SKenneth E. Jansenc.... output the forces and the heat flux
3192801f607SKenneth E. Jansenc
3202801f607SKenneth E. Jansen        if (iter .eq. nitr) then
3212801f607SKenneth E. Jansen          Forin = (/ Force(1), Force(2), Force(3), HFlux /)
3222801f607SKenneth E. Jansen          if (numpe > 1) then
3232801f607SKenneth E. Jansen          call MPI_REDUCE (Forin(1), Forout(1), 4, MPI_DOUBLE_PRECISION,
3242801f607SKenneth E. Jansen     &                                   MPI_SUM, master,
3252801f607SKenneth E. Jansen     &                                   MPI_COMM_WORLD,ierr)
3262801f607SKenneth E. Jansen          endif
3272801f607SKenneth E. Jansen          Force = Forout(1:3)
3282801f607SKenneth E. Jansen          HFlux = Forout(4)
3292801f607SKenneth E. Jansen          if (myrank .eq. master) then
3302801f607SKenneth E. Jansen             write (iforce,1000) lstep+1, (Force(i), i=1,nsd), HFlux,
331*4afff3f1SKenneth E. Jansen     &                           spmasss,(ftot(i),i=1,nsd)
3322801f607SKenneth E. Jansen             call flush(iforce)
3332801f607SKenneth E. Jansen          endif
3342801f607SKenneth E. Jansen        endif
3352801f607SKenneth E. Jansen
3362801f607SKenneth E. Jansenc
3372801f607SKenneth E. Jansenc.... approximate the number of entries
3382801f607SKenneth E. Jansenc
3396d194905SKenneth E. Jansen        totres =resNrm / sqrt(float(nshgt))
3406d194905SKenneth E. Jansen        if (resfrt(1) .eq. zero) resfrt(1) = totres
3416d194905SKenneth E. Jansen        jtotrs = int  ( 10.d0 * log10 ( totres / resfrt(1) ) )
3426d194905SKenneth E. Jansen
3436d194905SKenneth E. Jansen        totresP =resNrmP / sqrt(float(nshgt))
3446d194905SKenneth E. Jansen        if (resfrt(2) .eq. zero) resfrt(2) = totresP
3456d194905SKenneth E. Jansen        jtotrsP = int  ( 10.d0 * log10 ( totresP / resfrt(2) ) )
3462801f607SKenneth E. Jansenc
3472801f607SKenneth E. Jansenc.... get the CPU-time
3482801f607SKenneth E. Jansenc
3492801f607SKenneth E. Jansen        rsec=TMRC()
3502801f607SKenneth E. Jansen        cputme = (rsec-ttim(100))
3512801f607SKenneth E. Jansenc
3522801f607SKenneth E. Jansenc.... output the result
3532801f607SKenneth E. Jansenc
3542801f607SKenneth E. Jansen        if (myrank .eq. master) then
3556d194905SKenneth E. Jansen           write(*, 2000)       lstep+1, cputme,
3566d194905SKenneth E. Jansen     &            totresP, jtotrsP,
3576d194905SKenneth E. Jansen     &            totres , jtotrs,
3586d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
3596d194905SKenneth E. Jansen           write(ihist, 2000)       lstep+1, cputme,
3606d194905SKenneth E. Jansen     &            totresP, jtotrsP,
3616d194905SKenneth E. Jansen     &            totres , jtotrs,
3626d194905SKenneth E. Jansen     &                      lGMRES,  iKs, ntotGM
3632801f607SKenneth E. Jansen          call flush(ihist)
3642801f607SKenneth E. Jansen        endif
3652801f607SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
3662801f607SKenneth E. Jansen
3672801f607SKenneth E. Jansenc
3682801f607SKenneth E. Jansenc.... return
3692801f607SKenneth E. Jansenc
3702801f607SKenneth E. Jansen        return
3712801f607SKenneth E. Jansenc
3722801f607SKenneth E. Jansen1000    format(1p,i6,5e13.5)
3736d194905SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,1x,'(',i4,')',
3746d194905SKenneth E. Jansen     &                  1x,e10.3,1x,'(',i4,')',
3752801f607SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
3762801f607SKenneth E. Jansenc
3772801f607SKenneth E. Jansen        end
3782801f607SKenneth E. Jansen        subroutine rstatpSclr (resnrm )
3792801f607SKenneth E. Jansenc
3802801f607SKenneth E. Jansenc----------------------------------------------------------------------
3812801f607SKenneth E. Jansenc
3822801f607SKenneth E. Jansenc This subroutine calculates the statistics of the residual.
3832801f607SKenneth E. Jansenc
3842801f607SKenneth E. Jansenc input:
3852801f607SKenneth E. Jansenc  rest   (nshg)   : preconditioned residual
3862801f607SKenneth E. Jansenc
3872801f607SKenneth E. Jansenc output:
3882801f607SKenneth E. Jansenc  The time step, cpu-time and entropy-norm of the residual
3892801f607SKenneth E. Jansenc     are printed in the file HISTOR.DAT.
3902801f607SKenneth E. Jansenc
3912801f607SKenneth E. Jansenc
3922801f607SKenneth E. Jansenc Zdenek Johan, Winter 1991.  (Fortran 90)
3932801f607SKenneth E. Jansenc----------------------------------------------------------------------
3942801f607SKenneth E. Jansenc
3952801f607SKenneth E. Jansen        include "common.h"
3962801f607SKenneth E. Jansen        include "mpif.h"
3972801f607SKenneth E. Jansen        include "auxmpi.h"
3982801f607SKenneth E. Jansenc
3992801f607SKenneth E. Jansen        dimension rest(nshg)
4002801f607SKenneth E. Jansen        dimension rtmp(nshg), nrsmax(1), ilwork(nlwork)
4012801f607SKenneth E. Jansen!SCATTER        dimension irecvcount(numpe), resvec(numpe)
4022801f607SKenneth E. Jansenc        integer TMRC
4032801f607SKenneth E. Jansen
4042801f607SKenneth E. Jansen	ttim(68) = ttim(68) - secs(0.0)
4052801f607SKenneth E. Jansen        if (numpe == 1) nshgt=nshg   ! global = this processor
4062801f607SKenneth E. Jansenc
4072801f607SKenneth E. Jansenc.... ----------------------->  Convergence  <-------------------------
4082801f607SKenneth E. Jansenc
4092801f607SKenneth E. Jansen          resmax = 1
4102801f607SKenneth E. Jansenc
4112801f607SKenneth E. Jansenc.... approximate the number of entries
4122801f607SKenneth E. Jansenc
4132801f607SKenneth E. Jansen        totres = resnrm*resnrm / float(nshgt)
4142801f607SKenneth E. Jansen        totres = sqrt(totres)
4152801f607SKenneth E. Jansen        if (resfrts .eq. zero) resfrts = totres
4162801f607SKenneth E. Jansen        jtotrs = int  ( 10.d0 * log10 ( totres / resfrts ) )
4172801f607SKenneth E. Jansen        jresmx = int  ( 10.d0 * log10 ( resmax / totres ) )
4182801f607SKenneth E. Jansenc
4192801f607SKenneth E. Jansenc.... get the CPU-time
4202801f607SKenneth E. Jansenc
4212801f607SKenneth E. Jansen        rsec=TMRC()
4222801f607SKenneth E. Jansen        cputme = (rsec-ttim(100))
4232801f607SKenneth E. Jansenc
4242801f607SKenneth E. Jansenc.... output the result
4252801f607SKenneth E. Jansenc
4262801f607SKenneth E. Jansen        if (myrank .eq. master) then
4272801f607SKenneth E. Jansen          print 2000,        lstep+1, cputme, totres, jtotrs, nrsmax,
4282801f607SKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
4292801f607SKenneth E. Jansen          write (ihist,2000) lstep+1, cputme, totres, jtotrs, nrsmax,
4302801f607SKenneth E. Jansen     &                     jresmx, lgmress,  iKss, ntotGMs
4312801f607SKenneth E. Jansen          call flush(ihist)
4322801f607SKenneth E. Jansen        endif
4332801f607SKenneth E. Jansen        if(totres.gt.1.0e-9) istop=istop-1
4342801f607SKenneth E. Jansen
4352801f607SKenneth E. Jansen	ttim(68) = ttim(68) + secs(0.0)
4362801f607SKenneth E. Jansen
4372801f607SKenneth E. Jansenc
4382801f607SKenneth E. Jansenc.... return
4392801f607SKenneth E. Jansenc
4402801f607SKenneth E. Jansen        return
4412801f607SKenneth E. Jansenc
4422801f607SKenneth E. Jansen1000    format(1p,i6,4e13.5)
4432801f607SKenneth E. Jansen2000    format(1p,i6,e10.3,e10.3,3x,'(',i4,')',3x,'<',i6,'|',i4,'>',
4442801f607SKenneth E. Jansen     &         ' [',i3,'-',i3,']',i10)
4452801f607SKenneth E. Jansenc
4462801f607SKenneth E. Jansen        end
4472801f607SKenneth E. Jansen
448