From 2eac45a18dca4eb4bb46e7f04840bfc4297e14ac Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 26 Apr 2012 14:06:44 -0400 Subject: [PATCH] fix bugs in volume preservation code. --- src/change_box.cpp | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/change_box.cpp b/src/change_box.cpp index 2b629812cc..1dc9c79a3e 100644 --- a/src/change_box.cpp +++ b/src/change_box.cpp @@ -30,9 +30,9 @@ using namespace LAMMPS_NS; -enum{XYZ,TILT,BOUNDARY,ORTHO,TRICLINIC,SET,REMAP}; -enum{FINAL,DELTA,SCALE}; -enum{X,Y,Z,YZ,XZ,XY}; +enum{XYZ=0,TILT,BOUNDARY,ORTHO,TRICLINIC,SET,REMAP}; +enum{FINAL=0,DELTA,SCALE}; +enum{X=0,Y,Z,YZ,XZ,XY}; /* ---------------------------------------------------------------------- */ @@ -66,6 +66,7 @@ void ChangeBox::command(int narg, char **arg) int dimension = domain->dimension; ops = new Operation[narg-1]; + memset(ops,0,(narg-1)*sizeof(Operation)); nops = 0; int index; @@ -218,9 +219,9 @@ 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) - volume_preserve(ops[i].vdim1,ops[i].vdim2,volume); domain->set_initial_box(); + if (ops[i].vdim1 >= 0) + volume_preserve(ops[i].vdim1,ops[i].vdim2,volume); domain->set_global_box(); domain->set_local_box(); domain->print_box(" "); @@ -228,9 +229,9 @@ 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) - volume_preserve(ops[i].vdim1,ops[i].vdim2,volume); domain->set_initial_box(); + if (ops[i].vdim1 >= 0) + volume_preserve(ops[i].vdim1,ops[i].vdim2,volume); domain->set_global_box(); domain->set_local_box(); domain->print_box(" "); @@ -242,7 +243,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(); @@ -423,6 +424,11 @@ void ChangeBox::save_box_state() void ChangeBox::volume_preserve(int dim1, int dim2, double oldvol) { + // apply pending changes + domain->set_initial_box(); + domain->set_global_box(); + domain->set_local_box(); + double newvol; if (domain->dimension == 2) newvol = domain->xprd * domain->yprd; else newvol = domain->xprd * domain->yprd * domain->zprd;