| 51 |
|
#include "io/DumpReader.hpp" |
| 52 |
|
#include "primitives/Molecule.hpp" |
| 53 |
|
#include "utils/NumericConstant.hpp" |
| 54 |
< |
#include "math/RealSphericalHarmonic.hpp" |
| 54 |
> |
#include "math/SphericalHarmonic.hpp" |
| 55 |
|
|
| 56 |
|
namespace oopse { |
| 57 |
|
|
| 108 |
|
Molecule::RigidBodyIterator rbIter; |
| 109 |
|
Molecule::AtomIterator ai; |
| 110 |
|
StuntDouble* sd; |
| 111 |
< |
RealType theta; |
| 111 |
> |
RealType costheta; |
| 112 |
|
RealType phi; |
| 113 |
|
RealType r; |
| 114 |
|
RealType dist; |
| 115 |
< |
std::map<int, RealType> QBar_lm; |
| 115 |
> |
std::map<int, ComplexType> QBar_lm; |
| 116 |
|
RealType QSq_l; |
| 117 |
|
RealType Q_l; |
| 118 |
|
int nBonds; |
| 119 |
< |
RealSphericalHarmonic sphericalHarmonic; |
| 119 |
> |
SphericalHarmonic sphericalHarmonic; |
| 120 |
|
int i, j; |
| 121 |
|
|
| 122 |
|
// Set the l for the spherical harmonic, it doesn't change |
| 180 |
|
// Check to see if neighbor is in bond cutoff |
| 181 |
|
|
| 182 |
|
if (r < rCut_) { |
| 183 |
< |
theta = atan2(vec.y(), vec.x()); |
| 184 |
< |
phi = acos(vec.z()/r); |
| 183 |
> |
costheta = vec.z() / r; |
| 184 |
> |
phi = atan2(vec.y(), vec.x()); |
| 185 |
> |
|
| 186 |
|
for(int m = -lNumber_; m <= lNumber_; m++){ |
| 187 |
|
sphericalHarmonic.setM(m); |
| 188 |
< |
QBar_lm[m] += sphericalHarmonic.getValueAt(theta,phi); |
| 188 |
> |
QBar_lm[m] += sphericalHarmonic.getValueAt(costheta,phi); |
| 189 |
|
} |
| 190 |
|
nBonds++; |
| 191 |
|
} |
| 192 |
|
} |
| 193 |
|
} |
| 194 |
|
|
| 195 |
< |
// Normalize Qbar |
| 195 |
> |
// Normalize Qbar2 |
| 196 |
|
for (int m = -lNumber_;m <= lNumber_; m++){ |
| 197 |
|
QBar_lm[m] /= nBonds; |
| 198 |
|
} |
| 201 |
|
|
| 202 |
|
QSq_l = 0.0; |
| 203 |
|
for (int m = -lNumber_; m <= lNumber_; m++){ |
| 204 |
< |
QSq_l += pow(QBar_lm[m], 2); |
| 204 |
> |
QSq_l += norm(QBar_lm[m]); |
| 205 |
|
} |
| 206 |
|
Q_l = sqrt(QSq_l*(4.0 * NumericConstant::PI / (2.0*(RealType)lNumber_ + 1))); |
| 207 |
|
|
| 214 |
|
double m1Pass, m2Min, m2Max; |
| 215 |
|
int error, m1, m2, m3; |
| 216 |
|
|
| 217 |
< |
RealType W_l; |
| 218 |
< |
RealType W_l_hat; |
| 217 |
> |
ComplexType W_l; |
| 218 |
> |
ComplexType W_l_hat; |
| 219 |
|
W_l = 0.0; |
| 220 |
|
for (int m1 = -lNumber_; m1 <= lNumber_; m1++) { |
| 221 |
|
// Zero work array |
| 236 |
|
|
| 237 |
|
// accumulate histogram data for Q_l and W_l_hat: |
| 238 |
|
|
| 239 |
< |
collectHistogram(Q_l, W_l_hat); |
| 239 |
> |
collectHistogram(Q_l, real(W_l_hat)); |
| 240 |
|
|
| 241 |
|
} |
| 242 |
|
} |