def _basis_offset_for_atoms(atoms, basis_tab): basoff = [0] n = 0 for at in atoms: symb = _symbol(at[0]) if symb in basis_tab: bas0 = basis_tab[symb] else: bas0 = basis_tab[_rm_digit(symb)] for b in bas0: angl = b[0] n += _num_contract(b) * (angl * 2 + 1) basoff.append(n) return n, basoff
def _basis_offset_for_atoms(atoms, basis_tab): basoff = [0] n = 0 for at in atoms: symb = _symbol(at[0]) if symb in basis_tab: bas0 = basis_tab[symb] else: bas0 = basis_tab[_rm_digit(symb)] for b in bas0: angl = b[0] n += _num_contract(b) * (angl*2+1) basoff.append(n) return n, basoff
def _make_mindo_mol(mol): assert (not mol.has_ecp()) def make_sto_6g(n, l, zeta): es = mopac_param.gexps[(n, l)] cs = mopac_param.gcoefs[(n, l)] return [l] + [(e * zeta**2, c) for e, c in zip(es, cs)] def principle_quantum_number(charge): if charge < 3: return 1 elif charge < 10: return 2 elif charge < 18: return 3 else: return 4 mindo_mol = copy.copy(mol) atom_charges = mindo_mol.atom_charges() atom_types = set(atom_charges) basis_set = {} for charge in atom_types: n = principle_quantum_number(charge) l = 0 sto_6g_function = make_sto_6g(n, l, mopac_param.ZS3[charge]) basis = [sto_6g_function] if charge > 2: # include p functions l = 1 sto_6g_function = make_sto_6g(n, l, mopac_param.ZP3[charge]) basis.append(sto_6g_function) basis_set[_symbol(int(charge))] = basis mindo_mol.basis = basis_set z_eff = mopac_param.CORE[atom_charges] mindo_mol.nelectron = int(z_eff.sum() - mol.charge) mindo_mol.build(0, 0) return mindo_mol