PSCF v1.3.1
rpg/fts/brownian/LMBdStep.h
1#ifndef RPG_LM_BD_STEP_H
2#define RPG_LM_BD_STEP_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
12#include "BdStep.h" // base class
13#include <prdc/cuda/RField.h> // member
14#include <util/containers/DArray.h> // member
15
16namespace Pscf {
17namespace Rpg {
18
19 using namespace Util;
20 using namespace Pscf::Prdc;
21 using namespace Pscf::Prdc::Cuda;
22
39 template <int D>
40 class LMBdStep : public BdStep<D>
41 {
42
43 public:
44
51
57 virtual ~LMBdStep();
58
64 virtual void readParameters(std::istream &in);
65
69 virtual void setup();
70
76 virtual bool step();
77
78 protected:
79
80 using BdStep<D>::system;
81 using BdStep<D>::simulator;
82 using BdStep<D>::cudaRandom;
84
85 private:
86
87 // Private data members
88
89 // New field values
91
92 // Random displacements (A)
93 DArray< RField<D> > etaA_;
94
95 // Random displacements (B)
96 DArray< RField<D> > etaB_;
97
98 // Change in one field component
99 RField<D> dwc_;
100
101 // Pointer to new random displacements
102 DArray< RField<D> >* etaNewPtr_;
103
104 // Pointer to old random displacements
105 DArray< RField<D> >* etaOldPtr_;
106
107 // Normal-distributed random fields
108 RField<D> gaussianField_;
109
110 // Prefactor of -dc_ in deterministic drift term
111 double mobility_;
112
113 // Private member functions
114
115 RField<D>& etaNew(int i)
116 { return (*etaNewPtr_)[i]; }
117
118 RField<D>& etaOld(int i)
119 { return (*etaOldPtr_)[i]; }
120
122 void generateEtaNew();
123
125 void exchangeOldNew();
126
127 };
128
129 // Explicit instantiation declarations
130 extern template class LMBdStep<1>;
131 extern template class LMBdStep<2>;
132 extern template class LMBdStep<3>;
133
134}
135}
136#endif
Field of real double precision values on an FFT mesh.
Definition cpu/RField.h:29
Brownian dynamics simulator.
BdStep(BdSimulator< D > &simulator)
Constructor.
System< D > & system()
Get parent System object.
CudaRandom & cudaRandom()
Get Random number generator of parent System.
BdSimulator< D > & simulator()
Get parent BdSimulator object.
Leimkuhler-Matthews Brownian dynamics stepper.
virtual bool step()
Take a single Brownian dynamics step.
virtual void setup()
Setup before simulation.
virtual void readParameters(std::istream &in)
Read required parameters from file.
LMBdStep(BdSimulator< D > &simulator)
Constructor.
Dynamically allocatable contiguous array template.
Definition DArray.h:32
ScalarParam< Type > & read(std::istream &in, const char *label, Type &value)
Add and read a new required ScalarParam < Type > object.
Fields, FFTs, and utilities for periodic boundary conditions (CUDA)
Definition Reduce.cpp:14
Periodic fields and crystallography.
Definition CField.cpp:11
SCFT and PS-FTS with real periodic fields (GPU)
PSCF package top-level namespace.
Definition param_pc.dox:1