1#ifndef RP_AVERAGE_ANALYZER_TPP
2#define RP_AVERAGE_ANALYZER_TPP
11#include "AverageAnalyzer.h"
13#include <util/format/Int.h>
14#include <util/format/Dbl.h>
15#include <util/misc/FileMaster.h>
16#include <util/misc/ioUtil.h>
26 template <
int D,
class T>
28 typename T::System& system)
29 : AnalyzerT(simulator, system),
31 { AnalyzerT::setFileMaster(system.fileMaster()); }
36 template <
int D,
class T>
40 AnalyzerT::readParameters(in);
43 nSamplePerOutput_ = 1;
46 if (nSamplePerOutput_ > 0) {
47 std::string fileName = AnalyzerT::outputFileName(
".dat");
48 AnalyzerT::system().fileMaster().openOutputFile(fileName,
outputFile_);
59 template <
int D,
class T>
66 template <
int D,
class T>
69 if (!AnalyzerT::isAtInterval(iStep))
return;
75 if (nSamplePerOutput_ > 0) {
76 if (nSamplePerOutput_ == 1) {
79 if (accumulator_.isBlockComplete()) {
80 int interval = AnalyzerT::interval();
81 int beginStep = iStep - (nSamplePerOutput_ - 1)*interval;
92 template <
int D,
class T>
104 template <
int D,
class T>
111 std::string fileName;
115 fileName = AnalyzerT::outputFileName(
".prm");
116 AnalyzerT::system().fileMaster().openOutputFile(fileName,
123 fileName = AnalyzerT::outputFileName(
".ave");
124 AnalyzerT::system().fileMaster().openOutputFile(fileName,
126 double ave = accumulator_.average();
127 outputFile_ <<
"Average = ";
129 if (!AnalyzerT::simulator().hasRamp()) {
136 if (!AnalyzerT::simulator().hasRamp()) {
140 "----------------------------------------------------------------";
141 outputFile_ << line << std::endl;
142 accumulator_.output(outputFile_);
143 outputFile_ << std::endl;
virtual void outputValue(int step, double value)
virtual void sample(long iStep)
Compute a sampled value and update the accumulator.
virtual void readParameters(std::istream &in)
Read interval, outputFileName and (optionally) nSamplePerOutput.
Average accumulator_
Average object.
AverageAnalyzer(typename T::Simulator &simulator, typename T::System &system)
Constructor.
virtual void output()
Write final results to file after a simulation.
std::ofstream outputFile_
Output file stream.
virtual void setup()
Setup before loop.
virtual double compute()=0
Wrapper for a double precision number, for formatted ostream output.
Wrapper for an int, for formatted ostream output.
virtual void writeParam(std::ostream &out) const
Write all parameters to an output stream.
ScalarParam< Type > & readOptional(std::istream &in, const char *label, Type &value)
Add and read a new optional ScalarParam < Type > object.
#define UTIL_CHECK(condition)
Assertion macro suitable for serial or parallel production code.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.