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

This commit is contained in:
sjplimp 2009-06-04 17:53:33 +00:00
parent f324cc18ee
commit 6e26c63bf5
2 changed files with 61 additions and 0 deletions

View File

@ -377,7 +377,14 @@ void Min::eng_force(int *pndof, double **px, double **ph, double **px0,
timer->stamp(TIME_NEIGHBOR);
setup_vectors();
// update x0 for atoms that migrated
// must do minimum_image on box size when x0 was stored
// domain->set_global_box() changes to x0 box, then restores current box
if (resetflag) {
box_swap();
domain->set_global_box();
double **x = atom->x;
double **x0 = fix_minimize->x0;
int nlocal = atom->nlocal;
@ -392,6 +399,9 @@ void Min::eng_force(int *pndof, double **px, double **ph, double **px0,
if (dy != dy0) x0[i][1] = x[i][1] - dy;
if (dz != dz0) x0[i][2] = x[i][2] - dz;
}
box_swap();
domain->set_global_box();
}
}
@ -560,6 +570,7 @@ int Min::linemin_backtrack(int n, double *x, double *dir,
// store coords and other dof at start of linesearch
box_store();
for (i = 0; i < n; i++) x0[i] = x[i];
if (nextra) modify->min_store();
@ -656,6 +667,7 @@ int Min::linemin_quadratic(int n, double *x, double *dir,
// store coords and other dof at start of linesearch
box_store();
for (i = 0; i < n; i++) x0[i] = x[i];
if (nextra) modify->min_store();
@ -868,3 +880,47 @@ void Min::ev_set(int ntimestep)
if (vflag_atom) update->vflag_atom = update->ntimestep;
vflag = vflag_global + vflag_atom;
}
/* ----------------------------------------------------------------------
store box size at beginning of line search
------------------------------------------------------------------------- */
void Min::box_store()
{
boxlo0[0] = domain->boxlo[0];
boxlo0[1] = domain->boxlo[1];
boxlo0[2] = domain->boxlo[2];
boxhi0[0] = domain->boxhi[0];
boxhi0[1] = domain->boxhi[1];
boxhi0[2] = domain->boxhi[2];
}
/* ----------------------------------------------------------------------
swap current box size with stored box size
------------------------------------------------------------------------- */
void Min::box_swap()
{
double tmp;
tmp = boxlo0[0];
boxlo0[0] = domain->boxlo[0];
domain->boxlo[0] = tmp;
tmp = boxlo0[1];
boxlo0[1] = domain->boxlo[1];
domain->boxlo[1] = tmp;
tmp = boxlo0[2];
boxlo0[2] = domain->boxlo[2];
domain->boxlo[2] = tmp;
tmp = boxhi0[0];
boxhi0[0] = domain->boxhi[0];
domain->boxhi[0] = tmp;
tmp = boxhi0[1];
boxhi0[1] = domain->boxhi[1];
domain->boxhi[1] = tmp;
tmp = boxhi0[2];
boxhi0[2] = domain->boxhi[2];
domain->boxhi[2] = tmp;
}

View File

@ -66,6 +66,9 @@ class Min : protected Pointers {
double *gextra;
double *hextra;
double boxlo0[3]; // box size at start of linesearch
double boxhi0[3];
// ptr to linemin functions
void setup();
@ -83,6 +86,8 @@ class Min : protected Pointers {
void ev_setup();
void ev_set(int);
void box_store();
void box_swap();
};
}