def build_3dgrid(me, sp1, R1, sp2, R2, **kw): """ me: prod_log class """ from pyscf import dft from pyscf.nao import nao assert sp1 >= 0 assert sp2 >= 0 if ((R1 - R2)**2).sum() < 1e-7: mol = nao(xyz_list=[[int(me.aos[0].sp2charge[sp1]), R1]]) else: mol = nao(xyz_list=[[int(me.aos[0].sp2charge[sp1]), R1], [int(me.aos[1].sp2charge[sp2]), R2]]) atom2rcut=np.array([me.aos[isp].sp_mu2rcut[sp].max() \ for isp,sp in enumerate([sp1,sp2])]) grids = dft.gen_grid.Grids(mol) grids.level = kw[ 'level'] if 'level' in kw else 3 # precision as implemented in pyscf grids.radi_method = gauss_legendre grids.dump_flags() grids.build(atom2rcut=atom2rcut) #grids.build() return grids
def test_laplace_gto_vs_nao(self): """ Test computation of kinetic energy between NAOs against those computed between GTOs""" from pyscf.nao.m_laplace_am import laplace_am tref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('int1e_kin')) sv = nao(gto=mol) tkin = (0.5 * sv.overlap_coo(funct=laplace_am)).toarray() self.assertTrue(abs(tref - tkin).sum() / len(tkin) < 5e-9)
def test_overlap_gto_vs_nao(self): """ Test computation of overlaps between NAOs against overlaps computed between GTOs""" from pyscf.nao.m_overlap_am import overlap_am oref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('cint1e_ovlp_sph')) sv = nao(gto=mol) over = sv.overlap_coo(funct=overlap_am).toarray() self.assertTrue(abs(over - oref).sum() < 5e-9)
def test_laplace_gto_vs_nao(self): """ Test computation of kinetic energy between NAOs against those computed between GTOs""" from pyscf.nao.m_laplace_am import laplace_am tref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('int1e_kin')) sv = nao(gto=mol) tkin = (0.5*sv.overlap_coo(funct=laplace_am)).toarray() self.assertTrue(abs(tref-tkin).sum()/len(tkin)<5e-9)
def test_overlap_gto_vs_nao(self): """ Test computation of overlaps between NAOs against overlaps computed between GTOs""" from pyscf.nao.m_overlap_am import overlap_am oref = conv.conv_yzx2xyz_2d(mol.intor_symmetric('cint1e_ovlp_sph')) sv = nao(gto=mol) over = sv.overlap_coo(funct=overlap_am).toarray() self.assertTrue(abs(over-oref).sum()<5e-9)
def test_dipole_coo(self): """ Test computation of dipole matrix elements """ sv = nao(gto=mol) dipme = sv.dipole_coo() self.assertAlmostEqual(dipme[0].sum(), 23.8167121803) self.assertAlmostEqual(dipme[1].sum(), 18.9577251654) self.assertAlmostEqual(dipme[2].sum(), 48.1243277097)
def test_vne_gto_vs_nao(self): """ Test computation of matrix elements of nuclear-electron attraction """ vne = mol.intor_symmetric('int1e_nuc') vne_gto = conv.conv_yzx2xyz_2d(vne) sv = nao(gto=mol) vne_nao = sv.vnucele_coo_coulomb(level=1) #print('a,b,c', (vne_nao).sum(), (vne_gto).sum(), abs(vne_nao-vne_gto).sum()/vne_gto.size) self.assertTrue(abs(vne_nao - vne_gto).sum() / vne_gto.size < 5e-6)
def test_vne_gto_vs_nao(self): """ Test computation of matrix elements of nuclear-electron attraction """ vne = mol.intor_symmetric('int1e_nuc') vne_gto = conv.conv_yzx2xyz_2d(vne) sv = nao(gto=mol) vne_nao = sv.vnucele_coo_coulomb(level=1) #print('a,b,c', (vne_nao).sum(), (vne_gto).sum(), abs(vne_nao-vne_gto).sum()/vne_gto.size) self.assertTrue(abs(vne_nao-vne_gto).sum()/vne_gto.size<5e-6)
def test_prdred(self): """ """ from pyscf.nao import nao sv = nao(gto=mol) self.assertEqual(sv.sp2charge[0], 1) pt = prod_talman_c(sv.ao_log) jtb,clbdtb,lbdtb=pt.prdred_terms(2,4) self.assertEqual(len(jtb), 565) self.assertEqual(pt.lbdmx, 14)
def test_bilocal(self): """ Build 3d integration scheme for two centers.""" sv=nao(xyz_list=[ [8, [0.0, 0.0, 0.0]], [1, [1.0, 1.0, 1.0] ]]) atom2rcut=np.array([5.0, 4.0]) grids = dft.gen_grid.Grids(sv) grids.level = 2 # precision as implemented in pyscf grids.radi_method = gauss_legendre grids.build(atom2rcut=atom2rcut) self.assertEqual(len(grids.weights), 20648)
def test_prdred(self): """ """ from pyscf.nao import nao sv = nao(gto=mol) self.assertEqual(sv.sp2charge[0], 1) pt = prod_talman_c(sv.ao_log) jtb, clbdtb, lbdtb = pt.prdred_terms(2, 4) self.assertEqual(len(jtb), 565) self.assertEqual(pt.lbdmx, 14)
def test_ao_log_gto(self): """ This is indeed for initializing with auxiliary basis set""" from pyscf.nao import nao sv = nao(gto=mol) ao = ao_log(gto=mol, nao=sv) #print(__name__, dir(ao)) self.assertEqual(ao.nr, 1024) self.assertEqual(ao.jmx, 2) for a,b in zip(sv.sp2charge, ao.sp2charge): self.assertEqual(a,b)
def test_bilocal(self): """ Build 3d integration scheme for two centers.""" sv = nao(xyz_list=[[8, [0.0, 0.0, 0.0]], [1, [1.0, 1.0, 1.0]]]) atom2rcut = np.array([5.0, 4.0]) grids = dft.gen_grid.Grids(sv) grids.level = 2 # precision as implemented in pyscf grids.radi_method = gauss_legendre grids.build(atom2rcut=atom2rcut) self.assertEqual(len(grids.weights), 20648)
def test_0006_02_nao_noghost(self): import os from pyscf.nao import nao from pyscf.nao.m_overlap_am import overlap_am dname = os.path.join(os.path.split(__file__)[0], 'test_ag13_noghost') sv = nao(label='siesta', cd=dname) aa = sv.vna_coo().toarray() oc = sv.overlap_check(funct=overlap_am) self.assertTrue(oc[0])
def build_3dgrid(me, sp1, R1, sp2, R2, **kw): from pyscf import dft from pyscf.nao import nao from pyscf.nao.m_gauleg import gauss_legendre assert sp1>=0 assert sp2>=0 if ( (R1-R2)**2 ).sum()<1e-7 : mol=nao(xyz_list=[ [int(me.aos[0].sp2charge[sp1]), R1] ]) else : mol=nao(xyz_list=[ [int(me.aos[0].sp2charge[sp1]), R1], [int(me.aos[1].sp2charge[sp2]), R2] ]) atom2rcut=np.array([me.aos[isp].sp_mu2rcut[sp].max() for isp,sp in enumerate([sp1,sp2])]) grids = dft.gen_grid.Grids(mol) grids.level = kw['level'] if 'level' in kw else 3 # precision as implemented in pyscf grids.radi_method=gauss_legendre grids.build(atom2rcut=atom2rcut) #grids.build() return grids
def test_atom2sv(self): """ Test costructing a skeleton for later use to define spherical grid with pySCF """ dl = [ [1, [1.0, 0.44, 2.0]], [8, [0.0, 0.0, 0.1]], [1, [0.0, 0.0, -2.0]]] sv = nao(xyz_list=dl) self.assertEqual(sv.natoms, len(dl)) for ia,a in enumerate(dl): self.assertEqual(sv.sp2charge[sv.atom2sp[ia]], a[0]) self.assertTrue(np.all(sv.atom2coord[ia,:]==a[1])) self.assertTrue(sv.atom2s is None)
def test_0006_01_nao_ghost(self): import os from pyscf.nao import nao from pyscf.nao.m_overlap_am import overlap_am dname = os.getcwd()+'/test_ag13_ghost' sv = nao(label='siesta', cd=dname) oc = sv.overlap_check(funct=overlap_am) self.assertTrue(oc[0]) vna = sv.vna_coo().toarray()
def test_gto2sv_df(self): from pyscf import scf """ Test import of density-fitting Gaussian functions ... hm """ mf = scf.density_fit(scf.RHF(mol)) self.assertAlmostEqual(mf.scf(), -76.025936299702536, 2) sv = nao(gto=mol) prod_log = prod_log_c().init_prod_log_df(mf.with_df.auxmol, sv) self.assertEqual(prod_log.rr[0], sv.ao_log.rr[0]) self.assertEqual(prod_log.pp[0], sv.ao_log.pp[0]) self.assertEqual(prod_log.nspecies, sv.ao_log.nspecies) self.assertEqual(prod_log.sp2charge, sv.ao_log.sp2charge)
def test_gto2sv_prod_log(self): """ Test what ? """ sv = nao(gto=mol) prod_log = prod_log_c(ao_log=sv.ao_log, tol_loc=1e-4) mae, mxe, lll = prod_log.overlap_check() self.assertTrue(all(lll)) self.assertEqual(prod_log.nspecies, 2) self.assertEqual(prod_log.sp2nmult[0], 7) self.assertEqual(prod_log.sp2nmult[1], 20) self.assertEqual(prod_log.sp2norbs[0], 15) self.assertEqual(prod_log.sp2norbs[1], 70)
def test_atom2sv(self): """ Test costructing a skeleton for later use to define spherical grid with pySCF """ dl = [[1, [1.0, 0.44, 2.0]], [8, [0.0, 0.0, 0.1]], [1, [0.0, 0.0, -2.0]]] sv = nao(xyz_list=dl) self.assertEqual(sv.natoms, len(dl)) for ia, a in enumerate(dl): self.assertEqual(sv.sp2charge[sv.atom2sp[ia]], a[0]) self.assertTrue(np.all(sv.atom2coord[ia, :] == a[1])) self.assertTrue(sv.atom2s is None)
def test_gto2sv_prod_log(self): """ Test what ? """ sv = nao(gto=mol) prod_log = prod_log_c().init_prod_log_dp(sv.ao_log, tol_loc=1e-4) mae,mxe,lll=prod_log.overlap_check() self.assertTrue(all(lll)) self.assertEqual(prod_log.nspecies, 2) self.assertEqual(prod_log.sp2nmult[0], 7) self.assertEqual(prod_log.sp2nmult[1], 20) self.assertEqual(prod_log.sp2norbs[0], 15) self.assertEqual(prod_log.sp2norbs[1], 70)
def test_one_center(self): """ Build 3d integration coordinates and weights for just one center. """ sv=nao(xyz_list=[ [8, [0.0, 0.0, 0.0]]]) atom2rcut=np.array([5.0]) g = dft.gen_grid.Grids(sv) g.level = 1 # precision as implemented in pyscf g.radi_method = gauss_legendre g.build(atom2rcut=atom2rcut) #print( max( np.linalg.norm(g.coords, axis=1) ) ) #print( g.weights.sum(), 4.0 *np.pi*5.0**3 / 3.0 ) self.assertAlmostEqual(max( np.linalg.norm(g.coords, axis=1) ), 4.9955942742763986) self.assertAlmostEqual(g.weights.sum(), 4.0 *np.pi*5.0**3 / 3.0) self.assertEqual(len(g.weights), 6248)
def test_ls_contributing(self): """ To test the list of contributing centers """ sv = nao(gto=mol) pb = prod_basis() pb.sv = sv pb.sv.ao_log.sp2rcut[0] = 10.0 pb.prod_log = sv.ao_log pb.prod_log.sp2rcut[0] = 10.0 pb.ac_rcut = max(sv.ao_log.sp2rcut) pb.ac_npc_max = 10 lsc = pb.ls_contributing(0,1) self.assertEqual(len(lsc),10) lsref = [ 0, 1, 13, 7, 5, 43, 42, 39, 38, 10] for i,ref in enumerate(lsref) : self.assertEqual(lsc[i],ref)
def test_one_center(self): """ Build 3d integration coordinates and weights for just one center. """ sv = nao(xyz_list=[[8, [0.0, 0.0, 0.0]]]) atom2rcut = np.array([5.0]) g = dft.gen_grid.Grids(sv) g.level = 1 # precision as implemented in pyscf g.radi_method = gauss_legendre g.build(atom2rcut=atom2rcut) #print( max( np.linalg.norm(g.coords, axis=1) ) ) #print( g.weights.sum(), 4.0 *np.pi*5.0**3 / 3.0 ) self.assertAlmostEqual(max(np.linalg.norm(g.coords, axis=1)), 4.9955942742763986) self.assertAlmostEqual(g.weights.sum(), 4.0 * np.pi * 5.0**3 / 3.0) self.assertEqual(len(g.weights), 6248)
def test_vna_n2(self): dname = dirname(abspath(__file__)) n = nao(label='n2', cd=dname) m = 200 dvec, midv = 2 * (n.atom2coord[1] - n.atom2coord[0]) / m, ( n.atom2coord[1] + n.atom2coord[0]) / 2.0 vgrid = np.tensordot(np.array(range(-m, m + 1)), dvec, axes=0) + midv sgrid = np.array(range(-m, m + 1)) * np.sqrt((dvec * dvec).sum()) vna = n.vna(vgrid) #print(vna.shape, sgrid.shape) #np.savetxt('vna_n2_0004.txt', np.row_stack((sgrid, vna)).T) ref = np.loadtxt(dname + '/vna_n2_0004.txt-ref') for r, d in zip(ref[:, 1], vna): self.assertAlmostEqual(r, d)
def test_gw(self): """ This is GW """ mol = gto.M( verbose = 0, atom = '''Ag 0.0 0.0 -0.3707; Ag 0.0 0.0 0.3707''', basis = 'cc-pvdz-pp',) gto_mf = scf.RHF(mol)#.density_fit() gto_mf.kernel() print('gto_mf.mo_energy:', gto_mf.mo_energy) s = nao(mf=gto_mf, gto=mol, verbosity=0) oref = s.overlap_coo().toarray() print('s.norbs:', s.norbs, oref.sum()) pb = prod_basis(nao=s, algorithm='fp') pab2v = pb.get_ac_vertex_array() mom0,mom1=pb.comp_moments() orec = np.einsum('p,pab->ab', mom0, pab2v) print( abs(orec-oref).sum()/oref.size, np.amax(abs(orec-oref)) )
def test_ao_eval(self): from pyscf.nao.m_ao_eval_libnao import ao_eval_libnao from pyscf.nao.m_ao_eval import ao_eval """ """ sv = nao(gto=mol) ra = np.array([2.0333, 0.101, 2.333]) coords = np.array([[0.0333, 1.111, 3.333]]) ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords) self.assertAlmostEqual(ao_vals_lib[0,0], 0.021725938009701302) ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 1, coords) self.assertAlmostEqual(ao_vals_lib[1,0], 0.0017709123325328384) ra = 4.0*np.random.rand(3) coords = 3.0*np.random.rand(10,3) ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords) ao_vals_py = ao_eval(sv.ao_log, ra, 0, coords) for aocc1, aocc2 in zip(ao_vals_lib, ao_vals_py): for ao1, ao2 in zip(aocc1, aocc2): self.assertAlmostEqual(ao1, ao2)
def test_gw(self): """ This is GW """ mol = gto.M( verbose=0, atom='''Ag 0.0 0.0 -0.3707; Ag 0.0 0.0 0.3707''', basis='cc-pvdz-pp', ) gto_mf = scf.RHF(mol) #.density_fit() gto_mf.kernel() print('gto_mf.mo_energy:', gto_mf.mo_energy) s = nao(mf=gto_mf, gto=mol, verbosity=0) oref = s.overlap_coo().toarray() print('s.norbs:', s.norbs, oref.sum()) pb = prod_basis(nao=s, algorithm='fp') pab2v = pb.get_ac_vertex_array() mom0, mom1 = pb.comp_moments() orec = np.einsum('p,pab->ab', mom0, pab2v) print(abs(orec - oref).sum() / oref.size, np.amax(abs(orec - oref)))
def test_ao_eval(self): from pyscf.nao.m_ao_eval_libnao import ao_eval_libnao from pyscf.nao.m_ao_eval import ao_eval """ """ sv = nao(gto=mol) ra = np.array([2.0333, 0.101, 2.333]) coords = np.array([[0.0333, 1.111, 3.333]]) ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords) self.assertAlmostEqual(ao_vals_lib[0, 0], 0.021725938009701302) ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 1, coords) self.assertAlmostEqual(ao_vals_lib[1, 0], 0.0017709123325328384) ra = 4.0 * np.random.rand(3) coords = 3.0 * np.random.rand(10, 3) ao_vals_lib = ao_eval_libnao(sv.ao_log, ra, 0, coords) ao_vals_py = ao_eval(sv.ao_log, ra, 0, coords) for aocc1, aocc2 in zip(ao_vals_lib, ao_vals_py): for ao1, ao2 in zip(aocc1, aocc2): self.assertAlmostEqual(ao1, ao2)
def test_vna_lih(self): dname = dirname(abspath(__file__)) n = nao(label='lih', cd=dname) m = 200 dvec, midv = 2 * (n.atom2coord[1] - n.atom2coord[0]) / m, ( n.atom2coord[1] + n.atom2coord[0]) / 2.0 vgrid = np.tensordot(np.array(range(-m, m + 1)), dvec, axes=0) + midv sgrid = np.array(range(-m, m + 1)) * np.sqrt((dvec * dvec).sum()) #vgrid = np.array([[-1.517908564663352e+00, 1.180550033093826e+00,0.000000000000000e+00]]) vna = n.vna(vgrid) #for v,r in zip(vna,vgrid): # print("%23.15e %23.15e %23.15e %23.15e"%(r[0], r[1], r[2], v)) #print(vna.shape, sgrid.shape) np.savetxt('vna_lih_0004.txt', np.row_stack((sgrid, vna)).T) ref = np.loadtxt(dname + '/vna_lih_0004.txt-ref') for r, d in zip(ref[:, 1], vna): self.assertAlmostEqual(r, d)
for i, dref in enumerate(dipcoo): dref = dref.toarray() dprd = np.einsum('p,pab->ab', mom1[:, i], vpab) xyz2err.append([ abs(dprd - dref).sum() / dref.size, np.amax(abs(dref - dprd)) ]) return xyz2err # # # if __name__ == '__main__': from pyscf.nao import prod_basis_c, nao from pyscf.nao.m_overlap_coo import overlap_coo from pyscf import gto import numpy as np mol = gto.M(atom='O 0 0 0; H 0 0 0.5; H 0 0.5 0', basis='ccpvdz') # coordinates in Angstrom! sv = nao(gto=mol) print(sv.atom2s) s_ref = overlap_coo(sv).todense() pb = prod_basis_c() pb.init_prod_basis_pp_batch(sv) mom0, mom1 = pb.comp_moments() pab2v = pb.get_ac_vertex_array() s_chk = einsum('pab,p->ab', pab2v, mom0) print(abs(s_chk - s_ref).sum() / s_chk.size, abs(s_chk - s_ref).max())
def test_openmx(self): """ Computing of the atomic orbitals """ sv = nao(openmx='water', cd=os.path.dirname(os.path.abspath(__file__))) self.assertEqual(sv.natoms, 3) self.assertEqual(sv.norbs, 23)
def test_water_vkb(self): """ This """ from numpy import einsum, array import os dname = os.path.dirname(os.path.abspath(__file__)) sv = nao(label='water', cd=dname)
def get_symbols(self): atm_list = [self.sp2symbol[sp] for sp in self.atom2sp] return atm_list # # Example of reading pySCF orbitals. # if __name__ == "__main__": from pyscf import gto from pyscf.nao import nao import matplotlib.pyplot as plt """ Interpreting small Gaussian calculation """ mol = gto.M(atom='O 0 0 0; H 0 0 1; H 0 1 0; Be 1 0 0', basis='ccpvtz') # coordinates in Angstrom! sv = nao(gto=mol, rcut_tol=1e-8, nr=512, rmin=1e-5) print('sv.ao_log.sp2norbs:', sv.ao_log.sp2norbs) print('sv.ao_log.sp2nmult:', sv.ao_log.sp2nmult) print('sv.ao_log.sp2rcut', sv.ao_log.sp2rcut) print('sv.ao_log.sp_mu2rcut', sv.ao_log.sp_mu2rcut) print('sv.ao_log.nr', sv.ao_log.nr) print('sv.ao_log.rr[0:4], sv.ao_log.rr[-1:-5:-1]', sv.ao_log.rr[0:4], sv.ao_log.rr[-1:-5:-1]) print('sv.ao_log.psi_log[0].shape, sv.ao_log.psi_log_rl[0].shape', sv.ao_log.psi_log[0].shape, sv.ao_log.psi_log_rl[0].shape) sp = 0 for mu, [ff, j] in enumerate(zip(sv.ao_log.psi_log[sp], sv.ao_log.sp_mu2j[sp])):
""" Our standard minimal check """ dipcoo = self.sv.dipole_coo(**kw) mom0,mom1 = self.comp_moments() vpab = self.get_ac_vertex_array() xyz2err = [] for i,dref in enumerate(dipcoo): dref = dref.toarray() dprd = np.einsum('p,pab->ab', mom1[:,i],vpab) xyz2err.append([abs(dprd-dref).sum()/dref.size, np.amax(abs(dref-dprd))]) return xyz2err # # # if __name__=='__main__': from pyscf.nao import prod_basis_c, nao from pyscf.nao.m_overlap_coo import overlap_coo from pyscf import gto import numpy as np mol = gto.M(atom='O 0 0 0; H 0 0 0.5; H 0 0.5 0', basis='ccpvdz') # coordinates in Angstrom! sv = nao(gto=mol) print(sv.atom2s) s_ref = overlap_coo(sv).todense() pb = prod_basis_c() pb.init_prod_basis_pp_batch(sv) mom0,mom1=pb.comp_moments() pab2v = pb.get_ac_vertex_array() s_chk = einsum('pab,p->ab', pab2v,mom0) print(abs(s_chk-s_ref).sum()/s_chk.size, abs(s_chk-s_ref).max())
# Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import print_function, division import os, unittest from pyscf.nao import nao sv = nao(label='water', cd=os.path.dirname(os.path.abspath(__file__))) class KnowValues(unittest.TestCase): def test_lil_vs_coo(self): """ Init system variables on libnao's site """ lil = sv.overlap_lil().tocsr() coo = sv.overlap_coo().tocsr() derr = abs(coo - lil).sum() / coo.nnz self.assertLess(derr, 1e-12) if __name__ == "__main__": unittest.main()
def test_energy_nuc_gto_vs_nao(self): """ Test computation of matrix elements of nuclear-electron attraction """ sv = nao(gto=mol) e_nao = sv.energy_nuc() e_gto = mol.energy_nuc() self.assertAlmostEqual(e_nao, e_gto)
def test_ao_log_gto(self): """ This is indeed for initializing with auxiliary basis set""" from pyscf.nao import ao_log_c, nao sv = nao(gto=mol) ao = ao_log_c().init_ao_log_gto_lm(gto=mol, nao=sv, lm=sv.ao_log)
def nelectron(self): if self._nelectron is None: return tot_electrons(self) else: return self._nelectron # # Example of reading pySCF orbitals. # if __name__=="__main__": from pyscf import gto from pyscf.nao import nao import matplotlib.pyplot as plt """ Interpreting small Gaussian calculation """ mol = gto.M(atom='O 0 0 0; H 0 0 1; H 0 1 0; Be 1 0 0', basis='ccpvtz') # coordinates in Angstrom! sv = nao(gto=mol, rcut_tol=1e-8, nr=512, rmin=1e-5) print(sv.ao_log.sp2norbs) print(sv.ao_log.sp2nmult) print(sv.ao_log.sp2rcut) print(sv.ao_log.sp_mu2rcut) print(sv.ao_log.nr) print(sv.ao_log.rr[0:4], sv.ao_log.rr[-1:-5:-1]) print(sv.ao_log.psi_log[0].shape, sv.ao_log.psi_log_rl[0].shape) sp = 0 for mu,[ff,j] in enumerate(zip(sv.ao_log.psi_log[sp], sv.ao_log.sp_mu2j[sp])): nc = abs(ff).max() if j==0 : plt.plot(sv.ao_log.rr, ff/nc, '--', label=str(mu)+' j='+str(j)) if j>0 : plt.plot(sv.ao_log.rr, ff/nc, label=str(mu)+' j='+str(j))