make neighbor list settings, status, and bond/angle/dihedral/improper lists available to library interface
This commit is contained in:
@ -1255,6 +1255,7 @@ be called without a valid LAMMPS object handle (it is ignored).
|
||||
* :ref:`Image masks <extract_image_masks>`
|
||||
* :ref:`System status <extract_system_status>`
|
||||
* :ref:`System sizes <extract_system_sizes>`
|
||||
* :ref:`Neigbor list settings <extract_neighbor_settings>`
|
||||
* :ref:`Atom style flags <extract_atom_flags>`
|
||||
|
||||
.. _extract_integer_sizes:
|
||||
@ -1395,6 +1396,31 @@ internally by the :doc:`Fortran interface <Fortran>` and are not likely to be us
|
||||
* - nbodies
|
||||
- number of atoms that have body data (see :doc:`the Body particle HowTo <Howto_body>`)
|
||||
|
||||
.. _extract_neighbor_settings:
|
||||
|
||||
**Neigbor list settings**
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 17 83
|
||||
|
||||
* - neigh_every
|
||||
- neighbor lists are rebuild every this many steps
|
||||
* - neigh_delay
|
||||
- neighbor lists are rebuild delayed this many steps
|
||||
* - neigh_dist_check
|
||||
- 0 if always rebuild, 1 rebuild after 1/2 skin
|
||||
* - neigh_ago
|
||||
- neighbor lists were rebuilt this many steps ago
|
||||
* - nbondlist
|
||||
- number of entries in bondlist (get list with :ref:`lammps_extract_global() <extract_neighbor_lists>`)
|
||||
* - nanglelist
|
||||
- number of entries in anglelist (get list with :ref:`lammps_extract_global() <extract_neighbor_lists>`)
|
||||
* - ndihedrallist
|
||||
- number of entries in dihedrallist (get list with :ref:`lammps_extract_global() <extract_neighbor_lists>`)
|
||||
* - nimproperlist
|
||||
- number of entries in improperlist (get list with :ref:`lammps_extract_global() <extract_neighbor_lists>`)
|
||||
|
||||
.. _extract_atom_flags:
|
||||
|
||||
**Atom style flags**
|
||||
@ -1484,6 +1510,15 @@ int lammps_extract_setting(void *handle, const char *keyword)
|
||||
if (strcmp(keyword,"ntris") == 0) return lmp->atom->ntris;
|
||||
if (strcmp(keyword,"nbodies") == 0) return lmp->atom->nbodies;
|
||||
|
||||
if (strcmp(keyword,"neigh_every") == 0) return lmp->neighbor->every;
|
||||
if (strcmp(keyword,"neigh_delay") == 0) return lmp->neighbor->delay;
|
||||
if (strcmp(keyword,"neigh_dist_check") == 0) return lmp->neighbor->dist_check;
|
||||
if (strcmp(keyword,"neigh_ago") == 0) return lmp->neighbor->ago;
|
||||
if (strcmp(keyword,"nbondlist") == 0) return lmp->neighbor->nbondlist;
|
||||
if (strcmp(keyword,"nanglelist") == 0) return lmp->neighbor->nanglelist;
|
||||
if (strcmp(keyword,"ndihedrallist") == 0) return lmp->neighbor->ndihedrallist;
|
||||
if (strcmp(keyword,"nimproperlist") == 0) return lmp->neighbor->nimproperlist;
|
||||
|
||||
if (strcmp(keyword,"molecule_flag") == 0) return lmp->atom->molecule_flag;
|
||||
if (strcmp(keyword,"q_flag") == 0) return lmp->atom->q_flag;
|
||||
if (strcmp(keyword,"mu_flag") == 0) return lmp->atom->mu_flag;
|
||||
@ -1567,6 +1602,11 @@ int lammps_extract_global_datatype(void * /*handle*/, const char *name)
|
||||
if (strcmp(name,"special_lj") == 0) return LAMMPS_DOUBLE;
|
||||
if (strcmp(name,"special_coul") == 0) return LAMMPS_DOUBLE;
|
||||
|
||||
if (strcmp(name,"neigh_bondlist") == 0) return LAMMPS_INT_2D;
|
||||
if (strcmp(name,"neigh_anglelist") == 0) return LAMMPS_INT_2D;
|
||||
if (strcmp(name,"neigh_dihedrallist") == 0) return LAMMPS_INT_2D;
|
||||
if (strcmp(name,"neigh_improperlist") == 0) return LAMMPS_INT_2D;
|
||||
|
||||
if (strcmp(name,"map_style") == 0) return LAMMPS_INT;
|
||||
#if defined(LAMMPS_BIGBIG)
|
||||
if (strcmp(name,"map_tag_max") == 0) return LAMMPS_BIGINT;
|
||||
@ -1651,6 +1691,7 @@ report the "native" data type. The following tables are provided:
|
||||
* :ref:`Timestep settings <extract_timestep_settings>`
|
||||
* :ref:`Simulation box settings <extract_box_settings>`
|
||||
* :ref:`System property settings <extract_system_settings>`
|
||||
* :ref:`Neighbor topology data <extract_neighbor_lists>`
|
||||
* :ref:`Git revision and version settings <extract_git_settings>`
|
||||
* :ref:`Unit settings <extract_unit_settings>`
|
||||
|
||||
@ -1897,6 +1938,37 @@ report the "native" data type. The following tables are provided:
|
||||
- 1
|
||||
- string with the current KSpace style.
|
||||
|
||||
.. _extract_neighbor_lists:
|
||||
|
||||
**Neighbor topology data**
|
||||
|
||||
Get length of lists with :ref:`lammps_extract_setting() <extract_neighbor_settings>`.
|
||||
|
||||
.. list-table::
|
||||
:header-rows: 1
|
||||
:widths: 20 12 16 52
|
||||
|
||||
* - Name
|
||||
- Type
|
||||
- Length
|
||||
- Description
|
||||
* - neigh_bondlist
|
||||
- 2d int
|
||||
- nbondlist
|
||||
- list of bonds (atom1, atom2, type)
|
||||
* - neigh_anglelist
|
||||
- 2d int
|
||||
- nanglelist
|
||||
- list of angles (atom1, atom2, atom3, type)
|
||||
* - neigh_dihedrallist
|
||||
- 2d int
|
||||
- ndihedrallist
|
||||
- list of dihedrals (atom1, atom2, atom3, atom4, type)
|
||||
* - neigh_improperlist
|
||||
- 2d int
|
||||
- nimproperlist
|
||||
- list of impropers (atom1, atom2, atom3, atom4, type)
|
||||
|
||||
.. _extract_git_settings:
|
||||
|
||||
**Git revision and version settings**
|
||||
@ -2107,6 +2179,11 @@ void *lammps_extract_global(void *handle, const char *name)
|
||||
|
||||
if (strcmp(name,"q_flag") == 0) return (void *) &lmp->atom->q_flag;
|
||||
|
||||
if (strcmp(name,"neigh_bondlist") == 0) return lmp->neighbor->bondlist;
|
||||
if (strcmp(name,"neigh_anglelist") == 0) return lmp->neighbor->anglelist;
|
||||
if (strcmp(name,"neigh_dihedrallist") == 0) return lmp->neighbor->dihedrallist;
|
||||
if (strcmp(name,"neigh_improperlist") == 0) return lmp->neighbor->improperlist;
|
||||
|
||||
if (strcmp(name,"map_style") == 0) return (void *) &lmp->atom->map_style;
|
||||
if (strcmp(name,"map_tag_max") == 0) return (void *) &lmp->atom->map_tag_max;
|
||||
if (strcmp(name,"sametag") == 0) return (void *) lmp->atom->sametag;
|
||||
|
||||
@ -188,8 +188,8 @@ pairclass(nullptr), pairnames(nullptr), pairmasks(nullptr)
|
||||
|
||||
// topology lists
|
||||
|
||||
nbondlist = nanglelist = ndihedrallist = nimproperlist = 0;
|
||||
bondwhich = anglewhich = dihedralwhich = improperwhich = NONE;
|
||||
|
||||
neigh_bond = nullptr;
|
||||
neigh_angle = nullptr;
|
||||
neigh_dihedral = nullptr;
|
||||
|
||||
@ -303,6 +303,15 @@ TEST_F(LibraryProperties, setting)
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "ndihedraltypes"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nimpropertypes"), 0);
|
||||
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_every"), 1);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_delay"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_dist_check"), 1);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_ago"), -1);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nbondlist"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nanglelist"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "ndihedrallist"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nimproperlist"), 0);
|
||||
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "molecule_flag"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "q_flag"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "mu_flag"), 0);
|
||||
@ -313,7 +322,7 @@ TEST_F(LibraryProperties, setting)
|
||||
std::string input = path_join(INPUT_DIR, "in.fourmol");
|
||||
if (!verbose) ::testing::internal::CaptureStdout();
|
||||
lammps_file(lmp, input.c_str());
|
||||
lammps_command(lmp, "run 2 post no");
|
||||
lammps_command(lmp, "run 3 post no");
|
||||
if (!verbose) ::testing::internal::GetCapturedStdout();
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "triclinic"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "box_exist"), 1);
|
||||
@ -328,6 +337,15 @@ TEST_F(LibraryProperties, setting)
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "ndihedraltypes"), 5);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nimpropertypes"), 2);
|
||||
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_every"), 2);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_delay"), 2);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_dist_check"), 0);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "neigh_ago"), 1);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nbondlist"), 24);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nanglelist"), 30);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "ndihedrallist"), 31);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "nimproperlist"), 2);
|
||||
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "molecule_flag"), 1);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "q_flag"), 1);
|
||||
EXPECT_EQ(lammps_extract_setting(lmp, "mu_flag"), 0);
|
||||
@ -584,17 +602,36 @@ TEST_F(LibraryProperties, neighlist)
|
||||
EXPECT_DOUBLE_EQ(minval, 1.0);
|
||||
EXPECT_DOUBLE_EQ(maxval, 2.1);
|
||||
|
||||
char errbuf[128];
|
||||
lammps_set_show_error(lmp, 0);
|
||||
const int nlocal = lammps_extract_setting(lmp, "nlocal");
|
||||
EXPECT_EQ(nlocal, numatoms);
|
||||
EXPECT_NE(lammps_find_pair_neighlist(lmp, "sw", 1, 0, 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_NE(lammps_find_pair_neighlist(lmp, "morse", 1, 0, 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_NE(lammps_find_pair_neighlist(lmp, "lj/cut", 1, 1, 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_NE(lammps_find_pair_neighlist(lmp, "lj/cut", 1, 2, 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_EQ(lammps_find_pair_neighlist(lmp, "lj/cut", 1, 0, 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 1);
|
||||
EXPECT_EQ(lammps_get_last_error_message(lmp, errbuf, 128), 1);
|
||||
errbuf[69] = '\0';
|
||||
EXPECT_THAT(std::string(errbuf),
|
||||
StrEq("ERROR: lammps_find_pair_neighlist(): Pair style lj/cut does not exist"));
|
||||
EXPECT_EQ(lammps_find_pair_neighlist(lmp, "hybrid/overlay", 1, 0, 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_NE(lammps_find_compute_neighlist(lmp, "dist", 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_EQ(lammps_find_fix_neighlist(lmp, "dist", 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 0);
|
||||
EXPECT_EQ(lammps_find_compute_neighlist(lmp, "xxx", 0), -1);
|
||||
EXPECT_EQ(lammps_has_error(lmp), 1);
|
||||
EXPECT_EQ(lammps_get_last_error_message(lmp, errbuf, 128), 1);
|
||||
errbuf[66] = '\0';
|
||||
EXPECT_THAT(std::string(errbuf),
|
||||
StrEq("ERROR: lammps_find_compute_neighlist(): Compute xxx does not exist"));
|
||||
|
||||
// full neighbor list for 4 type 1 atoms
|
||||
// all have 3 type 1 atom neighbors
|
||||
|
||||
Reference in New Issue
Block a user