minushalf.utils package

Submodules

minushalf.utils.atomic_potential module

Correct crystal potential to fractional occupations

class minushalf.utils.atomic_potential.AtomicPotential(vtotal: Vtotal, vtotal_occupied: Vtotal, potential_file: PotentialFile)

Bases: object

Correct atomic potential fourier tranform for fractional occupations in valence or conduction bands

correct_file(potential: list, cut: float, amplitude: float, is_conduction: bool = False) None

Create the potential file corrected

Args:

potential (list): List of corrected potentials fourier transform

cut (float): Cutting parameter to cancel the potential

amplitude (float): Multiplicative factor of the potential function

correct_potential(cut: float, amplitude: float, is_conduction: bool = False) list

Correct fourier transform of the potential (V(k)) present in POTCAR file.

Args:

cut (float): Cutting parameter to cancel the potential

amplitude (float): Multiplicative factor of the potential function

is_conduction (bool): Indicates whether the potential correction will be made in the valence or in the conduction

Returns:

List of corrected potentials fourier transform

get_corrected_file_lines(potential: list) list

Create the potential file corrected

Args:

potential (list): List of corrected potentials fourier transform

Returns:

potential_lines(list): A List of potcar lines

occupy_potential(cut: float, amplitude) list
Parameters:
  • cut (float) – Cutting parameter to cancel the potential

  • amplitude (float) – Multiplicative factor of the potential function

Returns:

A list that contains the potentials of fractional electron occupation at the exact level to be corrected.

minushalf.utils.band_structure module

Band structure informations

class minushalf.utils.band_structure.BandStructure(eigenvalues: dict, fermi_energy: float, atoms_map: dict, num_bands: int, band_projection: BandProjectionFile)

Bases: object

Extact band structure insights from VASP classes

band_gap(is_indirect: bool = False) dict

Find VBM and CBM, then returns band gap :returns: VBM index and its eigenvalue, CBM index and its eigenvalue and band gap

band_projection(kpoint: int, band: int) -> defaultdict(<class 'list'>, {})
Find the projection of each atom for a specific band.
Args:

kpoint (int): Number of kpoints band_number (int): Number of the band

Returns:

band_projection (defaultdict(list)): Contains the projection of each orbital of each atom in the respective band

cbm_index(is_indirect: bool = False) tuple

Find the kpoint and the band for cbm

Returns:

vbm_index (tuple): Contains the kpoint number and the band number of th vbm

cbm_projection(is_indirect: bool = False) -> defaultdict(<class 'list'>, {})

Find the projection of each atom for valence band minimum.

Returns:

vbm_projection (defaultdict(list)): Contains the projection of each orbital of each atom in the respective band

static create(software_module: SoftwaresAbstractFactory, base_path: str = '.')

Create band structure class from ab inition results

Args:

software_module (SoftwaresAbstractFactory): Holds the results of first principles output calculations base_path (str): Path to first principles output files

Returns:

band_strucure (BandStructure): Class with band structure informations

is_metal(tolerance: float = 0.0001) bool

Check if the band structure indicates a metal by looking if the fermi level crosses a band.

Returns:

True if a metal, False if not

vbm_index(is_indirect: bool = False) tuple

Find the kpoint and the band for the Valence Band Maximum (VBM).

Parameters:

is_indirect (bool) – If True, considers an indirect band gap for VBM. If False, considers a direct band gap for VBM.

Returns:

A tuple containing the kpoint number and the band number of the VBM.

Return type:

vbm_index (tuple)

vbm_projection(is_indirect: bool = False) -> defaultdict(<class 'list'>, {})

Find the projection of each atom for valence band maximum.

Returns:

vbm_projection (defaultdict(list)): Contains the projection of each orbital of each atom in the respective band

minushalf.utils.check_file_exists module

Function to check if a file exists

minushalf.utils.check_file_exists.check_eigenval_exists(func)

Function decrator to check if a file exists

minushalf.utils.check_file_exists.check_outcar_exists(func)

Function decrator to check if a file exists

minushalf.utils.check_file_exists.check_potcar_exists(func)

Function decrator to check if a file exists

minushalf.utils.check_file_exists.check_procar_exists(func)

Function decrator to check if a file exists

minushalf.utils.check_file_exists.check_vasprun_exists(func)

Function decrator to check if a file exists

minushalf.utils.cli_messages module

Default cli messages

minushalf.utils.cli_messages.end_message() None

Print end message

minushalf.utils.cli_messages.welcome_message(text: str) None

Print welcome message

minushalf.utils.correct_potential_fourier_transform module

Fourier Transform

minushalf.utils.correct_potential_fourier_transform.correct_potential_fourier_transform(coefficient: array, k: array, rays: array, occupation_potential: array, cut: float) array

minushalf.utils.cut_initial_guess module

Gives cut initial guess

class minushalf.utils.cut_initial_guess.CutInitialGuess

Bases: object

Estimate cut inital guess from the nearest neighbor distance.

guess(distance: float, method: str) float

Given the nearest neighbor distance and the method, it returns the initial guess.

Args:

method (str): method of gessing distance (float): nearest neighbor distance

Returns:

cut_guess (float): An initial guess to cut.

minushalf.utils.drop_comments module

Function to check if the line a commentarie or not

minushalf.utils.drop_comments.drop_comments(lines: list) list

Function to remove comments from lines in a file

Args:

lines(list): list of file lines

Returns:

lines_without_comments (list): lines of the file without comments

minushalf.utils.fractionary_correction_indexes module

Get atoms to be corrected for simple valence correction and simple condunction correction

minushalf.utils.fractionary_correction_indexes.get_fractionary_correction_indexes(band_projection: DataFrame, treshold: int = 5) dict

Get dataframe index of the orbitals which contributes more than 5 percent to (VBM|CBM)

Returns:

correction_indexes (dict):A dict wherw the keys are the atoms

symbols and the value is a list with the orbitals type to be corrected. Ex: { ‘Ga’: [‘p’,’s’], ‘N’ : [‘d’,’f’], }

minushalf.utils.get_correction_params module

Extract the parameters for the correction

minushalf.utils.get_correction_params.get_conduction_correction_params(minushalf_yaml: MinushalfYaml, software_factory: SoftwaresAbstractFactory, **kwargs)

Returns the parameters for the conduction correction

minushalf.utils.get_correction_params.get_valence_correction_params(minushalf_yaml: MinushalfYaml, software_factory: SoftwaresAbstractFactory, **kwargs)

Returns the parameters for the valence correction

minushalf.utils.negative_band_gap module

Returns band-gap with the sinal changed, so one can use minimization algorithms to find the cut value that results in the maximum band_gap

minushalf.utils.negative_band_gap.find_negative_band_gap(cuts: list, *args: tuple) float

Run vasp and return the gap value multiplied by -1

Parameters:
  • cuts (float) – List of cuts

  • args (tuple) – tuple containning a dictionary with the fields base_path (str): Path to mkpotcar{symbol}_{orbital} symbol (str): Atom symbol default_potential_filename (str): The default potential filename for each software potfiles_folder (str): Folder containing unmodified potfiles amplitude (float): scale factor to trimming function runner (Runner): runner for the software software_factory(SoftwaresAbstractFactory): Factory for each software atom_potential(AtomicPotential): Holds fourier transforms of the potential software_files (list): Aditional files besides potential file to make ab initio calculations

Returns:

band gap multiplied for -1

Return type:

negative_gap (float)

minushalf.utils.parse_cut module

Parse cut string used in correct potential file

minushalf.utils.parse_cut.parse_cut(cut: str) list

Parse cut in a list of numbers.

Parameters:

cut (str) –

Cut energy to be used in the program, it can be passed in two ways:

unique value : float or integer range: begin(float|integer):pass(float|integer):end(float|integer)

Returns:

Permited values of cut.

Return type:

cut_numbers (list)

minushalf.utils.parse_valence_orbital_line module

Parse valence orbital line in INP file.

minushalf.utils.parse_valence_orbital_line.parse_valence_orbitals(line: str) dict

Parse valence orbital line in principal quantum number, angular momentum quantum number and eletronic occupation

Args:

line (str): line of imp file that represents a valence orbital

Returns:

A dictionary with fields n, l and eletronic occupation

minushalf.utils.projection_to_df module

Transform informations about band_project generated by cbm_character, vbm_character or band_character in a normalized datafame Grouped by orbital types

minushalf.utils.projection_to_df.projection_to_df(projection: defaultdict(<class 'list'>, {})) DataFrame

Transform received dictionaries into information with a higher degree of readability.

Args:

projection (defaultdict(list)): A dictionary containing the projections of each atom per orbital

Returns:

prolection_df (pd.DataFrame): A dataframe containing the projections per orbital type and normalized between 0 - 100

minushalf.utils.simple_correction_indexes module

Get atoms to be corrected for simple valence correction and simple condunction correction

minushalf.utils.simple_correction_indexes.get_simple_correction_indexes(band_projection: DataFrame) dict

Get dataframe index of the orbital which contributes more to (VBM|CBM)

Returns:

correction_indexes (dict):A dict wherw the keys are the atoms

symbols and the value is a list with the orbitals type to be corrected. Ex: { ‘Ga’: [‘p’,’s’], ‘N’ : [‘d’,’f’], }

minushalf.utils.trimming_function module

Trimming function

minushalf.utils.trimming_function.trimming_function(radius: array, ion_potential: array, atom_potential: array, cut: float, amplitude: float) array

Function that generate the potential for fractional occupation. The potential is cuted by a a function theta(r) to avoid divergence in calculations. The function of potential is defined as follows:

\[V_{1/2} = (V_{atom}- V_{ion})\cdot \theta (r)\]

where theta is:

\[\theta (r)=A\cdot (1-(\frac{r}{CUT})^{n})^{3},r\leq CUT\]
\[\theta (r) = 0, r > CUT\]

Args:

cut (float): cutting parameter to cancel the potential

amplitude (float): multiplicative factor of the potential function

radius (np.array): rays in which the potential was calculated

ion_potential (np.array): Atom pseudopotential with fractional occupation

atom_potential (np.array): Atom pseudopotential with all electrons

Returns:

potential of fractional electron occupation at the exact level to be corrected

Module contents