--- trunk/OOPSE/libmdtools/ReadWrite.hpp 2003/07/29 16:32:37 656 +++ trunk/OOPSE/libmdtools/ReadWrite.hpp 2004/01/13 20:35:25 936 @@ -4,9 +4,12 @@ #include #include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include "Atom.hpp" @@ -15,9 +18,42 @@ using namespace std; using namespace std; +class FilePos{ +public: + FilePos(){ + myPos = NULL; + next = NULL; + } + FilePos( fpos_t* thePos ) { + myPos = thePos; + next = NULL; + } + ~FilePos(){ + if( next != NULL ) delete next; + if( myPos != NULL ) delete myPos; + } + void add( fpos_t *thePos ){ + if( next != NULL ) + next->add( thePos ); + else + next = new FilePos( thePos ); + } + FilePos &operator=(fpos_t *thePos){ myPos = thePos; return *this; } + + void setPos( fpos_t *thePos ){ myPos = thePos; } + fpos_t *getPos( void ){ return myPos; } + + FilePos* getNext( void ) { return next; } +private: + + fpos_t *myPos; + FilePos* next; + +}; + class DumpWriter{ public: @@ -25,12 +61,25 @@ class DumpWriter{ (public) ~DumpWriter(); void writeDump( double currentTime ); - void writeFinal( double finalTime ); + void writeFinal( double currentTime); + void writeFrame( vector& outFile, double finalTime ); +#ifdef IS_MPI + void update(); +#endif + private: + +#ifdef IS_MPI + void sortByGlobalIndex(); +#endif + SimInfo* entry_plug; - ofstream outFile; - char outName[500]; + ofstream dumpFile; + +#ifdef IS_MPI + vector > indexArray; +#endif }; class StatWriter{ @@ -40,9 +89,9 @@ class StatWriter{ (public) ~StatWriter(); void writeStat( double currentTime ); - + private: - + SimInfo* entry_plug; ofstream outFile; char outName[500]; @@ -57,10 +106,10 @@ class InitializeFromFile{ (public) ~InitializeFromFile(); void readInit( SimInfo* the_entry_plug ); - + private: char* parseDumpLine(char* line, int atomIndex); - char* parseBoxLine(char* line, double boxMat[9], double &time ); + char* parseCommentLine(char* line, SimInfo* entry_plug); FILE *c_in_file; char c_in_name[500]; SimInfo* simnfo; @@ -80,7 +129,7 @@ class DumpReader{ (private) private: - void readSet( int which Frame ); + void readSet( int whichFrame ); char* parseDumpLine(char* line, int atomIndex); char* parseCommentLine(char* line, double &time, double boxMat[9] ); FILE *inFile; @@ -88,6 +137,9 @@ class DumpReader{ (private) bool isScanned; int nFrames; + FilePos** frameStart; + FilePos* headFP; + SimInfo *simnfo; };