Source code for ase2sprkkr.asr.test.test_stiffness

import pytest
from pytest import approx
import numpy as np


[docs] @pytest.mark.ci def test_stiffness_gpaw(asr_tmpdir_w_params, mockgpaw, mocker, test_material, get_webcontent): from pathlib import Path from ase.io import read from asr.relax import main as relax from asr.setup.strains import main as setup_strains from asr.stiffness import main as stiffness from asr.setup.strains import (get_strained_folder_name, get_relevant_strains) test_material.write('structure.json') strain_percent = 1 setup_strains(strain_percent=strain_percent) ij = get_relevant_strains(test_material.pbc) for i, j in ij: for sign in [+1, -1]: name = get_strained_folder_name(strain_percent * sign, i, j) folder = Path(name) assert folder.is_dir() # run relaxation in each subfloder with gpaw calculator from asr.core import chdir with chdir(folder): import os assert os.path.isfile('unrelaxed.json') assert os.path.isfile('results-asr.setup.params.json') unrelaxed = read('unrelaxed.json') relax(unrelaxed, calculator={"name": "gpaw", "kpts": {"density": 2, "gamma": True}}) assert os.path.isfile('results-asr.relax.json') assert os.path.isfile('structure.json') results = stiffness() nd = np.sum(test_material.pbc) # check that all keys are in results-asr.stiffness.json: keys = ['stiffness_tensor', 'eigenvalues'] if nd == 2: keys.extend(['speed_of_sound_x', 'speed_of_sound_y', 'c_11', 'c_22', 'c_33', 'c_23', 'c_13', 'c_12']) for key in keys: assert key in results if nd == 1: stiffness_tensor = 0. eigenvalues = 0. elif nd == 2: stiffness_tensor = np.zeros((3, 3)) eigenvalues = np.zeros(3) else: stiffness_tensor = np.zeros((6, 6)) eigenvalues = np.zeros(6) assert results['stiffness_tensor'] == approx(stiffness_tensor) assert results['eigenvalues'] == approx(eigenvalues) content = get_webcontent() assert 'Dynamical(stiffness)' in content, content
[docs] @pytest.mark.ci # @pytest.mark.parametrize('name', ['Al', 'Cu', 'Ag', 'Au', 'Ni', # 'Pd', 'Pt', 'C']) @pytest.mark.parametrize('name', ['Al']) def test_stiffness_emt(asr_tmpdir_w_params, name, get_webcontent): from pathlib import Path from ase.build import bulk from asr.relax import main as relax from asr.setup.strains import main as setup_strains from asr.setup.params import main as setup_params from asr.stiffness import main as stiffness from asr.setup.strains import (get_strained_folder_name, get_relevant_strains) structure = bulk(name) structure.write('structure.json') strain_percent = 1 setup_strains(strain_percent=1) ij = get_relevant_strains(structure.pbc) for i, j in ij: for sign in [+1, -1]: name = get_strained_folder_name(strain_percent * sign, i, j) folder = Path(name) assert folder.is_dir() # run relaxation in each subfloder with EMT calculator from asr.core import chdir with chdir(folder): import os assert os.path.isfile('unrelaxed.json') assert os.path.isfile('results-asr.setup.params.json') params = { 'asr.relax': {'calculator': {'name': 'emt'}} } setup_params(params=params) relax.cli([]) assert os.path.isfile('results-asr.relax.json') assert os.path.isfile('structure.json') results = stiffness() # check that stiffness_tensor is symmetric stiffness_tensor = results['stiffness_tensor'] assert stiffness_tensor == approx(stiffness_tensor.T, abs=1) content = get_webcontent() assert 'Dynamical(stiffness)' in content, content