55 |
|
sman_ = info_->getSnapshotManager(); |
56 |
|
storageLayout_ = sman_->getStorageLayout(); |
57 |
|
ff_ = info_->getForceField(); |
58 |
– |
userChoseCutoff_ = false; |
58 |
|
|
59 |
|
usePeriodicBoundaryConditions_ = info->getSimParams()->getUsePeriodicBoundaryConditions(); |
60 |
|
|
97 |
|
cellOffsets_.push_back( Vector3i(1, -1,1) ); |
98 |
|
} |
99 |
|
|
100 |
+ |
void ForceDecomposition::setCutoffRadius(RealType rcut) { |
101 |
+ |
rCut_ = rcut; |
102 |
+ |
rList_ = rCut_ + skinThickness_; |
103 |
+ |
rListSq_ = rList_ * rList_; |
104 |
+ |
} |
105 |
+ |
|
106 |
|
void ForceDecomposition::fillSelfData(SelfData &sdat, int atom1) { |
107 |
|
|
103 |
– |
//sdat.atype = atypesLocal[atom1]; |
108 |
|
sdat.atid = idents[atom1]; |
109 |
|
|
110 |
|
sdat.pot = &embeddingPot; |
152 |
|
} |
153 |
|
|
154 |
|
bool ForceDecomposition::checkNeighborList() { |
155 |
< |
|
155 |
> |
RealType st2 = pow( skinThickness_ / 2.0, 2); |
156 |
|
int nGroups = snap_->cgData.position.size(); |
157 |
|
if (needVelocities_) |
158 |
< |
snap_->cgData.setStorageLayout(DataStorage::dslPosition | DataStorage::dslVelocity); |
158 |
> |
snap_->cgData.setStorageLayout(DataStorage::dslPosition | |
159 |
> |
DataStorage::dslVelocity); |
160 |
|
|
161 |
|
// if we have changed the group identities or haven't set up the |
162 |
|
// saved positions we automatically will need a neighbor list update: |
163 |
< |
|
163 |
> |
|
164 |
|
if ( saved_CG_positions_.size() != nGroups ) return true; |
165 |
|
|
166 |
|
RealType dispmax = 0.0; |
168 |
|
|
169 |
|
for (int i = 0; i < nGroups; i++) { |
170 |
|
disp = snap_->cgData.position[i] - saved_CG_positions_[i]; |
171 |
< |
for (int j = 0; j < 3; j++) |
167 |
< |
dispmax = max( abs(disp[j]), dispmax); |
171 |
> |
dispmax = max(dispmax, disp.lengthSquare()); |
172 |
|
} |
173 |
|
|
174 |
|
#ifdef IS_MPI |
175 |
< |
MPI_Allreduce(&dispmax, &dispmax, 1, MPI_REALTYPE, MPI_MAX, MPI_COMM_WORLD); |
175 |
> |
MPI_Allreduce(MPI_IN_PLACE, &dispmax, 1, MPI_REALTYPE, MPI_MAX, |
176 |
> |
MPI_COMM_WORLD); |
177 |
|
#endif |
178 |
|
|
179 |
< |
// a conservative test of list skin crossings |
175 |
< |
dispmax = 2.0 * sqrt (3.0 * dispmax * dispmax); |
176 |
< |
|
177 |
< |
|
178 |
< |
if (dispmax > skinThickness_) |
179 |
< |
return (dispmax > skinThickness_); |
180 |
< |
|
181 |
< |
return false; |
179 |
> |
return (dispmax > st2) ? true : false; |
180 |
|
} |
181 |
|
|
182 |
|
void ForceDecomposition::addToHeatFlux(Vector3d hf) { |