--- trunk/OOPSE/libmdtools/DumpWriter.cpp 2003/04/03 21:12:51 450 +++ trunk/OOPSE/libmdtools/DumpWriter.cpp 2003/10/16 19:16:24 804 @@ -1,3 +1,5 @@ +#define _FILE_OFFSET_BITS 64 + #include #include #include @@ -27,8 +29,6 @@ DumpWriter::DumpWriter( SimInfo* the_entry_plug ){ if(worldRank == 0 ){ #endif // is_mpi - - strcpy( outName, entry_plug->sampleName ); outFile.open(outName, ios::out | ios::trunc ); @@ -41,7 +41,7 @@ DumpWriter::DumpWriter( SimInfo* the_entry_plug ){ painCave.isFatal = 1; simError(); } - + //outFile.setf( ios::scientific ); #ifdef IS_MPI @@ -72,34 +72,54 @@ void DumpWriter::writeDump( double currentTime ){ char tempBuffer[BUFFERSIZE]; char writeLine[BUFFERSIZE]; - int i, j, which_node, done, which_atom, local_index; + int i; +#ifdef IS_MPI + int j, which_node, done, which_atom, local_index; +#else //is_mpi + int nAtoms = entry_plug->n_atoms; +#endif //is_mpi + double q[4]; DirectionalAtom* dAtom; - int nAtoms = entry_plug->n_atoms; Atom** atoms = entry_plug->atoms; + double pos[3], vel[3]; + + // write current frame to the eor file + this->writeFinal( currentTime ); + #ifndef IS_MPI outFile << nAtoms << "\n"; - outFile << currentTime << "\t" - << entry_plug->box_x << "\t" - << entry_plug->box_y << "\t" - << entry_plug->box_z << "\n"; + outFile << currentTime << ";\t" + << entry_plug->Hmat[0][0] << "\t" + << entry_plug->Hmat[1][0] << "\t" + << entry_plug->Hmat[2][0] << ";\t" + + << entry_plug->Hmat[0][1] << "\t" + << entry_plug->Hmat[1][1] << "\t" + << entry_plug->Hmat[2][1] << ";\t" + + << entry_plug->Hmat[0][2] << "\t" + << entry_plug->Hmat[1][2] << "\t" + << entry_plug->Hmat[2][2] << ";\n"; for( i=0; igetPos(pos); + atoms[i]->getVel(vel); sprintf( tempBuffer, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atoms[i]->getType(), - atoms[i]->getX(), - atoms[i]->getY(), - atoms[i]->getZ(), - atoms[i]->get_vx(), - atoms[i]->get_vy(), - atoms[i]->get_vz()); + pos[0], + pos[1], + pos[2], + vel[0], + vel[1], + vel[2]); strcpy( writeLine, tempBuffer ); if( atoms[i]->isDirectional() ){ @@ -140,11 +160,20 @@ void DumpWriter::writeDump( double currentTime ){ if( worldRank == 0 ){ outFile << mpiSim->getTotAtoms() << "\n"; + + outFile << currentTime << ";\t" + << entry_plug->Hmat[0][0] << "\t" + << entry_plug->Hmat[1][0] << "\t" + << entry_plug->Hmat[2][0] << ";\t" + + << entry_plug->Hmat[0][1] << "\t" + << entry_plug->Hmat[1][1] << "\t" + << entry_plug->Hmat[2][1] << ";\t" + + << entry_plug->Hmat[0][2] << "\t" + << entry_plug->Hmat[1][2] << "\t" + << entry_plug->Hmat[2][2] << ";\n"; - outFile << currentTime << "\t" - << entry_plug->box_x << "\t" - << entry_plug->box_y << "\t" - << entry_plug->box_z << "\n"; outFile.flush(); for (i = 0 ; i < mpiSim->getTotAtoms(); i++ ) { // Get the Node number which has this atom; @@ -161,15 +190,19 @@ void DumpWriter::writeDump( double currentTime ){ } if (local_index != -1) { //format the line + + atoms[local_index]->getPos(pos); + atoms[local_index]->getVel(vel); + sprintf( tempBuffer, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atoms[local_index]->getType(), - atoms[local_index]->getX(), - atoms[local_index]->getY(), - atoms[local_index]->getZ(), - atoms[local_index]->get_vx(), - atoms[local_index]->get_vy(), - atoms[local_index]->get_vz()); // check here. + pos[0], + pos[1], + pos[2], + vel[0], + vel[1], + vel[2]); // check here. strcpy( writeLine, tempBuffer ); if( atoms[local_index]->isDirectional() ){ @@ -251,15 +284,19 @@ void DumpWriter::writeDump( double currentTime ){ } if (local_index != -1) { //format the line + + atoms[local_index]->getPos(pos); + atoms[local_index]->getVel(vel); + sprintf( tempBuffer, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atoms[local_index]->getType(), - atoms[local_index]->getX(), - atoms[local_index]->getY(), - atoms[local_index]->getZ(), - atoms[local_index]->get_vx(), - atoms[local_index]->get_vy(), - atoms[local_index]->get_vz()); // check here. + pos[0], + pos[1], + pos[2], + vel[0], + vel[1], + vel[2]); // check here. strcpy( writeLine, tempBuffer ); if( atoms[local_index]->isDirectional() ){ @@ -309,7 +346,7 @@ void DumpWriter::writeDump( double currentTime ){ #endif // is_mpi } -void DumpWriter::writeFinal(){ +void DumpWriter::writeFinal(double finalTime){ char finalName[500]; ofstream finalOut; @@ -320,10 +357,15 @@ void DumpWriter::writeFinal(){ double q[4]; DirectionalAtom* dAtom; - int nAtoms = entry_plug->n_atoms; Atom** atoms = entry_plug->atoms; - int i, j, which_node, done, game_over, which_atom, local_index; + int i; +#ifdef IS_MPI + int j, which_node, done, which_atom, local_index; +#else //is_mpi + int nAtoms = entry_plug->n_atoms; +#endif //is_mpi + double pos[3], vel[3]; #ifdef IS_MPI if(worldRank == 0 ){ @@ -355,21 +397,33 @@ void DumpWriter::writeFinal(){ finalOut << nAtoms << "\n"; - finalOut << entry_plug->box_x << "\t" - << entry_plug->box_y << "\t" - << entry_plug->box_z << "\n"; + finalOut << finalTime << ";\t" + << entry_plug->Hmat[0][0] << "\t" + << entry_plug->Hmat[1][0] << "\t" + << entry_plug->Hmat[2][0] << ";\t" + + << entry_plug->Hmat[0][1] << "\t" + << entry_plug->Hmat[1][1] << "\t" + << entry_plug->Hmat[2][1] << ";\t" + + << entry_plug->Hmat[0][2] << "\t" + << entry_plug->Hmat[1][2] << "\t" + << entry_plug->Hmat[2][2] << ";\n"; for( i=0; igetPos(pos); + atoms[i]->getVel(vel); + sprintf( tempBuffer, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atoms[i]->getType(), - atoms[i]->getX(), - atoms[i]->getY(), - atoms[i]->getZ(), - atoms[i]->get_vx(), - atoms[i]->get_vy(), - atoms[i]->get_vz()); + pos[0], + pos[1], + pos[2], + vel[0], + vel[1], + vel[2]); strcpy( writeLine, tempBuffer ); if( atoms[i]->isDirectional() ){ @@ -413,9 +467,18 @@ void DumpWriter::writeFinal(){ if( worldRank == 0 ){ finalOut << mpiSim->getTotAtoms() << "\n"; - finalOut << entry_plug->box_x << "\t" - << entry_plug->box_y << "\t" - << entry_plug->box_z << "\n"; + finalOut << finalTime << ";\t" + << entry_plug->Hmat[0][0] << "\t" + << entry_plug->Hmat[1][0] << "\t" + << entry_plug->Hmat[2][0] << ";\t" + + << entry_plug->Hmat[0][1] << "\t" + << entry_plug->Hmat[1][1] << "\t" + << entry_plug->Hmat[2][1] << ";\t" + + << entry_plug->Hmat[0][2] << "\t" + << entry_plug->Hmat[1][2] << "\t" + << entry_plug->Hmat[2][2] << ";\n"; for (i = 0 ; i < mpiSim->getTotAtoms(); i++ ) { // Get the Node number which has this molecule: @@ -429,16 +492,20 @@ void DumpWriter::writeFinal(){ for (j=0; (jgetMyNlocal()) && (local_index < 0); j++) { if (atoms[j]->getGlobalIndex() == which_atom) local_index = j; } - if (local_index != -1) { + if (local_index != -1) { + + atoms[local_index]->getPos(pos); + atoms[local_index]->getVel(vel); + sprintf( tempBuffer, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atoms[local_index]->getType(), - atoms[local_index]->getX(), - atoms[local_index]->getY(), - atoms[local_index]->getZ(), - atoms[local_index]->get_vx(), - atoms[local_index]->get_vy(), - atoms[local_index]->get_vz()); + pos[0], + pos[1], + pos[2], + vel[0], + vel[1], + vel[2]); strcpy( writeLine, tempBuffer ); if( atoms[local_index]->isDirectional() ){ @@ -518,16 +585,19 @@ void DumpWriter::writeFinal(){ } if (local_index != -1) { + atoms[local_index]->getPos(pos); + atoms[local_index]->getVel(vel); + //format the line sprintf( tempBuffer, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atoms[local_index]->getType(), - atoms[local_index]->getX(), - atoms[local_index]->getY(), - atoms[local_index]->getZ(), - atoms[local_index]->get_vx(), - atoms[local_index]->get_vy(), - atoms[local_index]->get_vz()); // check here. + pos[0], + pos[1], + pos[2], + vel[0], + vel[1], + vel[2]); // check here. strcpy( writeLine, tempBuffer ); if( atoms[local_index]->isDirectional() ){