rearranged deallocation

This commit is contained in:
kipbarrett
2021-07-19 12:52:09 -05:00
parent 0ddd90fe0f
commit 4e0071c8cf
2 changed files with 104 additions and 42 deletions

View File

@ -75,29 +75,90 @@ static const char cite_user_rann_package[] =
PairRANN::PairRANN(LAMMPS *lmp) : Pair(lmp)
{
//initialize ints and bools
single_enable = 0;
restartinfo = 0;
one_coeff = 1;
manybody_flag = 1;
allocated = 0;
nelements = -1;
elements = nullptr;
mass = nullptr;
// set comm size needed by this Pair
// comm unused for now.
comm_forward = 38;
comm_reverse = 30;
nelementsp = -1;
comm_forward = 0;
comm_reverse = 0;
res = 10000;
cutmax = 0;
//at least one of the following will change during fingerprint definition:
dospin = false;
memguess = 0;
nmax1 = 0;
nmax2 = 0;
fmax = 0;
fnmax = 0;
//at least one of the following two flags will change during fingerprint definition:
doscreen = false;
allscreen = true;
dospin = false;
//null init for arrays with sizes not yet determined.
elements = nullptr;
mass = nullptr;
elementsp = nullptr;
map = nullptr;
fingerprintcount = nullptr;
fingerprintlength = nullptr;
fingerprintperelement = nullptr;
screening_min = nullptr;
screening_max = nullptr;
weightdefined = nullptr;
biasdefined = nullptr;
xn = nullptr;
yn = nullptr;
zn = nullptr;
Sik = nullptr;
dSikx = nullptr;
dSiky = nullptr;
dSikz = nullptr;
dSijkx = nullptr;
dSijky = nullptr;
dSijkz = nullptr;
sx = nullptr;
sy = nullptr;
sz = nullptr;
dSijkxc = nullptr;
dSijkyc = nullptr;
dSijkzc = nullptr;
dfeaturesx = nullptr;
dfeaturesy = nullptr;
dfeaturesz = nullptr;
features = nullptr;
layer = nullptr;
sum = nullptr;
sum1 = nullptr;
dlayerx = nullptr;
dlayery = nullptr;
dlayerz = nullptr;
dlayersumx = nullptr;
dlayersumy = nullptr;
dlayersumz = nullptr;
dsx = nullptr;
dsy = nullptr;
dsz = nullptr;
dssumx = nullptr;
dssumy = nullptr;
dssumz = nullptr;
tn = nullptr;
jl = nullptr;
Bij = nullptr;
sims = nullptr;
net = nullptr;
activation = nullptr;
fingerprints = nullptr;
}
PairRANN::~PairRANN()
{
deallocate();
}
void PairRANN::deallocate()
{
//clear memory
delete[] mass;
@ -157,30 +218,26 @@ PairRANN::~PairRANN()
memory->destroy(dlayersumx);
memory->destroy(dlayersumy);
memory->destroy(dlayersumz);
if (doscreen) {
memory->destroy(Sik);
memory->destroy(Bij);
memory->destroy(dSikx);
memory->destroy(dSiky);
memory->destroy(dSikz);
memory->destroy(dSijkx);
memory->destroy(dSijky);
memory->destroy(dSijkz);
memory->destroy(dSijkxc);
memory->destroy(dSijkyc);
memory->destroy(dSijkzc);
}
if (dospin) {
memory->destroy(sx);
memory->destroy(sy);
memory->destroy(sz);
memory->destroy(dsx);
memory->destroy(dsy);
memory->destroy(dsz);
memory->destroy(dssumx);
memory->destroy(dssumy);
memory->destroy(dssumz);
}
memory->destroy(Sik);
memory->destroy(Bij);
memory->destroy(dSikx);
memory->destroy(dSiky);
memory->destroy(dSikz);
memory->destroy(dSijkx);
memory->destroy(dSijky);
memory->destroy(dSijkz);
memory->destroy(dSijkxc);
memory->destroy(dSijkyc);
memory->destroy(dSijkzc);
memory->destroy(sx);
memory->destroy(sy);
memory->destroy(sz);
memory->destroy(dsx);
memory->destroy(dsy);
memory->destroy(dsz);
memory->destroy(dssumx);
memory->destroy(dssumy);
memory->destroy(dssumz);
memory->destroy(setflag);
memory->destroy(cutsq);
}
@ -243,6 +300,7 @@ void PairRANN::settings(int narg, char ** /*arg*/)
void PairRANN::coeff(int narg, char **arg)
{
int i,j;
deallocate();//clear allocation from any previous coeff
map = new int[atom->ntypes+1];
if (narg != 3 + atom->ntypes) error->one(FLERR,"Incorrect args for pair coefficients");
if (strcmp(arg[0],"*") != 0 || strcmp(arg[1],"*") != 0) error->one(FLERR,"Incorrect args for pair coefficients");
@ -294,7 +352,7 @@ void PairRANN::read_file(char *filename)
FILE *fp;
int eof = 0;
std::string line,line1;
int longline = 4096;
const int longline = 4096;
int linenum;
char linetemp[longline];
std::string strtemp;
@ -405,12 +463,12 @@ void PairRANN::read_fpe(std::vector<std::string> line,std::vector<std::string> l
}
void PairRANN::read_fingerprints(std::vector<std::string> line,std::vector<std::string> line1,char *filename,int linenum) {
int nwords1,nwords,i,j,k,i1;
int nwords1,nwords,i,j,k,i1,*atomtypes;
bool found;
nwords1 = line1.size();
nwords = line.size();
if (nelements == -1)error->one(filename,linenum-1,"atom types must be defined before fingerprints in potential file.");
int atomtypes[nwords-1];
atomtypes = new int[nwords-1];
for (i=1;i<nwords;i++) {
found = false;
for (j=0;j<nelementsp;j++) {
@ -435,15 +493,16 @@ void PairRANN::read_fingerprints(std::vector<std::string> line,std::vector<std::
fingerprints[i][i1]->init(atomtypes,utils::inumeric(filename,linenum,line1[k++].c_str(),1,lmp));
fingerprintcount[i]++;
}
delete[] atomtypes;
}
void PairRANN::read_fingerprint_constants(std::vector<std::string> line,std::vector<std::string> line1,char *filename,int linenum) {
int i,j,k,i1;
int i,j,k,i1,*atomtypes;
bool found;
int nwords = line.size();
if (nelements == -1)error->one(filename,linenum-1,"atom types must be defined before fingerprints in potential file.");
int n_body_type = nwords-4;
int atomtypes[n_body_type];
atomtypes = new int[n_body_type];
for (i=1;i<=n_body_type;i++) {
found = false;
for (j=0;j<nelementsp;j++) {
@ -474,6 +533,7 @@ void PairRANN::read_fingerprint_constants(std::vector<std::string> line,std::vec
}
if (!found) {error->one(filename,linenum-1,"cannot define constants for unknown fingerprint");}
fingerprints[i][i1]->fullydefined=fingerprints[i][i1]->parse_values(line[nwords-1],line1);
delete[] atomtypes;
}
void PairRANN::read_network_layers(std::vector<std::string> line,std::vector<std::string> line1,char *filename,int linenum) {
@ -521,7 +581,7 @@ void PairRANN::read_layer_size(std::vector<std::string> line,std::vector<std::st
void PairRANN::read_weight(std::vector<std::string> line,std::vector<std::string> line1,FILE* fp,char *filename,int *linenum) {
int i,j,k,l,nwords;
char *ptr;
int longline = 4096;
const int longline = 4096;
char linetemp [longline];
for (l=0;l<nelements;l++) {
if (line[1].compare(elements[l])==0) {
@ -596,13 +656,13 @@ void PairRANN::read_activation_functions(std::vector<std::string> line,std::vect
}
void PairRANN::read_screening(std::vector<std::string> line,std::vector<std::string> line1,char *filename,int linenum) {
int i,j,k;
int i,j,k,*atomtypes;
bool found;
int nwords = line.size();
if (nelements == -1)error->one(filename,linenum-1,"atom types must be defined before fingerprints in potential file.");
if (nwords!=5)error->one(filename,linenum-1,"invalid screening command");
int n_body_type = 3;
int atomtypes[n_body_type];
atomtypes = new int[n_body_type];
for (i=1;i<=n_body_type;i++) {
found = false;
for (j=0;j<nelementsp;j++) {
@ -625,6 +685,7 @@ void PairRANN::read_screening(std::vector<std::string> line,std::vector<std::str
screening_max[index] = utils::numeric(filename,linenum,line1[0].c_str(),1,lmp);
}
else error->one(filename,linenum-1,"unrecognized screening keyword");
delete[] atomtypes;
}
//Called after finishing reading the potential file to make sure it is complete. True is bad.

View File

@ -136,6 +136,7 @@ namespace LAMMPS_NS {
private:
//new functions
void allocate(const std::vector<std::string> &);//called after reading element list, but before reading the rest of the potential
void deallocate();
void read_file(char *);//read potential file
void read_atom_types(std::vector<std::string>,char*,int);
void read_fpe(std::vector<std::string>,std::vector<std::string>,char*,int);//fingerprints per element. Count total fingerprints defined for each 1st element in element combinations