C $Header: /u/gcmpack/MITgcm/eesupp/src/gsum_jam.F,v 1.5 2004/03/27 03:51:51 edhill Exp $
C $Name: $
#include "CPP_EEOPTIONS.h"
#undef USE_MPI_GSUM
#define USE_JAM_GSUM
CBOP
C !ROUTINE: GLOBAL_SUM_R8_JAM
C !INTERFACE:
SUBROUTINE GLOBAL_SUM_R8_JAM( ans, myThid )
C !DESCRIPTION:
C *=========================================================================*
C | SUBROUTINE GLOBAL\_SUM\_R8\_JAM
C | o JAM binding of global sum routine
C *=========================================================================*
C | Does a super fast global sum over the JAM library. With JAM
C | timings for dual proc SMP nodes over Arctic are about
C | 4.3usecs log2(NP/2). When it was done this was faster than any other
C | cluster on the planet :-).
C *=========================================================================*
C !USES:
#ifdef ALLOW_MPI
#include "mpif.h"
#endif
C !INPUT/OUTPUT PARAMETERS:
C ans :: Returned sum value
C myThid :: Thread number of this instance
Real*8 ans
INTEGER myThid
#ifdef LETS_MAKE_JAM
C !LOCAL VARIABLES:
C phi :: Temp. for accumulating sum
C RC :: Return code
Real*8 phi
INTEGER RC
phi = ans
#ifdef USE_MPI_GSUM
CALL MPI_ALLREDUCE( phi,
& ans,
& 1,
& MPI_REAL8,
& MPI_SUM,
& MPI_COMM_WORLD,
& rc
& )
#endif
#ifdef USE_JAM_GSUM
C JAM global sum
CALL JAM_BARRIER_START( phi )
CALL JAM_BARRIER_DONE( ans )
#endif
C WRITE(6,*) ' phi = ', phi, ' Sum = ', ans
C CALL MPI_Finalize( rc )
C STOP
#endif /* LETS_MAKE_JAM */
RETURN
END