forked from lijiext/lammps
more changes to fix rigid and fix poems
This commit is contained in:
parent
c9d41178d8
commit
0c53afbfcf
|
@ -267,6 +267,10 @@ FixPOEMS::FixPOEMS(LAMMPS *lmp, int narg, char **arg) :
|
||||||
|
|
||||||
poems = new Workspace;
|
poems = new Workspace;
|
||||||
|
|
||||||
|
// compute per body forces and torques inside final_integrate() by default
|
||||||
|
|
||||||
|
earlyflag = 0;
|
||||||
|
|
||||||
// print statistics
|
// print statistics
|
||||||
|
|
||||||
int nsum = 0;
|
int nsum = 0;
|
||||||
|
@ -281,10 +285,6 @@ FixPOEMS::FixPOEMS(LAMMPS *lmp, int narg, char **arg) :
|
||||||
fprintf(logfile,"%d clusters, %d bodies, %d joints, %d atoms\n",
|
fprintf(logfile,"%d clusters, %d bodies, %d joints, %d atoms\n",
|
||||||
ncluster,nbody,njoint,nsum);
|
ncluster,nbody,njoint,nsum);
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute per body forces and torques inside final_integrate() by default
|
|
||||||
|
|
||||||
earlyflag = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
@ -335,25 +335,6 @@ FixPOEMS::~FixPOEMS()
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
int FixPOEMS::modify_param(int narg, char **arg)
|
|
||||||
{
|
|
||||||
if (strcmp(arg[0],"bodyforces") == 0) {
|
|
||||||
if (narg < 2)
|
|
||||||
error->all(FLERR,"Illegal fix_modify command");
|
|
||||||
if (strcmp(arg[1],"early") == 0)
|
|
||||||
earlyflag = 1;
|
|
||||||
else if (strcmp(arg[1],"late") == 0)
|
|
||||||
earlyflag = 0;
|
|
||||||
else
|
|
||||||
error->all(FLERR,"Illegal fix_modify command");
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
int FixPOEMS::setmask()
|
int FixPOEMS::setmask()
|
||||||
{
|
{
|
||||||
int mask = 0;
|
int mask = 0;
|
||||||
|
@ -374,19 +355,25 @@ void FixPOEMS::init()
|
||||||
int i,ibody;
|
int i,ibody;
|
||||||
|
|
||||||
// warn if more than one POEMS fix
|
// warn if more than one POEMS fix
|
||||||
|
// if earlyflag, warn if any post-force fixes come after POEMS fix
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
int myindex, myposition;
|
for (int i = 0; i < modify->nfix; i++)
|
||||||
for (i = 0; i < modify->nfix; i++)
|
if (strcmp(modify->fix[i]->style,"poems") == 0) count++;
|
||||||
if (strcmp(modify->fix[i]->style,"poems") == 0) {
|
if (count > 1 && comm->me == 0) error->warning(FLERR,"More than one fix poems");
|
||||||
count++;
|
|
||||||
if (strcmp(modify->fix[i]->id,this->id) == 0) {
|
if (earlyflag) {
|
||||||
myindex = i;
|
int pflag = 0;
|
||||||
myposition = count;
|
for (i = 0; i < modify->nfix; i++) {
|
||||||
|
if (strcmp(modify->fix[i]->style,"poems") == 0) pflag = 1;
|
||||||
|
if (pflag && (modify->fmask[i] & POST_FORCE) &&
|
||||||
|
!modify->fix[i]->rigid_flag) {
|
||||||
|
char str[128];
|
||||||
|
sprintf(str,"Fix %d alters forces after fix poems",modify->fix[i]->id);
|
||||||
|
error->warning(FLERR,str);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (count > 1 && myposition == 1 && comm->me == 0)
|
|
||||||
error->warning(FLERR,"More than one fix poems");
|
|
||||||
|
|
||||||
// error if npt,nph fix comes before rigid fix
|
// error if npt,nph fix comes before rigid fix
|
||||||
|
|
||||||
|
@ -400,29 +387,6 @@ void FixPOEMS::init()
|
||||||
error->all(FLERR,"POEMS fix must come before NPT/NPH fix");
|
error->all(FLERR,"POEMS fix must come before NPT/NPH fix");
|
||||||
}
|
}
|
||||||
|
|
||||||
// warn if fix poems preceeds non-rigid fixes with post-force tasks
|
|
||||||
// when computing body forces and torques in post_force() instead of final_integrate()
|
|
||||||
|
|
||||||
if (earlyflag) {
|
|
||||||
int has_post_force[modify->nfix - myindex];
|
|
||||||
count = 0;
|
|
||||||
for (i = myindex + 1; i < modify->nfix; i++)
|
|
||||||
if ( (modify->fmask[i] & POST_FORCE) && (!modify->fix[i]->rigid_flag) )
|
|
||||||
has_post_force[count++] = i;
|
|
||||||
if (count) {
|
|
||||||
FILE *p[2] = {screen, logfile};
|
|
||||||
for (int j = 0; j < 2; j++)
|
|
||||||
if (p[j]) {
|
|
||||||
fprintf(p[j],"WARNING: fix %s %s",id,style);
|
|
||||||
fprintf(p[j]," will add up forces before they are handled by:\n");
|
|
||||||
for (int k = 0; k < count; k++) {
|
|
||||||
Fix *fix = modify->fix[has_post_force[k]];
|
|
||||||
fprintf(p[j]," => fix %s %s\n",fix->id,fix->style);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// timestep info
|
// timestep info
|
||||||
|
|
||||||
dtv = update->dt;
|
dtv = update->dt;
|
||||||
|
@ -781,6 +745,13 @@ void FixPOEMS::initial_integrate(int vflag)
|
||||||
set_xv();
|
set_xv();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void FixPOEMS::post_force(int vflag)
|
||||||
|
{
|
||||||
|
if (earlyflag) compute_forces_and_torques();
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
compute fcm,torque on each rigid body
|
compute fcm,torque on each rigid body
|
||||||
only count joint atoms in 1st body
|
only count joint atoms in 1st body
|
||||||
|
@ -837,13 +808,6 @@ void FixPOEMS::compute_forces_and_torques()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
void FixPOEMS::post_force(int vflag)
|
|
||||||
{
|
|
||||||
if (earlyflag) compute_forces_and_torques();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
update vcm,omega by last 1/2 step
|
update vcm,omega by last 1/2 step
|
||||||
set v of body atoms accordingly
|
set v of body atoms accordingly
|
||||||
|
@ -1678,6 +1642,21 @@ int FixPOEMS::unpack_exchange(int nlocal, double *buf)
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
int FixPOEMS::modify_param(int narg, char **arg)
|
||||||
|
{
|
||||||
|
if (strcmp(arg[0],"bodyforces") == 0) {
|
||||||
|
if (narg < 2) error->all(FLERR,"Illegal fix_modify command");
|
||||||
|
if (strcmp(arg[1],"early") == 0) earlyflag = 1;
|
||||||
|
else if (strcmp(arg[1],"late") == 0) earlyflag = 0;
|
||||||
|
else error->all(FLERR,"Illegal fix_modify command");
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ---------------------------------------------------------------------- */
|
||||||
|
|
||||||
void FixPOEMS::reset_dt()
|
void FixPOEMS::reset_dt()
|
||||||
{
|
{
|
||||||
dtv = update->dt;
|
dtv = update->dt;
|
||||||
|
|
|
@ -28,7 +28,6 @@ class FixPOEMS : public Fix {
|
||||||
public:
|
public:
|
||||||
FixPOEMS(class LAMMPS *, int narg, char **arg);
|
FixPOEMS(class LAMMPS *, int narg, char **arg);
|
||||||
~FixPOEMS();
|
~FixPOEMS();
|
||||||
int modify_param(int, char **);
|
|
||||||
int setmask();
|
int setmask();
|
||||||
void init();
|
void init();
|
||||||
void setup(int);
|
void setup(int);
|
||||||
|
@ -48,6 +47,7 @@ class FixPOEMS : public Fix {
|
||||||
void pre_neighbor();
|
void pre_neighbor();
|
||||||
int dof(int);
|
int dof(int);
|
||||||
void deform(int);
|
void deform(int);
|
||||||
|
int modify_param(int, char **);
|
||||||
void reset_dt();
|
void reset_dt();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -56,7 +56,6 @@ class FixPOEMS : public Fix {
|
||||||
double *step_respa;
|
double *step_respa;
|
||||||
int nlevels_respa;
|
int nlevels_respa;
|
||||||
double total_ke;
|
double total_ke;
|
||||||
|
|
||||||
int earlyflag; // 1 if forces and torques are computed at post_force()
|
int earlyflag; // 1 if forces and torques are computed at post_force()
|
||||||
|
|
||||||
// atom assignment to rigid bodies
|
// atom assignment to rigid bodies
|
||||||
|
|
|
@ -694,7 +694,7 @@ int FixRigid::setmask()
|
||||||
int mask = 0;
|
int mask = 0;
|
||||||
mask |= INITIAL_INTEGRATE;
|
mask |= INITIAL_INTEGRATE;
|
||||||
mask |= FINAL_INTEGRATE;
|
mask |= FINAL_INTEGRATE;
|
||||||
if (langflag || earlyflag) mask |= POST_FORCE;
|
if (langflag) mask |= POST_FORCE;
|
||||||
mask |= PRE_NEIGHBOR;
|
mask |= PRE_NEIGHBOR;
|
||||||
mask |= INITIAL_INTEGRATE_RESPA;
|
mask |= INITIAL_INTEGRATE_RESPA;
|
||||||
mask |= FINAL_INTEGRATE_RESPA;
|
mask |= FINAL_INTEGRATE_RESPA;
|
||||||
|
@ -2638,6 +2638,17 @@ int FixRigid::modify_param(int narg, char **arg)
|
||||||
if (strcmp(arg[1],"early") == 0) earlyflag = 1;
|
if (strcmp(arg[1],"early") == 0) earlyflag = 1;
|
||||||
else if (strcmp(arg[1],"late") == 0) earlyflag = 0;
|
else if (strcmp(arg[1],"late") == 0) earlyflag = 0;
|
||||||
else error->all(FLERR,"Illegal fix_modify command");
|
else error->all(FLERR,"Illegal fix_modify command");
|
||||||
|
|
||||||
|
// reset fix mask
|
||||||
|
// must do here and not in init,
|
||||||
|
// since modify.cpp::init() uses fix masks before calling fix::init()
|
||||||
|
|
||||||
|
for (int i = 0; i < modify->nfix; i++)
|
||||||
|
if (strcmp(modify->fix[i]->id,id) == 0) {
|
||||||
|
if (earlyflag) modify->fmask[i] |= POST_FORCE;
|
||||||
|
else if (!langflag) modify->fmask[i] &= ~POST_FORCE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -540,7 +540,7 @@ int FixRigidSmall::setmask()
|
||||||
int mask = 0;
|
int mask = 0;
|
||||||
mask |= INITIAL_INTEGRATE;
|
mask |= INITIAL_INTEGRATE;
|
||||||
mask |= FINAL_INTEGRATE;
|
mask |= FINAL_INTEGRATE;
|
||||||
if (langflag || earlyflag) mask |= POST_FORCE;
|
if (langflag) mask |= POST_FORCE;
|
||||||
mask |= PRE_NEIGHBOR;
|
mask |= PRE_NEIGHBOR;
|
||||||
mask |= INITIAL_INTEGRATE_RESPA;
|
mask |= INITIAL_INTEGRATE_RESPA;
|
||||||
mask |= FINAL_INTEGRATE_RESPA;
|
mask |= FINAL_INTEGRATE_RESPA;
|
||||||
|
@ -3428,6 +3428,18 @@ int FixRigidSmall::modify_param(int narg, char **arg)
|
||||||
if (strcmp(arg[1],"early") == 0) earlyflag = 1;
|
if (strcmp(arg[1],"early") == 0) earlyflag = 1;
|
||||||
else if (strcmp(arg[1],"late") == 0) earlyflag = 0;
|
else if (strcmp(arg[1],"late") == 0) earlyflag = 0;
|
||||||
else error->all(FLERR,"Illegal fix_modify command");
|
else error->all(FLERR,"Illegal fix_modify command");
|
||||||
|
|
||||||
|
// reset fix mask
|
||||||
|
// must do here and not in init,
|
||||||
|
// since modify.cpp::init() uses fix masks before calling fix::init()
|
||||||
|
|
||||||
|
for (int i = 0; i < modify->nfix; i++)
|
||||||
|
if (strcmp(modify->fix[i]->id,id) == 0) {
|
||||||
|
if (earlyflag) modify->fmask[i] |= POST_FORCE;
|
||||||
|
else if (!langflag) modify->fmask[i] &= ~POST_FORCE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue