def basis_subset2(symbols, largebasis='dzp', smallbasis='sz'): """Same as basis_subset, but for an entire list of atoms.""" largebasis = types2atomtypes(symbols, largebasis, default='dzp') smallbasis = types2atomtypes(symbols, smallbasis, default='sz') mask = [] for symbol, large, small in zip(symbols, largebasis, smallbasis): mask.extend(basis_subset(symbol, large, small)) return np.asarray(mask, bool)
def get_bfi2(symbols, basis, a_list): """Same as get_bfi, but does not require an LCAO calc""" basis = types2atomtypes(symbols, basis, default='dzp') bfs_list = [] i = 0 for a, symbol in enumerate(symbols): nao = Basis(symbol, basis[a]).nao if a in a_list: bfs_list += range(i, i + nao) i += nao return bfs_list
def get_bf_centers(atoms, basis=None): calc = atoms.get_calculator() if calc is None or isinstance(calc, SinglePointCalculator): symbols = atoms.get_chemical_symbols() basis_a = types2atomtypes(symbols, basis, 'dzp') nao_a = [Basis(symbol, type).nao for symbol, type in zip(symbols, basis_a)] else: if not calc.initialized: calc.initialize(atoms) nao_a = [calc.wfs.setups[a].nao for a in range(len(atoms))] pos_ic = [] for pos, nao in zip(atoms.get_positions(), nao_a): pos_ic.extend(pos[None].repeat(nao, 0)) return np.array(pos_ic)
def get_bfs_atoms(atoms, basis=None, default='dzp', method='extend'): """Get ba atoms - ase::atoms basis - dict of elements with correspondig basis set type default - str """ if basis is None: basis = {symbol:default for symbol in set(atoms.symbols)} symbols = atoms.get_chemical_symbols() basis_a = types2atomtypes(symbols, basis, default) nao_a = [Basis(symbol, type).nao for symbol, type in zip(symbols, basis_a)] Mvalues = [] Mattr = getattr(Mvalues, method) i0 = 0 for nao in nao_a: i1 = i0 + nao Mattr(list(range(i0,i1))) i0 = i1 return Mvalues