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