Source code for ase2sprkkr.asr.test.acceptance.test_piezoelectrictensor

import numpy as np
import pytest


[docs] @pytest.mark.acceptance_test def test_piezo_BN(asr_tmpdir_w_params): from .materials import BN from asr.piezoelectrictensor import main from asr.setup.params import main as setupparams formal_calculator = { 'name': 'gpaw', 'mode': {'name': 'pw', 'ecut': 300}, 'xc': 'PBE', 'basis': 'dzp', 'kpts': {'density': 2.0}, 'occupations': {'name': 'fermi-dirac', 'width': 0.05}, 'txt': 'formalpol.txt', 'charge': 0 } setupparams(params={'asr.formalpolarization': {'calculator': formal_calculator}}) BN.write('structure.json') results = main() full_response = 0.12 # From a default parameter calculation of BN clamped_response = 0.044 # From a default parameter calculation of BN for eps, response in [('eps_vvv', full_response), ('eps_clamped_vvv', clamped_response)]: eps_calculated_vvv = results[eps] eps_converged_vvv = np.array([[[0.0, response, 0.0], [response, 0.0, 0.0], [0.0, 0.0, 0.0]], [[response, 0.0, 0.0], [0.0, -response, 0.0], [0.0, 0.0, 0.0]], [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]]) assert eps_calculated_vvv == pytest.approx(eps_converged_vvv, rel=0.05)