--- trunk/mdtools/mpi_implementation/mpiBASS.c 2002/10/16 21:07:16 139 +++ trunk/mdtools/mpi_implementation/mpiBASS.c 2002/11/05 22:04:46 164 @@ -4,6 +4,7 @@ #include #define __mpiBASSEVENT #include "mpiBASS.h" +#include "simError.h" void mpiCatchEvent(void); @@ -46,18 +47,13 @@ void throwMPIEvent(event* the_event) mBEvent mpiEventContainer; int mpiStatus; int mpiError; - int mynode; + if (the_event == NULL) mpiStatus = MPI_INTERFACE_DONE; else mpiStatus = MPI_INTERFACE_CONTINUE; - mpiError = MPI_Bcast(&mpiStatus,1,MPI_INT,0,MPI_COMM_WORLD); - if (mpiError != MPI_SUCCESS){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); - } - + MPI_Bcast(&mpiStatus,1,MPI_INT,0,MPI_COMM_WORLD); + if (!mpiStatus){ switch (the_event->event_type){ case MOLECULE: @@ -121,12 +117,12 @@ void throwMPIEvent(event* the_event) strcpy(mpiEventContainer.lhs,the_event->evt.asmt.lhs); -#ifdef D_VERBOSE - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); +#ifdef MPIBASS_VERBOSE + fprintf(stderr, "mpiDiag at node %d: evt Assignment: \"%s\" = ?\n" " mpi Assignment: \"%s\" = ?\n", - mynode, + worldRank, the_event->evt.asmt.lhs, mpiEventContainer.lhs); #endif @@ -155,13 +151,11 @@ void throwMPIEvent(event* the_event) } - mpiError = MPI_Bcast(&mpiEventContainer,1,mpiBASSEventType,0,MPI_COMM_WORLD); + MPI_Bcast(&mpiEventContainer,1,mpiBASSEventType,0,MPI_COMM_WORLD); - if (mpiError != MPI_SUCCESS){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); - } + sprintf( checkPointMsg, + "BASS Event broadcast successful" ); + MPIcheckPoint(); } } @@ -171,10 +165,8 @@ void mpiEventLoop(void) { int mpiError; int mpiContinue; - int mynode; -#ifdef D_VERBOSE - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); +#ifdef MPIBASS_VERBOSE fprintf(stderr, "event key List at node %d:\n" " MOLECULE %d\n" @@ -191,35 +183,23 @@ void mpiEventLoop(void) " START_INDEX %d\n" " BLOCK_END %d\n" "\n", - mynode, + worldRank, MOLECULE, ATOM, BOND, BEND, TORSION, COMPONENT, POSITION, ASSIGNMENT, MEMBER, CONSTRAINT, ORIENTATION, START_INDEX, BLOCK_END ); #endif - mpiError = MPI_Bcast(&mpiContinue,1,MPI_INT,0,MPI_COMM_WORLD); - if (mpiError != MPI_SUCCESS){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); - } + MPI_Bcast(&mpiContinue,1,MPI_INT,0,MPI_COMM_WORLD); - while(!mpiContinue){ mpiCatchEvent(); - mpiError = MPI_Bcast(&mpiContinue,1,MPI_INT,0,MPI_COMM_WORLD); - if (mpiError != MPI_SUCCESS){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); - } + MPI_Bcast(&mpiContinue,1,MPI_INT,0,MPI_COMM_WORLD); } if (mpiContinue == MPI_INTERFACE_ABORT){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); + MPI_Finalize(); exit (0); } } @@ -229,18 +209,11 @@ void mpiCatchEvent(void) event the_event; mBEvent mpiEventContainer; int mpiError; - int mynode; - - mpiError = MPI_Bcast(&mpiEventContainer,1,mpiBASSEventType,0,MPI_COMM_WORLD); - if (mpiError != MPI_SUCCESS){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); - } + + MPI_Bcast(&mpiEventContainer,1,mpiBASSEventType,0,MPI_COMM_WORLD); - switch (mpiEventContainer.type){ case mpiMOLECULE: the_event.event_type = MOLECULE; @@ -306,9 +279,9 @@ void mpiCatchEvent(void) strcpy(the_event.evt.asmt.lhs,mpiEventContainer.lhs); strcpy(the_event.evt.asmt.rhs.sval,mpiEventContainer.cArray); -#ifdef D_VERBOSE - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); - fprintf(stderr, "mpiDiag at node %d: Assignment: %s = %s\n", mynode, +#ifdef MPIBASS_VERBOSE + + fprintf(stderr, "mpiDiag at node %d: Assignment: %s = %s\n", worldRank, the_event.evt.asmt.lhs, the_event.evt.asmt.rhs.sval ); #endif @@ -321,9 +294,9 @@ void mpiCatchEvent(void) strcpy(the_event.evt.asmt.lhs,mpiEventContainer.lhs); the_event.evt.asmt.rhs.ival = mpiEventContainer.i1; -#ifdef D_VERBOSE - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); - fprintf(stderr, "mpiDiag at node %d: Assignment: %s = %d\n", mynode, +#ifdef MPIBASS_VERBOSE + + fprintf(stderr, "mpiDiag at node %d: Assignment: %s = %d\n", worldRank, the_event.evt.asmt.lhs, the_event.evt.asmt.rhs.ival ); #endif @@ -336,9 +309,9 @@ void mpiCatchEvent(void) strcpy(the_event.evt.asmt.lhs,mpiEventContainer.lhs); the_event.evt.asmt.rhs.dval = mpiEventContainer.d1; -#ifdef D_VERBOSE - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); - fprintf(stderr, "mpiDiag at node %d: Assignment: %s = %lf\n", mynode, +#ifdef MPIBASS_VERBOSE + + fprintf(stderr, "mpiDiag at node %d: Assignment: %s = %lf\n", worldRank, the_event.evt.asmt.lhs, the_event.evt.asmt.rhs.dval ); #endif @@ -350,20 +323,22 @@ void mpiCatchEvent(void) break; } -#ifdef D_VERBOSE - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); - fprintf(stderr, "mpiDiag at node %d: event type is %d\n", mynode, +#ifdef MPIBASS_VERBOSE + + fprintf(stderr, "mpiDiag at node %d: event type is %d\n", worldRank, the_event.event_type); #endif if (!event_handler(&the_event)){ - mpiError = MPI_Comm_rank(MPI_COMM_WORLD,&mynode); - fprintf(stderr,"MPI event handling error at node %d => %s\n",mynode,the_event.err_msg); - // mpiError = MPI_Finalize(); - // if (mpiError != MPI_SUCCESS) - mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); + + sprintf(painCave.errMsg, + "MPI event handling error at node %d => %s\n", + worldRank, + the_event.err_msg); + painCave.isFatal = 1; + simError(); } + MPIcheckPoint(); } @@ -371,15 +346,8 @@ void mpiInterfaceExit(void){ int mpiError; int mpiStatus = MPI_INTERFACE_ABORT; - mpiError = MPI_Bcast(&mpiStatus,1,MPI_INT,0,MPI_COMM_WORLD); - if (mpiError != MPI_SUCCESS){ - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); - exit (0); - } - - mpiError = MPI_Finalize(); - if (mpiError != MPI_SUCCESS) mpiError = MPI_Abort(MPI_COMM_WORLD,0); + MPI_Bcast(&mpiStatus,1,MPI_INT,0,MPI_COMM_WORLD); + MPI_Finalize(); exit (0); }