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