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; } }
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; } }