Skip to content

Guess Reuse

#!/usr/bin/env python
# Guess reuse example

import os
import sys

from tcpb import TCProtobufClient

# Water system
atoms = ["O", "H", "H"]
geom = [
    0.00000,
    0.00000,
    -0.06852,
    0.00000,
    -0.79069,
    0.54370,
    0.00000,
    0.79069,
    0.54370,
]
# Default geom is bohr, but this in angstrom

if len(sys.argv) != 3:
    print("Usage: {} host port".format(sys.argv[0]))
    exit(1)

with TCProtobufClient(host=sys.argv[1], port=int(sys.argv[2])) as TC:
    tc_opts = {
        "atoms": atoms,
        "charge": 0,
        "spinmult": 1,
        "closed_shell": True,
        "restricted": True,
        "method": "pbe0",
        "basis": "6-31g",
        # necessary to avoid density matrix purification on second calc which will
        # cause second calc to begin at different starting point than where first cals
        # ended
        "purify": "no",
    }

    results = TC.compute_job_sync("gradient", geom, "bohr", **tc_opts)

    # We can pull the orbital path from the previous job to feed in as a guess
    orb_path = os.path.join(results["job_scr_dir"], "c0")
    results = TC.compute_job_sync("gradient", geom, "bohr", guess=orb_path, **tc_opts)

    # Things look slightly different for unrestricted guesses
    tc_opts["closed_shell"] = False
    tc_opts["restricted"] = False
    results = TC.compute_job_sync("gradient", geom, "angstrom", **tc_opts)

    # TeraChem expects "guess <ca0 file> <cb0 file>"
    orb_paths = "{0}/ca0 {0}/cb0".format(results["job_scr_dir"])
    print(orb_paths)
    results = TC.compute_job_sync(
        "gradient", geom, "angstrom", guess=orb_paths, **tc_opts
    )