diff --git a/dpgen2/conf/file_conf.py b/dpgen2/conf/file_conf.py index e8ae2443..cddca02d 100644 --- a/dpgen2/conf/file_conf.py +++ b/dpgen2/conf/file_conf.py @@ -79,6 +79,12 @@ def generate_mixed( assert "deepmd/npy/mixed" == self.fmt ms = dpdata.MultiSystems(type_map=type_map) ms.from_deepmd_npy_mixed(self.files[0], fmt="deepmd/npy/mixed", labeled=False) # type: ignore + if self.remove_pbc: + # Keep mixed-format configurations consistent with the standard + # file path: every reconstructed chemical system must receive the + # requested non-periodic cell transformation. + for system in ms.systems.values(): + system.remove_pbc() return ms @staticmethod diff --git a/tests/conf/test_file_conf.py b/tests/conf/test_file_conf.py index ec208522..2550e577 100644 --- a/tests/conf/test_file_conf.py +++ b/tests/conf/test_file_conf.py @@ -203,6 +203,22 @@ def test_deepmd_mixed(self): np.testing.assert_almost_equal(ms[1][tt], ms1[1][tt]) shutil.rmtree("test_mixed") + def test_deepmd_mixed_remove_pbc(self): + type_map = ["Cu", "Al", "Mg"] + ms = dpdata.MultiSystems(type_map=type_map) + ms.append(dpdata.System(Path(self.prefix) / "poscar.foo.0", fmt="vasp/poscar")) + ms.to("deepmd/npy/mixed", "test_mixed_remove_pbc") + self.addCleanup(shutil.rmtree, "test_mixed_remove_pbc", ignore_errors=True) + + loaded = FileConfGenerator( + "test_mixed_remove_pbc", + fmt="deepmd/npy/mixed", + remove_pbc=True, + ).generate(type_map) + + np.testing.assert_allclose(loaded[0]["cells"][0], np.eye(3) * 18.0) + np.testing.assert_allclose(loaded[0]["coords"][0, 0], np.full(3, 9.0)) + class TestFileConfGeneratorContent(unittest.TestCase): def test_list_1(self):