add 'atom type' test option to force style tests

This commit is contained in:
jrgissing
2023-02-11 16:11:35 -05:00
parent ddc23bb3bf
commit 7709dfa118
6 changed files with 50 additions and 0 deletions

View File

@ -70,6 +70,7 @@ public:
std::vector<coord_t> restart_pos; std::vector<coord_t> restart_pos;
std::vector<coord_t> run_vel; std::vector<coord_t> run_vel;
std::vector<coord_t> restart_vel; std::vector<coord_t> restart_vel;
std::vector<int> run_atom_types;
TestConfig() : TestConfig() :
lammps_version(""), date_generated(""), basename(""), epsilon(1.0e-14), input_file(""), lammps_version(""), date_generated(""), basename(""), epsilon(1.0e-14), input_file(""),
@ -94,6 +95,7 @@ public:
restart_pos.clear(); restart_pos.clear();
run_vel.clear(); run_vel.clear();
restart_vel.clear(); restart_vel.clear();
run_atom_types.clear();
global_vector.clear(); global_vector.clear();
} }
TestConfig(const TestConfig &) = delete; TestConfig(const TestConfig &) = delete;

View File

@ -48,6 +48,7 @@ TestConfigReader::TestConfigReader(TestConfig &config) : config(config)
consumers["run_forces"] = &TestConfigReader::run_forces; consumers["run_forces"] = &TestConfigReader::run_forces;
consumers["run_pos"] = &TestConfigReader::run_pos; consumers["run_pos"] = &TestConfigReader::run_pos;
consumers["run_vel"] = &TestConfigReader::run_vel; consumers["run_vel"] = &TestConfigReader::run_vel;
consumers["run_atom_types"] = &TestConfigReader::run_atom_types;
consumers["pair_style"] = &TestConfigReader::pair_style; consumers["pair_style"] = &TestConfigReader::pair_style;
consumers["pair_coeff"] = &TestConfigReader::pair_coeff; consumers["pair_coeff"] = &TestConfigReader::pair_coeff;
@ -228,6 +229,20 @@ void TestConfigReader::run_vel(const yaml_event_t &event)
} }
} }
void TestConfigReader::run_atom_types(const yaml_event_t &event)
{
config.run_atom_types.clear();
config.run_atom_types.resize(config.natoms + 1);
std::stringstream data((char *)event.data.scalar.value);
std::string line;
while (std::getline(data, line, '\n')) {
int tag, atom_type;
sscanf(line.c_str(), "%d %d", &tag, &atom_type);
config.run_atom_types[tag] = atom_type;
}
}
void TestConfigReader::pair_style(const yaml_event_t &event) void TestConfigReader::pair_style(const yaml_event_t &event)
{ {
config.pair_style = (char *)event.data.scalar.value; config.pair_style = (char *)event.data.scalar.value;

View File

@ -41,6 +41,7 @@ public:
void run_forces(const yaml_event_t &event); void run_forces(const yaml_event_t &event);
void run_pos(const yaml_event_t &event); void run_pos(const yaml_event_t &event);
void run_vel(const yaml_event_t &event); void run_vel(const yaml_event_t &event);
void run_atom_types(const yaml_event_t &event);
void pair_style(const yaml_event_t &event); void pair_style(const yaml_event_t &event);
void pair_coeff(const yaml_event_t &event); void pair_coeff(const yaml_event_t &event);
void bond_style(const yaml_event_t &event); void bond_style(const yaml_event_t &event);

View File

@ -284,6 +284,7 @@ TEST(FixTimestep, plain)
EXPECT_POSITIONS("run_pos (normal run, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (normal run, verlet)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (normal run, verlet)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (normal run, verlet)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (normal run, verlet)", lmp->atom, test_config.run_atom_types);
int ifix = lmp->modify->find_fix("test"); int ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -334,6 +335,7 @@ TEST(FixTimestep, plain)
EXPECT_POSITIONS("run_pos (restart, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (restart, verlet)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (restart, verlet)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (restart, verlet)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (restart, verlet)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -373,6 +375,7 @@ TEST(FixTimestep, plain)
EXPECT_POSITIONS("run_pos (rmass, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (rmass, verlet)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (rmass, verlet)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (rmass, verlet)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (rmass, verlet)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -426,6 +429,7 @@ TEST(FixTimestep, plain)
EXPECT_POSITIONS("run_pos (normal run, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (normal run, respa)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (normal run, respa)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (normal run, respa)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (normal run, respa)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -464,6 +468,7 @@ TEST(FixTimestep, plain)
EXPECT_POSITIONS("run_pos (restart, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (restart, respa)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (restart, respa)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (restart, respa)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (restart, respa)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -503,6 +508,7 @@ TEST(FixTimestep, plain)
EXPECT_POSITIONS("run_pos (rmass, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (rmass, respa)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (rmass, respa)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (rmass, respa)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (rmass, respa)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -584,6 +590,7 @@ TEST(FixTimestep, omp)
EXPECT_POSITIONS("run_pos (normal run, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (normal run, verlet)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (normal run, verlet)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (normal run, verlet)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (normal run, verlet)", lmp->atom, test_config.run_atom_types);
int ifix = lmp->modify->find_fix("test"); int ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -634,6 +641,7 @@ TEST(FixTimestep, omp)
EXPECT_POSITIONS("run_pos (restart, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (restart, verlet)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (restart, verlet)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (restart, verlet)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (restart, verlet)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -673,6 +681,7 @@ TEST(FixTimestep, omp)
EXPECT_POSITIONS("run_pos (rmass, verlet)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (rmass, verlet)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (rmass, verlet)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (rmass, verlet)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (rmass, verlet)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -725,6 +734,7 @@ TEST(FixTimestep, omp)
EXPECT_POSITIONS("run_pos (normal run, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (normal run, respa)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (normal run, respa)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (normal run, respa)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (normal run, respa)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -763,6 +773,7 @@ TEST(FixTimestep, omp)
EXPECT_POSITIONS("run_pos (restart, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (restart, respa)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (restart, respa)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (restart, respa)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (restart, respa)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {
@ -802,6 +813,7 @@ TEST(FixTimestep, omp)
EXPECT_POSITIONS("run_pos (rmass, respa)", lmp->atom, test_config.run_pos, epsilon); EXPECT_POSITIONS("run_pos (rmass, respa)", lmp->atom, test_config.run_pos, epsilon);
EXPECT_VELOCITIES("run_vel (rmass, respa)", lmp->atom, test_config.run_vel, epsilon); EXPECT_VELOCITIES("run_vel (rmass, respa)", lmp->atom, test_config.run_vel, epsilon);
EXPECT_ATOM_TYPES("run_atom_types (rmass, respa)", lmp->atom, test_config.run_atom_types);
ifix = lmp->modify->find_fix("test"); ifix = lmp->modify->find_fix("test");
if (ifix < 0) { if (ifix < 0) {

View File

@ -70,6 +70,7 @@ void EXPECT_FORCES(const std::string &name, Atom *atom, const std::vector<coord_
void EXPECT_POSITIONS(const std::string &name, Atom *atom, const std::vector<coord_t> &x_ref, void EXPECT_POSITIONS(const std::string &name, Atom *atom, const std::vector<coord_t> &x_ref,
double epsilon) double epsilon)
{ {
if (x_ref.empty()) return;
SCOPED_TRACE("EXPECT_POSITIONS: " + name); SCOPED_TRACE("EXPECT_POSITIONS: " + name);
double **x = atom->x; double **x = atom->x;
tagint *tag = atom->tag; tagint *tag = atom->tag;
@ -87,6 +88,7 @@ void EXPECT_POSITIONS(const std::string &name, Atom *atom, const std::vector<coo
void EXPECT_VELOCITIES(const std::string &name, Atom *atom, const std::vector<coord_t> &v_ref, void EXPECT_VELOCITIES(const std::string &name, Atom *atom, const std::vector<coord_t> &v_ref,
double epsilon) double epsilon)
{ {
if (v_ref.empty()) return;
SCOPED_TRACE("EXPECT_VELOCITIES: " + name); SCOPED_TRACE("EXPECT_VELOCITIES: " + name);
double **v = atom->v; double **v = atom->v;
tagint *tag = atom->tag; tagint *tag = atom->tag;
@ -101,6 +103,23 @@ void EXPECT_VELOCITIES(const std::string &name, Atom *atom, const std::vector<co
if (print_stats) std::cerr << name << " stats" << stats << std::endl; if (print_stats) std::cerr << name << " stats" << stats << std::endl;
} }
void EXPECT_ATOM_TYPES(const std::string &name, Atom *atom, const std::vector<int> &at_ref)
{
if (at_ref.empty()) return;
SCOPED_TRACE("EXPECT_ATOM_TYPES: " + name);
int *type = atom->type;
tagint *tag = atom->tag;
const int nlocal = atom->nlocal;
ASSERT_EQ(nlocal + 1, at_ref.size());
ErrorStats stats;
for (int i = 0; i < nlocal; ++i) {
EXPECT_EQ(type[i], at_ref[tag[i]]);
EXPECT_EQ(type[i], at_ref[tag[i]]);
EXPECT_EQ(type[i], at_ref[tag[i]]);
}
if (print_stats) std::cerr << name << " stats" << stats << std::endl;
}
// common read_yaml_file function // common read_yaml_file function
bool read_yaml_file(const char *infile, TestConfig &config) bool read_yaml_file(const char *infile, TestConfig &config)
{ {

View File

@ -41,5 +41,6 @@ void EXPECT_STRESS(const std::string & name, double * stress, const stress_t & e
void EXPECT_FORCES(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<coord_t> & f_ref, double epsilon); void EXPECT_FORCES(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<coord_t> & f_ref, double epsilon);
void EXPECT_POSITIONS(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<coord_t> & x_ref, double epsilon); void EXPECT_POSITIONS(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<coord_t> & x_ref, double epsilon);
void EXPECT_VELOCITIES(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<coord_t> & v_ref, double epsilon); void EXPECT_VELOCITIES(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<coord_t> & v_ref, double epsilon);
void EXPECT_ATOM_TYPES(const std::string & name, LAMMPS_NS::Atom * atom, const std::vector<int> & at_ref);
#endif #endif