/[MITgcm]/MITgcm_contrib/cg2d_bench/cg2d.F
ViewVC logotype

Diff of /MITgcm_contrib/cg2d_bench/cg2d.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

--- MITgcm_contrib/cg2d_bench/cg2d.F	2006/05/12 21:58:05	1.1
+++ MITgcm_contrib/cg2d_bench/cg2d.F	2006/05/12 22:21:21	1.2
@@ -1,3 +1,4 @@
+C	$Id: cg2d.F,v 1.2 2006/05/12 22:21:21 ce107 Exp $	
       SUBROUTINE CG2D
 C     /==========================================================\
 C     | SUBROUTINE CG2D                                          |
@@ -28,6 +29,11 @@
 #include "EEPARAMS.h"
 #include "PARAMS.h"
 #include "CG2D.h"
+#if defined(USE_PAPI_FLOPS) || defined(USE_PAPI_FLIPS)
+#if defined(PAPI_PER_ITERATION) || defined(PAPI_PER_TIMESTEP)
+#include "PAPI.h"
+#endif
+#endif
 
 C     === Routine arguments ===
 C     myThid - Thread on which I am working.
@@ -49,29 +55,43 @@
 C     err         - Measure of residual of Ax - b, usually the norm.
 C     I, J, N     - Loop counters ( N counts CG iterations )
       INTEGER actualIts
-      REAL    actualResidual
       INTEGER bi, bj              
       INTEGER I, J, N
-      REAL    err
-      REAL    errSum
-      REAL    etaN
-      REAL    etaNM1
-      REAL    etaNSum
-      REAL    beta
-      REAL    alpha
-      REAL    alphaSum
-      REAL    sumRHS
-      REAL    temp
+#ifdef USE_MIXED_PRECISION
+      REAL*8    actualResidual
+      REAL*8    err
+      REAL*8    errSum
+      REAL*8    etaN
+      REAL*8    etaNM1
+      REAL*8    etaNSum
+      REAL*8    beta
+      REAL*8    alpha
+      REAL*8    alphaSum
+      REAL*8    sumRHS
+      REAL*8    temp
+#else
+      Real    actualResidual
+      Real    err
+      Real    errSum
+      Real    etaN
+      Real    etaNM1
+      Real    etaNSum
+      Real    beta
+      Real    alpha
+      Real    alphaSum
+      Real    sumRHS
+      Real    temp
+#endif
 
 C--   Initialise inverter
-      etaNM1              = 1. D0
+      etaNM1              = 1. _d 0
 
 C--   Initial residual calculation
       err    = 0. _d 0
       sumRHS = 0. _d 0
       DO J=1,sNy
        DO I=1,sNx
-        cg2d_s(I,J) = 0.
+        cg2d_s(I,J) = 0. _d 0
          cg2d_r(I,J) = cg2d_b(I,J) -
      &   ( aW2d(I  ,J  )*cg2d_x(I-1,J  )+aW2d(I+1,J  )*cg2d_x(I+1,J  )
      &    +aS2d(I  ,J  )*cg2d_x(I  ,J-1)+aS2d(I  ,J+1)*cg2d_x(I  ,J+1)
@@ -92,7 +112,7 @@
       actualIts      = 0
       actualResidual = SQRT(err)
       WRITE(6,*) ' CG2D iters, err = ', actualIts, actualResidual
-      IF ( actualResidual .EQ. 0. ) STOP 'ABNORMAL END: RESIDUAL 0'
+      IF ( actualResidual .EQ. 0. _d 0) STOP 'ABNORMAL END: RESIDUAL 0'
 
 C     >>>>>>>>>>>>>>> BEGIN SOLVER <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
       DO 10 N=1, cg2dMaxIters
@@ -277,14 +297,44 @@
        err = SQRT(err)
        actualIts      = N
        actualResidual = err
-CcnhDebugStarts
-C      WRITE(6,*) ' CG2D iters, err = ', actualIts, actualResidual
-CcnhDebugEnds
+#ifdef RESIDUAL_PER_ITERATION
+       WRITE(6,*) ' CG2D iters, err = ', actualIts, actualResidual
+#endif
        IF ( err .LT. cg2dTargetResidual ) GOTO 11
        CALL EXCH_XY_R8(cg2d_r )
+#ifdef PAPI_PER_ITERATION
+#ifdef USE_PAPI_FLOPS
+       call PAPIF_flops(real_time, proc_time, flpops, mflops, check)
+       WRITE(6,'(F10.3,A7,F10.3,A37,I8)')
+     $      mflops, ' user ', mflops*proc_time/real_time,
+     $      ' wallclock Mflop/s during iteration ', N
+#else
+#ifdef USE_PAPI_FLIPS
+       call PAPIF_flips(real_time, proc_time, flpops, mflops, check)
+       WRITE(6,'(F10.3,A7,F10.3,A37,I8)')
+     $      mflops, ' user ', mflops*proc_time/real_time,
+     $      ' wallclock Mflip/s during iteration ', N 
+#endif
+#endif
+#endif
    10 CONTINUE
    11 CONTINUE
       CALL EXCH_XY_R8(cg2d_x )
+#ifdef PAPI_PER_TIMESTEP
+#ifdef USE_PAPI_FLOPS
+       call PAPIF_flops(real_time, proc_time, flpops, mflops, check)
+       WRITE(6,'(F10.3,A7,F10.3,A37,I8)')
+     $      mflops, ' user ', mflops*proc_time/real_time,
+     $      ' wallclock Mflop/s during iteration ', N 
+#else
+#ifdef USE_PAPI_FLIPS
+       call PAPIF_flips(real_time, proc_time, flpops, mflops, check)
+       WRITE(6,'(F10.3,A7,F10.3,A37,I8)')
+     $      mflops, ' user ', mflops*proc_time/real_time,
+     $      ' wallclock Mflip/s during iteration ', N 
+#endif
+#endif
+#endif
       WRITE(6,*) ' CG2D iters, err = ', actualIts, actualResidual
 
 C     Calc Ax to check result

 

  ViewVC Help
Powered by ViewVC 1.1.22