20 Lattice(
void) : a1(0,0,0), a2(0,0,0), a3(0,0,0),
21 b1(0,0,0), b2(0,0,0), b3(0,0,0),
22 o(0,0,0), p1(0), p2(0), p3(0) {};
27 return 9 * (k+1) + 3 * (j+1) + (i+1);
39 a1 = A; a2 = B; a3 = C; o =
Origin;
43 if ( ! p1 ) a1 =
Vector(1.0,0.0,0.0);
47 if ( fabs(e_z * u1) < 0.9 ) { a2 = cross(e_z,a1); }
48 else { a2 = cross(
Vector(1.0,0.0,0.0),a1); }
55 if (
volume() < 0.0 ) a3 *= -1.0;
79 return (o + a1*s.
x + a2*s.
y + a3*s.
z);
86 return Vector(b1*p,b2*p,b3*p);
91 return (f.
x*b1 + f.
y*b2 + f.
z*b3);
139 return ( data + t.
i*a1 + t.
j*a2 + t.
k*a3 );
145 return ( data - t.
i*a1 - t.
j*a2 - t.
k*a3 );
151 Vector diff = pos1 - pos2;
159 #ifdef ARCH_POWERPC //Prevents stack temporaries 163 result.
x -= a1.
x *fval;
164 result.
y -= a1.
y *fval;
165 result.
z -= a1.
z *fval;
169 result.
x -= a2.
x * fval;
170 result.
y -= a2.
y * fval;
171 result.
z -= a2.
z * fval;
175 result.
x -= a3.
x * fval;
176 result.
y -= a3.
y * fval;
177 result.
z -= a3.
z * fval;
184 diff.x -= f1*a1.
x + f2*a2.
x + f3*a3.
x;
185 diff.y -= f1*a1.
y + f2*a2.
y + f3*a3.
y;
186 diff.z -= f1*a1.
z + f2*a2.
z + f3*a3.
z;
194 Vector diff = pos1 - pos2;
205 Vector diff = pos1 - pos2;
243 for (
int i1=-p1; i1<=p1; ++i1 ) {
244 for (
int i2 =-p2; i2<=p2; ++i2 ) {
245 for (
int i3 =-p3; i3<=p3; ++i3 ) {
246 Vector newresult = i1*a1+i2*a2+i3*a3;
247 BigReal newdist = (diff+newresult).length2();
248 if ( newdist < dist ) {
255 return result0 + result;
260 return ( (i%3-1) * a1 + ((i/3)%3-1) * a2 + (i/9-1) * a3 );
274 return ( ! ( a1.
y || a1.
z || a2.
x || a2.
z || a3.
x || a3.
y ) );
295 return ( p1 && p2 && p3 ? cross(a1,a2) * a3 : 0.0 );
299 return (a1 == other.a1) &&
bool isEqual(const Lattice &other) const
NAMD_HOST_DEVICE void rescale(Tensor factor)
NAMD_HOST_DEVICE Vector c() const
NAMD_HOST_DEVICE void rescale(Position &p, Tensor factor) const
static NAMD_HOST_DEVICE int index(int i=0, int j=0, int k=0)
NAMD_HOST_DEVICE Position reverse_transform(Position data, const Transform &t) const
NAMD_HOST_DEVICE int c_p() const
NAMD_HOST_DEVICE Position unscale(ScaledPosition s) const
NAMD_HOST_DEVICE int orthogonal() const
NAMD_HOST_DEVICE int b_p() const
static NAMD_HOST_DEVICE int offset_b(int i)
NAMD_HOST_DEVICE BigReal length(void) const
NAMD_HOST_DEVICE Position apply_transform(Position data, const Transform &t) const
static NAMD_HOST_DEVICE int offset_c(int i)
NAMD_HOST_DEVICE ScaledPosition scale(Position p) const
NAMD_HOST_DEVICE BigReal length2(void) const
NAMD_HOST_DEVICE Vector wrap_delta_scaled(const Position &pos1, const Position &pos2) const
NAMD_HOST_DEVICE BigReal volume(void) const
NAMD_HOST_DEVICE int a_p() const
NAMD_HOST_DEVICE Vector a_r() const
NAMD_HOST_DEVICE Vector b_r() const
NAMD_HOST_DEVICE Position nearest(Position data, ScaledPosition ref) const
NAMD_HOST_DEVICE Vector offset(int i) const
NAMD_HOST_DEVICE Vector c_r() const
NAMD_HOST_DEVICE Vector b() const
NAMD_HOST_DEVICE Vector wrap_delta_scaled_fast(const Position &pos1, const Position &pos2) const
static NAMD_HOST_DEVICE int offset_a(int i)
NAMD_HOST_DEVICE Vector delta(const Position &pos1) const
NAMD_HOST_DEVICE Vector wrap_nearest_delta(Position pos1) const
NAMD_HOST_DEVICE Vector delta_from_diff(const Position &diff_in) const
NAMD_HOST_DEVICE Vector a() const
NAMD_HOST_DEVICE Vector wrap_delta(const Position &pos1) const
NAMD_HOST_DEVICE Vector origin() const
NAMD_HOST_DEVICE Vector scale_force(Vector f) const
NAMD_HOST_DEVICE Vector delta(const Position &pos1, const Position &pos2) const
NAMD_HOST_DEVICE Position nearest(Position data, ScaledPosition ref, Transform *t) const