Troubleshooting & Support
doped
/pymatgen
Errors
For most error cases, doped
has been designed to try and give informative error messages about why
the functions are failing.
In the majority of cases, if you encounter an error using doped
which does not have a clear error
message about the origin of the problem, it is likely to be an issue with your version of pymatgen
(and/or doped
), and may be fixed by doing:
pip install pymatgen pymatgen-analysis-defects monty --upgrade
pip install doped --upgrade
If this does not solve your issue, please check the specific cases noted below. If your issue still isn’t
solved, then please contact the developers through the GitHub
Issues page, or by email.
Parsing Errors
If errors occur during parsing of defect calculations, doped
will try to informatively warn you about
the origin of the parsing failure (e.g. Parsing failed for [...] with the same error: ...
).
Depending on what the error is, this error message on its own may not be very helpful. In these cases, it’s
worth trying to parse one or two of these failing defect calculations individually, using
DefectParser.from_paths(defect_path="...", bulk_path="...", ...)
, which should give a more verbose
error traceback.
Note
“ParseError
”, ElementTree
/”no element found” or other XML-related errors are related to
issues in parsing vasprun.xml(.gz)
files. In most cases, these error messages are indicating a
corrupted/incomplete vasprun.xml(.gz)
file, for which the solution is to re-run the VASP
calculation to obtain the appropriate output.
numpy
Errors
A previous known issue with numpy
/pymatgen
is that it could give an error similar to this:
ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject
This should be avoided with current versions of doped
, due to the package installation
requirements (handled automatically by pip
), but depending on your python
environment and
previously-installed packages, it could possibly still arise. It occurs due to a recent change in the
numpy
C API in version 1.20.0
, see
here
for details.
It should be fixed by reinstalling numpy
and pymatgen
(so that they play nice together), so
that it is rebuilt with the new numpy
C API:
pip install --force --no-cache-dir numpy==1.23
pip uninstall pymatgen
pip install pymatgen
spglib
Errors/Warnings
A known issue with spglib
is that it can give unnecessary errors or warnings similar to:
spglib: ssm_get_exact_positions failed (attempt=0).
spglib: No point group was found (line 405, ...).
...
spglib: ssm_get_exact_positions failed (attempt=4).
spglib: get_bravais_exact_positions_and_lattice failed
spglib: ref_get_exact_structure_and_symmetry failed.
This can be fixed by reinstalling spglib
with conda install -c conda-forge spglib
or
pip install git+https://github.com/spglib/spglib --config-settings=cmake.define.SPGLIB_SHARED_LIBS=OFF
as detailed in the Installation instructions.
This ensures the correct C libraries are bundled with spglib
.
ShakeNBreak
For issues relating to the ShakeNBreak
part of the defect calculation workflow, please refer to the
ShakeNBreak documentation.
Errors with Python
Scripts
The recommended usage of doped
is through interactive python sessions, such as with Jupyter notebooks,
IPython
or an IDE (e.g. PyCharm
or VSCode
), as shown in the doped
tutorials.
However, it is possible to also use doped
through Python
scripts if preferred.
Due to the use of the multiprocessing
module in doped.generation
, doped.vasp
and
doped.analysis
, you need to use the proper syntax for running Python
scripts, with
if __name__ == '__main__':...
A simple example script of generating the intrinsic defects and writing the VASP input files (all with default settings – in reality you likely need to customise some options!) would be:
from pymatgen.core.structure import Structure
from doped import generation, vasp
def generate_and_write_vasp_files():
primitive_struct = Structure.from_file("prim_POSCAR")
# generate defects:
defect_gen = generation.DefectsGenerator(primitive_struct)
# generate VASP input files:
defects_set = vasp.DefectsSet(defect_gen)
defects_set.write_files()
if __name__ == '__main__':
generate_and_write_vasp_files()
If you do not use the if __name__ == '__main__':...
syntax, you may encounter this error:
RuntimeError:
An attempt has been made to start a new process before the
current process has finished its bootstrapping phase.
This probably means that you are not using fork to start your
child processes and you have forgotten to use the proper idiom
in the main module:
if __name__ == ‘__main__‘:
freeze_support()
...
The “freeze_support()” line can be omitted if the program
is not going to be frozen to produce an executable.
To fix this issue, refer to the “Safe importing of main module”
section in https://docs.python.org/3/library/multiprocessing.html
Note
If you run into any issues using doped
that aren’t addressed above, please contact the developers
through the GitHub
Issues page, or by email.