コード例 #1
0
def grab_3d_hs(mf):
    mol = mf.mol
    mo_coeff = mf.mo_coeff
    mc = mcscf.CASCI(mf, 5, 6)
    ncore = (mol.nelectron // 2) - 2
    nocc = ncore + 4
    symms = symm.label_orb_symm(mol, mol.irrep_name, mol.symm_orb, mo_coeff)
    irrep_cmo = {}
    for irrep in np.unique(symms[:ncore]):
        irrep_cmo[irrep] = np.count_nonzero(symms[:ncore] == irrep)
    cas_irreps = {'Ag': 2, 'B1g': 1, 'B2g': 1, 'B3g': 1}
    for iorb in range(ncore, nocc):
        cas_irreps[symms[iorb]] -= 1
        print("Found {} singly-occupied orbital".format(symms[iorb]))
    for key in cas_irreps:
        if cas_irreps[key] == 1: missing_3d = key
    irrep_cmo[missing_3d] -= 1
    cas_irreps = {'Ag': 2, 'B1g': 1, 'B2g': 1, 'B3g': 1}
    print("Missing D orbital from SOMOs is apparently {}".format(missing_3d))
    print("SOMOs: {}".format(symms[ncore:nocc]))
    idx_3d = symms == missing_3d
    idx_3d[ncore:] = False
    mo_coeff[:, idx_3d] = grab_ao(mol, mo_coeff[:, idx_3d], 'Fe 3d', sorting=1)
    mo_coeff = sort_mo_by_irrep(mc,
                                mo_coeff,
                                cas_irreps,
                                cas_irrep_ncore=irrep_cmo)
    symms = symm.label_orb_symm(mol, mol.irrep_name, mol.symm_orb, mo_coeff)
    return mo_coeff
コード例 #2
0
def grab_3d_ls(mf):
    mol = mf.mol
    mo_coeff = mf.mo_coeff
    mc = mcscf.CASCI(mf, 5, 6)
    ncore = mol.nelectron // 2
    symms = symm.label_orb_symm(mol, mol.irrep_name, mol.symm_orb, mo_coeff)
    idx_virt_ag = symms == 'Ag'
    idx_virt_ag[:ncore] = False
    mo_coeff[:, idx_virt_ag] = grab_ao(mol,
                                       mo_coeff[:, idx_virt_ag],
                                       'Fe 3d',
                                       sorting=-1)
    for ir in ('B1g', 'B2g', 'B3g'):
        idx_occ_ir = symms == ir
        idx_occ_ir[ncore:] = False
        mo_coeff[:, idx_occ_ir] = grab_ao(mol,
                                          mo_coeff[:, idx_occ_ir],
                                          'Fe 3d',
                                          sorting=1)
    irrep_cmo = {}
    for irrep in np.unique(symms[:ncore]):
        irrep_cmo[irrep] = np.count_nonzero(symms[:ncore] == irrep)
    irrep_cmo['B1g'] -= 1
    irrep_cmo['B2g'] -= 1
    irrep_cmo['B3g'] -= 1
    mo_coeff = sort_mo_by_irrep(mc,
                                mo_coeff, {
                                    'Ag': 2,
                                    'B1g': 1,
                                    'B2g': 1,
                                    'B3g': 1
                                },
                                cas_irrep_ncore=irrep_cmo)
    symms = symm.label_orb_symm(mol, mol.irrep_name, mol.symm_orb, mo_coeff)
    return mo_coeff
コード例 #3
0
ファイル: casci_symm.py プロジェクト: berquist/pyscf
 def sort_mo_by_irrep(self, cas_irrep_nocc,
                      cas_irrep_ncore=None, mo_coeff=None, s=None):
     '''Select active space based on symmetry information.
     See also :func:`pyscf.mcscf.addons.sort_mo_by_irrep`
     '''
     if mo_coeff is None: mo_coeff = self.mo_coeff
     return addons.sort_mo_by_irrep(self, mo_coeff, cas_irrep_nocc,
                                    cas_irrep_ncore, s)
コード例 #4
0
 def sort_mo_by_irrep(self, cas_irrep_nocc,
                      cas_irrep_ncore=None, mo_coeff=None, s=None):
     '''Select active space based on symmetry information.
     See also :func:`pyscf.mcscf.addons.sort_mo_by_irrep`
     '''
     if mo_coeff is None: mo_coeff = self.mo_coeff
     return addons.sort_mo_by_irrep(self, mo_coeff, cas_irrep_nocc,
                                    cas_irrep_ncore, s)
コード例 #5
0
ファイル: casci.py プロジェクト: yidapa/pyscf
 def sort_mo_by_irrep(self, cas_irrep_nocc,
                      cas_irrep_ncore=None, mo_coeff=None, s=None):
     from pyscf.mcscf import addons
     if mo_coeff is None: mo_coeff = self.mo_coeff
     return addons.sort_mo_by_irrep(self, mo_coeff, cas_irrep_nocc,
                                    cas_irrep_ncore, s)