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

This commit is contained in:
sjplimp 2016-08-08 19:41:43 +00:00
parent 563e069971
commit 550be1d512
11 changed files with 84 additions and 40 deletions

View File

@ -75,10 +75,11 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
// expand args if any have wildcard character "*"
int expand = 0;
char **earg;
char **earg,**arghold;
int nargnew = input->expand_args(narg-iarg,&arg[iarg],1,earg);
if (earg != &arg[iarg]) expand = 1;
arghold = arg;
arg = earg;
// parse values until one isn't recognized
@ -189,8 +190,9 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
// if wildcard expansion occurred, free earg memory from expand_args()
if (expand) {
for (int i = 0; i < nargnew; i++) delete [] earg[i];
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
arg = arghold;
}
// setup and error check

View File

@ -68,15 +68,13 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
// nfield may be shrunk below if extra optional args exist
expand = 0;
nfield = nargnew = input->expand_args(narg-5,&arg[5],1,earg);
nfield = input->expand_args(narg-5,&arg[5],1,earg);
if (earg != &arg[5]) expand = 1;
// allocate field vectors
pack_choice = new FnPtrPack[nfield];
vtype = new int[nfield];
field2index = new int[nfield];
argindex = new int[nfield];
buffer_allow = 1;
buffer_flag = 1;
@ -89,6 +87,9 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
// computes, fixes, variables which the dump accesses
memory->create(field2index,nfield,"dump:field2index");
memory->create(argindex,nfield,"dump:argindex");
ncompute = 0;
id_compute = NULL;
compute = NULL;
@ -180,14 +181,14 @@ DumpCustom::~DumpCustom()
// could not do in constructor, b/c some derived classes process earg
if (expand) {
for (int i = 0; i < nargnew; i++) delete [] earg[i];
for (int i = 0; i < nfield; i++) delete [] earg[i];
memory->sfree(earg);
}
delete [] pack_choice;
delete [] vtype;
delete [] field2index;
delete [] argindex;
memory->destroy(field2index);
memory->destroy(argindex);
delete [] idregion;
memory->destroy(thresh_array);

View File

@ -40,7 +40,6 @@ class DumpCustom : public Dump {
int expand; // flag for whether field args were expanded
char **earg; // field names with wildcard expansion
int nargnew; // size of earg
int *vtype; // type of each vector (INT, DOUBLE)
char **vformat; // format string for each vector element

View File

@ -49,10 +49,11 @@ FixAveAtom::FixAveAtom(LAMMPS *lmp, int narg, char **arg) :
// this can reset nvalues
int expand = 0;
char **earg;
char **earg,**arghold;
nvalues = input->expand_args(nvalues,&arg[6],1,earg);
if (earg != &arg[6]) expand = 1;
arghold = arg;
arg = earg;
// parse values
@ -127,6 +128,7 @@ FixAveAtom::FixAveAtom(LAMMPS *lmp, int narg, char **arg) :
if (expand) {
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
arg = arghold;
}
// setup and error check

View File

@ -60,10 +60,11 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) :
// expand args if any have wildcard character "*"
int expand = 0;
char **earg;
char **earg,**arghold;
int nargnew = input->expand_args(narg-7,&arg[7],1,earg);
if (earg != &arg[7]) expand = 1;
arghold = arg;
arg = earg;
// parse values until one isn't recognized
@ -74,9 +75,8 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) :
value2index = new int[nargnew];
nvalues = 0;
int iarg = 0;
int iarg = 7;
while (iarg < narg) {
ids[nvalues] = NULL;
if (strcmp(arg[iarg],"vx") == 0) {
@ -376,8 +376,9 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) :
// wait to do this until after file comment lines are printed
if (expand) {
for (int i = 0; i < nargnew; i++) delete [] earg[i];
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
arg = arghold;
}
// this fix produces a global array

View File

@ -59,10 +59,11 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg):
// expand args if any have wildcard character "*"
int expand = 0;
char **earg;
char **earg,**arghold;
int nargnew = input->expand_args(narg-6,&arg[6],0,earg);
if (earg != &arg[6]) expand = 1;
arghold = arg;
arg = earg;
// parse values until one isn't recognized
@ -291,8 +292,9 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS * lmp, int narg, char **arg):
// wait to do this until after file comment lines are printed
if (expand) {
for (int i = 0; i < nargnew; i++) delete [] earg[i];
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
arg = arghold;
}
// allocate and initialize memory for averaging

View File

@ -100,58 +100,67 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
// this can reset nvalues
int expand = 0;
char **earg;
char **earg,**arghold;
nvalues = input->expand_args(nvalues,&arg[9],mode,earg);
if (earg != &arg[9]) expand = 1;
arghold = arg;
arg = earg;
// parse values
which = new int[nvalues];
argindex = new int[nvalues];
value2index = new int[nvalues];
ids = new char*[nvalues];
which = argindex = value2index = NULL;
ids = NULL;
allocate_values(nvalues);
for (int i = 0; i < nvalues; i++) {
if (strcmp(arg[i],"x") == 0) {
which[i] = X;
argindex[i] = 0;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"y") == 0) {
which[i] = X;
argindex[i] = 1;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"z") == 0) {
which[i] = X;
argindex[i] = 2;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"vx") == 0) {
which[i] = V;
argindex[i] = 0;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"vy") == 0) {
which[i] = V;
argindex[i] = 1;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"vz") == 0) {
which[i] = V;
argindex[i] = 2;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"fx") == 0) {
which[i] = F;
argindex[i] = 0;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"fy") == 0) {
which[i] = F;
argindex[i] = 1;
ids[i] = NULL;
iarg++;
} else if (strcmp(arg[i],"fz") == 0) {
which[i] = F;
argindex[i] = 2;
ids[i] = NULL;
iarg++;
} else if ((strncmp(arg[i],"c_",2) == 0) ||
(strncmp(arg[i],"f_",2) == 0) ||
@ -184,6 +193,7 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
if (expand) {
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
arg = arghold;
}
// setup and error check
@ -486,11 +496,11 @@ FixAveHisto::FixAveHisto(LAMMPS *lmp, int narg, char **arg) :
FixAveHisto::~FixAveHisto()
{
delete [] which;
delete [] argindex;
delete [] value2index;
memory->destroy(which);
memory->destroy(argindex);
memory->destroy(value2index);
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
memory->sfree(ids);
if (fp && me == 0) fclose(fp);
@ -993,6 +1003,18 @@ void FixAveHisto::options(int iarg, int narg, char **arg)
}
}
/* ----------------------------------------------------------------------
reallocate vectors for each input value, of length N
------------------------------------------------------------------------- */
void FixAveHisto::allocate_values(int n)
{
memory->grow(which,n,"ave/hsito:which");
memory->grow(argindex,n,"ave/histo:argindex");
memory->grow(value2index,n,"ave/histo:value2index");
ids = (char **) memory->srealloc(ids,n*sizeof(char *),"ave/histo:ids");
}
/* ----------------------------------------------------------------------
calculate nvalid = next step on which end_of_step does something
can be this timestep if multiple of nfreq and nrepeat = 1

View File

@ -66,6 +66,7 @@ class FixAveHisto : public Fix {
void bin_vector(int, double *, int);
void bin_atoms(double *, int);
void options(int, int, char **);
void allocate_values(int);
bigint nextvalid();
};

View File

@ -79,20 +79,18 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) :
// this can reset nvalues
int expand = 0;
char **earg;
char **earg,**arghold;
nvalues = input->expand_args(nvalues,&arg[6],mode,earg);
if (earg != &arg[6]) expand = 1;
arghold = arg;
arg = earg;
// parse values
which = new int[nvalues];
argindex = new int[nvalues];
value2index = new int[nvalues];
offcol = new int[nvalues];
varlen = new int[nvalues];
ids = new char*[nvalues];
which = argindex = value2index = offcol = varlen = NULL;
ids = NULL;
allocate_values(nvalues);
for (int i = 0; i < nvalues; i++) {
if (arg[i][0] == 'c') which[i] = COMPUTE;
@ -295,6 +293,7 @@ FixAveTime::FixAveTime(LAMMPS *lmp, int narg, char **arg) :
if (expand) {
for (int i = 0; i < nvalues; i++) delete [] earg[i];
memory->sfree(earg);
arg = arghold;
}
// allocate memory for averaging
@ -456,13 +455,13 @@ FixAveTime::~FixAveTime()
delete [] format_user;
delete [] which;
delete [] argindex;
delete [] value2index;
delete [] offcol;
delete [] varlen;
memory->destroy(which);
memory->destroy(argindex);
memory->destroy(value2index);
memory->destroy(offcol);
memory->destroy(varlen);
for (int i = 0; i < nvalues; i++) delete [] ids[i];
delete [] ids;
memory->sfree(ids);
delete [] extlist;
@ -1106,6 +1105,20 @@ void FixAveTime::options(int iarg, int narg, char **arg)
}
}
/* ----------------------------------------------------------------------
reallocate vectors for N input values
------------------------------------------------------------------------- */
void FixAveTime::allocate_values(int n)
{
memory->grow(which,n,"ave/time:which");
memory->grow(argindex,n,"ave/time:argindex");
memory->grow(value2index,n,"ave/time:value2index");
memory->grow(offcol,n,"ave/time:offcol");
memory->grow(varlen,n,"ave/time:varlen");
ids = (char **) memory->srealloc(ids,n*sizeof(char *),"ave/time:ids");
}
/* ----------------------------------------------------------------------
reallocate arrays for mode = VECTOR of size Nrows x Nvalues
------------------------------------------------------------------------- */

View File

@ -70,6 +70,7 @@ class FixAveTime : public Fix {
void invoke_scalar(bigint);
void invoke_vector(bigint);
void options(int, int, char **);
void allocate_values(int);
void allocate_arrays();
bigint nextvalid();
};

View File

@ -569,7 +569,7 @@ void Thermo::modify_params(int narg, char **arg)
format_int_user = NULL;
format_bigint_user = NULL;
format_float_user = NULL;
for (int i = 0; i < nfield_initial+1; i++) {
for (int i = 0; i < nfield_initial; i++) {
delete [] format_column_user[i];
format_column_user[i] = NULL;
}
@ -610,7 +610,7 @@ void Thermo::modify_params(int narg, char **arg)
strcpy(format_float_user,arg[iarg+2]);
} else {
int i = force->inumeric(FLERR,arg[iarg+1]) - 1;
if (i < 0 || i >= nfield_initial+1)
if (i < 0 || i >= nfield_initial)
error->all(FLERR,"Illegal thermo_modify command");
if (format_column_user[i]) delete [] format_column_user[i];
int n = strlen(arg[iarg+2]) + 1;