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

specialization for a slab, general cell More...

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

Public Member Functions

 DTD_BConds (const CrystalLattice< T, 3 > &lat)
 
apply_bc (TinyVector< T, 3 > &displ) const
 
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
 
g01
 
g11
 
TinyVector< TinyVector< T, 3 >, 3 > rb
 
std::vector< TinyVector< T, 3 > > corners
 

Detailed Description

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

specialization for a slab, general cell

Definition at line 257 of file ParticleBConds3D.h.

Constructor & Destructor Documentation

◆ DTD_BConds()

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

Definition at line 263 of file ParticleBConds3D.h.

References CrystalLattice< T, D >::a(), and CrystalLattice< T, D >::G.

264  {
265  rb[0] = lat.a(0);
266  rb[1] = lat.a(1);
267  rb[2] = lat.a(2); //rb[2]=0.0;
268  g00 = lat.G(0);
269  g10 = lat.G(3);
270  g01 = lat.G(1);
271  g11 = lat.G(4);
272  T minusone = -1.0;
273  corners.resize(4);
274  corners[0] = 0.0;
275  corners[1] = minusone * (rb[0]);
276  corners[2] = minusone * (rb[1]);
277  corners[3] = minusone * (rb[0] + rb[1]);
278  }
std::vector< TinyVector< T, 3 > > corners
TinyVector< TinyVector< T, 3 >, 3 > rb

Member Function Documentation

◆ apply_bc() [1/3]

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

Definition at line 280 of file ParticleBConds3D.h.

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

281  {
282  //cart2unit
283  TinyVector<T, 2> ar(displ[0] * g00 + displ[1] * g10, displ[0] * g01 + displ[1] * g11);
284  //put them in the box
285  ar[0] -= std::floor(ar[0]);
286  ar[1] -= std::floor(ar[1]);
287  displ += ar[0] * rb[0] + ar[1] * rb[1];
288  T rmin2 = dot(displ, displ);
289  int imin = 0;
290  for (int i = 1; i < corners.size(); ++i)
291  {
292  TinyVector<T, 3> tv = displ + corners[i];
293  T r2 = dot(tv, tv);
294  if (r2 < rmin2)
295  {
296  rmin2 = r2;
297  imin = i;
298  }
299  }
300  if (imin > 0)
301  displ += corners[imin];
302  return rmin2;
303  }
std::vector< TinyVector< T, 3 > > corners
TinyVector< TinyVector< T, 3 >, 3 > rb
Tensor< typename BinaryReturn< T1, T2, OpMultiply >::Type_t, D > dot(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs)
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 305 of file ParticleBConds3D.h.

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

306  {
307  const int n = dr.size();
308  for (int i = 0; i < n; ++i)
309  rinv[i] = apply_bc(dr[i]);
310  simd::sqrt(&rinv[0], &r[0], n);
311  simd::inv(&r[0], &rinv[0], n);
312  }
T apply_bc(TinyVector< T, 3 > &displ) const
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 314 of file ParticleBConds3D.h.

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

315  {
316  for (int i = 0; i < dr.size(); ++i)
317  r[i] = apply_bc(dr[i]);
318  }
T apply_bc(TinyVector< T, 3 > &displ) const

◆ evaluate_rsquared()

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

Definition at line 320 of file ParticleBConds3D.h.

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

321  {
322  for (int i = 0; i < n; ++i)
323  rr[i] = apply_bc(dr[i]);
324  }
T apply_bc(TinyVector< T, 3 > &displ) const

Member Data Documentation

◆ corners

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

Definition at line 261 of file ParticleBConds3D.h.

◆ g00

T g00

Definition at line 259 of file ParticleBConds3D.h.

◆ g01

T g01

Definition at line 259 of file ParticleBConds3D.h.

◆ g10

T g10

Definition at line 259 of file ParticleBConds3D.h.

◆ g11

T g11

Definition at line 259 of file ParticleBConds3D.h.

◆ rb

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

Definition at line 260 of file ParticleBConds3D.h.


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