Source code for ase2sprkkr.asr.test.test_borncharges

import pytest
from pytest import approx
import numpy as np


[docs] @pytest.mark.ci def test_borncharges(asr_tmpdir_w_params, mockgpaw, mocker, test_material): from gpaw import GPAW from asr.borncharges import main natoms = len(test_material) # Number of electrons on each atom Z_a = np.array([-2 if ia % 2 else -2 for ia in range(natoms)]) positive_charge = 1 # This controls the positive charge of the ions def _get_setup_nvalence(self, element_number): return positive_charge # The dipole moment is used for non-periodic directions def _get_dipole_moment(self): return np.dot(Z_a + positive_charge, self.atoms.get_positions()) # This controls the electronic contribution to the berry phase def _get_berry_phases(self, dir=0, spin=0): phase_c = 2 * np.pi * np.dot(Z_a, self.spos_ac) / 2 # / 2 is for spin return [phase_c[dir]] mocker.patch.object(GPAW, '_get_setup_nvalence', new=_get_setup_nvalence) mocker.patch.object(GPAW, '_get_dipole_moment', new=_get_dipole_moment) mocker.patch.object(GPAW, '_get_berry_phases', new=_get_berry_phases) test_material.write('structure.json') results = main() Z_analytical_avv = np.array([(Z + positive_charge) * np.eye(3) for Z in Z_a]) Z_avv = np.array(results['Z_avv']) assert Z_analytical_avv == approx(Z_avv)