address memory leak and C versus C++ programming issues in pair style polymorphic

This commit is contained in:
Axel Kohlmeyer
2020-06-18 13:09:58 -04:00
parent bfe42e3fbe
commit a42c68892f
2 changed files with 81 additions and 63 deletions

View File

@ -47,26 +47,26 @@ PairPolymorphic::PairPolymorphic(LAMMPS *lmp) : Pair(lmp)
one_coeff = 1;
nelements = 0;
elements = NULL;
match = NULL;
pairParameters = NULL;
tripletParameters = NULL;
elem2param = NULL;
elem3param = NULL;
map = NULL;
elements = nullptr;
match = nullptr;
pairParameters = nullptr;
tripletParameters = nullptr;
elem2param = nullptr;
elem3param = nullptr;
map = nullptr;
epsilon = 0.0;
neighsize = 0;
firstneighV = NULL;
firstneighW = NULL;
firstneighW1 = NULL;
delxV = NULL;
delyV = NULL;
delzV = NULL;
drV = NULL;
delxW = NULL;
delyW = NULL;
delzW = NULL;
drW = NULL;
firstneighV = nullptr;
firstneighW = nullptr;
firstneighW1 = nullptr;
delxV = nullptr;
delyV = nullptr;
delzV = nullptr;
drV = nullptr;
delxW = nullptr;
delyW = nullptr;
delzW = nullptr;
drW = nullptr;
}
/* ----------------------------------------------------------------------
@ -79,8 +79,10 @@ PairPolymorphic::~PairPolymorphic()
for (int i = 0; i < nelements; i++) delete [] elements[i];
delete [] elements;
delete [] match;
memory->destroy(pairParameters);
memory->destroy(tripletParameters);
delete [] pairParameters;
delete [] tripletParameters;
memory->destroy(elem2param);
memory->destroy(elem3param);
if (allocated) {
@ -487,7 +489,7 @@ void PairPolymorphic::coeff(int narg, char **arg)
delete [] elements;
}
elements = new char*[atom->ntypes];
for (i = 0; i < atom->ntypes; i++) elements[i] = NULL;
for (i = 0; i < atom->ntypes; i++) elements[i] = nullptr;
nelements = 0;
for (i = 3; i < narg; i++) {
@ -581,6 +583,7 @@ void PairPolymorphic::read_file(char *file)
eta = values.next_int();
// map the elements in the potential file to LAMMPS atom types
delete [] match;
match = new int[nelements];
for (int i = 0; i < nelements; i++) {
@ -617,8 +620,10 @@ void PairPolymorphic::read_file(char *file)
// cutoffs
npair = nelements*(nelements+1)/2;
ntriple = nelements*nelements*nelements;
pairParameters = (PairParameters*) memory->srealloc(pairParameters,npair*sizeof(PairParameters), "pair:pairParameters");
tripletParameters = (TripletParameters*) memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), "pair:tripletParameters");
delete [] pairParameters;
delete [] tripletParameters;
pairParameters = new PairParameters[npair];
tripletParameters = new TripletParameters[ntriple];
for (int i = 0; i < npair; i++) {
PairParameters & p = pairParameters[i];
@ -641,9 +646,12 @@ void PairPolymorphic::read_file(char *file)
MPI_Bcast(&ntriple, 1, MPI_INT, 0, world);
if(comm->me != 0) {
delete [] match;
match = new int[nelements];
pairParameters = (PairParameters*) memory->srealloc(pairParameters,npair*sizeof(PairParameters), "pair:pairParameters");
tripletParameters = (TripletParameters*) memory->srealloc(tripletParameters,ntriple*sizeof(TripletParameters), "pair:tripletParameters");
delete [] pairParameters;
delete [] tripletParameters;
pairParameters = new PairParameters[npair];
tripletParameters = new TripletParameters[ntriple];
}
MPI_Bcast(match, nelements, MPI_INT, 0, world);

View File

@ -50,14 +50,14 @@ class PairPolymorphic : public Pair {
xmax = 0.0;
xmaxsq = xmax*xmax;
vmax = 0.0;
xs = NULL;
ys = NULL;
ys1 = NULL;
ys2 = NULL;
ys3 = NULL;
ys4 = NULL;
ys5 = NULL;
ys6 = NULL;
xs = nullptr;
ys = nullptr;
ys1 = nullptr;
ys2 = nullptr;
ys3 = nullptr;
ys4 = nullptr;
ys5 = nullptr;
ys6 = nullptr;
}
tabularFunction(int n) {
size = n;
@ -88,14 +88,14 @@ class PairPolymorphic : public Pair {
ys6 = new double[n];
}
virtual ~tabularFunction() {
if (xs) delete [] xs;
if (ys) delete [] ys;
if (ys1) delete [] ys1;
if (ys2) delete [] ys2;
if (ys3) delete [] ys3;
if (ys4) delete [] ys4;
if (ys5) delete [] ys5;
if (ys6) delete [] ys6;
delete [] xs;
delete [] ys;
delete [] ys1;
delete [] ys2;
delete [] ys3;
delete [] ys4;
delete [] ys5;
delete [] ys6;
}
void set_xrange(double x1, double x2) {
xmin = x1;
@ -198,21 +198,21 @@ class PairPolymorphic : public Pair {
void resize(int n) {
if (n != size) {
size = n;
if (xs) delete [] xs;
delete [] xs;
xs = new double[n];
if (ys) delete [] ys;
delete [] ys;
ys = new double[n];
if (ys1) delete [] ys1;
delete [] ys1;
ys1 = new double[n];
if (ys2) delete [] ys2;
delete [] ys2;
ys2 = new double[n];
if (ys3) delete [] ys3;
delete [] ys3;
ys3 = new double[n];
if (ys4) delete [] ys4;
delete [] ys4;
ys4 = new double[n];
if (ys5) delete [] ys5;
delete [] ys5;
ys5 = new double[n];
if (ys6) delete [] ys6;
delete [] ys6;
ys6 = new double[n];
}
}
@ -248,35 +248,45 @@ class PairPolymorphic : public Pair {
}
int size;
double xmin,xmax,xmaxsq,rdx,vmax;
double * ys, * ys1, * ys2, * ys3, * ys4, * ys5, * ys6;
double * xs;
double *ys, *ys1, *ys2, *ys3, *ys4, *ys5, *ys6;
double *xs;
};
struct PairParameters {
double cut;
double cutsq;
double xi;
class tabularFunction * U;
class tabularFunction * V;
class tabularFunction * W;
class tabularFunction * F;
class tabularFunction *U;
class tabularFunction *V;
class tabularFunction *W;
class tabularFunction *F;
PairParameters() {
cut = 0.0;
cutsq = 0.0;
xi = 1.0;
U = NULL;
V = NULL;
W = NULL;
F = NULL;
U = nullptr;
V = nullptr;
W = nullptr;
F = nullptr;
};
~PairParameters() {
delete U;
delete V;
delete W;
delete F;
}
};
struct TripletParameters {
class tabularFunction * P;
class tabularFunction * G;
class tabularFunction *P;
class tabularFunction *G;
TripletParameters() {
P = NULL;
G = NULL;
P = nullptr;
G = nullptr;
};
~TripletParameters() {
delete P;
delete G;
}
};
double epsilon;