| 1 |
< |
i#include <cstdlib> |
| 1 |
> |
#include <cstdlib> |
| 2 |
|
#include <cstring> |
| 3 |
|
#include <mpi.h> |
| 4 |
|
|
| 19 |
|
mpiSimulation::mpiSimulation(SimInfo* the_entryPlug) |
| 20 |
|
{ |
| 21 |
|
entryPlug = the_entryPlug; |
| 22 |
< |
mpiPlug = new MpiSimData; |
| 22 |
> |
mpiPlug = new mpiSimData; |
| 23 |
|
|
| 24 |
|
mpiPlug->numberProcessors = MPI::COMM_WORLD.Get_size(); |
| 25 |
|
mpiPlug->myNode = worldRank; |
| 44 |
|
|
| 45 |
|
|
| 46 |
|
|
| 47 |
< |
void mpiSimulation::divideLabor( void ){ |
| 47 |
> |
int* mpiSimulation::divideLabor( void ){ |
| 48 |
|
|
| 49 |
+ |
int* globalIndex; |
| 50 |
+ |
|
| 51 |
|
int nComponents; |
| 52 |
|
MoleculeStamp** compStamps; |
| 53 |
|
int* componentsNmol; |
| 60 |
|
int molIndex, atomIndex, compIndex, compStart; |
| 61 |
|
int done; |
| 62 |
|
int nLocal, molLocal; |
| 63 |
< |
int i; |
| 63 |
> |
int i, index; |
| 64 |
|
int smallDiff, bigDiff; |
| 65 |
|
|
| 66 |
|
int testSum; |
| 74 |
|
mpiPlug->nBendsGlobal = entryPlug->n_bends; |
| 75 |
|
mpiPlug->nTorsionsGlobal = entryPlug->n_torsions; |
| 76 |
|
mpiPlug->nSRIGlobal = entryPlug->n_SRI; |
| 77 |
< |
mpiPlug->nMolGlobal = entryPlug->n_nmol; |
| 77 |
> |
mpiPlug->nMolGlobal = entryPlug->n_mol; |
| 78 |
|
|
| 79 |
|
numerator = (double) entryPlug->n_atoms; |
| 80 |
|
denominator = (double) mpiPlug->numberProcessors; |
| 185 |
|
MPIcheckPoint(); |
| 186 |
|
|
| 187 |
|
// lets create the identity array |
| 188 |
+ |
|
| 189 |
+ |
globalIndex = new int[mpiPlug->myNlocal]; |
| 190 |
+ |
index = mpiPlug->myAtomStart; |
| 191 |
+ |
for( i=0; i<mpiPlug->myNlocal; i++){ |
| 192 |
+ |
globalIndex[i] = index; |
| 193 |
+ |
index++; |
| 194 |
+ |
} |
| 195 |
+ |
|
| 196 |
+ |
return globalIndex; |
| 197 |
|
} |
| 198 |
|
|
| 199 |
|
|
| 201 |
|
|
| 202 |
|
mpiSim->setInternal( fSub ); |
| 203 |
|
} |
| 204 |
+ |
|
| 205 |
+ |
|
| 206 |
+ |
void mpiSimulation::mpiRefresh( void ){ |
| 207 |
+ |
|
| 208 |
+ |
int isError, i; |
| 209 |
+ |
int *globalIndex = new int[mpiPlug->myNlocal]; |
| 210 |
+ |
|
| 211 |
+ |
for(i=0; i<mpiPlug->myNlocal; i++) globalIndex[i] = entryPlug->atoms[i]->getGlobalIndex(); |
| 212 |
+ |
|
| 213 |
+ |
|
| 214 |
+ |
isError = 0; |
| 215 |
+ |
setFsimParallel( mpiPlug, &(entryPlug->n_atoms), globalIndex, &isError ); |
| 216 |
+ |
if( isError ){ |
| 217 |
+ |
|
| 218 |
+ |
sprintf( painCave.errMsg, |
| 219 |
+ |
"mpiRefresh errror: fortran didn't like something we gave it.\n" ); |
| 220 |
+ |
painCave.isFatal = 1; |
| 221 |
+ |
simError(); |
| 222 |
+ |
} |
| 223 |
+ |
|
| 224 |
+ |
delete[] globalIndex; |
| 225 |
+ |
|
| 226 |
+ |
sprintf( checkPointMsg, |
| 227 |
+ |
" mpiRefresh successful.\n" ); |
| 228 |
+ |
MPIcheckPoint(); |
| 229 |
+ |
} |
| 230 |
+ |
|