Line data Source code
1 : # SPDX-FileCopyrightText: 2024 Pairinteraction Developers 2 : # SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : """Tests for atomic unit conversions using pint.""" 5 : 6 1 : import pytest 7 1 : from pint import UnitRegistry 8 : 9 1 : from tests.constants import ( 10 : GAUSS_IN_ATOMIC_UNITS, 11 : HARTREE_IN_GHZ, 12 : HARTREE_IN_INVERSE_CM, 13 : HARTREE_IN_JOULES, 14 : VOLT_PER_CM_IN_ATOMIC_UNITS, 15 : ) 16 : 17 : 18 1 : def test_hartree_to_joules(ureg: UnitRegistry) -> None: 19 : """Test conversion from Hartree to Joules.""" 20 1 : one_hartree = 1 * ureg.hartree 21 1 : one_hartree_in_joules = one_hartree.to("joule") 22 1 : assert pytest.approx(one_hartree_in_joules.magnitude, rel=1e-12) == HARTREE_IN_JOULES # NOSONAR 23 : 24 : 25 1 : def test_joules_to_hartree(ureg: UnitRegistry) -> None: 26 : """Test conversion from Joules to Hartree.""" 27 1 : one_hartree_in_joules = HARTREE_IN_JOULES * ureg.joule 28 1 : result = one_hartree_in_joules.to_base_units() 29 1 : assert pytest.approx(result.magnitude, rel=1e-12) == 1.0 # NOSONAR 30 : 31 : 32 1 : def test_hartree_to_thz(ureg: UnitRegistry) -> None: 33 : """Test conversion from Hartree to THz.""" 34 1 : one_hartree = 1 * ureg.hartree 35 1 : one_hartree_in_ghz = one_hartree.to("gigahertz", "spectroscopy") 36 1 : assert pytest.approx(one_hartree_in_ghz.magnitude, rel=1e-12) == HARTREE_IN_GHZ # NOSONAR 37 : 38 : 39 1 : def test_hartree_to_inverse_cm(ureg: UnitRegistry) -> None: 40 : """Test conversion from Hartree to inverse cm.""" 41 1 : one_hartree = 1 * ureg.hartree 42 1 : one_hartree_in_inverse_cm = one_hartree.to("1/cm", "spectroscopy") 43 1 : assert pytest.approx(one_hartree_in_inverse_cm.magnitude, rel=1e-12) == HARTREE_IN_INVERSE_CM # NOSONAR 44 : 45 : 46 1 : def test_electric_field_to_atomic_units(ureg: UnitRegistry) -> None: 47 : """Test conversion from V/cm to atomic units of electric field.""" 48 1 : one_v_per_cm = 1 * ureg.volt / ureg.centimeter 49 1 : one_v_per_cm_in_atomic_units = one_v_per_cm.to_base_units() 50 1 : assert pytest.approx(one_v_per_cm_in_atomic_units.magnitude, rel=1e-12) == VOLT_PER_CM_IN_ATOMIC_UNITS # NOSONAR 51 : 52 : 53 1 : def test_magnetic_field_to_atomic_units(ureg: UnitRegistry) -> None: 54 : """Test conversion from Gauss to atomic units of magnetic field.""" 55 1 : one_gauss = 1e-4 * ureg.tesla 56 1 : one_gauss_in_atomic_units = one_gauss.to_base_units() 57 1 : assert pytest.approx(one_gauss_in_atomic_units.magnitude, rel=1e-12) == GAUSS_IN_ATOMIC_UNITS # NOSONAR