Ejemplo n.º 1
0
  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");
  }
Ejemplo n.º 2
0
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");
    }
Ejemplo n.º 3
0
 double 
 OPMSD::calcD(const IDRange& range) const
 {
   return calcMSD(range) / (2 * NDIM * Sim->systemTime);
 }