Hi,
I want to do optimization with Counterpose (CP) Basis set superposition error (BSSE) correction using psi4 as solver (providing energy and forces) and ASE’s relaxation algorithms (e.g. BFGS or FIRE)
I was able to figure out how to connect Psi4 calc object with ase.optimize.BFGS but I’m not able to figure out how to pass bsse_type and how to specify the fragments (i.e. the two weakly bounded molecules) which is normaly done by hyphens (--
) it psi4 input.
The reason why I want to use ASE optimizer rather than psi4 optimizer (optking) is that optking constantly crashes or get stuck, so I want to use something simple and robuts like FIRE.
https://wiki.fysik.dtu.dk/ase/ase/calculators/psi4.html
https://psicode.org/psi4manual/master/nbody.html
Just for context I attach the input for psi4 and my ASE script
memory 1GB
molecule dimer {
0 1
H 1.6522629858 -0.2406430114 -0.7608766593
O 1.3817487352 0.2968970467 0.0000000000
H 1.6522629858 -0.2406430114 0.7608766593
--
H -0.5037084891 -0.0147759884 0.0000000000
O -1.4374843922 -0.2997713310 0.0000000000
H -1.9162521588 0.5416789881 0.0000000000
units angstrom
}
set {
basis cc-pvdz
scf_type df
opt_type MIN
geom_maxiter 1000
g_convergence qchem
print_trajectory_xyz_file true
opt_coordinates cartesian
step_type nr
}
optimize('b3lyp-d3', bsse_type='cp' )
#!/usr/bin/python
from ase.optimize import BFGS,BFGSLineSearch,FIRE,GPMin,MDMin, QuasiNewton
from ase.calculators.psi4 import Psi4
from ase.build import molecule
import numpy as np
atoms = molecule('H2O')
#calc = Psi4(atoms = atoms, method = 'b3lyp', memory = '500MB', basis = 'CC-pVDZ')
calc = Psi4(atoms = atoms, method = 'b3lyp-d3', memory = '500MB', basis = 'CC-pVDZ')
#calc = Psi4(atoms = atoms, method = 'M06-L-D3ZEROATM', memory = '500MB', basis = 'CC-pVDZ')
atoms.calc = calc
opt = BFGSLineSearch(atoms, trajectory='opt.traj', logfile='opt.log')
opt.run(fmax=1.00E-04)
#print(atoms.get_potential_energy())
#print(atoms.get_forces())