From 550be1d5129eee2d1459bf5d3cfed7b8fd618fe9 Mon Sep 17 00:00:00 2001 From: sjplimp Date: Mon, 8 Aug 2016 19:41:43 +0000 Subject: [PATCH] git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@15462 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/compute_reduce.cpp | 6 ++++-- src/dump_custom.cpp | 13 +++++++------ src/dump_custom.h | 1 - src/fix_ave_atom.cpp | 4 +++- src/fix_ave_chunk.cpp | 9 +++++---- src/fix_ave_correlate.cpp | 6 ++++-- src/fix_ave_histo.cpp | 40 ++++++++++++++++++++++++++++++--------- src/fix_ave_histo.h | 1 + src/fix_ave_time.cpp | 39 +++++++++++++++++++++++++------------- src/fix_ave_time.h | 1 + src/thermo.cpp | 4 ++-- 11 files changed, 84 insertions(+), 40 deletions(-) diff --git a/src/compute_reduce.cpp b/src/compute_reduce.cpp index 7ea3c2aafe..baaf2f7b05 100644 --- a/src/compute_reduce.cpp +++ b/src/compute_reduce.cpp @@ -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 diff --git a/src/dump_custom.cpp b/src/dump_custom.cpp index 033614789a..e99533eba8 100644 --- a/src/dump_custom.cpp +++ b/src/dump_custom.cpp @@ -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); diff --git a/src/dump_custom.h b/src/dump_custom.h index 6caa70d1f7..3239a3283f 100644 --- a/src/dump_custom.h +++ b/src/dump_custom.h @@ -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 diff --git a/src/fix_ave_atom.cpp b/src/fix_ave_atom.cpp index 2784537c67..9b0375baec 100644 --- a/src/fix_ave_atom.cpp +++ b/src/fix_ave_atom.cpp @@ -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 diff --git a/src/fix_ave_chunk.cpp b/src/fix_ave_chunk.cpp index dd3d69fac3..123e1f8d27 100644 --- a/src/fix_ave_chunk.cpp +++ b/src/fix_ave_chunk.cpp @@ -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 diff --git a/src/fix_ave_correlate.cpp b/src/fix_ave_correlate.cpp index 18e16d1ea9..0e2ad9d0f5 100644 --- a/src/fix_ave_correlate.cpp +++ b/src/fix_ave_correlate.cpp @@ -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 diff --git a/src/fix_ave_histo.cpp b/src/fix_ave_histo.cpp index 06281e2eca..cc0eb9532e 100644 --- a/src/fix_ave_histo.cpp +++ b/src/fix_ave_histo.cpp @@ -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 diff --git a/src/fix_ave_histo.h b/src/fix_ave_histo.h index c740a26256..6fcfd27e31 100644 --- a/src/fix_ave_histo.h +++ b/src/fix_ave_histo.h @@ -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(); }; diff --git a/src/fix_ave_time.cpp b/src/fix_ave_time.cpp index 430c6069b7..bbcef78f92 100644 --- a/src/fix_ave_time.cpp +++ b/src/fix_ave_time.cpp @@ -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 ------------------------------------------------------------------------- */ diff --git a/src/fix_ave_time.h b/src/fix_ave_time.h index d771036530..f2f79f1276 100644 --- a/src/fix_ave_time.h +++ b/src/fix_ave_time.h @@ -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(); }; diff --git a/src/thermo.cpp b/src/thermo.cpp index 3ef19c50a6..5474401b07 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -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;