def test_get_ghf_orbspin(self): orbspin = addons.get_ghf_orbspin(mf.mo_energy, mf.mo_occ) self.assertEqual(list(orbspin), [ 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ]) orbspin = addons.get_ghf_orbspin(mf_u.mo_energy, mf_u.mo_occ, is_rhf=False) self.assertEqual(list(orbspin), [ 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1 ])
def update_mo_(mf, mf1): _keys = mf._keys.union(mf1._keys) mf1.__dict__.update(mf.__dict__) mf1._keys = _keys if mf.mo_energy is not None: mf1.mo_energy = [] mf1.mo_occ = [] mf1.mo_coeff = [] nkpts = len(mf.kpts) is_rhf = isinstance(mf, scf.hf.RHF) for k in range(nkpts): if is_rhf: mo_a = mo_b = mf.mo_coeff[k] ea = getattr(mf.mo_energy[k], 'mo_ea', mf.mo_energy[k]) eb = getattr(mf.mo_energy[k], 'mo_eb', mf.mo_energy[k]) occa = mf.mo_occ[k] > 0 occb = mf.mo_occ[k] == 2 orbspin = mol_addons.get_ghf_orbspin( ea, mf.mo_occ[k], True) else: mo_a = mf.mo_coeff[0][k] mo_b = mf.mo_coeff[1][k] ea = mf.mo_energy[0][k] eb = mf.mo_energy[1][k] occa = mf.mo_occ[0][k] occb = mf.mo_occ[1][k] orbspin = mol_addons.get_ghf_orbspin( (ea, eb), (occa, occb), False) nao, nmo = mo_a.shape mo_energy = numpy.empty(nmo * 2) mo_energy[orbspin == 0] = ea mo_energy[orbspin == 1] = eb mo_occ = numpy.empty(nmo * 2) mo_occ[orbspin == 0] = occa mo_occ[orbspin == 1] = occb mo_coeff = numpy.zeros((nao * 2, nmo * 2), dtype=mo_a.dtype) mo_coeff[:nao, orbspin == 0] = mo_a mo_coeff[nao:, orbspin == 1] = mo_b mo_coeff = lib.tag_array(mo_coeff, orbspin=orbspin) mf1.mo_energy.append(mo_energy) mf1.mo_occ.append(mo_occ) mf1.mo_coeff.append(mo_coeff) return mf1
def update_mo_(mf, mf1): _keys = mf._keys.union(mf1._keys) mf1.__dict__.update(mf.__dict__) mf1._keys = _keys if mf.mo_energy is not None: mf1.mo_energy = [] mf1.mo_occ = [] mf1.mo_coeff = [] nkpts = len(mf.kpts) is_rhf = isinstance(mf, scf.hf.RHF) for k in range(nkpts): if is_rhf: mo_a = mo_b = mf.mo_coeff[k] ea = eb = mf.mo_energy[k] occa = mf.mo_occ[k] > 0 occb = mf.mo_occ[k] == 2 orbspin = mol_addons.get_ghf_orbspin(ea, mf.mo_occ[k], True) else: mo_a = mf.mo_coeff[0][k] mo_b = mf.mo_coeff[1][k] ea = mf.mo_energy[0][k] eb = mf.mo_energy[1][k] occa = mf.mo_occ[0][k] occb = mf.mo_occ[1][k] orbspin = mol_addons.get_ghf_orbspin((ea, eb), (occa, occb), False) nao, nmo = mo_a.shape mo_energy = numpy.empty(nmo*2) mo_energy[orbspin==0] = ea mo_energy[orbspin==1] = eb mo_occ = numpy.empty(nmo*2) mo_occ[orbspin==0] = occa mo_occ[orbspin==1] = occb mo_coeff = numpy.zeros((nao*2,nmo*2), dtype=mo_a.dtype) mo_coeff[:nao,orbspin==0] = mo_a mo_coeff[nao:,orbspin==1] = mo_b mo_coeff = lib.tag_array(mo_coeff, orbspin=orbspin) mf1.mo_energy.append(mo_energy) mf1.mo_occ.append(mo_occ) mf1.mo_coeff.append(mo_coeff) return mf1
def test_get_ghf_orbspin(self): orbspin = addons.get_ghf_orbspin(mf.mo_energy, mf.mo_occ) self.assertEqual(list(orbspin), [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]) orbspin = addons.get_ghf_orbspin(mf_u.mo_energy, mf_u.mo_occ, is_rhf=False) self.assertEqual(list(orbspin), [0,1,0,1,0,1,0,0,1,0,1,0,1,1,0,0,1,0,1,0,1,1,0,1,0,1])