|
|
本帖最后由 ZetaFunction 于 2024-8-16 17:17 编辑
原本打算使用ORCA计算一个28个原子含铁-镍核心的体系的CAS(8,8)/cc-pVDZ,遇到了SCF不收敛的问题。使用Mokit将最后一轮迭代的.gbw轨道文件转为PySCF的输入文件,在迭代了30轮左右后成功收敛,但是耗时远远超过了ORCA。32核服务器中ORCA中仅需不到一小时就能到达75轮的迭代上限,而PySCF每一轮迭代却需要四十分钟,最终收敛用时接近一天,这明显不合理。我尝试过设置并行线程数和内存,都没什么作用。尽管输出文件中的CPU总耗时和wall time确实是大约30倍的关系,但是Python有不少伪并行的多线程库,虽然是多线程但实际使用同一个物理核心。以下是我的输入文件,由Mokit生成的文件修改而来,请各位老师看看有没有什么问题:
from pyscf import gto, scf, mcscf
from mokit.lib.fch2py import fch2py
from mokit.lib.py2fch import py2fch
from mokit.lib import py2orca
from shutil import copyfile
from pyscf import lib
from pyscf import __config__
print(lib.num_threads()) #显示确实是32线程
mol = gto.M()
mol.max_memory = 16384
# 28 atom(s)
mol.atom = '''
C1 -18.71419998 -7.81380000 15.80720000
S1 -17.42080002 -7.34854999 17.03330000
H1 -18.43912800 -7.44484897 14.84122399
......
# Remember to check the charge and spin
mol.charge = -2
mol.spin = 0
mol.verbose = 4
mol.build(parse_arg=False)
mf = scf.RHF(mol)
mf.max_memory = 16384
mf.max_cycle = 1
mf.init_guess = '1e'
mf.kernel()
# read MOs from .fch(k) file
hf_fch = 'SIa-S1-UHF-UNO-CAS88.fch'
nbf = mf.mo_coeff.shape[0]
nif = mf.mo_coeff.shape[1]
mf.mo_coeff = fch2py(hf_fch, nbf, nif, 'a')
# read done
mc = mcscf.CASSCF(mf, 8, 8)
mc.max_memory = 65536
mc.verbose = 5
mc.natorb = True
mc.kernel()
py2orca(mc, 'mc-S1.inp')
|
|