diff --git a/custodian/__init__.py b/custodian/__init__.py index 6d94eeab..7f535106 100644 --- a/custodian/__init__.py +++ b/custodian/__init__.py @@ -2,6 +2,6 @@ __author__ = "Shyue Ping Ong, William Davidson Richards, Stephen Dacek, " \ "Xiaohui Qu" -__version__ = "2018.3.10" +__version__ = "2018.6.11" from .custodian import Custodian \ No newline at end of file diff --git a/docs/_modules/custodian/ansible/actions.html b/docs/_modules/custodian/ansible/actions.html index 64cb6216..5c2b2c42 100644 --- a/docs/_modules/custodian/ansible/actions.html +++ b/docs/_modules/custodian/ansible/actions.html @@ -6,10 +6,10 @@ - custodian.ansible.actions — custodian 2018.3.10 documentation + custodian.ansible.actions — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

Navigation

  • modules |
  • - + @@ -77,8 +77,8 @@

    Source code for custodian.ansible.actions

             if tok not in current and i < n - 1:
                 current[tok] = {}
             elif i == n - 1:
    -            return current, toks[-1]
    - current = current[tok] + return current, toks[-1] + current = current[tok]
    [docs]class DictActions(object): @@ -107,14 +107,14 @@

    Source code for custodian.ansible.actions

     
    [docs] @staticmethod def set(input_dict, settings): for k, v in settings.items(): - (d, key) = get_nested_dict(input_dict, k)
    - d[key] = v + (d, key) = get_nested_dict(input_dict, k) + d[key] = v
    [docs] @staticmethod def unset(input_dict, settings): for k in settings.keys(): - (d, key) = get_nested_dict(input_dict, k)
    - del d[key] + (d, key) = get_nested_dict(input_dict, k) + del d[key]
    [docs] @staticmethod def push(input_dict, settings): @@ -122,8 +122,8 @@

    Source code for custodian.ansible.actions

                 (d, key) = get_nested_dict(input_dict, k)
                 if key in d:
                     d[key].append(v)
    -            else:
    - d[key] = [v] + else: + d[key] = [v]
    [docs] @staticmethod def push_all(input_dict, settings): @@ -131,8 +131,8 @@

    Source code for custodian.ansible.actions

                 (d, key) = get_nested_dict(input_dict, k)
                 if key in d:
                     d[key].extend(v)
    -            else:
    - d[key] = v + else: + d[key] = v
    [docs] @staticmethod def inc(input_dict, settings): @@ -140,15 +140,15 @@

    Source code for custodian.ansible.actions

                 (d, key) = get_nested_dict(input_dict, k)
                 if key in d:
                     d[key] += v
    -            else:
    - d[key] = v + else: + d[key] = v
    [docs] @staticmethod def rename(input_dict, settings): for k, v in settings.items(): if k in input_dict: - input_dict[v] = input_dict[k]
    - del input_dict[k] + input_dict[v] = input_dict[k] + del input_dict[k]
    [docs] @staticmethod def add_to_set(input_dict, settings): @@ -159,8 +159,8 @@

    Source code for custodian.ansible.actions

                                      .format(k))
                 if key in d and v not in d[key]:
                     d[key].append(v)
    -            elif key not in d:
    - d[key] = v + elif key not in d: + d[key] = v
    [docs] @staticmethod def pull(input_dict, settings): @@ -169,8 +169,8 @@

    Source code for custodian.ansible.actions

                 if key in d and (not isinstance(d[key], list)):
                     raise ValueError("Keyword {} does not refer to an array."
                                      .format(k))
    -            if key in d:
    - d[key] = [i for i in d[key] if i != v] + if key in d: + d[key] = [i for i in d[key] if i != v]
    [docs] @staticmethod def pull_all(input_dict, settings): @@ -178,8 +178,8 @@

    Source code for custodian.ansible.actions

                 if k in input_dict and (not isinstance(input_dict[k], list)):
                     raise ValueError("Keyword {} does not refer to an array."
                                      .format(k))
    -            for i in v:
    - DictActions.pull(input_dict, {k: i}) + for i in v: + DictActions.pull(input_dict, {k: i})
    [docs] @staticmethod def pop(input_dict, settings): @@ -190,8 +190,8 @@

    Source code for custodian.ansible.actions

                                      .format(k))
                 if v == 1:
                     d[key].pop()
    -            elif v == -1:
    - d[key].pop(0) + elif v == -1: + d[key].pop(0)
    [docs]class FileActions(object): @@ -215,8 +215,8 @@

    Source code for custodian.ansible.actions

                                  "'content'.")
             for k, v in settings.items():
                 if k == "content":
    -                with open(filename, 'w') as f:
    - f.write(v) + with open(filename, 'w') as f: + f.write(v)
    [docs] @staticmethod def file_move(filename, settings): @@ -231,8 +231,8 @@

    Source code for custodian.ansible.actions

                 raise ValueError("Settings must only contain one item with key "
                                  "'dest'.")
             for k, v in settings.items():
    -            if k == "dest":
    - shutil.move(filename, v) + if k == "dest": + shutil.move(filename, v)
    [docs] @staticmethod def file_delete(filename, settings): @@ -254,8 +254,8 @@

    Source code for custodian.ansible.actions

                     except OSError:
                         #Skip file not found error.
                         pass
    -            elif k == "mode" and v == "simulated":
    - print("Simulated removal of {}".format(filename)) + elif k == "mode" and v == "simulated": + print("Simulated removal of {}".format(filename))
    [docs] @staticmethod def file_copy(filename, settings): @@ -267,8 +267,8 @@

    Source code for custodian.ansible.actions

                 settings (dict): Must be {"dest": path of new file}
             """
             for k, v in settings.items():
    -            if k.startswith("dest"):
    - shutil.copyfile(filename, v) + if k.startswith("dest"): + shutil.copyfile(filename, v)
    [docs] @staticmethod def file_modify(filename, settings): @@ -282,8 +282,8 @@

    Source code for custodian.ansible.actions

             for k, v in settings.items():
                 if k == "mode":
                     os.chmod(filename,v)
    -            if k == "owners":
    - os.chown(filename,v) + if k == "owners": + os.chown(filename,v) diff --git a/docs/_modules/custodian/ansible/interpreter.html b/docs/_modules/custodian/ansible/interpreter.html index ed83c44a..c3e47110 100644 --- a/docs/_modules/custodian/ansible/interpreter.html +++ b/docs/_modules/custodian/ansible/interpreter.html @@ -6,10 +6,10 @@ - custodian.ansible.interpreter — custodian 2018.3.10 documentation + custodian.ansible.interpreter — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -132,8 +132,8 @@

    Source code for custodian.ansible.interpreter

    if action in self.supported_actions: self.supported_actions[action].__call__(obj, settings) elif self.strict: - raise ValueError("{} is not a supported action!"
    - .format(action)) + raise ValueError("{} is not a supported action!" + .format(action))
    [docs] def modify_object(self, modification, obj): """ @@ -145,8 +145,8 @@

    Source code for custodian.ansible.interpreter

    obj (object): Object to modify """ d = obj.as_dict() - self.modify(modification, d)
    - return obj.from_dict(d) + self.modify(modification, d) + return obj.from_dict(d) if __name__ == "__main__": diff --git a/docs/_modules/custodian/cli/converge_geometry.html b/docs/_modules/custodian/cli/converge_geometry.html index 0162266c..e4eae712 100644 --- a/docs/_modules/custodian/cli/converge_geometry.html +++ b/docs/_modules/custodian/cli/converge_geometry.html @@ -6,10 +6,10 @@ - custodian.cli.converge_geometry — custodian 2018.3.10 documentation + custodian.cli.converge_geometry — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -121,8 +121,8 @@

    Source code for custodian.cli.converge_geometry

    < "action": {"_file_copy": {"dest": "POSCAR"}}}] job_number += 1 - yield VaspJob(vasp_command, final=converged, backup=backup,
    - suffix=suffix, settings_override=settings) + yield VaspJob(vasp_command, final=converged, backup=backup, + suffix=suffix, settings_override=settings)
    [docs]def do_run(args): @@ -130,8 +130,8 @@

    Source code for custodian.cli.converge_geometry

    < UnconvergedErrorHandler(), NonConvergingErrorHandler(), PotimErrorHandler()] c = Custodian(handlers, get_runs(args), max_errors=10, gzipped_output=args.gzip) - c.run()
    - logging.info("Geometry optimization complete") + c.run() + logging.info("Geometry optimization complete")
    if __name__ == "__main__": diff --git a/docs/_modules/custodian/cli/converge_kpoints.html b/docs/_modules/custodian/cli/converge_kpoints.html index 5978a8d8..d9c73bbe 100644 --- a/docs/_modules/custodian/cli/converge_kpoints.html +++ b/docs/_modules/custodian/cli/converge_kpoints.html @@ -6,10 +6,10 @@ - custodian.cli.converge_kpoints — custodian 2018.3.10 documentation + custodian.cli.converge_kpoints — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -108,8 +108,8 @@

    Source code for custodian.cli.converge_kpoints

    {"filename": "CONTCAR", "action": {"_file_copy": {"dest": "POSCAR"}}}] yield VaspJob(vasp_command, final=False, backup=backup, - suffix=".kpoints.{}".format("x".join(map(str, m))),

    - settings_override=settings) + suffix=".kpoints.{}".format("x".join(map(str, m))), + settings_override=settings)
    [docs]def do_run(args): @@ -117,8 +117,8 @@

    Source code for custodian.cli.converge_kpoints

    c = Custodian(handlers, get_runs(vasp_command=args.command.split(), target=args.target, mode=args.mode, max_steps=args.max_steps), - max_errors=10)

    - c.run() + max_errors=10) + c.run()
    [docs]def main(): @@ -168,8 +168,8 @@

    Source code for custodian.cli.converge_kpoints

    "until a converged of 1meV is reached." ) - args = parser.parse_args()

    - do_run(args) + args = parser.parse_args() + do_run(args)
    if __name__ == "__main__": diff --git a/docs/_modules/custodian/cli/cstdn.html b/docs/_modules/custodian/cli/cstdn.html index 3536c1e2..cdd12eb3 100644 --- a/docs/_modules/custodian/cli/cstdn.html +++ b/docs/_modules/custodian/cli/cstdn.html @@ -6,10 +6,10 @@ - custodian.cli.cstdn — custodian 2018.3.10 documentation + custodian.cli.cstdn — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -131,12 +131,12 @@

    Source code for custodian.cli.cstdn

         logging.basicConfig(format=FORMAT, level=logging.INFO, filename="run.log")
         logging.info("Spec file is %s" % args.spec_file)
         d = loadfn(args.spec_file[0])
    -    c = Custodian.from_spec(d)
    - c.run() + c = Custodian.from_spec(d) + c.run() - - print(example_yaml) +
    [docs]def main(): @@ -161,8 +161,8 @@

    Source code for custodian.cli.cstdn

             a = getattr(args, "func")
         except AttributeError:
             parser.print_help()
    -        sys.exit(0)
    - args.func(args) + sys.exit(0) + args.func(args)
    if __name__ == "__main__": diff --git a/docs/_modules/custodian/cli/run_nwchem.html b/docs/_modules/custodian/cli/run_nwchem.html index 54e8a6af..2a3c5e96 100644 --- a/docs/_modules/custodian/cli/run_nwchem.html +++ b/docs/_modules/custodian/cli/run_nwchem.html @@ -6,10 +6,10 @@ - custodian.cli.run_nwchem — custodian 2018.3.10 documentation + custodian.cli.run_nwchem — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -80,8 +80,8 @@

    Source code for custodian.cli.run_nwchem

                         output_file=args.outfile)
         c = Custodian([NwchemErrorHandler(output_filename=args.outfile)], [job],
                       max_errors=5, scratch_dir=args.scratch,
    -                  gzipped_output=args.gzipped, checkpoint=True)
    - c.run() + gzipped_output=args.gzipped, checkpoint=True) + c.run()
    [docs]def main(): @@ -122,8 +122,8 @@

    Source code for custodian.cli.run_nwchem

                  "are going to perform an additional static run."
         )
     
    -    args = parser.parse_args()
    - do_run(args) + args = parser.parse_args() + do_run(args)
    if __name__ == "__main__": diff --git a/docs/_modules/custodian/cli/run_vasp.html b/docs/_modules/custodian/cli/run_vasp.html index 6a9646ac..483d0c72 100644 --- a/docs/_modules/custodian/cli/run_vasp.html +++ b/docs/_modules/custodian/cli/run_vasp.html @@ -6,10 +6,10 @@ - custodian.cli.run_vasp — custodian 2018.3.10 documentation + custodian.cli.run_vasp — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -84,8 +84,8 @@

    Source code for custodian.cli.run_vasp

         elif len(toks) > 2:
             print("Bad handler specification")
             sys.exit(-1)
    -    mod = __import__(mod, globals(), locals(), [toks[0]], 0)
    - return getattr(mod, toks[0])(**params) + mod = __import__(mod, globals(), locals(), [toks[0]], 0) + return getattr(mod, toks[0])(**params)
    [docs]def get_jobs(args): @@ -244,8 +244,8 @@

    Source code for custodian.cli.run_vasp

     
             if not job_type.startswith("full_relax"):
                 yield VaspJob(vasp_command, final=final, suffix=suffix,
    -                          backup=backup, settings_override=settings,
    - copy_magmom=copy_magmom, auto_npar=auto_npar) + backup=backup, settings_override=settings, + copy_magmom=copy_magmom, auto_npar=auto_npar)
    [docs]def do_run(args): @@ -260,8 +260,8 @@

    Source code for custodian.cli.run_vasp

         c = Custodian(handlers, get_jobs(args), validators,
                       max_errors=args.max_errors, scratch_dir=args.scratch,
                       gzipped_output=args.gzip,
    -                  checkpoint=True)
    - c.run() + checkpoint=True) + c.run()
    [docs]def main(): @@ -351,8 +351,8 @@

    Source code for custodian.cli.run_vasp

                  "but this can be overrridden by adding a number to the job"
                  "type, e.g. relax5 relax6 relax7")
     
    -    args = parser.parse_args()
    - do_run(args) + args = parser.parse_args() + do_run(args)
    diff --git a/docs/_modules/custodian/custodian.html b/docs/_modules/custodian/custodian.html index 5eb60903..076aca6a 100644 --- a/docs/_modules/custodian/custodian.html +++ b/docs/_modules/custodian/custodian.html @@ -6,10 +6,10 @@ - custodian.custodian — custodian 2018.3.10 documentation + custodian.custodian — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -339,8 +339,8 @@

    Source code for custodian.custodian

     
             custodian_params = process_params(spec.get("custodian_params", {}))
     
    -        return cls(jobs=jobs, handlers=handlers, validators=validators,
    - **custodian_params) + return cls(jobs=jobs, handlers=handlers, validators=validators, + **custodian_params)
    [docs] def run(self): """ @@ -394,8 +394,8 @@

    Source code for custodian.custodian

     
                 # Cleanup checkpoint files (if any) if run is successful.
                 Custodian._delete_checkpoints(cwd)
    -
    - return self.run_log + + return self.run_log
    def _run_job(self, job_n, job): """ @@ -466,6 +466,10 @@

    Source code for custodian.custodian

                 else:
                     has_error = self._do_check(self.handlers)
     
    +            if has_error:
    +                # This makes sure the job is killed cleanly for certain systems.
    +                job.terminate()
    +
                 # If there are no errors detected, perform
                 # postprocessing and exit.
                 if not has_error:
    @@ -605,8 +609,8 @@ 

    Source code for custodian.custodian

                 run_time = end - start
                 logger.info("Run completed. Total time taken = {}."
                             .format(run_time))
    -            if self.finished and self.gzipped_output:
    - gzip_dir(".") + if self.finished and self.gzipped_output: + gzip_dir(".")
    def _do_check(self, handlers, terminate_func=None): """ @@ -637,8 +641,8 @@

    Source code for custodian.custodian

                              "actions": []})
             self.total_errors += len(corrections)
             self.errors_current_job += len(corrections)
    -        self.run_log[-1]["corrections"].extend(corrections)
    - return len(corrections) > 0 + self.run_log[-1]["corrections"].extend(corrections) + return len(corrections) > 0
    [docs]class Job(six.with_metaclass(ABCMeta, MSONable)): @@ -651,16 +655,16 @@

    Source code for custodian.custodian

             """
             This method is run before the start of a job. Allows for some
             pre-processing.
    -        """
    - pass + """ + pass
    [docs] @abstractmethod def run(self): """ This method perform the actual work for the job. If parallel error checking (monitoring) is desired, this must return a Popen process. - """
    - pass + """ + pass
    [docs] @abstractmethod def postprocess(self): @@ -668,15 +672,18 @@

    Source code for custodian.custodian

             This method is called at the end of a job, *after* error detection.
             This allows post-processing, such as cleanup, analysis of results,
             etc.
    -        """
    - pass + """ + pass
    + +
    [docs] def terminate(self): + return None
    @property def name(self): """ A nice string name for the job. - """ - return self.__class__.__name__ + """ + return self.__class__.__name__
    [docs]class ErrorHandler(MSONable): @@ -722,8 +729,8 @@

    Source code for custodian.custodian

     
             Returns:
                 (bool) Indicating if errors are detected.
    -        """
    - pass + """ + pass
    [docs] @abstractmethod def correct(self): @@ -737,8 +744,8 @@

    Source code for custodian.custodian

                 actions taken. E.g.
                 {"errors": list_of_errors, "actions": list_of_actions_taken}.
                 If this is an unfixable error, actions should be set to None.
    -        """
    - pass + """ + pass
    [docs]class Validator(six.with_metaclass(ABCMeta, MSONable)): @@ -756,8 +763,8 @@

    Source code for custodian.custodian

     
             Returns:
                 (bool) Indicating if errors are detected.
    -        """
    - pass + """ + pass
    [docs]class CustodianError(Exception): @@ -777,8 +784,8 @@

    Source code for custodian.custodian

             """
             super(CustodianError, self).__init__(self, message)
             self.raises = raises
    -        self.validator = validator
    - self.message = message + self.validator = validator + self.message = message
    diff --git a/docs/_modules/custodian/feff/handlers.html b/docs/_modules/custodian/feff/handlers.html index a13ef39b..8b57fb04 100644 --- a/docs/_modules/custodian/feff/handlers.html +++ b/docs/_modules/custodian/feff/handlers.html @@ -6,10 +6,10 @@ - custodian.feff.handlers — custodian 2018.3.10 documentation + custodian.feff.handlers — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -94,8 +94,8 @@

    Source code for custodian.feff.handlers

             """
             If the FEFF run does not converge, the check will return
             "TRUE"
    -        """
    - return self._notconverge_check() + """ + return self._notconverge_check() def _notconverge_check(self): @@ -166,8 +166,8 @@

    Source code for custodian.feff.handlers

                 return {"errors": ["Non-converging job"], "actions": actions}
     
             # Unfixable error. Just return None for actions.
    -        else:
    - return {"errors": ["Non-converging job"], "actions": None} + else: + return {"errors": ["Non-converging job"], "actions": None} diff --git a/docs/_modules/custodian/feff/interpreter.html b/docs/_modules/custodian/feff/interpreter.html index 71c29d10..0cd3800d 100644 --- a/docs/_modules/custodian/feff/interpreter.html +++ b/docs/_modules/custodian/feff/interpreter.html @@ -6,10 +6,10 @@ - custodian.feff.interpreter — custodian 2018.3.10 documentation + custodian.feff.interpreter — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -111,8 +111,8 @@

    Source code for custodian.feff.interpreter

                     with open(os.path.join('.', k), "w") as f:
                         f.write(str(v))
     
    -            with open(os.path.join('.', "feff.inp"), "w") as f:
    - f.write(feff_input) + with open(os.path.join('.', "feff.inp"), "w") as f: + f.write(feff_input) diff --git a/docs/_modules/custodian/feff/jobs.html b/docs/_modules/custodian/feff/jobs.html index 86615fa8..3ba3bb94 100644 --- a/docs/_modules/custodian/feff/jobs.html +++ b/docs/_modules/custodian/feff/jobs.html @@ -6,10 +6,10 @@ - custodian.feff.jobs — custodian 2018.3.10 documentation + custodian.feff.jobs — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -119,8 +119,8 @@

    Source code for custodian.feff.jobs

                     shutil.copy(f, "{}.orig".format(f))
     
                 for f in FEFF_BACKUP_FILES:
    -                if os.path.isfile(f):
    - shutil.copy(f, "{}.orig".format(f)) + if os.path.isfile(f): + shutil.copy(f, "{}.orig".format(f))
    [docs] def run(self): @@ -134,15 +134,15 @@

    Source code for custodian.feff.jobs

                 # Use line buffering for stderr
                 # On TSCC, need to run shell command
                 p = subprocess.Popen(self.feff_cmd, stdout=f_std, stderr=f_err, shell=True)
    -
    - return p + + return p
    [docs] def postprocess(self): """ Renaming or gzipping all the output as needed """ - if self.gzipped:
    - backup("*", prefix=self.gzipped_prefix) + if self.gzipped: + backup("*", prefix=self.gzipped_prefix) diff --git a/docs/_modules/custodian/nwchem/handlers.html b/docs/_modules/custodian/nwchem/handlers.html index 6ad2fa8f..1fb49643 100644 --- a/docs/_modules/custodian/nwchem/handlers.html +++ b/docs/_modules/custodian/nwchem/handlers.html @@ -6,10 +6,10 @@ - custodian.nwchem.handlers — custodian 2018.3.10 documentation + custodian.nwchem.handlers — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -100,8 +100,8 @@

    Source code for custodian.nwchem.handlers

             if out.data[-1]["has_error"]:
                 self.errors.extend(out.data[-1]["errors"])
             self.errors = list(set(self.errors))
    -        self.ntasks = len(out.data)
    - return len(self.errors) > 0 + self.ntasks = len(out.data) + return len(self.errors) > 0 def _mod_input(self, search_string_func, mod_string_func): with open(self.input_file) as f: @@ -145,11 +145,11 @@

    Source code for custodian.nwchem.handlers

             m = Modder()
             for action in actions:
                 nwi = m.modify_object(action, nwi)
    -        nwi.write_file(self.input_file)
    - return {"errors": self.errors, "actions": actions} + nwi.write_file(self.input_file) + return {"errors": self.errors, "actions": actions} - def __str__(self): - return "NwchemErrorHandler" + def __str__(self): + return "NwchemErrorHandler" diff --git a/docs/_modules/custodian/nwchem/jobs.html b/docs/_modules/custodian/nwchem/jobs.html index d8b9c3e4..24c1d1d9 100644 --- a/docs/_modules/custodian/nwchem/jobs.html +++ b/docs/_modules/custodian/nwchem/jobs.html @@ -6,10 +6,10 @@ - custodian.nwchem.jobs — custodian 2018.3.10 documentation + custodian.nwchem.jobs — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -110,23 +110,23 @@

    Source code for custodian.nwchem.jobs

             """
             Performs backup if necessary.
             """
    -        if self.backup:
    - shutil.copy(self.input_file, "{}.orig".format(self.input_file)) + if self.backup: + shutil.copy(self.input_file, "{}.orig".format(self.input_file))
    [docs] def run(self): """ Performs actual nwchem run. """ with zopen(self.output_file, 'w') as fout: - return subprocess.Popen(self.nwchem_cmd + [self.input_file],
    - stdout=fout) + return subprocess.Popen(self.nwchem_cmd + [self.input_file], + stdout=fout)
    [docs] def postprocess(self): """ Renaming or gzipping as needed. """ - if self.gzipped:
    - gzip_dir(".") + if self.gzipped: + gzip_dir(".") diff --git a/docs/_modules/custodian/qchem/handlers.html b/docs/_modules/custodian/qchem/handlers.html index 35efeeca..d02689c1 100644 --- a/docs/_modules/custodian/qchem/handlers.html +++ b/docs/_modules/custodian/qchem/handlers.html @@ -6,10 +6,10 @@ - custodian.qchem.handlers — custodian 2018.3.10 documentation + custodian.qchem.handlers — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -129,8 +129,8 @@

    Source code for custodian.qchem.handlers

                     self.error_step_id = i
                     self.fix_step = self.qcinp.jobs[i]
                     self.errors = sorted(list(set(od["errors"])))
    -                return True
    - return False + return True + return False
    [docs] def correct(self): self.backup() @@ -236,8 +236,8 @@

    Source code for custodian.qchem.handlers

                 return {"errors": self.errors, "actions": None}
             else:
                 return {"errors": self.errors, "actions": None}
    -        self.qcinp.write_file(self.input_file)
    - return {"errors": self.errors, "actions": actions} + self.qcinp.write_file(self.input_file) + return {"errors": self.errors, "actions": actions}
    [docs] def fix_not_enough_total_memory(self): if self.fix_step.params['rem']["jobtype"] == "freq": @@ -262,8 +262,8 @@

    Source code for custodian.qchem.handlers

                 if self.qchem_job.current_command_name != "half_cpus":
                     self.qchem_job.select_command("half_cpus", self.qcinp)
                     return "half_cpus"
    -            else:
    - return None + else: + return None
    [docs] def fix_error_code_134(self): @@ -286,8 +286,8 @@

    Source code for custodian.qchem.handlers

             else:
                 if self.fix_step.params['rem']["jobtype"] == "freq":
                     act = self.fix_not_enough_total_memory()
    -                return act
    - return None + return act + return None
    [docs] def fix_insufficient_static_memory(self): if not (self.qchem_job.is_openmp_compatible(self.qcinp) @@ -310,8 +310,8 @@

    Source code for custodian.qchem.handlers

                 # noinspection PyProtectedMember
                 self.qchem_job._set_qchem_memory(self.qcinp)
                 return "Increase Static Memory"
    -        else:
    - return None + else: + return None
    [docs] def fix_error_killed(self): if not (self.qchem_job.is_openmp_compatible(self.qcinp) @@ -324,8 +324,8 @@

    Source code for custodian.qchem.handlers

             elif self.qchem_job.current_command_name != "openmp":
                 self.qchem_job.select_command("openmp", self.qcinp)
                 return "Use OpenMP"
    -        else:
    - return None + else: + return None
    [docs] def fix_scf(self): comments = self.fix_step.params.get("comment", "") @@ -471,20 +471,20 @@

    Source code for custodian.qchem.handlers

                     comments = scf_pattern.sub(strategy_text, comments)
                 else:
                     comments += "\n" + strategy_text
    -            self.fix_step.params["comment"] = comments
    - return method + self.fix_step.params["comment"] = comments + return method
    [docs] def set_last_input_geom(self, new_mol): for i in range(self.error_step_id, -1, -1): qctask = self.qcinp.jobs[i] - if isinstance(qctask.mol, Molecule):
    - qctask.mol = copy.deepcopy(new_mol) + if isinstance(qctask.mol, Molecule): + qctask.mol = copy.deepcopy(new_mol)
    [docs] def set_scf_initial_guess(self, guess="sad"): if "scf_guess" not in self.fix_step.params["rem"] \ or self.error_step_id > 0 \ - or self.fix_step.params["rem"]["scf_guess"] != "read":
    - self.fix_step.set_scf_initial_guess(guess) + or self.fix_step.params["rem"]["scf_guess"] != "read": + self.fix_step.set_scf_initial_guess(guess)
    [docs] def fix_geom_opt(self): comments = self.fix_step.params.get("comment", "") @@ -556,8 +556,8 @@

    Source code for custodian.qchem.handlers

                     comments = geom_pattern.sub(strategy_text, comments)
                 else:
                     comments += "\n" + strategy_text
    -            self.fix_step.params["comment"] = comments
    - return method + self.fix_step.params["comment"] = comments + return method
    [docs] def backup(self): error_num = max([0] + [int(f.split(".")[1]) @@ -569,8 +569,8 @@

    Source code for custodian.qchem.handlers

                 list(self.ex_backup_list)
             for f in bak_list:
                 if os.path.exists(f):
    -                tar.add(f)
    - tar.close() + tar.add(f) + tar.close()
    [docs] def as_dict(self): return {"@module": self.__class__.__module__, @@ -584,8 +584,8 @@

    Source code for custodian.qchem.handlers

                     "outdata": self.outdata,
                     "qcinp": self.qcinp.as_dict() if self.qcinp else None,
                     "error_step_id": self.error_step_id,
    -                "errors": self.errors,
    - "fix_step": self.fix_step.as_dict() if self.fix_step else None} + "errors": self.errors, + "fix_step": self.fix_step.as_dict() if self.fix_step else None}
    [docs] @classmethod def from_dict(cls, d): @@ -599,8 +599,8 @@

    Source code for custodian.qchem.handlers

             h.qcinp = QcInput.from_dict(d["qcinp"]) if d["qcinp"] else None
             h.error_step_id = d["error_step_id"]
             h.errors = d["errors"]
    -        h.fix_step = QcTask.from_dict(d["fix_step"]) if d["fix_step"] else None
    - return h + h.fix_step = QcTask.from_dict(d["fix_step"]) if d["fix_step"] else None + return h diff --git a/docs/_modules/custodian/qchem/jobs.html b/docs/_modules/custodian/qchem/jobs.html index 947e7375..9ded6aa1 100644 --- a/docs/_modules/custodian/qchem/jobs.html +++ b/docs/_modules/custodian/qchem/jobs.html @@ -6,10 +6,10 @@ - custodian.qchem.jobs — custodian 2018.3.10 documentation + custodian.qchem.jobs — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -207,14 +207,14 @@

    Source code for custodian.qchem.jobs

                     if j.params["rem"]["exchange"] in ["pbe", "b"] \
                         and "correlation" in j.params['rem'] \
                             and j.params["rem"]["correlation"] in ["pbe", "lyp"]:
    -                    return False
    - return True + return False + return True
    [docs] def command_available(self, cmd_name): available_commands = ["general"] if self.alt_cmd: - available_commands.extend(self.alt_cmd.keys())
    - return cmd_name in available_commands + available_commands.extend(self.alt_cmd.keys()) + return cmd_name in available_commands
    [docs] def select_command(self, cmd_name, qcinp=None): """ @@ -234,8 +234,8 @@

    Source code for custodian.qchem.jobs

             else:
                 self.current_command = self.alt_cmd[cmd_name]
             self.current_command_name = cmd_name
    -        self._set_qchem_memory(qcinp)
    - return True + self._set_qchem_memory(qcinp) + return True
    [docs] def setup(self): if self.backup: @@ -251,8 +251,8 @@

    Source code for custodian.qchem.jobs

                     shutil.copy(self.output_file,
                                 "{}.{}.orig".format(self.output_file, i))
                 if self.qclog_file and os.path.exists(self.qclog_file):
    -                shutil.copy(self.qclog_file,
    - "{}.{}.orig".format(self.qclog_file, i)) + shutil.copy(self.qclog_file, + "{}.{}.orig".format(self.qclog_file, i))
    def _run_qchem(self, log_file_object=None): if 'vesta' in socket.gethostname(): @@ -399,8 +399,8 @@

    Source code for custodian.qchem.jobs

                     subprocess.call(tmp_creation_cmd)
                 returncode = self._run_qchem()
                 if tmp_clean_cmd:
    -                subprocess.call(tmp_clean_cmd)
    - return returncode + subprocess.call(tmp_clean_cmd) + return returncode
    [docs] def as_dict(self): d = {"@module": self.__class__.__module__, @@ -414,8 +414,8 @@

    Source code for custodian.qchem.jobs

                  "backup": self.backup,
                  "large_static_mem": self.large_static_mem,
                  "alt_cmd": self.alt_cmd,
    -             "run_name": self.run_name}
    - return d + "run_name": self.run_name} + return d
    [docs] @classmethod def from_dict(cls, d): @@ -427,8 +427,8 @@

    Source code for custodian.qchem.jobs

                             gzipped=d["gzipped"],
                             backup=d["backup"],
                             alt_cmd=d["alt_cmd"],
    -                        large_static_mem=d["large_static_mem"],
    - run_name=d["run_name"]) + large_static_mem=d["large_static_mem"], + run_name=d["run_name"])
    [docs] def postprocess(self): if self.gzipped: @@ -439,8 +439,8 @@

    Source code for custodian.qchem.jobs

                     gzip_cmd = shlex.split("srun -N 1 --ntasks-per-node 1 --nodelist  "
                                            "{} gzip".format(nodelist)) + file_list
                     subprocess.call(gzip_cmd)
    -            else:
    - gzip_dir(".") + else: + gzip_dir(".") diff --git a/docs/_modules/custodian/qchem/new_handlers.html b/docs/_modules/custodian/qchem/new_handlers.html new file mode 100644 index 00000000..7701e782 --- /dev/null +++ b/docs/_modules/custodian/qchem/new_handlers.html @@ -0,0 +1,323 @@ + + + + + + + + custodian.qchem.new_handlers — custodian 2018.6.11 documentation + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Source code for custodian.qchem.new_handlers

    +# coding: utf-8
    +
    +from __future__ import unicode_literals, division
    +
    +# This module implements new error handlers for QChem runs.
    +
    +import os
    +from pymatgen.io.qchem_io.inputs import QCInput
    +from pymatgen.io.qchem_io.outputs import QCOutput
    +from custodian.custodian import ErrorHandler
    +from custodian.utils import backup
    +
    +__author__ = "Samuel Blau, Brandon Woods, Shyam Dwaraknath"
    +__copyright__ = "Copyright 2018, The Materials Project"
    +__version__ = "0.1"
    +__maintainer__ = "Samuel Blau"
    +__email__ = "samblau1@gmail.com"
    +__status__ = "Alpha"
    +__date__ = "3/26/18"
    +__credits__ = "Xiaohui Qu"
    +
    +
    +
    [docs]class QChemErrorHandler(ErrorHandler): + """ + Master QChemErrorHandler class that handles a number of common errors + that occur during QChem runs. + """ + + is_monitor = False + + def __init__(self, + input_file="mol.qin", + output_file="mol.qout", + scf_max_cycles=200, + geom_max_cycles=200): + """ + Initializes the error handler from a set of input and output files. + + Args: + input_file (str): Name of the QChem input file. + output_file (str): Name of the QChem output file. + scf_max_cycles (int): The max iterations to set to fix SCF failure. + geom_max_cycles (int): The max iterations to set to fix geometry + optimization failure. + """ + self.input_file = input_file + self.output_file = output_file + self.scf_max_cycles = scf_max_cycles + self.geom_max_cycles = geom_max_cycles + self.qcinp = QCInput.from_file(self.input_file) + self.outdata = None + self.errors = [] + +
    [docs] def check(self): + # Checks output file for errors. + self.outdata = QCOutput(self.output_file).data + self.errors = self.outdata.get("errors") + return len(self.errors) > 0
    + +
    [docs] def correct(self): + backup({self.input_file, self.output_file}) + actions = [] + + if "SCF_failed_to_converge" in self.errors: + # Check number of SCF cycles. If not set or less than scf_max_cycles, + # increase to that value and rerun. If already set, check if + # scf_algorithm is unset or set to DIIS, in which case set to RCA-DIIS. + # Otherwise, tell user to call SCF error handler and do nothing. + if self.qcinp.rem.get("max_scf_cycles") != str( + self.scf_max_cycles): + self.qcinp.rem["max_scf_cycles"] = self.scf_max_cycles + actions.append({"max_scf_cycles": self.scf_max_cycles}) + elif self.qcinp.rem.get("scf_algorithm", "diis").lower() == "diis": + self.qcinp.rem["scf_algorithm"] = "rca_diis" + actions.append({"scf_algorithm": "rca_diis"}) + if self.qcinp.rem.get("gen_scfman"): + self.qcinp.rem["gen_scfman"] = False + actions.append({"gen_scfman": False}) + else: + print( + "More advanced changes may impact the SCF result. Use the SCF error handler" + ) + + elif "out_of_opt_cycles" in self.errors: + # Check number of opt cycles. If less than geom_max_cycles, increase + # to that value, set last geom as new starting geom and rerun. + if self.qcinp.rem.get( + "geom_opt_max_cycles") != self.geom_max_cycles: + self.qcinp.rem["geom_opt_max_cycles"] = self.geom_max_cycles + actions.append({"geom_max_cycles:": self.scf_max_cycles}) + if len(self.outdata.get("energy_trajectory")) > 1: + if self.qcinp.molecule.spin_multiplicity != self.outdata.get( + "molecule_from_last_geometry").spin_multiplicity: + raise AssertionError('Multiplicities should match!') + if self.qcinp.molecule.charge != self.outdata.get( + "molecule_from_last_geometry").charge: + raise AssertionError('Charges should match!') + self.qcinp.molecule = self.outdata.get( + "molecule_from_last_geometry") + actions.append({"molecule": "molecule_from_last_geometry"}) + else: + print( + "How do I get the geometry optimization converged when already at the maximum number of cycles?" + ) + + elif "unable_to_determine_lamda" in self.errors: + # Set last geom as new starting geom and rerun. If no opt cycles, + # use diff SCF strat? Diff initial guess? Change basis? + if len(self.outdata.get("energy_trajectory")) > 1: + if self.qcinp.molecule.spin_multiplicity != self.outdata.get( + "molecule_from_last_geometry").spin_multiplicity: + raise AssertionError('Multiplicities should match!') + if self.qcinp.molecule.charge != self.outdata.get( + "molecule_from_last_geometry").charge: + raise AssertionError('Charges should match!') + self.qcinp.molecule = self.outdata.get( + "molecule_from_last_geometry") + actions.append({"molecule": "molecule_from_last_geometry"}) + elif self.qcinp.rem.get("scf_algorithm", "diis").lower() == "diis": + self.qcinp.rem["scf_algorithm"] = "rca_diis" + actions.append({"scf_algorithm": "rca_diis"}) + if self.qcinp.rem.get("gen_scfman"): + self.qcinp.rem["gen_scfman"] = False + actions.append({"gen_scfman": False}) + else: + print( + "Use a different initial guess? Perhaps a different basis?" + ) + + elif "linear_dependent_basis" in self.errors: + # DIIS -> RCA_DIIS. If already RCA_DIIS, change basis? + if self.qcinp.rem.get("scf_algorithm", "diis").lower() == "diis": + self.qcinp.rem["scf_algorithm"] = "rca_diis" + actions.append({"scf_algorithm": "rca_diis"}) + if self.qcinp.rem.get("gen_scfman"): + self.qcinp.rem["gen_scfman"] = False + actions.append({"gen_scfman": False}) + else: + print("Perhaps use a better basis?") + + elif "failed_to_transform_coords" in self.errors: + # Check for symmetry flag in rem. If not False, set to False and rerun. + # If already False, increase threshold? + if not self.qcinp.rem.get("sym_ignore") or self.qcinp.rem.get( + "symmetry"): + self.qcinp.rem["sym_ignore"] = True + self.qcinp.rem["symmetry"] = False + actions.append({"sym_ignore": True}) + actions.append({"symmetry": False}) + else: + print("Perhaps increase the threshold?") + + elif "input_file_error" in self.errors: + print( + "Something is wrong with the input file. Examine error message by hand." + ) + return {"errors": self.errors, "actions": None} + + elif "failed_to_read_input" in self.errors: + # Almost certainly just a temporary problem that will not be encountered again. Rerun job as-is. + actions.append({"rerun job as-is"}) + + elif "IO_error" in self.errors: + # Almost certainly just a temporary problem that will not be encountered again. Rerun job as-is. + actions.append({"rerun job as-is"}) + + elif "unknown_error" in self.errors: + print("Examine error message by hand.") + return {"errors": self.errors, "actions": None} + + else: + # You should never get here. If correct is being called then errors should have at least one entry, + # in which case it should have been caught by the if/elifs above. + print( + "If you get this message, something has gone terribly wrong!") + return {"errors": self.errors, "actions": None} + + os.rename(self.input_file, self.input_file + ".last") + self.qcinp.write_file(self.input_file) + return {"errors": self.errors, "actions": actions}
    + + +
    [docs]class QChemSCFErrorHandler(ErrorHandler): + """ + QChem ErrorHandler class that addresses SCF non-convergence. + """ + + is_monitor = False + + def __init__(self, + input_file="mol.qin", + output_file="mol.qout", + rca_gdm_thresh=1.0E-3, + scf_max_cycles=200): + """ + Initializes the error handler from a set of input and output files. + + Args: + input_file (str): Name of the QChem input file. + output_file (str): Name of the QChem output file. + rca_gdm_thresh (float): The threshold for the prior scf algorithm. + If last deltaE is larger than the threshold try RCA_DIIS + first, else, try DIIS_GDM first. + scf_max_cycles (int): The max iterations to set to fix SCF failure. + """ + self.input_file = input_file + self.output_file = output_file + self.scf_max_cycles = scf_max_cycles + self.geom_max_cycles = geom_max_cycles + self.qcinp = QCInput.from_file(self.input_file) + self.outdata = None + self.errors = None + self.qchem_job = qchem_job + +
    [docs] def check(self): + # Checks output file for errors. + self.outdata = QCOutput(self.output_file).data + self.errors = self.outdata.get("errors") + return len(self.errors) > 0
    + +
    [docs] def correct(self): + print("This hasn't been implemented yet!") + return {"errors": self.errors, "actions": None}
    +
    + +
    +
    +
    + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/_modules/custodian/qchem/new_jobs.html b/docs/_modules/custodian/qchem/new_jobs.html new file mode 100644 index 00000000..18984a8d --- /dev/null +++ b/docs/_modules/custodian/qchem/new_jobs.html @@ -0,0 +1,352 @@ + + + + + + + + custodian.qchem.new_jobs — custodian 2018.6.11 documentation + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +

    Source code for custodian.qchem.new_jobs

    +# coding: utf-8
    +
    +from __future__ import unicode_literals, division
    +import math
    +
    +# New QChem job module
    +
    +
    +import os
    +import shutil
    +import copy
    +import subprocess
    +import numpy as np
    +from pymatgen.core import Molecule
    +from pymatgen.io.qchem_io.inputs import QCInput
    +from pymatgen.io.qchem_io.outputs import QCOutput
    +from custodian.custodian import Job
    +from pymatgen.analysis.molecule_structure_comparator import MoleculeStructureComparator
    +
    +__author__ = "Samuel Blau, Brandon Woods, Shyam Dwaraknath"
    +__copyright__ = "Copyright 2018, The Materials Project"
    +__version__ = "0.1"
    +__maintainer__ = "Samuel Blau"
    +__email__ = "samblau1@gmail.com"
    +__status__ = "Alpha"
    +__date__ = "3/20/18"
    +__credits__ = "Xiaohui Qu"
    +
    +
    +
    [docs]class QCJob(Job): + """ + A basic QChem Job. + """ + + def __init__(self, + qchem_command, + multimode="openmp", + input_file="mol.qin", + output_file="mol.qout", + max_cores=32, + qclog_file="mol.qclog", + suffix="", + scratch_dir="/dev/shm/qcscratch/", + save_scratch=False, + save_name="default_save_name"): + """ + Args: + qchem_command (str): Command to run QChem. + multimode (str): Parallelization scheme, either openmp or mpi. + input_file (str): Name of the QChem input file. + output_file (str): Name of the QChem output file. + max_cores (int): Maximum number of cores to parallelize over. + Defaults to 32. + qclog_file (str): Name of the file to redirect the standard output + to. None means not to record the standard output. Defaults to + None. + suffix (str): String to append to the file in postprocess. + scratch_dir (str): QCSCRATCH directory. Defaults to "/dev/shm/qcscratch/". + save_scratch (bool): Whether to save scratch directory contents. + Defaults to False. + save_name (str): Name of the saved scratch directory. Defaults to + to "default_save_name". + """ + self.qchem_command = qchem_command.split(" ") + self.multimode = multimode + self.input_file = input_file + self.output_file = output_file + self.max_cores = max_cores + self.qclog_file = qclog_file + self.suffix = suffix + self.scratch_dir = scratch_dir + self.save_scratch = save_scratch + self.save_name = save_name + + @property + def current_command(self): + multimode_index = 0 + if self.save_scratch: + command = [ + "-save", "", + str(self.max_cores), self.input_file, self.output_file, + self.save_name + ] + multimode_index = 1 + else: + command = [ + "", str(self.max_cores), self.input_file, self.output_file + ] + if self.multimode == 'openmp': + command[multimode_index] = "-nt" + elif self.multimode == 'mpi': + command[multimode_index] = "-np" + else: + print("ERROR: Multimode should only be set to openmp or mpi") + command = self.qchem_command + command + return command + +
    [docs] def setup(self): + os.putenv("QCSCRATCH", self.scratch_dir) + if self.multimode == 'openmp': + os.putenv('QCTHREADS', str(self.max_cores)) + os.putenv('OMP_NUM_THREADS', str(self.max_cores))
    + +
    [docs] def postprocess(self): + if self.save_scratch: + shutil.copytree( + os.path.join(self.scratch_dir, self.save_name), + os.path.join(os.path.dirname(self.input_file), self.save_name)) + if self.suffix != "": + shutil.move(self.input_file, self.input_file + self.suffix) + shutil.move(self.output_file, self.output_file + self.suffix) + shutil.move(self.qclog_file, self.qclog_file + self.suffix)
    + +
    [docs] def run(self): + """ + Perform the actual QChem run. + + Returns: + (subprocess.Popen) Used for monitoring. + """ + qclog = open(self.qclog_file, 'w') + p = subprocess.Popen(self.current_command, stdout=qclog) + return p
    + +
    [docs] @classmethod + def opt_with_frequency_flattener(cls, + qchem_command, + multimode="openmp", + input_file="mol.qin", + output_file="mol.qout", + qclog_file="mol.qclog", + max_iterations=10, + max_molecule_perturb_scale=0.3, + reversed_direction=False, + ignore_connectivity=False, + **QCJob_kwargs): + """ + Optimize a structure and calculate vibrational frequencies to check if the + structure is in a true minima. If a frequency is negative, iteratively + perturbe the geometry, optimize, and recalculate frequencies until all are + positive, aka a true minima has been found. + + Args: + qchem_command (str): Command to run QChem. + multimode (str): Parallelization scheme, either openmp or mpi. + input_file (str): Name of the QChem input file. + output_file (str): Name of the QChem output file + max_iterations (int): Number of perturbation -> optimization -> frequency + iterations to perform. Defaults to 10. + max_molecule_perturb_scale (float): The maximum scaled perturbation that + can be applied to the molecule. Defaults to 0.3. + reversed_direction (bool): Whether to reverse the direction of the + vibrational frequency vectors. Defaults to False. + ignore_connectivity (bool): Whether to ignore differences in connectivity + introduced by structural perturbation. Defaults to False. + **QCJob_kwargs: Passthrough kwargs to QCJob. See + :class:`custodian.qchem.new_jobs.QCJob`. + """ + + min_molecule_perturb_scale = 0.1 + scale_grid = 10 + perturb_scale_grid = ( + max_molecule_perturb_scale - min_molecule_perturb_scale + ) / scale_grid + msc = MoleculeStructureComparator() + + if not os.path.exists(input_file): + raise AssertionError('Input file must be present!') + orig_opt_input = QCInput.from_file(input_file) + orig_opt_rem = copy.deepcopy(orig_opt_input.rem) + orig_freq_rem = copy.deepcopy(orig_opt_input.rem) + orig_freq_rem["job_type"] = "freq" + + for ii in range(max_iterations): + yield (QCJob( + qchem_command=qchem_command, + multimode=multimode, + input_file=input_file, + output_file=output_file, + qclog_file=qclog_file, + suffix=".opt_" + str(ii), + **QCJob_kwargs)) + opt_outdata = QCOutput(output_file + ".opt_" + str(ii)).data + freq_QCInput = QCInput( + molecule=opt_outdata.get("molecule_from_optimized_geometry"), + rem=orig_freq_rem, + opt=orig_opt_input.opt, + pcm=orig_opt_input.pcm, + solvent=orig_opt_input.solvent) + freq_QCInput.write_file(input_file) + yield (QCJob( + qchem_command=qchem_command, + multimode=multimode, + input_file=input_file, + output_file=output_file, + qclog_file=qclog_file, + suffix=".freq_" + str(ii), + **QCJob_kwargs)) + outdata = QCOutput(output_file + ".freq_" + str(ii)).data + errors = outdata.get("errors") + if len(errors) != 0: + raise AssertionError('No errors should be encountered while flattening frequencies!') + if outdata.get('frequencies')[0] > 0.0: + print("All frequencies positive!") + break + else: + negative_freq_vecs = outdata.get("frequency_mode_vectors")[0] + old_coords = outdata.get("initial_geometry") + old_molecule = outdata.get("initial_molecule") + structure_successfully_perturbed = False + + for molecule_perturb_scale in np.arange( + max_molecule_perturb_scale, min_molecule_perturb_scale, + -perturb_scale_grid): + new_coords = perturb_coordinates( + old_coords=old_coords, + negative_freq_vecs=negative_freq_vecs, + molecule_perturb_scale=molecule_perturb_scale, + reversed_direction=reversed_direction) + new_molecule = Molecule( + species=outdata.get('species'), + coords=new_coords, + charge=outdata.get('charge'), + spin_multiplicity=outdata.get('multiplicity')) + if msc.are_equal(old_molecule, new_molecule) or ignore_connectivity: + structure_successfully_perturbed = True + break + if not structure_successfully_perturbed: + raise Exception( + "Unable to perturb coordinates to remove negative frequency without changing the bonding structure" + ) + + new_opt_QCInput = QCInput( + molecule=new_molecule, + rem=orig_opt_rem, + opt=orig_opt_input.opt, + pcm=orig_opt_input.pcm, + solvent=orig_opt_input.solvent) + new_opt_QCInput.write_file(input_file)
    + + +
    [docs]def perturb_coordinates(old_coords, negative_freq_vecs, molecule_perturb_scale, + reversed_direction): + max_dis = max( + [math.sqrt(sum([x**2 for x in vec])) for vec in negative_freq_vecs]) + scale = molecule_perturb_scale / max_dis + normalized_vecs = [[x * scale for x in vec] for vec in negative_freq_vecs] + direction = 1.0 + if reversed_direction: + direction = -1.0 + return [[c + v * direction for c, v in zip(coord, vec)] + for coord, vec in zip(old_coords, normalized_vecs)]
    +
    + +
    +
    +
    + +
    +
    + + + + + + \ No newline at end of file diff --git a/docs/_modules/custodian/utils.html b/docs/_modules/custodian/utils.html index 75813a6b..87735457 100644 --- a/docs/_modules/custodian/utils.html +++ b/docs/_modules/custodian/utils.html @@ -6,10 +6,10 @@ - custodian.utils — custodian 2018.3.10 documentation + custodian.utils — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -88,8 +88,8 @@

    Source code for custodian.utils

         logging.info("Backing up run to {}.".format(filename))
         with tarfile.open(filename, "w:gz") as tar:
             for fname in filenames:
    -            for f in glob(fname):
    - tar.add(f) + for f in glob(fname): + tar.add(f)
    [docs]def get_execution_host_info(): @@ -107,8 +107,8 @@

    Source code for custodian.utils

                 import socket
                 host = host or socket.gethostname()
             except:
    -            pass
    - return host or 'unknown', cluster or 'unknown' + pass + return host or 'unknown', cluster or 'unknown'
    diff --git a/docs/_modules/custodian/vasp/handlers.html b/docs/_modules/custodian/vasp/handlers.html index 05b97b77..d7807e70 100644 --- a/docs/_modules/custodian/vasp/handlers.html +++ b/docs/_modules/custodian/vasp/handlers.html @@ -6,10 +6,10 @@ - custodian.vasp.handlers — custodian 2018.3.10 documentation + custodian.vasp.handlers — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -195,8 +195,8 @@

    Source code for custodian.vasp.handlers

                                     # e-density (brmix error)
                                     if err == "brmix" and 'NELECT' in incar:
                                         continue
    -                                self.errors.add(err)
    - return len(self.errors) > 0 + self.errors.add(err) + return len(self.errors) > 0
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -452,8 +452,8 @@

    Source code for custodian.vasp.handlers

                 actions.append({"dict": "INCAR",
                                 "action": {"_set": {"SYMPREC": 1e-6}}})
     
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": list(self.errors), "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": list(self.errors), "actions": actions}
    [docs]class LrfCommutatorHandler(ErrorHandler): @@ -491,8 +491,8 @@

    Source code for custodian.vasp.handlers

                     for err, msgs in LrfCommutatorHandler.error_msgs.items():
                         for msg in msgs:
                             if l.find(msg) != -1:
    -                            self.errors.add(err)
    - return len(self.errors) > 0 + self.errors.add(err) + return len(self.errors) > 0
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -506,8 +506,8 @@

    Source code for custodian.vasp.handlers

                         actions.append({"dict": "INCAR",
                                         "action": {"_set": {"LPEAD": True}}})
     
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": list(self.errors), "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": list(self.errors), "actions": actions}
    [docs]class StdErrHandler(ErrorHandler): @@ -547,8 +547,8 @@

    Source code for custodian.vasp.handlers

                     for err, msgs in StdErrHandler.error_msgs.items():
                         for msg in msgs:
                             if l.find(msg) != -1:
    -                            self.errors.add(err)
    - return len(self.errors) > 0 + self.errors.add(err) + return len(self.errors) > 0
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -571,8 +571,8 @@

    Source code for custodian.vasp.handlers

                     actions.append({"dict": "INCAR",
                                     "action": {"_set": {"KPAR": reduced_kpar}}})
     
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": list(self.errors), "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": list(self.errors), "actions": actions}
    [docs]class AliasingErrorHandler(ErrorHandler): @@ -618,8 +618,8 @@

    Source code for custodian.vasp.handlers

                                 # density (brmix error)
                                 if err == "brmix" and 'NELECT' in incar:
                                     continue
    -                            self.errors.add(err)
    - return len(self.errors) > 0 + self.errors.add(err) + return len(self.errors) > 0
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -663,8 +663,8 @@

    Source code for custodian.vasp.handlers

                                      "action": {
                                          "_file_delete": {'mode': "actual"}}}])
     
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": list(self.errors), "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": list(self.errors), "actions": actions}
    [docs]class DriftErrorHandler(ErrorHandler): @@ -701,8 +701,8 @@

    Source code for custodian.vasp.handlers

                 return False
             else:
                 curr_drift = outcar.data.get("drift", [])[::-1][:self.to_average]
    -            curr_drift = np.average([np.linalg.norm(d) for d in curr_drift])
    - return curr_drift > self.max_drift + curr_drift = np.average([np.linalg.norm(d) for d in curr_drift]) + return curr_drift > self.max_drift
    [docs] def correct(self): backup(VASP_BACKUP_FILES) @@ -734,8 +734,8 @@

    Source code for custodian.vasp.handlers

     
             curr_drift = outcar.data.get("drift", [])[::-1][:self.to_average]
             curr_drift = np.average([np.linalg.norm(d) for d in curr_drift])
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": "Excessive drift {} > {}".format(curr_drift, self.max_drift), "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": "Excessive drift {} > {}".format(curr_drift, self.max_drift), "actions": actions}
    [docs]class MeshSymmetryErrorHandler(ErrorHandler): @@ -785,8 +785,8 @@

    Source code for custodian.vasp.handlers

                 for line in f:
                     l = line.strip()
                     if l.find(msg) != -1:
    -                    return True
    - return False + return True + return False
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -797,8 +797,8 @@

    Source code for custodian.vasp.handlers

                 m += m % 2
             actions = [{"dict": "KPOINTS",
                         "action": {"_set": {"kpoints": [[m] * 3]}}}]
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": ["mesh_symmetry"], "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": ["mesh_symmetry"], "actions": actions}
    [docs]class UnconvergedErrorHandler(ErrorHandler): @@ -823,8 +823,8 @@

    Source code for custodian.vasp.handlers

                 if not v.converged:
                     return True
             except:
    -            pass
    - return False + pass + return False
    [docs] def correct(self): backup(VASP_BACKUP_FILES) @@ -851,8 +851,8 @@

    Source code for custodian.vasp.handlers

             if not v.converged_ionic:
                 actions.append({"dict": "INCAR",
                                 "action": {"_set": {"IBRION": 1}}})
    -        VaspModder().apply_actions(actions)
    - return {"errors": ["Unconverged"], "actions": actions} + VaspModder().apply_actions(actions) + return {"errors": ["Unconverged"], "actions": actions}
    [docs]class MaxForceErrorHandler(ErrorHandler): @@ -884,8 +884,8 @@

    Source code for custodian.vasp.handlers

                 if max_force > self.max_force_threshold and v.converged is True:
                     return True
             except:
    -            pass
    - return False + pass + return False
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -897,8 +897,8 @@

    Source code for custodian.vasp.handlers

                        {"dict": "INCAR",
                         "action": {"_set": {"EDIFFG": ediffg * 0.5}}}]
             VaspModder(vi=vi).apply_actions(actions)
    -
    - return {"errors": ["MaxForce"], "actions": actions} + + return {"errors": ["MaxForce"], "actions": actions}
    [docs]class PotimErrorHandler(ErrorHandler): @@ -934,8 +934,8 @@

    Source code for custodian.vasp.handlers

                 max_dE = max([s['dE'] for s in oszicar.ionic_steps[1:]]) / n
                 if max_dE > self.dE_threshold:
                     return True
    -        except:
    - return False + except: + return False
    [docs] def correct(self): backup(VASP_BACKUP_FILES) @@ -950,8 +950,8 @@

    Source code for custodian.vasp.handlers

                 actions = [{"dict": "INCAR",
                             "action": {"_set": {"POTIM": potim * 0.5}}}]
     
    -        VaspModder(vi=vi).apply_actions(actions)
    - return {"errors": ["POTIM"], "actions": actions} + VaspModder(vi=vi).apply_actions(actions) + return {"errors": ["POTIM"], "actions": actions}
    [docs]class FrozenJobErrorHandler(ErrorHandler): @@ -980,8 +980,8 @@

    Source code for custodian.vasp.handlers

     
     
    [docs] def check(self): st = os.stat(self.output_filename) - if time.time() - st.st_mtime > self.timeout:
    - return True + if time.time() - st.st_mtime > self.timeout: + return True
    [docs] def correct(self): backup(VASP_BACKUP_FILES | {self.output_filename}) @@ -993,8 +993,8 @@

    Source code for custodian.vasp.handlers

                                 "action": {"_set": {"ALGO": "Normal"}}})
     
             VaspModder(vi=vi).apply_actions(actions)
    -
    - return {"errors": ["Frozen job"], "actions": actions} + + return {"errors": ["Frozen job"], "actions": actions}
    [docs]class NonConvergingErrorHandler(ErrorHandler): @@ -1033,8 +1033,8 @@

    Source code for custodian.vasp.handlers

                     return all([len(e) == nelm
                                 for e in esteps[-(self.nionic_steps + 1):-1]])
             except:
    -            pass
    - return False + pass + return False
    [docs] def correct(self): # if change_algo is True, change ALGO = Fast to Normal if ALGO is @@ -1072,8 +1072,8 @@

    Source code for custodian.vasp.handlers

                 return {"errors": ["Non-converging job"], "actions": actions}
     
             # Unfixable error. Just return None for actions.
    -        else:
    - return {"errors": ["Non-converging job"], "actions": None} + else: + return {"errors": ["Non-converging job"], "actions": None}
    [docs]class WalltimeHandler(ErrorHandler): @@ -1167,8 +1167,8 @@

    Source code for custodian.vasp.handlers

                 time_left = self.wall_time - total_secs
                 if time_left < max(time_per_step * 3, self.buffer_time):
                     return True
    -
    - return False + + return False
    [docs] def correct(self): @@ -1180,8 +1180,8 @@

    Source code for custodian.vasp.handlers

     
             m = Modder(actions=[FileActions])
             for a in actions:
    -            m.modify(a["action"], a["file"])
    - return {"errors": ["Walltime reached"], "actions": None} + m.modify(a["action"], a["file"]) + return {"errors": ["Walltime reached"], "actions": None} @deprecated(replacement=WalltimeHandler) @@ -1223,8 +1223,8 @@

    Source code for custodian.vasp.handlers

             run_time = datetime.datetime.now() - self.start_time
             total_secs = run_time.seconds + run_time.days * 3600 * 24
             if total_secs > self.interval:
    -            return True
    - return False + return True + return False
    [docs] def correct(self): content = "LSTOP = .TRUE." @@ -1244,11 +1244,11 @@

    Source code for custodian.vasp.handlers

     
             # Reset the clock.
             self.start_time = datetime.datetime.now()
    -
    - return {"errors": ["Checkpoint reached"], "actions": actions} - def __str__(self):
    - return "CheckpointHandler with interval %d" % self.interval + return {"errors": ["Checkpoint reached"], "actions": actions} + + def __str__(self): + return "CheckpointHandler with interval %d" % self.interval
    [docs]class StoppedRunHandler(ErrorHandler): @@ -1271,8 +1271,8 @@

    Source code for custodian.vasp.handlers

         def __init__(self):
             pass
     
    -
    [docs] def check(self):
    - return os.path.exists("chkpt.yaml") +
    [docs] def check(self): + return os.path.exists("chkpt.yaml")
    [docs] def correct(self): d = loadfn("chkpt.yaml") @@ -1289,8 +1289,8 @@

    Source code for custodian.vasp.handlers

     
             actions.append({"Checkpoint": name})
     
    -        return {"errors": ["Stopped run."],
    - "actions": actions} + return {"errors": ["Stopped run."], + "actions": actions}
    [docs]class PositiveEnergyErrorHandler(ErrorHandler): @@ -1316,8 +1316,8 @@

    Source code for custodian.vasp.handlers

                 if oszicar.final_energy > 0:
                     return True
             except:
    -            pass
    - return False + pass + return False
    [docs] def correct(self): # change ALGO = Fast to Normal if ALGO is !Normal @@ -1330,8 +1330,8 @@

    Source code for custodian.vasp.handlers

                 VaspModder(vi=vi).apply_actions(actions)
                 return {"errors": ["Positive energy"], "actions": actions}
             # Unfixable error. Just return None for actions.
    -        else:
    - return {"errors": ["Positive energy"], "actions": None} + else: + return {"errors": ["Positive energy"], "actions": None} diff --git a/docs/_modules/custodian/vasp/interpreter.html b/docs/_modules/custodian/vasp/interpreter.html index b97164fd..3f8a0277 100644 --- a/docs/_modules/custodian/vasp/interpreter.html +++ b/docs/_modules/custodian/vasp/interpreter.html @@ -6,10 +6,10 @@ - custodian.vasp.interpreter — custodian 2018.3.10 documentation + custodian.vasp.interpreter — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -98,8 +98,8 @@

    Source code for custodian.vasp.interpreter

                     self.modify(a["action"], a["file"])
                 else:
                     raise ValueError("Unrecognized format: {}".format(a))
    -        for f in modified:
    - self.vi[f].write_file(f) + for f in modified: + self.vi[f].write_file(f) diff --git a/docs/_modules/custodian/vasp/jobs.html b/docs/_modules/custodian/vasp/jobs.html index d3a37008..fdb47962 100644 --- a/docs/_modules/custodian/vasp/jobs.html +++ b/docs/_modules/custodian/vasp/jobs.html @@ -6,10 +6,10 @@ - custodian.vasp.jobs — custodian 2018.3.10 documentation + custodian.vasp.jobs — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -57,7 +57,6 @@

    Source code for custodian.vasp.jobs

     import shutil
     import math
     import logging
    -import itertools
     
     import numpy as np
     
    @@ -237,8 +236,8 @@ 

    Source code for custodian.vasp.jobs

                         actions = self.auto_continue
                     dumpfn({"actions": actions}, "continue.json")
     
    -        if self.settings_override is not None:
    - VaspModder().apply_actions(self.settings_override) + if self.settings_override is not None: + VaspModder().apply_actions(self.settings_override)
    [docs] def run(self): """ @@ -262,8 +261,8 @@

    Source code for custodian.vasp.jobs

             with open(self.output_file, 'w') as f_std, \
                     open(self.stderr_file, "w", buffering=1) as f_err:
                 # use line buffering for stderr
    -            p = subprocess.Popen(cmd, stdout=f_std, stderr=f_err)
    - return p + p = subprocess.Popen(cmd, stdout=f_std, stderr=f_err) + return p
    [docs] def postprocess(self): """ @@ -289,8 +288,8 @@

    Source code for custodian.vasp.jobs

     
             # Remove continuation so if a subsequent job is run in
             # the same directory, will not restart this job.
    -        if os.path.exists("continue.json"):
    - os.remove("continue.json") + if os.path.exists("continue.json"): + os.remove("continue.json")
    [docs] @classmethod def double_relaxation_run(cls, vasp_cmd, auto_npar=True, ediffg=-0.05, @@ -346,8 +345,8 @@

    Source code for custodian.vasp.jobs

                             auto_npar=auto_npar, auto_continue=auto_continue,
                             settings_override=settings_overide_1),
                     VaspJob(vasp_cmd, final=True, backup=False, suffix=".relax2",
    -                        auto_npar=auto_npar, auto_continue=auto_continue,
    - settings_override=settings_overide_2)] + auto_npar=auto_npar, auto_continue=auto_continue, + settings_override=settings_overide_2)]
    [docs] @classmethod def metagga_opt_run(cls, vasp_cmd, auto_npar=True, ediffg=-0.05, @@ -391,8 +390,8 @@

    Source code for custodian.vasp.jobs

             if jobs[1].settings_override:
                 post_opt_settings = jobs[1].settings_override + post_opt_settings
             jobs[1].settings_override = post_opt_settings
    -
    - return jobs + + return jobs
    [docs] @classmethod def full_opt_run(cls, vasp_cmd, vol_change_tol=0.02, @@ -460,8 +459,8 @@

    Source code for custodian.vasp.jobs

                                              "action": {"_set": orig_kpts_dict}})
                 logger.info("Generating job = %d!" % (i+1))
                 yield VaspJob(vasp_cmd, final=False, backup=backup,
    -                          suffix=".relax%d" % (i+1), settings_override=settings,
    - **vasp_job_kwargs) + suffix=".relax%d" % (i+1), settings_override=settings, + **vasp_job_kwargs)
    [docs] @classmethod def constrained_opt_run(cls, vasp_cmd, lattice_direction, initial_strain, @@ -638,8 +637,16 @@

    Source code for custodian.vasp.jobs

     
             with open("EOS.txt", "wt") as f:
                 f.write("# %s energy\n" % lattice_direction)
    -            for k in sorted(energies.keys()):
    - f.write("%f %f\n" % (k, energies[k])) + for k in sorted(energies.keys()): + f.write("%f %f\n" % (k, energies[k])) + +
    [docs] def terminate(self): + for k in self.vasp_cmd: + if "vasp" in k: + try: + os.system("killall %s" % k) + except: + pass
    [docs]class VaspNEBJob(Job): @@ -784,8 +791,8 @@

    Source code for custodian.vasp.jobs

                     poscar = os.path.join(path, "POSCAR")
                     shutil.copy(contcar, poscar)
     
    -        if self.settings_override is not None:
    - VaspModder().apply_actions(self.settings_override) + if self.settings_override is not None: + VaspModder().apply_actions(self.settings_override)
    [docs] def run(self): """ @@ -809,8 +816,8 @@

    Source code for custodian.vasp.jobs

                     open(self.stderr_file, "w", buffering=1) as f_err:
     
                 # Use line buffering for stderr
    -            p = subprocess.Popen(cmd, stdout=f_std, stderr=f_err)
    - return p + p = subprocess.Popen(cmd, stdout=f_std, stderr=f_err) + return p
    [docs] def postprocess(self): """ @@ -831,8 +838,8 @@

    Source code for custodian.vasp.jobs

                 if os.path.exists(f):
                     if self.final and self.suffix != "":
                         shutil.move(f, "{}{}".format(f, self.suffix))
    -                elif self.suffix != "":
    - shutil.copy(f, "{}{}".format(f, self.suffix)) + elif self.suffix != "": + shutil.copy(f, "{}{}".format(f, self.suffix))
    [docs]class GenerateVaspInputJob(Job): @@ -852,8 +859,8 @@

    Source code for custodian.vasp.jobs

             self.contcar_only = contcar_only
             self.kwargs = kwargs
     
    -
    [docs] def setup(self):
    - pass +
    [docs] def setup(self): + pass
    [docs] def run(self): if os.path.exists("CONTCAR"): @@ -864,11 +871,11 @@

    Source code for custodian.vasp.jobs

                 raise RuntimeError("No CONTCAR/POSCAR detected to generate input!")
             modname, classname = self.input_set.rsplit(".", 1)
             mod = __import__(modname, globals(), locals(), [classname], 0)
    -        vis = getattr(mod, classname)(structure, **self.kwargs)
    - vis.write_input(".") + vis = getattr(mod, classname)(structure, **self.kwargs) + vis.write_input(".")
    -
    [docs] def postprocess(self):
    - pass +
    [docs] def postprocess(self): + pass
    diff --git a/docs/_modules/custodian/vasp/validators.html b/docs/_modules/custodian/vasp/validators.html index 1f4927f9..2f639abb 100644 --- a/docs/_modules/custodian/vasp/validators.html +++ b/docs/_modules/custodian/vasp/validators.html @@ -6,10 +6,10 @@ - custodian.vasp.validators — custodian 2018.3.10 documentation + custodian.vasp.validators — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -69,8 +69,8 @@

    Source code for custodian.vasp.validators

             try:
                 Vasprun("vasprun.xml")
             except:
    -            return True
    - return False + return True + return False
    [docs]class VaspFilesValidator(Validator): @@ -85,8 +85,8 @@

    Source code for custodian.vasp.validators

     
    [docs] def check(self): for vfile in ["CONTCAR", "OSZICAR", "OUTCAR"]: if not os.path.exists(vfile): - return True
    - return False + return True + return False
    [docs]class VaspNpTMDValidator(Validator): @@ -109,8 +109,8 @@

    Source code for custodian.vasp.validators

             outcar.read_pattern(patterns=patterns)
             if outcar.data["MDALGO"] == [['3']]:
                 return False
    -        else:
    - return True + else: + return True diff --git a/docs/_modules/index.html b/docs/_modules/index.html index 8e1f58b4..10085ebe 100644 --- a/docs/_modules/index.html +++ b/docs/_modules/index.html @@ -6,10 +6,10 @@ - Overview: module code — custodian 2018.3.10 documentation + Overview: module code — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -63,6 +63,8 @@

    All modules for which code is available

  • custodian.nwchem.jobs
  • custodian.qchem.handlers
  • custodian.qchem.jobs
  • +
  • custodian.qchem.new_handlers
  • +
  • custodian.qchem.new_jobs
  • custodian.utils
  • custodian.vasp.handlers
  • custodian.vasp.interpreter
  • diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js index 0c15c009..d8928926 100644 --- a/docs/_static/doctools.js +++ b/docs/_static/doctools.js @@ -70,7 +70,9 @@ jQuery.fn.highlightText = function(text, className) { if (node.nodeType === 3) { var val = node.nodeValue; var pos = val.toLowerCase().indexOf(text); - if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { var span; var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); if (isInSVG) { diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 51e810d5..a5ba9eca 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { - URL_ROOT: '', - VERSION: '2018.3.10', + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '2018.6.11', LANGUAGE: 'None', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', diff --git a/docs/_themes/README.html b/docs/_themes/README.html index e84e5a4a..f9c9e0cb 100644 --- a/docs/_themes/README.html +++ b/docs/_themes/README.html @@ -6,10 +6,10 @@ - krTheme Sphinx Style — custodian 2018.3.10 documentation + krTheme Sphinx Style — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/changelog.html b/docs/changelog.html index b9c23da0..02c64d6c 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -6,10 +6,10 @@ - Change Log — custodian 2018.3.10 documentation + Change Log — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/custodian.ansible.html b/docs/custodian.ansible.html index 618dcf01..50bf040f 100644 --- a/docs/custodian.ansible.html +++ b/docs/custodian.ansible.html @@ -6,10 +6,10 @@ - custodian.ansible package — custodian 2018.3.10 documentation + custodian.ansible package — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -83,52 +83,52 @@

    Submodules
    -static add_to_set(settings)[source]
    +static add_to_set(input_dict, settings)[source]
    -static inc(settings)[source]
    +static inc(input_dict, settings)[source]
    -static pop(settings)[source]
    +static pop(input_dict, settings)[source]
    -static pull(settings)[source]
    +static pull(input_dict, settings)[source]
    -static pull_all(settings)[source]
    +static pull_all(input_dict, settings)[source]
    -static push(settings)[source]
    +static push(input_dict, settings)[source]
    -static push_all(settings)[source]
    +static push_all(input_dict, settings)[source]
    -static rename(settings)[source]
    +static rename(input_dict, settings)[source]
    -static set(settings)[source]
    +static set(input_dict, settings)[source]
    -static unset(settings)[source]
    +static unset(input_dict, settings)[source]
    @@ -142,7 +142,7 @@

    Submodules
    -static file_copy(settings)[source]
    +static file_copy(filename, settings)[source]

    Copies a file. {‘_file_copy’: {‘dest’: ‘new_file_name’}}

    @@ -160,7 +160,7 @@

    Submodules
    -static file_create(settings)[source]
    +static file_create(filename, settings)[source]

    Creates a file.

    @@ -178,7 +178,7 @@

    Submodules
    -static file_delete(settings)[source]
    +static file_delete(filename, settings)[source]

    Deletes a file. {‘_file_delete’: {‘mode’: “actual”}}

    @@ -197,7 +197,7 @@

    Submodules
    -static file_modify(settings)[source]
    +static file_modify(filename, settings)[source]

    Modifies file access

    @@ -215,7 +215,7 @@

    Submodules
    -static file_move(settings)[source]
    +static file_move(filename, settings)[source]

    Moves a file. {‘_file_move’: {‘dest’: ‘new_file_name’}}

    diff --git a/docs/custodian.cli.html b/docs/custodian.cli.html index 3c950c02..e8a4d959 100644 --- a/docs/custodian.cli.html +++ b/docs/custodian.cli.html @@ -6,10 +6,10 @@ - custodian.cli package — custodian 2018.3.10 documentation + custodian.cli package — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/custodian.feff.html b/docs/custodian.feff.html index cc941624..927e6483 100644 --- a/docs/custodian.feff.html +++ b/docs/custodian.feff.html @@ -6,10 +6,10 @@ - custodian.feff package — custodian 2018.3.10 documentation + custodian.feff package — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -49,6 +49,11 @@

    Navigation

    custodian.feff package

    +
    +

    Subpackages

    +
    +
    +

    Submodules

    @@ -215,6 +220,7 @@

    SubmodulesTable Of Contents

    @@ -73,6 +73,17 @@

    SubpackagesModule contents +
  • custodian.feff package +
  • custodian.nwchem package
  • @@ -418,6 +431,11 @@

    Submodules +
    +terminate()[source]
    +
    +
    diff --git a/docs/custodian.nwchem.html b/docs/custodian.nwchem.html index 2d504c86..4e4c93b2 100644 --- a/docs/custodian.nwchem.html +++ b/docs/custodian.nwchem.html @@ -6,10 +6,10 @@ - custodian.nwchem package — custodian 2018.3.10 documentation + custodian.nwchem package — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/custodian.qchem.html b/docs/custodian.qchem.html index 35a0c418..bb228fff 100644 --- a/docs/custodian.qchem.html +++ b/docs/custodian.qchem.html @@ -6,10 +6,10 @@ - custodian.qchem package — custodian 2018.3.10 documentation + custodian.qchem package — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -240,7 +240,7 @@

    Submodules
    -static is_openmp_compatible()[source]
    +static is_openmp_compatible(qcinp)[source]

    @@ -292,6 +292,242 @@

    Submodules +

    custodian.qchem.new_handlers module

    +
    +
    +class QChemErrorHandler(input_file='mol.qin', output_file='mol.qout', scf_max_cycles=200, geom_max_cycles=200)[source]
    +

    Bases: custodian.custodian.ErrorHandler

    +

    Master QChemErrorHandler class that handles a number of common errors +that occur during QChem runs.

    +

    Initializes the error handler from a set of input and output files.

    +

    +++ + + + +
    Parameters:
      +
    • input_file (str) – Name of the QChem input file.
    • +
    • output_file (str) – Name of the QChem output file.
    • +
    • scf_max_cycles (int) – The max iterations to set to fix SCF failure.
    • +
    • geom_max_cycles (int) – The max iterations to set to fix geometry +optimization failure.
    • +
    +
    +
    +
    +check()[source]
    +

    This method is called during the job (for monitors) or at the end of +the job to check for errors.

    + +++ + + + +
    Returns:(bool) Indicating if errors are detected.
    +
    + +
    +
    +correct()[source]
    +

    This method is called at the end of a job when an error is detected. +It should perform any corrective measures relating to the detected +error.

    + +++ + + + +
    Returns:(dict) JSON serializable dict that describes the errors and +actions taken. E.g. +{“errors”: list_of_errors, “actions”: list_of_actions_taken}. +If this is an unfixable error, actions should be set to None.
    +
    + +
    +
    +is_monitor = False
    +
    + +
    + +
    +
    +class QChemSCFErrorHandler(input_file='mol.qin', output_file='mol.qout', rca_gdm_thresh=0.001, scf_max_cycles=200)[source]
    +

    Bases: custodian.custodian.ErrorHandler

    +

    QChem ErrorHandler class that addresses SCF non-convergence.

    +

    Initializes the error handler from a set of input and output files.

    + +++ + + + +
    Parameters:
      +
    • input_file (str) – Name of the QChem input file.
    • +
    • output_file (str) – Name of the QChem output file.
    • +
    • rca_gdm_thresh (float) – The threshold for the prior scf algorithm. +If last deltaE is larger than the threshold try RCA_DIIS +first, else, try DIIS_GDM first.
    • +
    • scf_max_cycles (int) – The max iterations to set to fix SCF failure.
    • +
    +
    +
    +
    +check()[source]
    +

    This method is called during the job (for monitors) or at the end of +the job to check for errors.

    + +++ + + + +
    Returns:(bool) Indicating if errors are detected.
    +
    + +
    +
    +correct()[source]
    +

    This method is called at the end of a job when an error is detected. +It should perform any corrective measures relating to the detected +error.

    + +++ + + + +
    Returns:(dict) JSON serializable dict that describes the errors and +actions taken. E.g. +{“errors”: list_of_errors, “actions”: list_of_actions_taken}. +If this is an unfixable error, actions should be set to None.
    +
    + +
    +
    +is_monitor = False
    +
    + +
    + + +
    +

    custodian.qchem.new_jobs module

    +
    +
    +class QCJob(qchem_command, multimode='openmp', input_file='mol.qin', output_file='mol.qout', max_cores=32, qclog_file='mol.qclog', suffix='', scratch_dir='/dev/shm/qcscratch/', save_scratch=False, save_name='default_save_name')[source]
    +

    Bases: custodian.custodian.Job

    +

    A basic QChem Job.

    + +++ + + + +
    Parameters:
      +
    • qchem_command (str) – Command to run QChem.
    • +
    • multimode (str) – Parallelization scheme, either openmp or mpi.
    • +
    • input_file (str) – Name of the QChem input file.
    • +
    • output_file (str) – Name of the QChem output file.
    • +
    • max_cores (int) – Maximum number of cores to parallelize over. +Defaults to 32.
    • +
    • qclog_file (str) – Name of the file to redirect the standard output +to. None means not to record the standard output. Defaults to +None.
    • +
    • suffix (str) – String to append to the file in postprocess.
    • +
    • scratch_dir (str) – QCSCRATCH directory. Defaults to “/dev/shm/qcscratch/”.
    • +
    • save_scratch (bool) – Whether to save scratch directory contents. +Defaults to False.
    • +
    • save_name (str) – Name of the saved scratch directory. Defaults to +to “default_save_name”.
    • +
    +
    +
    +
    +current_command
    +
    + +
    +
    +classmethod opt_with_frequency_flattener(qchem_command, multimode='openmp', input_file='mol.qin', output_file='mol.qout', qclog_file='mol.qclog', max_iterations=10, max_molecule_perturb_scale=0.3, reversed_direction=False, ignore_connectivity=False, **QCJob_kwargs)[source]
    +

    Optimize a structure and calculate vibrational frequencies to check if the +structure is in a true minima. If a frequency is negative, iteratively +perturbe the geometry, optimize, and recalculate frequencies until all are +positive, aka a true minima has been found.

    + +++ + + + +
    Parameters:
      +
    • qchem_command (str) – Command to run QChem.
    • +
    • multimode (str) – Parallelization scheme, either openmp or mpi.
    • +
    • input_file (str) – Name of the QChem input file.
    • +
    • output_file (str) – Name of the QChem output file
    • +
    • max_iterations (int) – Number of perturbation -> optimization -> frequency +iterations to perform. Defaults to 10.
    • +
    • max_molecule_perturb_scale (float) – The maximum scaled perturbation that +can be applied to the molecule. Defaults to 0.3.
    • +
    • reversed_direction (bool) – Whether to reverse the direction of the +vibrational frequency vectors. Defaults to False.
    • +
    • ignore_connectivity (bool) – Whether to ignore differences in connectivity +introduced by structural perturbation. Defaults to False.
    • +
    • **QCJob_kwargs – Passthrough kwargs to QCJob. See +custodian.qchem.new_jobs.QCJob.
    • +
    +
    +
    + +
    +
    +postprocess()[source]
    +

    This method is called at the end of a job, after error detection. +This allows post-processing, such as cleanup, analysis of results, +etc.

    +
    + +
    +
    +run()[source]
    +

    Perform the actual QChem run.

    + +++ + + + +
    Returns:(subprocess.Popen) Used for monitoring.
    +
    + +
    +
    +setup()[source]
    +

    This method is run before the start of a job. Allows for some +pre-processing.

    +
    + +
    + +
    +
    +perturb_coordinates(old_coords, negative_freq_vecs, molecule_perturb_scale, reversed_direction)[source]
    +
    +

    Module contents

    @@ -311,6 +547,8 @@

    Table Of Contents

  • Submodules
  • custodian.qchem.handlers module
  • custodian.qchem.jobs module
  • +
  • custodian.qchem.new_handlers module
  • +
  • custodian.qchem.new_jobs module
  • Module contents
  • diff --git a/docs/custodian.vasp.html b/docs/custodian.vasp.html index 0f7aebe8..6caf2293 100644 --- a/docs/custodian.vasp.html +++ b/docs/custodian.vasp.html @@ -6,10 +6,10 @@ - custodian.vasp package — custodian 2018.3.10 documentation + custodian.vasp package — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - +
    @@ -1352,6 +1352,11 @@

    Submodules +
    +terminate()[source]
    +
    +
    diff --git a/docs/genindex.html b/docs/genindex.html index d3c96373..5f111755 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -7,10 +7,10 @@ - Index — custodian 2018.3.10 documentation + Index — custodian 2018.6.11 documentation - + @@ -39,7 +39,7 @@

    Navigation

  • modules |
  • - + @@ -64,10 +64,12 @@

    Index

    | L | M | N + | O | P | Q | R | S + | T | U | V | W @@ -137,7 +139,9 @@

    C

  • (PotimErrorHandler method)
  • -
  • (QChemErrorHandler method) +
  • (QChemErrorHandler method), [1] +
  • +
  • (QChemSCFErrorHandler method)
  • (StdErrHandler method)
  • @@ -189,7 +193,9 @@

    C

  • (PotimErrorHandler method)
  • -
  • (QChemErrorHandler method) +
  • (QChemErrorHandler method), [1] +
  • +
  • (QChemSCFErrorHandler method)
  • (StdErrHandler method)
  • @@ -204,6 +210,8 @@

    C

    +

    O

    + + +
    +

    P

    +

    T

    + + +
    +

    U

    + + + + + +
    diff --git a/docs/modules.html b/docs/modules.html index d5760df8..a092a62f 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -6,10 +6,10 @@ - custodian — custodian 2018.3.10 documentation + custodian — custodian 2018.6.11 documentation - + @@ -38,7 +38,7 @@

    Navigation

  • modules |
  • - + @@ -73,6 +73,17 @@

    custodianModule contents +
  • custodian.feff package +
  • custodian.nwchem package
  • diff --git a/docs/objects.inv b/docs/objects.inv index fdc74006..4b312c5a 100644 Binary files a/docs/objects.inv and b/docs/objects.inv differ diff --git a/docs/py-modindex.html b/docs/py-modindex.html index c36594c7..9accb98f 100644 --- a/docs/py-modindex.html +++ b/docs/py-modindex.html @@ -6,10 +6,10 @@ - Python Module Index — custodian 2018.3.10 documentation + Python Module Index — custodian 2018.6.11 documentation - + @@ -41,7 +41,7 @@

    Navigation

  • modules |
  • - + @@ -167,6 +167,16 @@

    Python Module Index

        custodian.qchem.jobs
        + custodian.qchem.new_handlers +
        + custodian.qchem.new_jobs +
        diff --git a/docs/search.html b/docs/search.html index 5129d4b8..f0e8a0eb 100644 --- a/docs/search.html +++ b/docs/search.html @@ -6,10 +6,10 @@ - Search — custodian 2018.3.10 documentation + Search — custodian 2018.6.11 documentation - + @@ -46,7 +46,7 @@

    Navigation

  • modules |
  • - + diff --git a/docs/searchindex.js b/docs/searchindex.js index a21c18ee..c2fb53d2 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["_themes/README","changelog","custodian","custodian.ansible","custodian.cli","custodian.feff","custodian.nwchem","custodian.qchem","custodian.vasp","index","modules"],envversion:53,filenames:["_themes/README.rst","changelog.rst","custodian.rst","custodian.ansible.rst","custodian.cli.rst","custodian.feff.rst","custodian.nwchem.rst","custodian.qchem.rst","custodian.vasp.rst","index.rst","modules.rst"],objects:{"":{custodian:[2,0,0,"-"]},"custodian.ansible":{actions:[3,0,0,"-"],interpreter:[3,0,0,"-"]},"custodian.ansible.actions":{DictActions:[3,1,1,""],FileActions:[3,1,1,""],get_nested_dict:[3,3,1,""]},"custodian.ansible.actions.DictActions":{add_to_set:[3,2,1,""],inc:[3,2,1,""],pop:[3,2,1,""],pull:[3,2,1,""],pull_all:[3,2,1,""],push:[3,2,1,""],push_all:[3,2,1,""],rename:[3,2,1,""],set:[3,2,1,""],unset:[3,2,1,""]},"custodian.ansible.actions.FileActions":{file_copy:[3,2,1,""],file_create:[3,2,1,""],file_delete:[3,2,1,""],file_modify:[3,2,1,""],file_move:[3,2,1,""]},"custodian.ansible.interpreter":{Modder:[3,1,1,""]},"custodian.ansible.interpreter.Modder":{modify:[3,4,1,""],modify_object:[3,4,1,""]},"custodian.cli":{converge_geometry:[4,0,0,"-"],converge_kpoints:[4,0,0,"-"],cstdn:[4,0,0,"-"],run_nwchem:[4,0,0,"-"],run_vasp:[4,0,0,"-"]},"custodian.cli.converge_geometry":{do_run:[4,3,1,""],get_runs:[4,3,1,""]},"custodian.cli.converge_kpoints":{do_run:[4,3,1,""],get_runs:[4,3,1,""],main:[4,3,1,""]},"custodian.cli.cstdn":{main:[4,3,1,""],print_example:[4,3,1,""],run:[4,3,1,""]},"custodian.cli.run_nwchem":{do_run:[4,3,1,""],main:[4,3,1,""]},"custodian.cli.run_vasp":{do_run:[4,3,1,""],get_jobs:[4,3,1,""],load_class:[4,3,1,""],main:[4,3,1,""]},"custodian.custodian":{Custodian:[2,1,1,""],CustodianError:[2,7,1,""],ErrorHandler:[2,1,1,""],Job:[2,1,1,""],Validator:[2,1,1,""]},"custodian.custodian.Custodian":{LOG_FILE:[2,5,1,""],from_spec:[2,6,1,""],run:[2,4,1,""],run_interrupted:[2,4,1,""]},"custodian.custodian.ErrorHandler":{check:[2,4,1,""],correct:[2,4,1,""],is_monitor:[2,5,1,""],is_terminating:[2,5,1,""],raises_runtime_error:[2,5,1,""]},"custodian.custodian.Job":{name:[2,5,1,""],postprocess:[2,4,1,""],run:[2,4,1,""],setup:[2,4,1,""]},"custodian.custodian.Validator":{check:[2,4,1,""]},"custodian.feff":{handlers:[5,0,0,"-"],interpreter:[5,0,0,"-"],jobs:[5,0,0,"-"]},"custodian.feff.handlers":{UnconvergedErrorHandler:[5,1,1,""]},"custodian.feff.handlers.UnconvergedErrorHandler":{check:[5,4,1,""],correct:[5,4,1,""],is_monitor:[5,5,1,""]},"custodian.feff.interpreter":{FeffModder:[5,1,1,""]},"custodian.feff.interpreter.FeffModder":{apply_actions:[5,4,1,""]},"custodian.feff.jobs":{FeffJob:[5,1,1,""]},"custodian.feff.jobs.FeffJob":{postprocess:[5,4,1,""],run:[5,4,1,""],setup:[5,4,1,""]},"custodian.nwchem":{handlers:[6,0,0,"-"],jobs:[6,0,0,"-"]},"custodian.nwchem.handlers":{NwchemErrorHandler:[6,1,1,""]},"custodian.nwchem.handlers.NwchemErrorHandler":{check:[6,4,1,""],correct:[6,4,1,""]},"custodian.nwchem.jobs":{NwchemJob:[6,1,1,""]},"custodian.nwchem.jobs.NwchemJob":{postprocess:[6,4,1,""],run:[6,4,1,""],setup:[6,4,1,""]},"custodian.qchem":{handlers:[7,0,0,"-"],jobs:[7,0,0,"-"]},"custodian.qchem.handlers":{QChemErrorHandler:[7,1,1,""]},"custodian.qchem.handlers.QChemErrorHandler":{as_dict:[7,4,1,""],backup:[7,4,1,""],check:[7,4,1,""],correct:[7,4,1,""],fix_error_code_134:[7,4,1,""],fix_error_killed:[7,4,1,""],fix_geom_opt:[7,4,1,""],fix_insufficient_static_memory:[7,4,1,""],fix_not_enough_total_memory:[7,4,1,""],fix_scf:[7,4,1,""],from_dict:[7,6,1,""],set_last_input_geom:[7,4,1,""],set_scf_initial_guess:[7,4,1,""]},"custodian.qchem.jobs":{QchemJob:[7,1,1,""]},"custodian.qchem.jobs.QchemJob":{as_dict:[7,4,1,""],command_available:[7,4,1,""],from_dict:[7,6,1,""],is_openmp_compatible:[7,2,1,""],postprocess:[7,4,1,""],run:[7,4,1,""],select_command:[7,4,1,""],setup:[7,4,1,""]},"custodian.utils":{backup:[2,3,1,""],get_execution_host_info:[2,3,1,""]},"custodian.vasp":{handlers:[8,0,0,"-"],interpreter:[8,0,0,"-"],jobs:[8,0,0,"-"],validators:[8,0,0,"-"]},"custodian.vasp.handlers":{AliasingErrorHandler:[8,1,1,""],CheckpointHandler:[8,1,1,""],DriftErrorHandler:[8,1,1,""],FrozenJobErrorHandler:[8,1,1,""],LrfCommutatorHandler:[8,1,1,""],MaxForceErrorHandler:[8,1,1,""],MeshSymmetryErrorHandler:[8,1,1,""],NonConvergingErrorHandler:[8,1,1,""],PositiveEnergyErrorHandler:[8,1,1,""],PotimErrorHandler:[8,1,1,""],StdErrHandler:[8,1,1,""],StoppedRunHandler:[8,1,1,""],UnconvergedErrorHandler:[8,1,1,""],VaspErrorHandler:[8,1,1,""],WalltimeHandler:[8,1,1,""]},"custodian.vasp.handlers.AliasingErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.CheckpointHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""],is_terminating:[8,5,1,""]},"custodian.vasp.handlers.DriftErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""]},"custodian.vasp.handlers.FrozenJobErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.LrfCommutatorHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.MaxForceErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.MeshSymmetryErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.NonConvergingErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.PositiveEnergyErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.PotimErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.StdErrHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.StoppedRunHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""],is_terminating:[8,5,1,""]},"custodian.vasp.handlers.UnconvergedErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.VaspErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.WalltimeHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""],is_terminating:[8,5,1,""],raises_runtime_error:[8,5,1,""]},"custodian.vasp.interpreter":{VaspModder:[8,1,1,""]},"custodian.vasp.interpreter.VaspModder":{apply_actions:[8,4,1,""]},"custodian.vasp.jobs":{GenerateVaspInputJob:[8,1,1,""],VaspJob:[8,1,1,""],VaspNEBJob:[8,1,1,""]},"custodian.vasp.jobs.GenerateVaspInputJob":{postprocess:[8,4,1,""],run:[8,4,1,""],setup:[8,4,1,""]},"custodian.vasp.jobs.VaspJob":{constrained_opt_run:[8,6,1,""],double_relaxation_run:[8,6,1,""],full_opt_run:[8,6,1,""],metagga_opt_run:[8,6,1,""],postprocess:[8,4,1,""],run:[8,4,1,""],setup:[8,4,1,""]},"custodian.vasp.jobs.VaspNEBJob":{postprocess:[8,4,1,""],run:[8,4,1,""],setup:[8,4,1,""]},"custodian.vasp.validators":{VaspFilesValidator:[8,1,1,""],VaspNpTMDValidator:[8,1,1,""],VasprunXMLValidator:[8,1,1,""]},"custodian.vasp.validators.VaspFilesValidator":{check:[8,4,1,""]},"custodian.vasp.validators.VaspNpTMDValidator":{check:[8,4,1,""]},"custodian.vasp.validators.VasprunXMLValidator":{check:[8,4,1,""]},custodian:{ansible:[3,0,0,"-"],cli:[4,0,0,"-"],custodian:[2,0,0,"-"],feff:[5,0,0,"-"],nwchem:[6,0,0,"-"],qchem:[7,0,0,"-"],utils:[2,0,0,"-"],vasp:[8,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","staticmethod","Python static method"],"3":["py","function","Python function"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"],"6":["py","classmethod","Python class method"],"7":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:staticmethod","3":"py:function","4":"py:method","5":"py:attribute","6":"py:classmethod","7":"py:exception"},terms:{"1ev":8,"1x1x1":[1,8],"abstract":[2,9],"case":[8,9],"catch":[1,2,8],"class":[1,2,3,5,6,7,8,9],"default":[1,2,3,5,6,7,8],"final":[2,5,7,8,9],"float":[7,8],"function":[1,2,8],"import":[1,9],"int":[2,7,8],"long":[8,9],"new":[1,3,9],"return":[1,2,3,5,6,7,8,9],"static":[1,3,7,8,9],"switch":[1,8,9],"true":[2,3,5,6,7,8,9],"try":7,AND:9,Added:1,BUT:9,But:8,EOS:8,FOR:9,For:[1,2,3,6,7,8,9],NOT:9,Not:6,One:8,PBS:[1,8],Such:9,THE:9,The:[0,1,2,3,6,7,8,9],There:[2,8,9],USE:9,Use:8,Used:[2,5,8],Useful:[1,8],Using:9,WITH:9,Will:1,__init__:9,_add_to_set:3,_each:3,_file_copi:[2,3,8,9],_file_delet:3,_file_mov:3,_inc:3,_pop:3,_pull:3,_pull_al:3,_push:3,_push_al:3,_renam:3,_set:[3,8,9],_theme:0,_unset:3,abov:9,absolut:8,abspath:0,access:3,accordingli:8,accur:8,achiev:8,action:[2,5,6,7,8,9,10],action_keyword:3,activ:8,actual:[2,3,5,6,7,8],actual_cont:3,add:[0,9],add_to_set:3,added:[8,9],addit:[7,9],addon:0,address:1,adopt:3,affect:8,aflow:[1,8],after:[1,2,7,8,9],again:9,aimd:8,algo:[1,8],algorithm:[7,8],alias:8,aliasing_incar:8,aliasingerrorhandl:[2,8,9],all:[1,2,5,8,9],alloc:8,allow:[2,3,7,8,9],alreadi:8,also:[0,8,9],alt_cmd:7,altern:[0,7,8],alwai:9,ambigu:3,amin:8,amount:8,analysi:[2,7,8,9],ani:[2,3,5,6,7,8,9],annot:9,ansibl:[2,5,6,8,10],anubhav:9,api:[1,3],append:[0,5,6,7,8],appli:[2,5,8],applic:9,apply_act:[5,8],approxim:8,arbitrari:1,archiv:5,area:9,arg:[4,6,7,8,9],argument:[3,8,9],aris:9,around:8,arrang:8,as_dict:[3,7],aspect:9,assimil:1,associ:9,atom:8,atom_relax:8,attempt:8,author:9,auto:[8,9],auto_continu:8,auto_gamma:[1,8],auto_npar:[1,8],automat:[1,5,8],avail:[7,9],averag:8,avoid:[3,5,8],b3lyp:[6,7],back:[2,5,8],background:1,backup:[1,2,5,6,7,8],backward:1,bad:2,badvasprunxmlhandl:1,band:[1,8],base:[1,2,3,5,6,7,8,9],basi:[8,9],basic:[4,5,6,7,8],becaus:3,becom:9,been:[8,9],befor:[2,7,8],being:[6,8],below:9,better:[7,8],between:[2,8,9],bfg:8,biaxial:8,bisect:8,bit:8,bleed:9,bool:[2,3,5,6,7,8],bracket:8,brion:[1,8],brmix:[1,8],buffer:[1,8],buffer_tim:8,bug:[1,9],buggi:9,bye:3,calcul:[1,5,8],call:[1,2,5,6,7,8],callabl:2,can:[0,1,2,3,8,9],cannot:[2,8],care:8,caught:2,caus:[1,2,8,9],ceder:9,cell:8,center:1,certain:[8,9],chanc:9,chang:[5,6,7,8],change_algo:8,charg:9,check:[0,1,2,5,6,7,8,9],checkpoint:[1,2,7,8,9],checkpointhandl:8,chemistri:9,chevrier:9,chgcar:8,chk:2,chk_:8,chk_file:7,chkpt:8,cholia:9,claim:9,classifi:2,classmethod:[2,7,8],cleanup:[1,2,7,8],cli:[2,10],clone:9,cluster:[1,8],cluster_nam:2,cmd_name:7,code:[1,2,8,9],collinear:8,combiant:8,combin:[4,8],come:[1,9],command:[6,7,8,9],command_avail:7,commatsci:9,common:[2,8,9],common_param:2,commonli:1,compat:1,compil:[1,8],complet:[2,8,9],complex:[7,8,9],compon:9,comprehens:[1,9],compris:9,comput:9,conceiv:8,concret:9,condit:9,conf:0,configur:9,connect:9,consid:[8,9],consider:8,consolid:1,constrain:8,constrained_opt_run:8,construct:2,constructor:[5,7,8],consult:9,contain:[0,5,9],contcar:[2,8,9],contcar_onli:8,content:[0,9,10],continu:8,contract:9,converg:[4,5,8,9],converge_geometri:[2,10],converge_kpoint:[1,2,9,10],copi:[2,3,5,6,7,8,9],copy_magmom:8,copyright:9,core:[1,8],correct:[1,2,5,6,7,8,9],correspond:8,could:8,cours:2,crash:8,creat:[2,3,8,9],creation:[1,2],creator:8,criteria:8,critic:1,cstdn:[1,2,10],current:[1,2,5,6,7,8,9],custodian:1,custodian_exampl:9,custodian_param:[2,9],custodianerror:2,custom:2,customiz:9,dacek:1,dai:9,damag:9,dan:9,dat:5,data:9,date:9,dav:8,david:1,davidson:9,de_threshold:8,deal:9,def:9,defin:[2,8,9],delet:[3,8],delta:7,demonstr:9,densiti:8,dentet:[1,8],denteterrorhandl:9,deped:1,depend:3,deprec:[1,6],deriv:8,describ:[2,5,6,7,8],desir:[2,7,8],dest:[2,3,8,9],detail:9,detect:[2,5,6,7,8,9],determin:8,develop:9,dft:[1,6,7,8],dict:[2,3,5,6,7,8,9],dictact:[3,5,8],differ:[2,5,8,9],difficult:[2,8],diis_gdm:7,dir:1,direct:[5,6,8],directori:[1,2,5,8,9],distribut:9,do_run:4,doc:[0,1],document:[0,1,3,9],doe:[2,3,5,8],doesn:2,doi:9,done:9,doubl:[1,8,9],double_relaxation_run:[8,9],drift:8,drifterrorhandl:[1,8],driv:0,dtbdyn:8,due:[7,8,9],dure:[1,2,6,7,8,9],dwaraknath:1,each:[2,8,9],earli:2,easiest:9,easili:3,easy_instal:9,edddav:8,eddiag:8,eddrmm:8,eddrrm:8,edfiffg:8,edg:9,ediff:8,ediffg:8,edwav:8,effect:[1,8],either:8,electron:[1,8],electronic_step_stop:8,element:8,elf:8,elf_kpar:8,elf_ncl:8,els:7,enabl:1,enaug_multipli:8,encount:[1,2,9],end:[2,5,6,7,8],energi:[8,9],ensembl:8,ensur:2,environ:8,environment:9,equal:2,equival:8,err1:2,err2:2,error:[1,2,3,5,6,7,8,9],error_dict:2,error_msg:8,errorhandl:[1,2,5,6,7,8,9],errors_subset_to_catch:[8,9],errors_subset_to_detect:8,especi:[1,8,9],estim:8,etc:[2,7,8],evalu:8,even:[2,9],event:[1,2,9],ever:8,everi:[1,2,8],ex_backup_list:7,exampl:[1,2,3,6,7,8],examplehandl:9,examplejob:9,exce:8,exceed:8,except:2,excess:8,exclud:8,execut:[2,5,8],exist:[0,8],exit:[1,2],expand:[1,9],expect:[8,9],explicit:2,express:9,fail:[2,7,8,9],failur:[1,2,7],fairli:9,fall:8,fals:[2,5,6,7,8,9],fast:[1,8],faster:[1,2],fatal:8,featur:[1,9],fed:8,feff_cmd:5,feff_out:5,feffinp:5,feffinput:5,feffinput_kei:5,feffjob:5,feffmodd:5,few:[1,8],fft:8,figur:9,file:[1,2,3,5,6,7,8,9],file_copi:3,file_cr:3,file_delet:3,file_modifi:3,file_mov:3,fileact:[3,5,8],filenam:[2,3,5,8],find:8,fine:[8,9],finish:[1,2,8],firework:9,first:[1,2,7,8],fit:9,fix:[1,2,7],fix_error_code_134:7,fix_error_kil:7,fix_geom_opt:7,fix_insufficient_static_memori:7,fix_not_enough_total_memori:7,fix_scf:7,flag:[1,2],flask:0,flexibl:[1,7,8,9],fluctuat:8,folder:[0,1,8],follow:[0,2,3,8,9],forc:8,form:[5,8],format:[2,9],former:2,found:8,framework:9,free:9,from:[1,2,3,5,7,8,9],from_dict:[3,7],from_spec:2,frozen:8,frozenjoberrorhandl:8,full:[3,5,8,9],full_opt_run:8,furnish:9,gamma:[1,8],gamma_vasp_cmd:8,gener:[2,5,6,7,8,9],generate_kpoints_tran:8,generatevaspinputjob:8,genom:9,geoffroi:9,geom_max_cycl:7,geometri:[4,7,8],gerbrand:9,get:8,get_execution_host_info:2,get_job:4,get_nested_dict:3,get_run:4,gga:8,git:0,github:9,give:8,given:[2,9],gracefulli:[1,2,9],grad_not_orth:8,gradient:8,grain:9,grant:9,grid:8,guess:[7,8],guid:0,guidelin:8,gunter:9,gzip:[1,2,5,6,7,8],gzipped_output:[2,6,9],gzipped_prefix:5,half_cpu:7,half_kpt:8,half_kpts_first_relax:8,halv:8,handl:[1,2,8,9],handler:[1,2,9,10],hanld:1,happen:8,has:[1,2,8,9],hautier:9,have:[1,2,5,8,9],hdlr:[2,9],hello:3,here:9,herebi:9,hermitian:8,hessian:1,high:[8,9],higher:8,highli:[8,9],his:0,hit:8,holder:9,hopefulli:9,host:2,hostnam:2,hour:8,howev:3,hse:8,html_theme:0,html_theme_path:0,http:9,hundr:9,ideal:9,ignor:[3,5,8],immedi:[1,2],implement:[1,2,3,6,8,9],impli:9,imposs:9,improv:[1,2],inc:3,incar:[1,8,9],includ:[1,3,8,9],incompat:1,incorrect:1,incorrect_shift:8,increas:8,increment:[1,9],indefinit:9,index:9,indic:[1,2,3,5,6,7,8],individu:2,infinit:8,inform:[3,5,9],init:8,initi:[2,3,5,6,7,8,9],initial_strain:8,initio:9,inp:5,input:[5,6,7,8,9],input_dict:3,input_fil:[6,7],input_filenam:8,input_set:8,insert:3,instal:9,instanc:2,instead:[1,3,6,8],insuffici:9,integ:8,intend:0,interfac:2,intern:8,interpret:[2,10],interrupt:1,interuppt:2,interv:8,introdc:1,inv_rot_mat:8,invers:8,involv:9,ionic:8,is_monitor:[1,2,5,8],is_openmp_compat:7,is_termin:[1,2,8],ismear:9,issu:[1,9],istart:8,isym:1,iter:7,its:[1,2],jain:9,jit:9,job1:2,job2:2,job3:2,job:[1,2,4,10],jobid:9,jobs_common_param:[2,9],json:[1,2,5,6,7,8,9],just:[8,9],kei:[2,3,8,9],kenneth:0,keyword:3,kill:8,kind:[7,8,9],known:9,kocher:9,konverg:8,kpar:8,kpoint:[1,8,9],kpoints_tran:8,kr_small:0,kristin:9,kwarg:8,labort:8,langevin:8,languag:3,lapack:8,larg:[0,7,8,9],large_static_mem:7,larger:7,last:[1,7,8],latest:[1,9],latter:2,lattic:8,lattice_direct:8,lbnl:9,lead:2,leav:8,length:2,less:8,let:[2,9],level:8,liabil:9,liabl:9,librari:[0,9],like:[3,8,9],limit:[8,9],line:[8,9],linear:4,link:[2,9],list:[2,3,5,6,7,8,9],list_of_actions_taken:[2,5,6,7,8],list_of_error:[2,5,6,7,8],load:[2,8],load_class:4,log1:5,log_fil:2,longer:1,look:8,lpead:8,lrf_comm:8,lrf_commut:8,lrfcommutatorhandl:8,lstop:8,lwave:8,machinefil:9,made:1,magmom:8,mai:[1,2,8,9],main:[4,9],major:[1,9],make:[2,3,8],manag:[2,7,9],mani:[1,8,9],master:[4,8],match:8,materi:9,matrix:8,max:[7,8],max_drift:8,max_error:[1,2,8,9],max_errors_per_job:2,max_force_threshold:8,max_step:[4,8],maxforceerrorhandl:8,maximum:[2,8],mdalgo:8,mean:[2,3,5,7,8,9],meant:9,measur:[2,5,6,7,8],mechan:[1,2,9],memori:[7,8],merchant:9,merg:9,mesh:8,meshsymmetryerrorhandl:[8,9],meshsymmetryhandl:2,messag:[1,2,6,8],metagga:8,metagga_opt_run:8,method:[1,2,5,6,7,8,9],michael:9,might:8,min:8,minimum:8,minor:[1,9],minut:2,misc:1,miscellan:1,mit:9,mitsuhiko:0,mod:[3,4],modder:[3,5,8],moddermodif:[5,8],mode:[1,2,3,4,5,8,9],modif:[3,9],modifi:[3,5,8,9],modify_object:3,modul:[9,10],mol:[6,7],mongo:3,monitor:[1,2,5,6,7,8],monitor_freq:2,monti:[1,2],more:[1,2,8,9],most:[0,9],mostli:3,move:[1,2,3],mpirun:[8,9],mpnonscfset:8,msonabl:2,much:[1,2],multi:[1,8],must:[1,2,3,7,8],name:[2,4,5,6,7,8,9],natoms_large_cel:8,nearing:8,neb:8,neb_std_err:8,neb_vasp:8,necessari:[1,6,8,9],necessarili:[7,8],need:[1,2,5,6,7,8,9],neg:8,nelect:1,nest:3,new_file_nam:3,new_mol:7,next:8,ngx:8,ngy:8,ngz:8,nice:2,nicht:8,nicht_konv:8,nionic_step:8,njob:9,nkpt:8,nois:8,non:[1,2,3,5,8],nonconvergingerrorhandl:8,none:[2,3,5,6,7,8,9],noninfring:9,normal:[1,8],nose:9,notat:3,note:[2,3,8],notic:[2,9],now:[1,9],npar:[1,8],npt:8,nsw:9,number:[1,2,8,9],numer:8,nwchem:[1,2,4,9,10],nwchem_cmd:6,nwchemerrorhandl:6,nwchemjob:6,nwout:6,obj:3,object:[2,3,5,7,8,9],obtain:9,obvious:9,occur:[2,8],off:1,offici:9,often:[7,8,9],older:9,onc:[1,2,8],one:[0,2,7,8,9],ong:[1,9],onli:[1,2,3,5,6,7,8],open:9,openmp:7,oper:[7,8],opt:2,optim:[1,7,8],option:[1,6],order:[2,9],org:9,orig:[5,6,7,8],orthogon:8,oszicar:8,other:[1,2,8,9],otherwis:[2,8,9],out:[0,5,6,8,9],out_of_memori:8,outcar:8,outlin:9,output:[1,2,5,6,7,8,9],output_fil:[5,6,7,8],output_filenam:[5,6,8],output_vasprun:8,over:2,overrid:[6,8],overview:9,owner:3,packag:[1,9,10],page:0,parallel:[2,7,8],param:[2,5,8,9],paramet:[2,3,5,6,7,8,9],particular:[1,2,8,9],particularli:[1,9],partit:2,pass:[2,5,8,9],passthrough:8,path:[0,2,3,8,9],pathnam:3,pbs_nodefil:9,pbs_walltim:8,pbswalltimehand:1,pbswalltimehandl:1,per:[1,2,8],perform:[1,2,3,4,5,6,7,8,9],permiss:9,permit:9,person:9,persson:9,physic:7,ping:[1,9],pip:9,place:3,pleas:[6,9],plugin:9,point:[7,8],poll:[2,8],polling_time_step:2,pop:[3,8],popen:[2,5,7,8],portion:9,poscar:[2,8,9],poscarerrorhandl:9,posit:8,positiveenergyerrorhandl:8,posmap:8,possibl:[2,9],post:[1,2,7,8],postprocess:[2,5,6,7,8,9],potcar:8,potenti:[2,9],potim:8,potimerrorhandl:8,pre:[2,7,8],preced:3,precis:1,precondit:8,prefer:3,prefix:[2,5],present:[6,8,9],prevent:8,pricel:[1,8],print:3,print_exampl:4,prior:7,prioriti:2,probabl:8,problem:8,process:[2,7,8],product:[1,8],progress:[1,8],project:[0,9],proper:8,properli:[1,8],properti:[2,9],provid:[1,2,8,9],pssyevx:8,publish:9,pull:3,pull_al:3,purpos:[8,9],push:3,push_al:3,put:[0,9],pvasp:8,py3k:1,pymatgen:[1,3,6,7,8,9],pymatpro:3,pypi:9,python:[1,2,9],qchem:[1,2,9,10],qchem_cmd:7,qchem_job:7,qchemerrorhandl:7,qchemjob:7,qcinp:7,qcinput:7,qclog_fil:7,qcout:7,queue:2,quick:8,quickli:2,rais:[2,3,5,8],raises_runtime_error:[2,8],random:9,rang:9,rate:9,rather:8,rca_dii:7,rca_gdm_thresh:7,reach:8,read:8,real:9,real_opt:8,real_optlai:8,reason:8,recommend:[1,8,9],record:[7,8],recov:9,recoveri:9,redirect:[6,7,8],refactor:1,refer:3,regular:8,reitz:0,rel:9,relat:[0,2,5,6,7,8],relax1:[2,8,9],relax2:[2,9],relax:[1,8,9],releas:[1,9],reli:8,remain:[2,8],renam:[3,5,6,8],repars:[5,8],repo:9,repositori:0,represent:7,request:[1,2],requir:[1,2],rerun:[2,9],research:9,restart:[2,8,9],restor:1,restrict:9,resubmit:1,result:[2,7,8],rewrit:[5,8],rhosyg:8,richard:[1,9],right:9,robust:[1,2,8,9],root:2,rot_mat:1,rot_matrix:8,rotat:8,routin:8,rpa:8,rspher:8,rudimentari:1,run:[1,2,4,5,6,7,8,9],run_interrupt:2,run_nam:7,run_nwchem:[1,2,10],run_vasp:[1,2,10],runtim:2,runtimeerror:1,sad:7,sai:[2,8],same:9,sampl:[2,9],satisfi:8,save:[2,7],sbesselit:8,scale:9,scf:[5,7],scf_max_cycl:7,scheme:8,scienc:9,scratch:[1,2,7],scratch_dir:[1,2,9],scratch_link:2,script:[1,4,9],search:1,sec:[2,8],second:[2,8],see:[3,5,8,9],select_command:7,self:9,sell:9,sensic:8,sensit:8,sent:2,separ:1,seq:7,sequenc:[1,2,3,5,8,9],seri:[2,5,8,9],serializ:[2,5,6,7,8],seriou:8,server:9,set:[1,2,3,5,6,7,8,9],set_last_input_geom:7,set_scf_initial_guess:7,settings_overrid:[2,6,8,9],setup:[1,2,5,6,7,8,9],sever:9,sge:8,shall:9,shift:[1,8],should:[1,2,3,5,6,7,8,9],shreya:9,shyam:1,shyue:[1,9],signal:2,signific:[1,8],significantli:1,similarli:9,simpl:[1,2],simpli:[2,3,5,8,9],simplifi:8,simul:[3,9],simultan:8,sinc:8,singl:1,situat:[8,9],skip:2,skip_over_error:2,slightli:8,slow:8,slurm:8,small:[0,8],smaller:8,softwar:9,some:[1,2,7,8,9],someth:8,sometim:[2,8],sort:2,sourc:[2,3,4,5,6,7,8,9],space:[1,2,8],spec:2,special:[3,8],specif:[1,9],specifi:[1,2,8,9],speed:[1,8],speedup:8,sphinx:9,split:9,spuriou:1,sqrt:[1,8],stabl:1,standard:[0,5,6,7,8],star:8,start:[1,2,7,8,9],static3:9,std_err:8,std_feff_err:5,stderr:8,stderr_fil:[5,8],stderrhandl:8,stdout:[6,8],step:[1,2,8],steve:1,stop:8,stopcar:8,stoppedrunhandl:8,store:[2,8],str:[2,3,5,6,7,8],strain:8,strict:[3,5,8],string:[2,3],structur:[2,8],style:[1,6,8],sub:[1,8,9],subclass:9,subdir:8,subject:9,sublicens:9,submodul:[0,10],subpackag:10,subprocess:[5,8],subroutin:8,subsequ:8,subset:[1,8],subspac:8,subspacematrix:8,substanti:9,success:[1,2,7],suffici:[8,9],suffix:[2,8,9],sum:9,summar:9,supercomput:1,suppli:[3,5,8,9],support:[1,2,3,5,8],sure:8,symbol:2,symmetri:[1,8],symprec:8,syntax:3,sys:0,system:[1,2,4,8,9],take:[3,9],taken:[2,5,6,7,8],tar:[2,5],target:[4,9],task:[1,2],tempfil:2,temporari:2,tend:9,tensil:8,term:9,termin:[1,2,9],terminate_func:2,terminate_on_nonzero_returncod:2,test:[6,7,9],tet:8,tetirr:8,tetrahedron:8,than:[7,8],thei:9,theme:0,thermostat:8,thi:[0,1,2,3,4,5,6,7,8,9],those:9,though:9,thousand:9,thre:8,three:9,threshold:[7,8],through:[2,9],throughput:9,time:[1,2,8,9],timeout:8,tmp:[2,9],to_averag:8,todo:6,toler:8,too:[1,8],too_few_band:8,tool:9,tort:9,total:[2,7,8,9],total_physical_memori:7,transfer:9,transpar:1,treat:8,tri:[1,2],tripl:[1,8],triple_product:8,tune:8,tupl:2,turn:1,two:[8,9],txt:[5,8],type:[1,2,5,7,8,9],typic:8,ultra:7,unabl:8,unconverg:[1,5],unconvergederrorhandl:[5,8,9],under:9,underscor:3,unfix:[2,5,6,7,8],unfortun:8,uniform:9,uniqu:2,unit:[7,9],unittest:9,univers:3,unlik:[5,8],unrecover:2,unrecoverable_error:1,unset:3,unsupport:[3,5,8],until:8,updat:[1,8],upon:[2,8],use:[0,2,3,5,6,7,8,9],used:[0,1,5,6,8],useful:[1,2,8,9],user:2,uses:[0,1,2,9],using:[1,2,3,8,9],usual:[2,3,8],util:[1,10],valid:[1,2,9,10],valu:[8,9],valueerror:[3,5,8],variabl:[1,8,9],variou:4,variuo:4,vasp:[1,2,4,9,10],vasp_cmd:[2,8,9],vasp_command:4,vasp_job_kwarg:8,vasperrorhandl:[1,2,8,9],vaspfilesvalid:8,vaspinput:8,vaspinput_kei:8,vaspjob:[1,2,8,9],vaspmodd:8,vaspnebjob:8,vaspnptmdvalid:8,vasprun:8,vasprunxmlvalid:[2,8,9],vastli:1,vector:8,veri:[0,8,9],version:8,versu:8,via:[2,8,9],vienna:9,vincent:9,vldr:[2,9],vol:8,vol_change_tol:8,wai:[1,2,9],wait:[1,2],wall:[1,8],wall_tim:8,walltim:[1,8],walltimehandl:[1,8],want:[2,8],warn:8,waroqui:1,warranti:9,wavecar:8,wavefunct:8,well:[1,9],what:[3,8],whatev:[5,8],when:[1,2,5,6,7,8,9],where:[1,2,6,8,9],whether:[1,2,3,5,6,7,8,9],which:[1,2,3,5,6,8,9],whom:9,wildcard:2,william:9,wish:8,without:[3,5,7,8,9],work:[1,2,7,8,9],workflow:[2,9],world:[3,9],wors:8,would:[8,9],wouldn:8,wrap:8,wrapper:9,write:[8,9],written:[8,9],xiaohui:1,xml:8,xrang:9,yaml:[1,2],yet:6,yield:2,you:[0,2,8,9],your:[0,8,9],zbrent:[1,8],zero:[1,2],zheev:8,zhegv:8,zpotrf:8},titles:["krTheme Sphinx Style","Change Log","custodian package","custodian.ansible package","custodian.cli package","custodian.feff package","custodian.nwchem package","custodian.qchem package","custodian.vasp package","Custodian","custodian"],titleterms:{action:3,ansibl:3,api:9,calcul:9,chang:[1,9],cite:9,cli:4,content:[2,3,4,5,6,7,8],control:9,converge_geometri:4,converge_kpoint:4,cstdn:[4,9],custodian:[2,3,4,5,6,7,8,9,10],depend:9,development:9,doc:9,electron:9,exampl:9,feff:5,get:9,handler:[5,6,7,8],how:9,interpret:[3,5,8],job:[5,6,7,8,9],krtheme:0,licens:9,log:[1,9],modul:[2,3,4,5,6,7,8],nwchem:6,option:9,packag:[2,3,4,5,6,7,8],practic:9,qchem:7,refer:9,requir:9,run_nwchem:4,run_vasp:4,simpl:9,spec:9,sphinx:0,stabl:9,structur:9,style:0,submodul:[2,3,4,5,6,7,8],subpackag:[2,3,6,7,8],usag:9,util:2,v2017:9,valid:8,vasp:8,version:[1,9],yaml:9}}) \ No newline at end of file +Search.setIndex({docnames:["_themes/README","changelog","custodian","custodian.ansible","custodian.cli","custodian.feff","custodian.nwchem","custodian.qchem","custodian.vasp","index","modules"],envversion:53,filenames:["_themes/README.rst","changelog.rst","custodian.rst","custodian.ansible.rst","custodian.cli.rst","custodian.feff.rst","custodian.nwchem.rst","custodian.qchem.rst","custodian.vasp.rst","index.rst","modules.rst"],objects:{"":{custodian:[2,0,0,"-"]},"custodian.ansible":{actions:[3,0,0,"-"],interpreter:[3,0,0,"-"]},"custodian.ansible.actions":{DictActions:[3,1,1,""],FileActions:[3,1,1,""],get_nested_dict:[3,3,1,""]},"custodian.ansible.actions.DictActions":{add_to_set:[3,2,1,""],inc:[3,2,1,""],pop:[3,2,1,""],pull:[3,2,1,""],pull_all:[3,2,1,""],push:[3,2,1,""],push_all:[3,2,1,""],rename:[3,2,1,""],set:[3,2,1,""],unset:[3,2,1,""]},"custodian.ansible.actions.FileActions":{file_copy:[3,2,1,""],file_create:[3,2,1,""],file_delete:[3,2,1,""],file_modify:[3,2,1,""],file_move:[3,2,1,""]},"custodian.ansible.interpreter":{Modder:[3,1,1,""]},"custodian.ansible.interpreter.Modder":{modify:[3,4,1,""],modify_object:[3,4,1,""]},"custodian.cli":{converge_geometry:[4,0,0,"-"],converge_kpoints:[4,0,0,"-"],cstdn:[4,0,0,"-"],run_nwchem:[4,0,0,"-"],run_vasp:[4,0,0,"-"]},"custodian.cli.converge_geometry":{do_run:[4,3,1,""],get_runs:[4,3,1,""]},"custodian.cli.converge_kpoints":{do_run:[4,3,1,""],get_runs:[4,3,1,""],main:[4,3,1,""]},"custodian.cli.cstdn":{main:[4,3,1,""],print_example:[4,3,1,""],run:[4,3,1,""]},"custodian.cli.run_nwchem":{do_run:[4,3,1,""],main:[4,3,1,""]},"custodian.cli.run_vasp":{do_run:[4,3,1,""],get_jobs:[4,3,1,""],load_class:[4,3,1,""],main:[4,3,1,""]},"custodian.custodian":{Custodian:[2,1,1,""],CustodianError:[2,7,1,""],ErrorHandler:[2,1,1,""],Job:[2,1,1,""],Validator:[2,1,1,""]},"custodian.custodian.Custodian":{LOG_FILE:[2,5,1,""],from_spec:[2,6,1,""],run:[2,4,1,""],run_interrupted:[2,4,1,""]},"custodian.custodian.ErrorHandler":{check:[2,4,1,""],correct:[2,4,1,""],is_monitor:[2,5,1,""],is_terminating:[2,5,1,""],raises_runtime_error:[2,5,1,""]},"custodian.custodian.Job":{name:[2,5,1,""],postprocess:[2,4,1,""],run:[2,4,1,""],setup:[2,4,1,""],terminate:[2,4,1,""]},"custodian.custodian.Validator":{check:[2,4,1,""]},"custodian.feff":{handlers:[5,0,0,"-"],interpreter:[5,0,0,"-"],jobs:[5,0,0,"-"]},"custodian.feff.handlers":{UnconvergedErrorHandler:[5,1,1,""]},"custodian.feff.handlers.UnconvergedErrorHandler":{check:[5,4,1,""],correct:[5,4,1,""],is_monitor:[5,5,1,""]},"custodian.feff.interpreter":{FeffModder:[5,1,1,""]},"custodian.feff.interpreter.FeffModder":{apply_actions:[5,4,1,""]},"custodian.feff.jobs":{FeffJob:[5,1,1,""]},"custodian.feff.jobs.FeffJob":{postprocess:[5,4,1,""],run:[5,4,1,""],setup:[5,4,1,""]},"custodian.nwchem":{handlers:[6,0,0,"-"],jobs:[6,0,0,"-"]},"custodian.nwchem.handlers":{NwchemErrorHandler:[6,1,1,""]},"custodian.nwchem.handlers.NwchemErrorHandler":{check:[6,4,1,""],correct:[6,4,1,""]},"custodian.nwchem.jobs":{NwchemJob:[6,1,1,""]},"custodian.nwchem.jobs.NwchemJob":{postprocess:[6,4,1,""],run:[6,4,1,""],setup:[6,4,1,""]},"custodian.qchem":{handlers:[7,0,0,"-"],jobs:[7,0,0,"-"],new_handlers:[7,0,0,"-"],new_jobs:[7,0,0,"-"]},"custodian.qchem.handlers":{QChemErrorHandler:[7,1,1,""]},"custodian.qchem.handlers.QChemErrorHandler":{as_dict:[7,4,1,""],backup:[7,4,1,""],check:[7,4,1,""],correct:[7,4,1,""],fix_error_code_134:[7,4,1,""],fix_error_killed:[7,4,1,""],fix_geom_opt:[7,4,1,""],fix_insufficient_static_memory:[7,4,1,""],fix_not_enough_total_memory:[7,4,1,""],fix_scf:[7,4,1,""],from_dict:[7,6,1,""],set_last_input_geom:[7,4,1,""],set_scf_initial_guess:[7,4,1,""]},"custodian.qchem.jobs":{QchemJob:[7,1,1,""]},"custodian.qchem.jobs.QchemJob":{as_dict:[7,4,1,""],command_available:[7,4,1,""],from_dict:[7,6,1,""],is_openmp_compatible:[7,2,1,""],postprocess:[7,4,1,""],run:[7,4,1,""],select_command:[7,4,1,""],setup:[7,4,1,""]},"custodian.qchem.new_handlers":{QChemErrorHandler:[7,1,1,""],QChemSCFErrorHandler:[7,1,1,""]},"custodian.qchem.new_handlers.QChemErrorHandler":{check:[7,4,1,""],correct:[7,4,1,""],is_monitor:[7,5,1,""]},"custodian.qchem.new_handlers.QChemSCFErrorHandler":{check:[7,4,1,""],correct:[7,4,1,""],is_monitor:[7,5,1,""]},"custodian.qchem.new_jobs":{QCJob:[7,1,1,""],perturb_coordinates:[7,3,1,""]},"custodian.qchem.new_jobs.QCJob":{current_command:[7,5,1,""],opt_with_frequency_flattener:[7,6,1,""],postprocess:[7,4,1,""],run:[7,4,1,""],setup:[7,4,1,""]},"custodian.utils":{backup:[2,3,1,""],get_execution_host_info:[2,3,1,""]},"custodian.vasp":{handlers:[8,0,0,"-"],interpreter:[8,0,0,"-"],jobs:[8,0,0,"-"],validators:[8,0,0,"-"]},"custodian.vasp.handlers":{AliasingErrorHandler:[8,1,1,""],CheckpointHandler:[8,1,1,""],DriftErrorHandler:[8,1,1,""],FrozenJobErrorHandler:[8,1,1,""],LrfCommutatorHandler:[8,1,1,""],MaxForceErrorHandler:[8,1,1,""],MeshSymmetryErrorHandler:[8,1,1,""],NonConvergingErrorHandler:[8,1,1,""],PositiveEnergyErrorHandler:[8,1,1,""],PotimErrorHandler:[8,1,1,""],StdErrHandler:[8,1,1,""],StoppedRunHandler:[8,1,1,""],UnconvergedErrorHandler:[8,1,1,""],VaspErrorHandler:[8,1,1,""],WalltimeHandler:[8,1,1,""]},"custodian.vasp.handlers.AliasingErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.CheckpointHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""],is_terminating:[8,5,1,""]},"custodian.vasp.handlers.DriftErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""]},"custodian.vasp.handlers.FrozenJobErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.LrfCommutatorHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.MaxForceErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.MeshSymmetryErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.NonConvergingErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.PositiveEnergyErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.PotimErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.StdErrHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.StoppedRunHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""],is_terminating:[8,5,1,""]},"custodian.vasp.handlers.UnconvergedErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.VaspErrorHandler":{check:[8,4,1,""],correct:[8,4,1,""],error_msgs:[8,5,1,""],is_monitor:[8,5,1,""]},"custodian.vasp.handlers.WalltimeHandler":{check:[8,4,1,""],correct:[8,4,1,""],is_monitor:[8,5,1,""],is_terminating:[8,5,1,""],raises_runtime_error:[8,5,1,""]},"custodian.vasp.interpreter":{VaspModder:[8,1,1,""]},"custodian.vasp.interpreter.VaspModder":{apply_actions:[8,4,1,""]},"custodian.vasp.jobs":{GenerateVaspInputJob:[8,1,1,""],VaspJob:[8,1,1,""],VaspNEBJob:[8,1,1,""]},"custodian.vasp.jobs.GenerateVaspInputJob":{postprocess:[8,4,1,""],run:[8,4,1,""],setup:[8,4,1,""]},"custodian.vasp.jobs.VaspJob":{constrained_opt_run:[8,6,1,""],double_relaxation_run:[8,6,1,""],full_opt_run:[8,6,1,""],metagga_opt_run:[8,6,1,""],postprocess:[8,4,1,""],run:[8,4,1,""],setup:[8,4,1,""],terminate:[8,4,1,""]},"custodian.vasp.jobs.VaspNEBJob":{postprocess:[8,4,1,""],run:[8,4,1,""],setup:[8,4,1,""]},"custodian.vasp.validators":{VaspFilesValidator:[8,1,1,""],VaspNpTMDValidator:[8,1,1,""],VasprunXMLValidator:[8,1,1,""]},"custodian.vasp.validators.VaspFilesValidator":{check:[8,4,1,""]},"custodian.vasp.validators.VaspNpTMDValidator":{check:[8,4,1,""]},"custodian.vasp.validators.VasprunXMLValidator":{check:[8,4,1,""]},custodian:{ansible:[3,0,0,"-"],cli:[4,0,0,"-"],custodian:[2,0,0,"-"],feff:[5,0,0,"-"],nwchem:[6,0,0,"-"],qchem:[7,0,0,"-"],utils:[2,0,0,"-"],vasp:[8,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","staticmethod","Python static method"],"3":["py","function","Python function"],"4":["py","method","Python method"],"5":["py","attribute","Python attribute"],"6":["py","classmethod","Python class method"],"7":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:staticmethod","3":"py:function","4":"py:method","5":"py:attribute","6":"py:classmethod","7":"py:exception"},terms:{"1ev":8,"1x1x1":[1,8],"abstract":[2,9],"case":[8,9],"catch":[1,2,8],"class":[1,2,3,5,6,7,8,9],"default":[1,2,3,5,6,7,8],"final":[2,5,7,8,9],"float":[7,8],"function":[1,2,8],"import":[1,9],"int":[2,7,8],"long":[8,9],"new":[1,3,9],"return":[1,2,3,5,6,7,8,9],"static":[1,3,7,8,9],"switch":[1,8,9],"true":[2,3,5,6,7,8,9],"try":7,AND:9,Added:1,BUT:9,But:8,EOS:8,FOR:9,For:[1,2,3,6,7,8,9],NOT:9,Not:6,One:8,PBS:[1,8],Such:9,THE:9,The:[0,1,2,3,6,7,8,9],There:[2,8,9],USE:9,Use:8,Used:[2,5,7,8],Useful:[1,8],Using:9,WITH:9,Will:1,__init__:9,_add_to_set:3,_each:3,_file_copi:[2,3,8,9],_file_delet:3,_file_mov:3,_inc:3,_pop:3,_pull:3,_pull_al:3,_push:3,_push_al:3,_renam:3,_set:[3,8,9],_theme:0,_unset:3,abov:9,absolut:8,abspath:0,access:3,accordingli:8,accur:8,achiev:8,action:[2,5,6,7,8,9,10],action_keyword:3,activ:8,actual:[2,3,5,6,7,8],actual_cont:3,add:[0,9],add_to_set:3,added:[8,9],addit:[7,9],addon:0,address:[1,7],adopt:3,affect:8,aflow:[1,8],after:[1,2,7,8,9],again:9,aimd:8,aka:7,algo:[1,8],algorithm:[7,8],alias:8,aliasing_incar:8,aliasingerrorhandl:[2,8,9],all:[1,2,5,7,8,9],alloc:8,allow:[2,3,7,8,9],alreadi:8,also:[0,8,9],alt_cmd:7,altern:[0,7,8],alwai:9,ambigu:3,amin:8,amount:8,analysi:[2,7,8,9],ani:[2,3,5,6,7,8,9],annot:9,ansibl:[2,5,6,8,10],anubhav:9,api:[1,3],append:[0,5,6,7,8],appli:[2,5,7,8],applic:9,apply_act:[5,8],approxim:8,arbitrari:1,archiv:5,area:9,arg:[4,6,7,8,9],argument:[3,8,9],aris:9,around:8,arrang:8,as_dict:[3,7],aspect:9,assimil:1,associ:9,atom:8,atom_relax:8,attempt:8,author:9,auto:[8,9],auto_continu:8,auto_gamma:[1,8],auto_npar:[1,8],automat:[1,5,8],avail:[7,9],averag:8,avoid:[3,5,8],b3lyp:[6,7],back:[2,5,8],background:1,backup:[1,2,5,6,7,8],backward:1,bad:2,badvasprunxmlhandl:1,band:[1,8],base:[1,2,3,5,6,7,8,9],basi:[8,9],basic:[4,5,6,7,8],becaus:3,becom:9,been:[7,8,9],befor:[2,7,8],being:[6,8],below:9,better:[7,8],between:[2,8,9],bfg:8,biaxial:8,bisect:8,bit:8,bleed:9,bool:[2,3,5,6,7,8],bracket:8,brion:[1,8],brmix:[1,8],buffer:[1,8],buffer_tim:8,bug:[1,9],buggi:9,bye:3,calcul:[1,5,7,8],call:[1,2,5,6,7,8],callabl:2,can:[0,1,2,3,7,8,9],cannot:[2,8],care:8,caught:2,caus:[1,2,8,9],ceder:9,cell:8,center:1,certain:[8,9],chanc:9,chang:[5,6,7,8],change_algo:8,charg:9,check:[0,1,2,5,6,7,8,9],checkpoint:[1,2,7,8,9],checkpointhandl:8,chemistri:9,chevrier:9,chgcar:8,chk:2,chk_:8,chk_file:7,chkpt:8,cholia:9,claim:9,classifi:2,classmethod:[2,7,8],cleanup:[1,2,7,8],cli:[2,10],clone:9,cluster:[1,8],cluster_nam:2,cmd_name:7,code:[1,2,8,9],collinear:8,combiant:8,combin:[4,8],come:[1,9],command:[6,7,8,9],command_avail:7,commatsci:9,common:[2,7,8,9],common_param:2,commonli:1,compat:1,compil:[1,8],complet:[2,8,9],complex:[7,8,9],compon:9,comprehens:[1,9],compris:9,comput:9,conceiv:8,concret:9,condit:9,conf:0,configur:9,connect:[7,9],consid:[8,9],consider:8,consolid:1,constrain:8,constrained_opt_run:8,construct:2,constructor:[5,7,8],consult:9,contain:[0,5,9],contcar:[2,8,9],contcar_onli:8,content:[0,9,10],continu:8,contract:9,converg:[4,5,7,8,9],converge_geometri:[2,10],converge_kpoint:[1,2,9,10],copi:[2,3,5,6,7,8,9],copy_magmom:8,copyright:9,core:[1,7,8],correct:[1,2,5,6,7,8,9],correspond:8,could:8,cours:2,crash:8,creat:[2,3,8,9],creation:[1,2],creator:8,criteria:8,critic:1,cstdn:[1,2,10],current:[1,2,5,6,7,8,9],current_command:7,custodian:1,custodian_exampl:9,custodian_param:[2,9],custodianerror:2,custom:2,customiz:9,dacek:1,dai:9,damag:9,dan:9,dat:5,data:9,date:9,dav:8,david:1,davidson:9,de_threshold:8,deal:9,def:9,default_save_nam:7,defin:[2,8,9],delet:[3,8],delta:7,demonstr:9,densiti:8,dentet:[1,8],denteterrorhandl:9,deped:1,depend:3,deprec:[1,6],deriv:8,describ:[2,5,6,7,8],desir:[2,7,8],dest:[2,3,8,9],detail:9,detect:[2,5,6,7,8,9],determin:8,dev:7,develop:9,dft:[1,6,7,8],dict:[2,3,5,6,7,8,9],dictact:[3,5,8],differ:[2,5,7,8,9],difficult:[2,8],diis_gdm:7,dir:1,direct:[5,6,7,8],directori:[1,2,5,7,8,9],distribut:9,do_run:4,doc:[0,1],document:[0,1,3,9],doe:[2,3,5,8],doesn:2,doi:9,done:9,doubl:[1,8,9],double_relaxation_run:[8,9],drift:8,drifterrorhandl:[1,8],driv:0,dtbdyn:8,due:[7,8,9],dure:[1,2,6,7,8,9],dwaraknath:1,each:[2,8,9],earli:2,easiest:9,easili:3,easy_instal:9,edddav:8,eddiag:8,eddrmm:8,eddrrm:8,edfiffg:8,edg:9,ediff:8,ediffg:8,edwav:8,effect:[1,8],either:[7,8],electron:[1,8],electronic_step_stop:8,element:8,elf:8,elf_kpar:8,elf_ncl:8,els:7,enabl:1,enaug_multipli:8,encount:[1,2,9],end:[2,5,6,7,8],energi:[8,9],ensembl:8,ensur:2,environ:8,environment:9,equal:2,equival:8,err1:2,err2:2,error:[1,2,3,5,6,7,8,9],error_dict:2,error_msg:8,errorhandl:[1,2,5,6,7,8,9],errors_subset_to_catch:[8,9],errors_subset_to_detect:8,especi:[1,8,9],estim:8,etc:[2,7,8],evalu:8,even:[2,9],event:[1,2,9],ever:8,everi:[1,2,8],ex_backup_list:7,exampl:[1,2,3,6,7,8],examplehandl:9,examplejob:9,exce:8,exceed:8,except:2,excess:8,exclud:8,execut:[2,5,8],exist:[0,8],exit:[1,2],expand:[1,9],expect:[8,9],explicit:2,express:9,fail:[2,7,8,9],failur:[1,2,7],fairli:9,fall:8,fals:[2,5,6,7,8,9],fast:[1,8],faster:[1,2],fatal:8,featur:[1,9],fed:8,feff:[2,10],feff_cmd:5,feff_out:5,feffinp:5,feffinput:5,feffinput_kei:5,feffjob:5,feffmodd:5,few:[1,8],fft:8,figur:9,file:[1,2,3,5,6,7,8,9],file_copi:3,file_cr:3,file_delet:3,file_modifi:3,file_mov:3,fileact:[3,5,8],filenam:[2,3,5,8],find:8,fine:[8,9],finish:[1,2,8],firework:9,first:[1,2,7,8],fit:9,fix:[1,2,7],fix_error_code_134:7,fix_error_kil:7,fix_geom_opt:7,fix_insufficient_static_memori:7,fix_not_enough_total_memori:7,fix_scf:7,flag:[1,2],flask:0,flexibl:[1,7,8,9],fluctuat:8,folder:[0,1,8],follow:[0,2,3,8,9],forc:8,form:[5,8],format:[2,9],former:2,found:[7,8],framework:9,free:9,frequenc:7,from:[1,2,3,5,7,8,9],from_dict:[3,7],from_spec:2,frozen:8,frozenjoberrorhandl:8,full:[3,5,8,9],full_opt_run:8,furnish:9,gamma:[1,8],gamma_vasp_cmd:8,gener:[2,5,6,7,8,9],generate_kpoints_tran:8,generatevaspinputjob:8,genom:9,geoffroi:9,geom_max_cycl:7,geometri:[4,7,8],gerbrand:9,get:8,get_execution_host_info:2,get_job:4,get_nested_dict:3,get_run:4,gga:8,git:0,github:9,give:8,given:[2,9],gracefulli:[1,2,9],grad_not_orth:8,gradient:8,grain:9,grant:9,grid:8,guess:[7,8],guid:0,guidelin:8,gunter:9,gzip:[1,2,5,6,7,8],gzipped_output:[2,6,9],gzipped_prefix:5,half_cpu:7,half_kpt:8,half_kpts_first_relax:8,halv:8,handl:[1,2,7,8,9],handler:[1,2,9,10],hanld:1,happen:8,has:[1,2,7,8,9],hautier:9,have:[1,2,5,8,9],hdlr:[2,9],hello:3,here:9,herebi:9,hermitian:8,hessian:1,high:[8,9],higher:8,highli:[8,9],his:0,hit:8,holder:9,hopefulli:9,host:2,hostnam:2,hour:8,howev:3,hse:8,html_theme:0,html_theme_path:0,http:9,hundr:9,ideal:9,ignor:[3,5,7,8],ignore_connect:7,immedi:[1,2],implement:[1,2,3,6,8,9],impli:9,imposs:9,improv:[1,2],inc:3,incar:[1,8,9],includ:[1,3,8,9],incompat:1,incorrect:1,incorrect_shift:8,increas:8,increment:[1,9],indefinit:9,index:9,indic:[1,2,3,5,6,7,8],individu:2,infinit:8,inform:[3,5,9],init:8,initi:[2,3,5,6,7,8,9],initial_strain:8,initio:9,inp:5,input:[5,6,7,8,9],input_dict:3,input_fil:[6,7],input_filenam:8,input_set:8,insert:3,instal:9,instanc:2,instead:[1,3,6,8],insuffici:9,integ:8,intend:0,interfac:2,intern:8,interpret:[2,10],interrupt:1,interuppt:2,interv:8,introdc:1,introduc:7,inv_rot_mat:8,invers:8,involv:9,ionic:8,is_monitor:[1,2,5,7,8],is_openmp_compat:7,is_termin:[1,2,8],ismear:9,issu:[1,9],istart:8,isym:1,iter:7,its:[1,2],jain:9,jit:9,job1:2,job2:2,job3:2,job:[1,2,4,10],jobid:9,jobs_common_param:[2,9],json:[1,2,5,6,7,8,9],just:[8,9],kei:[2,3,8,9],kenneth:0,keyword:3,kill:8,kind:[7,8,9],known:9,kocher:9,konverg:8,kpar:8,kpoint:[1,8,9],kpoints_tran:8,kr_small:0,kristin:9,kwarg:[7,8],labort:8,langevin:8,languag:3,lapack:8,larg:[0,7,8,9],large_static_mem:7,larger:7,last:[1,7,8],latest:[1,9],latter:2,lattic:8,lattice_direct:8,lbnl:9,lead:2,leav:8,length:2,less:8,let:[2,9],level:8,liabil:9,liabl:9,librari:[0,9],like:[3,8,9],limit:[8,9],line:[8,9],linear:4,link:[2,9],list:[2,3,5,6,7,8,9],list_of_actions_taken:[2,5,6,7,8],list_of_error:[2,5,6,7,8],load:[2,8],load_class:4,log1:5,log_fil:2,longer:1,look:8,lpead:8,lrf_comm:8,lrf_commut:8,lrfcommutatorhandl:8,lstop:8,lwave:8,machinefil:9,made:1,magmom:8,mai:[1,2,8,9],main:[4,9],major:[1,9],make:[2,3,8],manag:[2,7,9],mani:[1,8,9],master:[4,7,8],match:8,materi:9,matrix:8,max:[7,8],max_cor:7,max_drift:8,max_error:[1,2,8,9],max_errors_per_job:2,max_force_threshold:8,max_iter:7,max_molecule_perturb_scal:7,max_step:[4,8],maxforceerrorhandl:8,maximum:[2,7,8],mdalgo:8,mean:[2,3,5,7,8,9],meant:9,measur:[2,5,6,7,8],mechan:[1,2,9],memori:[7,8],merchant:9,merg:9,mesh:8,meshsymmetryerrorhandl:[8,9],meshsymmetryhandl:2,messag:[1,2,6,8],metagga:8,metagga_opt_run:8,method:[1,2,5,6,7,8,9],michael:9,might:8,min:8,minima:7,minimum:8,minor:[1,9],minut:2,misc:1,miscellan:1,mit:9,mitsuhiko:0,mod:[3,4],modder:[3,5,8],moddermodif:[5,8],mode:[1,2,3,4,5,8,9],modif:[3,9],modifi:[3,5,8,9],modify_object:3,modul:[9,10],mol:[6,7],molecul:7,molecule_perturb_scal:7,mongo:3,monitor:[1,2,5,6,7,8],monitor_freq:2,monti:[1,2],more:[1,2,8,9],most:[0,9],mostli:3,move:[1,2,3],mpi:7,mpirun:[8,9],mpnonscfset:8,msonabl:2,much:[1,2],multi:[1,8],multimod:7,must:[1,2,3,7,8],name:[2,4,5,6,7,8,9],natoms_large_cel:8,nearing:8,neb:8,neb_std_err:8,neb_vasp:8,necessari:[1,6,8,9],necessarili:[7,8],need:[1,2,5,6,7,8,9],neg:[7,8],negative_freq_vec:7,nelect:1,nest:3,new_file_nam:3,new_handl:[2,10],new_job:[2,10],new_mol:7,next:8,ngx:8,ngy:8,ngz:8,nice:2,nicht:8,nicht_konv:8,nionic_step:8,njob:9,nkpt:8,nois:8,non:[1,2,3,5,7,8],nonconvergingerrorhandl:8,none:[2,3,5,6,7,8,9],noninfring:9,normal:[1,8],nose:9,notat:3,note:[2,3,8],notic:[2,9],now:[1,9],npar:[1,8],npt:8,nsw:9,number:[1,2,7,8,9],numer:8,nwchem:[1,2,4,9,10],nwchem_cmd:6,nwchemerrorhandl:6,nwchemjob:6,nwout:6,obj:3,object:[2,3,5,7,8,9],obtain:9,obvious:9,occur:[2,7,8],off:1,offici:9,often:[7,8,9],old_coord:7,older:9,onc:[1,2,8],one:[0,2,7,8,9],ong:[1,9],onli:[1,2,3,5,6,7,8],open:9,openmp:7,oper:[7,8],opt:2,opt_with_frequency_flatten:7,optim:[1,7,8],option:[1,6],order:[2,9],org:9,orig:[5,6,7,8],orthogon:8,oszicar:8,other:[1,2,8,9],otherwis:[2,8,9],out:[0,5,6,8,9],out_of_memori:8,outcar:8,outlin:9,output:[1,2,5,6,7,8,9],output_fil:[5,6,7,8],output_filenam:[5,6,8],output_vasprun:8,over:[2,7],overrid:[6,8],overview:9,owner:3,packag:[1,9,10],page:0,parallel:[2,7,8],param:[2,5,8,9],paramet:[2,3,5,6,7,8,9],particular:[1,2,8,9],particularli:[1,9],partit:2,pass:[2,5,8,9],passthrough:[7,8],path:[0,2,3,8,9],pathnam:3,pbs_nodefil:9,pbs_walltim:8,pbswalltimehand:1,pbswalltimehandl:1,per:[1,2,8],perform:[1,2,3,4,5,6,7,8,9],permiss:9,permit:9,person:9,persson:9,perturb:7,perturb_coordin:7,physic:7,ping:[1,9],pip:9,place:3,pleas:[6,9],plugin:9,point:[7,8],poll:[2,8],polling_time_step:2,pop:[3,8],popen:[2,5,7,8],portion:9,poscar:[2,8,9],poscarerrorhandl:9,posit:[7,8],positiveenergyerrorhandl:8,posmap:8,possibl:[2,9],post:[1,2,7,8],postprocess:[2,5,6,7,8,9],potcar:8,potenti:[2,9],potim:8,potimerrorhandl:8,pre:[2,7,8],preced:3,precis:1,precondit:8,prefer:3,prefix:[2,5],present:[6,8,9],prevent:8,pricel:[1,8],print:3,print_exampl:4,prior:7,prioriti:2,probabl:8,problem:8,process:[2,7,8],product:[1,8],progress:[1,8],project:[0,9],proper:8,properli:[1,8],properti:[2,9],provid:[1,2,8,9],pssyevx:8,publish:9,pull:3,pull_al:3,purpos:[8,9],push:3,push_al:3,put:[0,9],pvasp:8,py3k:1,pymatgen:[1,3,6,7,8,9],pymatpro:3,pypi:9,python:[1,2,9],qchem:[1,2,9,10],qchem_cmd:7,qchem_command:7,qchem_job:7,qchemerrorhandl:7,qchemjob:7,qchemscferrorhandl:7,qcinp:7,qcinput:7,qcjob:7,qcjob_kwarg:7,qclog:7,qclog_fil:7,qcout:7,qcscratch:7,qin:7,qout:7,queue:2,quick:8,quickli:2,rais:[2,3,5,8],raises_runtime_error:[2,8],random:9,rang:9,rate:9,rather:8,rca_dii:7,rca_gdm_thresh:7,reach:8,read:8,real:9,real_opt:8,real_optlai:8,reason:8,recalcul:7,recommend:[1,8,9],record:[7,8],recov:9,recoveri:9,redirect:[6,7,8],refactor:1,refer:3,regular:8,reitz:0,rel:9,relat:[0,2,5,6,7,8],relax1:[2,8,9],relax2:[2,9],relax:[1,8,9],releas:[1,9],reli:8,remain:[2,8],renam:[3,5,6,8],repars:[5,8],repo:9,repositori:0,represent:7,request:[1,2],requir:[1,2],rerun:[2,9],research:9,restart:[2,8,9],restor:1,restrict:9,resubmit:1,result:[2,7,8],revers:7,reversed_direct:7,rewrit:[5,8],rhosyg:8,richard:[1,9],right:9,robust:[1,2,8,9],root:2,rot_mat:1,rot_matrix:8,rotat:8,routin:8,rpa:8,rspher:8,rudimentari:1,run:[1,2,4,5,6,7,8,9],run_interrupt:2,run_nam:7,run_nwchem:[1,2,10],run_vasp:[1,2,10],runtim:2,runtimeerror:1,sad:7,sai:[2,8],same:9,sampl:[2,9],satisfi:8,save:[2,7],save_nam:7,save_scratch:7,sbesselit:8,scale:[7,9],scf:[5,7],scf_max_cycl:7,scheme:[7,8],scienc:9,scratch:[1,2,7],scratch_dir:[1,2,7,9],scratch_link:2,script:[1,4,9],search:1,sec:[2,8],second:[2,8],see:[3,5,7,8,9],select_command:7,self:9,sell:9,sensic:8,sensit:8,sent:2,separ:1,seq:7,sequenc:[1,2,3,5,8,9],seri:[2,5,8,9],serializ:[2,5,6,7,8],seriou:8,server:9,set:[1,2,3,5,6,7,8,9],set_last_input_geom:7,set_scf_initial_guess:7,settings_overrid:[2,6,8,9],setup:[1,2,5,6,7,8,9],sever:9,sge:8,shall:9,shift:[1,8],shm:7,should:[1,2,3,5,6,7,8,9],shreya:9,shyam:1,shyue:[1,9],signal:2,signific:[1,8],significantli:1,similarli:9,simpl:[1,2],simpli:[2,3,5,8,9],simplifi:8,simul:[3,9],simultan:8,sinc:8,singl:1,situat:[8,9],skip:2,skip_over_error:2,slightli:8,slow:8,slurm:8,small:[0,8],smaller:8,softwar:9,some:[1,2,7,8,9],someth:8,sometim:[2,8],sort:2,sourc:[2,3,4,5,6,7,8,9],space:[1,2,8],spec:2,special:[3,8],specif:[1,9],specifi:[1,2,8,9],speed:[1,8],speedup:8,sphinx:9,split:9,spuriou:1,sqrt:[1,8],stabl:1,standard:[0,5,6,7,8],star:8,start:[1,2,7,8,9],static3:9,std_err:8,std_feff_err:5,stderr:8,stderr_fil:[5,8],stderrhandl:8,stdout:[6,8],step:[1,2,8],steve:1,stop:8,stopcar:8,stoppedrunhandl:8,store:[2,8],str:[2,3,5,6,7,8],strain:8,strict:[3,5,8],string:[2,3,7],structur:[2,7,8],style:[1,6,8],sub:[1,8,9],subclass:9,subdir:8,subject:9,sublicens:9,submodul:[0,10],subpackag:10,subprocess:[5,7,8],subroutin:8,subsequ:8,subset:[1,8],subspac:8,subspacematrix:8,substanti:9,success:[1,2,7],suffici:[8,9],suffix:[2,7,8,9],sum:9,summar:9,supercomput:1,suppli:[3,5,8,9],support:[1,2,3,5,8],sure:8,symbol:2,symmetri:[1,8],symprec:8,syntax:3,sys:0,system:[1,2,4,8,9],take:[3,9],taken:[2,5,6,7,8],tar:[2,5],target:[4,9],task:[1,2],tempfil:2,temporari:2,tend:9,tensil:8,term:9,termin:[1,2,8,9],terminate_func:2,terminate_on_nonzero_returncod:2,test:[6,7,9],tet:8,tetirr:8,tetrahedron:8,than:[7,8],thei:9,theme:0,thermostat:8,thi:[0,1,2,3,4,5,6,7,8,9],those:9,though:9,thousand:9,thre:8,three:9,threshold:[7,8],through:[2,9],throughput:9,time:[1,2,8,9],timeout:8,tmp:[2,9],to_averag:8,todo:6,toler:8,too:[1,8],too_few_band:8,tool:9,tort:9,total:[2,7,8,9],total_physical_memori:7,transfer:9,transpar:1,treat:8,tri:[1,2],tripl:[1,8],triple_product:8,tune:8,tupl:2,turn:1,two:[8,9],txt:[5,8],type:[1,2,5,7,8,9],typic:8,ultra:7,unabl:8,unconverg:[1,5],unconvergederrorhandl:[5,8,9],under:9,underscor:3,unfix:[2,5,6,7,8],unfortun:8,uniform:9,uniqu:2,unit:[7,9],unittest:9,univers:3,unlik:[5,8],unrecover:2,unrecoverable_error:1,unset:3,unsupport:[3,5,8],until:[7,8],updat:[1,8],upon:[2,8],use:[0,2,3,5,6,7,8,9],used:[0,1,5,6,8],useful:[1,2,8,9],user:2,uses:[0,1,2,9],using:[1,2,3,8,9],usual:[2,3,8],util:[1,10],valid:[1,2,9,10],valu:[8,9],valueerror:[3,5,8],variabl:[1,8,9],variou:4,variuo:4,vasp:[1,2,4,9,10],vasp_cmd:[2,8,9],vasp_command:4,vasp_job_kwarg:8,vasperrorhandl:[1,2,8,9],vaspfilesvalid:8,vaspinput:8,vaspinput_kei:8,vaspjob:[1,2,8,9],vaspmodd:8,vaspnebjob:8,vaspnptmdvalid:8,vasprun:8,vasprunxmlvalid:[2,8,9],vastli:1,vector:[7,8],veri:[0,8,9],version:8,versu:8,via:[2,8,9],vibrat:7,vienna:9,vincent:9,vldr:[2,9],vol:8,vol_change_tol:8,wai:[1,2,9],wait:[1,2],wall:[1,8],wall_tim:8,walltim:[1,8],walltimehandl:[1,8],want:[2,8],warn:8,waroqui:1,warranti:9,wavecar:8,wavefunct:8,well:[1,9],what:[3,8],whatev:[5,8],when:[1,2,5,6,7,8,9],where:[1,2,6,8,9],whether:[1,2,3,5,6,7,8,9],which:[1,2,3,5,6,8,9],whom:9,wildcard:2,william:9,wish:8,without:[3,5,7,8,9],work:[1,2,7,8,9],workflow:[2,9],world:[3,9],wors:8,would:[8,9],wouldn:8,wrap:8,wrapper:9,write:[8,9],written:[8,9],xiaohui:1,xml:8,xrang:9,yaml:[1,2],yet:6,yield:2,you:[0,2,8,9],your:[0,8,9],zbrent:[1,8],zero:[1,2],zheev:8,zhegv:8,zpotrf:8},titles:["krTheme Sphinx Style","Change Log","custodian package","custodian.ansible package","custodian.cli package","custodian.feff package","custodian.nwchem package","custodian.qchem package","custodian.vasp package","Custodian","custodian"],titleterms:{action:3,ansibl:3,api:9,calcul:9,chang:[1,9],cite:9,cli:4,content:[2,3,4,5,6,7,8],control:9,converge_geometri:4,converge_kpoint:4,cstdn:[4,9],custodian:[2,3,4,5,6,7,8,9,10],depend:9,development:9,doc:9,electron:9,exampl:9,feff:5,get:9,handler:[5,6,7,8],how:9,interpret:[3,5,8],job:[5,6,7,8,9],krtheme:0,licens:9,log:[1,9],modul:[2,3,4,5,6,7,8],new_handl:7,new_job:7,nwchem:6,option:9,packag:[2,3,4,5,6,7,8],practic:9,qchem:7,refer:9,requir:9,run_nwchem:4,run_vasp:4,simpl:9,spec:9,sphinx:0,stabl:9,structur:9,style:0,submodul:[2,3,4,5,6,7,8],subpackag:[2,3,5,6,7,8],usag:9,util:2,v2017:9,valid:8,vasp:8,version:[1,9],yaml:9}}) \ No newline at end of file diff --git a/docs_rst/custodian.feff.rst b/docs_rst/custodian.feff.rst index 80c8125d..29155f7c 100644 --- a/docs_rst/custodian.feff.rst +++ b/docs_rst/custodian.feff.rst @@ -1,6 +1,12 @@ custodian.feff package ====================== +Subpackages +----------- + +.. toctree:: + + Submodules ---------- diff --git a/docs_rst/custodian.qchem.rst b/docs_rst/custodian.qchem.rst index 302f833f..f6b13876 100644 --- a/docs_rst/custodian.qchem.rst +++ b/docs_rst/custodian.qchem.rst @@ -26,6 +26,22 @@ custodian.qchem.jobs module :undoc-members: :show-inheritance: +custodian.qchem.new\_handlers module +------------------------------------ + +.. automodule:: custodian.qchem.new_handlers + :members: + :undoc-members: + :show-inheritance: + +custodian.qchem.new\_jobs module +-------------------------------- + +.. automodule:: custodian.qchem.new_jobs + :members: + :undoc-members: + :show-inheritance: + Module contents --------------- diff --git a/docs_rst/custodian.rst b/docs_rst/custodian.rst index cf744540..00e0ae32 100644 --- a/docs_rst/custodian.rst +++ b/docs_rst/custodian.rst @@ -8,6 +8,7 @@ Subpackages custodian.ansible custodian.cli + custodian.feff custodian.nwchem custodian.qchem custodian.vasp diff --git a/setup.py b/setup.py index f2383bc9..7513bc61 100644 --- a/setup.py +++ b/setup.py @@ -15,7 +15,7 @@ setup( name="custodian", packages=find_packages(), - version="2018.3.10", + version="2018.6.11", install_requires=["monty>=0.9.0", "six", "ruamel.yaml>=0.15.6"], extras_require={"vasp, nwchem, qchem": ["pymatgen>=3.3.1"]}, package_data={},