Source code for ccs_fit.scripts.ccs_export_sktable

import sys
import os
import numpy as np
import itertools as it
from collections import OrderedDict, defaultdict
from numpy import linalg as LA
import json
from ase.units import Bohr, Hartree


[docs]def _write(elem1, elem2, CCS_params, exp=True): elem1 = elem1 elem2 = elem2 no_pair = False try: pair = elem1 + "-" + elem2 rcut = CCS_params["Two_body"][pair]["r_cut"] except: try: pair = elem2 + "-" + elem1 rcut = CCS_params["Two_body"][pair]["r_cut"] except: rcut = 0.0 no_pair = True if no_pair: pass else: Rmin = CCS_params["Two_body"][pair]["r_min"] / Bohr Rcut = CCS_params["Two_body"][pair]["r_cut"] / Bohr a = CCS_params["Two_body"][pair]["spl_a"] b = CCS_params["Two_body"][pair]["spl_b"] c = CCS_params["Two_body"][pair]["spl_c"] d = CCS_params["Two_body"][pair]["spl_d"] aa = CCS_params["Two_body"][pair]["exp_a"] bb = CCS_params["Two_body"][pair]["exp_b"] cc = CCS_params["Two_body"][pair]["exp_c"] exp = False x = CCS_params["Two_body"][pair]["r"] dx = CCS_params["Two_body"][pair]["dr"] with open(f"{elem1}-{elem2}.spl", "w") as f: print("Spline", file=f) print(len(x), (Rcut + dx), file=f) print(aa * Bohr, bb + np.log(1 / Hartree), cc / Hartree, file=f) for i in range(len(x)): if i < (len(x) - 1): print( x[i] / Bohr, (x[i+1]) / Bohr, a[i] / Hartree, b[i] * (Bohr) / Hartree, c[i] * (Bohr**2) / Hartree, d[i] * (Bohr**3) / Hartree, file=f, ) else: print( x[i] / Bohr, (x[i] + dx) / Bohr, a[i] / Hartree, b[i] * (Bohr) / Hartree, c[i] * (Bohr**2) / Hartree, d[i] * (Bohr**3) / Hartree, "0.0 0.0", file=f, ) with open(f"{elem2}-{elem1}.spl", "w") as f: print("Spline", file=f) print(len(x), (Rcut + dx) / Bohr, file=f) print(aa * Bohr, bb + np.log(1 / Hartree), cc / Hartree, file=f) for i in range(len(x)): if i < (len(x) - 1): print( x[i] / Bohr, (x[i+1]) / Bohr, a[i] / Hartree, b[i] * (Bohr) / Hartree, c[i] * (Bohr**2) / Hartree, d[i] * (Bohr**3) / Hartree, file=f, ) else: print( x[i] / Bohr, (x[i] + dx) / Bohr, a[i] / Hartree, b[i] * (Bohr) / Hartree, c[i] * (Bohr**2) / Hartree, d[i] * (Bohr**3) / Hartree, "0.0 0.0", file=f, )
[docs]def write_dftb_spline(CCS_params_file): with open(CCS_params_file, "r") as f: CCS_params = json.load(f) for pair in CCS_params["Two_body"]: elem = pair.split("-") _write(elem[0], elem[1], CCS_params, exp=True)
[docs]def main(): size = os.get_terminal_size() c = size.columns txt = "-"*c print("") print(txt) try: import art txt = art.text2art('CCS:export sk-table') print(txt) except: print('CCS: export sk-table') try: CCS_params_file = sys.argv[1] except: print("Please provide CCS params-file as first argument.") exit() size = os.get_terminal_size() c = size.columns txt = "-"*c print(txt) print("") write_dftb_spline(CCS_params_file)
if __name__ == "__main__": main()