| 1 |
C $Header: /u/gcmpack/MITgcm_contrib/llc_hires/llc_1080/code-async/asyncio_init.F,v 1.1 2013/09/29 22:43:00 dimitri Exp $ |
| 2 |
#include "CPP_EEOPTIONS.h" |
| 3 |
|
| 4 |
SUBROUTINE ASYNCIO_INIT( |
| 5 |
I mpiCommParent, |
| 6 |
U mpiCommCompute ) |
| 7 |
|
| 8 |
IMPLICIT NONE |
| 9 |
#include "SIZE.h" |
| 10 |
|
| 11 |
INTEGER mpiCommParent, mpiCommCompute |
| 12 |
|
| 13 |
INTEGER mpiRC |
| 14 |
INTEGER mpiCommIO |
| 15 |
INTEGER mpiParentNP |
| 16 |
INTEGER myParentRank |
| 17 |
|
| 18 |
INTEGER mpiMyColor |
| 19 |
INTEGER mpiComputeNP |
| 20 |
INTEGER mpiIONP |
| 21 |
INTEGER totalNumTiles |
| 22 |
INTEGER numComputeProcesses |
| 23 |
|
| 24 |
CALL MPI_COMM_SIZE(mpiCommParent, mpiParentNP, mpiRC ) |
| 25 |
CALL MPI_COMM_RANK(mpiCommParent, myParentRank, mpiRC ) |
| 26 |
|
| 27 |
C-- Hand control of I/O ranks to I/O library code. |
| 28 |
C-- Get back communicator for compute ranks to use. |
| 29 |
totalNumTiles = nPx*nPy*nSx*nSy |
| 30 |
numComputeProcesses = nPx*nPy |
| 31 |
IF ( myParentRank .EQ. 0 ) THEN |
| 32 |
PRINT *, 'totalNumTiles ',totalNumTiles |
| 33 |
PRINT *, 'numComputeProcesses ', numComputeProcesses |
| 34 |
ENDIF |
| 35 |
CALL ASYNCIO_BRON_F_F1(mpiCommParent, |
| 36 |
I numComputeProcesses, |
| 37 |
I totalNumTiles, |
| 38 |
O mpiCommCompute) |
| 39 |
RETURN |
| 40 |
|
| 41 |
C-- ** MOST CODE FROM HERE IS PLACE HOLDER UNTIL WORKING |
| 42 |
C-- ** BRON CODE EXISTS |
| 43 |
C-- Distribute procs to "compute pool" and "I/O pool" |
| 44 |
mpiCommIO = -1 |
| 45 |
mpiCommCompute = -1 |
| 46 |
! mpiComputeNP = mpiParentNP*3/4 |
| 47 |
mpiComputeNP = npx*npy |
| 48 |
mpiIONP = mpiParentNP-mpiComputeNP |
| 49 |
|
| 50 |
IF ( myParentRank .GE. mpiComputeNP ) THEN |
| 51 |
mpiMyColor=1 |
| 52 |
ELSE |
| 53 |
mpiMyColor=2 |
| 54 |
ENDIF |
| 55 |
|
| 56 |
IF ( mpiMyColor .EQ. 1 ) THEN |
| 57 |
CALL MPI_COMM_SPLIT(mpiCommParent, mpiMyColor, 0, mpiCommIO, |
| 58 |
& mpiRC ) |
| 59 |
ELSE |
| 60 |
CALL MPI_COMM_SPLIT(mpiCommParent, mpiMyColor, 0, mpiCommCompute, |
| 61 |
& mpiRC) |
| 62 |
ENDIF |
| 63 |
|
| 64 |
IF ( mpiCommIO .NE. -1 ) THEN |
| 65 |
CALL ASYNCIO_DRIVER_INIT( |
| 66 |
I mpiCommIO, mpiCommParent, |
| 67 |
I sNx, sNy, Nr, OLx, OLy |
| 68 |
I ) |
| 69 |
C-- ** WILL NEED SOMETHING LIKE THESE THREE LINES EVEN |
| 70 |
C-- ** AFTER BRON CODE |
| 71 |
CALL MPI_BARRIER(mpiCommParent,mpiRC) |
| 72 |
CALL MPI_FINALIZE(mpiRC) |
| 73 |
STOP 'NORMAL END: ASYNC IO PROCS' |
| 74 |
ENDIF |
| 75 |
|
| 76 |
RETURN |
| 77 |
END |