Loading...
Searching...
No Matches
seams Namespace Reference

Namespaces

namespace  cfg
namespace  sphericart_ylm
namespace  steinhardt

Functions

void BatchPeriodicDistSq (const double *dx, const double *dy, const double *dz, double bx, double by, double bz, double *out, size_t n)

Function Documentation

◆ BatchPeriodicDistSq()

void seams::BatchPeriodicDistSq ( const double * dx,
const double * dy,
const double * dz,
double bx,
double by,
double bz,
double * out,
size_t n )
inline

Definition at line 101 of file simd_distance.hpp.

103 {
104#ifdef SEAMS_HAS_MINIMAGE
105 mi_dist2_ortho_diffs(dx, dy, dz, bx, by, bz, out, n);
106 return;
107#endif
108 // Matches the vectorised path: one reciprocal per axis for the whole batch
109 const double rbx = 1.0 / bx;
110 const double rby = 1.0 / by;
111 const double rbz = 1.0 / bz;
112 for (size_t i = 0; i < n; i++) {
113 double ddx = std::fabs(dx[i]);
114 double ddy = std::fabs(dy[i]);
115 double ddz = std::fabs(dz[i]);
116 ddx -= bx * std::round(ddx * rbx);
117 ddy -= by * std::round(ddy * rby);
118 ddz -= bz * std::round(ddz * rbz);
119 out[i] = ddx * ddx + ddy * ddy + ddz * ddz;
120 }
121}