Пример #1
0
  void PointwiseAvg::Observe(const DataBox& box,
		    const double /* TimeForDumpFiles */,
		    const std::string& FirstColumnInDatFiles) const
  {
    // Compute average
    DataBoxAccess boxA(box,"Observers::PointwiseAvg::Observe"); 
    const Domain& D = boxA.Get<Domain>("Domain");      
 
    double average = 0.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) {  
	average += Input(*i);
      }
    }
    average = MPreduceMax(average,D.Communicator());  
 
    // Output the norm  
    if(D.Communicator().Rank()==0) {
      std::ofstream out(mFileName.c_str(),std::ios::app); 
      out << FirstColumnInDatFiles << " " << average << std::endl;
    }
  }
Пример #2
0
void Max::Observe(const DataBox& box,
                  const double /* TimeForDumpFiles */,
                  const std::string& FirstColumnInDatFiles) const
{
    // Compute norm
    DataBoxAccess boxA(box,"Observers::Max::Observe"); // #2.
    const Domain& D = boxA.Get<Domain>("Domain");      // #3.

    double norm = 0.0;
    for(int sd=0; sd<D.Size(); ++sd) {
        const Tensor<DataMesh>& Input = boxA[sd].Get<Tensor<DataMesh> >(mInput);    // #4.
        for(Tensor<DataMesh>::const_iterator i=Input.begin(); i!=Input.end(); ++i) { // #5.
            const double tmp = ::Max(*i);   // #6.
            if(tmp>norm) norm = tmp;
        }
    }
    norm = MPreduceMax(norm,D.Communicator());  // #7.

    // Output the norm   // #8.
    if(D.Communicator().Rank()==0) {
        std::ofstream out(mFileName.c_str(),std::ios::app); // #9.
        out << FirstColumnInDatFiles << " " << norm << std::endl;
    }
}