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