SUBROUTINE INI_MP C Initialise multi-processing IMPLICIT NONE C == Global data == #include "SIZE.h" #include "EEPARAMS.h" #include "JAM_INFO.h" #include "MPI_INFO.h" #ifdef ALLOW_MPI #include "mpif.h" #endif C == Local variables == Real*8 dummyVal INTEGER rc CHARACTER*(MAX_LEN_FNAM) fnam INTEGER myTwoProcRank myXGlobalLo =1 myYGlobalLo =1 myProcId =0 numberOfProcs =1 Nx = sNx Ny = sNy standardMessageUnit=6 #ifdef USE_MPI_INIT C MPI Initialisation CALL MPI_INIT( rc ) C Get my proc. number CALL MPI_COMM_RANK( MPI_COMM_WORLD, mpi_pid, rc ) C Get total count of procs. CALL MPI_COMM_SIZE( MPI_COMM_WORLD, mpi_np , rc ) C Set up connectivity mpi_northId = mpi_pid+1 IF ( mpi_northId .EQ. mpi_np ) mpi_northId = 0 mpi_southId = mpi_pid-1 IF ( mpi_southId .LT. 0 ) mpi_southId = mpi_np-1 numberOfProcs = mpi_np myProcId = mpi_pid #endif #ifdef USE_JAM_INIT C JAM initialisation. This should work with or without C MPI. If we don't use MPI we have to start procs. by hand C though! myTwoProcRank=MOD(myProcId,2) IF ( myTwoProcRank .EQ. 0 ) THEN myTwoProcRank = 1 ELSE myTwoProcRank = 0 ENDIF CALL JAM_collective_init( myTwoProcRank ) CALL GET_JAM_self_address( jam_pid ) CALL GET_JAM_partition_size( jam_np ) jam_exchKey = 100 dummyVal = 0. CALL JAM_barrier_start( dummyVal ) CALL JAM_barrier_done( dummyVal ) C Set up connectivity jam_northId = jam_pid+1 IF ( jam_northId .EQ. jam_np ) jam_northId = 0 jam_southId = jam_pid-1 IF ( jam_southId .LT. 0 ) jam_southId = jam_np-1 numberOfProcs = jam_np myProcId = jam_pid mpi_northId = jam_northId mpi_southId = jam_southId #endif myYGlobalLo = myProcId*sNy+1 Ny = numberOfProcs*sNy IF ( numberOfProcs .GT. 1 ) THEN WRITE(fnam,'(A7,I6.6)') 'STDOUT.',myProcId OPEN(UNIT=standardMessageUnit,FILE=fnam) ENDIF RETURN END