BasePhononMaker

class atomate2.common.flows.phonons.BasePhononMaker(name='phonon', sym_reduce=True, symprec=0.001, displacement=0.01, min_length=20.0, max_length=None, prefer_90_degrees=True, allow_orthorhombic=False, get_supercell_size_kwargs=<factory>, use_symmetrized_structure=None, bulk_relax_maker=None, static_energy_maker=None, born_maker=None, phonon_displacement_maker=None, create_thermal_displacements=True, generate_frequencies_eigenvectors_kwargs=<factory>, kpath_scheme='seekpath', code=None, store_force_constants=True, socket=False)[source]

Bases: Maker, ABC

Maker to calculate harmonic phonons with a DFT/force field code and Phonopy.

Calculate the harmonic phonons of a material. Initially, a tight structural relaxation is performed to obtain a structure without forces on the atoms. Subsequently, supercells with one displaced atom are generated and accurate forces are computed for these structures. With the help of phonopy, these forces are then converted into a dynamical matrix. To correct for polarization effects, a correction of the dynamical matrix based on BORN charges can be performed. Finally, phonon densities of states, phonon band structures and thermodynamic properties are computed.

Note

It is heavily recommended to symmetrize the structure before passing it to this flow. Otherwise, a different space group might be detected and too many displacement calculations will be generated. It is recommended to check the convergence parameters here and adjust them if necessary. The default might not be strict enough for your specific case.

Parameters:
  • name (str) – Name of the flows produced by this maker.

  • sym_reduce (bool) – Whether to reduce the number of deformations using symmetry.

  • symprec (float) – Symmetry precision to use in the reduction of symmetry to find the primitive/conventional cell (use_primitive_standard_structure, use_conventional_standard_structure) and to handle all symmetry-related tasks in phonopy

  • displacement (float) – displacement distance for phonons

  • min_length (float) – min length of the supercell that will be built

  • prefer_90_degrees (bool) – if set to True, supercell algorithm will first try to find a supercell with 3 90 degree angles

  • get_supercell_size_kwargs (dict) – kwargs that will be passed to get_supercell_size to determine supercell size

  • use_symmetrized_structure (str) –

    allowed strings: “primitive”, “conventional”, None

    • ”primitive” will enforce to start the phonon computation from the primitive standard structure according to Setyawan, W., & Curtarolo, S. (2010). High-throughput electronic band structure calculations: Challenges and tools. Computational Materials Science, 49(2), 299-312. doi:10.1016/j.commatsci.2010.05.010. This makes it possible to use certain k-path definitions with this workflow. Otherwise, we must rely on seekpath

    • ”conventional” will enforce to start the phonon computation from the conventional standard structure according to Setyawan, W., & Curtarolo, S. (2010). High-throughput electronic band structure calculations: Challenges and tools. Computational Materials Science, 49(2), 299-312. doi:10.1016/j.commatsci.2010.05.010. We will however use seekpath and primitive structures as determined by from phonopy to compute the phonon band structure

  • bulk_relax_maker (.ForceFieldRelaxMaker, .BaseAimsMaker, .BaseVaspMaker, or None) – A maker to perform a tight relaxation on the bulk. Set to None to skip the bulk relaxation

  • static_energy_maker (.ForceFieldRelaxMaker, .BaseAimsMaker, .BaseVaspMaker, or None) – A maker to perform the computation of the DFT energy on the bulk. Set to None to skip the static energy computation

  • born_maker (.ForceFieldStaticMaker, .BaseAsimsMaker, .BaseVaspMaker, or None) – Maker to compute the BORN charges.

  • phonon_displacement_maker (.ForceFieldStaticMaker, .BaseAimsMaker, .BaseVaspMaker) – Maker used to compute the forces for a supercell.

  • generate_frequencies_eigenvectors_kwargs (dict) –

    Keyword arguments passed to generate_frequencies_eigenvectors. - create_force_constants_file: bool

    If True, a force constants file will be created

    • force_constants_filename: str

      If store_force_constants is True, the file name to store the force constants

    • calculate_pdos: bool

      If True, the projected phonon density of states will be calculated

  • create_thermal_displacements (bool) – Bool that determines if thermal_displacement_matrices are computed

  • kpath_scheme (str) – scheme to generate kpoints. Please be aware that you can only use seekpath with any kind of cell Otherwise, please use the standard primitive structure Available schemes are: “seekpath”, “hinuma”, “setyawan_curtarolo”, “latimer_munro”. “seekpath” and “hinuma” are the same definition but seekpath can be used with any kind of unit cell as it relies on phonopy to handle the relationship to the primitive cell and not pymatgen

  • code (str) – determines the dft or force field code.

  • store_force_constants (bool) – if True, force constants will be stored

  • socket (bool) – If True, use the socket for the calculation

  • max_length (float | None)

  • allow_orthorhombic (bool)

make(structure, prev_dir=None, born=None, epsilon_static=None, total_dft_energy_per_formula_unit=None, supercell_matrix=None)[source]

Make flow to calculate the phonon properties.

Parameters:
  • structure (Structure) – A pymatgen structure object. Please start with a structure that is nearly fully optimized as the internal optimizers have very strict settings!

  • prev_dir (str or Path or None) – A previous calculation directory to use for copying outputs.

  • born (Matrix3D) – Instead of recomputing born charges and epsilon, these values can also be provided manually. If born and epsilon_static are provided, the born run will be skipped it can be provided in the VASP convention with information for every atom in unit cell. Please be careful when converting structures within in this workflow as this could lead to errors

  • epsilon_static (Matrix3D) – The high-frequency dielectric constant to use instead of recomputing born charges and epsilon. If born, epsilon_static are provided, the born run will be skipped

  • total_dft_energy_per_formula_unit (float) – It has to be given per formula unit (as a result in corresponding Doc). Instead of recomputing the energy of the bulk structure every time, this value can also be provided in eV. If it is provided, the static run will be skipped. This energy is the typical output dft energy of the dft workflow. No conversion needed.

  • supercell_matrix (list) – Instead of min_length, also a supercell_matrix can be given, e.g. [[1.0,0.0,0.0],[0.0,1.0,0.0],[0.0,0.0,1.0]

Return type:

Flow

abstract property prev_calc_dir_argname: str | None

Name of argument informing static maker of previous calculation directory.

As this differs between different DFT codes (e.g., VASP, CP2K), it has been left as a property to be implemented by the inheriting class.

Note: this is only applicable if a relax_maker is specified; i.e., two calculations are performed for each ordering (relax -> static)