Source code for pynao.m_overlap_lil


from __future__ import print_function, division
from pynao.m_overlap_ni import overlap_ni

[docs]def overlap_lil(sv, ao_log=None, funct=overlap_ni,**kvargs): """ Computes the overlap matrix and returns it in List of Lists format (easy to index) Args: sv : (System Variables), this must have arrays of coordinates and species, etc Returns: overlap (real-space overlap) for the whole system """ from pynao.m_ao_matelem import ao_matelem_c from scipy.sparse import lil_matrix from numpy import array, int64, zeros aome = ao_matelem_c(sv.ao_log.rr, sv.ao_log.pp) me = aome.init_one_set(sv.ao_log) if ao_log is None else aome.init_one_set(ao_log) atom2s = zeros((sv.natm+1), dtype=int64) for atom,sp in enumerate(sv.atom2sp): atom2s[atom+1]=atom2s[atom]+me.ao1.sp2norbs[sp] sp2rcut = array([max(mu2rcut) for mu2rcut in me.ao1.sp_mu2rcut]) n = atom2s[-1] lil_mat = lil_matrix((n,n)) for atom1,[sp1,rv1,s1,f1] in enumerate(zip(sv.atom2sp,sv.atom2coord,atom2s,atom2s[1:])): for atom2,[sp2,rv2,s2,f2] in enumerate(zip(sv.atom2sp,sv.atom2coord,atom2s,atom2s[1:])): if (sp2rcut[sp1]+sp2rcut[sp2])**2<=sum((rv1-rv2)**2) : continue lil_mat[s1:f1,s2:f2] = funct(me,sp1,rv1,sp2,rv2,**kvargs) return lil_mat