From 98e2e34a3606eacf33e820698a26569cac459e81 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Wed, 3 Jun 2020 14:12:42 -0400 Subject: [PATCH 1/6] fix division by zero issue in pair style bop --- src/MANYBODY/pair_bop.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/MANYBODY/pair_bop.cpp b/src/MANYBODY/pair_bop.cpp index 4b5f4c7d17..14b0d35a4c 100644 --- a/src/MANYBODY/pair_bop.cpp +++ b/src/MANYBODY/pair_bop.cpp @@ -5183,11 +5183,13 @@ void _noopt PairBOP::read_table(char *filename) if(rcut3[i]>rcutall) rcutall=rcut3[i]; rcutsq[i]=rcut[i]*rcut[i]; - rcutsq3[i]=rcut3[i]*rcut3[i]; dr[i]=rcut[i]/((double)nr-1.0); rdr[i]=1.0/dr[i]; - dr3[i]=rcut3[i]/((double)nr-1.0); - rdr3[i]=1.0/dr3[i]; + if (nws==3) { + rcutsq3[i]=rcut3[i]*rcut3[i]; + dr3[i]=rcut3[i]/((double)nr-1.0); + rdr3[i]=1.0/dr3[i]; + } } rctroot=rcutall; dtheta=2.0/((double)ntheta-1.0); @@ -5273,9 +5275,11 @@ void _noopt PairBOP::read_table(char *filename) pRepul4[i][k]=pRepul1[i][k]/dr[i]; pRepul5[i][k]=2.0*pRepul2[i][k]/dr[i]; pRepul6[i][k]=3.0*pRepul3[i][k]/dr[i]; - pLong4[i][k]=pLong1[i][k]/dr3[i]; - pLong5[i][k]=2.0*pLong2[i][k]/dr3[i]; - pLong6[i][k]=3.0*pLong3[i][k]/dr3[i]; + if (nws==3) { + pLong4[i][k]=pLong1[i][k]/dr3[i]; + pLong5[i][k]=2.0*pLong2[i][k]/dr3[i]; + pLong6[i][k]=3.0*pLong3[i][k]/dr3[i]; + } } for(k=0;k Date: Thu, 4 Jun 2020 10:46:08 -0400 Subject: [PATCH 2/6] avoid division by zero when reading tersoff potentials with powern == 0.0 --- src/MANYBODY/pair_tersoff.cpp | 12 ++++++++---- src/MANYBODY/pair_tersoff_mod.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/MANYBODY/pair_tersoff.cpp b/src/MANYBODY/pair_tersoff.cpp index f5a3fa7e8e..3b9de81992 100644 --- a/src/MANYBODY/pair_tersoff.cpp +++ b/src/MANYBODY/pair_tersoff.cpp @@ -524,10 +524,14 @@ void PairTersoff::setup_params() params[m].cut = params[m].bigr + params[m].bigd; params[m].cutsq = params[m].cut*params[m].cut; - params[m].c1 = pow(2.0*params[m].powern*1.0e-16,-1.0/params[m].powern); - params[m].c2 = pow(2.0*params[m].powern*1.0e-8,-1.0/params[m].powern); - params[m].c3 = 1.0/params[m].c2; - params[m].c4 = 1.0/params[m].c1; + if (params[m].powern > 0.0) { + params[m].c1 = pow(2.0*params[m].powern*1.0e-16,-1.0/params[m].powern); + params[m].c2 = pow(2.0*params[m].powern*1.0e-8,-1.0/params[m].powern); + params[m].c3 = 1.0/params[m].c2; + params[m].c4 = 1.0/params[m].c1; + } else { + params[m].c1 = params[m].c2 = params[m].c3 = params[m].c4 = 0.0; + } } // set cutmax to max of all params diff --git a/src/MANYBODY/pair_tersoff_mod.cpp b/src/MANYBODY/pair_tersoff_mod.cpp index 1998928aa5..18a58ae5b4 100644 --- a/src/MANYBODY/pair_tersoff_mod.cpp +++ b/src/MANYBODY/pair_tersoff_mod.cpp @@ -178,8 +178,10 @@ void PairTersoffMOD::setup_params() params[m].cut = params[m].bigr + params[m].bigd; params[m].cutsq = params[m].cut*params[m].cut; - params[m].ca1 = pow(2.0*params[m].powern_del*1.0e-16,-1.0/params[m].powern); - params[m].ca4 = 1.0/params[m].ca1; + if (params[m].powern > 0.0) { + params[m].ca1 = pow(2.0*params[m].powern_del*1.0e-16,-1.0/params[m].powern); + params[m].ca4 = 1.0/params[m].ca1; + } else params[m].ca1 = params[m].ca4 = 0.0; } // set cutmax to max of all params From c22aee142d17ff364fa90d8d731bd2ed401365f5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 4 Jun 2020 13:31:30 -0400 Subject: [PATCH 3/6] remove unused variable --- src/pair_coul_dsf.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pair_coul_dsf.cpp b/src/pair_coul_dsf.cpp index 20abd21662..992ee33ecb 100644 --- a/src/pair_coul_dsf.cpp +++ b/src/pair_coul_dsf.cpp @@ -65,7 +65,7 @@ void PairCoulDSF::compute(int eflag, int vflag) { int i,j,ii,jj,inum,jnum; double qtmp,xtmp,ytmp,ztmp,delx,dely,delz,ecoul,fpair; - double r,rsq,r2inv,forcecoul,factor_coul; + double r,rsq,forcecoul,factor_coul; double prefactor,erfcc,erfcd,t; int *ilist,*jlist,*numneigh,**firstneigh; From 78468f41d5e8f339fe257313c567e07c52e18cdc Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Jun 2020 11:52:06 -0400 Subject: [PATCH 4/6] make definition consistent and silence a whole bunch of warnings from recent clang versions --- src/KOKKOS/pair_kokkos.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index c28c858113..2934ddf621 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -51,7 +51,8 @@ struct DoCoul<1> { //Specialisation for Neighborlist types Half, HalfThread, Full template -struct PairComputeFunctor { +class PairComputeFunctor { + public: typedef typename PairStyle::device_type device_type ; typedef ArrayTypes AT; From 9bf47cd9f3217cf605d9b3f9187287585ac4fd54 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Jun 2020 13:58:11 -0400 Subject: [PATCH 5/6] make KOKKOS library compilation compatible with mode=shared --- lib/kokkos/Makefile.kokkos | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/kokkos/Makefile.kokkos b/lib/kokkos/Makefile.kokkos index dc53de0a12..a9478c6e09 100644 --- a/lib/kokkos/Makefile.kokkos +++ b/lib/kokkos/Makefile.kokkos @@ -4,7 +4,11 @@ ifndef KOKKOS_PATH KOKKOS_PATH=../../lib/kokkos endif + CXXFLAGS=$(CCFLAGS) +ifeq ($(mode),shared) +CXXFLAGS += $(SHFLAGS) +endif KOKKOS_VERSION_MAJOR = 3 KOKKOS_VERSION_MINOR = 1 From 04d7eacc2f5cf25dab4f520dd2b4aeab40e48680 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 5 Jun 2020 12:11:54 -0400 Subject: [PATCH 6/6] remove .c_str() in several places because it is no longer neede --- src/library.cpp | 4 ++-- src/utils.cpp | 20 ++++++++++---------- src/write_data.cpp | 6 +++--- src/write_data.h | 3 ++- src/write_restart.cpp | 3 --- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/library.cpp b/src/library.cpp index d815afdbb5..7840567866 100644 --- a/src/library.cpp +++ b/src/library.cpp @@ -137,7 +137,7 @@ void lammps_open(int argc, char **argv, MPI_Comm communicator, void **ptr) *ptr = (void *) lmp; } catch(LAMMPSException & e) { - fprintf(stderr, "LAMMPS Exception: %s", e.message.c_str()); + fmt::print(stderr, "LAMMPS Exception: {}", e.message); *ptr = (void *) NULL; } #else @@ -172,7 +172,7 @@ void lammps_open_no_mpi(int argc, char **argv, void **ptr) *ptr = (void *) lmp; } catch(LAMMPSException & e) { - fprintf(stderr, "LAMMPS Exception: %s", e.message.c_str()); + fmt::print(stderr, "LAMMPS Exception: {}", e.message); *ptr = (void*) NULL; } #else diff --git a/src/utils.cpp b/src/utils.cpp index cac94fe0cf..b223710cab 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -155,7 +155,7 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size, errmsg += filename; errmsg += "'"; - if (error) error->one(srcname,srcline,errmsg.c_str()); + if (error) error->one(srcname,srcline,errmsg); if (s) *s = '\0'; // truncate string to empty in case error is NULL } return; @@ -184,7 +184,7 @@ void utils::sfread(const char *srcname, int srcline, void *s, size_t size, errmsg += filename; errmsg += "'"; - if (error) error->one(srcname,srcline,errmsg.c_str()); + if (error) error->one(srcname,srcline,errmsg); } return; } @@ -238,9 +238,9 @@ double utils::numeric(const char *file, int line, const char *str, msg += str; msg += "' in input script or data file"; if (do_abort) - lmp->error->one(file,line,msg.c_str()); + lmp->error->one(file,line,msg); else - lmp->error->all(file,line,msg.c_str()); + lmp->error->all(file,line,msg); } return atof(str); @@ -273,9 +273,9 @@ int utils::inumeric(const char *file, int line, const char *str, msg += str; msg += "' in input script or data file"; if (do_abort) - lmp->error->one(file,line,msg.c_str()); + lmp->error->one(file,line,msg); else - lmp->error->all(file,line,msg.c_str()); + lmp->error->all(file,line,msg); } return atoi(str); @@ -308,9 +308,9 @@ bigint utils::bnumeric(const char *file, int line, const char *str, msg += str; msg += "' in input script or data file"; if (do_abort) - lmp->error->one(file,line,msg.c_str()); + lmp->error->one(file,line,msg); else - lmp->error->all(file,line,msg.c_str()); + lmp->error->all(file,line,msg); } return ATOBIGINT(str); @@ -343,9 +343,9 @@ tagint utils::tnumeric(const char *file, int line, const char *str, msg += str; msg += "' in input script or data file"; if (do_abort) - lmp->error->one(file,line,msg.c_str()); + lmp->error->one(file,line,msg); else - lmp->error->all(file,line,msg.c_str()); + lmp->error->all(file,line,msg); } return ATOTAGINT(str); diff --git a/src/write_data.cpp b/src/write_data.cpp index 677b619ada..5d67d4471c 100644 --- a/src/write_data.cpp +++ b/src/write_data.cpp @@ -123,7 +123,7 @@ void WriteData::command(int narg, char **arg) if (domain->triclinic) domain->lamda2x(atom->nlocal+atom->nghost); } - write(file.c_str()); + write(file); } /* ---------------------------------------------------------------------- @@ -131,7 +131,7 @@ void WriteData::command(int narg, char **arg) might later let it be directly called within run/minimize loop ------------------------------------------------------------------------- */ -void WriteData::write(const char *file) +void WriteData::write(const std::string &file) { // special case where reneighboring is not done in integrator // on timestep data file is written (due to build_once being set) @@ -187,7 +187,7 @@ void WriteData::write(const char *file) // open data file if (me == 0) { - fp = fopen(file,"w"); + fp = fopen(file.c_str(),"w"); if (fp == NULL) error->one(FLERR,fmt::format("Cannot open data file {}: {}", file, utils::getsyserror())); diff --git a/src/write_data.h b/src/write_data.h index 5055a25d98..5863b68292 100644 --- a/src/write_data.h +++ b/src/write_data.h @@ -21,6 +21,7 @@ CommandStyle(write_data,WriteData) #define LMP_WRITE_DATA_H #include "pointers.h" +#include namespace LAMMPS_NS { @@ -28,7 +29,7 @@ class WriteData : protected Pointers { public: WriteData(class LAMMPS *); void command(int, char **); - void write(const char *); + void write(const std::string &); private: int me,nprocs; diff --git a/src/write_restart.cpp b/src/write_restart.cpp index 1469e6b3e4..3c793e5f6a 100644 --- a/src/write_restart.cpp +++ b/src/write_restart.cpp @@ -293,9 +293,6 @@ void WriteRestart::write(std::string file) std::string multiname = file; multiname.replace(multiname.find("%"),1,fmt::format("{}",icluster)); - fp = fopen(multiname.c_str(),"wb"); - if (fp == NULL) - error->one(FLERR,fmt::format("Cannot open restart file {}",multiname).c_str()); if (filewriter) { fp = fopen(multiname.c_str(),"wb");