void OPMisc::output(magnet::xml::XmlStream &XML) { std::time_t tendTime; time(&tendTime); std::string sTime(std::ctime(&tstartTime)); //A hack to remove the newline character at the end sTime[sTime.size()-1] = ' '; std::string eTime(std::ctime(&tendTime)); //A hack to remove the newline character at the end eTime[eTime.size()-1] = ' '; timespec acc_tendTime; clock_gettime(CLOCK_MONOTONIC, &acc_tendTime); double duration = double(acc_tendTime.tv_sec) - double(acc_tstartTime.tv_sec) + 1e-9 * (double(acc_tendTime.tv_nsec) - double(acc_tstartTime.tv_nsec)); double collpersec = static_cast<double>(Sim->eventCount) / duration; dout << "Ended on " << eTime << "\nTotal Collisions Executed " << Sim->eventCount << "\nAvg Coll/s " << collpersec << "\nSim time per second " << Sim->dSysTime / (Sim->dynamics.units().unitTime() * duration) << std::endl; XML << magnet::xml::tag("Misc") << magnet::xml::tag("Memusage") << magnet::xml::attr("MaxKiloBytes") << magnet::process_mem_usage() << magnet::xml::endtag("Memusage") << magnet::xml::tag("Density") << magnet::xml::attr("val") << Sim->dynamics.getNumberDensity() * Sim->dynamics.units().unitVolume() << magnet::xml::endtag("Density") << magnet::xml::tag("PackingFraction") << magnet::xml::attr("val") << Sim->dynamics.getPackingFraction() << magnet::xml::endtag("PackingFraction") << magnet::xml::tag("SpeciesCount") << magnet::xml::attr("val") << Sim->dynamics.getSpecies().size() << magnet::xml::endtag("SpeciesCount") << magnet::xml::tag("ParticleCount") << magnet::xml::attr("val") << Sim->N << magnet::xml::endtag("ParticleCount") << magnet::xml::tag("SimLength") << magnet::xml::attr("Collisions") << Sim->eventCount << magnet::xml::attr("OneParticleEvents") << singleEvents << magnet::xml::attr("TwoParticleEvents") << dualEvents << magnet::xml::attr("Time") << Sim->dSysTime / Sim->dynamics.units().unitTime() << magnet::xml::endtag("SimLength") << magnet::xml::tag("Timing") << magnet::xml::tag("Start") << magnet::xml::attr("val") << sTime << magnet::xml::endtag("Start") << magnet::xml::tag("End") << magnet::xml::attr("val") << eTime << magnet::xml::endtag("End") << magnet::xml::tag("Duration") << magnet::xml::attr("val") << duration << magnet::xml::endtag("Duration") << magnet::xml::tag("CollPerSec") << magnet::xml::attr("val") << collpersec << magnet::xml::attr("CondorWarning") << std::string("true") << magnet::xml::endtag("CollPerSec") << magnet::xml::endtag("Timing") << magnet::xml::tag("SystemBoxLength") << magnet::xml::attr("val") << 1.0/Sim->dynamics.units().unitLength(); char name[2] = "x"; for (size_t iDim = 0; iDim < NDIM; iDim++) { name[0] = 'x' + iDim; XML << magnet::xml::tag(name) << magnet::xml::attr("val") << Sim->primaryCellSize[iDim]/Sim->dynamics.units().unitLength() << magnet::xml::endtag(name); } XML << magnet::xml::endtag("SystemBoxLength"); Vector sumMV(0, 0, 0); //Determine the discrepancy VECTOR BOOST_FOREACH( const Particle & Part, Sim->particleList) sumMV += Part.getVelocity() * Sim->dynamics.getSpecies(Part).getMass(Part.getID()); XML << magnet::xml::tag("Total_momentum") << sumMV / Sim->dynamics.units().unitMomentum() << magnet::xml::endtag("Total_momentum") << magnet::xml::tag("totMeanFreeTime") << magnet::xml::attr("val") << getMFT() << magnet::xml::endtag("totMeanFreeTime"); XML << magnet::xml::tag("MemoryUsage") << magnet::xml::attr("ResidentSet") << magnet::process_mem_usage() << magnet::xml::endtag("MemoryUsage") << magnet::xml::endtag("Misc"); }
bool CDVDStateSerializer::DVDToXMLState( std::string &xmlstate, const dvd_state_t *state ) { char buffer[256]; TiXmlDocument xmlDoc("navstate"); TiXmlElement eRoot("navstate"); eRoot.SetAttribute("version", 1); { TiXmlElement eRegisters("registers"); for( int i = 0; i < 24; i++ ) { if( state->registers.SPRM[i] ) { TiXmlElement eReg("sprm"); eReg.SetAttribute("index", i); { TiXmlElement eValue("value"); sprintf(buffer, "0x%hx", state->registers.SPRM[i]); eValue.InsertEndChild( TiXmlText(buffer) ); eReg.InsertEndChild(eValue); } eRegisters.InsertEndChild(eReg); } } for( int i = 0; i < 16; i++ ) { if( state->registers.GPRM[i] || state->registers.GPRM_mode[i] || state->registers.GPRM_time[i].tv_sec || state->registers.GPRM_time[i].tv_usec ) { TiXmlElement eReg("gprm"); eReg.SetAttribute("index", i); { TiXmlElement eValue("value"); sprintf(buffer, "0x%hx", state->registers.GPRM[i]); eValue.InsertEndChild( TiXmlText(buffer) ); eReg.InsertEndChild(eValue); } { TiXmlElement eMode("mode"); sprintf(buffer, "0x%c", state->registers.GPRM_mode[i]); eMode.InsertEndChild( TiXmlText(buffer) ); eReg.InsertEndChild(eMode); } { TiXmlElement eTime("time"); { TiXmlElement eValue("tv_sec"); sprintf(buffer, "%ld", state->registers.GPRM_time[i].tv_sec); eValue.InsertEndChild( TiXmlText( buffer ) ); eTime.InsertEndChild( eValue ) ; } { TiXmlElement eValue("tv_usec"); sprintf(buffer, "%ld", (long int)state->registers.GPRM_time[i].tv_usec); eValue.InsertEndChild( TiXmlText( buffer ) ); eTime.InsertEndChild( eValue ) ; } eReg.InsertEndChild(eTime); } eRegisters.InsertEndChild(eReg); } } eRoot.InsertEndChild(eRegisters); } { TiXmlElement element("domain"); sprintf(buffer, "%d", state->domain); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement element("vtsn"); sprintf(buffer, "%d", state->vtsN); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement element("pgcn"); sprintf(buffer, "%d", state->pgcN); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement element("pgn"); sprintf(buffer, "%d", state->pgN); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement element("celln"); sprintf(buffer, "%d", state->cellN); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement element("cell_restart"); sprintf(buffer, "%d", state->cell_restart); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement element("blockn"); sprintf(buffer, "%d", state->blockN); element.InsertEndChild( TiXmlText( buffer ) ); eRoot.InsertEndChild(element); } { TiXmlElement rsm("rsm"); { TiXmlElement element("vtsn"); sprintf(buffer, "%d", state->rsm_vtsN); element.InsertEndChild( TiXmlText( buffer ) ); rsm.InsertEndChild(element); } { TiXmlElement element("blockn"); sprintf(buffer, "%d", state->rsm_blockN); element.InsertEndChild( TiXmlText( buffer ) ); rsm.InsertEndChild(element); } { TiXmlElement element("pgcn"); sprintf(buffer, "%d", state->rsm_pgcN); element.InsertEndChild( TiXmlText( buffer ) ); rsm.InsertEndChild(element); } { TiXmlElement element("celln"); sprintf(buffer, "%d", state->rsm_cellN); element.InsertEndChild( TiXmlText( buffer ) ); rsm.InsertEndChild(element); } { TiXmlElement regs("registers"); for( int i = 0; i < 5; i++ ) { TiXmlElement reg("sprm"); reg.SetAttribute("index", i); { TiXmlElement element("value"); sprintf(buffer, "0x%hx", state->rsm_regs[i]); element.InsertEndChild( TiXmlText(buffer) ); reg.InsertEndChild(element); } regs.InsertEndChild(reg); } rsm.InsertEndChild(regs); } eRoot.InsertEndChild(rsm); } xmlDoc.InsertEndChild(eRoot); std::stringstream stream; stream << xmlDoc; xmlstate = stream.str(); return true; }
void OPMisc::output(magnet::xml::XmlStream &XML) { std::time_t tendTime; time(&tendTime); std::string sTime(std::ctime(&tstartTime)); //A hack to remove the newline character at the end sTime[sTime.size()-1] = ' '; std::string eTime(std::ctime(&tendTime)); //A hack to remove the newline character at the end eTime[eTime.size()-1] = ' '; dout << "Ended on " << eTime << "\nTotal Collisions Executed " << Sim->eventCount << "\nAvg Events/s " << getEventsPerSecond() << "\nSim time per second " << getSimTimePerSecond() << std::endl; const double V = Sim->getSimVolume(); const Matrix collP = collisionalP / (V * Sim->systemTime); const Matrix P = (_kineticP.mean() + collisionalP / Sim->systemTime) / V; XML << magnet::xml::tag("Misc") << magnet::xml::tag("Density") << magnet::xml::attr("val") << Sim->getNumberDensity() * Sim->units.unitVolume() << magnet::xml::endtag("Density") << magnet::xml::tag("PackingFraction") << magnet::xml::attr("val") << Sim->getPackingFraction() << magnet::xml::endtag("PackingFraction") << magnet::xml::tag("SpeciesCount") << magnet::xml::attr("val") << Sim->species.size() << magnet::xml::endtag("SpeciesCount") << magnet::xml::tag("ParticleCount") << magnet::xml::attr("val") << Sim->N << magnet::xml::endtag("ParticleCount") << magnet::xml::tag("SystemMomentum") << magnet::xml::tag("Current") << magnet::xml::attr("x") << _sysMomentum.current()[0] / Sim->units.unitMomentum() << magnet::xml::attr("y") << _sysMomentum.current()[1] / Sim->units.unitMomentum() << magnet::xml::attr("z") << _sysMomentum.current()[2] / Sim->units.unitMomentum() << magnet::xml::endtag("Current") << magnet::xml::tag("Average") << magnet::xml::attr("x") << _sysMomentum.mean()[0] / Sim->units.unitMomentum() << magnet::xml::attr("y") << _sysMomentum.mean()[1] / Sim->units.unitMomentum() << magnet::xml::attr("z") << _sysMomentum.mean()[2] / Sim->units.unitMomentum() << magnet::xml::endtag("Average") << magnet::xml::endtag("SystemMomentum") << magnet::xml::tag("Temperature") << magnet::xml::attr("Mean") << getMeankT() / Sim->units.unitEnergy() << magnet::xml::attr("MeanSqr") << getMeanSqrkT() / (Sim->units.unitEnergy() * Sim->units.unitEnergy()) << magnet::xml::attr("Current") << getCurrentkT() / Sim->units.unitEnergy() << magnet::xml::attr("Min") << 2.0 * _KE.min() / (Sim->N * Sim->dynamics->getParticleDOF() * Sim->units.unitEnergy()) << magnet::xml::attr("Max") << 2.0 * _KE.max() / (Sim->N * Sim->dynamics->getParticleDOF() * Sim->units.unitEnergy()) << magnet::xml::endtag("Temperature") << magnet::xml::tag("UConfigurational") << magnet::xml::attr("Mean") << getMeanUConfigurational() / Sim->units.unitEnergy() << magnet::xml::attr("MeanSqr") << getMeanSqrUConfigurational() / (Sim->units.unitEnergy() * Sim->units.unitEnergy()) << magnet::xml::attr("Current") << _internalE.current() / Sim->units.unitEnergy() << magnet::xml::attr("Min") << _internalE.min() / Sim->units.unitEnergy() << magnet::xml::attr("Max") << _internalE.max() / Sim->units.unitEnergy() << magnet::xml::endtag("UConfigurational") << magnet::xml::tag("ResidualHeatCapacity") << magnet::xml::attr("Value") << (getMeanSqrUConfigurational() - getMeanUConfigurational() * getMeanUConfigurational()) / (getMeankT() * getMeankT()) << magnet::xml::endtag("ResidualHeatCapacity") << magnet::xml::tag("Pressure") << magnet::xml::attr("Avg") << P.tr() / (3.0 * Sim->units.unitPressure()) << magnet::xml::tag("Tensor") << magnet::xml::chardata() ; for (size_t iDim = 0; iDim < NDIM; ++iDim) { for (size_t jDim = 0; jDim < NDIM; ++jDim) XML << P(iDim, jDim) / Sim->units.unitPressure() << " "; XML << "\n"; } XML << magnet::xml::endtag("Tensor") << magnet::xml::tag("InteractionContribution") << magnet::xml::chardata() ; for (size_t iDim = 0; iDim < NDIM; ++iDim) { for (size_t jDim = 0; jDim < NDIM; ++jDim) XML << collP(iDim, jDim) / Sim->units.unitPressure() << " "; XML << "\n"; } XML << magnet::xml::endtag("InteractionContribution") << magnet::xml::endtag("Pressure") << magnet::xml::tag("Duration") << magnet::xml::attr("Events") << Sim->eventCount << magnet::xml::attr("OneParticleEvents") << _singleEvents << magnet::xml::attr("TwoParticleEvents") << _dualEvents << magnet::xml::attr("VirtualEvents") << _virtualEvents << magnet::xml::attr("Time") << Sim->systemTime / Sim->units.unitTime() << magnet::xml::endtag("Duration") << magnet::xml::tag("EventCounters"); typedef std::pair<EventKey, size_t> mappair; BOOST_FOREACH(const mappair& mp1, _counters) XML << magnet::xml::tag("Entry") << magnet::xml::attr("Type") << getClass(mp1.first.first) << magnet::xml::attr("Name") << getName(mp1.first.first, Sim) << magnet::xml::attr("Event") << mp1.first.second << magnet::xml::attr("Count") << mp1.second << magnet::xml::endtag("Entry"); XML << magnet::xml::endtag("EventCounters") << magnet::xml::tag("Timing") << magnet::xml::attr("Start") << sTime << magnet::xml::attr("End") << eTime << magnet::xml::attr("EventsPerSec") << getEventsPerSecond() << magnet::xml::attr("SimTimePerSec") << getSimTimePerSecond() << magnet::xml::endtag("Timing") << magnet::xml::tag("PrimaryImageSimulationSize") << Sim->primaryCellSize / Sim->units.unitLength() << magnet::xml::endtag("PrimaryImageSimulationSize") << magnet::xml::tag("totMeanFreeTime") << magnet::xml::attr("val") << getMFT() << magnet::xml::endtag("totMeanFreeTime") << magnet::xml::tag("NegativeTimeEvents") << magnet::xml::attr("Count") << _reverseEvents << magnet::xml::endtag("NegativeTimeEvents") << magnet::xml::tag("Memusage") << magnet::xml::attr("MaxKiloBytes") << magnet::process_mem_usage() << magnet::xml::endtag("Memusage") << magnet::xml::tag("ThermalConductivity") << magnet::xml::tag("Correlator") << magnet::xml::chardata(); { std::vector<magnet::math::LogarithmicTimeCorrelator<Vector>::Data> data = _thermalConductivity.getAveragedCorrelator(); double inv_units = Sim->units.unitk() / ( Sim->units.unitTime() * Sim->units.unitThermalCond() * 2.0 * std::pow(getMeankT(), 2) * V); XML << "0 0 0 0 0\n"; for (size_t i(0); i < data.size(); ++i) XML << data[i].time / Sim->units.unitTime() << " " << data[i].sample_count << " " << data[i].value[0] * inv_units << " " << data[i].value[1] * inv_units << " " << data[i].value[2] * inv_units << "\n"; } XML << magnet::xml::endtag("Correlator") << magnet::xml::endtag("ThermalConductivity") << magnet::xml::tag("Viscosity") << magnet::xml::tag("Correlator") << magnet::xml::chardata(); { std::vector<magnet::math::LogarithmicTimeCorrelator<Matrix>::Data> data = _viscosity.getAveragedCorrelator(); double inv_units = 1.0 / (Sim->units.unitTime() * Sim->units.unitViscosity() * 2.0 * getMeankT() * V); XML << "0 0 0 0 0 0 0 0 0 0 0\n"; for (size_t i(0); i < data.size(); ++i) { XML << data[i].time / Sim->units.unitTime() << " " << data[i].sample_count << " "; for (size_t j(0); j < 3; ++j) for (size_t k(0); k < 3; ++k) XML << (data[i].value(j,k) - std::pow(data[i].time * P(j, k) * V, 2)) * inv_units << " "; XML << "\n"; } } XML << magnet::xml::endtag("Correlator") << magnet::xml::endtag("Viscosity") << magnet::xml::tag("ThermalDiffusion"); for (size_t i(0); i < Sim->species.size(); ++i) { XML << magnet::xml::tag("Correlator") << magnet::xml::attr("Species") << Sim->species[i]->getName() << magnet::xml::chardata(); std::vector<magnet::math::LogarithmicTimeCorrelator<Vector>::Data> data = _thermalDiffusion[i].getAveragedCorrelator(); double inv_units = 1.0 / (Sim->units.unitTime() * Sim->units.unitThermalDiffusion() * 2.0 * getMeankT() * V); XML << "0 0 0 0 0\n"; for (size_t i(0); i < data.size(); ++i) { XML << data[i].time / Sim->units.unitTime() << " " << data[i].sample_count << " "; for (size_t j(0); j < 3; ++j) XML << data[i].value[j] * inv_units << " "; XML << "\n"; } XML << magnet::xml::endtag("Correlator"); } XML << magnet::xml::endtag("ThermalDiffusion") << magnet::xml::tag("MutualDiffusion"); for (size_t i(0); i < Sim->species.size(); ++i) for (size_t j(i); j < Sim->species.size(); ++j) { XML << magnet::xml::tag("Correlator") << magnet::xml::attr("Species1") << Sim->species[i]->getName() << magnet::xml::attr("Species2") << Sim->species[j]->getName() << magnet::xml::chardata(); std::vector<magnet::math::LogarithmicTimeCorrelator<Vector>::Data> data = _mutualDiffusion[i * Sim->species.size() + j].getAveragedCorrelator(); double inv_units = 1.0 / (Sim->units.unitTime() * Sim->units.unitMutualDiffusion() * 2.0 * getMeankT() * V); XML << "0 0 0 0 0\n"; for (size_t i(0); i < data.size(); ++i) { XML << data[i].time / Sim->units.unitTime() << " " << data[i].sample_count << " "; for (size_t j(0); j < 3; ++j) XML << data[i].value[j] * inv_units << " "; XML << "\n"; } XML << magnet::xml::endtag("Correlator"); } XML << magnet::xml::endtag("MutualDiffusion") << magnet::xml::endtag("Misc"); }