Example #1
0
  void PointwiseAvg::Observe(const DataBox& box,
        const double /* TimeForDumpFiles */,
        const std::string& FirstColumnInDatFiles) const
  {
    const DataBoxAccess boxA(box,"Observers::PointwiseAvg::Observe");
    const Domain& D = boxA.Get<Domain>("Domain");

    // avg stores the total until dividing by numPoints
    double avg = 0.0;
    int numPoints = 0;
    for(int sd=0;sd<D.Size();++sd) {
      const Tensor<DataMesh>& Input = boxA[sd].Get<Tensor<DataMesh> >(mInput);
      for(Tensor<DataMesh>::const_iterator it = Input.begin();
            it != Input.end(); it++) {
        numPoints += (*it).Size();
        for (int j = 0; j < (*it).Size(); j++)
          avg += (*it)[j];
      }
    }

    avg = MPreduceAdd(avg,D.Communicator());
    numPoints = MPreduceAdd(numPoints,D.Communicator());

    avg /= numPoints;

    // Output the norm
    if(D.Communicator().Rank()==0) {
      std::ofstream out(mFileName.c_str(),std::ios::app);
      out << FirstColumnInDatFiles << " " << avg << std::endl;
    }
  }
Example #2
0
  void PointwiseAvgIlana::Observe(const DataBox& box,
		    const double /* TimeForDumpFiles */,
		    const std::string& FirstColumnInDatFiles) const
  {
    DataBoxAccess boxA(box, "Observers::PointwiseAvgIlana::Observe");
    const Domain& D = boxA.Get<Domain>("Domain");

    // find total of points in domain, and number of points
    double sum = 0.0;   
    int numpts = 0;
    for(int sd=0;sd<D.Size();++sd) {
      const Tensor<DataMesh>& Input = boxA[sd].Get<Tensor<DataMesh> >(mInput);   
      for(Tensor<DataMesh>::const_iterator i=Input.begin();i!=Input.end();++i) {
	for(int j=0;j<(*i).Size();++j)
	  sum += (*i)[j]; // asterisk means a pointer to i
	numpts += (*i).Size();
      }
    }

    sum = MPreduceAdd(sum,D.Communicator()); 
    numpts = MPreduceAdd(numpts,D.Communicator());
 
    // Output the average
    if(D.Communicator().Rank()==0) {
      std::ofstream out(mFileName.c_str(),std::ios::app); 
      out << FirstColumnInDatFiles << " " << sum/numpts << std::endl;
    }
  }