git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@5047 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2010-10-14 17:18:05 +00:00
parent c507b5f502
commit 7b516d0751
12 changed files with 68 additions and 12 deletions

View File

@ -16,6 +16,7 @@
#include "fix_addforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
@ -248,10 +249,14 @@ void FixAddForce::post_force(int vflag)
f[i][2] += zvalue;
}
// variable force
// variable force, wrap with clear/add
// potential energy = evar if defined, else 0.0
// wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
else if (xstyle == ATOM)
input->variable->compute_atom(xvar,igroup,&sforce[0][0],4,0);
@ -264,6 +269,8 @@ void FixAddForce::post_force(int vflag)
if (estyle == ATOM)
input->variable->compute_atom(evar,igroup,&sforce[0][3],4,0);
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (iregion >= 0 &&

View File

@ -17,6 +17,7 @@
#include "fix_aveforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
@ -206,6 +207,7 @@ void FixAveForce::post_force(int vflag)
// average the force on participating atoms
// add in requested amount, computed via variable evaluation if necessary
// wrap variable evaluation with clear/add
MPI_Allreduce(foriginal,foriginal_all,4,MPI_DOUBLE,MPI_SUM,world);
@ -213,9 +215,11 @@ void FixAveForce::post_force(int vflag)
if (ncount == 0) return;
if (varflag == EQUAL) {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
if (ystyle == EQUAL) yvalue = input->variable->compute_equal(yvar);
if (zstyle == EQUAL) zvalue = input->variable->compute_equal(zvar);
modify->addstep_compute(update->ntimestep + 1);
}
double fave[3];

View File

@ -21,6 +21,7 @@
#include "fix_efield.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "force.h"
#include "respa.h"
#include "input.h"
@ -176,7 +177,12 @@ void FixEfield::post_force(int vflag)
f[i][2] += q[i]*ez;
}
// variable efield, wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) ex = qe2f * input->variable->compute_equal(xvar);
else if (xstyle == ATOM)
input->variable->compute_atom(xvar,igroup,&efield[0][0],3,0);
@ -187,6 +193,8 @@ void FixEfield::post_force(int vflag)
else if (zstyle == ATOM)
input->variable->compute_atom(zvar,igroup,&efield[0][2],3,0);
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (xstyle == ATOM) f[i][0] += qe2f * q[i]*efield[i][0];

View File

@ -25,6 +25,7 @@
#include "domain.h"
#include "lattice.h"
#include "update.h"
#include "modify.h"
#include "output.h"
#include "respa.h"
#include "error.h"
@ -81,6 +82,9 @@ FixIndent::FixIndent(LAMMPS *lmp, int narg, char **arg) :
else if (cdim == 2 && !pstr) pvalue *= zscale;
} else error->all("Illegal fix indent command");
varflag = 0;
if (xstr || ystr || zstr || rstr || pstr) varflag = 1;
indenter_flag = 0;
indenter[0] = indenter[1] = indenter[2] = indenter[3] = 0.0;
}
@ -172,6 +176,9 @@ void FixIndent::min_setup(int vflag)
void FixIndent::post_force(int vflag)
{
// indenter values, 0 = energy, 1-3 = force components
// wrap variable evaluations with clear/add
if (varflag) modify->clearstep_compute();
indenter_flag = 0;
indenter[0] = indenter[1] = indenter[2] = indenter[3] = 0.0;
@ -237,7 +244,7 @@ void FixIndent::post_force(int vflag)
// ctr = current indenter axis
// remap into periodic box
// 3rd coord is just near box for remap(), since isn't used
double ctr[3];
if (cdim == 0) {
ctr[0] = domain->boxlo[0];
@ -335,6 +342,8 @@ void FixIndent::post_force(int vflag)
indenter[cdim+1] -= fatom;
}
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
}
/* ---------------------------------------------------------------------- */

View File

@ -46,7 +46,7 @@ class FixIndent : public Fix {
double xvalue,yvalue,zvalue,rvalue,pvalue;
int indenter_flag,planeside;
double indenter[4],indenter_all[4];
int cdim;
int cdim,varflag;
int nlevels_respa;
void options(int, char **);

View File

@ -18,6 +18,7 @@
#include "atom.h"
#include "group.h"
#include "update.h"
#include "modify.h"
#include "force.h"
#include "domain.h"
#include "lattice.h"
@ -569,7 +570,9 @@ void FixMove::initial_integrate(int vflag)
}
}
// pre-compute variable values
// pre-compute variable values, wrap with clear/add
modify->clearstep_compute();
if (xvarstr) {
if (xvarstyle == EQUAL) dx = input->variable->compute_equal(xvar);
@ -596,6 +599,8 @@ void FixMove::initial_integrate(int vflag)
else input->variable->compute_atom(vzvar,igroup,&velocity[0][2],3,0);
}
modify->addstep_compute(update->ntimestep + 1);
// update x,v
for (int i = 0; i < nlocal; i++) {

View File

@ -16,6 +16,7 @@
#include "fix_setforce.h"
#include "atom.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "region.h"
#include "respa.h"
@ -222,7 +223,12 @@ void FixSetForce::post_force(int vflag)
if (zstyle) f[i][2] = zvalue;
}
// variable force, wrap with clear/add
} else {
modify->clearstep_compute();
if (xstyle == EQUAL) xvalue = input->variable->compute_equal(xvar);
else if (xstyle == ATOM)
input->variable->compute_atom(xvar,igroup,&sforce[0][0],3,0);
@ -233,6 +239,8 @@ void FixSetForce::post_force(int vflag)
else if (zstyle == ATOM)
input->variable->compute_atom(zvar,igroup,&sforce[0][2],3,0);
modify->addstep_compute(update->ntimestep + 1);
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
if (iregion >= 0 &&

View File

@ -45,7 +45,7 @@ class FixSetForce : public Fix {
char *idregion;
int xvar,yvar,zvar,xstyle,ystyle,zstyle;
double foriginal[3],foriginal_all[3];
int force_flag;
int varany,force_flag;
int nlevels_respa;
int maxatom;

View File

@ -21,6 +21,7 @@
#include "domain.h"
#include "lattice.h"
#include "update.h"
#include "modify.h"
#include "respa.h"
#include "error.h"
@ -145,10 +146,11 @@ FixWall::FixWall(LAMMPS *lmp, int narg, char **arg) :
}
}
// set time_depend if any wall positions are variable
// set time_depend and varflag if any wall positions are variable
varflag = 0;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] == VARIABLE) time_depend = 1;
if (wallstyle[m] == VARIABLE) time_depend = varflag = 1;
eflag = 0;
for (int m = 0; m <= nwall; m++) ewall[m] = 0.0;
@ -225,7 +227,9 @@ void FixWall::post_force(int vflag)
for (int m = 0; m <= nwall; m++) ewall[m] = 0.0;
// coord = current position of wall
// evaluate variable if necessary
// evaluate variable if necessary, wrap with clear/add
if (varflag) modify->clearstep_compute();
double coord;
for (int m = 0; m < nwall; m++) {
@ -235,6 +239,8 @@ void FixWall::post_force(int vflag)
wall_particle(m,wallwhich[m],coord);
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
}
/* ---------------------------------------------------------------------- */

View File

@ -41,11 +41,10 @@ class FixWall : public Fix {
double coord0[6],epsilon[6],sigma[6],cutoff[6];
char *varstr[6];
int varindex[6];
int eflag;
int eflag,varflag;
double ewall[7],ewall_all[7];
int nlevels_respa;
double dt;
int time_origin;
};
}

View File

@ -16,6 +16,7 @@
#include "fix_wall_reflect.h"
#include "atom.h"
#include "comm.h"
#include "update.h"
#include "modify.h"
#include "domain.h"
#include "lattice.h"
@ -132,10 +133,11 @@ FixWallReflect::FixWallReflect(LAMMPS *lmp, int narg, char **arg) :
}
}
// set time_depend if any wall positions are variable
// set time_depend and varflag if any wall positions are variable
varflag = 0;
for (int m = 0; m < nwall; m++)
if (wallstyle[m] == VARIABLE) time_depend = 1;
if (wallstyle[m] == VARIABLE) time_depend = varflag = 1;
}
/* ---------------------------------------------------------------------- */
@ -185,11 +187,16 @@ void FixWallReflect::post_integrate()
int i,dim,side;
double coord;
// coord = current position of wall
// evaluate variable if necessary, wrap with clear/add
double **x = atom->x;
double **v = atom->v;
int *mask = atom->mask;
int nlocal = atom->nlocal;
if (varflag) modify->clearstep_compute();
for (int m = 0; m < nwall; m++) {
if (wallstyle[m] == VARIABLE)
coord = input->variable->compute_equal(varindex[m]);
@ -213,4 +220,6 @@ void FixWallReflect::post_integrate()
}
}
}
if (varflag) modify->addstep_compute(update->ntimestep + 1);
}

View File

@ -38,6 +38,7 @@ class FixWallReflect : public Fix {
double coord0[6];
char *varstr[6];
int varindex[6];
int varflag;
};
}