diff --git a/src/ML-IAP/mliap_descriptor_snap.cpp b/src/ML-IAP/mliap_descriptor_snap.cpp index aa2b2d34af..5dbb461c09 100644 --- a/src/ML-IAP/mliap_descriptor_snap.cpp +++ b/src/ML-IAP/mliap_descriptor_snap.cpp @@ -345,7 +345,7 @@ void MLIAPDescriptorSNAP::read_paramfile(char *paramfilename) chemflag = 0; bnormflag = 0; wselfallflag = 0; - switchinnerflag = 1; + switchinnerflag = 0; for (int i = 0; i < nelements; i++) delete[] elements[i]; delete[] elements; diff --git a/src/ML-SNAP/compute_sna_atom.cpp b/src/ML-SNAP/compute_sna_atom.cpp index 421a317364..4a3094a9fd 100644 --- a/src/ML-SNAP/compute_sna_atom.cpp +++ b/src/ML-SNAP/compute_sna_atom.cpp @@ -54,7 +54,7 @@ ComputeSNAAtom::ComputeSNAAtom(LAMMPS *lmp, int narg, char **arg) : chemflag = 0; bnormflag = 0; wselfallflag = 0; - switchinnerflag = 1; + switchinnerflag = 0; nelements = 1; // offset by 1 to match up with types diff --git a/src/ML-SNAP/compute_snad_atom.cpp b/src/ML-SNAP/compute_snad_atom.cpp index 2f2ad6f970..1d92065f2a 100644 --- a/src/ML-SNAP/compute_snad_atom.cpp +++ b/src/ML-SNAP/compute_snad_atom.cpp @@ -54,7 +54,7 @@ ComputeSNADAtom::ComputeSNADAtom(LAMMPS *lmp, int narg, char **arg) : chemflag = 0; bnormflag = 0; wselfallflag = 0; - switchinnerflag = 1; + switchinnerflag = 0; nelements = 1; // process required arguments diff --git a/src/ML-SNAP/compute_snap.cpp b/src/ML-SNAP/compute_snap.cpp index 6d4649ed4f..da870a1728 100644 --- a/src/ML-SNAP/compute_snap.cpp +++ b/src/ML-SNAP/compute_snap.cpp @@ -61,7 +61,7 @@ ComputeSnap::ComputeSnap(LAMMPS *lmp, int narg, char **arg) : chemflag = 0; bnormflag = 0; wselfallflag = 0; - switchinnerflag = 1; + switchinnerflag = 0; nelements = 1; // process required arguments diff --git a/src/ML-SNAP/compute_snav_atom.cpp b/src/ML-SNAP/compute_snav_atom.cpp index 487838a770..b1d2d2b51b 100644 --- a/src/ML-SNAP/compute_snav_atom.cpp +++ b/src/ML-SNAP/compute_snav_atom.cpp @@ -53,7 +53,7 @@ ComputeSNAVAtom::ComputeSNAVAtom(LAMMPS *lmp, int narg, char **arg) : chemflag = 0; bnormflag = 0; wselfallflag = 0; - switchinnerflag = 1; + switchinnerflag = 0; nelements = 1; // process required arguments diff --git a/src/ML-SNAP/pair_snap.cpp b/src/ML-SNAP/pair_snap.cpp index 1d4db2faae..8544b728e0 100644 --- a/src/ML-SNAP/pair_snap.cpp +++ b/src/ML-SNAP/pair_snap.cpp @@ -674,7 +674,8 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) if (eof) break; MPI_Bcast(line,MAXLINE,MPI_CHAR,0,world); - // strip comment, skip line if blank + // words = ptrs to all words in line + // strip single and double quotes from words std::vector words; try { @@ -684,57 +685,80 @@ void PairSNAP::read_files(char *coefffilename, char *paramfilename) } if (words.size() == 0) continue; + if (words.size() < 2) error->all(FLERR,"Incorrect format in SNAP parameter file"); auto keywd = words[0]; auto keyval = words[1]; - if (comm->me == 0) - utils::logmesg(lmp,"SNAP keyword {} {}\n",keywd,keyval); + // check for keywords with one value per element - if (keywd == "rcutfac") { - rcutfac = utils::numeric(FLERR,keyval,false,lmp); - rcutfacflag = 1; - } else if (keywd == "twojmax") { - twojmax = utils::inumeric(FLERR,keyval,false,lmp); - twojmaxflag = 1; - } else if (keywd == "rfac0") - rfac0 = utils::numeric(FLERR,keyval,false,lmp); - else if (keywd == "rmin0") - rmin0 = utils::numeric(FLERR,keyval,false,lmp); - else if (keywd == "switchflag") - switchflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "bzeroflag") - bzeroflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "quadraticflag") - quadraticflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "chemflag") - chemflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "bnormflag") - bnormflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "wselfallflag") - wselfallflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "switchinnerflag") - switchinnerflag = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "chunksize") - chunksize = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "parallelthresh") - parallel_thresh = utils::inumeric(FLERR,keyval,false,lmp); - else if (keywd == "rinner") { - for (int ielem = 0; ielem < nelements; ielem++) { - rinnerelem[ielem] = utils::numeric(FLERR,keyval,false,lmp); - keyval = strtok(nullptr,"' \t\n\r\f"); + if (keywd == "rinner" || keywd == "drinner") { + + if (nwords != nelements+1) + error->all(FLERR,"Incorrect SNAP parameter file"); + + if (comm->me == 0) + utils::logmesg(lmp,"SNAP keyword {} {} ... \n", keywd, keyval); + + if (keywd == "rinner") { + for (int ielem = 0; ielem < nelements; ielem++) { + rinnerelem[ielem] = utils::numeric(FLERR,keyval,false,lmp); + keyval = strtok(nullptr,"' \t\n\r\f"); + } + rinnerflag = 1; + } else if (keywd == "drinner") { + printf("drinner nelements = %d %s\n",nelements,keyval.c_str()); + for (int ielem = 0; ielem < nelements; ielem++) { + drinnerelem[ielem] = utils::numeric(FLERR,keyval,false,lmp); + keyval = strtok(nullptr,"' \t\n\r\f"); + printf("drinner ielem = %d drinnerelem[ielem] = %g\n",ielem,drinnerelem[ielem]); + } + drinnerflag = 1; } - rinnerflag = 1; - } else if (keywd == "drinner") { - for (int ielem = 0; ielem < nelements; ielem++) { - drinnerelem[ielem] = utils::numeric(FLERR,keyval,false,lmp); - keyval = strtok(nullptr,"' \t\n\r\f"); - } - drinnerflag = 1; - } else - error->all(FLERR,"Unknown parameter '{}' in SNAP parameter file", keywd); + + } else { + + // all other keywords take one value + + if (nwords != 2) + error->all(FLERR,"Incorrect SNAP parameter file"); + + if (comm->me == 0) + utils::logmesg(lmp,"SNAP keyword {} {}\n",keywd,keyval); + + if (keywd == "rcutfac") { + rcutfac = utils::numeric(FLERR,keyval,false,lmp); + rcutfacflag = 1; + } else if (keywd == "twojmax") { + twojmax = utils::inumeric(FLERR,keyval,false,lmp); + twojmaxflag = 1; + } else if (keywd == "rfac0") + rfac0 = utils::numeric(FLERR,keyval,false,lmp); + else if (keywd == "rmin0") + rmin0 = utils::numeric(FLERR,keyval,false,lmp); + else if (keywd == "switchflag") + switchflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "bzeroflag") + bzeroflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "quadraticflag") + quadraticflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "chemflag") + chemflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "bnormflag") + bnormflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "wselfallflag") + wselfallflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "switchinnerflag") + switchinnerflag = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "chunksize") + chunksize = utils::inumeric(FLERR,keyval,false,lmp); + else if (keywd == "parallelthresh") + parallel_thresh = utils::inumeric(FLERR,keyval,false,lmp); + else + error->all(FLERR,"Unknown parameter '{}' in SNAP parameter file", keywd); + } } if (rcutfacflag == 0 || twojmaxflag == 0)