Beispiel #1
0
def test_c2pk_cell_opt() -> None:
    """Test CP2K cell optimization calculations with the :class:`CP2K_MM` class."""
    mol = Molecule(PATH / 'cspbbr3_3d.xyz')

    s = Settings()
    s.specific.cp2k += cell_opt.specific.cp2k_mm.copy()
    s.specific.cp2k.motion.cell_opt.max_iter = 10
    s.specific.cp2k.motion.print['forces low'].filename = ''

    s.gmax = [22, 22, 22]
    s.cell_parameters = [25.452, 35.995, 24.452]
    s.charge = {
        'param': 'charge',
        'Cs': 0.2,
        'Pb': 0.4,
        'Br': -0.2,
    }
    s.lennard_jones = {
        'param': ('sigma', 'epsilon'),
        'unit': ('nm', 'kjmol'),
        'Cs Cs': (0.585, 1),
        'Cs Pb': (0.510, 1),
        'Br Se': (0.385, 1),
        'Pb Pb': (0.598, 1),
        'Br Pb': (0.290, 1),
        'Br Br': (0.426, 1),
    }

    job = cp2k_mm(settings=s, mol=mol, job_name='cp2k_mm_cell_opt')
    result = run(job, path=PATH)
    assertion.eq(result.status, 'successful')
Beispiel #2
0
def test_prm_to_df() -> None:
    """Tests for :func:`prm_to_df`."""
    s = Settings()
    s.lennard_jones = {
        'param': ('epsilon', 'sigma'),
        'unit': ('kcalmol', 'angstrom'),
        'Cs': (1, 1),
        'Cd': (2, 2),
        'O': (3, 3),
        'H': (4, 4)
    }

    ref = {
        'param': {
            'epsilon': 'epsilon',
            'sigma': 'sigma'
        },
        'unit': {
            'epsilon': 'kcalmol',
            'sigma': 'angstrom'
        },
        'Cs': {
            'epsilon': 1.0,
            'sigma': 1.0
        },
        'Cd': {
            'epsilon': 2.0,
            'sigma': 2.0
        },
        'O': {
            'epsilon': 3.0,
            'sigma': 3.0
        },
        'H': {
            'epsilon': 4.0,
            'sigma': 4.0
        }
    }
    prm_to_df(s)
    assertion.eq(s['lennard_jones'].to_dict(), ref)

    # The 'param' key is missing
    s2 = {'lennard-jones': {'Cs': (1, 2)}}
    assertion.assert_(prm_to_df, s2, exception=KeyError)
Beispiel #3
0
def test_c2pk_cell_opt_mock(mocker: MockFixture) -> None:
    """Mock a call to CP2K."""
    mol = Molecule(PATH / 'cspbbr3_3d.xyz')

    s = Settings()
    s.specific.cp2k += cell_opt.specific.cp2k_mm.copy()
    s.specific.cp2k.motion.cell_opt.max_iter = 10
    s.specific.cp2k.motion.print['forces low'].filename = ''

    s.gmax = [22, 22, 22]
    s.cell_parameters = [25.452, 35.995, 24.452]
    s.charge = {
        'param': 'charge',
        'Cs': 0.2,
        'Pb': 0.4,
        'Br': -0.2,
    }
    s.lennard_jones = {
        'param': ('sigma', 'epsilon'),
        'unit': ('nm', 'kjmol'),
        'Cs Cs': (0.585, 1),
        'Cs Pb': (0.510, 1),
        'Br Se': (0.385, 1),
        'Pb Pb': (0.598, 1),
        'Br Pb': (0.290, 1),
        'Br Br': (0.426, 1),
    }

    job = cp2k_mm(s, mol)
    run_mocked = mock_runner(mocker, settings=s, jobname="cp2k_mm_cell_opt")
    result = run_mocked(job)
    assertion.eq(result.status, 'successful')

    ref_volume = np.load(PATH / 'volume.npy')
    ref_coordinates = np.load(PATH / 'coordinates.npy')
    ref_forces = np.load(PATH / 'forces.npy')
    ref_lattice = np.load(PATH / 'lattice.npy')

    np.testing.assert_allclose(result.volume, ref_volume)
    np.testing.assert_allclose(result.coordinates, ref_coordinates)
    np.testing.assert_allclose(result.forces, ref_forces)
    np.testing.assert_allclose(result.lattice, ref_lattice)