From d46a1254e4fd744c275296415a9dbe43b2f20c58 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 21:11:32 -0400 Subject: [PATCH 01/14] remove non-ASCII characters. --- lib/awpmd/ivutils/include/pairhash.h | 71 +++++++++++++--------------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/lib/awpmd/ivutils/include/pairhash.h b/lib/awpmd/ivutils/include/pairhash.h index 1fbc1b8b64..c29f72773f 100644 --- a/lib/awpmd/ivutils/include/pairhash.h +++ b/lib/awpmd/ivutils/include/pairhash.h @@ -122,12 +122,9 @@ # define PAIRHASH_H /*e @file pairhash.h @brief pair hash table -*/ +*/ -/*r @file pairhash.h @brief работа с хеш-таблицами парных величин -*/ - # include "refobj.h" @@ -146,7 +143,7 @@ public: incr=inc_first ? parent->sizex : 1 ; }; iterator(T *ptr_,size_t incr_):ptr(ptr_),incr(incr_){} - public: + public: iterator(const iterator &other):ptr(other.ptr),incr(other.incr){ } iterator():ptr(NULL),incr(0){} @@ -159,7 +156,7 @@ public: ++*this; return tmp; } - iterator operator+(int delta) const { + iterator operator+(int delta) const { return iterator(ptr+delta*incr,incr); } bool operator!=(const iterator &other) const { @@ -194,7 +191,7 @@ public: init(other.sizex,other.sizey,1); size_t n=get_datasize(sizex,sizey); for(size_t i=0;i=0){ // for changing the managed flag? @@ -241,14 +238,14 @@ public: arr=parr.ptr(); } return 1; - } + } - recmatrix(size_t nx, size_t ny):sizex(0), sizey(0){ + recmatrix(size_t nx, size_t ny):sizex(0), sizey(0){ init(nx,ny,1); } //e initializes by unmanaged pointer - recmatrix(size_t nx, size_t ny , T *ptr):parr(ptr,0),sizex(nx), sizey(ny) { + recmatrix(size_t nx, size_t ny , T *ptr):parr(ptr,0),sizex(nx), sizey(ny) { init(nx,ny); } @@ -264,14 +261,14 @@ public: size_t i, n=get_datasize(sizex,sizey); for(i=0;isizey? sizey: sizex); for(i=0;i class sqmatrix: public recmatrix { - + public: size_t size; @@ -313,18 +310,18 @@ public: return n*n; } - + virtual int init(size_t n, int smanaged=-1){ size=n; return recmatrix::init(n,n,smanaged); - } + } - sqmatrix(size_t n):size(0){ + sqmatrix(size_t n):size(0){ init(n,1); } //e initializes by unmanaged pointer - sqmatrix(size_t n, T * /* ptr */):size(n){ + sqmatrix(size_t n, T * /* ptr */):size(n){ init(n); } @@ -335,7 +332,7 @@ public: recmatrix::parr.reset(ptr,0); } - + }; @@ -355,7 +352,7 @@ public: incr=inc_first ? parent->size : 1 ; }; iterator(T *ptr_,size_t incr_):ptr(ptr_),incr(incr_){} - public: + public: iterator(const iterator &other):ptr(other.ptr),incr(other.incr){ } iterator():ptr(NULL),incr(0){} @@ -368,7 +365,7 @@ public: ++*this; return tmp; } - iterator operator+(int delta) const { + iterator operator+(int delta) const { return iterator(ptr+delta*incr,incr); } bool operator!=(const iterator &other) const { @@ -403,7 +400,7 @@ public: init(other.size,1); size_t n=get_datasize(size); for(size_t i=0;i=0){ // for changing the managed flag? @@ -448,14 +445,14 @@ public: arr=parr.ptr(); } return 1; - } + } - sqmatrix(size_t n):size(0){ + sqmatrix(size_t n):size(0){ init(n,1); } //e initializes by unmanaged pointer - sqmatrix(size_t n, T *ptr):parr(ptr,0),size(n){ + sqmatrix(size_t n, T *ptr):parr(ptr,0),size(n){ init(n); } @@ -470,14 +467,14 @@ public: size_t i, n=get_datasize(size); for(i=0;i int fileout(FILE *f, const matrix_t &matr, const char *elm_fmt, const char *elm_sep=" ", const char *line_sep="\n"){ - size_t i, j; + size_t i, j; int res=0; for(i=0;i class smatrix: public sqmatrix{ typedef sqmatrix base_t; public: - + virtual size_t get_datasize(size_t n) const{ return n*(n+1)/2; } - + size_t index(size_t i, size_t j) const { if(i>=j) return (2*base_t::size-j-1)*j/2+i; - else + else return (2*base_t::size-i-1)*i/2+j; } @@ -572,7 +569,7 @@ public: hmatrix() : smatrix() {} hmatrix(const smatrix &other) : smatrix(other) {} - + //e copy constructor: makes a managed copy hmatrix(const hmatrix &other): smatrix(other){} @@ -671,7 +668,7 @@ public: indm.Set(-1); return 1; } - + virtual ~PairHashM(){ delete [] arr; } From 8caa3e188ce902be27f43953b3d0e9f35586c5f4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 21:11:39 -0400 Subject: [PATCH 02/14] remove debug code --- src/MOLECULE/bond_fene.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/MOLECULE/bond_fene.cpp b/src/MOLECULE/bond_fene.cpp index f87f12a3b1..357c37b7a2 100644 --- a/src/MOLECULE/bond_fene.cpp +++ b/src/MOLECULE/bond_fene.cpp @@ -83,7 +83,6 @@ void BondFENE::compute(int eflag, int vflag) // if r -> r0, then rlogarg < 0.0 which is an error // issue a warning and reset rlogarg = epsilon // if r > 2*r0 something serious is wrong, abort - printf("r = %g r0 = %g rlogarg = %g\n",sqrt(rsq),sqrt(r0sq),rlogarg); if (rlogarg < 0.1) { error->warning(FLERR,fmt::format("FENE bond too long: {} {} {} {}", From 3c78ad0a70638eaa83dacbd03e8dc0c93a704177 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 21:13:14 -0400 Subject: [PATCH 03/14] make more use of std::string and fmtlib where beneficial --- src/atom_vec_hybrid.cpp | 10 +++---- src/compute_cna_atom.cpp | 17 +++++------- src/compute_group_group.cpp | 9 ++---- src/compute_orientorder_atom.cpp | 8 ++---- src/dump_movie.cpp | 9 +++--- src/fix_halt.cpp | 14 +++++----- src/group.cpp | 47 ++++++++++++-------------------- 7 files changed, 46 insertions(+), 68 deletions(-) diff --git a/src/atom_vec_hybrid.cpp b/src/atom_vec_hybrid.cpp index 9ba2b6f468..6db27601a4 100644 --- a/src/atom_vec_hybrid.cpp +++ b/src/atom_vec_hybrid.cpp @@ -18,6 +18,7 @@ #include "memory.h" #include "error.h" #include "tokenizer.h" +#include "fmt/format.h" using namespace LAMMPS_NS; @@ -215,12 +216,9 @@ void AtomVecHybrid::process_args(int narg, char **arg) for (int idup = 0; idup < ndupfield; idup++) { char *dup = (char *) dupfield[idup]; ptr = strstr(concat_grow,dup); - if (ptr && strstr(ptr+1,dup)) { - char str[128]; - sprintf(str,"Peratom %s is in multiple sub-styles - " - "must be used consistently",dup); - if (comm->me == 0) error->warning(FLERR,str); - } + if ((ptr && strstr(ptr+1,dup)) && (comm->me == 0)) + error->warning(FLERR,fmt::format("Peratom {} is in multiple sub-styles " + "- must be used consistently",dup)); } delete [] concat_grow; diff --git a/src/compute_cna_atom.cpp b/src/compute_cna_atom.cpp index 5f0f047958..7ab9e8adf2 100644 --- a/src/compute_cna_atom.cpp +++ b/src/compute_cna_atom.cpp @@ -30,6 +30,7 @@ #include "comm.h" #include "memory.h" #include "error.h" +#include "fmt/format.h" using namespace LAMMPS_NS; @@ -184,11 +185,9 @@ void ComputeCNAAtom::compute_peratom() int nerrorall; MPI_Allreduce(&nerror,&nerrorall,1,MPI_INT,MPI_SUM,world); - if (nerrorall && comm->me == 0) { - char str[128]; - sprintf(str,"Too many neighbors in CNA for %d atoms",nerrorall); - error->warning(FLERR,str,0); - } + if (nerrorall && comm->me == 0) + error->warning(FLERR,fmt::format("Too many neighbors in CNA for {} " + "atoms",nerrorall),0); // compute CNA for each atom in group // only performed if # of nearest neighbors = 12 or 14 (fcc,hcp) @@ -345,11 +344,9 @@ void ComputeCNAAtom::compute_peratom() // warning message MPI_Allreduce(&nerror,&nerrorall,1,MPI_INT,MPI_SUM,world); - if (nerrorall && comm->me == 0) { - char str[128]; - sprintf(str,"Too many common neighbors in CNA %d times",nerrorall); - error->warning(FLERR,str); - } + if (nerrorall && comm->me == 0) + error->warning(FLERR,fmt::format("Too many common neighbors in CNA {} " + "times", nerrorall)); } /* ---------------------------------------------------------------------- diff --git a/src/compute_group_group.cpp b/src/compute_group_group.cpp index c64db19fc1..c8876daeef 100644 --- a/src/compute_group_group.cpp +++ b/src/compute_group_group.cpp @@ -147,12 +147,9 @@ void ComputeGroupGroup::init() if (kspaceflag) { kspace_correction(); - if (fabs(e_correction) > SMALL && comm->me == 0) { - char str[128]; - sprintf(str,"Both groups in compute group/group have a net charge; " - "the Kspace boundary correction to energy will be non-zero"); - error->warning(FLERR,str); - } + if ((fabs(e_correction) > SMALL) && (comm->me == 0)) + error->warning(FLERR,"Both groups in compute group/group have a net charge; " + "the Kspace boundary correction to energy will be non-zero"); } // recheck that group 2 has not been deleted diff --git a/src/compute_orientorder_atom.cpp b/src/compute_orientorder_atom.cpp index 979935b12e..34d11f9ac1 100644 --- a/src/compute_orientorder_atom.cpp +++ b/src/compute_orientorder_atom.cpp @@ -32,6 +32,7 @@ #include "memory.h" #include "error.h" #include "math_const.h" +#include "fmt/format.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -715,11 +716,8 @@ void ComputeOrientOrderAtom::init_clebsch_gordan() double ComputeOrientOrderAtom::factorial(int n) { - if (n < 0 || n > nmaxfactorial) { - char str[128]; - sprintf(str, "Invalid argument to factorial %d", n); - error->all(FLERR, str); - } + if (n < 0 || n > nmaxfactorial) + error->all(FLERR,fmt::format("Invalid argument to factorial {}", n)); return nfac_table[n]; } diff --git a/src/dump_movie.cpp b/src/dump_movie.cpp index ea67320d4a..68a77c8f63 100644 --- a/src/dump_movie.cpp +++ b/src/dump_movie.cpp @@ -20,6 +20,7 @@ #include "comm.h" #include "force.h" #include "error.h" +#include "fmt/format.h" using namespace LAMMPS_NS; @@ -58,11 +59,9 @@ void DumpMovie::openfile() fp = popen(moviecmd,"w"); #endif - if (fp == NULL) { - char str[128]; - sprintf(str,"Failed to open FFmpeg pipeline to file %s",filename); - error->one(FLERR,str); - } + if (fp == NULL) + error->one(FLERR,fmt::format("Failed to open FFmpeg pipeline to " + "file {}",filename)); } } /* ---------------------------------------------------------------------- */ diff --git a/src/fix_halt.cpp b/src/fix_halt.cpp index 42b63c69f1..c5960dfe13 100644 --- a/src/fix_halt.cpp +++ b/src/fix_halt.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "update.h" #include "force.h" #include "input.h" @@ -25,6 +26,7 @@ #include "comm.h" #include "timer.h" #include "error.h" +#include "fmt/format.h" using namespace LAMMPS_NS; using namespace FixConst; @@ -224,15 +226,13 @@ void FixHalt::end_of_step() // soft/continue halt -> trigger timer to break from run loop // print message with ID of fix halt in case multiple instances - char str[128]; - sprintf(str,"Fix halt condition for fix-id %s met on step " - BIGINT_FORMAT " with value %g", - id, update->ntimestep, attvalue); - + std::string message = fmt::format("Fix halt condition for fix-id {} met on " + "step {} with value {}", + id, update->ntimestep, attvalue); if (eflag == HARD) { - error->all(FLERR,str); + error->all(FLERR,message); } else if (eflag == SOFT || eflag == CONTINUE) { - if (comm->me == 0 && msgflag == YESMSG) error->message(FLERR,str); + if (comm->me == 0 && msgflag == YESMSG) error->message(FLERR,message); timer->force_timeout(); } } diff --git a/src/group.cpp b/src/group.cpp index 93cd668194..4b42223646 100644 --- a/src/group.cpp +++ b/src/group.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include "domain.h" #include "atom.h" @@ -32,6 +33,7 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "fmt/format.h" #include @@ -123,11 +125,9 @@ void Group::assign(int narg, char **arg) for (i = 0; i < nlocal; i++) mask[i] &= bits; if (dynamic[igroup]) { - int n = strlen("GROUP_") + strlen(names[igroup]) + 1; - char *fixID = new char[n]; - sprintf(fixID,"GROUP_%s",names[igroup]); - modify->delete_fix(fixID); - delete [] fixID; + std::string fixID = "GROUP_"; + fixID += names[igroup]; + modify->delete_fix(fixID.c_str()); } delete [] names[igroup]; @@ -492,27 +492,23 @@ void Group::assign(int narg, char **arg) // if group is already dynamic, delete existing FixGroup if (dynamic[igroup]) { - int n = strlen("GROUP_") + strlen(names[igroup]) + 1; - char *fixID = new char[n]; - sprintf(fixID,"GROUP_%s",names[igroup]); - modify->delete_fix(fixID); - delete [] fixID; + std::string fixID = "GROUP_"; + fixID += names[igroup]; + modify->delete_fix(fixID.c_str()); } dynamic[igroup] = 1; - int n = strlen("GROUP_") + strlen(names[igroup]) + 1; - char *fixID = new char[n]; - sprintf(fixID,"GROUP_%s",names[igroup]); + std::string fixID = "GROUP_"; + fixID += names[igroup]; char **newarg = new char*[narg]; - newarg[0] = fixID; + newarg[0] = (char *)fixID.c_str(); newarg[1] = arg[2]; newarg[2] = (char *) "GROUP"; for (int i = 3; i < narg; i++) newarg[i] = arg[i]; modify->add_fix(narg,newarg); delete [] newarg; - delete [] fixID; // style = static // remove dynamic FixGroup if necessary @@ -522,11 +518,9 @@ void Group::assign(int narg, char **arg) if (narg != 2) error->all(FLERR,"Illegal group command"); if (dynamic[igroup]) { - int n = strlen("GROUP_") + strlen(names[igroup]) + 1; - char *fixID = new char[n]; - sprintf(fixID,"GROUP_%s",names[igroup]); - modify->delete_fix(fixID); - delete [] fixID; + std::string fixID = "GROUP_"; + fixID += names[igroup]; + modify->delete_fix(fixID.c_str()); } dynamic[igroup] = 0; @@ -546,15 +540,10 @@ void Group::assign(int narg, char **arg) MPI_Allreduce(&rlocal,&all,1,MPI_DOUBLE,MPI_SUM,world); if (me == 0) { - if (dynamic[igroup]) { - if (screen) fprintf(screen,"dynamic group %s defined\n",names[igroup]); - if (logfile) fprintf(logfile,"dynamic group %s defined\n",names[igroup]); - } else { - if (screen) - fprintf(screen,"%.15g atoms in group %s\n",all,names[igroup]); - if (logfile) - fprintf(logfile,"%.15g atoms in group %s\n",all,names[igroup]); - } + if (dynamic[igroup]) + utils::logmesg(lmp,fmt::format("dynamic group {} defined\n",names[igroup])); + else + utils::logmesg(lmp,fmt::format("{:.15g} atoms in group {}\n",all,names[igroup])); } } From 4816c5c7ccb7b7e00bd8c51f302b76245e2ce8d4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 21:13:22 -0400 Subject: [PATCH 04/14] simplify --- src/dump_cfg.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/dump_cfg.cpp b/src/dump_cfg.cpp index 3430720b8c..da9740d9ca 100644 --- a/src/dump_cfg.cpp +++ b/src/dump_cfg.cpp @@ -126,9 +126,7 @@ void DumpCFG::write_header(bigint n) if (atom->peri_flag) scale = atom->pdscale; else if (unwrapflag == 1) scale = UNWRAPEXPAND; - char str[64]; - sprintf(str,"Number of particles = %s\n",BIGINT_FORMAT); - fprintf(fp,str,n); + fprintf(fp,"Number of particles = " BIGINT_FORMAT "\n", n); fprintf(fp,"A = %g Angstrom (basic length-scale)\n",scale); fprintf(fp,"H0(1,1) = %g A\n",domain->xprd); fprintf(fp,"H0(1,2) = 0 A \n"); From e4a3a518f77d2bf89d8efcae648b0cc924a8b888 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 21:32:30 -0400 Subject: [PATCH 05/14] more use of fmtlib and std::string --- src/info.cpp | 12 +++----- src/input.cpp | 9 ++---- src/kspace.cpp | 16 +++++------ src/lammps.cpp | 7 ++--- src/modify.cpp | 52 ++++++++++++++++------------------ src/ntopo_improper_partial.cpp | 9 ++---- src/pair_table.cpp | 33 ++++++++------------- src/read_data.cpp | 7 ++--- src/read_dump.cpp | 40 ++++++++------------------ src/read_restart.cpp | 42 +++++++++------------------ src/reset_ids.cpp | 10 +++---- src/thermo.cpp | 19 +++++-------- 12 files changed, 94 insertions(+), 162 deletions(-) diff --git a/src/info.cpp b/src/info.cpp index 76e8d9bd09..8cb87e9fea 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -848,16 +848,12 @@ bool Info::is_active(const char *category, const char *name) if (!match && lmp->suffix_enable) { if (lmp->suffix) { - char *name_w_suffix = new char [len + 2 + strlen(lmp->suffix)]; - sprintf(name_w_suffix,"%s/%s",name,lmp->suffix); - if (strcmp(style,name_w_suffix) == 0) match = 1; - delete[] name_w_suffix; + std::string name_w_suffix = name + std::string("/") + lmp->suffix; + if (name_w_suffix == style) match = 1; } if (!match && lmp->suffix2) { - char *name_w_suffix = new char [len + 2 + strlen(lmp->suffix2)]; - sprintf(name_w_suffix,"%s/%s",name,lmp->suffix2); - if (strcmp(style,name_w_suffix) == 0) match = 1; - delete[] name_w_suffix; + std::string name_w_suffix = name + std::string("/") + lmp->suffix2; + if (name_w_suffix == style) match = 1; } } return match ? true : false; diff --git a/src/input.cpp b/src/input.cpp index 412084133e..7708a79174 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -227,11 +227,8 @@ void Input::file() // execute the command - if (execute_command()) { - char *str = new char[maxline+32]; - sprintf(str,"Unknown command: %s",line); - error->all(FLERR,str); - } + if (execute_command()) + error->all(FLERR,fmt::format("Unknown command: {}",line)); } } @@ -1249,7 +1246,7 @@ char *shell_failed_message(const char* cmd, int errnum) const char *errmsg = strerror(errnum); int len = strlen(cmd)+strlen(errmsg)+64; char *msg = new char[len]; - sprintf(msg,"Shell command '%s' failed with error '%s'", cmd, errmsg); + snprintf(msg, len, "Shell command '%s' failed with error '%s'", cmd, errmsg); return msg; } diff --git a/src/kspace.cpp b/src/kspace.cpp index a9356a39f1..8769409331 100644 --- a/src/kspace.cpp +++ b/src/kspace.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include "atom.h" #include "comm.h" #include "force.h" @@ -25,6 +26,7 @@ #include "error.h" #include "suffix.h" #include "domain.h" +#include "fmt/format.h" using namespace LAMMPS_NS; @@ -307,10 +309,10 @@ void KSpace::qsum_qsq(int warning_flag) // so issue warning or error if (fabs(qsum) > SMALL) { - char str[128]; - sprintf(str,"System is not charge neutral, net charge = %g",qsum); - if (!warn_nonneutral) error->all(FLERR,str); - if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,str); + std::string message = fmt::format("System is not charge neutral, net " + "charge = {}",qsum); + if (!warn_nonneutral) error->all(FLERR,message); + if (warn_nonneutral == 1 && comm->me == 0) error->warning(FLERR,message); warn_nonneutral = 2; } } @@ -324,12 +326,10 @@ double KSpace::estimate_table_accuracy(double q2_over_sqrt, double spr) double table_accuracy = 0.0; int nctb = force->pair->ncoultablebits; if (comm->me == 0) { - char str[128]; if (nctb) - sprintf(str," using %d-bit tables for long-range coulomb",nctb); + error->message(FLERR,fmt::format(" using {}-bit tables for long-range coulomb",nctb)); else - sprintf(str," using polynomial approximation for long-range coulomb"); - error->message(FLERR,str); + error->message(FLERR," using polynomial approximation for long-range coulomb"); } if (nctb) { diff --git a/src/lammps.cpp b/src/lammps.cpp index e0cca74e85..3b768d1862 100644 --- a/src/lammps.cpp +++ b/src/lammps.cpp @@ -667,15 +667,12 @@ LAMMPS::~LAMMPS() double totalclock = MPI_Wtime() - initclock; if ((me == 0) && (screen || logfile)) { - char outtime[128]; int seconds = fmod(totalclock,60.0); totalclock = (totalclock - seconds) / 60.0; int minutes = fmod(totalclock,60.0); int hours = (totalclock - minutes) / 60.0; - sprintf(outtime,"Total wall time: " - "%d:%02d:%02d\n", hours, minutes, seconds); - if (screen) fputs(outtime,screen); - if (logfile) fputs(outtime,logfile); + utils::logmesg(this,fmt::format("Total wall time: {}:{:02d}:{:02d}\n", + hours, minutes, seconds)); } if (universe->nworlds == 1) { diff --git a/src/modify.cpp b/src/modify.cpp index f7fd18d55c..b2bb6e5e8e 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -13,6 +13,7 @@ #include "modify.h" #include +#include #include "style_compute.h" #include "style_fix.h" #include "atom.h" @@ -836,18 +837,17 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) int match = 0; if (strcmp(arg[2],fix[ifix]->style) == 0) match = 1; if (!match && trysuffix && lmp->suffix_enable) { - char estyle[256]; if (lmp->suffix) { - sprintf(estyle,"%s/%s",arg[2],lmp->suffix); - if (strcmp(estyle,fix[ifix]->style) == 0) match = 1; + std::string estyle = arg[2] + std::string("/") + lmp->suffix; + if (estyle == fix[ifix]->style) match = 1; } if (lmp->suffix2) { - sprintf(estyle,"%s/%s",arg[2],lmp->suffix2); - if (strcmp(estyle,fix[ifix]->style) == 0) match = 1; + std::string estyle = arg[2] + std::string("/") + lmp->suffix2; + if (estyle == fix[ifix]->style) match = 1; } } - if (!match) error->all(FLERR, - "Replacing a fix, but new style != old style"); + if (!match) + error->all(FLERR,"Replacing a fix, but new style != old style"); if (fix[ifix]->igroup != igroup && comm->me == 0) error->warning(FLERR,"Replacing a fix, but new group != old group"); @@ -870,26 +870,24 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) if (trysuffix && lmp->suffix_enable) { if (lmp->suffix) { - int n = strlen(arg[2])+strlen(lmp->suffix)+2; - char *estyle = new char[n]; - sprintf(estyle,"%s/%s",arg[2],lmp->suffix); + std::string estyle = arg[2] + std::string("/") + lmp->suffix; if (fix_map->find(estyle) != fix_map->end()) { FixCreator fix_creator = (*fix_map)[estyle]; fix[ifix] = fix_creator(lmp,narg,arg); delete[] fix[ifix]->style; - fix[ifix]->style = estyle; - } else delete[] estyle; + fix[ifix]->style = new char[estyle.size()+1]; + strcpy(fix[ifix]->style,estyle.c_str()); + } } if (fix[ifix] == NULL && lmp->suffix2) { - int n = strlen(arg[2])+strlen(lmp->suffix2)+2; - char *estyle = new char[n]; - sprintf(estyle,"%s/%s",arg[2],lmp->suffix2); + std::string estyle = arg[2] + std::string("/") + lmp->suffix2; if (fix_map->find(estyle) != fix_map->end()) { FixCreator fix_creator = (*fix_map)[estyle]; fix[ifix] = fix_creator(lmp,narg,arg); delete[] fix[ifix]->style; - fix[ifix]->style = estyle; - } else delete[] estyle; + fix[ifix]->style = new char[estyle.size()+1]; + strcpy(fix[ifix]->style,estyle.c_str()); + } } } @@ -1164,7 +1162,7 @@ int Modify::check_rigid_list_overlap(int *select) int n = 0; for (int ifix = 0; ifix < nfix; ifix++) { - if (strncmp("rigid",fix[ifix]->style,5) == 0) { + if (utils::strmatch(fix[ifix]->style,"^rigid")) { const int * const body = (const int *)fix[ifix]->extract("body",dim); if ((body == NULL) || (dim != 1)) break; @@ -1209,26 +1207,24 @@ void Modify::add_compute(int narg, char **arg, int trysuffix) if (trysuffix && lmp->suffix_enable) { if (lmp->suffix) { - int n = strlen(arg[2])+strlen(lmp->suffix)+2; - char *estyle = new char[n]; - sprintf(estyle,"%s/%s",arg[2],lmp->suffix); + std::string estyle = arg[2] + std::string("/") + lmp->suffix; if (compute_map->find(estyle) != compute_map->end()) { ComputeCreator compute_creator = (*compute_map)[estyle]; compute[ncompute] = compute_creator(lmp,narg,arg); delete[] compute[ncompute]->style; - compute[ncompute]->style = estyle; - } else delete[] estyle; + compute[ncompute]->style = new char[estyle.size()+1]; + strcpy(compute[ncompute]->style,estyle.c_str()); + } } if (compute[ncompute] == NULL && lmp->suffix2) { - int n = strlen(arg[2])+strlen(lmp->suffix2)+2; - char *estyle = new char[n]; - sprintf(estyle,"%s/%s",arg[2],lmp->suffix2); + std::string estyle = arg[2] + std::string("/") + lmp->suffix2; if (compute_map->find(estyle) != compute_map->end()) { ComputeCreator compute_creator = (*compute_map)[estyle]; compute[ncompute] = compute_creator(lmp,narg,arg); delete[] compute[ncompute]->style; - compute[ncompute]->style = estyle; - } else delete[] estyle; + compute[ncompute]->style = new char[estyle.size()+1]; + strcpy(compute[ncompute]->style,estyle.c_str()); + } } } diff --git a/src/ntopo_improper_partial.cpp b/src/ntopo_improper_partial.cpp index f2afc68387..c4c6ec3177 100644 --- a/src/ntopo_improper_partial.cpp +++ b/src/ntopo_improper_partial.cpp @@ -97,10 +97,7 @@ void NTopoImproperPartial::build() int all; MPI_Allreduce(&nmissing,&all,1,MPI_INT,MPI_SUM,world); - if (all) { - char str[128]; - sprintf(str, - "Improper atoms missing at step " BIGINT_FORMAT,update->ntimestep); - if (me == 0) error->warning(FLERR,str); - } + if (all && me == 0) + error->warning(FLERR,fmt::format("Improper atoms missing at step {}", + update->ntimestep)); } diff --git a/src/pair_table.cpp b/src/pair_table.cpp index 7130a39b26..73b916f966 100644 --- a/src/pair_table.cpp +++ b/src/pair_table.cpp @@ -116,37 +116,28 @@ void PairTable::compute(int eflag, int vflag) if (rsq < cutsq[itype][jtype]) { tb = &tables[tabindex[itype][jtype]]; - if (rsq < tb->innersq) { - sprintf(estr,"Pair distance < table inner cutoff: " - "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); - error->one(FLERR,estr); - } - + if (rsq < tb->innersq) + error->one(FLERR,fmt::format("Pair distance < table inner cutoff: " + "ijtype {} {} dist {}",itype,jtype,sqrt(rsq))); if (tabstyle == LOOKUP) { itable = static_cast ((rsq - tb->innersq) * tb->invdelta); - if (itable >= tlm1) { - sprintf(estr,"Pair distance > table outer cutoff: " - "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); - error->one(FLERR,estr); - } + if (itable >= tlm1) + error->one(FLERR,fmt::format("Pair distance > table outer cutoff: " + "ijtype {} {} dist {}",itype,jtype,sqrt(rsq))); fpair = factor_lj * tb->f[itable]; } else if (tabstyle == LINEAR) { itable = static_cast ((rsq - tb->innersq) * tb->invdelta); - if (itable >= tlm1) { - sprintf(estr,"Pair distance > table outer cutoff: " - "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); - error->one(FLERR,estr); - } + if (itable >= tlm1) + error->one(FLERR,fmt::format("Pair distance > table outer cutoff: " + "ijtype {} {} dist {}",itype,jtype,sqrt(rsq))); fraction = (rsq - tb->rsq[itable]) * tb->invdelta; value = tb->f[itable] + fraction*tb->df[itable]; fpair = factor_lj * value; } else if (tabstyle == SPLINE) { itable = static_cast ((rsq - tb->innersq) * tb->invdelta); - if (itable >= tlm1) { - sprintf(estr,"Pair distance > table outer cutoff: " - "ijtype %d %d dist %g",itype,jtype,sqrt(rsq)); - error->one(FLERR,estr); - } + if (itable >= tlm1) + error->one(FLERR,fmt::format("Pair distance > table outer cutoff: " + "ijtype {} {} dist {}",itype,jtype,sqrt(rsq))); b = (rsq - tb->rsq[itable]) * tb->invdelta; a = 1.0 - b; value = a * tb->f[itable] + b * tb->f[itable+1] + diff --git a/src/read_data.cpp b/src/read_data.cpp index 1ccbccb835..5ce873f43b 100644 --- a/src/read_data.cpp +++ b/src/read_data.cpp @@ -1157,11 +1157,8 @@ void ReadData::header(int firstpass) parse_keyword(1); for (n = 0; n < NSECTIONS; n++) if (strcmp(keyword,section_keywords[n]) == 0) break; - if (n == NSECTIONS) { - char str[128]; - sprintf(str,"Unknown identifier in data file: %s",keyword); - error->all(FLERR,str); - } + if (n == NSECTIONS) + error->all(FLERR,fmt::format("Unknown identifier in data file: {}",keyword)); // error checks on header values // must be consistent with atom style and other header values diff --git a/src/read_dump.cpp b/src/read_dump.cpp index 99e9486679..0426323a21 100644 --- a/src/read_dump.cpp +++ b/src/read_dump.cpp @@ -289,13 +289,9 @@ bigint ReadDump::seek(bigint nrequest, int exact) for (ifile = 0; ifile < nfile; ifile++) { ntimestep = -1; if (multiproc) { - char *ptr = strchr(files[ifile],'%'); - char *multiname = new char[strlen(files[ifile]) + 16]; - *ptr = '\0'; - sprintf(multiname,"%s%d%s",files[ifile],0,ptr+1); - *ptr = '%'; - readers[0]->open_file(multiname); - delete [] multiname; + std::string multiname = files[ifile]; + multiname.replace(multiname.find("%"),1,"0"); + readers[0]->open_file(multiname.c_str()); } else readers[0]->open_file(files[ifile]); while (1) { @@ -337,13 +333,9 @@ bigint ReadDump::seek(bigint nrequest, int exact) if (multiproc && filereader) { for (int i = 0; i < nreader; i++) { if (me == 0 && i == 0) continue; // proc 0, reader 0 already found it - char *ptr = strchr(files[currentfile],'%'); - char *multiname = new char[strlen(files[currentfile]) + 16]; - *ptr = '\0'; - sprintf(multiname,"%s%d%s",files[currentfile],firstfile+i,ptr+1); - *ptr = '%'; - readers[i]->open_file(multiname); - delete [] multiname; + std::string multiname = files[currentfile]; + multiname.replace(multiname.find("%"),1,fmt::format("{}",firstfile+i)); + readers[i]->open_file(multiname.c_str()); bigint step; while (1) { @@ -389,13 +381,9 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) ntimestep = -1; if (ifile != currentfile) { if (multiproc) { - char *ptr = strchr(files[ifile],'%'); - char *multiname = new char[strlen(files[ifile]) + 16]; - *ptr = '\0'; - sprintf(multiname,"%s%d%s",files[ifile],0,ptr+1); - *ptr = '%'; - readers[0]->open_file(multiname); - delete [] multiname; + std::string multiname = files[ifile]; + multiname.replace(multiname.find("%"),1,"0"); + readers[0]->open_file(multiname.c_str()); } else readers[0]->open_file(files[ifile]); } @@ -447,13 +435,9 @@ bigint ReadDump::next(bigint ncurrent, bigint nlast, int nevery, int nskip) if (multiproc && filereader) { for (int i = 0; i < nreader; i++) { if (me == 0 && i == 0) continue; - char *ptr = strchr(files[currentfile],'%'); - char *multiname = new char[strlen(files[currentfile]) + 16]; - *ptr = '\0'; - sprintf(multiname,"%s%d%s",files[currentfile],firstfile+i,ptr+1); - *ptr = '%'; - readers[i]->open_file(multiname); - delete [] multiname; + std::string multiname = files[currentfile]; + multiname.replace(multiname.find("%"),1,fmt::format("{}",firstfile+i)); + readers[i]->open_file(multiname.c_str()); bigint step; while (1) { diff --git a/src/read_restart.cpp b/src/read_restart.cpp index ade751fdef..0f3c05e290 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -104,19 +104,14 @@ void ReadRestart::command(int narg, char **arg) if (me == 0) { if (screen) fprintf(screen,"Reading restart file ...\n"); - char *hfile; + std::string hfile = file; if (multiproc) { - hfile = new char[strlen(file) + 16]; - char *ptr = strchr(file,'%'); - *ptr = '\0'; - sprintf(hfile,"%s%s%s",file,"base",ptr+1); - *ptr = '%'; - } else hfile = file; - fp = fopen(hfile,"rb"); + hfile.replace(hfile.find("%"),1,"base"); + } + fp = fopen(hfile.c_str(),"rb"); if (fp == NULL) error->one(FLERR,fmt::format("Cannot open restart file {}: {}", hfile, utils::getsyserror())); - if (multiproc) delete [] hfile; } // read magic string, endian flag, format revision @@ -272,14 +267,10 @@ void ReadRestart::command(int narg, char **arg) else if (nprocs <= multiproc_file) { - char *procfile = new char[strlen(file) + 16]; - char *ptr = strchr(file,'%'); - for (int iproc = me; iproc < multiproc_file; iproc += nprocs) { - *ptr = '\0'; - sprintf(procfile,"%s%d%s",file,iproc,ptr+1); - *ptr = '%'; - fp = fopen(procfile,"rb"); + std::string procfile = file; + procfile.replace(procfile.find("%"),1,fmt::format("{}",iproc)); + fp = fopen(procfile.c_str(),"rb"); if (fp == NULL) error->one(FLERR,fmt::format("Cannot open restart file {}: {}", procfile, utils::getsyserror())); @@ -309,8 +300,6 @@ void ReadRestart::command(int narg, char **arg) fclose(fp); fp = NULL; } - - delete [] procfile; } // input of multiple native files with procs > files @@ -343,16 +332,12 @@ void ReadRestart::command(int narg, char **arg) MPI_Comm_split(world,icluster,0,&clustercomm); if (filereader) { - char *procfile = new char[strlen(file) + 16]; - char *ptr = strchr(file,'%'); - *ptr = '\0'; - sprintf(procfile,"%s%d%s",file,icluster,ptr+1); - *ptr = '%'; - fp = fopen(procfile,"rb"); + std::string procfile = file; + procfile.replace(procfile.find("%"),1,fmt::format("{}",icluster)); + fp = fopen(procfile.c_str(),"rb"); if (fp == NULL) error->one(FLERR,fmt::format("Cannot open restart file {}: {}", procfile, utils::getsyserror())); - delete [] procfile; } int flag,procsperfile; @@ -618,10 +603,9 @@ void ReadRestart::file_search(char *inpfile, char *outfile) // create outfile with maxint substituted for "*" // use original inpfile, not pattern, since need to retain "%" in filename - ptr = strchr(inpfile,'*'); - *ptr = '\0'; - sprintf(outfile,"%s" BIGINT_FORMAT "%s",inpfile,maxnum,ptr+1); - *ptr = '*'; + std::string newoutfile = inpfile; + newoutfile.replace(newoutfile.find("*"),1,fmt::format("{}",maxnum)); + strcpy(outfile,newoutfile.c_str()); // clean up diff --git a/src/reset_ids.cpp b/src/reset_ids.cpp index b8255cd273..671ba7940f 100644 --- a/src/reset_ids.cpp +++ b/src/reset_ids.cpp @@ -24,6 +24,7 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "fmt/format.h" using namespace LAMMPS_NS; @@ -252,12 +253,9 @@ void ResetIDs::command(int narg, char **arg) int all; MPI_Allreduce(&badcount,&all,1,MPI_INT,MPI_SUM,world); - if (all) { - char str[128]; - sprintf(str,"Reset_ids missing %d bond topology atom IDs - " - "use comm_modify cutoff",all); - error->all(FLERR,str); - } + if (all) + error->all(FLERR,fmt::format("Reset_ids missing {} bond topology atom IDs - " + "use comm_modify cutoff",all)); // reset IDs and atom map for owned atoms diff --git a/src/thermo.cpp b/src/thermo.cpp index b2a9b12c86..52b1813152 100644 --- a/src/thermo.cpp +++ b/src/thermo.cpp @@ -45,6 +45,7 @@ #include "error.h" #include "math_const.h" #include "utils.h" +#include "fmt/format.h" using namespace LAMMPS_NS; using namespace MathConst; @@ -423,21 +424,15 @@ bigint Thermo::lost_check() // error message - if (lostflag == Thermo::ERROR) { - char str[64]; - sprintf(str, - "Lost atoms: original " BIGINT_FORMAT " current " BIGINT_FORMAT, - atom->natoms,ntotal); - error->all(FLERR,str); - } + if (lostflag == Thermo::ERROR) + error->all(FLERR,fmt::format("Lost atoms: original {} current {}", + atom->natoms,ntotal)); // warning message - char str[64]; - sprintf(str, - "Lost atoms: original " BIGINT_FORMAT " current " BIGINT_FORMAT, - atom->natoms,ntotal); - if (me == 0) error->warning(FLERR,str,0); + if (me == 0) + error->warning(FLERR,fmt::format("Lost atoms: original {} current {}", + atom->natoms,ntotal),0); // reset total atom count From 84ec2cc39b2c1ee24e05b5ed8107f51b411243c5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 23:13:28 -0400 Subject: [PATCH 06/14] simplify more code with std::string and fmtlib --- src/input.cpp | 8 ++++---- src/update.cpp | 44 ++++++++++++++++---------------------------- src/utils.cpp | 5 ++--- 3 files changed, 22 insertions(+), 35 deletions(-) diff --git a/src/input.cpp b/src/input.cpp index 7708a79174..e5f8034e72 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -1243,10 +1243,10 @@ void Input::quit() char *shell_failed_message(const char* cmd, int errnum) { - const char *errmsg = strerror(errnum); - int len = strlen(cmd)+strlen(errmsg)+64; - char *msg = new char[len]; - snprintf(msg, len, "Shell command '%s' failed with error '%s'", cmd, errmsg); + std::string errmsg = fmt::format("Shell command '{}' failed with error '{}'", + cmd, strerror(errnum)); + char *msg = new char[errmsg.size()+1]; + strcpy(msg, errmsg.c_str()); return msg; } diff --git a/src/update.cpp b/src/update.cpp index c82e2bcf96..65242b8639 100644 --- a/src/update.cpp +++ b/src/update.cpp @@ -309,18 +309,14 @@ void Update::create_integrate(int narg, char **arg, int trysuffix) int sflag; new_integrate(arg[0],narg-1,&arg[1],trysuffix,sflag); + std::string estyle = arg[0]; if (sflag) { - char estyle[256]; - if (sflag == 1) snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix); - else snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix2); - int n = strlen(estyle) + 1; - integrate_style = new char[n]; - strcpy(integrate_style,estyle); - } else { - int n = strlen(arg[0]) + 1; - integrate_style = new char[n]; - strcpy(integrate_style,arg[0]); + estyle += "/"; + if (sflag == 1) estyle += lmp->suffix; + else estyle += lmp->suffix2; } + integrate_style = new char[estyle.size()+1]; + strcpy(integrate_style,estyle.c_str()); } /* ---------------------------------------------------------------------- @@ -333,8 +329,7 @@ void Update::new_integrate(char *style, int narg, char **arg, if (trysuffix && lmp->suffix_enable) { if (lmp->suffix) { sflag = 1; - char estyle[256]; - snprintf(estyle,256,"%s/%s",style,lmp->suffix); + std::string estyle = style + std::string("/") + lmp->suffix; if (integrate_map->find(estyle) != integrate_map->end()) { IntegrateCreator integrate_creator = (*integrate_map)[estyle]; integrate = integrate_creator(lmp, narg, arg); @@ -344,8 +339,7 @@ void Update::new_integrate(char *style, int narg, char **arg, if (lmp->suffix2) { sflag = 2; - char estyle[256]; - snprintf(estyle,256,"%s/%s",style,lmp->suffix2); + std::string estyle = style + std::string("/") + lmp->suffix2; if (integrate_map->find(estyle) != integrate_map->end()) { IntegrateCreator integrate_creator = (*integrate_map)[estyle]; integrate = integrate_creator(lmp, narg, arg); @@ -386,18 +380,14 @@ void Update::create_minimize(int narg, char **arg, int trysuffix) int sflag; new_minimize(arg[0],narg-1,&arg[1],trysuffix,sflag); + std::string estyle = arg[0]; if (sflag) { - char estyle[256]; - if (sflag == 1) snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix); - else snprintf(estyle,256,"%s/%s",arg[0],lmp->suffix2); - int n = strlen(estyle) + 1; - minimize_style = new char[n]; - strcpy(minimize_style,estyle); - } else { - int n = strlen(arg[0]) + 1; - minimize_style = new char[n]; - strcpy(minimize_style,arg[0]); + estyle += "/"; + if (sflag == 1) estyle += lmp->suffix; + else estyle += lmp->suffix2; } + minimize_style = new char[estyle.size()+1]; + strcpy(minimize_style,estyle.c_str()); } /* ---------------------------------------------------------------------- @@ -410,8 +400,7 @@ void Update::new_minimize(char *style, int /* narg */, char ** /* arg */, if (trysuffix && lmp->suffix_enable) { if (lmp->suffix) { sflag = 1; - char estyle[256]; - snprintf(estyle,256,"%s/%s",style,lmp->suffix); + std::string estyle = style + std::string("/") + lmp->suffix; if (minimize_map->find(estyle) != minimize_map->end()) { MinimizeCreator minimize_creator = (*minimize_map)[estyle]; minimize = minimize_creator(lmp); @@ -421,8 +410,7 @@ void Update::new_minimize(char *style, int /* narg */, char ** /* arg */, if (lmp->suffix2) { sflag = 2; - char estyle[256]; - snprintf(estyle,256,"%s/%s",style,lmp->suffix2); + std::string estyle = style + std::string("/") + lmp->suffix2; if (minimize_map->find(estyle) != minimize_map->end()) { MinimizeCreator minimize_creator = (*minimize_map)[estyle]; minimize = minimize_creator(lmp); diff --git a/src/utils.cpp b/src/utils.cpp index df858dbb36..a4fea83abc 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -121,11 +121,10 @@ static const char *guesspath(char *buf, int len, FILE *fp) memset(buf,0,len); #if defined(__linux__) - char procpath[32]; int fd = fileno(fp); - snprintf(procpath,32,"/proc/self/fd/%d",fd); // get pathname from /proc or copy (unknown) - if (readlink(procpath,buf,len-1) <= 0) strcpy(buf,"(unknown)"); + if (readlink(fmt::format("/proc/self/fd/{}",fd).c_str(),buf,len-1) <= 0) + strcpy(buf,"(unknown)"); #else strcpy(buf,"(unknown)"); #endif From f2a4d12f7e15b5fe88e49240bc17fa6a6df9eed3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 25 Jun 2020 23:48:17 -0400 Subject: [PATCH 07/14] more output simplification with fmtlib, std::string, and utils::logmesg() --- src/min.cpp | 4 +- src/modify.cpp | 60 +++++----------- src/molecule.cpp | 29 +++----- src/neighbor.cpp | 184 +++++++++++++++++++++-------------------------- 4 files changed, 111 insertions(+), 166 deletions(-) diff --git a/src/min.cpp b/src/min.cpp index 5207e98abe..6bdadfb355 100644 --- a/src/min.cpp +++ b/src/min.cpp @@ -210,8 +210,8 @@ void Min::init() void Min::setup(int flag) { if (comm->me == 0 && screen) { - fprintf(screen,"Setting up %s style minimization ...\n", - update->minimize_style); + fmt::print(screen,"Setting up {} style minimization ...\n", + update->minimize_style); if (flag) { fmt::print(screen," Unit style : {}\n", update->unit_style); fmt::print(screen," Current step : {}\n", update->ntimestep); diff --git a/src/modify.cpp b/src/modify.cpp index b2bb6e5e8e..f540116641 100644 --- a/src/modify.cpp +++ b/src/modify.cpp @@ -908,16 +908,10 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) fix[ifix]->restart(state_restart_global[i]); used_restart_global[i] = 1; fix[ifix]->restart_reset = 1; - if (comm->me == 0) { - if (screen) - fprintf(screen,"Resetting global fix info from restart file:\n"); - if (logfile) - fprintf(logfile,"Resetting global fix info from restart file:\n"); - if (screen) fprintf(screen," fix style: %s, fix ID: %s\n", - fix[ifix]->style,fix[ifix]->id); - if (logfile) fprintf(logfile," fix style: %s, fix ID: %s\n", - fix[ifix]->style,fix[ifix]->id); - } + if (comm->me == 0) + utils::logmesg(lmp,fmt::format("Resetting global fix info from restart file:\n" + " fix style: {}, fix ID: {}\n", + fix[ifix]->style,fix[ifix]->id)); } // check if Fix is in restart_peratom list @@ -930,16 +924,10 @@ void Modify::add_fix(int narg, char **arg, int trysuffix) for (int j = 0; j < atom->nlocal; j++) fix[ifix]->unpack_restart(j,index_restart_peratom[i]); fix[ifix]->restart_reset = 1; - if (comm->me == 0) { - if (screen) - fprintf(screen,"Resetting peratom fix info from restart file:\n"); - if (logfile) - fprintf(logfile,"Resetting peratom fix info from restart file:\n"); - if (screen) fprintf(screen," fix style: %s, fix ID: %s\n", - fix[ifix]->style,fix[ifix]->id); - if (logfile) fprintf(logfile," fix style: %s, fix ID: %s\n", - fix[ifix]->style,fix[ifix]->id); - } + if (comm->me == 0) + utils::logmesg(lmp,fmt::format("Resetting peratom fix info from restart file:\n" + " fix style: {}, fix ID: {}\n", + fix[ifix]->style,fix[ifix]->id)); } // increment nfix (if new) @@ -1505,21 +1493,13 @@ void Modify::restart_deallocate(int flag) for (i = 0; i < nfix_restart_global; i++) if (used_restart_global[i] == 0) break; if (i == nfix_restart_global) { - if (screen) - fprintf(screen,"All restart file global fix info " - "was re-assigned\n"); - if (logfile) - fprintf(logfile,"All restart file global fix info " - "was re-assigned\n"); + utils::logmesg(lmp,"All restart file global fix info was re-assigned\n"); } else { - if (screen) fprintf(screen,"Unused restart file global fix info:\n"); - if (logfile) fprintf(logfile,"Unused restart file global fix info:\n"); + utils::logmesg(lmp,"Unused restart file global fix info:\n"); for (i = 0; i < nfix_restart_global; i++) { if (used_restart_global[i]) continue; - if (screen) fprintf(screen," fix style: %s, fix ID: %s\n", - style_restart_global[i],id_restart_global[i]); - if (logfile) fprintf(logfile," fix style: %s, fix ID: %s\n", - style_restart_global[i],id_restart_global[i]); + utils::logmesg(lmp,fmt::format(" fix style: {}, fix ID: {}\n", + style_restart_global[i],id_restart_global[i])); } } } @@ -1541,21 +1521,13 @@ void Modify::restart_deallocate(int flag) for (i = 0; i < nfix_restart_peratom; i++) if (used_restart_peratom[i] == 0) break; if (i == nfix_restart_peratom) { - if (screen) - fprintf(screen,"All restart file peratom fix info " - "was re-assigned\n"); - if (logfile) - fprintf(logfile,"All restart file peratom fix info " - "was re-assigned\n"); + utils::logmesg(lmp,"All restart file peratom fix info was re-assigned\n"); } else { - if (screen) fprintf(screen,"Unused restart file peratom fix info:\n"); - if (logfile) fprintf(logfile,"Unused restart file peratom fix info:\n"); + utils::logmesg(lmp,"Unused restart file peratom fix info:\n"); for (i = 0; i < nfix_restart_peratom; i++) { if (used_restart_peratom[i]) continue; - if (screen) fprintf(screen," fix style: %s, fix ID: %s\n", - style_restart_peratom[i],id_restart_peratom[i]); - if (logfile) fprintf(logfile," fix style: %s, fix ID: %s\n", - style_restart_peratom[i],id_restart_peratom[i]); + utils::logmesg(lmp,fmt::format(" fix style: {}, fix ID: {}\n", + style_restart_peratom[i],id_restart_peratom[i])); } } } diff --git a/src/molecule.cpp b/src/molecule.cpp index 0dc6bd9f0f..9864ca4f4a 100644 --- a/src/molecule.cpp +++ b/src/molecule.cpp @@ -146,24 +146,17 @@ Molecule::Molecule(LAMMPS *lmp, int narg, char **arg, int &index) : // stats - if (me == 0) { - if (screen) - fprintf(screen,"Read molecule template %s:\n %d molecules\n" - " %d atoms with max type %d\n %d bonds with max type %d\n" - " %d angles with max type %d\n %d dihedrals with max type %d\n" - " %d impropers with max type %d\n", - id,nmolecules,natoms,ntypes, - nbonds,nbondtypes,nangles,nangletypes, - ndihedrals,ndihedraltypes,nimpropers,nimpropertypes); - if (logfile) - fprintf(logfile,"Read molecule template %s:\n %d molecules\n" - " %d atoms with max type %d\n %d bonds with max type %d\n" - " %d angles with max type %d\n %d dihedrals with max type %d\n" - " %d impropers with max type %d\n", - id,nmolecules,natoms,ntypes, - nbonds,nbondtypes,nangles,nangletypes, - ndihedrals,ndihedraltypes,nimpropers,nimpropertypes); - } + if (me == 0) + utils::logmesg(lmp,fmt::format("Read molecule template {}:\n" + " {} molecules\n" + " {} atoms with max type {}\n" + " {} bonds with max type {}\n" + " {} angles with max type {}\n" + " {} dihedrals with max type {}\n" + " {} impropers with max type {}\n", + id,nmolecules,natoms,ntypes, + nbonds,nbondtypes,nangles,nangletypes, + ndihedrals,ndihedraltypes,nimpropers,nimpropertypes)); } /* ---------------------------------------------------------------------- */ diff --git a/src/neighbor.cpp b/src/neighbor.cpp index 5783c24d2d..58ab0e7a36 100644 --- a/src/neighbor.cpp +++ b/src/neighbor.cpp @@ -47,6 +47,7 @@ #include "memory.h" #include "error.h" #include "utils.h" +#include "fmt/format.h" using namespace LAMMPS_NS; using namespace NeighConst; @@ -1439,7 +1440,6 @@ void Neighbor::print_pairwise_info() { int i,m; NeighRequest *rq; - FILE *out; const double cutghost = MAX(cutneighmax,comm->cutghostuser); @@ -1461,110 +1461,90 @@ void Neighbor::print_pairwise_info() else nperpetual++; } - for (m = 0; m < 2; m++) { - if (m == 0) out = screen; - else out = logfile; + std::string out = "Neighbor list info ...\n"; + out += fmt::format(" update every {} steps, delay {} steps, check {}\n", + every,delay,dist_check ? "yes" : "no"); + out += fmt::format(" max neighbors/atom: {}, page size: {}\n", + oneatom, pgsize); + out += fmt::format(" master list distance cutoff = {}\n",cutneighmax); + out += fmt::format(" ghost atom cutoff = {}\n",cutghost); + if (style != Neighbor::NSQ) + out += fmt::format(" binsize = {}, bins = {} {} {}\n",binsize, + ceil(bbox[0]/binsize), ceil(bbox[1]/binsize), + ceil(bbox[2]/binsize)); - if (out) { - fprintf(out,"Neighbor list info ...\n"); - fprintf(out," update every %d steps, delay %d steps, check %s\n", - every,delay,dist_check ? "yes" : "no"); - fprintf(out," max neighbors/atom: %d, page size: %d\n", - oneatom, pgsize); - fprintf(out," master list distance cutoff = %g\n",cutneighmax); - fprintf(out," ghost atom cutoff = %g\n",cutghost); - if (style != Neighbor::NSQ) - fprintf(out," binsize = %g, bins = %g %g %g\n",binsize, - ceil(bbox[0]/binsize), ceil(bbox[1]/binsize), - ceil(bbox[2]/binsize)); + out += fmt::format(" {} neighbor lists, perpetual/occasional/extra = {} {} {}\n", + nlist,nperpetual,noccasional,nextra); - fprintf(out," %d neighbor lists, " - "perpetual/occasional/extra = %d %d %d\n", - nlist,nperpetual,noccasional,nextra); - - for (i = 0; i < nlist; i++) { - rq = requests[i]; - if (rq->pair) { - char *pname = force->pair_match_ptr((Pair *) rq->requestor); - fprintf(out," (%d) pair %s",i+1,pname); - } else if (rq->fix) { - fprintf(out," (%d) fix %s",i+1,((Fix *) rq->requestor)->style); - } else if (rq->compute) { - fprintf(out," (%d) compute %s",i+1, - ((Compute *) rq->requestor)->style); - } else if (rq->command) { - fprintf(out," (%d) command %s",i+1,rq->command_style); - } else if (rq->neigh) { - fprintf(out," (%d) neighbor class addition",i+1); - } - - if (rq->occasional) fprintf(out,", occasional"); - else fprintf(out,", perpetual"); - - // order these to get single output of most relevant - - if (rq->copy) - fprintf(out,", copy from (%d)",rq->copylist+1); - else if (rq->halffull) - fprintf(out,", half/full from (%d)",rq->halffulllist+1); - else if (rq->skip) - fprintf(out,", skip from (%d)",rq->skiplist+1); - - fprintf(out,"\n"); - - // list of neigh list attributes - - fprintf(out," attributes: "); - if (rq->half) fprintf(out,"half"); - else if (rq->full) fprintf(out,"full"); - - if (rq->newton == 0) { - if (force->newton_pair) fprintf(out,", newton on"); - else fprintf(out,", newton off"); - } else if (rq->newton == 1) fprintf(out,", newton on"); - else if (rq->newton == 2) fprintf(out,", newton off"); - - if (rq->ghost) fprintf(out,", ghost"); - if (rq->size) fprintf(out,", size"); - if (rq->history) fprintf(out,", history"); - if (rq->granonesided) fprintf(out,", onesided"); - if (rq->respamiddle) fprintf(out,", respa outer/middle/inner"); - else if (rq->respainner) fprintf(out,", respa outer/inner"); - if (rq->bond) fprintf(out,", bond"); - if (rq->omp) fprintf(out,", omp"); - if (rq->intel) fprintf(out,", intel"); - if (rq->kokkos_device) fprintf(out,", kokkos_device"); - if (rq->kokkos_host) fprintf(out,", kokkos_host"); - if (rq->ssa) fprintf(out,", ssa"); - if (rq->cut) fprintf(out,", cut %g",rq->cutoff); - if (rq->off2on) fprintf(out,", off2on"); - fprintf(out,"\n"); - - fprintf(out," "); - if (lists[i]->pair_method == 0) fprintf(out,"pair build: none\n"); - else fprintf(out,"pair build: %s\n",pairnames[lists[i]->pair_method-1]); - - fprintf(out," "); - if (lists[i]->stencil_method == 0) fprintf(out,"stencil: none\n"); - else fprintf(out,"stencil: %s\n", - stencilnames[lists[i]->stencil_method-1]); - - fprintf(out," "); - if (lists[i]->bin_method == 0) fprintf(out,"bin: none\n"); - else fprintf(out,"bin: %s\n",binnames[lists[i]->bin_method-1]); - } - - /* - fprintf(out," %d stencil methods\n",nstencil); - for (i = 0; i < nstencil; i++) - fprintf(out," (%d) %s\n", - i+1,stencilnames[neigh_stencil[i]->istyle-1]); - - fprintf(out," %d bin methods\n",nbin); - for (i = 0; i < nbin; i++) - fprintf(out," (%d) %s\n",i+1,binnames[neigh_bin[i]->istyle-1]); - */ + for (i = 0; i < nlist; i++) { + rq = requests[i]; + if (rq->pair) { + char *pname = force->pair_match_ptr((Pair *) rq->requestor); + out += fmt::format(" ({}) pair {}",i+1,pname); + } else if (rq->fix) { + out += fmt::format(" ({}) fix {}",i+1,((Fix *) rq->requestor)->style); + } else if (rq->compute) { + out += fmt::format(" ({}) compute {}",i+1,((Compute *) rq->requestor)->style); + } else if (rq->command) { + out += fmt::format(" ({}) command {}",i+1,rq->command_style); + } else if (rq->neigh) { + out += fmt::format(" ({}) neighbor class addition",i+1); } + + if (rq->occasional) out += ", occasional"; + else out += ", perpetual"; + + // order these to get single output of most relevant + + if (rq->copy) + out += fmt::format(", copy from ({})",rq->copylist+1); + else if (rq->halffull) + out += fmt::format(", half/full from ({})",rq->halffulllist+1); + else if (rq->skip) + out += fmt::format(", skip from ({})",rq->skiplist+1); + out += "\n"; + + // list of neigh list attributes + + out += " attributes: "; + if (rq->half) out += "half"; + else if (rq->full) out += "full"; + + if (rq->newton == 0) { + if (force->newton_pair) out += ", newton on"; + else out += ", newton off"; + } else if (rq->newton == 1) out += ", newton on"; + else if (rq->newton == 2) out += ", newton off"; + + if (rq->ghost) out += ", ghost"; + if (rq->size) out += ", size"; + if (rq->history) out += ", history"; + if (rq->granonesided) out += ", onesided"; + if (rq->respamiddle) out += ", respa outer/middle/inner"; + else if (rq->respainner) out += ", respa outer/inner"; + if (rq->bond) out += ", bond"; + if (rq->omp) out += ", omp"; + if (rq->intel) out += ", intel"; + if (rq->kokkos_device) out += ", kokkos_device"; + if (rq->kokkos_host) out += ", kokkos_host"; + if (rq->ssa) out += ", ssa"; + if (rq->cut) out += fmt::format(", cut {}",rq->cutoff); + if (rq->off2on) out += ", off2on"; + out += "\n"; + + out += " "; + if (lists[i]->pair_method == 0) out += "pair build: none\n"; + else out += fmt::format("pair build: {}\n",pairnames[lists[i]->pair_method-1]); + + out += " "; + if (lists[i]->stencil_method == 0) out += "stencil: none\n"; + else out += fmt::format("stencil: {}\n",stencilnames[lists[i]->stencil_method-1]); + + out += " "; + if (lists[i]->bin_method == 0) out += "bin: none\n"; + else out += fmt::format("bin: {}\n",binnames[lists[i]->bin_method-1]); + + utils::logmesg(lmp,out); } } From d4148b1b80db829894cdd5b44c3bca34397b34ba Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 07:20:42 -0400 Subject: [PATCH 08/14] set real units in cmap files --- potentials/charmm22.cmap | 2 +- potentials/charmm36.cmap | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/potentials/charmm22.cmap b/potentials/charmm22.cmap index f2560856bb..1097a85b8e 100644 --- a/potentials/charmm22.cmap +++ b/potentials/charmm22.cmap @@ -1,4 +1,4 @@ -# DATE: 2016-09-26 CONTRIBUTOR: Robert Latour, latourr@clemson.edu CITATION: TBA +# DATE: 2016-09-26 UNITS: real CONTRIBUTOR: Robert Latour, latourr@clemson.edu CITATION: TBA # Title: charmm22/charmm27 dihedral correction map # alanine map, type 1 diff --git a/potentials/charmm36.cmap b/potentials/charmm36.cmap index c1e8166f95..9bf8625291 100644 --- a/potentials/charmm36.cmap +++ b/potentials/charmm36.cmap @@ -1,4 +1,4 @@ -# DATE: 2016-09-26 CONTRIBUTOR: Robert Latour, latourr@clemson.edu CITATION: TBA +# DATE: 2016-09-26 UNITS:real CONTRIBUTOR: Robert Latour, latourr@clemson.edu CITATION: TBA # Title: charmm36 dihedral correction map # alanine map, type 1 From 24c3f1f7527d3e4a681e8be594d8098309cf2335 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 07:21:10 -0400 Subject: [PATCH 09/14] fix logic bug triggering failures to read files without UNITS: tag --- src/force.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/force.cpp b/src/force.cpp index 0a1a4ec4fd..d253ce3c2e 100644 --- a/src/force.cpp +++ b/src/force.cpp @@ -1026,7 +1026,7 @@ FILE *Force::open_potential(const char *name, int *auto_convert) } if (auto_convert == nullptr) { - if (units != unit_style) { + if (!units.empty() && (units != unit_style)) { error->one(FLERR, fmt::format("Potential file {} requires {} units " "but {} units are in use", name, units, unit_style)); From c4855d95e7c6149eded87456a3193ef7347d48a5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 07:23:22 -0400 Subject: [PATCH 10/14] more use of utils::logmesg() and {fmt} --- src/lattice.cpp | 13 +++----- src/read_restart.cpp | 72 ++++++++++++++------------------------------ src/replicate.cpp | 10 ++---- src/special.cpp | 2 +- 4 files changed, 32 insertions(+), 65 deletions(-) diff --git a/src/lattice.cpp b/src/lattice.cpp index 98faf680e8..32fac06484 100644 --- a/src/lattice.cpp +++ b/src/lattice.cpp @@ -21,6 +21,8 @@ #include "force.h" #include "memory.h" #include "error.h" +#include "utils.h" +#include "fmt/format.h" using namespace LAMMPS_NS; @@ -301,14 +303,9 @@ Lattice::Lattice(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) // print lattice spacings - if (comm->me == 0) { - if (screen) - fprintf(screen,"Lattice spacing in x,y,z = %g %g %g\n", - xlattice,ylattice,zlattice); - if (logfile) - fprintf(logfile,"Lattice spacing in x,y,z = %g %g %g\n", - xlattice,ylattice,zlattice); - } + if (comm->me == 0) + utils::logmesg(lmp,fmt::format("Lattice spacing in x,y,z = {} {} {}\n", + xlattice,ylattice,zlattice)); } /* ---------------------------------------------------------------------- */ diff --git a/src/read_restart.cpp b/src/read_restart.cpp index 0f3c05e290..c1e0526963 100644 --- a/src/read_restart.cpp +++ b/src/read_restart.cpp @@ -519,14 +519,10 @@ void ReadRestart::command(int narg, char **arg) // total time MPI_Barrier(world); - double time2 = MPI_Wtime(); - if (comm->me == 0) { - if (screen) - fprintf(screen," read_restart CPU = %g secs\n",time2-time1); - if (logfile) - fprintf(logfile," read_restart CPU = %g secs\n",time2-time1); - } + if (comm->me == 0) + utils::logmesg(lmp,fmt::format(" read_restart CPU = {:.3f} secs\n", + MPI_Wtime()-time1)); } /* ---------------------------------------------------------------------- @@ -810,12 +806,8 @@ void ReadRestart::header() for (int i = 0; i < nargcopy; i++) argcopy[i] = read_string(); atom->create_avec(style,nargcopy,argcopy,1); - if (comm->me ==0) { - if (screen) fprintf(screen," restoring atom style %s from " - "restart\n", style); - if (logfile) fprintf(logfile," restoring atom style %s from " - "restart\n", style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" restoring atom style {} from restart\n",style)); for (int i = 0; i < nargcopy; i++) delete [] argcopy[i]; delete [] argcopy; delete [] style; @@ -947,22 +939,16 @@ void ReadRestart::force_fields() style = read_string(); force->create_pair(style,1); delete [] style; - if (comm->me ==0) { - if (screen) fprintf(screen," restoring pair style %s from " - "restart\n", force->pair_style); - if (logfile) fprintf(logfile," restoring pair style %s from " - "restart\n", force->pair_style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" restoring pair style {} from " + "restart\n", force->pair_style)); force->pair->read_restart(fp); } else if (flag == NO_PAIR) { style = read_string(); - if (comm->me ==0) { - if (screen) fprintf(screen," pair style %s stores no " - "restart info\n", style); - if (logfile) fprintf(logfile," pair style %s stores no " - "restart info\n", style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" pair style {} stores no " + "restart info\n", style)); force->create_pair("none",0); force->pair_restart = style; @@ -970,48 +956,36 @@ void ReadRestart::force_fields() style = read_string(); force->create_bond(style,1); delete [] style; - if (comm->me ==0) { - if (screen) fprintf(screen," restoring bond style %s from " - "restart\n", force->bond_style); - if (logfile) fprintf(logfile," restoring bond style %s from " - "restart\n", force->bond_style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" restoring bond style {} from " + "restart\n", force->bond_style)); force->bond->read_restart(fp); } else if (flag == ANGLE) { style = read_string(); force->create_angle(style,1); delete [] style; - if (comm->me ==0) { - if (screen) fprintf(screen," restoring angle style %s from " - "restart\n", force->angle_style); - if (logfile) fprintf(logfile," restoring angle style %s from " - "restart\n", force->angle_style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" restoring angle style {} from " + "restart\n", force->angle_style)); force->angle->read_restart(fp); } else if (flag == DIHEDRAL) { style = read_string(); force->create_dihedral(style,1); delete [] style; - if (comm->me ==0) { - if (screen) fprintf(screen," restoring dihedral style %s from " - "restart\n", force->dihedral_style); - if (logfile) fprintf(logfile," restoring dihedral style %s from " - "restart\n", force->dihedral_style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" restoring dihedral style {} from " + "restart\n", force->dihedral_style)); force->dihedral->read_restart(fp); } else if (flag == IMPROPER) { style = read_string(); force->create_improper(style,1); delete [] style; - if (comm->me ==0) { - if (screen) fprintf(screen," restoring improper style %s from " - "restart\n", force->improper_style); - if (logfile) fprintf(logfile," restoring improper style %s from " - "restart\n", force->improper_style); - } + if (comm->me ==0) + utils::logmesg(lmp,fmt::format(" restoring improper style {} from " + "restart\n", force->improper_style)); force->improper->read_restart(fp); } else error->all(FLERR, diff --git a/src/replicate.cpp b/src/replicate.cpp index bd4be44e53..c32cb1060e 100644 --- a/src/replicate.cpp +++ b/src/replicate.cpp @@ -777,12 +777,8 @@ void Replicate::command(int narg, char **arg) // total time MPI_Barrier(world); - double time2 = MPI_Wtime(); - if (me == 0) { - if (screen) - fprintf(screen," replicate CPU = %g secs\n",time2-time1); - if (logfile) - fprintf(logfile," replicate CPU = %g secs\n",time2-time1); - } + if (me == 0) + utils::logmesg(lmp,fmt::format(" replicate CPU = {:.3f} secs\n", + MPI_Wtime()-time1)); } diff --git a/src/special.cpp b/src/special.cpp index 3b2969e427..6a49966a44 100644 --- a/src/special.cpp +++ b/src/special.cpp @@ -1314,6 +1314,6 @@ void Special::fix_alteration() void Special::timer_output(double time1) { if (comm->me == 0) - utils::logmesg(lmp,fmt::format(" special bonds CPU = {:<.3g} secs\n", + utils::logmesg(lmp,fmt::format(" special bonds CPU = {:.3f} secs\n", MPI_Wtime()-time1)); } From f56563c7470c1575fbd433ba94377c2481bbd1f5 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 08:04:07 -0400 Subject: [PATCH 11/14] simplify output handling in Finish class --- src/finish.cpp | 53 ++++++++++++++++++++------------------------------ 1 file changed, 21 insertions(+), 32 deletions(-) diff --git a/src/finish.cpp b/src/finish.cpp index 9ab97ae410..cdb1e01e9c 100644 --- a/src/finish.cpp +++ b/src/finish.cpp @@ -32,6 +32,8 @@ #include "error.h" #include "timer.h" #include "universe.h" +#include "utils.h" +#include "fmt/format.h" #ifdef LMP_USER_OMP #include "modify.h" @@ -121,12 +123,9 @@ void Finish::end(int flag) if (me == 0) { int ntasks = nprocs * nthreads; - const char fmt1[] = "Loop time of %g on %d procs " - "for %d steps with " BIGINT_FORMAT " atoms\n\n"; - if (screen) fprintf(screen,fmt1,time_loop,ntasks,update->nsteps, - atom->natoms); - if (logfile) fprintf(logfile,fmt1,time_loop,ntasks,update->nsteps, - atom->natoms); + utils::logmesg(lmp,fmt::format("Loop time of {:.6g} on {} procs for " + "{} steps with {} atoms\n\n",time_loop, + ntasks,update->nsteps,atom->natoms)); // Gromacs/NAMD-style performance metric for suitable unit settings @@ -144,24 +143,20 @@ void Finish::end(int flag) if (strcmp(update->unit_style,"lj") == 0) { double tau_day = 24.0*3600.0 / t_step * update->dt / one_fs; - const char perf[] = "Performance: %.3f tau/day, %.3f timesteps/s\n"; - if (screen) fprintf(screen,perf,tau_day,step_t); - if (logfile) fprintf(logfile,perf,tau_day,step_t); + utils::logmesg(lmp,fmt::format("Performance: {:.3f} tau/day, {:.3f} " + "timesteps/s\n",tau_day,step_t)); } else if (strcmp(update->unit_style,"electron") == 0) { double hrs_fs = t_step / update->dt * one_fs / 3600.0; double fs_day = 24.0*3600.0 / t_step * update->dt / one_fs; - const char perf[] = - "Performance: %.3f fs/day, %.3f hours/fs, %.3f timesteps/s\n"; - if (screen) fprintf(screen,perf,fs_day,hrs_fs,step_t); - if (logfile) fprintf(logfile,perf,fs_day,hrs_fs,step_t); - + utils::logmesg(lmp,fmt::format("Performance: {:.3f} fs/day, {:.3f} " + "hours/fs, {:.3f} timesteps/s\n", + fs_day,hrs_fs,step_t)); } else { double hrs_ns = t_step / update->dt * 1000000.0 * one_fs / 3600.0; double ns_day = 24.0*3600.0 / t_step * update->dt / one_fs/1000000.0; - const char perf[] = - "Performance: %.3f ns/day, %.3f hours/ns, %.3f timesteps/s\n"; - if (screen) fprintf(screen,perf,ns_day,hrs_ns,step_t); - if (logfile) fprintf(logfile,perf,ns_day,hrs_ns,step_t); + utils::logmesg(lmp,fmt::format("Performance: {:.3f} ns/day, {:.3f} " + "hours/ns, {:.3f} timesteps/s\n", + ns_day,hrs_ns,step_t)); } } @@ -169,23 +164,17 @@ void Finish::end(int flag) if (timeflag) { if (lmp->kokkos) { - const char fmt2[] = - "%.1f%% CPU use with %d MPI tasks x %d OpenMP threads\n"; - if (screen) fprintf(screen,fmt2,cpu_loop,nprocs, - lmp->kokkos->nthreads); - if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs, - lmp->kokkos->nthreads); + utils::logmesg(lmp,fmt::format("{:.1f}% CPU use with {} MPI tasks " + "x {} OpenMP threads\n",cpu_loop,nprocs, + lmp->kokkos->nthreads)); } else { #if defined(_OPENMP) - const char fmt2[] = - "%.1f%% CPU use with %d MPI tasks x %d OpenMP threads\n"; - if (screen) fprintf(screen,fmt2,cpu_loop,nprocs,nthreads); - if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs,nthreads); + utils::logmesg(lmp,fmt::format("{:.1f}% CPU use with {} MPI tasks " + "x {} OpenMP threads\n", + cpu_loop,nprocs,nthreads)); #else - const char fmt2[] = - "%.1f%% CPU use with %d MPI tasks x no OpenMP threads\n"; - if (screen) fprintf(screen,fmt2,cpu_loop,nprocs); - if (logfile) fprintf(logfile,fmt2,cpu_loop,nprocs); + utils::logmesg(lmp,fmt::format("{:.1f}% CPU use with {} MPI tasks " + "x no OpenMP threads\n",cpu_loop,nprocs)); #endif } } From 74fc64395fd25228d751fcd31f29720aad0188d4 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 09:49:46 -0400 Subject: [PATCH 12/14] output summary simplifications --- src/finish.cpp | 496 +++++++++++++------------------------------------ 1 file changed, 131 insertions(+), 365 deletions(-) diff --git a/src/finish.cpp b/src/finish.cpp index cdb1e01e9c..9483e4e04f 100644 --- a/src/finish.cpp +++ b/src/finish.cpp @@ -195,289 +195,140 @@ void Finish::end(int flag) if (minflag) { if (me == 0) { - if (screen) fprintf(screen,"\n"); - if (logfile) fprintf(logfile,"\n"); - } + std::string mesg = "\nMinimization stats:\n"; - if (me == 0) { - if (screen) { - fprintf(screen,"Minimization stats:\n"); - fprintf(screen," Stopping criterion = %s\n", - update->minimize->stopstr); - fprintf(screen," Energy initial, next-to-last, final = \n" - " %18.12g %18.12g %18.12g\n", - update->minimize->einitial,update->minimize->eprevious, - update->minimize->efinal); - fprintf(screen," Force two-norm initial, final = %g %g\n", - update->minimize->fnorm2_init,update->minimize->fnorm2_final); - fprintf(screen," Force max component initial, final = %g %g\n", - update->minimize->fnorminf_init, - update->minimize->fnorminf_final); - fprintf(screen," Final line search alpha, max atom move = %g %g\n", - update->minimize->alpha_final, - update->minimize->alpha_final* - update->minimize->fnorminf_final); - fprintf(screen," Iterations, force evaluations = %d %d\n", - update->minimize->niter,update->minimize->neval); - } - if (logfile) { - fprintf(logfile,"Minimization stats:\n"); - fprintf(logfile," Stopping criterion = %s\n", - update->minimize->stopstr); - fprintf(logfile," Energy initial, next-to-last, final = \n" - " %18.12g %18.12g %18.12g\n", - update->minimize->einitial,update->minimize->eprevious, - update->minimize->efinal); - fprintf(logfile," Force two-norm initial, final = %g %g\n", - update->minimize->fnorm2_init,update->minimize->fnorm2_final); - fprintf(logfile," Force max component initial, final = %g %g\n", - update->minimize->fnorminf_init, - update->minimize->fnorminf_final); - fprintf(logfile," Final line search alpha, max atom move = %g %g\n", - update->minimize->alpha_final, - update->minimize->alpha_final* - update->minimize->fnorminf_final); - fprintf(logfile," Iterations, force evaluations = %d %d\n", - update->minimize->niter,update->minimize->neval); - } + mesg += fmt::format(" Stopping criterion = {}\n", + update->minimize->stopstr); + mesg += fmt::format(" Energy initial, next-to-last, final = \n" + " {:18.15g} {:18.15g} {:18.15g}\n", + update->minimize->einitial, + update->minimize->eprevious, + update->minimize->efinal); + mesg += fmt::format(" Force two-norm initial, final = {} {}\n", + update->minimize->fnorm2_init,update->minimize->fnorm2_final); + mesg += fmt::format(" Force max component initial, final = {} {}\n", + update->minimize->fnorminf_init, + update->minimize->fnorminf_final); + mesg += fmt::format(" Final line search alpha, max atom move = {} {}\n", + update->minimize->alpha_final, + update->minimize->alpha_final* + update->minimize->fnorminf_final); + mesg += fmt::format(" Iterations, force evaluations = {} {}\n", + update->minimize->niter,update->minimize->neval); + utils::logmesg(lmp,mesg); } } // PRD stats if (prdflag) { - if (me == 0) { - if (screen) fprintf(screen,"\nPRD stats:\n"); - if (logfile) fprintf(logfile,"\nPRD stats:\n"); - } + if (me == 0) utils::logmesg(lmp,"\nPRD stats:\n"); time = timer->get_wall(Timer::DEPHASE); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Dephase time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Dephase time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Dephase time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::DYNAMICS); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Dynamics time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Dynamics time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Dynamics time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::QUENCH); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Quench time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Quench time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - - time = timer->get_wall(Timer::REPCOMM); + if (me == 0) utils::logmesg(lmp,fmt::format(" Quench time (%) = {} ({})\n", + time,time/time_loop*100.0)); + time = timer->get_wall(Timer::REPCOMM); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Comm time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Comm time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - - + if (me == 0) utils::logmesg(lmp,fmt::format(" Comm time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::REPOUT); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Output time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Output time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Output time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = time_other; MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { // XXXX: replica comm, replica output - if (screen) - fprintf(screen," Other time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Other time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } + if (me == 0) utils::logmesg(lmp,fmt::format(" Other time (%) = {} ({})\n", + time,time/time_loop*100.0)); } // TAD stats if (tadflag) { - if (me == 0) { - if (screen) fprintf(screen,"\n"); - if (logfile) fprintf(logfile,"\n"); - } - - if (screen) fprintf(screen,"TAD stats:\n"); - if (logfile) fprintf(logfile,"TAD stats:\n"); + if (me == 0) utils::logmesg(lmp,"\nTAD stats:\n"); time = timer->get_wall(Timer::NEB); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," NEB time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," NEB time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" NEB time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::DYNAMICS); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Dynamics time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Dynamics time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Dynamics time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::QUENCH); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Quench time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Quench time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - - + if (me == 0) utils::logmesg(lmp,fmt::format(" Quench time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::REPCOMM); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Comm time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Comm time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - - + if (me == 0) utils::logmesg(lmp,fmt::format(" Comm time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::REPOUT); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Output time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Output time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Output time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = time_other; MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Other time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Other time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } + if (me == 0) utils::logmesg(lmp,fmt::format(" Other time (%) = {} ({})\n", + time,time/time_loop*100.0)); } // HYPER stats if (hyperflag) { - if (me == 0) { - if (screen) fprintf(screen,"\nHyper stats:\n"); - if (logfile) fprintf(logfile,"\nHyper stats:\n"); - } + if (me == 0) utils::logmesg(lmp,"\nHyper stats:\n"); time = timer->get_wall(Timer::DYNAMICS); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Dynamics time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Dynamics time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Dynamics time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = timer->get_wall(Timer::QUENCH); MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Quench time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Quench time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } - + if (me == 0) utils::logmesg(lmp,fmt::format(" Quench time (%) = {} ({})\n", + time,time/time_loop*100.0)); time = time_other; MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - if (me == 0) { - if (screen) - fprintf(screen," Other time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - if (logfile) - fprintf(logfile," Other time (%%) = %g (%g)\n", - time,time/time_loop*100.0); - } + if (me == 0) utils::logmesg(lmp,fmt::format(" Other time (%) = {} ({})\n", + time,time/time_loop*100.0)); } // further timing breakdowns if (timeflag && timer->has_normal()) { - if (timer->has_full()) { - const char hdr[] = "\nMPI task timing breakdown:\n" - "Section | min time | avg time | max time " - "|%varavg| %CPU | %total\n" - "-----------------------------------------------" - "------------------------\n"; - if (me == 0) { - if (screen) fputs(hdr,screen); - if (logfile) fputs(hdr,logfile); - } - } else { - const char hdr[] = "\nMPI task timing breakdown:\n" - "Section | min time | avg time | max time |%varavg| %total\n" - "---------------------------------------------------------------\n"; - if (me == 0) { - if (screen) fputs(hdr,screen); - if (logfile) fputs(hdr,logfile); - } + if (me == 0) { + if (timer->has_full()) + utils::logmesg(lmp,"\nMPI task timing breakdown:\nSection | min time " + " | avg time | max time |%varavg| %CPU | %total\n" + "-----------------------------------------------------" + "------------------\n"); + else + utils::logmesg(lmp,"\nMPI task timing breakdown:\nSection | min time " + " | avg time | max time |%varavg| %total\n---------" + "------------------------------------------------------\n"); } mpi_timings("Pair",timer,Timer::PAIR, world,nprocs, @@ -507,25 +358,19 @@ void Finish::end(int flag) MPI_Allreduce(&time,&tmp,1,MPI_DOUBLE,MPI_SUM,world); time = tmp/nprocs; - const char *fmt; - if (timer->has_full()) - fmt = "Other | |%- 12.4g| | | |%6.2f\n"; - else - fmt = "Other | |%- 12.4g| | |%6.2f\n"; - if (me == 0) { - if (screen) fprintf(screen,fmt,time,time/time_loop*100.0); - if (logfile) fprintf(logfile,fmt,time,time/time_loop*100.0); + if (timer->has_full()) + utils::logmesg(lmp,fmt::format("Other | | {:<10.4g} | " + " | | |{:6.2f}\n", + time,time/time_loop*100.0)); + else + utils::logmesg(lmp,fmt::format("Other | | {:<10.4g} | " + " | |{:6.2f}\n", + time,time/time_loop*100.0)); } } #ifdef LMP_USER_OMP - const char thr_hdr_fmt[] = - "\nThread timing breakdown (MPI rank %d):\nTotal threaded time %.4g / %.1f%%\n"; - const char thr_header[] = - "Section | min time | avg time | max time |%varavg| %total\n" - "---------------------------------------------------------------\n"; - int ifix = modify->find_fix("package_omp"); // print thread breakdown only with full timer detail @@ -541,23 +386,17 @@ void Finish::end(int flag) thr_total /= (double) nthreads; if (thr_total > 0.0) { - if (screen) { - fprintf(screen,thr_hdr_fmt,me,thr_total,thr_total/time_loop*100.0); - fputs(thr_header,screen); - } - if (logfile) { - fprintf(logfile,thr_hdr_fmt,me,thr_total,thr_total/time_loop*100.0); - fputs(thr_header,logfile); - } + const std::string thr_fmt = + "\nThread timing breakdown (MPI rank {}):\nTotal threaded time {:.4g} / {:.1f}%\n" + "Section | min time | avg time | max time |%varavg| %total\n" + "---------------------------------------------------------------\n"; + utils::logmesg(lmp,fmt::format(thr_fmt,me,thr_total,thr_total/time_loop*100.0)); omp_times(fixomp,"Pair",Timer::PAIR,nthreads,screen,logfile); - if (atom->molecular) omp_times(fixomp,"Bond",Timer::BOND,nthreads,screen,logfile); - if (force->kspace) omp_times(fixomp,"Kspace",Timer::KSPACE,nthreads,screen,logfile); - omp_times(fixomp,"Neigh",Timer::NEIGH,nthreads,screen,logfile); omp_times(fixomp,"Reduce",Timer::COMM,nthreads,screen,logfile); } @@ -579,11 +418,7 @@ void Finish::end(int flag) // time_kspace may be 0.0 if another partition is doing Kspace if (fftflag) { - if (me == 0) { - if (screen) fprintf(screen,"\n"); - if (logfile) fprintf(logfile,"\n"); - } - + if (me == 0) utils::logmesg(lmp,"\n"); int nsteps = update->nsteps; double time3d; @@ -626,56 +461,30 @@ void Finish::end(int flag) flop1 = nfft*nflops/1.0e9/(time1d/nsteps); } else fraction = flop3 = flop1 = 0.0; - if (me == 0) { - if (screen) { - fprintf(screen,"FFT time (%% of Kspce) = %g (%g)\n",time3d,fraction); - fprintf(screen,"FFT Gflps 3d (1d only) = %g %g\n",flop3,flop1); - } - if (logfile) { - fprintf(logfile,"FFT time (%% of Kspce) = %g (%g)\n",time3d,fraction); - fprintf(logfile,"FFT Gflps 3d (1d only) = %g %g\n",flop3,flop1); - } - } + if (me == 0) + utils::logmesg(lmp,fmt::format("FFT time (% of Kspce) = {} ({})\n" + "FFT Gflps 3d (1d only) = {} {}\n", + time3d,fraction,flop3,flop1)); } if (histoflag) { - if (me == 0) { - if (screen) fprintf(screen,"\n"); - if (logfile) fprintf(logfile,"\n"); - } - + std::string mesg = "\n"; tmp = atom->nlocal; stats(1,&tmp,&ave,&max,&min,10,histo); if (me == 0) { - if (screen) { - fprintf(screen,"Nlocal: %g ave %g max %g min\n",ave,max,min); - fprintf(screen,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]); - fprintf(screen,"\n"); - } - if (logfile) { - fprintf(logfile,"Nlocal: %g ave %g max %g min\n",ave,max,min); - fprintf(logfile,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]); - fprintf(logfile,"\n"); - } + mesg += fmt::format("Nlocal: {} ave {} max {} min\n",ave,max,min); + mesg += "Histogram:"; + for (i = 0; i < 10; i++) mesg += fmt::format(" {}",histo[i]); + mesg += "\n"; } tmp = atom->nghost; stats(1,&tmp,&ave,&max,&min,10,histo); if (me == 0) { - if (screen) { - fprintf(screen,"Nghost: %g ave %g max %g min\n",ave,max,min); - fprintf(screen,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]); - fprintf(screen,"\n"); - } - if (logfile) { - fprintf(logfile,"Nghost: %g ave %g max %g min\n",ave,max,min); - fprintf(logfile,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]); - fprintf(logfile,"\n"); - } + mesg += fmt::format("Nghost: {} ave {} max {} min\n",ave,max,min); + mesg += "Histogram:"; + for (i = 0; i < 10; i++) mesg += fmt::format(" {}",histo[i]); + mesg += "\n"; } // find a non-skip neighbor list containing half pairwise interactions @@ -701,18 +510,10 @@ void Finish::end(int flag) tmp = nneigh; stats(1,&tmp,&ave,&max,&min,10,histo); if (me == 0) { - if (screen) { - fprintf(screen,"Neighs: %g ave %g max %g min\n",ave,max,min); - fprintf(screen,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]); - fprintf(screen,"\n"); - } - if (logfile) { - fprintf(logfile,"Neighs: %g ave %g max %g min\n",ave,max,min); - fprintf(logfile,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]); - fprintf(logfile,"\n"); - } + mesg += fmt::format("Neighs: {} ave {} max {} min\n",ave,max,min); + mesg += "Histogram:"; + for (i = 0; i < 10; i++) mesg += fmt::format(" {}",histo[i]); + mesg += "\n"; } // find a non-skip neighbor list containing full pairwise interactions @@ -732,32 +533,23 @@ void Finish::end(int flag) for (i = 0; i < inum; i++) nneighfull += numneigh[ilist[i]]; } else if (lmp->kokkos) - nneighfull = lmp->kokkos->neigh_count(m); + nneighfull = lmp->kokkos->neigh_count(m); tmp = nneighfull; stats(1,&tmp,&ave,&max,&min,10,histo); if (me == 0) { - if (screen) { - fprintf(screen,"FullNghs: %g ave %g max %g min\n",ave,max,min); - fprintf(screen,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(screen," %d",histo[i]); - fprintf(screen,"\n"); - } - if (logfile) { - fprintf(logfile,"FullNghs: %g ave %g max %g min\n",ave,max,min); - fprintf(logfile,"Histogram:"); - for (i = 0; i < 10; i++) fprintf(logfile," %d",histo[i]); - fprintf(logfile,"\n"); - } + mesg += fmt::format("FullNghs: {} ave {} max {} min\n",ave,max,min); + mesg += "Histogram:"; + for (i = 0; i < 10; i++) mesg += fmt::format(" {}",histo[i]); + mesg += "\n"; + } } + if (me == 0) utils::logmesg(lmp,mesg); } if (neighflag) { - if (me == 0) { - if (screen) fprintf(screen,"\n"); - if (logfile) fprintf(logfile,"\n"); - } + if (me == 0) utils::logmesg(lmp,"\n"); tmp = MAX(nneigh,nneighfull); double nall; @@ -790,40 +582,19 @@ void Finish::end(int flag) } if (me == 0) { - if (screen) { - if (nall < 2.0e9) - fprintf(screen, - "Total # of neighbors = %d\n",static_cast (nall)); - else fprintf(screen,"Total # of neighbors = %g\n",nall); - if (atom->natoms > 0) - fprintf(screen,"Ave neighs/atom = %g\n",nall/atom->natoms); - if (atom->molecular && atom->natoms > 0) - fprintf(screen,"Ave special neighs/atom = %g\n", - nspec_all/atom->natoms); - fprintf(screen,"Neighbor list builds = " BIGINT_FORMAT "\n", - neighbor->ncalls); - if (neighbor->dist_check) - fprintf(screen,"Dangerous builds = " BIGINT_FORMAT "\n", - neighbor->ndanger); - else fprintf(screen,"Dangerous builds not checked\n"); - } - if (logfile) { - if (nall < 2.0e9) - fprintf(logfile, - "Total # of neighbors = %d\n",static_cast (nall)); - else fprintf(logfile,"Total # of neighbors = %g\n",nall); - if (atom->natoms > 0) - fprintf(logfile,"Ave neighs/atom = %g\n",nall/atom->natoms); - if (atom->molecular && atom->natoms > 0) - fprintf(logfile,"Ave special neighs/atom = %g\n", - nspec_all/atom->natoms); - fprintf(logfile,"Neighbor list builds = " BIGINT_FORMAT "\n", - neighbor->ncalls); - if (neighbor->dist_check) - fprintf(logfile,"Dangerous builds = " BIGINT_FORMAT "\n", - neighbor->ndanger); - else fprintf(logfile,"Dangerous builds not checked\n"); - } + std::string mesg; + + mesg += fmt::format("Total # of neighbors = {}\n",static_cast(nall)); + if (atom->natoms > 0) + mesg += fmt::format("Ave neighs/atom = {}\n",nall/atom->natoms); + if (atom->molecular && atom->natoms > 0) + mesg += fmt::format("Ave special neighs/atom = {}\n", + nspec_all/atom->natoms); + mesg += fmt::format("Neighbor list builds = {}\n",neighbor->ncalls); + if (neighbor->dist_check) + mesg += fmt::format("Dangerous builds = {}\n",neighbor->ndanger); + else mesg += "Dangerous builds not checked\n"; + utils::logmesg(lmp,mesg); } } @@ -910,23 +681,18 @@ void mpi_timings(const char *label, Timer *t, enum Timer::ttype tt, else time_sq = 0.0; - if (me == 0) { tmp = time/time_loop*100.0; - if (t->has_full()) { - const char fmt[] = "%-8s|%- 12.5g|%- 12.5g|%- 12.5g|%6.1f |%6.1f |%6.2f\n"; - if (scr) - fprintf(scr,fmt,label,time_min,time,time_max,time_sq,time_cpu,tmp); - if (log) - fprintf(log,fmt,label,time_min,time,time_max,time_sq,time_cpu,tmp); - time_loop = 100.0/time_loop; - } else { - const char fmt[] = "%-8s|%- 12.5g|%- 12.5g|%- 12.5g|%6.1f |%6.2f\n"; - if (scr) - fprintf(scr,fmt,label,time_min,time,time_max,time_sq,tmp); - if (log) - fprintf(log,fmt,label,time_min,time,time_max,time_sq,tmp); - } + std::string mesg; + if (t->has_full()) + mesg = fmt::format("{:<8s}| {:<10.5g} | {:<10.5g} | {:<10.5g} |{:6.1f} |" + "{:6.1f} |{:6.2f}\n", + label,time_min,time,time_max,time_sq,time_cpu,tmp); + else + mesg = fmt::format("{:<8s}| {:<10.5g} | {:<10.5g} | {:<10.5g} |{:6.1f} |" + "{:6.2f}\n",label,time_min,time,time_max,time_sq,tmp); + if (scr) fputs(mesg.c_str(),scr); + if (log) fputs(mesg.c_str(),log); } } @@ -936,7 +702,6 @@ void mpi_timings(const char *label, Timer *t, enum Timer::ttype tt, void omp_times(FixOMP *fix, const char *label, enum Timer::ttype which, const int nthreads,FILE *scr, FILE *log) { - const char fmt[] = "%-8s|%- 12.5g|%- 12.5g|%- 12.5g|%6.1f |%6.2f\n"; double time_min, time_max, time_avg, time_total, time_std; time_min = 1.0e100; @@ -962,10 +727,11 @@ void omp_times(FixOMP *fix, const char *label, enum Timer::ttype which, else time_std = 0.0; - if (scr) fprintf(scr,fmt,label,time_min,time_avg,time_max,time_std, - time_avg/time_total*100.0); - if (log) fprintf(log,fmt,label,time_min,time_avg,time_max,time_std, - time_avg/time_total*100.0); + std::string mesg = fmt::format("{:<8s}| {:10.5g} | {:10.5g} | {:10.5g} |" + "{:6.1f} |{:6.2f}\n",label,time_min,time_avg, + time_max,time_std,time_avg/time_total*100.0); + if (scr) fputs(mesg.c_str(),scr); + if (log) fputs(mesg.c_str(),log); } #endif From bdb4cc561c3818d99732f5753d3bab89de1d3c39 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 11:11:59 -0400 Subject: [PATCH 13/14] add update README files --- examples/README | 1 + tools/README | 4 ++++ tools/coding_standard/README | 5 +++++ tools/valgrind/README | 15 +++++++++++++++ 4 files changed, 25 insertions(+) create mode 100644 tools/coding_standard/README create mode 100644 tools/valgrind/README diff --git a/examples/README b/examples/README index dbb9623e3f..c840ede803 100644 --- a/examples/README +++ b/examples/README @@ -88,6 +88,7 @@ melt: rapid melt of 3d LJ system message: client/server coupling of 2 codes micelle: self-assembly of small lipid-like molecules into 2d bilayers min: energy minimization of 2d LJ melt +mliap: examples for using several bundled MLIAP potentials mscg: parameterize a multi-scale coarse-graining (MSCG) model msst: MSST shock dynamics nb3b: use of nonbonded 3-body harmonic pair style diff --git a/tools/README b/tools/README index 2a6f28caf0..bed062f918 100644 --- a/tools/README +++ b/tools/README @@ -17,6 +17,7 @@ binary2txt convert a LAMMPS dump file from binary to ASCII text ch2lmp convert CHARMM files to LAMMPS input chain create a data file of bead-spring chains cmake tools and scripts for use with CMake +coding_standard python scripts to detect and fix some LAMMPS conventions colvars post-process output of the fix colvars command createatoms generate lattices of atoms within a geometry drude create Drude core/electron atom pairs in a data file @@ -31,6 +32,7 @@ kate add-ons to Kate editor for editing LAMMPS input scripts lmp2arc convert LAMMPS output to Accelrys Insight format lmp2cfg convert LAMMPS output to CFG files for AtomEye viz matlab MatLab scripts for post-processing LAMMPS output +mesont Tools for use with the USER-MESONT package micelle2d create a data file of small lipid chains in solvent moltemplate Instructions for installing the Moltemplate builder program msi2lmp use Accelrys Insight code to setup LAMMPS input @@ -40,8 +42,10 @@ pymol_asphere convert LAMMPS output of ellipsoids to PyMol format python Python scripts for post-processing LAMMPS output reax Tools for analyzing output of ReaxFF simulations replica tool to reorder LAMMPS replica trajectories according to temperature +singularity Singularity container descriptions suitable for LAMMPS development smd convert Smooth Mach Dynamics triangles to VTK spin perform a cubic polynomial interpolation of a GNEB MEP +valgrind suppression files for use with valgrind's memcheck tool vim add-ons to VIM editor for editing LAMMPS input scripts xmgrace a collection of scripts to generate xmgrace plots diff --git a/tools/coding_standard/README b/tools/coding_standard/README new file mode 100644 index 0000000000..d0cd2872df --- /dev/null +++ b/tools/coding_standard/README @@ -0,0 +1,5 @@ +These Python scripts help to detect whether files in the repository +conform to LAMMPS coding conventions or not, and can fix those issues, too. + +permissions.py detects if sources have executable permissions and scripts have not +whitespace.py (currently) detects trailing whitespace diff --git a/tools/valgrind/README b/tools/valgrind/README new file mode 100644 index 0000000000..012eab1b65 --- /dev/null +++ b/tools/valgrind/README @@ -0,0 +1,15 @@ +These files contain additional suppressions for LAMMPS when using valgrind's +memcheck tool to search for memory access violations and memory leaks. +These will suppress known false positives and thus help to focus finding +and fixing real issues. When using CMake, these are automatically included +when running "ctest -T memcheck". To manually add them to do a memory check +on running LAMMPS, use a command line like following: + +valgrind --show-leak-kinds=all --track-origins=yes \ + --suppressions=/path/to/lammps/tools/valgrind/OpenMP.supp \ + --suppressions=/path/to/lammps/tools/valgrind/OpenMPI.supp \ + --suppressions=/path/to/lammps/tools/valgrind/Python3.supp \ + lmp -in in.melt + +Last update: 2020-06-24 + From 40b62e11b1b4a1f2bf1e44d5a1b10fedf481c102 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Fri, 26 Jun 2020 11:14:40 -0400 Subject: [PATCH 14/14] add comment requested by @sjplimp --- src/MANYBODY/pair_eam.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MANYBODY/pair_eam.cpp b/src/MANYBODY/pair_eam.cpp index 0133a064f8..ba347ccf96 100644 --- a/src/MANYBODY/pair_eam.cpp +++ b/src/MANYBODY/pair_eam.cpp @@ -669,6 +669,7 @@ void PairEAM::file2array() // create a z2r array for each file against other files, only for I >= J // interpolate zri and zrj to a single grid and cutoff + // final z2r includes unit conversion of 27.2 eV/Hartree and 0.529 Ang/Bohr double zri,zrj;