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

This commit is contained in:
sjplimp
2012-05-17 23:47:57 +00:00
parent 2e1873a20b
commit a930905787
2 changed files with 28 additions and 11 deletions

View File

@ -218,7 +218,7 @@ void ChangeBox::command(int narg, char **arg)
if (ops[i].flavor == FINAL) {
domain->boxlo[ops[i].dim] = scale[ops[i].dim]*ops[i].flo;
domain->boxhi[ops[i].dim] = scale[ops[i].dim]*ops[i].fhi;
if (ops[i].vdim1)
if (ops[i].vdim1 >= 0)
volume_preserve(ops[i].vdim1,ops[i].vdim2,volume);
domain->set_initial_box();
domain->set_global_box();
@ -228,7 +228,7 @@ void ChangeBox::command(int narg, char **arg)
} else if (ops[i].flavor == DELTA) {
domain->boxlo[ops[i].dim] += scale[ops[i].dim]*ops[i].dlo;
domain->boxhi[ops[i].dim] += scale[ops[i].dim]*ops[i].dhi;
if (ops[i].vdim1)
if (ops[i].vdim1 >= 0)
volume_preserve(ops[i].vdim1,ops[i].vdim2,volume);
domain->set_initial_box();
domain->set_global_box();
@ -242,7 +242,7 @@ void ChangeBox::command(int narg, char **arg)
domain->boxlo[ops[i].dim] = mid + ops[i].scale*delta;
delta = domain->boxhi[ops[i].dim] - mid;
domain->boxhi[ops[i].dim] = mid + ops[i].scale*delta;
if (ops[i].vdim1)
if (ops[i].vdim1 >= 0)
volume_preserve(ops[i].vdim1,ops[i].vdim2,volume);
domain->set_initial_box();
domain->set_global_box();
@ -417,15 +417,29 @@ void ChangeBox::save_box_state()
}
/* ----------------------------------------------------------------------
oldvol = box volume before dim3 changed
newvol = box volume after dim3 changed
reset box lengths of dim1/2 to preserve old volume
which changed due to change in 3rd dim
------------------------------------------------------------------------- */
void ChangeBox::volume_preserve(int dim1, int dim2, double oldvol)
{
// invoke set_initial_box()
// in case change by caller to dim3 was invalid or on shrink-wrapped dim
domain->set_initial_box();
// calculate newvol using boxlo/hi since xyz prd are not yet reset
double newvol;
if (domain->dimension == 2) newvol = domain->xprd * domain->yprd;
else newvol = domain->xprd * domain->yprd * domain->zprd;
if (domain->dimension == 2) {
newvol = domain->boxhi[0] - domain->boxlo[0];
newvol *= domain->boxhi[1] - domain->boxlo[1];
} else {
newvol = domain->boxhi[0] - domain->boxlo[0];
newvol *= domain->boxhi[1] - domain->boxlo[1];
newvol *= domain->boxhi[2] - domain->boxlo[2];
}
double scale = oldvol/newvol;
double mid,delta;
@ -439,8 +453,8 @@ void ChangeBox::volume_preserve(int dim1, int dim2, double oldvol)
delta = domain->boxhi[dim1] - mid;
domain->boxhi[dim1] = mid + scale*delta;
// change dim1 and dim2, keeping their relative aspect constant
// means both are scaled by sqrt(scale)
// change dim1 and dim2, keeping their relative aspect ratio constant
// both are scaled by sqrt(scale)
} else {
mid = 0.5 * (domain->boxlo[dim1] + domain->boxhi[dim1]);