void OPMSD::output(magnet::xml::XmlStream &XML) { //Required to get the correct results Sim->dynamics->updateAllParticles(); XML << magnet::xml::tag("MSD"); for (const shared_ptr<Species>& sp : Sim->species) { double MSD = calcMSD(*sp->getRange()) / Sim->units.unitArea(); XML << magnet::xml::tag("Species") << magnet::xml::attr("Name") << sp->getName() << magnet::xml::attr("val") << MSD << magnet::xml::attr("diffusionCoeff") << MSD * Sim->units.unitTime() / (2 * NDIM * Sim->systemTime) << magnet::xml::endtag("Species"); } if (!Sim->topology.empty()) { XML << magnet::xml::tag("Structures"); for (const shared_ptr<Topology>& topo : Sim->topology) { double MSD = calcStructMSD(*topo) / Sim->units.unitArea(); XML << magnet::xml::tag("Structure") << magnet::xml::attr("Name") << topo->getName() << magnet::xml::attr("val") << MSD << magnet::xml::attr("diffusionCoeff") << MSD * Sim->units.unitTime() / (2 * NDIM * Sim->systemTime) << magnet::xml::endtag("Structure"); } XML << magnet::xml::endtag("Structures"); } XML << magnet::xml::endtag("MSD"); }
void OPMSD::output(magnet::xml::XmlStream &XML) { //Required to get the correct results Sim->dynamics.getLiouvillean().updateAllParticles(); XML << magnet::xml::tag("MSD"); BOOST_FOREACH(const magnet::ClonePtr<Species>& sp, Sim->dynamics.getSpecies()) { double MSD(calcMSD(*(sp->getRange()))); XML << magnet::xml::tag("Species") << magnet::xml::attr("Name") << sp->getName() << magnet::xml::attr("val") << MSD << magnet::xml::attr("diffusionCoeff") << MSD * Sim->dynamics.units().unitTime() / Sim->dSysTime << magnet::xml::endtag("Species"); } if (!Sim->dynamics.getTopology().empty()) { XML << magnet::xml::tag("Structures"); BOOST_FOREACH(const magnet::ClonePtr<Topology>& topo, Sim->dynamics.getTopology()) { double MSD(calcStructMSD(*topo)); XML << magnet::xml::tag("Structure") << magnet::xml::attr("Name") << topo->getName() << magnet::xml::attr("val") << MSD << magnet::xml::attr("diffusionCoeff") << MSD * Sim->dynamics.units().unitTime() / Sim->dSysTime << magnet::xml::endtag("Structure"); } XML << magnet::xml::endtag("Structures"); }
double OPMSD::calcD(const IDRange& range) const { return calcMSD(range) / (2 * NDIM * Sim->systemTime); }