| 1 |
dimitri |
1.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 |