PSCF v1.1
Average.h
1#ifndef UTIL_AVERAGE_H
2#define UTIL_AVERAGE_H
3
4/*
5* Util Package - C++ Utilities for Scientific Computation
6*
7* Copyright 2010 - 2017, The Regents of the University of Minnesota
8* Distributed under the terms of the GNU General Public License.
9*/
10
11#include <util/global.h>
12#include <util/accumulators/AverageStage.h> // base class
13#include <util/param/ParamComposite.h> // base class
14
15#include <vector>
16
17namespace Util
18{
19
43 class Average : public AverageStage, public ParamComposite
44 {
45
46 public:
47
53 Average(int blockFactor = 2);
54
58 virtual ~Average();
59
67 void readParameters(std::istream& in);
68
81
87 virtual void loadParameters(Serializable::IArchive &ar);
88
94 virtual void save(Serializable::OArchive &ar);
95
102 template <class Archive>
103 void serialize(Archive& ar, const unsigned int version);
104
108 void clear();
109
115 void sample(double value);
116
123 void sample(double value, std::ostream& out);
124
143 void output(std::ostream& out) const;
144
148 double blockingError() const;
149
155 int nSamplePerBlock() const;
156
162 int iBlock() const;
163
169 bool isBlockComplete() const;
170
171 /*
172 * Get current block average value.
173 *
174 * \throw Exception if block is empty, or blocking disabled.
175 */
176 double blockAverage() const;
177
178 private:
179
185 virtual void registerDescendant(AverageStage* descendantPtr);
186
188 std::vector<AverageStage*> descendants_;
189
191 double blockSum_;
192
194 int iBlock_;
195
197 int nSamplePerBlock_;
198
200 Average(const Average& other);
201
203 Average& operator = (const Average& other);
204
205 };
206
207 // Inline method definitions
208
209 #if 0
210 /*
211 * Add a sampled value to the ensemble, and output block averages.
212 */
213 inline void Average::sample(double value, std::ostream& out)
214 { sample(value, &out); }
215 #endif
216
217 /*
218 * Get nSamplePerBlock, number of samples per block average.
219 */
220 inline int Average::nSamplePerBlock() const
221 { return nSamplePerBlock_; }
222
223 /*
224 * Get iBlock, number of samples in current block average.
225 */
226 inline int Average::iBlock() const
227 { return iBlock_; }
228
229 /*
230 * Is the current block average complete?
231 */
232 inline bool Average::isBlockComplete() const
233 {
234 return (iBlock_ && (iBlock_ == nSamplePerBlock_));
235 }
236
237 /*
238 * Get current block average.
239 */
240 inline double Average::blockAverage() const
241 {
242 if (iBlock_ == 0) {
243 UTIL_THROW("Attempt to get block average with no data");
244 }
245 return blockSum_/double(iBlock_);
246 }
247
248 /*
249 * Serialize this Average.
250 */
251 template <class Archive>
252 void Average::serialize(Archive& ar, const unsigned int version)
253 {
254 AverageStage::serialize(ar, version);
255 ar & blockSum_;
256 ar & iBlock_;
257 ar & nSamplePerBlock_;
258 }
259
260}
261#endif
Evaluate average with hierarchical blocking error analysis.
Definition: AverageStage.h:67
void serialize(Archive &ar, const unsigned int version)
Add a sampled value to the ensemble.
Definition: AverageStage.h:252
Calculates the average and variance of a sampled property.
Definition: Average.h:44
void clear()
Clear all accumulators, set to empty initial state.
Definition: Average.cpp:42
virtual ~Average()
Destructor.
Definition: Average.cpp:36
int iBlock() const
Get number of samples in current block average.
Definition: Average.h:226
int nSamplePerBlock() const
Get number of samples per block average.
Definition: Average.h:220
virtual void save(Serializable::OArchive &ar)
Save internal state to an archive.
Definition: Average.cpp:88
virtual void loadParameters(Serializable::IArchive &ar)
Load internal state from an archive.
Definition: Average.cpp:74
void serialize(Archive &ar, const unsigned int version)
Serialize this Average to or from an archive.
Definition: Average.h:252
void output(std::ostream &out) const
Output final statistical properties to file.
Definition: Average.cpp:178
void readParameters(std::istream &in)
Read parameter nSamplePerBlock from file and initialize.
Definition: Average.cpp:52
double blockingError() const
Return estimated error on average from blocking analysis.
Definition: Average.cpp:133
bool isBlockComplete() const
Is the current block average complete?
Definition: Average.h:232
void sample(double value)
Add a sampled value to the ensemble.
Definition: Average.cpp:94
void setNSamplePerBlock(int nSamplePerBlock)
Set nSamplePerBlock.
Definition: Average.cpp:63
Saving archive for binary istream.
Saving / output archive for binary ostream.
An object that can read multiple parameters from file.
File containing preprocessor macros for error handling.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Definition: global.h:51
Utility classes for scientific computation.
Definition: accumulators.mod:1