PSCF v1.4.0
fts/montecarlo/BdMove.h
1#ifndef RP_BD_MOVE_H
2#define RP_BD_MOVE_H
3
4/*
5* PSCF - Polymer Self-Consistent Field
6*
7* Copyright 2015 - 2025, The Regents of the University of Minnesota
8* Distributed under the terms of the GNU General Public License.
9*/
10
11#include <util/containers/DArray.h> // member
12#include <iostream>
13
14namespace Pscf {
15namespace Rp {
16
17 using namespace Util;
18
39 template <int D, class T>
40 class BdMove : public T::McMove
41 {
42
43 public:
44
45 // Protected constructor and destrutor (see below)
46
52 void readParameters(std::istream &in) override;
53
57 bool move() override;
58
66 bool needsDc() override
67 { return true; }
68
69 protected:
70
76 BdMove(typename T::McSimulator& simulator);
77
81 ~BdMove() = default;
82
86 void bdSetup();
87
93 bool bdStep();
94
95 using McMoveT = typename T::McMove;
96
97 // Inherited protected member functions
98 using McMoveT::system;
99 using McMoveT::simulator;
100 using McMoveT::random;
101 using McMoveT::vecRandom;
102
103 private:
104
105 using RFieldT = typename T::RField;
106
107 // Private data members
108
109 // New field values
111
112 // Random displacements (A)
113 DArray< RFieldT > etaA_;
114
115 // Random displacements (B)
116 DArray< RFieldT > etaB_;
117
118 // Change in one field component
119 RFieldT dwc_;
120
121 // Pointer to new random displacements
122 DArray< RFieldT >* etaNewPtr_;
123
124 // Pointer to old random displacements
125 DArray< RFieldT >* etaOldPtr_;
126
127 // Prefactor of -dc_ in deterministic drift term
128 double mobility_;
129
130 // Number of BD steps per MC move.
131 double nStep_;
132
133 // Private member functions
134
135 RFieldT& etaNew(int i)
136 { return (*etaNewPtr_)[i]; }
137
138 RFieldT& etaOld(int i)
139 { return (*etaOldPtr_)[i]; }
140
142 void generateEtaNew();
143
145 void exchangeOldNew();
146
147 };
148
149}
150}
151#endif
void bdSetup()
Setup before simulation loop.
Definition BdMove.tpp:100
void readParameters(std::istream &in) override
Read body of parameter file block.
Definition BdMove.tpp:40
bool needsDc() override
Do dc derivative components need to be saved before a step?
bool bdStep()
Take a single Brownian dynamics step.
Definition BdMove.tpp:144
~BdMove()=default
Destructor.
BdMove(typename T::McSimulator &simulator)
Constructor.
Definition BdMove.tpp:25
bool move() override
Generate a short BD simulation.
Definition BdMove.tpp:63
Class templates for real-valued periodic fields.
PSCF package top-level namespace.