コード例 #1
0
ファイル: vasp.py プロジェクト: chrisjsewell/aiida-vasp
    def _get_parameters(self):
        """Create ParameterData holding output parsed from OUTCAR and vasprun.xml."""

        output = DataFactory('parameter')()
        if not self._parsers['OUTCAR'] and not self._parsers['vasprun.xml']:
            return {'parameters': None}

        if self._parsers['OUTCAR']:
            output.update_dict(self._parsers['OUTCAR'].output_dict)

        if self._parsers['vasprun.xml']:
            output.update_dict({'efermi': self._parsers['vasprun.xml'].efermi})

        return {'parameters': output}
コード例 #2
0
ファイル: win.py プロジェクト: quanshengwu/aiida-vasp
def modify_wannier_settings_inline(original, modifications):
    '''InlineCalculation for modifying wannier settings ('.win' file).
    :key ParameterData original: base settings, can be overridden.
    :key ParameterData modifications: additional settings and overrides.
    if original comes from a VASP2WANNIER setup and num_wann is overriden,
    num_bands will automatically be set accordingly.
    No consistency checks are performed.'''
    result = DataFactory('parameter')()
    orig_dict = original.get_dict()
    mod_dict = modifications.get_dict()

    set_num_bands = not bool(orig_dict.get('num_bands'))
    set_num_bands &= bool(mod_dict.get('num_wann'))
    set_num_bands &= bool(orig_dict.get('num_wann'))
    if set_num_bands:
        orig_dict['num_bands'] = orig_dict['num_wann']

    result.set_dict(orig_dict)
    result.update_dict(mod_dict)
    return {'wannier_settings': result}
コード例 #3
0
ファイル: compare_bands.py プロジェクト: wes-amat/aiida-vasp
def make_reference_bands_inline(wannier_bands, vasp_bands, efermi=None):
    """
    Compare bandstructure results from wannier and vasp.

    Takes two input array.bands nodes, stores them if they're not already
    stored. Takes the relevant bands from the vasp bandstructure and stores and outputs
    them in a node with linkname 'bandcmp'.

    Also returns a parameter data node with linkname 'bandinfo' containing
    fermi energy, bandgap etc of the reference bandstructure.
    """
    import numpy as np
    assert isinstance(wannier_bands, BANDS_CLS)
    assert isinstance(vasp_bands, BANDS_CLS)
    assert hasattr(wannier_bands, 'labels')
    assert hasattr(vasp_bands, 'labels')
    if vasp_bands.labels:
        assert vasp_bands.labels == wannier_bands.labels
    kpcomp = vasp_bands.get_kpoints() == wannier_bands.get_kpoints()
    assert kpcomp.all(), 'kpoints may not differ'

    owindow = get_outer_window(wannier_bands)

    wbands = wannier_bands.get_bands()
    vbands, vocc = vasp_bands.get_bands(also_occupations=True)

    # throw away spin dimension if appropriate
    if vbands.ndim == 3:
        vbands = vbands[0]
        vocc = vocc[0]

    # grab the vbands within the outer_window
    # find wich bands within the window match
    # by searching for the best fit using the sum of square errors
    vbands_window = np.empty(wbands.shape)
    vocc_window = np.empty(wbands.shape)
    w_nbands = wbands.shape[1]
    ref_nbands = vbands.shape[1]
    for band_idx in range(w_nbands):
        errs = [band_error(wbands[:, band_idx], vbands[:, i]) for i in range(ref_nbands)]
        minerr = np.argmin(errs)
        vbands_window[:, band_idx] = vbands[:, minerr]
        vocc_window[:, band_idx] = vocc[:, minerr]

    # For the future:
    # * find each band's index (s, px, py, ...)
    # * store the legend with the comparison node

    # find fermi energy from vasp_bands parent or work without it
    if not efermi:
        try:
            efermi = vasp_bands.inp.bands.out.results.get_dict()['efermi']
        except Exception:  # pylint: disable=broad-except
            pass

    ref_gap_info = band_gap(vbands_window, vocc_window, efermi)
    ref_info = DataFactory('parameter')()
    ref_info.update_dict({'bandgap': ref_gap_info})
    ref_info.update_dict({'efermi': efermi})
    ref_info.update_dict({'outer_window': owindow})

    ref_bands = DataFactory('array.bands')()
    ref_bands.set_kpointsdata(wannier_bands)
    ref_bands.set_bands(vbands_window, occupations=vocc_window)

    return {'bands': ref_bands, 'info': ref_info}
コード例 #4
0
ファイル: vasp5.py プロジェクト: quanshengwu/aiida-vasp
 def get_output(self):
     output = DataFactory('parameter')()
     output.update_dict({'efermi': self.vrp.efermi})
     return output