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

This commit is contained in:
sjplimp
2008-10-22 15:52:29 +00:00
parent 18fa9f45a5
commit 0c0d735986
4 changed files with 85 additions and 24 deletions

View File

@ -1036,6 +1036,8 @@ void Atom::set_mass(const char *str)
mass[itype] = mass_one; mass[itype] = mass_one;
mass_setflag[itype] = 1; mass_setflag[itype] = 1;
if (mass[itype] <= 0.0) error->all("Invalid mass value");
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -1050,6 +1052,8 @@ void Atom::set_mass(int itype, double value)
mass[itype] = value; mass[itype] = value;
mass_setflag[itype] = 1; mass_setflag[itype] = 1;
if (mass[itype] <= 0.0) error->all("Invalid mass value");
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -1068,6 +1072,8 @@ void Atom::set_mass(int narg, char **arg)
for (int itype = lo; itype <= hi; itype++) { for (int itype = lo; itype <= hi; itype++) {
mass[itype] = atof(arg[1]); mass[itype] = atof(arg[1]);
mass_setflag[itype] = 1; mass_setflag[itype] = 1;
if (mass[itype] <= 0.0) error->all("Invalid mass value");
} }
} }
@ -1116,6 +1122,9 @@ void Atom::set_shape(const char *str)
shape[itype][1] = 0.5*b; shape[itype][1] = 0.5*b;
shape[itype][2] = 0.5*c; shape[itype][2] = 0.5*c;
shape_setflag[itype] = 1; shape_setflag[itype] = 1;
if (shape[itype][0] < 0.0 || shape[itype][1] < 0.0 || shape[itype][2] < 0.0)
error->all("Invalid shape value");
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -1139,6 +1148,10 @@ void Atom::set_shape(int narg, char **arg)
shape[itype][1] = 0.5*atof(arg[2]); shape[itype][1] = 0.5*atof(arg[2]);
shape[itype][2] = 0.5*atof(arg[3]); shape[itype][2] = 0.5*atof(arg[3]);
shape_setflag[itype] = 1; shape_setflag[itype] = 1;
if (shape[itype][0] < 0.0 || shape[itype][1] < 0.0 ||
shape[itype][2] < 0.0)
error->all("Invalid shape value");
} }
} }
@ -1176,13 +1189,15 @@ void Atom::set_dipole(const char *str)
{ {
if (dipole == NULL) error->all("Cannot set dipole for this atom style"); if (dipole == NULL) error->all("Cannot set dipole for this atom style");
int i; int itype;
double dipole_one; double dipole_one;
int n = sscanf(str,"%d %lg",&i,&dipole_one); int n = sscanf(str,"%d %lg",&itype,&dipole_one);
if (n != 2) error->all("Invalid shape line in data file"); if (n != 2) error->all("Invalid dipole line in data file");
dipole[i] = dipole_one; dipole[itype] = dipole_one;
dipole_setflag[i] = 1; dipole_setflag[itype] = 1;
if (dipole[itype] < 0.0) error->all("Invalid dipole value");
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -1201,6 +1216,8 @@ void Atom::set_dipole(int narg, char **arg)
for (int itype = lo; itype <= hi; itype++) { for (int itype = lo; itype <= hi; itype++) {
dipole[itype] = atof(arg[1]); dipole[itype] = atof(arg[1]);
dipole_setflag[itype] = 1; dipole_setflag[itype] = 1;
if (dipole[itype] < 0.0) error->all("Invalid dipole value");
} }
} }

View File

@ -66,7 +66,7 @@ void ComputeERotateSphere::init()
for (int i = 1; i <= atom->ntypes; i++) { for (int i = 1; i <= atom->ntypes; i++) {
if (shape[i][0] != shape[i][1] || shape[i][0] != shape[i][2]) if (shape[i][0] != shape[i][1] || shape[i][0] != shape[i][2])
error->all("Compute erotate/sphere requires spherical particle shapes"); error->all("Compute erotate/sphere requires spherical particle shapes");
inertia[i] = 0.25*shape[i][0]*shape[i][0] * mass[i]; inertia[i] = shape[i][0]*shape[i][0] * mass[i];
} }
} }
} }

View File

@ -98,7 +98,7 @@ void ComputeTempSphere::init()
for (int i = 1; i <= atom->ntypes; i++) { for (int i = 1; i <= atom->ntypes; i++) {
if (shape[i][0] != shape[i][1] || shape[i][0] != shape[i][2]) if (shape[i][0] != shape[i][1] || shape[i][0] != shape[i][2])
error->all("Compute temp/sphere requires spherical particle shapes"); error->all("Compute temp/sphere requires spherical particle shapes");
inertia[i] = INERTIA * 0.25*shape[i][0]*shape[i][0] * mass[i]; inertia[i] = INERTIA * shape[i][0]*shape[i][0] * mass[i];
} }
} }
} }

View File

@ -221,26 +221,70 @@ void Verlet::force_clear()
{ {
int i; int i;
// clear global force array // clear force on all particles
// nall includes ghosts only if either newton flag is set // if either newton flag is set, also include ghosts
int nall; if (neighbor->includegroup == 0) {
if (force->newton) nall = atom->nlocal + atom->nghost; int nall;
else nall = atom->nlocal; if (force->newton) nall = atom->nlocal + atom->nghost;
else nall = atom->nlocal;
double **f = atom->f; double **f = atom->f;
for (i = 0; i < nall; i++) {
f[i][0] = 0.0;
f[i][1] = 0.0;
f[i][2] = 0.0;
}
if (torqueflag) {
double **torque = atom->torque;
for (i = 0; i < nall; i++) { for (i = 0; i < nall; i++) {
torque[i][0] = 0.0; f[i][0] = 0.0;
torque[i][1] = 0.0; f[i][1] = 0.0;
torque[i][2] = 0.0; f[i][2] = 0.0;
}
if (torqueflag) {
double **torque = atom->torque;
for (i = 0; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
// neighbor includegroup flag is set
// clear force only on initial nfirst particles
// if either newton flag is set, also include ghosts
} else {
int nall = atom->nfirst;
double **f = atom->f;
for (i = 0; i < nall; i++) {
f[i][0] = 0.0;
f[i][1] = 0.0;
f[i][2] = 0.0;
}
if (torqueflag) {
double **torque = atom->torque;
for (i = 0; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
if (force->newton) {
nall = atom->nlocal + atom->nghost;
for (i = atom->nlocal; i < nall; i++) {
f[i][0] = 0.0;
f[i][1] = 0.0;
f[i][2] = 0.0;
}
if (torqueflag) {
double **torque = atom->torque;
for (i = atom->nlocal; i < nall; i++) {
torque[i][0] = 0.0;
torque[i][1] = 0.0;
torque[i][2] = 0.0;
}
}
} }
} }
} }