8 #include "ModifierManager.h" 9 #include "ModifierFactory.h" 23 preIntegrate1Modifiers_(),
24 postIntegrate1Modifiers_(),
25 preTransformModifiers_(),
26 preExchangeModifiers_(),
27 postExchangeModifiers_(),
28 postNeighborModifiers_(),
29 preUpdateModifiers_(),
30 postUpdateModifiers_(),
32 postForceModifiers_(),
33 endOfStepModifiers_(),
36 reverseUpdateModifiers_()
44 simulationPtr_(&simulation),
46 preIntegrate1Modifiers_(),
47 postIntegrate1Modifiers_(),
48 preTransformModifiers_(),
49 preExchangeModifiers_(),
50 postExchangeModifiers_(),
51 postNeighborModifiers_(),
52 preUpdateModifiers_(),
53 postUpdateModifiers_(),
55 postForceModifiers_(),
56 endOfStepModifiers_(),
59 reverseUpdateModifiers_()
78 for (
int i = 0; i <
size(); ++i) {
81 setupModifiers_.append(*ptr);
84 preIntegrate1Modifiers_.append(*ptr);
87 postIntegrate1Modifiers_.append(*ptr);
90 preTransformModifiers_.append(*ptr);
93 preExchangeModifiers_.append(*ptr);
96 postExchangeModifiers_.append(*ptr);
99 postNeighborModifiers_.append(*ptr);
102 preUpdateModifiers_.append(*ptr);
105 postUpdateModifiers_.append(*ptr);
108 preForceModifiers_.append(*ptr);
111 postForceModifiers_.append(*ptr);
114 endOfStepModifiers_.append(*ptr);
117 exchangeModifiers_.append(*ptr);
120 updateModifiers_.append(*ptr);
123 reverseUpdateModifiers_.append(*ptr);
132 int n = setupModifiers_.size();
133 for (
int i = 0; i < n; ++i) {
134 setupModifiers_[i].setup();
143 int n = preIntegrate1Modifiers_.size();
144 for (
int i = 0; i < n; ++i) {
145 ptr = &preIntegrate1Modifiers_[i];
155 int n = postIntegrate1Modifiers_.size();
156 for (
int i = 0; i < n; ++i) {
157 ptr = &postIntegrate1Modifiers_[i];
167 int n = preTransformModifiers_.size();
168 for (
int i = 0; i < n; ++i) {
169 ptr = &preTransformModifiers_[i];
179 int n = preExchangeModifiers_.size();
180 for (
int i = 0; i < n; ++i) {
181 ptr = &preExchangeModifiers_[i];
191 int n = postExchangeModifiers_.size();
192 for (
int i = 0; i < n; ++i) {
193 ptr = &postExchangeModifiers_[i];
203 int n = postNeighborModifiers_.size();
204 for (
int i = 0; i < n; ++i) {
205 ptr = &postNeighborModifiers_[i];
215 int n = preUpdateModifiers_.size();
216 for (
int i = 0; i < n; ++i) {
217 ptr = &preUpdateModifiers_[i];
227 int n = postUpdateModifiers_.size();
228 for (
int i = 0; i < n; ++i) {
229 ptr = &postUpdateModifiers_[i];
239 int n = preForceModifiers_.size();
240 for (
int i = 0; i < n; ++i) {
241 ptr = &preForceModifiers_[i];
251 int n = postForceModifiers_.size();
252 for (
int i = 0; i < n; ++i) {
253 ptr = &postForceModifiers_[i];
263 int n = endOfStepModifiers_.size();
264 for (
int i = 0; i < n; ++i) {
265 ptr = &endOfStepModifiers_[i];
277 int n = exchangeModifiers_.size();
278 for (
int i = 0; i < n; ++i) {
279 ptr = &exchangeModifiers_[i];
287 int n = exchangeModifiers_.size();
288 for (
int i = 0; i < n; ++i) {
289 ptr = &exchangeModifiers_[i];
297 int n = updateModifiers_.size();
298 for (
int i = 0; i < n; ++i) {
299 ptr = &updateModifiers_[i];
307 int n = updateModifiers_.size();
308 for (
int i = 0; i < n; ++i) {
309 ptr = &updateModifiers_[i];
317 int n = reverseUpdateModifiers_.size();
318 for (
int i = 0; i < n; ++i) {
319 ptr = &reverseUpdateModifiers_[i];
327 int n = reverseUpdateModifiers_.size();
328 for (
int i = 0; i < n; ++i) {
329 ptr = &reverseUpdateModifiers_[i];
virtual void preIntegrate1(long iStep)
Call just before the first step of velocity-Verlet algorithm.
bool isAtInterval(long iStep) const
Return true iff iStep is a multiple of the interval.
static const Bit Update
Flag to activate pack/unpack update functions.
static const Bit PostForce
Flag to activate postForce() function.
void unpackReverseUpdate(long iStep)
Unpack data from the buffer used to reverse update forces.
virtual void unpackExchange()
Unpack data from buffer used to exchange atoms.
static const Bit PreTransform
Flag to activate preTransform() function.
void postNeighbor(long iStep)
Call on exchange steps after re-building the neighbor list.
void preTransform(long iStep)
Call on exchange steps before transforming to scaled coordinates.
void postUpdate(long iStep)
Call on update steps after updating ghost positions.
static const Bit PreExchange
Flag to activate preExchange() function.
virtual void postUpdate(long iStep)
Call on update steps after updating ghost positions.
static const Bit Setup
Flag to activate setup() function.
static const Bit ReverseUpdate
Flag to activate pack/unpack reverse update functions.
virtual void packExchange()
Pack data into buffer used to exchange atoms.
void endOfStep(long iStep)
Call after 2nd integration step, at end of the time step.
Factory< Modifier > * newDefaultFactory() const
Return pointer to a new default factory.
void packReverseUpdate(long iStep)
Pack data into buffer used to reverse update forces.
static const Bit PreIntegrate1
Flag to activate preIntegrate() function.
Parallel domain decomposition (DD) MD simulation.
Main object for a domain-decomposition MD simulation.
static const Bit PostIntegrate1
Flag to activate postIntegrate1() function.
void packExchange(long iStep)
Pack data into buffer used to exchange atoms.
static const Bit PreUpdate
Flag to activate preUpdate() function.
virtual void preTransform(long iStep)
Call on exchange steps before transforming to scaled atomic coordinates.
bool isSet(Bit flag) const
Return true if a flag is set, false otherwise.
static const Bit PostExchange
Flag to activate postExchange() function.
Template container for pointers to objects with a common base class.
void preIntegrate1(long iStep)
Call just before the first step of velocity-Verlet algorithm.
static const Bit PreForce
Flag to activate preForce() function.
virtual void unpackUpdate()
Unpack data from buffer used to update ghost positions.
void unpackExchange(long iStep)
Unpack data from buffer used to exchange atoms.
Utility classes for scientific computation.
~ModifierManager()
Destructor.
virtual void preExchange(long iStep)
Call on exchange steps after transforming but before exchanging atoms.
static const Bit PostNeighbor
Flag to activate postNeighbor() function.
static const Bit Exchange
Flag to activate pack/unpack exchange functions.
void postExchange(long iStep)
Call on exchange steps after atom exchange, before reneighboring.
virtual void postForce(long iStep)
Call after calculating forces.
Factory for DdMd::Modifier objects.
void preUpdate(long iStep)
Call on update steps before updating ghost positions.
void unpackUpdate(long iStep)
Unpack data from buffer used to update ghost positions.
static const Bit EndOfStep
Flag to activate endOfStep() function.
virtual void readParameters(std::istream &in)
Read child blocks, return when closing bracket encountered.
virtual void unpackReverseUpdate()
Unpack data from the buffer used to reverse update forces.
virtual void postIntegrate1(long iStep)
Call just after the first step of velocity-Verlet algorithm.
virtual void postNeighbor(long iStep)
Call on exchange steps after re-building neighbor list (reneighboring).
virtual void postExchange(long iStep)
Call on exchange steps after atom exchange, before reneighboring.
void preForce(long iStep)
Call after updating but before calculating forces.
void packUpdate(long iStep)
Pack data into buffer used to update ghost positions.
virtual void packReverseUpdate()
Pack data into buffer used to reverse update forces.
void postIntegrate1(long iStep)
Call just after the first step of velocity-Verlet algorithm.
void setClassName(const char *className)
Set class name string.
static const Bit PostUpdate
Flag to activate postUpdate() function.
void readParameters(std::istream &in)
Read main block of parameter file.
virtual void packUpdate()
Pack data into buffer used to update ghost positions.
virtual void preUpdate(long iStep)
Call on update steps before updating ghost positions.
int size() const
Get logical size.
virtual void preForce(long iStep)
Call after updating but before calculating forces.
virtual void endOfStep(long iStep)
Call at the end of the time step.
void setup()
Setup before entering the main loop.
void preExchange(long iStep)
Call on exchange steps after transforming, before exchanging.
A Modifier can modify the time evolution of the simulation.
ModifierManager()
Default constructor (for unit testing).
void postForce(long iStep)
Call after calculating forces.