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