1#ifndef RP_MC_MOVE_MANAGER_TPP
2#define RP_MC_MOVE_MANAGER_TPP
11#include <util/random/Random.h>
22 template <
int D,
class T>
24 typename T::System& system)
26 simulatorPtr_(&simulator),
28 randomPtr_(&simulator.random())
34 template <
int D,
class T>
37 {
return new typename T::McMoveFactory(*simulatorPtr_); }
42 template <
int D,
class T>
50 double totalProbability = 0.0;
52 for (iMove = 0; iMove <
Base::size(); ++iMove) {
53 probabilities_[iMove] = (*this)[iMove].probability();
54 totalProbability += probabilities_[iMove];
58 if (std::abs(totalProbability - 1.0) > 1.0E-4) {
59 std::string msg =
"Error: ";
60 msg +=
"Sum of MC move proababilities differs too much from 1.0";
66 for (iMove = 0; iMove <
Base::size(); ++iMove) {
67 probabilities_[iMove] = probabilities_[iMove]/totalProbability;
68 (*this)[iMove].setProbability(probabilities_[iMove]);
75 template <
int D,
class T>
78 for (
int iMove = 0; iMove <
Base::size(); ++iMove) {
79 (*this)[iMove].setup();
86 template <
int D,
class T>
90 iMove = randomPtr_->drawFrom(&probabilities_[0],
Base::size());
91 return (*
this)[iMove];
97 template <
int D,
class T>
108 template <
int D,
class T>
112 (*this)[i].outputTimers(out);
119 template <
int D,
class T>
123 (*this)[i].clearTimers();
130 template <
int D,
class T>
144 template <
int D,
class T>
void outputTimers(std::ostream &out) const
Write timing results to an output stream.
void output() const
Output statistics for all moves.
bool needsCc()
Decide whether any move needs to store cc fields.
virtual void readParameters(std::istream &in)
Read instructions for creating McMove objects.
McMoveManager(typename T::McSimulator &simulator, typename T::System &system)
Constructor.
void clearTimers()
Clear timers.
void setup()
Initialize at beginning of system run.
bool needsDc()
Decide whether any move needs to store dc fields.
T::McMove & chooseMove()
Choose an McMove at random, using specified probabilities.
virtual Factory< T::McMove > * newDefaultFactory() const
virtual void readParameters(std::istream &in)
void setClassName(const char *className)
Set class name string.
File containing preprocessor macros for error handling.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Class templates for real-valued periodic fields.
PSCF package top-level namespace.