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

Namespaces

namespace  cfg
namespace  domain
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 102 of file simd_distance.hpp.

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