Point defects can often determine the properties of semiconductor + and optoelectronic materials. Due to the large simulation cell and the + higher-cost density functionals required for defect simulations, the + computational cost of defect calculations is often orders of magnitude + higher than that of bulk calculations. As such, managing and curating + the results of the defect calculations generated by a single user has + the potential to save a significant amount of computational resources. + Moreover, eventually building a high-quality, persistent defects + database will significantly reduce the computational cost of defect + calculations for the entire community.
+Simulation of point defects is one of the most complex workflows in
+ computational materials science, involving extensive pre- and
+ post-processing of the structural and electronic structure data
+ (
-
+
Integration of but not insistence on standardized + high-throughput workflow frameworks
+Building large, persistent databases of point defects that are + extensible to new calculations over time
+Since the combinatorics of point defects in crystalline materials + can be daunting, it is important to have a software package that can + be easily integrated into high-throughput workflows to manage these + complex calculations. However, most users of defect analysis packages + will not need to run thousands of calculations, so it is important to + have code focused purely on the defect analysis and relegate the + high-throughput workflow aspect to a separate package. A focus of the + present package is also to provide a base library for the analysis of + point defects without invoking any high-throughput workflow + frameworks. Even though this package was designed with high-throughput + in mind and developed alongside a high-throughput workflow framework, + it is not dependent on any particular workflow framework and can be + used as a standalone analysis package.
+Additionally, a well-known problem in the simulation of point
+ defects is the fact that current structure optimization techniques can
+ miss the ground state structure based on the initial guess in a
+ sizable minority of cases, so the ability to easily re-visit and
+ re-optimize structures is crucial to building a reliable database of
+ point defects. Towards that end, we have developed a Python package,
+
Since the ability to revisit calculations is crucial to building a + reliable database, but user tagging of calculations is inconsistent, + especially in a high-throughput context, we have codified a + structure-only definition of point defects that can be used to + aggregate the results of multiple calculations of the same defect. + This allows for the creation of a database of point defects that can + be easily extended to new calculations over time. In addition to the + focus on database building, we have also implemented several tools for + analyzing carrier recombination in defects, these include:
+-
+
Obtaining the chemical potential contribution to the defect + formation energy without explicit calculations of the competing + phases
+Obtaining the Freysoldt finite-size correction without user + intervention
+Calculation of the optical transition between states under the + independent-particle approximation
+Calculation of the non-radiative recombination using the
+
Details of the implementation and tutorials for using the different
+ parts of the package are provided at
+
A core feature of
+
from pymatgen.analysis.defects.generators import generate_all_native_defects
+from pymatgen.ext.matproj import MPRester
+
+with MPRester() as mpr:
+ chgcar = mpr.get_charge_density_from_material_id("mp-804")
+
+defects = []
+for defect in generate_all_native_defects(chgcar):
+ print(defect)
+ defects.append(defect)
+ In the code above, we query the Materials Project database for
+ the charge density object, which contains information about the bulk
+ structure, as well as the electronic charge density. Using the
+
Defect generation.
A basic example of integration with the
+
from atomate2.vasp.flows.defect import FormationEnergyMaker
+from jobflow import Flow
+from pymatgen.analysis.defects.generators import generate_all_native_defects
+from pymatgen.ext.matproj import MPRester
+
+with MPRester() as mpr:
+ chgcar = mpr.get_charge_density_from_material_id("mp-804")
+
+
+maker = FormationEnergyMaker()
+jobs = []
+for defect in generate_all_native_defects(chgcar):
+ jobs.append(maker.make(defect))
+flow = Flow(jobs)
+ The code above will generate a
The following parts of the present package contain contributions
+ from other open-source projects: the finite size correction is based
+ on the original implementation in