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

This commit is contained in:
sjplimp
2007-10-09 17:20:33 +00:00
parent 88d8a739fa
commit 1dec0d587b
27 changed files with 360 additions and 175 deletions

View File

@ -37,6 +37,12 @@ FixIndent::FixIndent(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg)
{
if (narg < 4) error->all("Illegal fix indent command");
scalar_flag = 1;
vector_flag = 1;
size_vector = 3;
scalar_vector_freq = 1;
k = atof(arg[3]);
// set defaults
@ -122,7 +128,6 @@ void FixIndent::init()
void FixIndent::setup()
{
eflag_enable = 1;
if (strcmp(update->integrate_style,"verlet") == 0)
post_force(1);
else {
@ -130,14 +135,12 @@ void FixIndent::setup()
post_force_respa(1,nlevels_respa-1,0);
((Respa *) update->integrate)->copy_f_flevel(nlevels_respa-1);
}
eflag_enable = 0;
}
/* ---------------------------------------------------------------------- */
void FixIndent::min_setup()
{
eflag_enable = 1;
post_force(1);
}
@ -145,10 +148,6 @@ void FixIndent::min_setup()
void FixIndent::post_force(int vflag)
{
bool eflag = false;
if (eflag_enable) eflag = true;
else if (output->next_thermo == update->ntimestep) eflag = true;
// set current r0
// for minimization, always set to r0_stop
@ -160,8 +159,10 @@ void FixIndent::post_force(int vflag)
r0 = r0_start + delta * (r0_stop-r0_start);
}
double eng;
if (eflag) eng = 0.0;
// indenter values, 0 = energy, 1-3 = force components
indenter_flag = 0;
indenter[0] = indenter[1] = indenter[2] = indenter[3] = 0.0;
// spherical indenter
@ -179,7 +180,7 @@ void FixIndent::post_force(int vflag)
int *mask = atom->mask;
int nlocal = atom->nlocal;
double delx,dely,delz,r,dr,fmag;
double delx,dely,delz,r,dr,fmag,fx,fy,fz;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
@ -190,10 +191,16 @@ void FixIndent::post_force(int vflag)
dr = r - r0;
if (dr >= 0.0) continue;
fmag = k*dr*dr;
f[i][0] += delx*fmag/r;
f[i][1] += dely*fmag/r;
f[i][2] += delz*fmag/r;
if (eflag) eng -= k3 * dr*dr*dr;
fx = delx*fmag/r;
fy = dely*fmag/r;
fz = delz*fmag/r;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
indenter[0] -= k3 * dr*dr*dr;
indenter[1] -= fx;
indenter[2] -= fy;
indenter[3] -= fz;
}
// cylindrical indenter
@ -220,7 +227,7 @@ void FixIndent::post_force(int vflag)
int *mask = atom->mask;
int nlocal = atom->nlocal;
double delx,dely,delz,r,dr,fmag;
double delx,dely,delz,r,dr,fmag,fx,fy,fz;
for (int i = 0; i < nlocal; i++)
if (mask[i] & groupbit) {
@ -241,14 +248,18 @@ void FixIndent::post_force(int vflag)
dr = r - r0;
if (dr >= 0.0) continue;
fmag = k*dr*dr;
f[i][0] += delx*fmag/r;
f[i][1] += dely*fmag/r;
f[i][2] += delz*fmag/r;
if (eflag) eng -= k3 * dr*dr*dr;
fx = delx*fmag/r;
fy = dely*fmag/r;
fz = delz*fmag/r;
f[i][0] += fx;
f[i][1] += fy;
f[i][2] += fz;
indenter[0] -= k3 * dr*dr*dr;
indenter[1] -= fx;
indenter[2] -= fy;
indenter[3] -= fz;
}
}
if (eflag) MPI_Allreduce(&eng,&etotal,1,MPI_DOUBLE,MPI_SUM,world);
}
/* ---------------------------------------------------------------------- */
@ -265,12 +276,34 @@ void FixIndent::min_post_force(int vflag)
post_force(vflag);
}
/* ---------------------------------------------------------------------- */
/* ----------------------------------------------------------------------
energy of indenter interaction
------------------------------------------------------------------------- */
double FixIndent::thermo(int n)
double FixIndent::compute_scalar()
{
if (n == 0) return etotal;
else return 0.0;
// only sum across procs one time
if (indenter_flag == 0) {
MPI_Allreduce(indenter,indenter_all,4,MPI_DOUBLE,MPI_SUM,world);
indenter_flag = 1;
}
return indenter_all[0];
}
/* ----------------------------------------------------------------------
components of force on indenter
------------------------------------------------------------------------- */
double FixIndent::compute_vector(int n)
{
// only sum across procs one time
if (indenter_flag == 0) {
MPI_Allreduce(indenter,indenter_all,4,MPI_DOUBLE,MPI_SUM,world);
indenter_flag = 1;
}
return indenter_all[n];
}
/* ----------------------------------------------------------------------