16 |
|
#ifdef IS_MPI |
17 |
|
#include <mpi.h> |
18 |
|
#include "mpiSimulation.hpp" |
19 |
< |
#define TAKE_THIS_TAG_CHAR 0 |
20 |
< |
#define TAKE_THIS_TAG_INT 1 |
19 |
> |
#define TAKE_THIS_TAG_CHAR 3134 |
20 |
> |
#define TAKE_THIS_TAG_INT 3135 |
21 |
|
|
22 |
|
namespace initFile{ |
23 |
|
void nodeZeroError( void ); |
92 |
|
char *parseErr; |
93 |
|
|
94 |
|
vector<StuntDouble*> integrableObjects; |
95 |
– |
vector<StuntDouble*>::iterator iter; |
95 |
|
|
96 |
|
simnfo = the_simnfo; |
97 |
|
|
140 |
|
|
141 |
|
integrableObjects = (simnfo->molecules[i]).getIntegrableObjects(); |
142 |
|
|
143 |
< |
for(iter = integrableObjects.begin(); iter!= integrableObjects.end(); iter++) |
143 |
> |
for(j = 0; j < integrableObjects.size(); j++){ |
144 |
|
|
145 |
|
eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
146 |
|
if(eof_test == NULL){ |
153 |
|
simError(); |
154 |
|
} |
155 |
|
|
156 |
< |
parseErr = parseDumpLine( read_buffer, *iter); |
156 |
> |
parseErr = parseDumpLine( read_buffer, integrableObjects[j]); |
157 |
|
if( parseErr != NULL ){ |
158 |
|
strcpy( painCave.errMsg, parseErr ); |
159 |
|
painCave.isFatal = 1; |
160 |
|
simError(); |
161 |
|
} |
162 |
+ |
} |
163 |
|
} |
164 |
– |
|
164 |
|
|
165 |
|
// MPI Section of code.......... |
166 |
|
#else //IS_MPI |
175 |
|
int *MolToProcMap = mpiSim->getMolToProcMap(); |
176 |
|
int localIndex; |
177 |
|
int nCurObj; |
178 |
+ |
int nItems; |
179 |
|
|
180 |
+ |
nTotObjs = simnfo->getTotIntegrableObjects(); |
181 |
|
haveError = 0; |
182 |
|
if (worldRank == 0) { |
183 |
|
|
189 |
|
simError(); |
190 |
|
} |
191 |
|
|
192 |
< |
nTotObjs = atoi( read_buffer ); |
192 |
> |
nItems = atoi( read_buffer ); |
193 |
|
|
194 |
|
// Check to see that the number of integrable objects in the intial configuration file is the |
195 |
|
// same as declared in simBass. |
196 |
|
|
197 |
< |
if( nTotObjs != simnfo->getTotIntegrableObjects()){ |
197 |
> |
if( nTotObjs != nItems){ |
198 |
|
sprintf( painCave.errMsg, |
199 |
|
"Initialize from File error. %s n_atoms, %d, " |
200 |
|
"does not match the BASS file's n_atoms, %d.\n", |
220 |
|
|
221 |
|
MPI_Bcast(read_buffer, BUFFERSIZE, MPI_CHAR, 0, MPI_COMM_WORLD); |
222 |
|
|
223 |
+ |
|
224 |
|
parseErr = parseCommentLine( read_buffer, simnfo); |
225 |
|
|
226 |
|
if( parseErr != NULL ){ |
258 |
|
|
259 |
|
if(haveError) nodeZeroError(); |
260 |
|
|
261 |
< |
parseDumpLine(read_buffer, integrableObjects[i]); |
261 |
> |
parseDumpLine(read_buffer, integrableObjects[j]); |
262 |
|
|
263 |
|
} |
264 |
|
|
267 |
|
else{ |
268 |
|
//molecule belongs to slave nodes |
269 |
|
|
270 |
< |
MPI_Recv(&nCurObj, 1, MPI_INT, 0, |
270 |
> |
MPI_Recv(&nCurObj, 1, MPI_INT, which_node, |
271 |
|
TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus); |
272 |
< |
|
273 |
< |
for(j=0; j < integrableObjects.size(); j++){ |
272 |
> |
|
273 |
> |
for(j=0; j < nCurObj; j++){ |
274 |
|
|
275 |
|
eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
276 |
|
if(eof_test == NULL){ |
287 |
|
|
288 |
|
MPI_Send(read_buffer, BUFFERSIZE, MPI_CHAR, which_node, |
289 |
|
TAKE_THIS_TAG_CHAR, MPI_COMM_WORLD); |
290 |
< |
|
290 |
> |
|
291 |
|
} |
292 |
|
|
293 |
|
} |
297 |
|
} |
298 |
|
else{ |
299 |
|
//actions taken at slave nodes |
300 |
+ |
|
301 |
+ |
MPI_Bcast(read_buffer, BUFFERSIZE, MPI_CHAR, 0, MPI_COMM_WORLD); |
302 |
+ |
|
303 |
+ |
parseErr = parseCommentLine( read_buffer, simnfo); |
304 |
+ |
|
305 |
+ |
if( parseErr != NULL ){ |
306 |
+ |
strcpy( painCave.errMsg, parseErr ); |
307 |
+ |
haveError = 1; |
308 |
+ |
simError(); |
309 |
+ |
} |
310 |
+ |
|
311 |
|
for (i=0 ; i < mpiSim->getTotNmol(); i++) { |
312 |
|
which_node = MolToProcMap[i]; |
313 |
|
|
326 |
|
|
327 |
|
nCurObj = integrableObjects.size(); |
328 |
|
|
329 |
< |
MPI_Recv(&nCurObj, 1, MPI_INT, 0, |
330 |
< |
TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus); |
329 |
> |
MPI_Send(&nCurObj, 1, MPI_INT, 0, |
330 |
> |
TAKE_THIS_TAG_INT, MPI_COMM_WORLD); |
331 |
|
|
332 |
|
for(j = 0; j < integrableObjects.size(); j++){ |
333 |
|
|
631 |
|
|
632 |
|
//push eta into SimInfo::properties which can be |
633 |
|
//retrieved by integrator later |
634 |
< |
//entry_plug->setBoxM( theBoxMat3 ); |
634 |
> |
|
635 |
|
DoubleArrayData* etaValue = new DoubleArrayData(); |
636 |
|
etaValue->setID(ETAVALUE_ID); |
637 |
|
etaValue->setData(eta, 9); |