diff --git a/src/domain.cpp b/src/domain.cpp index 84464925fd..1bd781bc46 100644 --- a/src/domain.cpp +++ b/src/domain.cpp @@ -912,6 +912,7 @@ void Domain::delete_region(int narg, char **arg) int iregion = find_region(arg[0]); if (iregion == -1) error->all("Delete region ID does not exist"); + delete regions[iregion]; regions[iregion] = regions[nregion-1]; nregion--; } diff --git a/src/fix_addforce.cpp b/src/fix_addforce.cpp index 23bc116ba1..677a430141 100644 --- a/src/fix_addforce.cpp +++ b/src/fix_addforce.cpp @@ -72,6 +72,7 @@ FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) : // optional args iregion = -1; + idregion = NULL; estr = NULL; int iarg = 6; @@ -79,7 +80,11 @@ FixAddForce::FixAddForce(LAMMPS *lmp, int narg, char **arg) : if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all("Illegal fix addforce command"); iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all("Fix addforce region ID does not exist"); + if (iregion == -1) + error->all("Region ID for fix addforce does not exist"); + int n = strlen(arg[iarg+1]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"energy") == 0) { if (iarg+2 > narg) error->all("Illegal fix addforce command"); @@ -107,6 +112,7 @@ FixAddForce::~FixAddForce() delete [] ystr; delete [] zstr; delete [] estr; + delete [] idregion; memory->destroy_2d_double_array(sforce); } @@ -156,6 +162,13 @@ void FixAddForce::init() else error->all("Variable for fix setforce is invalid style"); } else estyle = NONE; + // set index and check validity of region + + if (iregion >= 0) { + iregion = domain->find_region(idregion); + if (iregion == -1) error->all("Region ID for fix addforce does not exist"); + } + if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM) varflag = ATOM; else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL) diff --git a/src/fix_addforce.h b/src/fix_addforce.h index d1ccec4278..82798d98ba 100644 --- a/src/fix_addforce.h +++ b/src/fix_addforce.h @@ -43,6 +43,7 @@ class FixAddForce : public Fix { double xvalue,yvalue,zvalue; int varflag,iregion; char *xstr,*ystr,*zstr,*estr; + char *idregion; int xvar,yvar,zvar,evar,xstyle,ystyle,zstyle,estyle; double foriginal[4],foriginal_all[4]; int force_flag; diff --git a/src/fix_aveforce.cpp b/src/fix_aveforce.cpp index 7abece0d37..198a51ffa4 100644 --- a/src/fix_aveforce.cpp +++ b/src/fix_aveforce.cpp @@ -76,13 +76,18 @@ FixAveForce::FixAveForce(LAMMPS *lmp, int narg, char **arg) : // optional args iregion = -1; + idregion = NULL; int iarg = 6; while (iarg < narg) { if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all("Illegal fix aveforce command"); iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all("Fix aveforce region ID does not exist"); + if (iregion == -1) + error->all("Region ID for fix aveforce does not exist"); + int n = strlen(arg[iarg+1]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[iarg+1]); iarg += 2; } else error->all("Illegal fix aveforce command"); @@ -99,6 +104,7 @@ FixAveForce::~FixAveForce() delete [] xstr; delete [] ystr; delete [] zstr; + delete [] idregion; } /* ---------------------------------------------------------------------- */ @@ -137,6 +143,13 @@ void FixAveForce::init() else error->all("Variable for fix aveforce is invalid style"); } + // set index and check validity of region + + if (iregion >= 0) { + iregion = domain->find_region(idregion); + if (iregion == -1) error->all("Region ID for fix aveforce does not exist"); + } + if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL) varflag = EQUAL; else varflag = CONSTANT; diff --git a/src/fix_aveforce.h b/src/fix_aveforce.h index b0ea9d650a..0f84f47c49 100644 --- a/src/fix_aveforce.h +++ b/src/fix_aveforce.h @@ -41,6 +41,7 @@ class FixAveForce : public Fix { double xvalue,yvalue,zvalue; int varflag; char *xstr,*ystr,*zstr; + char *idregion; int xvar,yvar,zvar,xstyle,ystyle,zstyle; int iregion; double foriginal_all[4]; diff --git a/src/fix_deposit.cpp b/src/fix_deposit.cpp index 55c8ec4842..4e02e59d1c 100644 --- a/src/fix_deposit.cpp +++ b/src/fix_deposit.cpp @@ -53,6 +53,7 @@ FixDeposit::FixDeposit(LAMMPS *lmp, int narg, char **arg) : // set defaults iregion = -1; + idregion = NULL; globalflag = localflag = 0; lo = hi = deltasq = 0.0; nearsq = 0.0; @@ -142,6 +143,7 @@ FixDeposit::FixDeposit(LAMMPS *lmp, int narg, char **arg) : FixDeposit::~FixDeposit() { delete random; + delete [] idregion; } /* ---------------------------------------------------------------------- */ @@ -153,6 +155,16 @@ int FixDeposit::setmask() return mask; } +/* ---------------------------------------------------------------------- */ + +void FixDeposit::init() +{ + // set index and check validity of region + + iregion = domain->find_region(idregion); + if (iregion == -1) error->all("Region ID for fix deposit does not exist"); +} + /* ---------------------------------------------------------------------- perform particle insertion ------------------------------------------------------------------------- */ @@ -350,7 +362,11 @@ void FixDeposit::options(int narg, char **arg) if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all("Illegal fix deposit command"); iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all("Fix deposit region ID does not exist"); + if (iregion == -1) + error->all("Region ID for fix deposit does not exist"); + int n = strlen(arg[iarg+1]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[iarg+1]); iarg += 2; } else if (strcmp(arg[iarg],"global") == 0) { if (iarg+3 > narg) error->all("Illegal fix deposit command"); diff --git a/src/fix_deposit.h b/src/fix_deposit.h index 964d378fa1..22bd0d8457 100644 --- a/src/fix_deposit.h +++ b/src/fix_deposit.h @@ -30,6 +30,7 @@ class FixDeposit : public Fix { FixDeposit(class LAMMPS *, int, char **); ~FixDeposit(); int setmask(); + void init(); void pre_exchange(); void write_restart(FILE *); void restart(char *); @@ -37,6 +38,7 @@ class FixDeposit : public Fix { private: int ninsert,ntype,nfreq,seed; int iregion,globalflag,localflag,maxattempt,rateflag,scaleflag; + char *idregion; double lo,hi,deltasq,nearsq,rate; double vxlo,vxhi,vylo,vyhi,vzlo,vzhi; double xlo,xhi,ylo,yhi,zlo,zhi; diff --git a/src/fix_evaporate.cpp b/src/fix_evaporate.cpp index 6147257e26..ef25dbb25d 100644 --- a/src/fix_evaporate.cpp +++ b/src/fix_evaporate.cpp @@ -46,10 +46,13 @@ FixEvaporate::FixEvaporate(LAMMPS *lmp, int narg, char **arg) : nevery = atoi(arg[3]); nflux = atoi(arg[4]); iregion = domain->find_region(arg[5]); + int n = strlen(arg[5]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[5]); int seed = atoi(arg[6]); if (nevery <= 0 || nflux <= 0) error->all("Illegal fix evaporate command"); - if (iregion == -1) error->all("Fix evaporate region ID does not exist"); + if (iregion == -1) error->all("Region ID for fix evaporate does not exist"); if (seed <= 0) error->all("Illegal fix evaporate command"); // random number generator, same for all procs @@ -86,6 +89,7 @@ FixEvaporate::FixEvaporate(LAMMPS *lmp, int narg, char **arg) : FixEvaporate::~FixEvaporate() { + delete [] idregion; delete random; memory->sfree(list); memory->sfree(mark); @@ -104,6 +108,12 @@ int FixEvaporate::setmask() void FixEvaporate::init() { + // set index and check validity of region + + iregion = domain->find_region(idregion); + if (iregion == -1) + error->all("Region ID for fix evaporate does not exist"); + // check that no deletable atoms are in atom->firstgroup // deleting such an atom would not leave firstgroup atoms first diff --git a/src/fix_evaporate.h b/src/fix_evaporate.h index 54a10391a5..63a6d122f5 100644 --- a/src/fix_evaporate.h +++ b/src/fix_evaporate.h @@ -38,6 +38,7 @@ class FixEvaporate : public Fix { int nevery,nflux,iregion; int molflag; int ndeleted; + char *idregion; int nmax; int *list,*mark; diff --git a/src/fix_heat.cpp b/src/fix_heat.cpp index 8a19c2ad4c..a6eda20678 100644 --- a/src/fix_heat.cpp +++ b/src/fix_heat.cpp @@ -47,13 +47,17 @@ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) // optional args iregion = -1; + idregion = NULL; int iarg = 5; while (iarg < narg) { if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all("Illegal fix heat command"); iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all("Fix heat region ID does not exist"); + if (iregion == -1) error->all("Region ID for fix heat does not exist"); + int n = strlen(arg[iarg+1]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[iarg+1]); iarg += 2; } else error->all("Illegal fix heat command"); } @@ -63,6 +67,13 @@ FixHeat::FixHeat(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg) /* ---------------------------------------------------------------------- */ +FixHeat::~FixHeat() +{ + delete [] idregion; +} + +/* ---------------------------------------------------------------------- */ + int FixHeat::setmask() { int mask = 0; @@ -74,6 +85,13 @@ int FixHeat::setmask() void FixHeat::init() { + // set index and check validity of region + + if (iregion >= 0) { + iregion = domain->find_region(idregion); + if (iregion == -1) error->all("Region ID for fix heat does not exist"); + } + // cannot have 0 atoms in group if (group->count(igroup) == 0.0) error->all("Fix heat group has no atoms"); diff --git a/src/fix_heat.h b/src/fix_heat.h index cb59bf0f00..ecfcab76ad 100644 --- a/src/fix_heat.h +++ b/src/fix_heat.h @@ -27,6 +27,7 @@ namespace LAMMPS_NS { class FixHeat : public Fix { public: FixHeat(class LAMMPS *, int, char **); + ~FixHeat(); int setmask(); void init(); void end_of_step(); @@ -37,6 +38,7 @@ class FixHeat : public Fix { double heat_input; double masstotal; double scale; + char *idregion; }; } diff --git a/src/fix_setforce.cpp b/src/fix_setforce.cpp index f886898c7e..f9f30c868f 100644 --- a/src/fix_setforce.cpp +++ b/src/fix_setforce.cpp @@ -76,13 +76,18 @@ FixSetForce::FixSetForce(LAMMPS *lmp, int narg, char **arg) : // optional args iregion = -1; + idregion = NULL; int iarg = 6; while (iarg < narg) { if (strcmp(arg[iarg],"region") == 0) { if (iarg+2 > narg) error->all("Illegal fix setforce command"); iregion = domain->find_region(arg[iarg+1]); - if (iregion == -1) error->all("Fix setforce region ID does not exist"); + if (iregion == -1) + error->all("Region ID for fix setforce does not exist"); + int n = strlen(arg[iarg+1]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[iarg+1]); iarg += 2; } else error->all("Illegal fix setforce command"); } @@ -101,6 +106,7 @@ FixSetForce::~FixSetForce() delete [] xstr; delete [] ystr; delete [] zstr; + delete [] idregion; memory->destroy_2d_double_array(sforce); } @@ -143,6 +149,13 @@ void FixSetForce::init() else error->all("Variable for fix setforce is invalid style"); } + // set index and check validity of region + + if (iregion >= 0) { + iregion = domain->find_region(idregion); + if (iregion == -1) error->all("Region ID for fix setforce does not exist"); + } + if (xstyle == ATOM || ystyle == ATOM || zstyle == ATOM) varflag = ATOM; else if (xstyle == EQUAL || ystyle == EQUAL || zstyle == EQUAL) diff --git a/src/fix_setforce.h b/src/fix_setforce.h index 999a7bc840..f9f141c148 100644 --- a/src/fix_setforce.h +++ b/src/fix_setforce.h @@ -42,6 +42,7 @@ class FixSetForce : public Fix { double xvalue,yvalue,zvalue; int varflag,iregion; char *xstr,*ystr,*zstr; + char *idregion; int xvar,yvar,zvar,xstyle,ystyle,zstyle; double foriginal[3],foriginal_all[3]; int force_flag; diff --git a/src/fix_wall_region.cpp b/src/fix_wall_region.cpp index e90419fa0f..714d960009 100644 --- a/src/fix_wall_region.cpp +++ b/src/fix_wall_region.cpp @@ -46,7 +46,11 @@ FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) : // parse args iregion = domain->find_region(arg[3]); - if (iregion == -1) error->all("Fix wall/region region ID does not exist"); + if (iregion == -1) + error->all("Region ID for fix wall/region does not exist"); + int n = strlen(arg[3]) + 1; + idregion = new char[n]; + strcpy(idregion,arg[3]); if (strcmp(arg[4],"lj93") == 0) style = LJ93; else if (strcmp(arg[4],"lj126") == 0) style = LJ126; @@ -66,6 +70,13 @@ FixWallRegion::FixWallRegion(LAMMPS *lmp, int narg, char **arg) : /* ---------------------------------------------------------------------- */ +FixWallRegion::~FixWallRegion() +{ + delete [] idregion; +} + +/* ---------------------------------------------------------------------- */ + int FixWallRegion::setmask() { int mask = 0; @@ -80,6 +91,12 @@ int FixWallRegion::setmask() void FixWallRegion::init() { + // set index and check validity of region + + iregion = domain->find_region(idregion); + if (iregion == -1) + error->all("Region ID for fix wall/region does not exist"); + // error checks for style COLLOID // insure all particle shapes are spherical // can be polydisperse diff --git a/src/fix_wall_region.h b/src/fix_wall_region.h index f11d38ee53..03bc4b8b47 100644 --- a/src/fix_wall_region.h +++ b/src/fix_wall_region.h @@ -27,7 +27,7 @@ namespace LAMMPS_NS { class FixWallRegion : public Fix { public: FixWallRegion(class LAMMPS *, int, char **); - ~FixWallRegion() {} + ~FixWallRegion(); int setmask(); void init(); void setup(int); @@ -45,6 +45,7 @@ class FixWallRegion : public Fix { double ewall[4],ewall_all[4]; int nlevels_respa; double dt; + char *idregion; double coeff1,coeff2,coeff3,coeff4,offset; double eng,fwall;