Exemplo n.º 1
0
 def convert_kpoints(kpoints):
     """Convert the k-points output from string to float."""
     if kpoints is None:
         return False, None
     kpoints_node = DataFactory('array.kpoints')()
     kpoints_node.set_kpoints([[float(x) for x in k.split()] for k in kpoints])
     return True, kpoints_node
Exemplo n.º 2
0
def vasp_kpoints(request, fresh_aiida_env):
    """Fixture: (kpoints object, resulting KPOINTS)."""
    from aiida.plugins import DataFactory
    if request.param == 'mesh':
        kpoints = DataFactory('array.kpoints')()
        kpoints.set_kpoints_mesh([2, 2, 2])
        ref_kpoints = _ref_kp_mesh()
    elif request.param == 'list':
        kpoints = DataFactory('array.kpoints')()
        kpoints.set_kpoints([[0., 0., 0.], [0., 0., .5]], weights=[1., 1.])
        ref_kpoints = _ref_kp_list()
    return kpoints, ref_kpoints
Exemplo n.º 3
0
def _parse_kpoints(hdf5_handle):
    type_tag = hdf5_handle['type_tag'].value
    kpoints = DataFactory('array.kpoints')()
    if 'kpoints_mesh' in type_tag:
        kpoints.set_kpoints_mesh(
            hdf5_handle['mesh'].value, hdf5_handle['offset'].value
        )
    elif 'kpoints_explicit' in type_tag:
        kpoints.set_kpoints(hdf5_handle['kpoints'].value)
    else:
        raise NotImplementedError(
            "Unrecognized type_tag '{}' encountered when parsing k-points data."
            .format(type_tag)
        )
    return kpoints
Exemplo n.º 4
0
def read_bands(*args, **kwargs):
    """
    Read a HDF5 in bands_inspect HDF5 format containing an EigenvalsData
    instance, and return an AiiDA BandsData instance. Positional and keyword
    arguments are passed to :class:`h5py.File`.
    """
    with h5py.File(*args, **kwargs) as f:
        kpoints = _parse_kpoints(f['kpoints_obj'])
        # BandsData cannot have a mesh as k-points...
        bands = DataFactory('array.bands')()
        if 'mesh' in kpoints.attributes:
            bands.set_kpoints(kpoints.get_kpoints_mesh(print_list=True))
        else:
            bands.set_kpointsdata(kpoints)
        bands.set_bands(f['eigenvals'].value)
    return bands
Exemplo n.º 5
0
def get_bands(qpoints, frequencies, labels, path_connections, label=None):
    qpoints_list = list(qpoints[0])
    frequencies_list = list(frequencies[0])
    labels_list = [
        (0, labels[0]),
    ]
    label_index = 1

    for pc, qs, fs in zip(path_connections[:-1], qpoints[1:], frequencies[1:]):
        if labels[label_index] == 'GAMMA' and pc:
            labels_list.append((len(qpoints_list) - 1, labels[label_index]))
            if label_index < len(labels):
                labels_list.append((len(qpoints_list), labels[label_index]))
            label_index += 1
            qpoints_list += list(qs)
            frequencies_list += list(fs)
        elif pc:
            labels_list.append((len(qpoints_list) - 1, labels[label_index]))
            label_index += 1
            qpoints_list += list(qs[1:])
            frequencies_list += list(fs[1:])
        else:
            labels_list.append((len(qpoints_list) - 1, labels[label_index]))
            label_index += 1
            if label_index < len(labels):
                labels_list.append((len(qpoints_list), labels[label_index]))
                label_index += 1
            qpoints_list += list(qs)
            frequencies_list += list(fs)
    labels_list.append((len(qpoints_list) - 1, labels[-1]))

    bs = DataFactory('array.bands')()
    bs.set_kpoints(np.array(qpoints_list))
    bs.set_bands(np.array(frequencies_list), units='THz')
    bs.labels = labels_list
    if label is not None:
        bs.label = label

    return bs