QMCPACK
DTD_BConds< T, 3, PPPG > Struct Template Reference

specialization for a periodic 3D general cell More...

+ Collaboration diagram for DTD_BConds< T, 3, PPPG >:

Public Member Functions

 DTD_BConds (const CrystalLattice< T, 3 > &lat)
 
apply_bc (TinyVector< T, 3 > &displ) const
 apply BC to a displacement vector a and return the minimum-image distance More...
 
void apply_bc (std::vector< TinyVector< T, 3 >> &dr, std::vector< T > &r, std::vector< T > &rinv) const
 
void apply_bc (std::vector< TinyVector< T, 3 >> &dr, std::vector< T > &r) const
 
void evaluate_rsquared (TinyVector< T, 3 > *restrict dr, T *restrict rr, int n)
 

Public Attributes

g00
 
g10
 
g20
 
g01
 
g11
 
g21
 
g02
 
g12
 
g22
 
TinyVector< TinyVector< T, 3 >, 3 > rb
 
std::vector< TinyVector< T, 3 > > corners
 

Detailed Description

template<class T>
struct qmcplusplus::DTD_BConds< T, 3, PPPG >

specialization for a periodic 3D general cell

Wigner-Seitz cell radius > simulation cell radius Need to check image cells

Definition at line 160 of file ParticleBConds3D.h.

Constructor & Destructor Documentation

◆ DTD_BConds()

DTD_BConds ( const CrystalLattice< T, 3 > &  lat)
inline

Definition at line 166 of file ParticleBConds3D.h.

References CrystalLattice< T, D >::a(), qmcplusplus::find_reduced_basis(), and qmcplusplus::inverse().

167  {
168  rb[0] = lat.a(0);
169  rb[1] = lat.a(1);
170  rb[2] = lat.a(2);
172  Tensor<T, 3> rbt;
173  for (int i = 0; i < 3; ++i)
174  for (int j = 0; j < 3; ++j)
175  rbt(i, j) = rb[i][j];
176  Tensor<T, 3> g = inverse(rbt);
177  T minusone = -1.0;
178  corners.resize(8);
179  corners[0] = 0.0;
180  corners[1] = minusone * (rb[0]);
181  corners[2] = minusone * (rb[1]);
182  corners[3] = minusone * (rb[2]);
183  corners[4] = minusone * (rb[0] + rb[1]);
184  corners[5] = minusone * (rb[0] + rb[2]);
185  corners[6] = minusone * (rb[1] + rb[2]);
186  corners[7] = minusone * (rb[0] + rb[1] + rb[2]);
187 
188  g00 = g(0);
189  g10 = g(3);
190  g20 = g(6);
191  g01 = g(1);
192  g11 = g(4);
193  g21 = g(7);
194  g02 = g(2);
195  g12 = g(5);
196  g22 = g(8);
197  }
std::vector< TinyVector< T, 3 > > corners
void find_reduced_basis(TinyVector< TinyVector< T, 3 >, 3 > &rb)
Tensor< T, D > inverse(const Tensor< T, D > &a)
Definition: TensorOps.h:879
TinyVector< TinyVector< T, 3 >, 3 > rb

Member Function Documentation

◆ apply_bc() [1/3]

T apply_bc ( TinyVector< T, 3 > &  displ) const
inline

apply BC to a displacement vector a and return the minimum-image distance

Parameters
latlattice
adisplacement vector
Returns
the minimum-image distance

Definition at line 204 of file ParticleBConds3D.h.

References qmcplusplus::dot(), and qmcplusplus::floor().

205  {
206  //cart2unit
207  TinyVector<T, 3> ar(displ[0] * g00 + displ[1] * g10 + displ[2] * g20,
208  displ[0] * g01 + displ[1] * g11 + displ[2] * g21,
209  displ[0] * g02 + displ[1] * g12 + displ[2] * g22);
210  ar[0] = -std::floor(ar[0]);
211  ar[1] = -std::floor(ar[1]);
212  ar[2] = -std::floor(ar[2]);
213  displ += ar[0] * rb[0] + ar[1] * rb[1] + ar[2] * rb[2];
214  T rmin2 = dot(displ, displ);
215  int imin = 0;
216  for (int i = 1; i < corners.size(); ++i)
217  {
218  TinyVector<T, 3> tv = displ + corners[i];
219  T r2 = dot(tv, tv);
220  if (r2 < rmin2)
221  {
222  rmin2 = r2;
223  imin = i;
224  }
225  }
226  if (imin > 0)
227  displ += corners[imin];
228  return rmin2;
229  }
std::vector< TinyVector< T, 3 > > corners
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
TinyVector< TinyVector< T, 3 >, 3 > rb
MakeReturn< UnaryNode< FnFloor, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t floor(const Vector< T1, C1 > &l)

◆ apply_bc() [2/3]

void apply_bc ( std::vector< TinyVector< T, 3 >> &  dr,
std::vector< T > &  r,
std::vector< T > &  rinv 
) const
inline

Definition at line 231 of file ParticleBConds3D.h.

References DTD_BConds< T, D, SC >::apply_bc(), qmcplusplus::simd::inv(), qmcplusplus::n, and qmcplusplus::simd::sqrt().

232  {
233  const int n = dr.size();
234  for (int i = 0; i < n; ++i)
235  rinv[i] = apply_bc(dr[i]);
236  simd::sqrt(&rinv[0], &r[0], n);
237  simd::inv(&r[0], &rinv[0], n);
238  }
T apply_bc(TinyVector< T, 3 > &displ) const
apply BC to a displacement vector a and return the minimum-image distance
void inv(const T *restrict in, T *restrict out, int n)
Definition: vmath.hpp:65
void sqrt(T *restrict inout, SIZET n)
Definition: vmath.hpp:52

◆ apply_bc() [3/3]

void apply_bc ( std::vector< TinyVector< T, 3 >> &  dr,
std::vector< T > &  r 
) const
inline

Definition at line 240 of file ParticleBConds3D.h.

References DTD_BConds< T, D, SC >::apply_bc().

241  {
242  for (int i = 0; i < dr.size(); ++i)
243  r[i] = apply_bc(dr[i]);
244  }
T apply_bc(TinyVector< T, 3 > &displ) const
apply BC to a displacement vector a and return the minimum-image distance

◆ evaluate_rsquared()

void evaluate_rsquared ( TinyVector< T, 3 > *restrict  dr,
T *restrict  rr,
int  n 
)
inline

Definition at line 246 of file ParticleBConds3D.h.

References DTD_BConds< T, D, SC >::apply_bc(), and qmcplusplus::n.

247  {
248  for (int i = 0; i < n; ++i)
249  rr[i] = apply_bc(dr[i]);
250  }
T apply_bc(TinyVector< T, 3 > &displ) const
apply BC to a displacement vector a and return the minimum-image distance

Member Data Documentation

◆ corners

std::vector<TinyVector<T, 3> > corners

Definition at line 164 of file ParticleBConds3D.h.

◆ g00

T g00

Definition at line 162 of file ParticleBConds3D.h.

◆ g01

T g01

Definition at line 162 of file ParticleBConds3D.h.

◆ g02

T g02

Definition at line 162 of file ParticleBConds3D.h.

◆ g10

T g10

Definition at line 162 of file ParticleBConds3D.h.

◆ g11

T g11

Definition at line 162 of file ParticleBConds3D.h.

◆ g12

T g12

Definition at line 162 of file ParticleBConds3D.h.

◆ g20

T g20

Definition at line 162 of file ParticleBConds3D.h.

◆ g21

T g21

Definition at line 162 of file ParticleBConds3D.h.

◆ g22

T g22

Definition at line 162 of file ParticleBConds3D.h.

◆ rb

TinyVector<TinyVector<T, 3>, 3> rb

Definition at line 163 of file ParticleBConds3D.h.


The documentation for this struct was generated from the following file: