def ring(label, num, d): ''' Builds a ring of a given atom using pyscf.tools.ring Parameters ---------- label : str atom label num : int number of atoms in the ring d : float distance between atoms in the ring Returns ------- atoms a list of tuples of (label, np.array([x, y, z])) for each atom ''' from pyscf.tools import ring as _ring atoms = [(label, np.asarray(x, dtype=types.float64)) for x in _ring.make(num, d)] return atoms
''' Inplace version of state_average ''' sacasscf = state_average_mix(casscf, fcisolvers, weights) casscf.__class__ = sacasscf.__class__ casscf.__dict__.update(sacasscf.__dict__) return casscf del (BASE, MAP2HF_TOL) if __name__ == '__main__': from pyscf import mcscf from pyscf.tools import ring mol = gto.M(verbose=0, output=None, atom=[['H', c] for c in ring.make(6, 1.2)], basis='6-31g') m = scf.RHF(mol) ehf = m.scf() mc = mcscf.CASSCF(m, 6, 6) mc.verbose = 4 emc, e_ci, fcivec, mo, mo_energy = mc.mc1step() print(ehf, emc, emc - ehf) print(emc - -3.272089958) rdm1 = make_rdm1(mc, mo, fcivec) rdm1, rdm2 = make_rdm12(mc, mo, fcivec) print(rdm1)
if callable(old_cb): old_cb(envs) casscf.callback = hot_load return casscf if __name__ == '__main__': from pyscf import gto from pyscf import mcscf from pyscf.tools import ring mol = gto.Mole() mol.verbose = 0 mol.output = None mol.atom = [['H', c] for c in ring.make(6, 1.2)] mol.basis = '6-31g' mol.build() m = scf.RHF(mol) ehf = m.scf() mc = mcscf.CASSCF(m, 6, 6) mc.verbose = 4 emc, e_ci, fcivec, mo, mo_energy = mc.mc1step() print(ehf, emc, emc-ehf) print(emc - -3.272089958) rdm1 = make_rdm1(mc, mo, fcivec) rdm1, rdm2 = make_rdm12(mc, mo, fcivec) print(rdm1)
''' # # Modify the default core valence settings for Be and Al # # 1 s-shell as core, 1 s-shell + 1 p-shell as valence lo.set_atom_conf('Be', ('1s', '1s1p')) # 2 s-shells + 1 p-shell as core, 1 s-shell + 1 p-shell + 1 d-shell as valence lo.set_atom_conf('Al', ('2s1p', '1s1p1d')) # double-d shell for Fe, ie taking 3d and 4d orbitals as valence lo.set_atom_conf('Fe', 'double d') # double-d shell for Mo, ie taking 4d and 5d orbitals as valence lo.set_atom_conf('Mo', 'double d') # Put 3d orbital in valence space for Si lo.set_atom_conf('Si', 'polarize') # # Localize Be12 ring # mol = gto.M(atom = [('Be', x) for x in ring.make(12, 2.4)], basis='ccpvtz') c = lo.orth.orth_ao(mol) molden.from_mo(mol, 'be12.molden', c) # # Localize Al12 ring # mol = gto.M(atom = [('Al', x) for x in ring.make(12, 2.4)], basis='ccpvtz') c = lo.orth.orth_ao(mol) molden.from_mo(mol, 'al12.molden', c)
_bi_trace(dm2bb, s_xA, s_xB) - _bi_trace(dm2ab.transpose(2, 3, 0, 1), s_xA, s_xB)) * .25 ssxy = (_bi_trace(dm2abba, s_Ax, s_Bx) + _bi_trace(dm2baab, s_Ax, s_Bx)) * .5 ssxy += (_bi_trace(dm2abba, s_xA, s_xB) + _bi_trace(dm2baab, s_xA, s_xB)) * .5 ss = ssxy + ssz return ss * .5 return eval_ss_frac if __name__ == '__main__': mol = gto.Mole() mol.atom = [('C', x) for x in ring.make(13, 1.25)] # mol.atom = ''' # C 0.00000 0.00000 0.00000 # C 0.00000 0.00000 1.25000 # C 0.00000 0.00000 2.5000 # C 0.00000 0.00000 3.7500 # ''' mol.basis = 'cc-pVDZ' mol.symmetry = 1 mol.symmetry_subgroup = 'C2v' mol.charge = 0 mol.spin = 0 mol.verbose = 5 mol.build() nbas_atm = 14
ssz+=(_bi_trace(dm2aa, s_xA, s_xB) - _bi_trace(dm2ab, s_xA, s_xB) + _bi_trace(dm2bb, s_xA, s_xB) - _bi_trace(dm2ab.transpose(2,3,0,1), s_xA, s_xB)) * .25 ssxy =(_bi_trace(dm2abba, s_Ax, s_Bx) + _bi_trace(dm2baab, s_Ax, s_Bx)) * .5 ssxy+=(_bi_trace(dm2abba, s_xA, s_xB) + _bi_trace(dm2baab, s_xA, s_xB)) * .5 ss = ssxy + ssz return ss*.5 return eval_ss_frac if __name__ == '__main__': mol = gto.Mole() mol.atom = [('C', x) for x in ring.make(13,1.25)] # mol.atom = ''' # C 0.00000 0.00000 0.00000 # C 0.00000 0.00000 1.25000 # C 0.00000 0.00000 2.5000 # C 0.00000 0.00000 3.7500 # ''' mol.basis='cc-pVDZ' mol.symmetry = 1 mol.symmetry_subgroup = 'C2v' mol.charge = 0 mol.spin = 0 mol.verbose = 5 mol.build() nbas_atm = 14