QMCPACK
ApplyBConds< ParticleAttrib< TinyVector< T, 3 > >, Tensor< T, 3 >, 3 > Struct Template Reference
+ Collaboration diagram for ApplyBConds< ParticleAttrib< TinyVector< T, 3 > >, Tensor< T, 3 >, 3 >:

Public Types

using Array_t = ParticleAttrib< TinyVector< T, 3 > >
 
using Component_t = typename Array_t::Type_t
 
using Transformer_t = Tensor< T, 3 >
 

Static Public Member Functions

static void Cart2Cart (const Array_t &pin, const Transformer_t &G, const Transformer_t &R, Array_t &pout, int first, int last)
 
static void Cart2Unit (const Array_t &pin, const Transformer_t &G, Array_t &pout, int first, int last)
 
static void Unit2Cart (const Array_t &pin, const Transformer_t &R, Array_t &pout, int first, int last)
 
static void Unit2Unit (const Array_t &pin, Array_t &pout, int first, int last)
 
static void Unit2Unit (Array_t &pinout, int first, int last)
 
static void Cart2Cart (Array_t &pinout, const Transformer_t &G, const Transformer_t &R, int first, int last)
 
static Component_t Unit2Unit (const Component_t &pos)
 
static Component_t Cart2Unit (const Component_t &pos, const Transformer_t &G)
 
static Component_t Unit2Cart (const Component_t &pos, const Transformer_t &R)
 
static Component_t Cart2Cart (const Component_t &pos, const Transformer_t &G, const Transformer_t &R)
 

Detailed Description

template<class T>
struct qmcplusplus::ApplyBConds< ParticleAttrib< TinyVector< T, 3 > >, Tensor< T, 3 >, 3 >

Definition at line 185 of file FastParticleOperators.h.

Member Typedef Documentation

◆ Array_t

Definition at line 187 of file FastParticleOperators.h.

◆ Component_t

using Component_t = typename Array_t::Type_t

Definition at line 188 of file FastParticleOperators.h.

◆ Transformer_t

using Transformer_t = Tensor<T, 3>

Definition at line 189 of file FastParticleOperators.h.

Member Function Documentation

◆ Cart2Cart() [1/3]

static void Cart2Cart ( const Array_t pin,
const Transformer_t G,
const Transformer_t R,
Array_t pout,
int  first,
int  last 
)
inlinestatic

Definition at line 191 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

197  {
199  T g00 = G[0], g01 = G[1], g02 = G[2], g10 = G[3], g11 = G[4], g12 = G[5], g20 = G[6], g21 = G[7], g22 = G[8];
200  T r00 = R[0], r01 = R[1], r02 = R[2], r10 = R[3], r11 = R[4], r12 = R[5], r20 = R[6], r21 = R[7], r22 = R[8];
201 #pragma ivdep
202  for (int i = first; i < last; i++)
203  {
204  T x(pin[i][0] * g00 + pin[i][1] * g10 + pin[i][2] * g20);
205  T y(pin[i][0] * g01 + pin[i][1] * g11 + pin[i][2] * g21);
206  T z(pin[i][0] * g02 + pin[i][1] * g12 + pin[i][2] * g22);
207  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
208  pout[i][0] = x * r00 + y * r10 + z * r20;
209  pout[i][1] = x * r01 + y * r11 + z * r21;
210  pout[i][2] = x * r02 + y * r12 + z * r22;
211  }
212  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Cart2Cart() [2/3]

static void Cart2Cart ( Array_t pinout,
const Transformer_t G,
const Transformer_t R,
int  first,
int  last 
)
inlinestatic

Definition at line 274 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

275  {
277  T g00 = G[0], g01 = G[1], g02 = G[2], g10 = G[3], g11 = G[4], g12 = G[5], g20 = G[6], g21 = G[7], g22 = G[8];
278  T r00 = R[0], r01 = R[1], r02 = R[2], r10 = R[3], r11 = R[4], r12 = R[5], r20 = R[6], r21 = R[7], r22 = R[8];
279 #pragma ivdep
280  for (int i = first; i < last; i++)
281  {
282  T x(pinout[i][0] * g00 + pinout[i][1] * g10 + pinout[i][2] * g20);
283  T y(pinout[i][0] * g01 + pinout[i][1] * g11 + pinout[i][2] * g21);
284  T z(pinout[i][0] * g02 + pinout[i][1] * g12 + pinout[i][2] * g22);
285  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
286  pinout[i][0] = x * r00 + y * r10 + z * r20;
287  pinout[i][1] = x * r01 + y * r11 + z * r21;
288  pinout[i][2] = x * r02 + y * r12 + z * r22;
289  }
290  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Cart2Cart() [3/3]

static Component_t Cart2Cart ( const Component_t pos,
const Transformer_t G,
const Transformer_t R 
)
inlinestatic

Definition at line 317 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

318  {
320  T x(pos[0] * G[0] + pos[1] * G[3] + pos[2] * G[6]), y(pos[0] * G[1] + pos[1] * G[4] + pos[2] * G[7]),
321  z(pos[0] * G[2] + pos[1] * G[5] + pos[2] * G[8]);
322  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
323  return Component_t(x * R[0] + y * R[3] + z * R[6], x * R[1] + y * R[4] + z * R[7], x * R[2] + y * R[5] + z * R[8]);
324  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Cart2Unit() [1/2]

static void Cart2Unit ( const Array_t pin,
const Transformer_t G,
Array_t pout,
int  first,
int  last 
)
inlinestatic

Definition at line 214 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

215  {
217  T g00 = G[0], g01 = G[1], g02 = G[2], g10 = G[3], g11 = G[4], g12 = G[5], g20 = G[6], g21 = G[7], g22 = G[8];
218 #pragma ivdep
219  for (int i = first; i < last; i++)
220  {
221  T x(pin[i][0] * g00 + pin[i][1] * g10 + pin[i][2] * g20);
222  T y(pin[i][0] * g01 + pin[i][1] * g11 + pin[i][2] * g21);
223  T z(pin[i][0] * g02 + pin[i][1] * g12 + pin[i][2] * g22);
224  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
225  pout[i][0] = x;
226  pout[i][1] = y;
227  pout[i][2] = z;
228  }
229  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Cart2Unit() [2/2]

static Component_t Cart2Unit ( const Component_t pos,
const Transformer_t G 
)
inlinestatic

Definition at line 300 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

301  {
303  T x(pos[0] * G[0] + pos[1] * G[3] + pos[2] * G[6]), y(pos[0] * G[1] + pos[1] * G[4] + pos[2] * G[7]),
304  z(pos[0] * G[2] + pos[1] * G[5] + pos[2] * G[8]);
305  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
306  return Component_t(x, y, z);
307  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Unit2Cart() [1/2]

static void Unit2Cart ( const Array_t pin,
const Transformer_t R,
Array_t pout,
int  first,
int  last 
)
inlinestatic

Definition at line 231 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

232  {
234  T r00 = R[0], r01 = R[1], r02 = R[2], r10 = R[3], r11 = R[4], r12 = R[5], r20 = R[6], r21 = R[7], r22 = R[8];
235 #pragma ivdep
236  for (int i = first; i < last; i++)
237  {
238  T x(pin[i][0]), y(pin[i][1]), z(pin[i][2]);
239  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
240  pout[i][0] = x * r00 + y * r10 + z * r20;
241  pout[i][1] = x * r01 + y * r11 + z * r21;
242  pout[i][2] = x * r02 + y * r12 + z * r22;
243  }
244  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Unit2Cart() [2/2]

static Component_t Unit2Cart ( const Component_t pos,
const Transformer_t R 
)
inlinestatic

Definition at line 309 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

310  {
312  T x(pos[0]), y(pos[1]), z(pos[2]);
313  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
314  return Component_t(x * R[0] + y * R[3] + z * R[6], x * R[1] + y * R[4] + z * R[7], x * R[2] + y * R[5] + z * R[8]);
315  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Unit2Unit() [1/3]

static void Unit2Unit ( const Array_t pin,
Array_t pout,
int  first,
int  last 
)
inlinestatic

Definition at line 246 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

247  {
249 #pragma ivdep
250  for (int i = first; i < last; i++)
251  {
252  T x(pin[i][0]), y(pin[i][1]), z(pin[i][2]);
253  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
254  pout[i][0] = x;
255  pout[i][1] = y;
256  pout[i][2] = z;
257  }
258  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Unit2Unit() [2/3]

static void Unit2Unit ( Array_t pinout,
int  first,
int  last 
)
inlinestatic

Definition at line 260 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

261  {
263 #pragma ivdep
264  for (int i = first; i < last; i++)
265  {
266  T x(pinout[i][0]), y(pinout[i][1]), z(pinout[i][2]);
267  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
268  pinout[i][0] = x;
269  pinout[i][1] = y;
270  pinout[i][2] = z;
271  }
272  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

◆ Unit2Unit() [3/3]

static Component_t Unit2Unit ( const Component_t pos)
inlinestatic

Definition at line 292 of file FastParticleOperators.h.

References SUPERCELL_BOUNDARY_LIMITS, and THREE_DIM_BOUNDARY_BLOCK.

293  {
295  T x(pos[0]), y(pos[1]), z(pos[2]);
296  THREE_DIM_BOUNDARY_BLOCK(x, y, z, epsilon, plus_one);
297  return TinyVector<T, 3>(x, y, z);
298  }
#define SUPERCELL_BOUNDARY_LIMITS(T)
#define THREE_DIM_BOUNDARY_BLOCK(X, Y, Z, EPS, PLUSONE)

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