Configuring SCF parameters#
When running a SCF calculation with PySCF, there are a number of parameters that are set to control, for example, the convergence criteria or other aspects of the computation (e.g diis, level_shift etc).
from pyscf import gto
from skala.pyscf import SkalaKS
/home/runner/micromamba/envs/skala/lib/python3.12/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
from .autonotebook import tqdm as notebook_tqdm
We create a molecule to use in the SCF calculation:
mol = gto.M(
atom="""H 0 0 0; H 0 0 1.4""",
basis="def2-tzvp",
)
As seen in the Using the Skala functional in PySCF example notebook, this is how we run a calculation using Skala functional.
ks = SkalaKS(mol, xc="skala")
ks.kernel()
ks.dump_scf_summary()
converged SCF energy = -1.07091605125981
**** SCF Summaries ****
Total Energy = -1.070916051259805
Nuclear Repulsion Energy = 0.377654773327513
One-electron Energy = -1.897310626705051
Two-electron Coulomb Energy = 0.997543912225648
DFT Exchange-Correlation Energy = -0.548804110107915
Empirical Dispersion Energy = -0.000328948758201
We can check the convergence tolerance as follows:
print(ks.conv_tol)
print(ks.conv_tol_grad)
1e-09
None
This is how you can modify such settings (and a few more) in order to use the same ones as in our paper.
ks_config = {
"conv_tol": 5e-6,
"conv_tol_grad": 0.001,
"max_cycle": 60,
"damp": 0.0,
"diis_start_cycle": 1,
"level_shift": 0.0,
}
ks = SkalaKS(mol, ks_config=ks_config, xc="skala")
We print again the convergence tolerance to check that it was updated:
print(ks.conv_tol)
print(ks.conv_tol_grad)
5e-06
0.001
In our paper, we also use a retry-logic to modify the SCF settings and run it again in case the computation does not converge. See section D.3 in the paper for more details.