NAMD
Public Member Functions | Static Public Member Functions | List of all members
Lattice Class Reference

#include <Lattice.h>

Public Member Functions

 Lattice (void)
 
NAMD_HOST_DEVICE void set (Vector A, Vector B, Vector C)
 
NAMD_HOST_DEVICE void set (Vector A, Vector B, Vector C, Position Origin)
 
NAMD_HOST_DEVICE void rescale (Tensor factor)
 
NAMD_HOST_DEVICE void rescale (Position &p, Tensor factor) const
 
NAMD_HOST_DEVICE Position unscale (ScaledPosition s) const
 
NAMD_HOST_DEVICE ScaledPosition scale (Position p) const
 
NAMD_HOST_DEVICE Vector scale_force (Vector f) const
 
NAMD_HOST_DEVICE Position nearest (Position data, ScaledPosition ref) const
 
NAMD_HOST_DEVICE Position nearest (Position data, ScaledPosition ref, Transform *t) const
 
NAMD_HOST_DEVICE Position apply_transform (Position data, const Transform &t) const
 
NAMD_HOST_DEVICE Position reverse_transform (Position data, const Transform &t) const
 
NAMD_HOST_DEVICE Vector delta (const Position &pos1, const Position &pos2) const
 
NAMD_HOST_DEVICE Vector delta_from_diff (const Position &diff_in) const
 
NAMD_HOST_DEVICE Vector wrap_delta_scaled (const Position &pos1, const Position &pos2) const
 
NAMD_HOST_DEVICE Vector wrap_delta_scaled_fast (const Position &pos1, const Position &pos2) const
 
NAMD_HOST_DEVICE Vector delta (const Position &pos1) const
 
NAMD_HOST_DEVICE Vector wrap_delta (const Position &pos1) const
 
NAMD_HOST_DEVICE Vector wrap_nearest_delta (Position pos1) const
 
NAMD_HOST_DEVICE Vector offset (int i) const
 
NAMD_HOST_DEVICE Vector a () const
 
NAMD_HOST_DEVICE Vector b () const
 
NAMD_HOST_DEVICE Vector c () const
 
NAMD_HOST_DEVICE int orthogonal () const
 
NAMD_HOST_DEVICE Vector origin () const
 
NAMD_HOST_DEVICE Vector a_r () const
 
NAMD_HOST_DEVICE Vector b_r () const
 
NAMD_HOST_DEVICE Vector c_r () const
 
NAMD_HOST_DEVICE int a_p () const
 
NAMD_HOST_DEVICE int b_p () const
 
NAMD_HOST_DEVICE int c_p () const
 
NAMD_HOST_DEVICE BigReal volume (void) const
 
bool isEqual (const Lattice &other) const
 

Static Public Member Functions

static NAMD_HOST_DEVICE int index (int i=0, int j=0, int k=0)
 
static NAMD_HOST_DEVICE int offset_a (int i)
 
static NAMD_HOST_DEVICE int offset_b (int i)
 
static NAMD_HOST_DEVICE int offset_c (int i)
 

Detailed Description

Definition at line 17 of file Lattice.h.

Constructor & Destructor Documentation

◆ Lattice()

Lattice::Lattice ( void  )
inline

Definition at line 20 of file Lattice.h.

20  : 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) {};

Member Function Documentation

◆ a()

NAMD_HOST_DEVICE Vector Lattice::a ( ) const
inline

◆ a_p()

NAMD_HOST_DEVICE int Lattice::a_p ( ) const
inline

◆ a_r()

NAMD_HOST_DEVICE Vector Lattice::a_r ( ) const
inline

◆ apply_transform()

NAMD_HOST_DEVICE Position Lattice::apply_transform ( Position  data,
const Transform t 
) const
inline

Definition at line 137 of file Lattice.h.

References Transform::i, Transform::j, and Transform::k.

Referenced by Sequencer::berendsenPressure(), WorkDistrib::createAtomLists(), HomePatch::depositMigration(), Sequencer::langevinPiston(), PatchMgr::moveAllBy(), and PatchMgr::moveAtom().

138  {
139  return ( data + t.i*a1 + t.j*a2 + t.k*a3 );
140  }
int8 i
Definition: NamdTypes.h:44
int8 j
Definition: NamdTypes.h:44
int8 k
Definition: NamdTypes.h:44

◆ b()

NAMD_HOST_DEVICE Vector Lattice::b ( ) const
inline

◆ b_p()

NAMD_HOST_DEVICE int Lattice::b_p ( ) const
inline

◆ b_r()

NAMD_HOST_DEVICE Vector Lattice::b_r ( ) const
inline

◆ c()

NAMD_HOST_DEVICE Vector Lattice::c ( ) const
inline

◆ c_p()

NAMD_HOST_DEVICE int Lattice::c_p ( ) const
inline

◆ c_r()

NAMD_HOST_DEVICE Vector Lattice::c_r ( ) const
inline

◆ delta() [1/2]

NAMD_HOST_DEVICE Vector Lattice::delta ( const Position pos1,
const Position pos2 
) const
inline

◆ delta() [2/2]

NAMD_HOST_DEVICE Vector Lattice::delta ( const Position pos1) const
inline

Definition at line 211 of file Lattice.h.

References namdnearbyint.

212  {
213  Vector diff = pos1 - o;
214  Vector result = diff;
215  if ( p1 ) result -= a1*namdnearbyint(b1*diff);
216  if ( p2 ) result -= a2*namdnearbyint(b2*diff);
217  if ( p3 ) result -= a3*namdnearbyint(b3*diff);
218  return result;
219  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72

◆ delta_from_diff()

NAMD_HOST_DEVICE Vector Lattice::delta_from_diff ( const Position diff_in) const
inline

Definition at line 156 of file Lattice.h.

References namdnearbyint, Vector::x, Vector::y, and Vector::z.

Referenced by delta().

157  {
158  Vector diff = diff_in;
159 #ifdef ARCH_POWERPC //Prevents stack temporaries
160  Vector result = diff;
161  if ( p1 ) {
162  BigReal fval = namdnearbyint(b1*diff);
163  result.x -= a1.x *fval;
164  result.y -= a1.y *fval;
165  result.z -= a1.z *fval;
166  }
167  if ( p2 ) {
168  BigReal fval = namdnearbyint(b2*diff);
169  result.x -= a2.x * fval;
170  result.y -= a2.y * fval;
171  result.z -= a2.z * fval;
172  }
173  if ( p3 ) {
174  BigReal fval = namdnearbyint(b3*diff);
175  result.x -= a3.x * fval;
176  result.y -= a3.y * fval;
177  result.z -= a3.z * fval;
178  }
179  return result;
180 #else
181  BigReal f1 = p1 ? namdnearbyint(b1*diff) : 0.;
182  BigReal f2 = p2 ? namdnearbyint(b2*diff) : 0.;
183  BigReal f3 = p3 ? namdnearbyint(b3*diff) : 0.;
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;
187  return diff;
188 #endif
189  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72
BigReal z
Definition: Vector.h:74
BigReal x
Definition: Vector.h:74
BigReal y
Definition: Vector.h:74
double BigReal
Definition: common.h:123

◆ index()

static NAMD_HOST_DEVICE int Lattice::index ( int  i = 0,
int  j = 0,
int  k = 0 
)
inlinestatic

Definition at line 25 of file Lattice.h.

Referenced by PatchMap::downstreamNeighbors(), PatchMap::getPatchesInOctet(), PatchMap::oneAwayNeighbors(), PatchMap::oneOrTwoAwayNeighbors(), and PatchMap::upstreamNeighbors().

26  {
27  return 9 * (k+1) + 3 * (j+1) + (i+1);
28  }

◆ isEqual()

bool Lattice::isEqual ( const Lattice other) const
inline

Definition at line 298 of file Lattice.h.

Referenced by CudaPmeOneDevice::checkPatchLevelLatticeCompatibilityAndComputeOffsets().

298  {
299  return (a1 == other.a1) &&
300  (a2 == other.a2) &&
301  (a3 == other.a3) &&
302  (o == other.o);
303  }

◆ nearest() [1/2]

NAMD_HOST_DEVICE Position Lattice::nearest ( Position  data,
ScaledPosition  ref 
) const
inline

Definition at line 95 of file Lattice.h.

References namdnearbyint, scale(), unscale(), Vector::x, Vector::y, and Vector::z.

Referenced by WorkDistrib::createAtomLists(), and HomePatch::depositMigration().

96  {
97  ScaledPosition sn = scale(data);
98  if ( p1 ) {
99  sn.x -= namdnearbyint(sn.x - ref.x);
100  }
101  if ( p2 ) {
102  sn.y -= namdnearbyint(sn.y - ref.y);
103  }
104  if ( p3 ) {
105  sn.z -= namdnearbyint(sn.z - ref.z);
106  }
107  return unscale(sn);
108  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72
NAMD_HOST_DEVICE Position unscale(ScaledPosition s) const
Definition: Lattice.h:77
BigReal z
Definition: Vector.h:74
NAMD_HOST_DEVICE ScaledPosition scale(Position p) const
Definition: Lattice.h:83
BigReal x
Definition: Vector.h:74
BigReal y
Definition: Vector.h:74

◆ nearest() [2/2]

NAMD_HOST_DEVICE Position Lattice::nearest ( Position  data,
ScaledPosition  ref,
Transform t 
) const
inline

Definition at line 112 of file Lattice.h.

References Transform::i, Transform::j, Transform::k, namdnearbyint, scale(), unscale(), Vector::x, Vector::y, and Vector::z.

113  {
114  ScaledPosition sn = scale(data);
115  if ( p1 ) {
116  BigReal tmp = sn.x - ref.x;
117  BigReal rit = namdnearbyint(tmp);
118  sn.x -= rit;
119  t->i -= (int) rit;
120  }
121  if ( p2 ) {
122  BigReal tmp = sn.y - ref.y;
123  BigReal rit = namdnearbyint(tmp);
124  sn.y -= rit;
125  t->j -= (int) rit;
126  }
127  if ( p3 ) {
128  BigReal tmp = sn.z - ref.z;
129  BigReal rit = namdnearbyint(tmp);
130  sn.z -= rit;
131  t->k -= (int) rit;
132  }
133  return unscale(sn);
134  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72
NAMD_HOST_DEVICE Position unscale(ScaledPosition s) const
Definition: Lattice.h:77
BigReal z
Definition: Vector.h:74
int8 i
Definition: NamdTypes.h:44
int8 j
Definition: NamdTypes.h:44
NAMD_HOST_DEVICE ScaledPosition scale(Position p) const
Definition: Lattice.h:83
BigReal x
Definition: Vector.h:74
BigReal y
Definition: Vector.h:74
int8 k
Definition: NamdTypes.h:44
double BigReal
Definition: common.h:123

◆ offset()

NAMD_HOST_DEVICE Vector Lattice::offset ( int  i) const
inline

Definition at line 258 of file Lattice.h.

Referenced by ComputeNonbondedPair::doForce().

259  {
260  return ( (i%3-1) * a1 + ((i/3)%3-1) * a2 + (i/9-1) * a3 );
261  }

◆ offset_a()

static NAMD_HOST_DEVICE int Lattice::offset_a ( int  i)
inlinestatic

Definition at line 263 of file Lattice.h.

Referenced by registerUserEventsForAllComputeObjs().

263 { return (i%3-1); }

◆ offset_b()

static NAMD_HOST_DEVICE int Lattice::offset_b ( int  i)
inlinestatic

Definition at line 264 of file Lattice.h.

Referenced by registerUserEventsForAllComputeObjs().

264 { return ((i/3)%3-1); }

◆ offset_c()

static NAMD_HOST_DEVICE int Lattice::offset_c ( int  i)
inlinestatic

Definition at line 265 of file Lattice.h.

Referenced by registerUserEventsForAllComputeObjs().

265 { return (i/9-1); }

◆ origin()

NAMD_HOST_DEVICE Vector Lattice::origin ( ) const
inline

◆ orthogonal()

NAMD_HOST_DEVICE int Lattice::orthogonal ( ) const
inline

Definition at line 273 of file Lattice.h.

References Vector::x, Vector::y, and Vector::z.

Referenced by colvarproxy_namd::calculate(), LjPmeKSpace::compute_energy(), and PmeKSpace::compute_energy().

273  {
274  return ( ! ( a1.y || a1.z || a2.x || a2.z || a3.x || a3.y ) );
275  }
BigReal z
Definition: Vector.h:74
BigReal x
Definition: Vector.h:74
BigReal y
Definition: Vector.h:74

◆ rescale() [1/2]

NAMD_HOST_DEVICE void Lattice::rescale ( Tensor  factor)
inline

◆ rescale() [2/2]

NAMD_HOST_DEVICE void Lattice::rescale ( Position p,
Tensor  factor 
) const
inline

Definition at line 69 of file Lattice.h.

70  {
71  p -= o;
72  p = factor * p;
73  p += o;
74  }

◆ reverse_transform()

NAMD_HOST_DEVICE Position Lattice::reverse_transform ( Position  data,
const Transform t 
) const
inline

◆ scale()

NAMD_HOST_DEVICE ScaledPosition Lattice::scale ( Position  p) const
inline

◆ scale_force()

NAMD_HOST_DEVICE Vector Lattice::scale_force ( Vector  f) const
inline

Definition at line 89 of file Lattice.h.

References Vector::x, Vector::y, and Vector::z.

90  {
91  return (f.x*b1 + f.y*b2 + f.z*b3); // calculating A^(-1)f for PME force contributions
92  }
BigReal z
Definition: Vector.h:74
BigReal x
Definition: Vector.h:74
BigReal y
Definition: Vector.h:74

◆ set() [1/2]

NAMD_HOST_DEVICE void Lattice::set ( Vector  A,
Vector  B,
Vector  C 
)
inline

Definition at line 31 of file Lattice.h.

Referenced by get_lattice_from_ts(), and SimParameters::readExtendedSystem().

32  {
33  set(A,B,C,o);
34  }

◆ set() [2/2]

NAMD_HOST_DEVICE void Lattice::set ( Vector  A,
Vector  B,
Vector  C,
Position  Origin 
)
inline

Definition at line 37 of file Lattice.h.

References Vector::length(), Vector::length2(), and volume().

38  {
39  a1 = A; a2 = B; a3 = C; o = Origin;
40  p1 = ( a1.length2() ? 1 : 0 );
41  p2 = ( a2.length2() ? 1 : 0 );
42  p3 = ( a3.length2() ? 1 : 0 );
43  if ( ! p1 ) a1 = Vector(1.0,0.0,0.0);
44  if ( ! p2 ) {
45  Vector u1 = a1 / a1.length();
46  Vector e_z(0.0,0.0,1.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); }
49  a2 /= a2.length();
50  }
51  if ( ! p3 ) {
52  a3 = cross(a1,a2);
53  a3 /= a3.length();
54  }
55  if ( volume() < 0.0 ) a3 *= -1.0;
56  recalculate();
57  }
Definition: Vector.h:72
NAMD_HOST_DEVICE BigReal length(void) const
Definition: Vector.h:202
AtomID Origin
Definition: ComputeQM.h:110
NAMD_HOST_DEVICE BigReal length2(void) const
Definition: Vector.h:206
NAMD_HOST_DEVICE BigReal volume(void) const
Definition: Lattice.h:293

◆ unscale()

NAMD_HOST_DEVICE Position Lattice::unscale ( ScaledPosition  s) const
inline

◆ volume()

NAMD_HOST_DEVICE BigReal Lattice::volume ( void  ) const
inline

◆ wrap_delta()

NAMD_HOST_DEVICE Vector Lattice::wrap_delta ( const Position pos1) const
inline

Definition at line 222 of file Lattice.h.

References namdnearbyint.

Referenced by ComputeEwald::doWork(), ParallelIOMgr::recvFinalClusterCoor(), wrap_coor_int(), wrap_coor_int_dcd_selection(), and GridforceGrid::wrap_position().

223  {
224  Vector diff = pos1 - o;
225  Vector result(0.,0.,0.);
226  if ( p1 ) result -= a1*namdnearbyint(b1*diff);
227  if ( p2 ) result -= a2*namdnearbyint(b2*diff);
228  if ( p3 ) result -= a3*namdnearbyint(b3*diff);
229  return result;
230  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72

◆ wrap_delta_scaled()

NAMD_HOST_DEVICE Vector Lattice::wrap_delta_scaled ( const Position pos1,
const Position pos2 
) const
inline

Definition at line 192 of file Lattice.h.

References namdnearbyint, Vector::x, Vector::y, and Vector::z.

193  {
194  Vector diff = pos1 - pos2;
195  Vector result(0.,0.,0.);
196 
197  if ( p1 ) result.x = -namdnearbyint(b1*diff);
198  if ( p2 ) result.y = -namdnearbyint(b2*diff);
199  if ( p3 ) result.z = -namdnearbyint(b3*diff);
200  return result;
201  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72

◆ wrap_delta_scaled_fast()

NAMD_HOST_DEVICE Vector Lattice::wrap_delta_scaled_fast ( const Position pos1,
const Position pos2 
) const
inline

Definition at line 203 of file Lattice.h.

References namdnearbyint.

204  {
205  Vector diff = pos1 - pos2;
206  Vector result(-namdnearbyint(b1*diff), -namdnearbyint(b2*diff), -namdnearbyint(b3*diff));
207  return result;
208  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72

◆ wrap_nearest_delta()

NAMD_HOST_DEVICE Vector Lattice::wrap_nearest_delta ( Position  pos1) const
inline

Definition at line 233 of file Lattice.h.

References Vector::length2(), and namdnearbyint.

Referenced by ParallelIOMgr::recvFinalClusterCoor(), wrap_coor_int(), and wrap_coor_int_dcd_selection().

234  {
235  Vector diff = pos1 - o;
236  Vector result0(0.,0.,0.);
237  if ( p1 ) result0 -= a1*namdnearbyint(b1*diff);
238  if ( p2 ) result0 -= a2*namdnearbyint(b2*diff);
239  if ( p3 ) result0 -= a3*namdnearbyint(b3*diff);
240  diff += result0;
241  BigReal dist = diff.length2();
242  Vector result(0.,0.,0.);
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 ) {
249  dist = newdist;
250  result = newresult;
251  }
252  }
253  }
254  }
255  return result0 + result;
256  }
#define namdnearbyint(x)
Definition: common.h:85
Definition: Vector.h:72
NAMD_HOST_DEVICE BigReal length2(void) const
Definition: Vector.h:206
double BigReal
Definition: common.h:123

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