|
|
本帖最后由 Freeman 于 2021-11-14 12:02 编辑
谢谢大神们解答。我问这个问题的原因主要是用pyscf时发现似乎有多种几何优化casscf激发态的算法,用在我计算的体系的效果不一样。
第一是态指定的优化。这样一来cas就不收敛了,我就没有再用了。
第二是态平均的优化。代码如下(这是官网给的实例代码。我的实际情况是cas(2,2),而非这里说的cas(4,4)。)
- # 2. Geometry optimization over an averaged state.
- # Note the state-averaged gradients are optimized.
- #
- mc = mcscf.CASCI(mf, 4,4)
- mc.state_average_([0.25, 0.25, 0.25, 0.25])
- excited_grad = mc.nuc_grad_method().as_scanner()
- mol1 = excited_grad.optimizer().kernel()
- mc = mcscf.CASSCF(mf, 4,4)
- mc.state_average_([0.25, 0.25, 0.25, 0.25])
- excited_grad = mc.nuc_grad_method().as_scanner()
- mol1 = excited_grad.optimizer().kernel()
复制代码 这个的梯度计算非常快,没一会儿就算了好几个点。不过我观察它的输出文件,好像优化的目标是使得平均能量最低。输出文件我稍后放上来。
第三是另一个态平均的优化。代码如下
- # 4. Geometry optimization of the 3rd of 4 states
- #
- mc = mcscf.CASSCF(mf, 4,4)
- mc.state_average_([0.25, 0.25, 0.25, 0.25])
- excited_grad = mc.nuc_grad_method().as_scanner(state=2)
- mol1 = excited_grad.optimizer().kernel()
复制代码 这个可以肯定是在优化激发态的几何结构。不过我看它的输出文件,虽然cas部分算得很快,但梯度部分算得超级慢(还牵扯到什么拉格朗日乘子法,难道是限制性优化?看不懂。),差不多一个小时算出一个点。
第二个方法算得快,但优化目标可能不对;第三个方法优化目标对了,但是算得太慢。我就在想,自己是不是对第二个方法的优化目标有误解?有没有可能第二个方法的优化目标也确实是激发态优化呢?毕竟优化平均能量最低的结构没有任何意义,开发者为什么会开发没有意义的算法并作为实例放在官网上呢?如果是的话,那我干脆用第二个方法好了,毕竟它那么快。
|
|