Parent Directory
|
Revision Log
|
Revision Graph
|
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 |