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

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

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

Public Member Functions

 DTD_BConds (const CrystalLattice< T, 3 > &lat)
 
get_min_distance (TinyVector< T, 3 > &a) const
 evaluate the minimum distance More...
 
apply_bc (TinyVector< T, 3 > &displ) const
 apply BC to a displacement vector a and return the minimum-image distance More...
 
void convert2Cart (const T *restrict in, T *restrict out, int n) const
 out = prod (in ,lattice) More...
 
void convert2Unit (const T *restrict in, T *restrict out, int n) 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

r00
 
r10
 
r20
 
r01
 
r11
 
r21
 
r02
 
r12
 
r22
 
g00
 
g10
 
g20
 
g01
 
g11
 
g21
 
g02
 
g12
 
g22
 
r2max
 
std::vector< TinyVector< T, 3 > > nextcells
 

Detailed Description

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

specialization for a periodic 3D general cell

Slow method and not used unless one needs to check if faster methods fail

Definition at line 482 of file ParticleBConds3D.h.

Constructor & Destructor Documentation

◆ DTD_BConds()

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

Definition at line 489 of file ParticleBConds3D.h.

490  : r00(lat.R(0)),
491  r10(lat.R(3)),
492  r20(lat.R(6)),
493  r01(lat.R(1)),
494  r11(lat.R(4)),
495  r21(lat.R(7)),
496  r02(lat.R(2)),
497  r12(lat.R(5)),
498  r22(lat.R(8)),
499  g00(lat.G(0)),
500  g10(lat.G(3)),
501  g20(lat.G(6)),
502  g01(lat.G(1)),
503  g11(lat.G(4)),
504  g21(lat.G(7)),
505  g02(lat.G(2)),
506  g12(lat.G(5)),
507  g22(lat.G(8)),
508  r2max(lat.CellRadiusSq)
509  {
510  nextcells.resize(26);
511  int ic = 0;
512  for (int i = -1; i <= 1; ++i)
513  for (int j = -1; j <= 1; ++j)
514  for (int k = -1; k <= 1; ++k)
515  {
516  if (!(i || j || k))
517  continue; //exclude zero
518  nextcells[ic][0] = i * r00 + j * r10 + k * r20;
519  nextcells[ic][1] = i * r01 + j * r11 + k * r21;
520  nextcells[ic][2] = i * r02 + j * r12 + k * r22;
521  ++ic;
522  }
523  }
std::vector< TinyVector< T, 3 > > nextcells

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 563 of file ParticleBConds3D.h.

564  {
565  //cart2unit
566  TinyVector<T, 3> ar(displ[0] * g00 + displ[1] * g10 + displ[2] * g20,
567  displ[0] * g01 + displ[1] * g11 + displ[2] * g21,
568  displ[0] * g02 + displ[1] * g12 + displ[2] * g22);
569  //put them in the box
570  ar[0] -= round(ar[0]);
571  ar[1] -= round(ar[1]);
572  ar[2] -= round(ar[2]);
573  //unit2cart
574  displ[0] = ar[0] * r00 + ar[1] * r10 + ar[2] * r20;
575  displ[1] = ar[0] * r01 + ar[1] * r11 + ar[2] * r21;
576  displ[2] = ar[0] * r02 + ar[1] * r12 + ar[2] * r22;
577  //return |displ|^2 after checking the ghost cells
578  return get_min_distance(displ);
579  }
T get_min_distance(TinyVector< T, 3 > &a) const
evaluate the minimum distance

◆ 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 607 of file ParticleBConds3D.h.

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

608  {
609  const int n = dr.size();
610  for (int i = 0; i < n; ++i)
611  rinv[i] = apply_bc(dr[i]);
612  //using inline function but is not better
613  //T drnew[n*3];
614  //convert2Unit(&dr[0][0],drnew,n);
615  //for(int i=0; i<n*3;++i) drnew[i]-= round(drnew[i]);
616  //convert2Cart(drnew,&dr[0][0],n);
617  //for(int i=0; i<n; ++i) rinv[i]=get_min_distance(dr[i]);
618  simd::sqrt(&rinv[0], &r[0], n);
619  simd::inv(&r[0], &rinv[0], n);
620  }
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 622 of file ParticleBConds3D.h.

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

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

◆ convert2Cart()

void convert2Cart ( const T *restrict  in,
T *restrict  out,
int  n 
) const
inline

out = prod (in ,lattice)

Parameters
lattice3x3 tensor to for conversion, either CrystalLattice::R or CrystalLattice::G
instart address of input vectors, in[n][3]
outstart address of output vectors, out[n][3]
nnumber of 3d vectors

Definition at line 587 of file ParticleBConds3D.h.

References qmcplusplus::n.

588  {
589  for (int i = 0, i3 = 0; i < n; ++i, i3 += 3)
590  {
591  out[i3] = in[i3] * r00 + in[i3 + 1] * r10 + in[i3 + 2] * r20;
592  out[i3 + 1] = in[i3] * r01 + in[i3 + 1] * r11 + in[i3 + 2] * r21;
593  out[i3 + 2] = in[i3] * r02 + in[i3 + 1] * r12 + in[i3 + 2] * r22;
594  }
595  }

◆ convert2Unit()

void convert2Unit ( const T *restrict  in,
T *restrict  out,
int  n 
) const
inline

Definition at line 597 of file ParticleBConds3D.h.

References qmcplusplus::n.

598  {
599  for (int i = 0, i3 = 0; i < n; ++i, i3 += 3)
600  {
601  out[i3] = in[i3] * g00 + in[i3 + 1] * g10 + in[i3 + 2] * g20;
602  out[i3 + 1] = in[i3] * g01 + in[i3 + 1] * g11 + in[i3 + 2] * g21;
603  out[i3 + 2] = in[i3] * g02 + in[i3 + 1] * g12 + in[i3 + 2] * g22;
604  }
605  }

◆ evaluate_rsquared()

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

Definition at line 628 of file ParticleBConds3D.h.

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

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

◆ get_min_distance()

T get_min_distance ( TinyVector< T, 3 > &  a) const
inline

evaluate the minimum distance

Parameters
latlattice
adisplacement vector [-0.5,0.5)x[-0.5,0.5)x[-0.5,0.5)
r2maxsquare of the maximum cutoff
Returns
square of the minimum-image distance

Search the ghost cells to match Wigner-Seitz cell

Definition at line 533 of file ParticleBConds3D.h.

534  {
535  T d2 = a[0] * a[0] + a[1] * a[1] + a[2] * a[2];
536  if (d2 < r2max)
537  return d2;
538  else
539  {
540  T d2min = d2;
541  int ic = -1;
542  for (int i = 0; i < nextcells.size(); ++i)
543  {
544  TinyVector<T, 3> c(a + nextcells[i]);
545  d2 = c[0] * c[0] + c[1] * c[1] + c[2] * c[2];
546  if (d2 < d2min)
547  {
548  d2min = d2;
549  ic = i;
550  }
551  }
552  if (ic >= 0)
553  a += nextcells[ic];
554  return d2min;
555  }
556  }
std::vector< TinyVector< T, 3 > > nextcells

Member Data Documentation

◆ g00

T g00

Definition at line 485 of file ParticleBConds3D.h.

◆ g01

T g01

Definition at line 485 of file ParticleBConds3D.h.

◆ g02

T g02

Definition at line 485 of file ParticleBConds3D.h.

◆ g10

T g10

Definition at line 485 of file ParticleBConds3D.h.

◆ g11

T g11

Definition at line 485 of file ParticleBConds3D.h.

◆ g12

T g12

Definition at line 485 of file ParticleBConds3D.h.

◆ g20

T g20

Definition at line 485 of file ParticleBConds3D.h.

◆ g21

T g21

Definition at line 485 of file ParticleBConds3D.h.

◆ g22

T g22

Definition at line 485 of file ParticleBConds3D.h.

◆ nextcells

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

Definition at line 487 of file ParticleBConds3D.h.

◆ r00

T r00

Definition at line 484 of file ParticleBConds3D.h.

◆ r01

T r01

Definition at line 484 of file ParticleBConds3D.h.

◆ r02

T r02

Definition at line 484 of file ParticleBConds3D.h.

◆ r10

T r10

Definition at line 484 of file ParticleBConds3D.h.

◆ r11

T r11

Definition at line 484 of file ParticleBConds3D.h.

◆ r12

T r12

Definition at line 484 of file ParticleBConds3D.h.

◆ r20

T r20

Definition at line 484 of file ParticleBConds3D.h.

◆ r21

T r21

Definition at line 484 of file ParticleBConds3D.h.

◆ r22

T r22

Definition at line 484 of file ParticleBConds3D.h.

◆ r2max

T r2max

Definition at line 486 of file ParticleBConds3D.h.


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