Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members

Lattice Class Reference

#include <Lattice.h>

List of all members.

Public Member Functions

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

Static Public Member Functions

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


Constructor & Destructor Documentation

Lattice::Lattice void   )  [inline]
 

Definition at line 30 of file Lattice.h.

00030                 : a1(0,0,0), a2(0,0,0), a3(0,0,0),
00031                   b1(0,0,0), b2(0,0,0), b3(0,0,0),
00032                   o(0,0,0), p1(0), p2(0), p3(0) {};


Member Function Documentation

Vector Lattice::a  )  const [inline]
 

Definition at line 247 of file Lattice.h.

Referenced by HomePatch::doMarginCheck(), ComputeNonbondedCUDA::doWork(), GridforceFullMainGrid::initialize(), ComputePmeMgr::initialize(), ComputeMsmMgr::initialize(), OptPmeMgr::initialize_pencils(), ComputePmeMgr::initialize_pencils(), cr_sortop::operator()(), Controller::printEnergies(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), ComputeNonbondedCUDA::recvYieldDevice(), PatchMap::sizeGrid(), ComputeMsmMgr::update(), and Controller::writeExtendedSystemData().

00247 { return a1; }

int Lattice::a_p  )  const [inline]
 

Definition at line 268 of file Lattice.h.

Referenced by calc_fulldirect(), ComputeMsmMgr::initialize(), WorkDistrib::patchMapInit(), Controller::printEnergies(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), PatchMap::sizeGrid(), Node::startup(), Controller::writeExtendedSystemData(), and Controller::writeExtendedSystemLabels().

00268 { return p1; }

Vector Lattice::a_r  )  const [inline]
 

Definition at line 263 of file Lattice.h.

Referenced by HomePatch::doMarginCheck(), PDB::find_extremes(), ComputePmeMgr::initialize(), OptPmeMgr::initialize_pencils(), ComputePmeMgr::initialize_pencils(), WorkDistrib::patchMapInit(), ComputeMsmSerialMgr::recvCoord(), scale_coordinates(), scale_forces(), scale_n_copy_coordinates(), PatchMap::sizeGrid(), and ComputeMsmMgr::update().

00263 { return b1; }

Position Lattice::apply_transform Position  data,
const Transform t
const [inline]
 

Definition at line 142 of file Lattice.h.

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

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

00143   {
00144     return ( data + t.i*a1 + t.j*a2 + t.k*a3 );
00145   }

Vector Lattice::b  )  const [inline]
 

Definition at line 248 of file Lattice.h.

Referenced by HomePatch::doMarginCheck(), ComputeNonbondedCUDA::doWork(), GridforceFullMainGrid::initialize(), ComputeMsmMgr::initialize(), OptPmeMgr::initialize_pencils(), ComputePmeMgr::initialize_pencils(), cr_sortop::operator()(), Controller::printEnergies(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), ComputeNonbondedCUDA::recvYieldDevice(), PatchMap::sizeGrid(), ComputeMsmMgr::update(), and Controller::writeExtendedSystemData().

00248 { return a2; }

int Lattice::b_p  )  const [inline]
 

Definition at line 269 of file Lattice.h.

Referenced by calc_fulldirect(), ComputeMsmMgr::initialize(), WorkDistrib::patchMapInit(), Controller::printEnergies(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), PatchMap::sizeGrid(), Node::startup(), Controller::writeExtendedSystemData(), and Controller::writeExtendedSystemLabels().

00269 { return p2; }

Vector Lattice::b_r  )  const [inline]
 

Definition at line 264 of file Lattice.h.

Referenced by HomePatch::doMarginCheck(), PDB::find_extremes(), OptPmeMgr::initialize_pencils(), ComputePmeMgr::initialize_pencils(), WorkDistrib::patchMapInit(), ComputeMsmSerialMgr::recvCoord(), scale_coordinates(), scale_forces(), scale_n_copy_coordinates(), PatchMap::sizeGrid(), and ComputeMsmMgr::update().

00264 { return b2; }

Vector Lattice::c  )  const [inline]
 

Definition at line 249 of file Lattice.h.

Referenced by ComputeNonbondedSelf::doForce(), ComputeNonbondedPair::doForce(), HomePatch::doMarginCheck(), ComputeNonbondedCUDA::doWork(), ComputeHomeTuples< TholeElem, Thole, TholeValue >::doWork(), ComputeEwald::doWork(), GridforceFullMainGrid::initialize(), ComputeMsmMgr::initialize(), Controller::langevinPiston1(), Controller::langevinPiston2(), cr_sortop::operator()(), Controller::printEnergies(), HomePatch::rattle1(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), ComputeNonbondedCUDA::recvYieldDevice(), PatchMap::sizeGrid(), Sequencer::submitHalfstep(), Sequencer::submitReductions(), ComputeMsmMgr::update(), and Controller::writeExtendedSystemData().

00249 { return a3; }

int Lattice::c_p  )  const [inline]
 

Definition at line 270 of file Lattice.h.

Referenced by calc_fulldirect(), ComputeMsmMgr::initialize(), WorkDistrib::patchMapInit(), Controller::printEnergies(), ComputeMsmSerialMgr::recvCoord(), ComputeExtMgr::recvCoord(), PatchMap::sizeGrid(), Node::startup(), Controller::writeExtendedSystemData(), and Controller::writeExtendedSystemLabels().

00270 { return p3; }

Vector Lattice::c_r  )  const [inline]
 

Definition at line 265 of file Lattice.h.

Referenced by HomePatch::doMarginCheck(), PDB::find_extremes(), WorkDistrib::patchMapInit(), ComputeMsmSerialMgr::recvCoord(), scale_coordinates(), scale_forces(), scale_n_copy_coordinates(), PatchMap::sizeGrid(), and ComputeMsmMgr::update().

00265 { return b3; }

Vector Lattice::delta const Position pos1  )  const [inline]
 

Definition at line 190 of file Lattice.h.

References latticenearbyint, and Position.

00191   {
00192     Vector diff = pos1 - o;
00193     Vector result = diff;
00194     if ( p1 ) result -= a1*latticenearbyint(b1*diff);
00195     if ( p2 ) result -= a2*latticenearbyint(b2*diff);
00196     if ( p3 ) result -= a3*latticenearbyint(b3*diff);
00197     return result;
00198   }

Vector Lattice::delta const Position pos1,
const Position pos2
const [inline]
 

Definition at line 154 of file Lattice.h.

References BigReal, latticenearbyint, Position, Vector::x, Vector::y, and Vector::z.

Referenced by TholeElem::computeForce(), ExclElem::computeForce(), ImproperElem::computeForce(), DihedralElem::computeForce(), CrosstermElem::computeForce(), BondElem::computeForce(), AnisoElem::computeForce(), AngleElem::computeForce(), ComputeRestraints::doForce(), colvarproxy_namd::position_dist2(), and colvarproxy_namd::position_distance().

00155   {
00156     Vector diff = pos1 - pos2;
00157 #ifdef ARCH_POWERPC   //Prevents stack temporaries
00158     Vector result = diff;
00159     if ( p1 ) {
00160       BigReal fval = latticenearbyint(b1*diff); 
00161       result.x -= a1.x *fval;    
00162       result.y -= a1.y *fval;    
00163       result.z -= a1.z *fval;    
00164     }
00165     if ( p2 ) {
00166       BigReal fval = latticenearbyint(b2*diff);
00167       result.x -= a2.x * fval;
00168       result.y -= a2.y * fval;
00169       result.z -= a2.z * fval;
00170     }
00171     if ( p3 ) {
00172       BigReal fval = latticenearbyint(b3*diff);
00173       result.x -= a3.x * fval;
00174       result.y -= a3.y * fval;
00175       result.z -= a3.z * fval;
00176     }
00177     return result;
00178 #else
00179     BigReal f1 = p1 ? latticenearbyint(b1*diff) : 0.;
00180     BigReal f2 = p2 ? latticenearbyint(b2*diff) : 0.;
00181     BigReal f3 = p3 ? latticenearbyint(b3*diff) : 0.;
00182     diff.x -= f1*a1.x + f2*a2.x + f3*a3.x;
00183     diff.y -= f1*a1.y + f2*a2.y + f3*a3.y;
00184     diff.z -= f1*a1.z + f2*a2.z + f3*a3.z;
00185     return diff;
00186 #endif
00187   }

int Lattice::index int  i = 0,
int  j = 0,
int  k = 0
[inline, static]
 

Definition at line 35 of file Lattice.h.

References j.

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

00036   {
00037     return 9 * (k+1) + 3 * (j+1) + (i+1);
00038   }

Position Lattice::nearest Position  data,
ScaledPosition  ref,
Transform t
const [inline]
 

Definition at line 117 of file Lattice.h.

References BigReal, Transform::i, Transform::j, Transform::k, latticenearbyint, Position, ScaledPosition, Vector::x, Vector::y, and Vector::z.

00118   {
00119     ScaledPosition sn = scale(data);
00120     if ( p1 ) {
00121       BigReal tmp = sn.x - ref.x;
00122       BigReal rit = latticenearbyint(tmp);
00123       sn.x -= rit;
00124       t->i -= (int) rit;
00125     }
00126     if ( p2 ) {
00127       BigReal tmp = sn.y - ref.y;
00128       BigReal rit = latticenearbyint(tmp);
00129       sn.y -= rit;
00130       t->j -= (int) rit;
00131     }
00132     if ( p3 ) {
00133       BigReal tmp = sn.z - ref.z;
00134       BigReal rit = latticenearbyint(tmp);
00135       sn.z -= rit;
00136       t->k -= (int) rit;
00137     }
00138     return unscale(sn);
00139   }

Position Lattice::nearest Position  data,
ScaledPosition  ref
const [inline]
 

Definition at line 100 of file Lattice.h.

References latticenearbyint, Position, ScaledPosition, Vector::x, Vector::y, and Vector::z.

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

00101   {
00102     ScaledPosition sn = scale(data);
00103     if ( p1 ) {
00104       sn.x -= latticenearbyint(sn.x - ref.x);
00105     }
00106     if ( p2 ) {
00107       sn.y -= latticenearbyint(sn.y - ref.y);
00108     }
00109     if ( p3 ) {
00110       sn.z -= latticenearbyint(sn.z - ref.z);
00111     }
00112     return unscale(sn);
00113   }

Vector Lattice::offset int  i  )  const [inline]
 

Definition at line 237 of file Lattice.h.

Referenced by ComputeNonbondedPair::doForce().

00238   {
00239     return ( (i%3-1) * a1 + ((i/3)%3-1) * a2 + (i/9-1) * a3 );
00240   }

int Lattice::offset_a int  i  )  [inline, static]
 

Definition at line 242 of file Lattice.h.

Referenced by registerUserEventsForAllComputeObjs().

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

int Lattice::offset_b int  i  )  [inline, static]
 

Definition at line 243 of file Lattice.h.

Referenced by registerUserEventsForAllComputeObjs().

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

int Lattice::offset_c int  i  )  [inline, static]
 

Definition at line 244 of file Lattice.h.

Referenced by registerUserEventsForAllComputeObjs().

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

Vector Lattice::origin  )  const [inline]
 

Definition at line 257 of file Lattice.h.

Referenced by ComputeNonbondedSelf::doForce(), ComputeNonbondedPair::doForce(), ComputeEField::doForce(), ComputeHomeTuples< TholeElem, Thole, TholeValue >::doWork(), ComputeEwald::doWork(), PDB::find_extremes(), WorkDistrib::patchMapInit(), Controller::printEnergies(), HomePatch::rattle1(), Controller::receivePressure(), ComputeMsmSerialMgr::recvCoord(), scale_coordinates(), scale_n_copy_coordinates(), Sequencer::submitHalfstep(), Sequencer::submitReductions(), ComputeMsmMgr::update(), GridforceGrid::wrap_position(), and Controller::writeExtendedSystemData().

00258   {
00259     return o;
00260   }

int Lattice::orthogonal  )  const [inline]
 

Definition at line 252 of file Lattice.h.

00252                          {
00253     return ( ! ( a1.y || a1.z || a2.x || a2.z || a3.x || a3.y ) );
00254   }

void Lattice::rescale Position p,
Tensor  factor
const [inline]
 

Definition at line 79 of file Lattice.h.

References Position.

00080   {
00081     p -= o;
00082     p = factor * p;
00083     p += o;
00084   }

void Lattice::rescale Tensor  factor  )  [inline]
 

Definition at line 70 of file Lattice.h.

Referenced by Sequencer::berendsenPressure(), Controller::berendsenPressure(), Sequencer::langevinPiston(), and Controller::langevinPiston1().

00071   {
00072     a1 = factor * a1;
00073     a2 = factor * a2;
00074     a3 = factor * a3;
00075     recalculate();
00076   }

Position Lattice::reverse_transform Position  data,
const Transform t
const [inline]
 

Definition at line 148 of file Lattice.h.

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

Referenced by HomePatch::depositMigration(), ComputeGridForce::do_calc(), ComputeStir::doForce(), ComputeEField::doForce(), ComputeConsTorque::doForce(), ComputeConsForce::doForce(), PatchMgr::moveAllBy(), PatchMgr::moveAtom(), ComputeGlobal::recvResults(), and CollectionMgr::submitPositions().

00149   {
00150     return ( data - t.i*a1 - t.j*a2 - t.k*a3 );
00151   }

ScaledPosition Lattice::scale Position  p  )  const [inline]
 

Definition at line 93 of file Lattice.h.

References Position, and ScaledPosition.

Referenced by PatchMap::assignToPatch(), HomePatch::doAtomMigration(), HomePatch::doMarginCheck(), colvarproxy_namd::select_closest_image(), and ComputeMsmMgr::update().

00094   {
00095     p -= o;
00096     return Vector(b1*p,b2*p,b3*p);
00097   }

void Lattice::set Vector  A,
Vector  B,
Vector  C,
Position  Origin
[inline]
 

Definition at line 47 of file Lattice.h.

References Vector::length(), and Position.

00048   {
00049     a1 = A; a2 = B; a3 = C; o = Origin;
00050     p1 = ( a1.length2() ? 1 : 0 );
00051     p2 = ( a2.length2() ? 1 : 0 );
00052     p3 = ( a3.length2() ? 1 : 0 );
00053     if ( ! p1 ) a1 = Vector(1.0,0.0,0.0);
00054     if ( ! p2 ) {
00055       Vector u1 = a1 / a1.length();
00056       Vector e_z(0.0,0.0,1.0);
00057       if ( fabs(e_z * u1) < 0.9 ) { a2 = cross(e_z,a1); }
00058       else { a2 = cross(Vector(1.0,0.0,0.0),a1); }
00059       a2 /= a2.length();
00060     }
00061     if ( ! p3 ) {
00062       a3 = cross(a1,a2);
00063       a3 /= a3.length();
00064     }
00065     if ( volume() < 0.0 ) a3 *= -1.0;
00066     recalculate();
00067   }

void Lattice::set Vector  A,
Vector  B,
Vector  C
[inline]
 

Definition at line 41 of file Lattice.h.

Referenced by get_lattice_from_ts().

00042   {
00043     set(A,B,C,o);
00044   }

Position Lattice::unscale ScaledPosition  s  )  const [inline]
 

Definition at line 87 of file Lattice.h.

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

Referenced by ComputeNonbondedPair::doForce(), HomePatch::doPairlistCheck(), ComputeNonbondedCUDA::doWork(), and HomePatch::positionsReady().

00088   {
00089     return (o + a1*s.x + a2*s.y + a3*s.z);
00090   }

BigReal Lattice::volume void   )  const [inline]
 

Definition at line 272 of file Lattice.h.

References BigReal.

Referenced by ParallelIOMgr::bcastHydroBasedCounter(), NamdState::configListInit(), PressureProfileReduction::getData(), Controller::langevinPiston1(), Controller::langevinPiston2(), Controller::printEnergies(), Controller::receivePressure(), ComputeEwald::recvResults(), and Controller::rescaleaccelMD().

00273   {
00274     return ( p1 && p2 && p3 ? cross(a1,a2) * a3 : 0.0 );
00275   }

Vector Lattice::wrap_delta const Position pos1  )  const [inline]
 

Definition at line 201 of file Lattice.h.

References latticenearbyint, and Position.

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

00202   {
00203     Vector diff = pos1 - o;
00204     Vector result(0.,0.,0.);
00205     if ( p1 ) result -= a1*latticenearbyint(b1*diff);
00206     if ( p2 ) result -= a2*latticenearbyint(b2*diff);
00207     if ( p3 ) result -= a3*latticenearbyint(b3*diff);
00208     return result;
00209   }

Vector Lattice::wrap_nearest_delta Position  pos1  )  const [inline]
 

Definition at line 212 of file Lattice.h.

References BigReal, latticenearbyint, Vector::length2(), and Position.

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

00213   {
00214     Vector diff = pos1 - o;
00215     Vector result0(0.,0.,0.);
00216     if ( p1 ) result0 -= a1*latticenearbyint(b1*diff);
00217     if ( p2 ) result0 -= a2*latticenearbyint(b2*diff);
00218     if ( p3 ) result0 -= a3*latticenearbyint(b3*diff);
00219     diff += result0;
00220     BigReal dist = diff.length2();
00221     Vector result(0.,0.,0.);
00222     for ( int i1=-p1; i1<=p1; ++i1 ) {
00223       for ( int i2 =-p2; i2<=p2; ++i2 ) {
00224         for ( int i3 =-p3; i3<=p3; ++i3 ) {
00225           Vector newresult = i1*a1+i2*a2+i3*a3;
00226           BigReal newdist = (diff+newresult).length2();
00227           if ( newdist < dist ) {
00228             dist = newdist;
00229             result = newresult;
00230           }
00231         }
00232       }
00233     }
00234     return result0 + result;
00235   }


The documentation for this class was generated from the following file:
Generated on Fri May 25 04:07:22 2012 for NAMD by  doxygen 1.3.9.1