Fixing bpm/sphere error in fix move, displace atoms
This commit is contained in:
@ -160,7 +160,7 @@ void DisplaceAtoms::command(int narg, char **arg)
|
|||||||
int *mask = atom->mask;
|
int *mask = atom->mask;
|
||||||
int nlocal = atom->nlocal;
|
int nlocal = atom->nlocal;
|
||||||
|
|
||||||
double fraction,dramp;
|
double fraction, dramp;
|
||||||
|
|
||||||
for (i = 0; i < nlocal; i++) {
|
for (i = 0; i < nlocal; i++) {
|
||||||
if (mask[i] & groupbit) {
|
if (mask[i] & groupbit) {
|
||||||
@ -255,11 +255,12 @@ void DisplaceAtoms::command(int narg, char **arg)
|
|||||||
int line_flag = atom->line_flag;
|
int line_flag = atom->line_flag;
|
||||||
int tri_flag = atom->tri_flag;
|
int tri_flag = atom->tri_flag;
|
||||||
int body_flag = atom->body_flag;
|
int body_flag = atom->body_flag;
|
||||||
|
int quat_atom_flag = atom->quat_flag;
|
||||||
|
|
||||||
int theta_flag = 0;
|
int theta_flag = 0;
|
||||||
int quat_flag = 0;
|
int quat_flag = 0;
|
||||||
if (line_flag) theta_flag = 1;
|
if (line_flag) theta_flag = 1;
|
||||||
if (ellipsoid_flag || tri_flag || body_flag) quat_flag = 1;
|
if (ellipsoid_flag || tri_flag || body_flag || quat_atom_flag) quat_flag = 1;
|
||||||
|
|
||||||
// AtomVec pointers to retrieve per-atom storage of extra quantities
|
// AtomVec pointers to retrieve per-atom storage of extra quantities
|
||||||
|
|
||||||
@ -269,6 +270,7 @@ void DisplaceAtoms::command(int narg, char **arg)
|
|||||||
auto avec_body = dynamic_cast<AtomVecBody *>(atom->style_match("body"));
|
auto avec_body = dynamic_cast<AtomVecBody *>(atom->style_match("body"));
|
||||||
|
|
||||||
double **x = atom->x;
|
double **x = atom->x;
|
||||||
|
double **quat_atom = atom->quat;
|
||||||
int *ellipsoid = atom->ellipsoid;
|
int *ellipsoid = atom->ellipsoid;
|
||||||
int *line = atom->line;
|
int *line = atom->line;
|
||||||
int *tri = atom->tri;
|
int *tri = atom->tri;
|
||||||
@ -313,7 +315,7 @@ void DisplaceAtoms::command(int narg, char **arg)
|
|||||||
|
|
||||||
// quats for ellipsoids, tris, and bodies
|
// quats for ellipsoids, tris, and bodies
|
||||||
|
|
||||||
if (quat_flag) {
|
if (quat_flag && !quat_atom_flag) {
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
||||||
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
||||||
@ -322,12 +324,18 @@ void DisplaceAtoms::command(int narg, char **arg)
|
|||||||
else if (body_flag && body[i] >= 0)
|
else if (body_flag && body[i] >= 0)
|
||||||
quat = avec_body->bonus[body[i]].quat;
|
quat = avec_body->bonus[body[i]].quat;
|
||||||
if (quat) {
|
if (quat) {
|
||||||
MathExtra::quatquat(qrotate,quat,qnew);
|
MathExtra::quatquat(qrotate, quat, qnew);
|
||||||
quat[0] = qnew[0];
|
quat[0] = qnew[0];
|
||||||
quat[1] = qnew[1];
|
quat[1] = qnew[1];
|
||||||
quat[2] = qnew[2];
|
quat[2] = qnew[2];
|
||||||
quat[3] = qnew[3];
|
quat[3] = qnew[3];
|
||||||
}
|
}
|
||||||
|
} else if (quat_atom_flag) {
|
||||||
|
MathExtra::quatquat(qrotate, quat_atom[i], qnew);
|
||||||
|
quat_atom[i][0] = qnew[0];
|
||||||
|
quat_atom[i][1] = qnew[1];
|
||||||
|
quat_atom[i][2] = qnew[2];
|
||||||
|
quat_atom[i][3] = qnew[3];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -276,10 +276,11 @@ FixMove::FixMove(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
line_flag = atom->line_flag;
|
line_flag = atom->line_flag;
|
||||||
tri_flag = atom->tri_flag;
|
tri_flag = atom->tri_flag;
|
||||||
body_flag = atom->body_flag;
|
body_flag = atom->body_flag;
|
||||||
|
quat_atom_flag = atom->quat_flag;
|
||||||
|
|
||||||
theta_flag = quat_flag = 0;
|
theta_flag = quat_flag = 0;
|
||||||
if (line_flag) theta_flag = 1;
|
if (line_flag) theta_flag = 1;
|
||||||
if (ellipsoid_flag || tri_flag || body_flag) quat_flag = 1;
|
if (ellipsoid_flag || tri_flag || body_flag || quat_atom_flag) quat_flag = 1;
|
||||||
|
|
||||||
extra_flag = 0;
|
extra_flag = 0;
|
||||||
if (omega_flag || angmom_flag || theta_flag || quat_flag) extra_flag = 1;
|
if (omega_flag || angmom_flag || theta_flag || quat_flag) extra_flag = 1;
|
||||||
@ -329,7 +330,7 @@ FixMove::FixMove(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (quat_flag) {
|
if (quat_flag && !quat_atom_flag) {
|
||||||
double *quat;
|
double *quat;
|
||||||
for (int i = 0; i < nlocal; i++) {
|
for (int i = 0; i < nlocal; i++) {
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
@ -349,6 +350,16 @@ FixMove::FixMove(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
} else
|
} else
|
||||||
qoriginal[i][0] = qoriginal[i][1] = qoriginal[i][2] = qoriginal[i][3] = 0.0;
|
qoriginal[i][0] = qoriginal[i][1] = qoriginal[i][2] = qoriginal[i][3] = 0.0;
|
||||||
}
|
}
|
||||||
|
} else if (quat_atom_flag) {
|
||||||
|
double **quat_atom = atom->quat;
|
||||||
|
for (int i = 0; i < nlocal; i++) {
|
||||||
|
if (mask[i] & groupbit) {
|
||||||
|
qoriginal[i][0] = quat_atom[i][0];
|
||||||
|
qoriginal[i][1] = quat_atom[i][1];
|
||||||
|
qoriginal[i][2] = quat_atom[i][2];
|
||||||
|
qoriginal[i][3] = quat_atom[i][3];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// nrestart = size of per-atom restart data
|
// nrestart = size of per-atom restart data
|
||||||
@ -521,6 +532,7 @@ void FixMove::initial_integrate(int /*vflag*/)
|
|||||||
double *radius = atom->radius;
|
double *radius = atom->radius;
|
||||||
double *rmass = atom->rmass;
|
double *rmass = atom->rmass;
|
||||||
double *mass = atom->mass;
|
double *mass = atom->mass;
|
||||||
|
double **quat_atom = atom->quat;
|
||||||
int *type = atom->type;
|
int *type = atom->type;
|
||||||
int *ellipsoid = atom->ellipsoid;
|
int *ellipsoid = atom->ellipsoid;
|
||||||
int *line = atom->line;
|
int *line = atom->line;
|
||||||
@ -749,9 +761,9 @@ void FixMove::initial_integrate(int /*vflag*/)
|
|||||||
avec_line->bonus[atom->line[i]].theta = theta_new;
|
avec_line->bonus[atom->line[i]].theta = theta_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
// quats for ellipsoids, tris, and bodies
|
// quats for ellipsoids, tris, bodies, and bpm/sphere
|
||||||
|
|
||||||
if (quat_flag) {
|
if (quat_flag && !quat_atom_flag) {
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
||||||
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
||||||
@ -760,6 +772,8 @@ void FixMove::initial_integrate(int /*vflag*/)
|
|||||||
else if (body_flag && body[i] >= 0)
|
else if (body_flag && body[i] >= 0)
|
||||||
quat = avec_body->bonus[body[i]].quat;
|
quat = avec_body->bonus[body[i]].quat;
|
||||||
if (quat) MathExtra::quatquat(qrotate, qoriginal[i], quat);
|
if (quat) MathExtra::quatquat(qrotate, qoriginal[i], quat);
|
||||||
|
} else if (quat_atom_flag) {
|
||||||
|
MathExtra::quatquat(qrotate, qoriginal[i], quat_atom[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -880,9 +894,9 @@ void FixMove::initial_integrate(int /*vflag*/)
|
|||||||
avec_line->bonus[atom->line[i]].theta = theta_new;
|
avec_line->bonus[atom->line[i]].theta = theta_new;
|
||||||
}
|
}
|
||||||
|
|
||||||
// quats for ellipsoids, tris, and bodies
|
// quats for ellipsoids, tris, bodies, and bpm/sphere
|
||||||
|
|
||||||
if (quat_flag) {
|
if (quat_flag && !quat_atom_flag) {
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
||||||
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
||||||
@ -891,6 +905,8 @@ void FixMove::initial_integrate(int /*vflag*/)
|
|||||||
else if (body_flag && body[i] >= 0)
|
else if (body_flag && body[i] >= 0)
|
||||||
quat = avec_body->bonus[body[i]].quat;
|
quat = avec_body->bonus[body[i]].quat;
|
||||||
if (quat) MathExtra::quatquat(qrotate, qoriginal[i], quat);
|
if (quat) MathExtra::quatquat(qrotate, qoriginal[i], quat);
|
||||||
|
} else if (quat_atom_flag) {
|
||||||
|
MathExtra::quatquat(qrotate, qoriginal[i], quat_atom[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1263,6 +1279,7 @@ void FixMove::set_arrays(int i)
|
|||||||
double *quat;
|
double *quat;
|
||||||
|
|
||||||
double **x = atom->x;
|
double **x = atom->x;
|
||||||
|
double **quat_atom = atom->quat;
|
||||||
imageint *image = atom->image;
|
imageint *image = atom->image;
|
||||||
int *ellipsoid = atom->ellipsoid;
|
int *ellipsoid = atom->ellipsoid;
|
||||||
int *line = atom->line;
|
int *line = atom->line;
|
||||||
@ -1341,9 +1358,9 @@ void FixMove::set_arrays(int i)
|
|||||||
toriginal[i] = theta - 0.0; // NOTE: edit this line
|
toriginal[i] = theta - 0.0; // NOTE: edit this line
|
||||||
}
|
}
|
||||||
|
|
||||||
// quats for ellipsoids, tris, and bodies
|
// quats for ellipsoids, tris, bodies, and bpm/sphere
|
||||||
|
|
||||||
if (quat_flag) {
|
if (quat_flag & !quat_atom_flag) {
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
||||||
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
||||||
@ -1354,6 +1371,11 @@ void FixMove::set_arrays(int i)
|
|||||||
if (quat) {
|
if (quat) {
|
||||||
// qoriginal = f(quat,-delta); // NOTE: edit this line
|
// qoriginal = f(quat,-delta); // NOTE: edit this line
|
||||||
}
|
}
|
||||||
|
} else if (quat_atom_flag) {
|
||||||
|
// qoriginal[0] = quat_atom[i][0]; // NOTE: edit this line
|
||||||
|
// qoriginal[1] = quat_atom[i][1]; // NOTE: edit this line
|
||||||
|
// qoriginal[2] = quat_atom[i][2]; // NOTE: edit this line
|
||||||
|
// qoriginal[3] = quat_atom[i][3]; // NOTE: edit this line
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
xoriginal[i][0] -= vx * delta;
|
xoriginal[i][0] -= vx * delta;
|
||||||
@ -1400,7 +1422,7 @@ void FixMove::set_arrays(int i)
|
|||||||
|
|
||||||
// quats for ellipsoids, tris, and bodies
|
// quats for ellipsoids, tris, and bodies
|
||||||
|
|
||||||
if (quat_flag) {
|
if (quat_flag && !quat_atom_flag) {
|
||||||
quat = nullptr;
|
quat = nullptr;
|
||||||
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
if (ellipsoid_flag && ellipsoid[i] >= 0)
|
||||||
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
quat = avec_ellipsoid->bonus[ellipsoid[i]].quat;
|
||||||
@ -1411,6 +1433,11 @@ void FixMove::set_arrays(int i)
|
|||||||
if (quat) {
|
if (quat) {
|
||||||
// qoriginal = f(quat,-delta); // NOTE: edit this line
|
// qoriginal = f(quat,-delta); // NOTE: edit this line
|
||||||
}
|
}
|
||||||
|
} else if (quat_atom_flag) {
|
||||||
|
// qoriginal[0] = quat_atom[i][0]; // NOTE: edit this line
|
||||||
|
// qoriginal[1] = quat_atom[i][1]; // NOTE: edit this line
|
||||||
|
// qoriginal[2] = quat_atom[i][2]; // NOTE: edit this line
|
||||||
|
// qoriginal[3] = quat_atom[i][3]; // NOTE: edit this line
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,7 +61,7 @@ class FixMove : public Fix {
|
|||||||
int xvar, yvar, zvar, vxvar, vyvar, vzvar;
|
int xvar, yvar, zvar, vxvar, vyvar, vzvar;
|
||||||
int xvarstyle, yvarstyle, zvarstyle, vxvarstyle, vyvarstyle, vzvarstyle;
|
int xvarstyle, yvarstyle, zvarstyle, vxvarstyle, vyvarstyle, vzvarstyle;
|
||||||
int extra_flag, omega_flag, angmom_flag;
|
int extra_flag, omega_flag, angmom_flag;
|
||||||
int radius_flag, ellipsoid_flag, line_flag, tri_flag, body_flag;
|
int radius_flag, ellipsoid_flag, line_flag, tri_flag, body_flag, quat_atom_flag;
|
||||||
int theta_flag, quat_flag;
|
int theta_flag, quat_flag;
|
||||||
int nlevels_respa, nrestart;
|
int nlevels_respa, nrestart;
|
||||||
int time_origin;
|
int time_origin;
|
||||||
|
|||||||
Reference in New Issue
Block a user