8 #include "TensorAverageAnalyzer.h" 9 #include <ddMd/simulation/Simulation.h> 10 #include <util/accumulators/TensorAverage.h> 11 #include <util/space/Tensor.h> 12 #include <util/format/Int.h> 13 #include <util/format/Dbl.h> 14 #include <util/mpi/MpiLoader.h> 15 #include <util/misc/ioUtil.h> 40 if (accumulatorPtr_) {
41 delete accumulatorPtr_;
52 readOptional<int>(in,
"nSamplePerBlock", nSamplePerBlock_);
59 isInitialized_ =
true;
71 loadParameter<int>(ar,
"nSamplePerBlock", nSamplePerBlock_,
75 ar >> *accumulatorPtr_;
76 if (nSamplePerBlock_ != accumulatorPtr_->nSamplePerBlock()) {
77 UTIL_THROW(
"Inconsistent values of nSamplePerBlock");
82 isInitialized_ =
true;
92 bool isActive = (bool)nSamplePerBlock_;
95 ar << *accumulatorPtr_;
105 accumulatorPtr_->
clear();
115 if (nSamplePerBlock_) {
128 UTIL_THROW(
"Time step index is not a multiple of interval");
133 accumulatorPtr_->
sample(data);
135 int beginStep = iStep - (nSamplePerBlock_ - 1)*
interval();
136 outputFile_ <<
Int(beginStep);
141 ave = (*accumulatorPtr_)(i, j).blockAverage();
142 outputFile_ <<
" " <<
Dbl(ave);
157 if (outputFile_.is_open()) {
173 (*accumulatorPtr_)(i, j).
output(outputFile_);
186 ave = (*accumulatorPtr_)(i, j).average();
187 err = (*accumulatorPtr_)(i, j).blockingError();
188 outputFile_ <<
"Average(" << i <<
", " << j <<
") = ";
189 outputFile_ <<
Dbl(ave) <<
" +- " <<
Dbl(err, 9, 2) <<
"\n";
198 outputFile_ <<
"Element(" << i <<
", " << j <<
"): \n\n";
199 (*accumulatorPtr_)(i, j).
output(outputFile_);
201 "----------------------------------------------------------------------------\n";
virtual void save(Serializable::OArchive &ar)
Save internal state to an archive.
const int Dimension
Dimensionality of space.
Abstract base for periodic output and/or analysis actions.
Simulation & simulation()
Get the parent Simulation by reference.
void readOutputFileName(std::istream &in)
Read outputFileName from file.
bool isRequired() const
Is this ParamComposite required in the input file?
void saveInterval(Serializable::OArchive &ar)
Save interval parameter to an archive.
bool isBlockComplete() const
Is the current block average complete?
virtual void sample(long iStep)
Compute a sampled value and add update accumulator.
virtual void loadParameters(Serializable::IArchive &ar)
Load internal state from an archive.
void openOutputFile(const std::string &filename, std::ofstream &out, std::ios_base::openmode mode=std::ios_base::out) const
Open an output file.
void readInterval(std::istream &in)
Read parameter interval from file.
Wrapper for a double precision number, for formatted ostream output.
Parallel domain decomposition (DD) MD simulation.
virtual ~TensorAverageAnalyzer()
Destructor.
Main object for a domain-decomposition MD simulation.
A Tensor represents a Cartesian tensor.
bool isActive() const
Is this parameter active?
void setNSamplePerBlock(int nSamplePerBlock)
Set nSamplePerBlock.
Saving / output archive for binary ostream.
void loadOutputFileName(Serializable::IArchive &ar)
Load output file name to an archive.
FileMaster & fileMaster()
Get the associated FileMaster by reference.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
TensorAverageAnalyzer(Simulation &simulation)
Constructor.
virtual void writeParam(std::ostream &out)
Write all parameters to an output stream.
bool isAtInterval(long counter) const
Return true iff counter is a multiple of the interval.
void clear()
Clear all accumulators, set to empty initial state.
Utility classes for scientific computation.
virtual void compute()=0
Compute value of sampled quantity.
Calculates averages of all components of a Tensor-valued variable.
Wrapper for an int, for formatted ostream output.
void sample(const Tensor &value)
Add a sampled value to the ensemble.
const std::string & outputFileName() const
Return outputFileName string.
bool isMaster() const
Is this the master processor (gridRank == 0) ?
A FileMaster manages input and output files for a simulation.
Saving archive for binary istream.
void setClassName(const char *className)
Set class name string.
void loadInterval(Serializable::IArchive &ar)
Load parameter interval from input archive.
virtual void setup()
Setup before loop - open output file.
int interval() const
Get interval value.
virtual Tensor value()=0
Get current value, set by compute function.
void saveOutputFileName(Serializable::OArchive &ar)
Save output file name to an archive.
Domain & domain()
Get the Domain by reference.
static void saveOptional(Serializable::OArchive &ar, Type &value, bool isActive)
Save an optional parameter value to an output archive.
virtual void readParameters(std::istream &in)
Read interval, outputFileName and (optionally) nSamplePerBlock.
virtual void output()
Write final average and error analysis to file.
virtual void clear()
Clear accumulator on master, do nothing on other processors.