address memory leak and C versus C++ programming issues in pair style polymorphic
This commit is contained in:
@ -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);
|
||||
|
||||
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user