Changed algorithm for generating rotation axis

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@13536 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
athomps
2015-07-07 18:41:54 +00:00
parent f03b5a8036
commit 8749c91a3c

View File

@ -982,10 +982,17 @@ void FixGCMC::attempt_molecule_rotation()
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
r[0] = random_equal->uniform() - 0.5;
r[1] = random_equal->uniform() - 0.5;
r[2] = random_equal->uniform() - 0.5;
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * max_rotation_angle;
MathExtra::norm3(r);
@ -1108,10 +1115,17 @@ void FixGCMC::attempt_molecule_insertion()
com_coord[2] = zlo + random_equal->uniform() * (zhi-zlo);
}
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
r[0] = random_equal->uniform() - 0.5;
r[1] = random_equal->uniform() - 0.5;
r[2] = random_equal->uniform() - 0.5;
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * MY_2PI;
MathExtra::norm3(r);
@ -1557,10 +1571,17 @@ void FixGCMC::attempt_molecule_rotation_full()
com[0] = com[1] = com[2] = 0.0;
group->xcm(molecule_group,gas_mass,com);
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
r[0] = random_equal->uniform() - 0.5;
r[1] = random_equal->uniform() - 0.5;
r[2] = random_equal->uniform() - 0.5;
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * max_rotation_angle;
MathExtra::norm3(r);
@ -1733,10 +1754,17 @@ void FixGCMC::attempt_molecule_insertion_full()
com_coord[2] = zlo + random_equal->uniform() * (zhi-zlo);
}
// generate point in unit cube
// then restrict to unit sphere
double r[3],rotmat[3][3],quat[4];
r[0] = random_equal->uniform() - 0.5;
r[1] = random_equal->uniform() - 0.5;
r[2] = random_equal->uniform() - 0.5;
double rsq = 1.1;
while (rsq > 1.0) {
r[0] = 2.0*random_equal->uniform() - 1.0;
r[1] = 2.0*random_equal->uniform() - 1.0;
r[2] = 2.0*random_equal->uniform() - 1.0;
rsq = MathExtra::dot3(r, r);
}
double theta = random_equal->uniform() * MY_2PI;
MathExtra::norm3(r);