|
本帖最后由 lqhenwunai 于 2019-11-26 18:10 编辑
我想用pyscf读取molpro的分子轨道,我的pyscf输入文件如下:
import os
import numpy as np
from pyscf import gto, scf,symm,cc,tools
from pyscf.cc import ccsd_t
from pyscf.gto.basis import parse_molpro
from pyscf.x2c import x2c
mol=gto.Mole()
#unit in angstrom
mol.atom='''La 0 0 0
'''
mol.symmetry='d2h'
dirnow = os.path.realpath(os.path.join(__file__, '..'))
basis_file_from_user = os.path.join(dirnow, 'cc-pvtz-x2c.dat')
mol.basis={'La':basis_file_from_user}
#-------------------------------------
#下面这部分是从examples/gto/30-read_molpro_orb.py 里粘过来的。
#mol = gto.M(atom='N 0 0 1; N 0 0 -1',
# basis={'N':parse_molpro.load('path/to/molpor/basis_name.libmol', 'N')},
# symmetry='d2h')
dat = open('orb.matrop').read().split('\n')
dat = ''.join(dat[2:-2]) # [2:-2] to skip comments
dat = np.array([float(x) for x in dat.split(',')[:-1]]) # [:-1] to remove last comma
#all orbitals in molpro symmetry order
#分子轨道维度做了相应调整,其它部分不变
dims = [22,16,16,11,16,11,11,6] # orbitals in each irrep
off = 0
molpro_mo = []
for i, nd in enumerate(dims):
molpro_mo.append(dat[off:off+nd**2].reshape(nd,nd))
off += nd**2
mo = []
for i, ir in enumerate(mol.irrep_id):
molpro_id = symm.param.IRREP_ID_MOLPRO['D2h'][ir]-1
mo.append(np.dot(mol.symm_orb, molpro_mo[molpro_id]))
mo = np.hstack(mo)
# Check normalization to ensure no bug
#print np.einsum('ji,jk,ki->i', mo, mol.intor('cint1e_ovlp_sph'), mo)
#粘贴完毕
#------------------------------------------------------------------------------------
mol.max_memory=8000
mol.charge=0
mol.spin=1 #molpro convention
mol.output='Lavtz.out'
mol.build()
hf=scf.RHF(mol).x2c()
hf.kernel()
但是却告诉我说高亮部分有问题:
for i, ir in enumerate(mol.irrep_id):
TypeError: 'NoneType' object is not iterable
我尝试重复原例中的结果,报错说维度不同。
mo.append(np.dot(mol.symm_orb, molpro_mo[molpro_id]))
ValueError: shapes (10,3) and (7,7) not aligned: 3 (dim 1) != 7 (dim 0)
但至少它是进入enumerate(mol.irrep_id)那个循环了。
请问哪里出错了?
谢谢大家的帮助。
|
评分 Rate
-
查看全部评分 View all ratings
|