add code to allow reporting which styles are part of what package
This commit is contained in:
1
src/.gitignore
vendored
1
src/.gitignore
vendored
@ -5,6 +5,7 @@
|
|||||||
/lmp_*
|
/lmp_*
|
||||||
|
|
||||||
/style_*.h
|
/style_*.h
|
||||||
|
/packages_*.h
|
||||||
/lmpinstalledpkgs.h
|
/lmpinstalledpkgs.h
|
||||||
/lmpgitversion.h
|
/lmpgitversion.h
|
||||||
|
|
||||||
|
|||||||
172
src/lammps.cpp
172
src/lammps.cpp
@ -14,6 +14,8 @@
|
|||||||
#include <mpi.h>
|
#include <mpi.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
#include "lammps.h"
|
#include "lammps.h"
|
||||||
#include "style_angle.h"
|
#include "style_angle.h"
|
||||||
#include "style_atom.h"
|
#include "style_atom.h"
|
||||||
@ -54,10 +56,29 @@
|
|||||||
#include "lmpinstalledpkgs.h"
|
#include "lmpinstalledpkgs.h"
|
||||||
#include "lmpgitversion.h"
|
#include "lmpgitversion.h"
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
|
||||||
|
|
||||||
static void print_style(FILE *fp, const char *str, int &pos);
|
static void print_style(FILE *fp, const char *str, int &pos);
|
||||||
|
|
||||||
|
struct LAMMPS_NS::package_styles_lists {
|
||||||
|
std::map<std::string,std::string> angle_styles;
|
||||||
|
std::map<std::string,std::string> atom_styles;
|
||||||
|
std::map<std::string,std::string> body_styles;
|
||||||
|
std::map<std::string,std::string> bond_styles;
|
||||||
|
std::map<std::string,std::string> command_styles;
|
||||||
|
std::map<std::string,std::string> compute_styles;
|
||||||
|
std::map<std::string,std::string> dihedral_styles;
|
||||||
|
std::map<std::string,std::string> dump_styles;
|
||||||
|
std::map<std::string,std::string> fix_styles;
|
||||||
|
std::map<std::string,std::string> improper_styles;
|
||||||
|
std::map<std::string,std::string> integrate_styles;
|
||||||
|
std::map<std::string,std::string> kspace_styles;
|
||||||
|
std::map<std::string,std::string> minimize_styles;
|
||||||
|
std::map<std::string,std::string> pair_styles;
|
||||||
|
std::map<std::string,std::string> reader_styles;
|
||||||
|
std::map<std::string,std::string> region_styles;
|
||||||
|
};
|
||||||
|
|
||||||
|
using namespace LAMMPS_NS;
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
start up LAMMPS
|
start up LAMMPS
|
||||||
allocate fundamental classes (memory, error, universe, input)
|
allocate fundamental classes (memory, error, universe, input)
|
||||||
@ -86,6 +107,8 @@ LAMMPS::LAMMPS(int narg, char **arg, MPI_Comm communicator) :
|
|||||||
|
|
||||||
initclock = MPI_Wtime();
|
initclock = MPI_Wtime();
|
||||||
|
|
||||||
|
init_pkg_lists();
|
||||||
|
|
||||||
// check if -mpi is first arg
|
// check if -mpi is first arg
|
||||||
// if so, then 2 apps were launched with one mpirun command
|
// if so, then 2 apps were launched with one mpirun command
|
||||||
// this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS
|
// this means passed communicator (e.g. MPI_COMM_WORLD) is bigger than LAMMPS
|
||||||
@ -693,6 +716,8 @@ LAMMPS::~LAMMPS()
|
|||||||
delete universe;
|
delete universe;
|
||||||
delete error;
|
delete error;
|
||||||
delete memory;
|
delete memory;
|
||||||
|
|
||||||
|
delete pkg_lists;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
@ -867,6 +892,149 @@ void LAMMPS::destroy()
|
|||||||
python = NULL;
|
python = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------------------------------------
|
||||||
|
initialize lists of styles in packages
|
||||||
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void LAMMPS::init_pkg_lists()
|
||||||
|
{
|
||||||
|
pkg_lists = new package_styles_lists;
|
||||||
|
#define PACKAGE "UNKNOWN"
|
||||||
|
#define ANGLE_CLASS
|
||||||
|
#define AngleStyle(key,Class) \
|
||||||
|
pkg_lists->angle_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_angle.h"
|
||||||
|
#undef AngleStyle
|
||||||
|
#undef ANGLE_CLASS
|
||||||
|
#define ATOM_CLASS
|
||||||
|
#define AtomStyle(key,Class) \
|
||||||
|
pkg_lists->atom_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_atom.h"
|
||||||
|
#undef AtomStyle
|
||||||
|
#undef ATOM_CLASS
|
||||||
|
#define BODY_CLASS
|
||||||
|
#define BodyStyle(key,Class) \
|
||||||
|
pkg_lists->body_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_body.h"
|
||||||
|
#undef BodyStyle
|
||||||
|
#undef BODY_CLASS
|
||||||
|
#define BOND_CLASS
|
||||||
|
#define BondStyle(key,Class) \
|
||||||
|
pkg_lists->bond_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_bond.h"
|
||||||
|
#undef BondStyle
|
||||||
|
#undef BOND_CLASS
|
||||||
|
#define COMMAND_CLASS
|
||||||
|
#define CommandStyle(key,Class) \
|
||||||
|
pkg_lists->command_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_command.h"
|
||||||
|
#undef CommandStyle
|
||||||
|
#undef COMMAND_CLASS
|
||||||
|
#define COMPUTE_CLASS
|
||||||
|
#define ComputeStyle(key,Class) \
|
||||||
|
pkg_lists->compute_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_compute.h"
|
||||||
|
#undef ComputeStyle
|
||||||
|
#undef COMPUTE_CLASS
|
||||||
|
#define DIHEDRAL_CLASS
|
||||||
|
#define DihedralStyle(key,Class) \
|
||||||
|
pkg_lists->dihedral_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_dihedral.h"
|
||||||
|
#undef DihedralStyle
|
||||||
|
#undef DIHEDRAL_CLASS
|
||||||
|
#define DUMP_CLASS
|
||||||
|
#define DumpStyle(key,Class) \
|
||||||
|
pkg_lists->dump_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_dump.h"
|
||||||
|
#undef DumpStyle
|
||||||
|
#undef DUMP_CLASS
|
||||||
|
#define FIX_CLASS
|
||||||
|
#define FixStyle(key,Class) \
|
||||||
|
pkg_lists->fix_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_fix.h"
|
||||||
|
#undef FixStyle
|
||||||
|
#undef FIX_CLASS
|
||||||
|
#define IMPROPER_CLASS
|
||||||
|
#define ImproperStyle(key,Class) \
|
||||||
|
pkg_lists->improper_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_improper.h"
|
||||||
|
#undef ImproperStyle
|
||||||
|
#undef IMPROPER_CLASS
|
||||||
|
#define INTEGRATE_CLASS
|
||||||
|
#define IntegrateStyle(key,Class) \
|
||||||
|
pkg_lists->integrate_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_integrate.h"
|
||||||
|
#undef IntegrateStyle
|
||||||
|
#undef INTEGRATE_CLASS
|
||||||
|
#define KSPACE_CLASS
|
||||||
|
#define KSpaceStyle(key,Class) \
|
||||||
|
pkg_lists->kspace_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_kspace.h"
|
||||||
|
#undef KSpaceStyle
|
||||||
|
#undef KSPACE_CLASS
|
||||||
|
#define MINIMIZE_CLASS
|
||||||
|
#define MinimizeStyle(key,Class) \
|
||||||
|
pkg_lists->minimize_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_minimize.h"
|
||||||
|
#undef MinimizeStyle
|
||||||
|
#undef MINIMIZE_CLASS
|
||||||
|
#define PAIR_CLASS
|
||||||
|
#define PairStyle(key,Class) \
|
||||||
|
pkg_lists->pair_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_pair.h"
|
||||||
|
#undef PairStyle
|
||||||
|
#undef PAIR_CLASS
|
||||||
|
#define READER_CLASS
|
||||||
|
#define ReaderStyle(key,Class) \
|
||||||
|
pkg_lists->reader_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_reader.h"
|
||||||
|
#undef ReaderStyle
|
||||||
|
#undef READER_CLASS
|
||||||
|
#define REGION_CLASS
|
||||||
|
#define RegionStyle(key,Class) \
|
||||||
|
pkg_lists->region_styles[#key] = PACKAGE;
|
||||||
|
#include "packages_region.h"
|
||||||
|
#undef RegionStyle
|
||||||
|
#undef REGION_CLASS
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LAMMPS::is_installed_pkg(const char *pkg)
|
||||||
|
{
|
||||||
|
for (int i=0; installed_packages[i] != NULL; ++i)
|
||||||
|
if (strcmp(installed_packages[i],pkg) == 0) return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define check_for_match(style,list,name) \
|
||||||
|
if (strcmp(list,#style) == 0) { \
|
||||||
|
std::map<std::string,std::string> &styles(pkg_lists-> style ## _styles); \
|
||||||
|
if (styles.find(name) != styles.end()) { \
|
||||||
|
return styles[name].c_str(); \
|
||||||
|
} \
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *LAMMPS::match_style(const char *style, const char *name)
|
||||||
|
{
|
||||||
|
check_for_match(angle,style,name);
|
||||||
|
check_for_match(atom,style,name);
|
||||||
|
check_for_match(body,style,name);
|
||||||
|
check_for_match(bond,style,name);
|
||||||
|
check_for_match(command,style,name);
|
||||||
|
check_for_match(compute,style,name);
|
||||||
|
check_for_match(dump,style,name);
|
||||||
|
check_for_match(fix,style,name);
|
||||||
|
check_for_match(compute,style,name);
|
||||||
|
check_for_match(improper,style,name);
|
||||||
|
check_for_match(integrate,style,name);
|
||||||
|
check_for_match(kspace,style,name);
|
||||||
|
check_for_match(minimize,style,name);
|
||||||
|
check_for_match(pair,style,name);
|
||||||
|
check_for_match(reader,style,name);
|
||||||
|
check_for_match(region,style,name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
help message for command line options and styles present in executable
|
help message for command line options and styles present in executable
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|||||||
@ -63,7 +63,9 @@ class LAMMPS {
|
|||||||
|
|
||||||
class CiteMe *citeme; // citation info
|
class CiteMe *citeme; // citation info
|
||||||
|
|
||||||
|
const char *match_style(const char *style, const char *name);
|
||||||
static const char * installed_packages[];
|
static const char * installed_packages[];
|
||||||
|
static bool is_installed_pkg(const char *pkg);
|
||||||
|
|
||||||
static const bool has_git_info;
|
static const bool has_git_info;
|
||||||
static const char git_commit[];
|
static const char git_commit[];
|
||||||
@ -79,6 +81,8 @@ class LAMMPS {
|
|||||||
void print_config(FILE *); // print compile time settings
|
void print_config(FILE *); // print compile time settings
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
struct package_styles_lists *pkg_lists;
|
||||||
|
void init_pkg_lists();
|
||||||
void help();
|
void help();
|
||||||
LAMMPS() {}; // prohibit using the default constructor
|
LAMMPS() {}; // prohibit using the default constructor
|
||||||
LAMMPS(const LAMMPS &) {}; // prohibit using the copy constructor
|
LAMMPS(const LAMMPS &) {}; // prohibit using the copy constructor
|
||||||
|
|||||||
@ -11,8 +11,10 @@
|
|||||||
See the README file in the top-level LAMMPS directory.
|
See the README file in the top-level LAMMPS directory.
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#include <mpi.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
#include "lammps.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
/*! \file utils.cpp */
|
/*! \file utils.cpp */
|
||||||
@ -123,6 +125,24 @@ void utils::sfgets(const char *srcname, int srcline, char *s, int size,
|
|||||||
|
|
||||||
/* ------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
|
std::string utils::check_packages_for_style(std::string style,
|
||||||
|
std::string name, LAMMPS *lmp)
|
||||||
|
{
|
||||||
|
std::string errmsg = "Unrecognized " + style + " style " + name;
|
||||||
|
const char *pkg = lmp->match_style(style.c_str(),name.c_str());
|
||||||
|
|
||||||
|
if (pkg) {
|
||||||
|
errmsg += " is part of the " + std::string(pkg) + " package";
|
||||||
|
if (lmp->is_installed_pkg(pkg))
|
||||||
|
errmsg += ", but seems to be missing because of a dependency";
|
||||||
|
else
|
||||||
|
errmsg += " which is not enabled in this LAMMPS binary.";
|
||||||
|
}
|
||||||
|
return errmsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------------ */
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
/* Typedef'd pointer to get abstract datatype. */
|
/* Typedef'd pointer to get abstract datatype. */
|
||||||
typedef struct regex_t *re_t;
|
typedef struct regex_t *re_t;
|
||||||
|
|||||||
10
src/utils.h
10
src/utils.h
@ -23,6 +23,7 @@ namespace LAMMPS_NS {
|
|||||||
|
|
||||||
// forward declarations
|
// forward declarations
|
||||||
class Error;
|
class Error;
|
||||||
|
class LAMMPS;
|
||||||
|
|
||||||
namespace utils {
|
namespace utils {
|
||||||
|
|
||||||
@ -66,6 +67,15 @@ namespace LAMMPS_NS {
|
|||||||
*/
|
*/
|
||||||
void sfgets(const char *srcname, int srcline, char *s, int size,
|
void sfgets(const char *srcname, int srcline, char *s, int size,
|
||||||
FILE *fp, const char *filename, Error *error);
|
FILE *fp, const char *filename, Error *error);
|
||||||
|
|
||||||
|
/** \brief Report if a requested style is in a package or may have a typo
|
||||||
|
*
|
||||||
|
* \param style type of style that is to be checked for
|
||||||
|
* \param name name of style that was not found
|
||||||
|
* \param lmp pointer to top-level LAMMPS class instance
|
||||||
|
* \return string usable for error messages
|
||||||
|
*/
|
||||||
|
std::string check_packages_for_style(std::string style, std::string name, LAMMPS *lmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user