计算化学公社

标题: pyscf 读取molpro分子轨道 [打印本页]

作者
Author:
lqhenwunai    时间: 2019-11-26 18:07
标题: pyscf 读取molpro分子轨道
本帖最后由 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)那个循环了。


请问哪里出错了?

谢谢大家的帮助。



作者
Author:
zjxitcc    时间: 2019-11-26 19:04
去github上PySCF处提问,或者直接发邮件问作者Qiming Sun。




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3