22 TEST_CASE(
"drift pbyp and node correction real",
"[drivers][drift]")
28 std::vector<int> agroup(1);
34 std::vector<ParticleSet::RealType> massinv(1, 1. / mass);
40 double gradx = -xtot / 2.;
41 double dx = xtot / nx;
44 for (
int ix = 0; ix < nx; ix++)
48 double dval = drift[0][0];
50 double scale_factor = (-1. +
std::sqrt(1. + 2. * gradx * gradx * tau / mass)) / (gradx * gradx * tau / mass);
51 CHECK(dval == Approx(scale_factor * gradx * tau / mass));
60 TEST_CASE(
"drift pbyp and node correction complex",
"[drivers][drift]")
62 const SimulationCell simulation_cell;
63 MCWalkerConfiguration elec(simulation_cell);
66 std::vector<int> agroup(1);
72 std::vector<ParticleSet::RealType> massinv(1, 1. / mass);
78 double gradx = -xtot / 2.;
79 double dx = xtot / nx;
82 std::complex<double> myi(0, 1.9);
83 for (
int ix = 0; ix < nx; ix++)
85 elec.G[0][0] = gradx + myi;
87 double dval = drift[0][0];
89 double scale_factor = (-1. +
std::sqrt(1. + 2. * gradx * gradx * tau / mass)) / (gradx * gradx * tau / mass);
90 CHECK(dval == Approx(scale_factor * gradx * tau / mass));
97 TEST_CASE(
"get scaled drift real",
"[drivers][drift]")
103 std::vector<int> agroup(1);
109 std::vector<ParticleSet::RealType> massinv(1, 1. / mass);
115 double gradx = -xtot / 2.;
116 double dx = xtot / nx;
119 for (
int ix = 0; ix < nx; ix++)
121 elec.
G[0][0] = gradx;
122 DM.
getDrift(tau / mass, elec.
G[0], drift);
123 double dval = drift[0];
125 double scale_factor = (-1. +
std::sqrt(1. + 2. * gradx * gradx * tau / mass)) / (gradx * gradx * tau / mass);
126 CHECK(dval == Approx(scale_factor * gradx * tau / mass));
133 TEST_CASE(
"get scaled drift complex",
"[drivers][drift]")
135 const SimulationCell simulation_cell;
136 MCWalkerConfiguration elec(simulation_cell);
138 elec.setName(
"elec");
139 std::vector<int> agroup(1);
145 std::vector<ParticleSet::RealType> massinv(1, 1. / mass);
151 double gradx = -xtot / 2.;
152 double dx = xtot / nx;
157 std::complex<double> myi(0, 1.9);
158 for (
int ix = 0; ix < nx; ix++)
160 elec.G[0][0] = gradx + myi;
161 DM.getDrift(tau / mass, elec.G[0], drift);
162 double dval = drift[0];
164 double scale_factor = (-1. +
std::sqrt(1. + 2. * gradx * gradx * tau / mass)) / (gradx * gradx * tau / mass);
165 CHECK(dval == Approx(scale_factor * gradx * tau / mass));
void setName(const std::string &aname)
A set of walkers that are to be advanced by Metropolis Monte Carlo.
helper functions for EinsplineSetBuilder
QTBase::RealType RealType
TEST_CASE("complex_helper", "[type_traits]")
void getDrift(RealType tau, const GradType &qf, PosType &drift) const final
evaluate a drift with a real force
Attaches a unit to a Vector for IO.
T setScaledDriftPbyPandNodeCorr(T tau, const ParticleAttrib< TinyVector< T1, D >> &qf, ParticleAttrib< TinyVector< T, D >> &drift)
scale drift
ParticleGradient G
gradients of the particles
void create(const std::vector< int > &agroup)
create grouped particles
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
CHECK(log_values[0]==ComplexApprox(std::complex< double >{ 5.603777579195571, -6.1586603331188225 }))
ParticleAttrib< SingleParticlePos > ParticlePos
Declaration of a MCWalkerConfiguration.