def get_kpointsdata_ncf(self, name=None, index=None, only_used=False): """ This routine returns an AiiDA :class:`~aiida.orm.KpointsData` type produced from the ``inp.xml`` file. This only works if the kpoints are listed in the in inpxml. This is NOT a calcfunction and does not keep the provenance! :param name: str, optional, if given only the kpoint set with the given name is returned :param index: int, optional, if given only the kpoint set with the given index is returned :returns: :class:`~aiida.orm.KpointsData` node """ from aiida.orm import KpointsData from masci_tools.util.xml.xml_getters import get_kpoints_data # HINT, TODO:? in this routine, the 'cell' you might get in an other way # exp: StructureData.cell, but for this you have to make a structureData Node, # which might take more time for structures with lots of atoms. # then just parsing the cell from the inp.xml # as in the routine get_structureData xmltree, schema_dict = self.load_inpxml() if name is None and index is None: kpoints, weights, cell, pbc = get_kpoints_data(xmltree, schema_dict, only_used=only_used) else: kpoints, weights, cell, pbc = get_kpoints_data(xmltree, schema_dict, name=name, index=index, only_used=only_used) if isinstance(kpoints, dict): kpoints_data = {} for (label, kpoints_set), weights_set in zip(kpoints.items(), weights.values()): kps = KpointsData() kps.set_cell(cell) kps.pbc = pbc kps.set_kpoints(kpoints_set, cartesian=False, weights=weights_set) #kpoints_data.add_link_from(self, label='fleurinp.kpts', link_type=LinkType.CREATE) kps.label = 'fleurinp.kpts' kpoints_data[label] = kps else: kpoints_data = KpointsData() kpoints_data.set_cell(cell) kpoints_data.pbc = pbc kpoints_data.set_kpoints(kpoints, cartesian=False, weights=weights) #kpoints_data.add_link_from(self, label='fleurinp.kpts', link_type=LinkType.CREATE) kpoints_data.label = 'fleurinp.kpts' return kpoints_data
def test_kpoints_max4(load_inpxml, data_regression): from masci_tools.util.xml.xml_getters import get_kpoints_data from masci_tools.io.common_functions import convert_to_pystd xmltree, schema_dict = load_inpxml(TEST_MAX4_INPXML_PATH) kpoints, weights, cell, pbc = get_kpoints_data(xmltree, schema_dict) data_regression.check({ 'kpoints': kpoints, 'weights': weights, 'cell': convert_to_pystd(cell), 'pbc': pbc })
def test_kpoints_multiple_sets_selection_index(load_inpxml, data_regression): from masci_tools.util.xml.xml_getters import get_kpoints_data from masci_tools.io.common_functions import convert_to_pystd xmltree, schema_dict = load_inpxml(TEST_MULTIPLE_KPOINT_SETS_PATH) kpoints, weights, cell, pbc = get_kpoints_data(xmltree, schema_dict, index=0) data_regression.check({ 'kpoints': kpoints, 'weights': weights, 'cell': convert_to_pystd(cell), 'pbc': pbc })
def test_get_kpoints_data(load_inpxml, inpxmlfilepath): """ Test that get_cell works for all input files """ from masci_tools.util.xml.xml_getters import get_kpoints_data import numpy as np xmltree, schema_dict = load_inpxml(inpxmlfilepath) kpoints, weights, cell, pbc = get_kpoints_data(xmltree, schema_dict) assert kpoints is not None assert weights is not None assert isinstance(cell, np.ndarray) assert cell.shape == (3, 3) assert isinstance(pbc, list) assert len(pbc) == 3