# | Line 1 | Line 1 | |
---|---|---|
1 | + | #define _LARGEFILE_SOURCE64 |
2 | + | #define _FILE_OFFSET_BITS 64 |
3 | + | |
4 | + | #include <sys/types.h> |
5 | + | #include <sys/stat.h> |
6 | + | |
7 | #include <iostream> | |
8 | < | #include <cmath> |
8 | > | #include <math.h> |
9 | ||
10 | #include <stdio.h> | |
11 | #include <stdlib.h> | |
12 | #include <string.h> | |
7 | – | #include <unistd.h> |
8 | – | #include <sys/types.h> |
9 | – | #include <sys/stat.h> |
13 | ||
14 | + | |
15 | #include "ReadWrite.hpp" | |
16 | #include "simError.h" | |
17 | ||
# | Line 16 | Line 20 | |
20 | #include "mpiSimulation.hpp" | |
21 | #define TAKE_THIS_TAG_CHAR 0 | |
22 | #define TAKE_THIS_TAG_INT 1 | |
23 | + | #endif // is_mpi |
24 | ||
25 | namespace dumpRead{ | |
26 | + | |
27 | + | #ifdef IS_MPI |
28 | void nodeZeroError( void ); | |
29 | void anonymousNodeDie( void ); | |
30 | + | #endif // is_mpi |
31 | + | |
32 | } | |
33 | ||
34 | using namespace dumpRead; | |
35 | ||
27 | – | #endif // is_mpi |
36 | ||
37 | < | DumpReader :: DumpReader( char *in_name ){ |
37 | > | DumpReader :: DumpReader(const char *in_name ){ |
38 | > | |
39 | > | isScanned = false; |
40 | > | headFP = new FilePos; |
41 | > | |
42 | #ifdef IS_MPI | |
43 | if (worldRank == 0) { | |
44 | #endif | |
45 | ||
46 | < | c_in_file = fopen(in_name, "r"); |
47 | < | if(c_in_file == NULL){ |
46 | > | inFile = fopen(in_name, "r"); |
47 | > | if(inFile == NULL){ |
48 | sprintf(painCave.errMsg, | |
49 | "Cannot open file: %s\n", in_name); | |
50 | painCave.isFatal = 1; | |
51 | simError(); | |
52 | } | |
53 | ||
54 | < | strcpy( c_in_name, in_name); |
54 | > | strcpy( inName, in_name); |
55 | #ifdef IS_MPI | |
56 | } | |
57 | strcpy( checkPointMsg, "Dump file opened for reading successfully." ); | |
# | Line 53 | Line 65 | DumpReader :: ~DumpReader( ){ | |
65 | if (worldRank == 0) { | |
66 | #endif | |
67 | int error; | |
68 | < | error = fclose( c_in_file ); |
68 | > | error = fclose( inFile ); |
69 | if( error ){ | |
70 | sprintf( painCave.errMsg, | |
71 | < | "Error closing %s\n", c_in_name ); |
71 | > | "Error closing %s\n", inName ); |
72 | simError(); | |
73 | } | |
74 | #ifdef IS_MPI | |
# | Line 68 | Line 80 | DumpReader :: ~DumpReader( ){ | |
80 | return; | |
81 | } | |
82 | ||
83 | + | int DumpReader::getNframes( void ){ |
84 | ||
85 | < | void DumpReader :: getFrame( SimInfo* the_simnfo, int whichFrame){ |
85 | > | if( !isScanned ) scanFile(); |
86 | > | return nFrames; |
87 | > | } |
88 | ||
89 | + | void DumpReader::scanFile( void ){ |
90 | + | |
91 | + | int vectorSize; |
92 | + | int i, j, k; |
93 | + | int lineNum = 0; |
94 | + | char readBuffer[2000]; |
95 | + | char* foo; |
96 | + | fpos_t *currPos; |
97 | + | double time; |
98 | + | |
99 | + | FilePos *currFP; |
100 | + | |
101 | + | |
102 | + | #ifdef IS_MPI |
103 | + | if( worldRank == 0 ){ |
104 | + | #endif // is_mpi |
105 | + | |
106 | + | rewind( inFile ); |
107 | + | |
108 | + | currPos = new fpos_t; |
109 | + | fgetpos( inFile, currPos ); |
110 | + | fgets( readBuffer, sizeof( readBuffer ), inFile ); |
111 | + | lineNum++; |
112 | + | if( feof( inFile ) ){ |
113 | + | sprintf( painCave.errMsg, |
114 | + | "File \"%s\" ended unexpectedly at line %d\n", |
115 | + | inName, |
116 | + | lineNum ); |
117 | + | painCave.isFatal = 1; |
118 | + | simError(); |
119 | + | } |
120 | + | |
121 | + | nFrames = 0; |
122 | + | while( !feof( inFile ) ){ |
123 | + | |
124 | + | headFP->add( currPos ); |
125 | + | nFrames++; |
126 | + | |
127 | + | i = atoi(readBuffer); |
128 | + | |
129 | + | fgets( readBuffer, sizeof( readBuffer ), inFile ); |
130 | + | lineNum++; |
131 | + | if( feof( inFile ) ){ |
132 | + | sprintf( painCave.errMsg, |
133 | + | "File \"%s\" ended unexpectedly at line %d\n", |
134 | + | inName, |
135 | + | lineNum ); |
136 | + | painCave.isFatal = 1; |
137 | + | simError(); |
138 | + | } |
139 | + | |
140 | + | // if(outTime){ |
141 | + | // foo = strtok( readBuffer, " ,;\t" ); |
142 | + | // time = atof( foo ); |
143 | + | // } |
144 | + | |
145 | + | for(j=0; j<i; j++){ |
146 | + | |
147 | + | fgets( readBuffer, sizeof( readBuffer ), inFile ); |
148 | + | lineNum++; |
149 | + | if( feof( inFile ) ){ |
150 | + | sprintf( painCave.errMsg, |
151 | + | "File \"%s\" ended unexpectedly at line %d," |
152 | + | " with atom %d\n", |
153 | + | inName, |
154 | + | lineNum, |
155 | + | j ); |
156 | + | painCave.isFatal = 1; |
157 | + | simError(); |
158 | + | } |
159 | + | |
160 | + | } |
161 | + | |
162 | + | currPos = new fpos_t; |
163 | + | fgetpos( inFile, currPos ); |
164 | + | fgets( readBuffer, sizeof( readBuffer ), inFile ); |
165 | + | lineNum++; |
166 | + | } |
167 | + | |
168 | + | delete currPos; |
169 | + | rewind( inFile ); |
170 | + | |
171 | + | frameStart = new FilePos*[nFrames]; |
172 | + | currFP = headFP; |
173 | + | for(i=0; i<nFrames; i++){ |
174 | + | |
175 | + | currFP = currFP->getNext(); |
176 | + | if( currFP == NULL ){ |
177 | + | sprintf( painCave.errMsg, |
178 | + | "DumpReader error: scanFile FilePos mismatch at " |
179 | + | "nFrames = %d\n", |
180 | + | i ); |
181 | + | painCave.isFatal = 1; |
182 | + | simError(); |
183 | + | } |
184 | + | |
185 | + | frameStart[i] = currFP; |
186 | + | } |
187 | + | |
188 | + | isScanned = true; |
189 | + | |
190 | + | #ifdef IS_MPI |
191 | + | } |
192 | + | strcpy( checkPointMsg, "Successfully scanned DumpFile\n" ); |
193 | + | MPIcheckPoint(); |
194 | + | #endif // is_mpi |
195 | + | } |
196 | + | |
197 | + | void DumpReader :: readFrame( SimInfo* the_simnfo, int whichFrame){ |
198 | + | |
199 | + | simnfo = the_simnfo; |
200 | + | |
201 | + | this->readSet( whichFrame ); |
202 | + | } |
203 | + | |
204 | + | |
205 | + | |
206 | + | void DumpReader :: readSet( int whichFrame ){ |
207 | + | |
208 | int i, j, done, which_node, which_atom; // loop counter | |
209 | ||
210 | const int BUFFERSIZE = 2000; // size of the read buffer | |
# | Line 85 | Line 219 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
219 | int procIndex; | |
220 | double boxMat[9]; | |
221 | double theBoxMat3[3][3]; | |
222 | + | double time; |
223 | ||
224 | < | simnfo = the_simnfo; |
225 | < | |
224 | > | fpos_t *framePos; |
225 | > | framePos = frameStart[whichFrame]->getPos(); |
226 | > | |
227 | #ifndef IS_MPI | |
228 | < | eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
228 | > | |
229 | > | fsetpos(inFile, framePos); |
230 | > | |
231 | > | |
232 | > | eof_test = fgets(read_buffer, sizeof(read_buffer), inFile); |
233 | if( eof_test == NULL ){ | |
234 | sprintf( painCave.errMsg, | |
235 | "DumpReader error: error reading 1st line of \"%s\"\n", | |
236 | < | c_in_name ); |
236 | > | inName ); |
237 | painCave.isFatal = 1; | |
238 | simError(); | |
239 | } | |
# | Line 107 | Line 247 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
247 | sprintf( painCave.errMsg, | |
248 | "DumpReader error. %s n_atoms, %d, " | |
249 | "does not match the BASS file's n_atoms, %d.\n", | |
250 | < | c_in_name, n_atoms, simnfo->n_atoms ); |
250 | > | inName, n_atoms, simnfo->n_atoms ); |
251 | painCave.isFatal = 1; | |
252 | simError(); | |
253 | } | |
254 | ||
255 | //read the box mat from the comment line | |
256 | ||
257 | < | eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
257 | > | eof_test = fgets(read_buffer, sizeof(read_buffer), inFile); |
258 | if(eof_test == NULL){ | |
259 | sprintf( painCave.errMsg, | |
260 | < | "error in reading commment in %s\n", c_in_name); |
260 | > | "error in reading commment in %s\n", inName); |
261 | painCave.isFatal = 1; | |
262 | simError(); | |
263 | } | |
# | Line 140 | Line 280 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
280 | ||
281 | for( i=0; i < n_atoms; i++){ | |
282 | ||
283 | < | eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
283 | > | eof_test = fgets(read_buffer, sizeof(read_buffer), inFile); |
284 | if(eof_test == NULL){ | |
285 | sprintf(painCave.errMsg, | |
286 | "error in reading file %s\n" | |
287 | "natoms = %d; index = %d\n" | |
288 | "error reading the line from the file.\n", | |
289 | < | c_in_name, n_atoms, i ); |
289 | > | inName, n_atoms, i ); |
290 | painCave.isFatal = 1; | |
291 | simError(); | |
292 | } | |
# | Line 176 | Line 316 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
316 | ||
317 | haveError = 0; | |
318 | if (worldRank == 0) { | |
319 | < | |
320 | < | eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
319 | > | fsetpos(inFile, framePos); |
320 | > | eof_test = fgets(read_buffer, sizeof(read_buffer), inFile); |
321 | if( eof_test == NULL ){ | |
322 | sprintf( painCave.errMsg, | |
323 | < | "Error reading 1st line of %d \n ",c_in_name); |
323 | > | "Error reading 1st line of %d \n ",inName); |
324 | haveError = 1; | |
325 | simError(); | |
326 | } | |
# | Line 197 | Line 337 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
337 | sprintf( painCave.errMsg, | |
338 | "Initialize from File error. %s n_atoms, %d, " | |
339 | "does not match the BASS file's n_atoms, %d.\n", | |
340 | < | c_in_name, n_atoms, simnfo->n_atoms ); |
340 | > | inName, n_atoms, simnfo->n_atoms ); |
341 | haveError= 1; | |
342 | simError(); | |
343 | } | |
344 | ||
345 | //read the time and boxMat from the comment line | |
346 | ||
347 | < | eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
347 | > | eof_test = fgets(read_buffer, sizeof(read_buffer), inFile); |
348 | if(eof_test == NULL){ | |
349 | sprintf( painCave.errMsg, | |
350 | < | "error in reading commment in %s\n", c_in_name); |
350 | > | "error in reading commment in %s\n", inName); |
351 | haveError = 1; | |
352 | simError(); | |
353 | } | |
# | Line 219 | Line 359 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
359 | simError(); | |
360 | } | |
361 | ||
362 | < | MPI_Bcast(time, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD ); |
362 | > | MPI_Bcast(&time, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD ); |
363 | ||
364 | MPI_Bcast(boxMat, 9, MPI_DOUBLE, 0, MPI_COMM_WORLD ); | |
365 | ||
# | Line 227 | Line 367 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
367 | ||
368 | for (i=0 ; i < mpiSim->getTotAtoms(); i++) { | |
369 | ||
370 | < | eof_test = fgets(read_buffer, sizeof(read_buffer), c_in_file); |
370 | > | eof_test = fgets(read_buffer, sizeof(read_buffer), inFile); |
371 | if(eof_test == NULL){ | |
372 | sprintf(painCave.errMsg, | |
373 | "error in reading file %s\n" | |
374 | "natoms = %d; index = %d\n" | |
375 | "error reading the line from the file.\n", | |
376 | < | c_in_name, n_atoms, i ); |
376 | > | inName, n_atoms, i ); |
377 | haveError= 1; | |
378 | simError(); | |
379 | } | |
# | Line 275 | Line 415 | void DumpReader :: getFrame( SimInfo* the_simnfo, int | |
415 | ||
416 | } else { | |
417 | ||
418 | < | MPI_Bcast(time, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); |
418 | > | MPI_Bcast(&time, 1, MPI_DOUBLE, 0, MPI_COMM_WORLD); |
419 | MPI_Bcast(boxMat, 9, MPI_DOUBLE, 0, MPI_COMM_WORLD); | |
420 | ||
421 | done = 0; | |
# | Line 325 | Line 465 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
465 | ||
466 | char *foo; // the pointer to the current string token | |
467 | ||
468 | < | double rx, ry, rz; // position place holders |
469 | < | double vx, vy, vz; // velocity placeholders |
470 | < | double q[4]; // the quaternions |
471 | < | double jx, jy, jz; // angular velocity placeholders; |
468 | > | double pos[3]; // position place holders |
469 | > | double vel[3]; // velocity placeholders |
470 | > | double q[4]; // the quaternions |
471 | > | double ji[3]; // angular velocity placeholders; |
472 | double qSqr, qLength; // needed to normalize the quaternion vector. | |
473 | ||
474 | Atom **atoms = simnfo->atoms; | |
# | Line 346 | Line 486 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
486 | sprintf( painCave.errMsg, | |
487 | "Initialize from file error. Atom at index %d " | |
488 | "in file %s does not exist on processor %d .\n", | |
489 | < | globalIndex, c_in_name, mpiSim->getMyNode() ); |
489 | > | globalIndex, inName, mpiSim->getMyNode() ); |
490 | return strdup( painCave.errMsg ); | |
491 | } | |
492 | #else | |
# | Line 357 | Line 497 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
497 | // set the string tokenizer | |
498 | ||
499 | foo = strtok(readLine, " ,;\t"); | |
500 | < | |
500 | > | atoms[atomIndex]->setType(foo); |
501 | // check the atom name to the current atom | |
502 | ||
503 | < | if( strcmp( foo, atoms[atomIndex]->getType() ) ){ |
504 | < | sprintf( painCave.errMsg, |
505 | < | "Initialize from file error. Atom %s at index %d " |
506 | < | "in file %s does not" |
507 | < | " match the BASS atom %s.\n", |
508 | < | foo, atomIndex, c_in_name, atoms[atomIndex]->getType() ); |
509 | < | return strdup( painCave.errMsg ); |
510 | < | } |
503 | > | //if( strcmp( foo, atoms[atomIndex]->getType() ) ){ |
504 | > | // sprintf( painCave.errMsg, |
505 | > | // "Initialize from file error. Atom %s at index %d " |
506 | > | // "in file %s does not" |
507 | > | // " match the BASS atom %s.\n", |
508 | > | // foo, atomIndex, inName, atoms[atomIndex]->getType() ); |
509 | > | // return strdup( painCave.errMsg ); |
510 | > | //} |
511 | ||
512 | // get the positions | |
513 | ||
# | Line 376 | Line 516 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
516 | sprintf( painCave.errMsg, | |
517 | "error in reading postition x from %s\n" | |
518 | "natoms = %d, index = %d\n", | |
519 | < | c_in_name, n_atoms, atomIndex ); |
519 | > | inName, n_atoms, atomIndex ); |
520 | return strdup( painCave.errMsg ); | |
521 | } | |
522 | < | rx = atof( foo ); |
522 | > | pos[0] = atof( foo ); |
523 | ||
524 | foo = strtok(NULL, " ,;\t"); | |
525 | if(foo == NULL){ | |
526 | sprintf( painCave.errMsg, | |
527 | "error in reading postition y from %s\n" | |
528 | "natoms = %d, index = %d\n", | |
529 | < | c_in_name, n_atoms, atomIndex ); |
529 | > | inName, n_atoms, atomIndex ); |
530 | return strdup( painCave.errMsg ); | |
531 | } | |
532 | < | ry = atof( foo ); |
532 | > | pos[1] = atof( foo ); |
533 | ||
534 | foo = strtok(NULL, " ,;\t"); | |
535 | if(foo == NULL){ | |
536 | sprintf( painCave.errMsg, | |
537 | "error in reading postition z from %s\n" | |
538 | "natoms = %d, index = %d\n", | |
539 | < | c_in_name, n_atoms, atomIndex ); |
539 | > | inName, n_atoms, atomIndex ); |
540 | return strdup( painCave.errMsg ); | |
541 | } | |
542 | < | rz = atof( foo ); |
542 | > | pos[2] = atof( foo ); |
543 | ||
544 | ||
545 | // get the velocities | |
# | Line 409 | Line 549 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
549 | sprintf( painCave.errMsg, | |
550 | "error in reading velocity x from %s\n" | |
551 | "natoms = %d, index = %d\n", | |
552 | < | c_in_name, n_atoms, atomIndex ); |
552 | > | inName, n_atoms, atomIndex ); |
553 | return strdup( painCave.errMsg ); | |
554 | } | |
555 | < | vx = atof( foo ); |
555 | > | vel[0] = atof( foo ); |
556 | ||
557 | foo = strtok(NULL, " ,;\t"); | |
558 | if(foo == NULL){ | |
559 | sprintf( painCave.errMsg, | |
560 | "error in reading velocity y from %s\n" | |
561 | "natoms = %d, index = %d\n", | |
562 | < | c_in_name, n_atoms, atomIndex ); |
562 | > | inName, n_atoms, atomIndex ); |
563 | return strdup( painCave.errMsg ); | |
564 | } | |
565 | < | vy = atof( foo ); |
565 | > | vel[1] = atof( foo ); |
566 | ||
567 | foo = strtok(NULL, " ,;\t"); | |
568 | if(foo == NULL){ | |
569 | sprintf( painCave.errMsg, | |
570 | "error in reading velocity z from %s\n" | |
571 | "natoms = %d, index = %d\n", | |
572 | < | c_in_name, n_atoms, atomIndex ); |
572 | > | inName, n_atoms, atomIndex ); |
573 | return strdup( painCave.errMsg ); | |
574 | } | |
575 | < | vz = atof( foo ); |
575 | > | vel[2] = atof( foo ); |
576 | ||
577 | ||
578 | // get the quaternions | |
# | Line 444 | Line 584 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
584 | sprintf(painCave.errMsg, | |
585 | "error in reading quaternion 0 from %s\n" | |
586 | "natoms = %d, index = %d\n", | |
587 | < | c_in_name, n_atoms, atomIndex ); |
587 | > | inName, n_atoms, atomIndex ); |
588 | return strdup( painCave.errMsg ); | |
589 | } | |
590 | q[0] = atof( foo ); | |
# | Line 454 | Line 594 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
594 | sprintf( painCave.errMsg, | |
595 | "error in reading quaternion 1 from %s\n" | |
596 | "natoms = %d, index = %d\n", | |
597 | < | c_in_name, n_atoms, atomIndex ); |
597 | > | inName, n_atoms, atomIndex ); |
598 | return strdup( painCave.errMsg ); | |
599 | } | |
600 | q[1] = atof( foo ); | |
# | Line 464 | Line 604 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
604 | sprintf( painCave.errMsg, | |
605 | "error in reading quaternion 2 from %s\n" | |
606 | "natoms = %d, index = %d\n", | |
607 | < | c_in_name, n_atoms, atomIndex ); |
607 | > | inName, n_atoms, atomIndex ); |
608 | return strdup( painCave.errMsg ); | |
609 | } | |
610 | q[2] = atof( foo ); | |
# | Line 474 | Line 614 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
614 | sprintf( painCave.errMsg, | |
615 | "error in reading quaternion 3 from %s\n" | |
616 | "natoms = %d, index = %d\n", | |
617 | < | c_in_name, n_atoms, atomIndex ); |
617 | > | inName, n_atoms, atomIndex ); |
618 | return strdup( painCave.errMsg ); | |
619 | } | |
620 | q[3] = atof( foo ); | |
# | Line 486 | Line 626 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
626 | sprintf( painCave.errMsg, | |
627 | "error in reading angular momentum jx from %s\n" | |
628 | "natoms = %d, index = %d\n", | |
629 | < | c_in_name, n_atoms, atomIndex ); |
629 | > | inName, n_atoms, atomIndex ); |
630 | return strdup( painCave.errMsg ); | |
631 | } | |
632 | < | jx = atof( foo ); |
632 | > | ji[0] = atof( foo ); |
633 | ||
634 | foo = strtok(NULL, " ,;\t"); | |
635 | if(foo == NULL){ | |
636 | sprintf( painCave.errMsg, | |
637 | "error in reading angular momentum jy from %s\n" | |
638 | "natoms = %d, index = %d\n", | |
639 | < | c_in_name, n_atoms, atomIndex ); |
639 | > | inName, n_atoms, atomIndex ); |
640 | return strdup( painCave.errMsg ); | |
641 | } | |
642 | < | jy = atof(foo ); |
642 | > | ji[1] = atof(foo ); |
643 | ||
644 | foo = strtok(NULL, " ,;\t"); | |
645 | if(foo == NULL){ | |
646 | sprintf( painCave.errMsg, | |
647 | "error in reading angular momentum jz from %s\n" | |
648 | "natoms = %d, index = %d\n", | |
649 | < | c_in_name, n_atoms, atomIndex ); |
649 | > | inName, n_atoms, atomIndex ); |
650 | return strdup( painCave.errMsg ); | |
651 | } | |
652 | < | jz = atof( foo ); |
652 | > | ji[2] = atof( foo ); |
653 | ||
654 | dAtom = ( DirectionalAtom* )atoms[atomIndex]; | |
655 | ||
# | Line 527 | Line 667 | char* DumpReader::parseDumpLine(char* readLine, int gl | |
667 | ||
668 | // add the angular velocities | |
669 | ||
670 | < | dAtom->setJx( jx ); |
531 | < | dAtom->setJy( jy ); |
532 | < | dAtom->setJz( jz ); |
670 | > | dAtom->setJ( ji ); |
671 | } | |
672 | ||
673 | // add the positions and velocities to the atom | |
536 | – | |
537 | – | atoms[atomIndex]->setX( rx ); |
538 | – | atoms[atomIndex]->setY( ry ); |
539 | – | atoms[atomIndex]->setZ( rz ); |
540 | – | |
541 | – | atoms[atomIndex]->set_vx( vx ); |
542 | – | atoms[atomIndex]->set_vy( vy ); |
543 | – | atoms[atomIndex]->set_vz( vz ); |
674 | ||
675 | + | atoms[atomIndex]->setPos( pos ); |
676 | + | atoms[atomIndex]->setVel( vel ); |
677 | + | |
678 | return NULL; | |
679 | } | |
680 | ||
681 | ||
682 | < | char* DumpReader::parseCommentLine(char* readLine, double time, |
682 | > | char* DumpReader::parseCommentLine(char* readLine, double &time, |
683 | double boxMat[9]){ | |
684 | ||
685 | char *foo; // the pointer to the current string token | |
686 | int j; | |
687 | + | double chi, integralOfChidt; |
688 | + | double eta[9]; |
689 | ||
690 | // set the string tokenizer | |
691 | ||
# | Line 558 | Line 693 | char* DumpReader::parseCommentLine(char* readLine, dou | |
693 | if(foo == NULL){ | |
694 | sprintf( painCave.errMsg, | |
695 | "error in reading time from %s\n", | |
696 | < | c_in_name ); |
696 | > | inName ); |
697 | return strdup( painCave.errMsg ); | |
698 | } | |
699 | time = atof( foo ); | |
# | Line 569 | Line 704 | char* DumpReader::parseCommentLine(char* readLine, dou | |
704 | if(foo == NULL){ | |
705 | sprintf( painCave.errMsg, | |
706 | "error in reading Hx[0] from %s\n", | |
707 | < | c_in_name ); |
707 | > | inName ); |
708 | return strdup( painCave.errMsg ); | |
709 | } | |
710 | boxMat[0] = atof( foo ); | |
# | Line 578 | Line 713 | char* DumpReader::parseCommentLine(char* readLine, dou | |
713 | if(foo == NULL){ | |
714 | sprintf( painCave.errMsg, | |
715 | "error in reading Hx[1] from %s\n", | |
716 | < | c_in_name ); |
716 | > | inName ); |
717 | return strdup( painCave.errMsg ); | |
718 | } | |
719 | boxMat[1] = atof( foo ); | |
# | Line 587 | Line 722 | char* DumpReader::parseCommentLine(char* readLine, dou | |
722 | if(foo == NULL){ | |
723 | sprintf( painCave.errMsg, | |
724 | "error in reading Hx[2] from %s\n", | |
725 | < | c_in_name ); |
725 | > | inName ); |
726 | return strdup( painCave.errMsg ); | |
727 | } | |
728 | boxMat[2] = atof( foo ); | |
# | Line 598 | Line 733 | char* DumpReader::parseCommentLine(char* readLine, dou | |
733 | if(foo == NULL){ | |
734 | sprintf( painCave.errMsg, | |
735 | "error in reading Hy[0] from %s\n", | |
736 | < | c_in_name ); |
736 | > | inName ); |
737 | return strdup( painCave.errMsg ); | |
738 | } | |
739 | boxMat[3] = atof( foo ); | |
# | Line 607 | Line 742 | char* DumpReader::parseCommentLine(char* readLine, dou | |
742 | if(foo == NULL){ | |
743 | sprintf( painCave.errMsg, | |
744 | "error in reading Hy[1] from %s\n", | |
745 | < | c_in_name ); |
745 | > | inName ); |
746 | return strdup( painCave.errMsg ); | |
747 | } | |
748 | boxMat[4] = atof( foo ); | |
# | Line 616 | Line 751 | char* DumpReader::parseCommentLine(char* readLine, dou | |
751 | if(foo == NULL){ | |
752 | sprintf( painCave.errMsg, | |
753 | "error in reading Hy[2] from %s\n", | |
754 | < | c_in_name ); |
754 | > | inName ); |
755 | return strdup( painCave.errMsg ); | |
756 | } | |
757 | boxMat[5] = atof( foo ); | |
# | Line 627 | Line 762 | char* DumpReader::parseCommentLine(char* readLine, dou | |
762 | if(foo == NULL){ | |
763 | sprintf( painCave.errMsg, | |
764 | "error in reading Hz[0] from %s\n", | |
765 | < | c_in_name ); |
765 | > | inName ); |
766 | return strdup( painCave.errMsg ); | |
767 | } | |
768 | boxMat[6] = atof( foo ); | |
# | Line 636 | Line 771 | char* DumpReader::parseCommentLine(char* readLine, dou | |
771 | if(foo == NULL){ | |
772 | sprintf( painCave.errMsg, | |
773 | "error in reading Hz[1] from %s\n", | |
774 | < | c_in_name ); |
774 | > | inName ); |
775 | return strdup( painCave.errMsg ); | |
776 | } | |
777 | boxMat[7] = atof( foo ); | |
# | Line 645 | Line 780 | char* DumpReader::parseCommentLine(char* readLine, dou | |
780 | if(foo == NULL){ | |
781 | sprintf( painCave.errMsg, | |
782 | "error in reading Hz[2] from %s\n", | |
783 | < | c_in_name ); |
783 | > | inName ); |
784 | return strdup( painCave.errMsg ); | |
785 | } | |
786 | boxMat[8] = atof( foo ); | |
787 | ||
788 | return NULL; | |
789 | + | |
790 | + | //get chi and integralOfChidt, they should appear by pair |
791 | + | foo = strtok(NULL, " ,;\t\n"); |
792 | + | if(foo != NULL){ |
793 | + | chi = atof(foo); |
794 | + | |
795 | + | foo = strtok(NULL, " ,;\t\n"); |
796 | + | if(foo == NULL){ |
797 | + | sprintf( painCave.errMsg, |
798 | + | "chi and integralOfChidt should appear by pair in %s\n", inName ); |
799 | + | return strdup( painCave.errMsg ); |
800 | + | } |
801 | + | integralOfChidt = atof( foo ); |
802 | + | |
803 | + | //push chi and integralOfChidt into SimInfo::properties which can be |
804 | + | //retrieved by integrator later |
805 | + | DoubleData* chiValue = new DoubleData(); |
806 | + | chiValue->setID(CHIVALUE_ID); |
807 | + | chiValue->setData(chi); |
808 | + | simnfo->addProperty(chiValue); |
809 | + | |
810 | + | DoubleData* integralOfChidtValue = new DoubleData(); |
811 | + | integralOfChidtValue->setID(INTEGRALOFCHIDT_ID); |
812 | + | integralOfChidtValue->setData(integralOfChidt); |
813 | + | simnfo->addProperty(integralOfChidtValue); |
814 | + | |
815 | + | } |
816 | + | else |
817 | + | return NULL; |
818 | + | |
819 | + | //get eta |
820 | + | for(int i = 0 ; i < 9; i++){ |
821 | + | foo = strtok(NULL, " ,;\t"); |
822 | + | if(foo == NULL){ |
823 | + | sprintf( painCave.errMsg, |
824 | + | "error in reading eta[%d] from %s\n", i, inName ); |
825 | + | return strdup( painCave.errMsg ); |
826 | + | } |
827 | + | eta[i] = atof( foo ); |
828 | + | } |
829 | + | |
830 | + | //push eta into SimInfo::properties which can be |
831 | + | //retrieved by integrator later |
832 | + | //simnfo->setBoxM( theBoxMat3 ); |
833 | + | DoubleArrayData* etaValue = new DoubleArrayData(); |
834 | + | etaValue->setID(ETAVALUE_ID); |
835 | + | etaValue->setData(eta, 9); |
836 | + | simnfo->addProperty(etaValue); |
837 | + | |
838 | + | |
839 | + | return NULL; |
840 | + | |
841 | + | |
842 | + | |
843 | } | |
844 | ||
845 | ||
# | Line 658 | Line 847 | char* DumpReader::parseCommentLine(char* readLine, dou | |
847 | ||
848 | // a couple of functions to let us escape the read loop | |
849 | ||
850 | < | void initFile::nodeZeroError( void ){ |
850 | > | void dumpRead::nodeZeroError( void ){ |
851 | int j, myStatus; | |
852 | ||
853 | myStatus = 0; | |
# | Line 673 | Line 862 | void initFile::nodeZeroError( void ){ | |
862 | ||
863 | } | |
864 | ||
865 | < | void initFile::anonymousNodeDie( void ){ |
865 | > | void dumpRead::anonymousNodeDie( void ){ |
866 | ||
867 | MPI_Finalize(); | |
868 | exit (0); |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |