make Force::special_lj and Force::special_coul accessible through the library interface
This commit is contained in:
@ -814,7 +814,8 @@ class lammps(object):
|
||||
|
||||
# set length of vector for items that are not a scalar
|
||||
vec_dict = { 'boxlo':3, 'boxhi':3, 'sublo':3, 'subhi':3,
|
||||
'sublo_lambda':3, 'subhi_lambda':3, 'periodicity':3 }
|
||||
'sublo_lambda':3, 'subhi_lambda':3, 'periodicity':3,
|
||||
'special_lj':4, 'special_coul':4 }
|
||||
if name in vec_dict:
|
||||
veclen = vec_dict[name]
|
||||
elif name == 'respa_dt':
|
||||
|
||||
@ -1232,6 +1232,8 @@ int lammps_extract_global_datatype(void * /*handle*/, const char *name)
|
||||
if (strcmp(name,"nghost") == 0) return LAMMPS_INT;
|
||||
if (strcmp(name,"nmax") == 0) return LAMMPS_INT;
|
||||
if (strcmp(name,"ntypes") == 0) return LAMMPS_INT;
|
||||
if (strcmp(name,"special_lj") == 0) return LAMMPS_DOUBLE;
|
||||
if (strcmp(name,"special_coul") == 0) return LAMMPS_DOUBLE;
|
||||
|
||||
if (strcmp(name,"q_flag") == 0) return LAMMPS_INT;
|
||||
|
||||
@ -1470,6 +1472,14 @@ report the "native" data type. The following tables are provided:
|
||||
- int
|
||||
- 1
|
||||
- maximum of nlocal+nghost across all MPI ranks (for per-atom data array size).
|
||||
* - special_lj
|
||||
- double
|
||||
- 4
|
||||
- special :doc:`pair weighting factors <special_bonds>` for LJ interactions (first element is always 1.0)
|
||||
* - special_coul
|
||||
- double
|
||||
- 4
|
||||
- special :doc:`pair weighting factors <special_bonds>` for Coulomb interactions (first element is always 1.0)
|
||||
* - q_flag
|
||||
- int
|
||||
- 1
|
||||
@ -1625,6 +1635,8 @@ void *lammps_extract_global(void *handle, const char *name)
|
||||
if (strcmp(name,"nlocal") == 0) return (void *) &lmp->atom->nlocal;
|
||||
if (strcmp(name,"nghost") == 0) return (void *) &lmp->atom->nghost;
|
||||
if (strcmp(name,"nmax") == 0) return (void *) &lmp->atom->nmax;
|
||||
if (strcmp(name,"special_lj") == 0) return (void *) lmp->force->special_lj;
|
||||
if (strcmp(name,"special_coul") == 0) return (void *) lmp->force->special_coul;
|
||||
|
||||
if (strcmp(name,"q_flag") == 0) return (void *) &lmp->atom->q_flag;
|
||||
|
||||
|
||||
@ -297,6 +297,7 @@ TEST_F(LibraryProperties, global)
|
||||
|
||||
std::string input = path_join(INPUT_DIR, "in.fourmol");
|
||||
if (!verbose) ::testing::internal::CaptureStdout();
|
||||
lammps_command(lmp, "special_bonds lj 0.0 0.5 0.8 coul 0.1 0.5 1.0");
|
||||
lammps_file(lmp, input.c_str());
|
||||
lammps_command(lmp, "run 2 post no");
|
||||
if (!verbose) ::testing::internal::GetCapturedStdout();
|
||||
@ -321,6 +322,26 @@ TEST_F(LibraryProperties, global)
|
||||
EXPECT_EQ(lammps_extract_global_datatype(lmp, "dt"), LAMMPS_DOUBLE);
|
||||
double *d_ptr = (double *)lammps_extract_global(lmp, "dt");
|
||||
EXPECT_DOUBLE_EQ((*d_ptr), 0.1);
|
||||
|
||||
EXPECT_EQ(lammps_extract_global_datatype(lmp, "special_lj"), LAMMPS_DOUBLE);
|
||||
EXPECT_EQ(lammps_extract_global_datatype(lmp, "special_coul"), LAMMPS_DOUBLE);
|
||||
double *special_lj = (double *)lammps_extract_global(lmp, "special_lj");
|
||||
double *special_coul= (double *)lammps_extract_global(lmp, "special_coul");
|
||||
EXPECT_DOUBLE_EQ(special_lj[0], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_lj[1], 0.0);
|
||||
EXPECT_DOUBLE_EQ(special_lj[2], 0.5);
|
||||
EXPECT_DOUBLE_EQ(special_lj[3], 0.8);
|
||||
EXPECT_DOUBLE_EQ(special_coul[0], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_coul[1], 0.1);
|
||||
EXPECT_DOUBLE_EQ(special_coul[2], 0.5);
|
||||
EXPECT_DOUBLE_EQ(special_coul[3], 1.0);
|
||||
lammps_command(lmp, "special_bonds lj/coul 1.0 1.0 1.0");
|
||||
EXPECT_DOUBLE_EQ(special_lj[1], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_lj[2], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_lj[3], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_coul[1], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_coul[2], 1.0);
|
||||
EXPECT_DOUBLE_EQ(special_coul[3], 1.0);
|
||||
};
|
||||
|
||||
TEST_F(LibraryProperties, neighlist)
|
||||
|
||||
@ -536,6 +536,7 @@ create_atoms 1 single &
|
||||
def test_extract_global(self):
|
||||
self.lmp.command("region box block -1 1 -2 2 -3 3")
|
||||
self.lmp.command("create_box 1 box")
|
||||
self.lmp.command("special_bonds lj 0.0 0.5 0.8 coul 0.1 0.5 1.0")
|
||||
self.assertEqual(self.lmp.extract_global("units"), "lj")
|
||||
self.assertEqual(self.lmp.extract_global("ntimestep"), 0)
|
||||
self.assertEqual(self.lmp.extract_global("dt"), 0.005)
|
||||
@ -552,10 +553,15 @@ create_atoms 1 single &
|
||||
self.assertEqual(self.lmp.extract_global("subhi"), [1.0, 2.0, 3.0])
|
||||
self.assertEqual(self.lmp.extract_global("periodicity"), [1,1,1])
|
||||
self.assertEqual(self.lmp.extract_global("triclinic"), 0)
|
||||
self.assertEqual(self.lmp.extract_global("special_lj"), [1.0, 0.0, 0.5, 0.8])
|
||||
self.assertEqual(self.lmp.extract_global("special_coul"), [1.0, 0.1, 0.5, 1.0])
|
||||
self.assertEqual(self.lmp.extract_global("sublo_lambda"), None)
|
||||
self.assertEqual(self.lmp.extract_global("subhi_lambda"), None)
|
||||
self.assertEqual(self.lmp.extract_global("respa_levels"), None)
|
||||
self.assertEqual(self.lmp.extract_global("respa_dt"), None)
|
||||
self.lmp.command("special_bonds lj/coul 0.0 1.0 1.0")
|
||||
self.assertEqual(self.lmp.extract_global("special_lj"), [1.0, 0.0, 1.0, 1.0])
|
||||
self.assertEqual(self.lmp.extract_global("special_coul"), [1.0, 0.0, 1.0, 1.0])
|
||||
|
||||
# set and initialize r-RESPA
|
||||
self.lmp.command("run_style respa 3 5 2 pair 2 kspace 3")
|
||||
|
||||
Reference in New Issue
Block a user