dragonfruit.vasp.vasp_default_errors module

Module for handling VASP errors and autmating possible fixes.

Credit to Felix for several of these.

class dragonfruit.vasp.vasp_default_errors.Fexcp(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

ADJUSTMENT = {'algo': 'all'}
ERROR_STRING = 'ERROR FEXCP: supplied Exchange'
NAME = 'fexcp'
TYPE_ID = UUID('e8ff0772-2727-44a0-858a-efaad5990367')
class dragonfruit.vasp.vasp_default_errors.Invgrp(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

Handles a single error

ADJUSTMENT = {'symprec': 1e-08}
ERROR_STRING = 'inverse of rotation matrix was not found (increase SYMPREC)'
NAME = 'invgrp'
TYPE_ID = UUID('86ba6293-8f07-4207-a834-ca43315f227e')
class dragonfruit.vasp.vasp_default_errors.MaxRestarts(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_errors.ErrorHandler

If no one else deals with the error then this handler attempts a simple restart changing no settings. If this happens more than max_count times in a task then it will order a termination.

ATTRS = ('count', 'max_count', 'raises')
NAME = 'max-restarts'
TYPE_ID = UUID('108aee5f-a67e-4648-91bf-a65f6f56fcca')
raises = True
class dragonfruit.vasp.vasp_default_errors.NotHermitian(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

Handles a single error

ADJUSTMENT = {'prec': 'accurate'}
ERROR_STRING = 'WARNING: Sub-Space-Matrix is not hermitian in DAV'
NAME = 'not-hermitian'
TYPE_ID = UUID('e7a5acb2-08b8-41cd-b5d1-b49c2caa25c7')
class dragonfruit.vasp.vasp_default_errors.Posmap(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

ADJUSTMENT = {'symprec': 1e-08}
ERROR_STRING = 'POSMAP internal error: symmetry equivalent atom not found'
NAME = 'posmap'
TYPE_ID = UUID('22bad6b1-6d9a-4790-bc05-7ff2cd201f35')
class dragonfruit.vasp.vasp_default_errors.Pssyevx(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

Handles a single error

ADJUSTMENT = {'algo': 'normal'}
ERROR_STRING = 'ERROR in subspace rotation PSSYEVX'
NAME = 'pssyevx'
TYPE_ID = UUID('cf961d8f-eac1-4215-9a0f-3ea8ff95e525')
class dragonfruit.vasp.vasp_default_errors.PssyevxParallelization(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

Alternate fix for PSSYEVX error, in case it’s a parallelization issue

ADJUSTMENT = {'ncore': 1, 'npar': None}
ERROR_STRING = 'ERROR in subspace rotation PSSYEVX'
NAME = 'pssyevx-parallelization'
TYPE_ID = UUID('b18d9736-a864-4e93-beb1-7bb272932ae9')
class dragonfruit.vasp.vasp_default_errors.Pzstein(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

ADJUSTMENT = {'algo': 'all'}
ERROR_STRING = 'PZSTEIN parameter number'
NAME = 'pzstein'
TYPE_ID = UUID('1de05f4e-7ff9-41c3-b4b0-68a9e09be7cc')
class dragonfruit.vasp.vasp_default_errors.Rhosyg(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

ADJUSTMENT = {'isym': 0, 'symprec': 0.0001}
ERROR_STRING = 'RHOSYG internal error: stars are not distinct'
NAME = 'rhosyg'
TYPE_ID = UUID('25b9f6d4-f213-43b8-abb4-d018a0ab86a8')
class dragonfruit.vasp.vasp_default_errors.Sgrcon(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

ADJUSTMENT = {'ediff': 1e-07, 'isym': 0, 'symprec': 1e-08}
ERROR_STRING = 'internal error in subroutine SGRCON'
NAME = 'sgrcon'
TYPE_ID = UUID('c3ee2a32-6c51-4685-9f2b-6e979c4c4e8d')
class dragonfruit.vasp.vasp_default_errors.SimpleAdjustment(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_errors.ErrorHandler

ADJUSTMENT = None
ERROR_STRING = None
NAME = None
TEMPORARY = False
class dragonfruit.vasp.vasp_default_errors.SlurmTimedOut(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_errors.ErrorHandler

Handle cases where slurm killed the job because it exceeded the allowed time

NAME = 'slurm-timed-out'
TYPE_ID = UUID('db59fe0c-460d-4c46-aa39-ea4ea97c565c')
class dragonfruit.vasp.vasp_default_errors.WavecarUnusable(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

If the wavecar is unusable from the previous run then temporarily disable it’s use for the next run only

ADJUSTMENT = {'istart': 0}
ERROR_STRING = 'ERROR: while reading WAVECAR, plane wave coefficients changed'
NAME = 'wavecar_sucks'
TEMPORARY = True
TYPE_ID = UUID('ba1a5e64-b140-4fe3-9920-a2b7a5f11d33')
class dragonfruit.vasp.vasp_default_errors.Zbrent(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_default_errors.SimpleAdjustment

ADJUSTMENT = {'algo': 'all', 'ediff': 1e-06}
ERROR_STRING = 'ZBRENT: fatal error'
NAME = 'zbrent'
TYPE_ID = UUID('ed5edfad-3924-404e-8914-7ff9a970b5d9')
class dragonfruit.vasp.vasp_default_errors.ZbrentAlternative(*_args, **_kwargs)

Bases: dragonfruit.vasp.vasp_errors.ErrorHandler

Zbrent error can cause VASP to have the last atoms object be the same as the first. Instead, we use the second-to-last atoms object.

We use a max count, to prevent any possible deadlocks, so we cannot get stuck in this error handler.

ATTRS = ('count', 'max_count')
ERROR_STRING = 'ZBRENT: fatal error'
NAME = 'zbrent_alternative'
TYPE_ID = UUID('5c79a739-a052-4455-86f9-f69fe207c7bd')
count = 0
max_count = 3
dragonfruit.vasp.vasp_default_errors.get_default_handlers() Sequence[typing.Tuple[<class 'dragonfruit.vasp.vasp_errors.ErrorHandler'>, int]]