C-- File global_adsum.F: Routines that perform adjoint of
C global sum on an array of thread values.
C Contents
C o global_adsum_r4
C o global_adsum_r8
#include "CPP_EEOPTIONS.h"
CStartOfInterface
SUBROUTINE GLOBAL_ADSUM_R4(
I myThid,
U adsumPhi
& )
C /==========================================================\
C | SUBROUTINE GLOBAL_ADSUM_R4 |
C | o Handle sum for real*4 data. |
C |==========================================================|
C \==========================================================/
C == Global data ==
implicit none
#include "SIZE.h"
#include "EEPARAMS.h"
#include "EESUPPORT.h"
C == Routine arguments ==
C sumPhi - Result of sum.
C myThid - My thread id.
Real*4 adsumPhi
INTEGER myThid
CEndOfInterface
C == Local variables ==
C adphi - Array to be summed.
C I - Loop counters
C mpiRC - MPI return code
Real*4 adphi(lShare4,MAX_NO_THREADS)
INTEGER I
Real*4 tmp
#ifdef ALLOW_USE_MPI
INTEGER mpiRC
#endif /* ALLOW_USE_MPI */
C-- Can not start until everyone is ready
_BARRIER
C-- broadcast to all processes
_BEGIN_MASTER( myThid )
tmp = adsumPhi
#ifdef ALLOW_USE_MPI
#ifndef ALWAYS_USE_MPI
IF ( usingMPI ) THEN
#endif
CALL MPI_BCAST(tmp, 1, MPI_REAL, myThid
& , MPI_COMM_WORLD, mpiRC
& )
#ifndef ALWAYS_USE_MPI
ENDIF
#endif
#endif /* ALLOW_USE_MPI */
DO I=1,nThreads
adphi(1,I) = tmp
ENDDO
_END_MASTER( myThid )
C--
_BARRIER
C
C-- every thread takes its adjoint sum
adsumPhi = adphi(1,myThid)
RETURN
END
#include "CPP_EEOPTIONS.h"
CStartOfInterface
SUBROUTINE GLOBAL_ADSUM_R8(
I myThid,
U adsumPhi
& )
C /==========================================================\
C | SUBROUTINE GLOBAL_ADSUM_R4 |
C | o Handle sum for real*8 data. |
C |==========================================================|
C \==========================================================/
C == Global data ==
#include "SIZE.h"
#include "EEPARAMS.h"
#include "EESUPPORT.h"
C == Routine arguments ==
C sumPhi - Result of sum.
C myThid - My thread id.
Real*8 adsumPhi
INTEGER myThid
CEndOfInterface
C == Local variables ==
C adphi - Array to be summed.
C I - Loop counters
C mpiRC - MPI return code
Real*8 adphi(lShare8,MAX_NO_THREADS)
INTEGER I
Real*8 tmp
#ifdef ALLOW_USE_MPI
INTEGER mpiRC
#endif /* ALLOW_USE_MPI */
C-- Can not start until everyone is ready
_BARRIER
C-- broadcast to all processes
_BEGIN_MASTER( myThid )
tmp = adsumPhi
#ifdef ALLOW_USE_MPI
#ifndef ALWAYS_USE_MPI
IF ( usingMPI ) THEN
#endif
CALL MPI_BCAST(tmp, 1, MPI_DOUBLE_PRECISION, myThid
& , MPI_COMM_WORLD, mpiRC
& )
#ifndef ALWAYS_USE_MPI
ENDIF
#endif
#endif /* ALLOW_USE_MPI */
DO I=1,nThreads
adphi(1,I) = tmp
ENDDO
_END_MASTER( myThid )
C--
_BARRIER
C
C-- every thread takes its adjoint sum
adsumPhi = adphi(1,myThid)
RETURN
END