63 objType_(objType), storage_(storage), snapshotMan_(NULL), linear_(false),
64 linearAxis_(-1), globalIndex_(-1), globalIntegrableObjectIndex_(-1),
68 int sl = (snapshotMan_->getCurrentSnapshot()->*storage_).getStorageLayout();
70 if (sl & DataStorage::dslForce)
setFrc(V3Zero);
71 if (sl & DataStorage::dslTorque)
setTrq(V3Zero);
73 if (sl & DataStorage::dslFlucQForce)
setFlucQFrc(0.0);
79 RealType multA, RealType multB) {
80 int sl = (snapshotMan_->getCurrentSnapshot()->*storage_).getStorageLayout();
82 assert(sl == (snapA->*storage_).getStorageLayout());
83 assert(sl == (snapB->*storage_).getStorageLayout());
85 if (sl & DataStorage::dslForce) {
86 Vector3d forceA = (snapA->*storage_).force[localIndex_];
87 Vector3d forceB = (snapB->*storage_).force[localIndex_];
89 ((snapshotMan_->getCurrentSnapshot())->*storage_).force[localIndex_] =
90 multA * forceA + multB * forceB;
93 if (sl & DataStorage::dslTorque) {
94 Vector3d torqueA = (snapA->*storage_).torque[localIndex_];
95 Vector3d torqueB = (snapB->*storage_).torque[localIndex_];
97 ((snapshotMan_->getCurrentSnapshot())->*storage_).torque[localIndex_] =
98 multA * torqueA + multB * torqueB;
101 if (sl & DataStorage::dslParticlePot) {
102 RealType particlePotA = (snapA->*storage_).particlePot[localIndex_];
103 RealType particlePotB = (snapB->*storage_).particlePot[localIndex_];
105 ((snapshotMan_->getCurrentSnapshot())->*storage_)
106 .particlePot[localIndex_] =
107 multA * particlePotA + multB * particlePotB;
110 if (sl & DataStorage::dslFlucQForce) {
111 RealType flucQFrcA = (snapA->*storage_).flucQFrc[localIndex_];
112 RealType flucQFrcB = (snapB->*storage_).flucQFrc[localIndex_];
114 ((snapshotMan_->getCurrentSnapshot())->*storage_).flucQFrc[localIndex_] =
115 multA * flucQFrcA + multB * flucQFrcB;
118 if (sl & DataStorage::dslElectricField) {
119 Vector3d electricFieldA = (snapA->*storage_).electricField[localIndex_];
120 Vector3d electricFieldB = (snapB->*storage_).electricField[localIndex_];
122 ((snapshotMan_->getCurrentSnapshot())->*storage_)
123 .electricField[localIndex_] =
124 multA * electricFieldA + multB * electricFieldB;
127 if (sl & DataStorage::dslSitePotential) {
128 RealType sitePotentialA = (snapA->*storage_).sitePotential[localIndex_];
129 RealType sitePotentialB = (snapB->*storage_).sitePotential[localIndex_];
131 ((snapshotMan_->getCurrentSnapshot())->*storage_)
132 .sitePotential[localIndex_] =
133 multA * sitePotentialA + multB * sitePotentialB;