ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/DumpReader.cpp
Revision: 1119
Committed: Mon Apr 19 17:44:48 2004 UTC (20 years, 2 months ago) by tim
File size: 17702 byte(s)
Log Message:
Dump2XYZ is almost working except atoms in rigidbody are double counted

File Contents

# User Rev Content
1 tim 1078 #define _LARGEFILE_SOURCE64
2 mmeineke 643 #define _FILE_OFFSET_BITS 64
3    
4 mmeineke 804 #include <sys/types.h>
5     #include <sys/stat.h>
6    
7 gezelter 637 #include <iostream>
8 gezelter 829 #include <math.h>
9 gezelter 637
10     #include <stdio.h>
11     #include <stdlib.h>
12     #include <string.h>
13    
14 mmeineke 804
15 gezelter 637 #include "ReadWrite.hpp"
16     #include "simError.h"
17    
18     #ifdef IS_MPI
19     #include <mpi.h>
20     #include "mpiSimulation.hpp"
21     #define TAKE_THIS_TAG_CHAR 0
22     #define TAKE_THIS_TAG_INT 1
23 mmeineke 647 #endif // is_mpi
24 gezelter 637
25 mmeineke 647
26 tim 1074 DumpReader :: DumpReader(const char *in_name ){
27 mmeineke 647
28     isScanned = false;
29    
30 gezelter 637 #ifdef IS_MPI
31     if (worldRank == 0) {
32     #endif
33    
34 mmeineke 647 inFile = fopen(in_name, "r");
35     if(inFile == NULL){
36 gezelter 637 sprintf(painCave.errMsg,
37     "Cannot open file: %s\n", in_name);
38     painCave.isFatal = 1;
39     simError();
40     }
41    
42 tim 1118 inFileName = in_name;
43 gezelter 637 #ifdef IS_MPI
44     }
45     strcpy( checkPointMsg, "Dump file opened for reading successfully." );
46     MPIcheckPoint();
47     #endif
48     return;
49     }
50    
51     DumpReader :: ~DumpReader( ){
52     #ifdef IS_MPI
53     if (worldRank == 0) {
54     #endif
55 tim 1118 vector<fpos_t*>::iterator i;
56    
57 gezelter 637 int error;
58 mmeineke 647 error = fclose( inFile );
59 gezelter 637 if( error ){
60     sprintf( painCave.errMsg,
61 tim 1118 "Error closing %s\n", inFileName.c_str());
62 gezelter 637 simError();
63     }
64 tim 1118
65     for(i = framePos.begin(); i != framePos.end(); ++i)
66     delete *i;
67     framePos.clear();
68    
69 gezelter 637 #ifdef IS_MPI
70     }
71     strcpy( checkPointMsg, "Dump file closed successfully." );
72     MPIcheckPoint();
73     #endif
74    
75     return;
76     }
77    
78 mmeineke 647 int DumpReader::getNframes( void ){
79 gezelter 637
80 tim 1118 if( !isScanned )
81     scanFile();
82     return framePos.size();
83 mmeineke 647 }
84 mmeineke 643
85 mmeineke 647 void DumpReader::scanFile( void ){
86    
87     int vectorSize;
88     int i, j, k;
89     int lineNum = 0;
90     char readBuffer[2000];
91     char* foo;
92     fpos_t *currPos;
93 mmeineke 804 double time;
94 mmeineke 647
95 mmeineke 804
96    
97 mmeineke 647 #ifdef IS_MPI
98     if( worldRank == 0 ){
99     #endif // is_mpi
100    
101     rewind( inFile );
102    
103     currPos = new fpos_t;
104     fgetpos( inFile, currPos );
105 mmeineke 804 fgets( readBuffer, sizeof( readBuffer ), inFile );
106 mmeineke 647 lineNum++;
107 mmeineke 804 if( feof( inFile ) ){
108 mmeineke 647 sprintf( painCave.errMsg,
109     "File \"%s\" ended unexpectedly at line %d\n",
110 tim 1118 inFileName.c_str(),
111 mmeineke 647 lineNum );
112     painCave.isFatal = 1;
113     simError();
114     }
115 tim 1118
116 mmeineke 804 while( !feof( inFile ) ){
117 tim 1119
118     framePos.push_back(currPos);
119 mmeineke 804
120 mmeineke 647 i = atoi(readBuffer);
121    
122 mmeineke 804 fgets( readBuffer, sizeof( readBuffer ), inFile );
123 mmeineke 647 lineNum++;
124 mmeineke 804 if( feof( inFile ) ){
125 mmeineke 647 sprintf( painCave.errMsg,
126     "File \"%s\" ended unexpectedly at line %d\n",
127 tim 1118 inFileName.c_str(),
128 mmeineke 647 lineNum );
129     painCave.isFatal = 1;
130     simError();
131     }
132 tim 1118
133 mmeineke 647 for(j=0; j<i; j++){
134    
135 mmeineke 804 fgets( readBuffer, sizeof( readBuffer ), inFile );
136 mmeineke 647 lineNum++;
137 mmeineke 804 if( feof( inFile ) ){
138 mmeineke 647 sprintf( painCave.errMsg,
139     "File \"%s\" ended unexpectedly at line %d,"
140     " with atom %d\n",
141 tim 1118 inFileName.c_str(),
142 mmeineke 647 lineNum,
143     j );
144     painCave.isFatal = 1;
145     simError();
146     }
147    
148     }
149    
150     currPos = new fpos_t;
151     fgetpos( inFile, currPos );
152 mmeineke 804 fgets( readBuffer, sizeof( readBuffer ), inFile );
153 mmeineke 647 lineNum++;
154     }
155    
156     delete currPos;
157     rewind( inFile );
158 tim 1118
159 mmeineke 804 isScanned = true;
160    
161 mmeineke 647 #ifdef IS_MPI
162     }
163     strcpy( checkPointMsg, "Successfully scanned DumpFile\n" );
164     MPIcheckPoint();
165     #endif // is_mpi
166     }
167    
168 mmeineke 656 void DumpReader :: readFrame( SimInfo* the_simnfo, int whichFrame){
169 mmeineke 647
170 mmeineke 656 simnfo = the_simnfo;
171 mmeineke 647
172 mmeineke 656 this->readSet( whichFrame );
173     }
174 gezelter 637
175 mmeineke 656
176    
177     void DumpReader :: readSet( int whichFrame ){
178    
179 tim 1118 int i, j;
180 gezelter 637
181     #ifdef IS_MPI
182 tim 1118 int done, which_node, which_atom; // loop counter
183     #endif //is_mpi
184 gezelter 637
185 tim 1118 const int BUFFERSIZE = 2000; // size of the read buffer
186     int nTotObjs; // the number of atoms
187     char read_buffer[BUFFERSIZE]; //the line buffer for reading
188    
189     char *eof_test; // ptr to see when we reach the end of the file
190 gezelter 637 char *parseErr;
191 mmeineke 804
192 tim 1118 vector<StuntDouble*> integrableObjects;
193    
194    
195 mmeineke 656 #ifndef IS_MPI
196 gezelter 637
197 tim 1118 fsetpos(inFile, framePos[whichFrame]);
198 mmeineke 647 eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
199 gezelter 637 if( eof_test == NULL ){
200     sprintf( painCave.errMsg,
201 tim 1119 "DumpReader error: error reading 1st line of \"%s\"\n",
202 tim 1118 inFileName.c_str() );
203 gezelter 637 painCave.isFatal = 1;
204     simError();
205     }
206    
207 tim 1118 nTotObjs = atoi( read_buffer );
208 gezelter 637
209 tim 1118 if( nTotObjs != simnfo->getTotIntegrableObjects() ){
210 gezelter 637 sprintf( painCave.errMsg,
211 tim 1119 "DumpReader error. %s n_atoms, %d, "
212 gezelter 637 "does not match the BASS file's n_atoms, %d.\n",
213 tim 1118 inFileName.c_str(), nTotObjs, simnfo->getTotIntegrableObjects());
214 gezelter 637 painCave.isFatal = 1;
215     simError();
216     }
217 tim 1118
218     //read the box mat from the comment line
219    
220 mmeineke 647 eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
221 gezelter 637 if(eof_test == NULL){
222     sprintf( painCave.errMsg,
223 tim 1118 "error in reading commment in %s\n", inFileName.c_str());
224 gezelter 637 painCave.isFatal = 1;
225     simError();
226     }
227    
228 tim 1118 parseErr = parseCommentLine( read_buffer, simnfo);
229 gezelter 637 if( parseErr != NULL ){
230     strcpy( painCave.errMsg, parseErr );
231     painCave.isFatal = 1;
232     simError();
233     }
234    
235 tim 1118 //parse dump lines
236 gezelter 637
237 tim 1118 for( i=0; i < simnfo->n_mol; i++){
238 gezelter 637
239 tim 1118 integrableObjects = (simnfo->molecules[i]).getIntegrableObjects();
240 gezelter 637
241 tim 1118 for(j = 0; j < integrableObjects.size(); j++){
242    
243     eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
244     if(eof_test == NULL){
245     sprintf(painCave.errMsg,
246     "error in reading file %s\n"
247     "natoms = %d; index = %d\n"
248     "error reading the line from the file.\n",
249     inFileName.c_str(), nTotObjs, i );
250     painCave.isFatal = 1;
251     simError();
252     }
253    
254     parseErr = parseDumpLine( read_buffer, integrableObjects[j]);
255     if( parseErr != NULL ){
256     strcpy( painCave.errMsg, parseErr );
257     painCave.isFatal = 1;
258     simError();
259     }
260 gezelter 637 }
261     }
262    
263     // MPI Section of code..........
264     #else //IS_MPI
265    
266     // first thing first, suspend fatalities.
267     painCave.isEventLoop = 1;
268    
269     int myStatus; // 1 = wakeup & success; 0 = error; -1 = AllDone
270     int haveError;
271 tim 1118
272 gezelter 637 MPI_Status istatus;
273 tim 1118 int *MolToProcMap = mpiSim->getMolToProcMap();
274     int localIndex;
275     int nCurObj;
276 gezelter 637
277     haveError = 0;
278     if (worldRank == 0) {
279 tim 1118 fsetpos(inFile, framePos[whichFrame]);
280    
281 mmeineke 647 eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
282 gezelter 637 if( eof_test == NULL ){
283     sprintf( painCave.errMsg,
284 tim 1118 "Error reading 1st line of %s \n ",inFileName.c_str());
285 gezelter 637 haveError = 1;
286     simError();
287     }
288 tim 1118
289     nTotObjs = atoi( read_buffer );
290    
291     // Check to see that the number of integrable objects in the intial configuration file is the
292 gezelter 637 // same as declared in simBass.
293 tim 1118
294     if( nTotObjs != simnfo->getTotIntegrableObjects()){
295 gezelter 637 sprintf( painCave.errMsg,
296 tim 1119 "DumpReadererror. %s n_atoms, %d, "
297 gezelter 637 "does not match the BASS file's n_atoms, %d.\n",
298 tim 1118 inFileName.c_str(), nTotObjs, simnfo->getTotIntegrableObjects());
299 gezelter 637 haveError= 1;
300     simError();
301     }
302 tim 1118
303     //read the boxMat from the comment line
304    
305 mmeineke 647 eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
306 gezelter 637 if(eof_test == NULL){
307     sprintf( painCave.errMsg,
308 tim 1118 "error in reading commment in %s\n", inFileName.c_str());
309 gezelter 637 haveError = 1;
310     simError();
311     }
312 tim 1118
313     //Every single processor will parse the comment line by itself
314     //By using this way, we might lose some efficiency, but if we want to add
315     //more parameters into comment line, we only need to modify function
316     //parseCommentLine
317    
318     MPI_Bcast(read_buffer, BUFFERSIZE, MPI_CHAR, 0, MPI_COMM_WORLD);
319    
320     parseErr = parseCommentLine( read_buffer, simnfo);
321    
322 gezelter 637 if( parseErr != NULL ){
323     strcpy( painCave.errMsg, parseErr );
324     haveError = 1;
325     simError();
326     }
327    
328 tim 1118 for (i=0 ; i < mpiSim->getTotNmol(); i++) {
329     which_node = MolToProcMap[i];
330     if(which_node == 0){
331     //molecules belong to master node
332    
333     localIndex = mpiSim->getGlobalToLocalMol(i);
334    
335     if(localIndex == -1) {
336     strcpy(painCave.errMsg, "Molecule not found on node 0!");
337     haveError = 1;
338     simError();
339 gezelter 637 }
340    
341 tim 1118 integrableObjects = (simnfo->molecules[localIndex]).getIntegrableObjects();
342     for(j=0; j < integrableObjects.size(); j++){
343    
344     eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
345     if(eof_test == NULL){
346     sprintf(painCave.errMsg,
347     "error in reading file %s\n"
348     "natoms = %d; index = %d\n"
349     "error reading the line from the file.\n",
350     inFileName.c_str(), nTotObjs, i );
351     haveError= 1;
352     simError();
353     }
354    
355     if(haveError) nodeZeroError();
356    
357     parseDumpLine(read_buffer, integrableObjects[i]);
358    
359     }
360    
361    
362 gezelter 637 }
363 tim 1118 else{
364     //molecule belongs to slave nodes
365 gezelter 637
366 tim 1118 MPI_Recv(&nCurObj, 1, MPI_INT, 0,
367 gezelter 637 TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus);
368    
369 tim 1118 for(j=0; j < integrableObjects.size(); j++){
370    
371     eof_test = fgets(read_buffer, sizeof(read_buffer), inFile);
372     if(eof_test == NULL){
373     sprintf(painCave.errMsg,
374     "error in reading file %s\n"
375     "natoms = %d; index = %d\n"
376     "error reading the line from the file.\n",
377     inFileName.c_str(), nTotObjs, i );
378     haveError= 1;
379     simError();
380     }
381    
382     if(haveError) nodeZeroError();
383 gezelter 637
384 tim 1118 MPI_Send(read_buffer, BUFFERSIZE, MPI_CHAR, which_node,
385     TAKE_THIS_TAG_CHAR, MPI_COMM_WORLD);
386    
387     }
388    
389 gezelter 637 }
390    
391     }
392 tim 1118
393 gezelter 637 }
394 tim 1118 else{
395     //actions taken at slave nodes
396     for (i=0 ; i < mpiSim->getTotNmol(); i++) {
397     which_node = MolToProcMap[i];
398    
399     if(which_node == worldRank){
400     //molecule with global index i belongs to this processor
401    
402     localIndex = mpiSim->getGlobalToLocalMol(i);
403 gezelter 637
404 tim 1118 if(localIndex == -1) {
405     sprintf(painCave.errMsg, "Molecule not found on node %d\n", worldRank);
406     haveError = 1;
407     simError();
408     }
409 gezelter 637
410 tim 1118 integrableObjects = (simnfo->molecules[localIndex]).getIntegrableObjects();
411 gezelter 637
412 tim 1118 nCurObj = integrableObjects.size();
413    
414     MPI_Recv(&nCurObj, 1, MPI_INT, 0,
415     TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus);
416 gezelter 637
417 tim 1118 for(j = 0; j < integrableObjects.size(); j++){
418    
419     MPI_Recv(read_buffer, BUFFERSIZE, MPI_CHAR, 0,
420     TAKE_THIS_TAG_CHAR, MPI_COMM_WORLD, &istatus);
421    
422     parseErr = parseDumpLine(read_buffer, integrableObjects[j]);
423    
424     if( parseErr != NULL ){
425     strcpy( painCave.errMsg, parseErr );
426     simError();
427     }
428    
429     }
430    
431     }
432    
433     }
434    
435     }
436    
437 gezelter 637 #endif
438     }
439    
440 tim 1118 char* DumpReader::parseDumpLine(char* readLine, StuntDouble* sd){
441 gezelter 637
442 tim 1118 char *foo; // the pointer to the current string token
443    
444     double pos[3]; // position place holders
445     double vel[3]; // velocity placeholders
446     double q[4]; // the quaternions
447     double ji[3]; // angular velocity placeholders;
448 gezelter 637 double qSqr, qLength; // needed to normalize the quaternion vector.
449    
450    
451     // set the string tokenizer
452 tim 1118
453 gezelter 637 foo = strtok(readLine, " ,;\t");
454 tim 1118
455 gezelter 637 // check the atom name to the current atom
456 tim 1118
457     if( strcmp( foo, sd->getType() ) ){
458     sprintf( painCave.errMsg,
459 tim 1119 "DumpReader error. Does not"
460 tim 1118 " match the BASS atom %s.\n",
461     sd->getType() );
462     return strdup( painCave.errMsg );
463     }
464    
465 gezelter 637 // get the positions
466    
467     foo = strtok(NULL, " ,;\t");
468     if(foo == NULL){
469     sprintf( painCave.errMsg,
470 tim 1118 "error in reading postition x from %s\n",
471     inFileName.c_str());
472 gezelter 637 return strdup( painCave.errMsg );
473     }
474 mmeineke 804 pos[0] = atof( foo );
475 tim 1118
476 gezelter 637 foo = strtok(NULL, " ,;\t");
477     if(foo == NULL){
478     sprintf( painCave.errMsg,
479 tim 1118 "error in reading postition y from %s\n",
480     inFileName.c_str());
481 gezelter 637 return strdup( painCave.errMsg );
482     }
483 mmeineke 804 pos[1] = atof( foo );
484 tim 1118
485 gezelter 637 foo = strtok(NULL, " ,;\t");
486     if(foo == NULL){
487     sprintf( painCave.errMsg,
488 tim 1118 "error in reading postition z from %s\n",
489     inFileName.c_str());
490 gezelter 637 return strdup( painCave.errMsg );
491     }
492 tim 1118 pos[2] = atof( foo );
493 gezelter 637
494    
495     // get the velocities
496    
497     foo = strtok(NULL, " ,;\t");
498     if(foo == NULL){
499     sprintf( painCave.errMsg,
500 tim 1118 "error in reading velocity x from %s\n",
501     inFileName.c_str() );
502 gezelter 637 return strdup( painCave.errMsg );
503     }
504 mmeineke 804 vel[0] = atof( foo );
505 tim 1118
506 gezelter 637 foo = strtok(NULL, " ,;\t");
507     if(foo == NULL){
508     sprintf( painCave.errMsg,
509 tim 1118 "error in reading velocity x from %s\n",
510     inFileName.c_str() );
511 gezelter 637 return strdup( painCave.errMsg );
512     }
513 mmeineke 804 vel[1] = atof( foo );
514 tim 1118
515 gezelter 637 foo = strtok(NULL, " ,;\t");
516     if(foo == NULL){
517     sprintf( painCave.errMsg,
518 tim 1118 "error in reading velocity x from %s\n",
519     inFileName.c_str() );
520 gezelter 637 return strdup( painCave.errMsg );
521     }
522 mmeineke 804 vel[2] = atof( foo );
523 tim 1118
524    
525     // add the positions and velocities to the atom
526    
527     sd->setPos( pos );
528     sd->setVel( vel );
529    
530     if (!sd->isDirectional())
531     return NULL;
532    
533 gezelter 637 // get the quaternions
534 tim 1118
535     if( sd->isDirectional() ){
536    
537 gezelter 637 foo = strtok(NULL, " ,;\t");
538     if(foo == NULL){
539 tim 1118 sprintf( painCave.errMsg,
540     "error in reading velocity x from %s\n",
541     inFileName.c_str() );
542 gezelter 637 return strdup( painCave.errMsg );
543     }
544     q[0] = atof( foo );
545 tim 1118
546 gezelter 637 foo = strtok(NULL, " ,;\t");
547     if(foo == NULL){
548     sprintf( painCave.errMsg,
549 tim 1118 "error in reading velocity x from %s\n",
550     inFileName.c_str() );
551 gezelter 637 return strdup( painCave.errMsg );
552     }
553     q[1] = atof( foo );
554 tim 1118
555 gezelter 637 foo = strtok(NULL, " ,;\t");
556     if(foo == NULL){
557     sprintf( painCave.errMsg,
558 tim 1118 "error in reading velocity x from %s\n",
559     inFileName.c_str() );
560 gezelter 637 return strdup( painCave.errMsg );
561     }
562     q[2] = atof( foo );
563 tim 1118
564 gezelter 637 foo = strtok(NULL, " ,;\t");
565     if(foo == NULL){
566     sprintf( painCave.errMsg,
567 tim 1118 "error in reading velocity x from %s\n",
568     inFileName.c_str() );
569 gezelter 637 return strdup( painCave.errMsg );
570     }
571     q[3] = atof( foo );
572 tim 1118
573 gezelter 637 // get the angular velocities
574 tim 1118
575 gezelter 637 foo = strtok(NULL, " ,;\t");
576     if(foo == NULL){
577     sprintf( painCave.errMsg,
578 tim 1118 "error in reading velocity x from %s\n",
579     inFileName.c_str() );
580 gezelter 637 return strdup( painCave.errMsg );
581     }
582 gezelter 1097 ji[0] = atof( foo );
583 tim 1118
584 gezelter 637 foo = strtok(NULL, " ,;\t");
585     if(foo == NULL){
586     sprintf( painCave.errMsg,
587 tim 1118 "error in reading velocity x from %s\n",
588     inFileName.c_str() );
589 gezelter 637 return strdup( painCave.errMsg );
590     }
591 gezelter 1097 ji[1] = atof(foo );
592 tim 1118
593 gezelter 637 foo = strtok(NULL, " ,;\t");
594     if(foo == NULL){
595     sprintf( painCave.errMsg,
596 tim 1118 "error in reading velocity x from %s\n",
597     inFileName.c_str() );
598 gezelter 637 return strdup( painCave.errMsg );
599     }
600 gezelter 1097 ji[2] = atof( foo );
601 gezelter 637
602 tim 1118
603 gezelter 637 // check that the quaternion vector is normalized
604    
605     qSqr = (q[0] * q[0]) + (q[1] * q[1]) + (q[2] * q[2]) + (q[3] * q[3]);
606 tim 1118
607 gezelter 637 qLength = sqrt( qSqr );
608     q[0] = q[0] / qLength;
609     q[1] = q[1] / qLength;
610     q[2] = q[2] / qLength;
611     q[3] = q[3] / qLength;
612    
613 tim 1118 // add quaternion and angular velocities
614    
615     sd->setQ( q );
616     sd->setJ( ji );
617 gezelter 637 }
618    
619 mmeineke 804
620 tim 1118
621 gezelter 637 return NULL;
622     }
623    
624    
625 tim 1118 char* DumpReader::parseCommentLine(char* readLine, SimInfo* entry_plug){
626 gezelter 637
627 tim 1118 double currTime;
628     double boxMat[9];
629     double theBoxMat3[3][3];
630     double chi;
631     double integralOfChidt;
632 mmeineke 847 double eta[9];
633 gezelter 637
634 tim 1118 char *foo; // the pointer to the current string token
635    
636 gezelter 637 // set the string tokenizer
637 tim 1118
638 gezelter 637 foo = strtok(readLine, " ,;\t");
639 tim 1118 // set the timeToken.
640    
641 gezelter 637 if(foo == NULL){
642     sprintf( painCave.errMsg,
643 tim 1118 "error in reading Time from %s\n",
644     inFileName.c_str() );
645 gezelter 637 return strdup( painCave.errMsg );
646     }
647    
648 tim 1118 currTime = atof( foo );
649     entry_plug->setTime( currTime );
650 gezelter 637
651 tim 1118 //get H-Matrix
652 gezelter 637
653 tim 1118 for(int i = 0 ; i < 9; i++){
654     foo = strtok(NULL, " ,;\t");
655     if(foo == NULL){
656     sprintf( painCave.errMsg,
657     "error in reading H[%d] from %s\n", i, inFileName.c_str() );
658     return strdup( painCave.errMsg );
659     }
660     boxMat[i] = atof( foo );
661 gezelter 637 }
662    
663 tim 1118 for(int i=0;i<3;i++)
664     for(int j=0;j<3;j++) theBoxMat3[i][j] = boxMat[3*j+i];
665 gezelter 637
666 tim 1118 //set H-Matrix
667     entry_plug->setBoxM( theBoxMat3 );
668 gezelter 637
669 tim 1118 //get chi and integralOfChidt, they should appear by pair
670 mmeineke 847
671 tim 1118 if( entry_plug->useInitXSstate ){
672     foo = strtok(NULL, " ,;\t\n");
673     if(foo != NULL){
674     chi = atof(foo);
675    
676     foo = strtok(NULL, " ,;\t\n");
677     if(foo == NULL){
678     sprintf( painCave.errMsg,
679     "chi and integralOfChidt should appear by pair in %s\n", inFileName.c_str() );
680     return strdup( painCave.errMsg );
681     }
682     integralOfChidt = atof( foo );
683    
684     //push chi and integralOfChidt into SimInfo::properties which can be
685     //retrieved by integrator later
686     DoubleData* chiValue = new DoubleData();
687     chiValue->setID(CHIVALUE_ID);
688     chiValue->setData(chi);
689     entry_plug->addProperty(chiValue);
690    
691     DoubleData* integralOfChidtValue = new DoubleData();
692     integralOfChidtValue->setID(INTEGRALOFCHIDT_ID);
693     integralOfChidtValue->setData(integralOfChidt);
694     entry_plug->addProperty(integralOfChidtValue);
695    
696     }
697     else
698     return NULL;
699 mmeineke 847
700 tim 1118 //get eta
701 mmeineke 847 foo = strtok(NULL, " ,;\t\n");
702 tim 1118 if(foo != NULL ){
703    
704     for(int i = 0 ; i < 9; i++){
705    
706     if(foo == NULL){
707     sprintf( painCave.errMsg,
708     "error in reading eta[%d] from %s\n", i, inFileName.c_str() );
709     return strdup( painCave.errMsg );
710     }
711     eta[i] = atof( foo );
712     foo = strtok(NULL, " ,;\t\n");
713     }
714 mmeineke 847 }
715 tim 1118 else
716     return NULL;
717 mmeineke 847
718 tim 1118 //push eta into SimInfo::properties which can be
719 mmeineke 847 //retrieved by integrator later
720 tim 1118 //entry_plug->setBoxM( theBoxMat3 );
721     DoubleArrayData* etaValue = new DoubleArrayData();
722     etaValue->setID(ETAVALUE_ID);
723     etaValue->setData(eta, 9);
724     entry_plug->addProperty(etaValue);
725 mmeineke 847 }
726 tim 1118
727 mmeineke 847 return NULL;
728 gezelter 637 }
729    
730     #ifdef IS_MPI
731 tim 1118 void DumpReader::nodeZeroError( void ){
732     int j, myStatus;
733 gezelter 637
734     myStatus = 0;
735 tim 1118 for (j = 0; j < mpiSim->getNumberProcessors(); j++) {
736     MPI_Send( &myStatus, 1, MPI_INT, j,
737 gezelter 637 TAKE_THIS_TAG_INT, MPI_COMM_WORLD);
738 tim 1118 }
739 gezelter 637
740 tim 1118
741 gezelter 637 MPI_Finalize();
742     exit (0);
743 tim 1118
744 gezelter 637 }
745    
746 tim 1118 void DumpReader::anonymousNodeDie( void ){
747 gezelter 637
748     MPI_Finalize();
749     exit (0);
750     }
751 tim 1118 #endif