def cas_22_pt(HHdist, xfnal, cfnal, hybs, basis='sto3g', output=None): ''' Don't include 0 in hybs; will do this automatically ''' if output is None: output = 'H2_{:.1f}.log'.format(HHdist) mol = gto.M(atom='H 0 0 0; H 0 0 {:.1f}'.format(HHdist), basis=basis, symmetry=True, output=output, verbose=4) hf = scf.RHF(mol) hf.kernel() ks = dft.RKS(mol) #ks.grids.level = 9 ks.xc = xfnal + ', ' + cfnal e_rks = ks.kernel() ot = otfnal.transfnal(ks) mc = mcscf.CASSCF(hf, 2, 2) mc.fcisolver = fci.solver(mol, singlet=True, symm=True) #mc.fix_spin_(ss=0) e_cas = mc.kernel()[0] assert (mc.converged) e_pdft = mcpdft.kernel(mc, ot) e_hyb = [] for hyb in hybs: ks.xc = '{0:.2f}*HF + {1:.2f}*{2:s}, {3:s}'.format( hyb, 1.0 - hyb, xfnal, cfnal) e_hyb.append(ks.kernel()) ot.otxc = 't{0:.2f}*HF + {1:.2f}*{2:s}, {3:s}'.format( hyb, 1.0 - hyb, xfnal, cfnal) e_hyb.append(mcpdft.kernel(mc, ot)) return [e_cas, e_pdft, e_rks] + [e for e in e_hyb]
def ref_pt(HHdist, gga_fnal, hyb_gga_fnal, basis='sto3g', output=None): if output is None: output = 'H2_{:.1f}_ref.log'.format(HHdist) mol = gto.M(atom='H 0 0 0; H 0 0 {:.1f}'.format(HHdist), basis=basis, symmetry=True, output=output, verbose=4) hf = scf.RHF(mol) hf.kernel() ks = dft.RKS(mol) #ks.grids.level = 9 ks.xc = gga_fnal e_gga = ks.kernel() ks.xc = hyb_gga_fnal e_hyb_gga = ks.kernel() ks.xc = gga_fnal ot = otfnal.transfnal(ks) mc = mcscf.CASSCF(hf, 2, 2) mc.fcisolver = fci.solver(mol, singlet=True, symm=True) #mc.fix_spin_(ss=0) e_cas = mc.kernel()[0] assert (mc.converged) e_pdft = mcpdft.kernel(mc, ot) return e_cas, e_gga, e_hyb_gga, e_pdft
def _init_ot_grids(self, my_ot, grids_level=None): if isinstance(my_ot, (str, np.string_)): ks = dft.RKS(self.mol) if my_ot[:1].upper() == 'T': ks.xc = my_ot[1:] self.otfnal = transfnal(ks) elif my_ot[:2].upper() == 'FT': ks.xc = my_ot[2:] self.otfnal = ftransfnal(ks) else: raise NotImplementedError(( 'On-top pair-density exchange-correlation functional names other than ' '"translated" (t) or "fully-translated" (ft). Nonstandard functionals can be specified by passing ' 'an object of class otfnal in place of a string.')) else: self.otfnal = my_ot self.grids = self.otfnal.grids if grids_level is not None: self.grids.level = kwargs['grids_level'] assert (self.grids.level == self.otfnal.grids.level)
ls_rel = mcscf.CASSCF(mf, 4, (2, 2)) ls_rel.fcisolver = fci.solver(mf.mol, singlet=True) els_rel = ls_rel.kernel()[0] print("CASSCF high-spin energy: {:.8f}".format(ehs)) print("CASSCF (vertical) low-spin energy: {:.8f}".format(els_vert)) print("CASSCF (relaxed) low-spin energy: {:.8f}".format(els_rel)) print("CASSCF vertical excitation energy (eV): {:.8f}".format( 27.2114 * (els_vert - ehs))) print("CASSCF relaxed excitation energy (eV): {:.8f}".format(27.2114 * (els_rel - ehs))) ks = dft.UKS(mol) ks.xc = 'pbe' ks.grids.level = 9 ot = otfnal.transfnal(ks) els_vert = mcpdft.kernel(ls_vert, ot)[0] els_rel = mcpdft.kernel(ls_rel, ot)[0] ehs = mcpdft.kernel(hs, ot)[0] print("MC-PDFT (tPBE) high-spin energy: {:.8f}".format(ehs)) print("MC-PDFT (tPBE) (vertical) low-spin energy: {:.8f}".format(els_vert)) print("MC-PDFT (tPBE) (relaxed) low-spin energy: {:.8f}".format(els_rel)) print("MC-PDFT (tPBE) vertical excitation energy (eV): {:.8f}".format( 27.2114 * (els_vert - ehs))) print("MC-PDFT (tPBE) relaxed excitation energy (eV): {:.8f}".format( 27.2114 * (els_rel - ehs))) ks = dft.UKS(mol) ks.xc = 'blyp' #ks.grids.level = 9