文档详情

高斯对不收敛问题的对策

实名认证
店铺
DOC
17.64KB
约6页
文档ID:43177369
高斯对不收敛问题的对策_第1页
1/6

高斯对不收敛问题的对策高斯对不收敛问题的对策高斯对不收敛问题的对策首先,我们必须理解收敛是什么意思在自洽场(SCF)计算中,自洽循环中,首先产生一个轨道占据的初始猜测,1)然后根据此轨道占据构造电荷密度和哈密顿量2)对角化哈密顿量,得到新的轨道能级和占据3)产生新的电荷分布和哈密顿量,重复步骤 2)经过一定次数的循环后,某次循环前和循环后的电荷密度差别小于一定的标准,我们称之为收敛如果以上过程不能收敛,则 gaussian 给出 convergence failure的警告如果 SCF 计算收敛失败,你首先会采取哪些技巧呢?这里是我们强烈推荐的首选方法1 考虑使用更小的基组由于一定的基组对应于一定精度和速度,所以更换基组并不在所有的情况下都适用方法是首先用小基组进行计算,由前一个波函得到用于大基组计算的初始猜测(Guess=Read 自动进行)2 增加最大循环步数Gaussian 默认的最大循环步数为 64 (SCF=DM 或 SCF=QC 方法则为512),如果循环次数超过这个数目则会汇报 convergence failure在一定的情况下,不收敛的原因仅仅是因为最大循环步数不够可以通过设置 maxcyc 来增大最大循环步数。

更多的 SCF 迭代(SCF(MaxCycle=N),其中 N 是迭代数)这很少有帮助,但值得一试3 放宽收敛标准如果接近 SCF 但未达到,收敛标准就会放松或者忽略收敛标准这通常用于不是在初始猜测而是在平衡结构收敛的几何优化SCF=Sleazy 放松收敛标准,Conver 选项给出更多的控制4 尝试改变初始构型首先略微减小键长,接下来略微增加键长,接下来再对结构作一点改变5 尝试能级移动 Level shifting (SCF=Vshift)如果不收敛的原因是波函数的震荡行为,通常是因为在相近的能量上的泰的混合对于这种情况,我们可以采用 level shifting 的方法Level shifting 的含义是人工的升高非占据轨道的能级,以防止和最高占据轨道之间的混合,以达到收敛的目的在 Gaussian中此方法的关键词为 SCF=Vshift6 使用强制的收敛方法 SCF=QCSCF=QC 通常最佳,但在极少数情况下 SCF=DM 更快此关键字将大大增加计算时间,但是收敛的机会更大不要忘记给计算额外增加一千个左右的迭代应当测试这个方法获得的波函,保证它最小,并且正好不是稳定点(使用 Stable 关键字)。

7 对开壳层体系,尝试收敛到同一分子的闭壳层离子,接下来用作开壳层计算的初始猜测添加电子可以给出更合理的虚轨道,但是作为普遍的经验规则,阳离子比阴离子更容易收敛选项Guess=Read 定义初始猜测从 Gaussian 计算生成的 checkpoint 文件中读取8 一些程序通过减小积分精度加速 SCF对于使用弥散函数,长程作用或者低能量激发态的体系,必须使用高积分精度:SCF=NoVarAcc9 改变模型或方法可以考虑改变模型方法比较常见的方法有HF,GVB,MCSCF,CASSCF,MPn 等改变模型方法通常也会收敛性质通常,精度更高的方法更难收敛精度比较低的方法产生的计算结果可以作为高精度计算的初始猜测考虑使用不同理论级别的计算这并不总是实用的,但除此之外,增加迭代数量总是使得计算时间和使用更高理论级别差不多10 关闭 DIIS 外推(SCF=NoDIIS)同时进行更多的迭代(SCF=(MaxCycle=N))11 试着改用 DIIS 之外其它方法(SCF=SD 或 SCF=SSD)Gaussian 不收敛的可能原因及对策:1 由于体系有很多能量相近的能级,导致计算不收敛。

如果计算中采用的是 Hartree-Fock 方法或者其他的混合形式的交换相关势(如 B3LYP),则可以尝试一下的方法进行改进scf=(noincfock,conver=11,maxcyc=1025) iop(5/22=20)用以上的命令行将强制 Gaussian 采用 EDIIS 的算法此算法计算量更大,但是更加稳定在命令行里也增加了最大循环数,以增加收敛的到基态的可能性2. 检查是否有初始文件错误常见初级错误:a. 自旋多重度错误b. 变量赋值为整数c. 变量没有赋值或多重赋值d. 键角小于等于 0 度,大于等于 180 度e. 分子描述后面没有空行f. 二面角判断错误,造成两个原子距离过近g. 分子描述一行内两次参考同一原子,或参考原子共线3. SCF(自洽场)不收敛则一般是 L502 错误,省却情况做 64 个 cycle 迭代(G03 缺省 128 cycles)a. 修改坐标,使之合理b. 改变初始猜 Guess=Huckel 或其他的,看 Guess 关键词c. 增加叠代次数 SCFCYC=N (对小分子作计算时最好不要增加,很可能结构不合理)d. iop(5/13=1)这样忽略不收敛,继续往下做。

4. 分子对称性改变a. 修改坐标,强制高对称性或放松对称性b. 给出精确的、对称性确定的角度和二面角 如 CH4 的角度给到109.47122c. 放松对称性判据 Symm=loosed. 不做对称性检查 iop(2/16=1) (最好加这个选项)iop(2/16=2) 则保持新的对称性来计算5. Opt 时收敛的问题a. 修改坐标,使之合理b. 增加叠代次数 optcyc=N6. 优化过渡态,若势能面太平缓,则不好找到iop(1/8=10) 默认 30(下一个结构和该结构的差别 0.3Å) ,可改成10如果每一步都要用到小的步长,应该加 opt(notrustupdate)7. 在 CI(组态)方法中如 QCISD(T),CCSD(T),CID 方法中,省却最大循环 50,若出错(L913 错误)解决方法:#P QCISD(maxcyc=N) 注:N≤5128. 优化过渡态opt=TS (给出过渡态) opt=qst2 (给出反应物和产物) opt=qst3 (给出反应物和产物和过渡态)a. 用 G03 时的出错 opt=ts 必须加 FC (force constant)写法:opt=(TS, calcFc)or opt=(TS,calchffc)计算 HF 力常数,对 QCISD,CCSD 等方法用;or opt=(TS,modRedundant) (最好写这个)b. 如果计算采用 QCISD 计算(不好计算 FC)则写为 QCISD opt=(TS, calcHFFC) (用 HF 计算 FC)9. 无法写大的 Scratch 文件 RWFa. 劈裂 RWF 文件 %rwf=loc1,size1,loc2,size2,……..,locN,-1b. 改变计算方法 MP2=Direct 可以少占硬盘空间c. 限制最大硬盘 maxdisk=N GB,****MB,有些系统写 2GB 会出错,可以写 2000MB10. FOPT 出错 原因是变量数与分子自由度数不相等。

可用 POPT 或直接用 OPT11. 优化过渡态只能做一个 STEP 原因是负本征数目不对 添加 iop(1/11)=1 或者 noeigentest (eigentest 是表示优化过渡态检测分子振动的本征值,过渡态只有一个负值,但优化的时候往往出现两个或者更多的情况,默认的是如果出现多于一个的情况就停止优化计算,这往往时不必要的,noeigentest 表示优化时不坐此检测,实际上优化过渡态的时候出现两个三个很正常的,只是第一个一般负的很大,接着的比较小,不会影响过渡态的搜寻,当然有时候需要自己判断是不是接近真实的过渡态其实经验上也是过渡态的本征虚频越小,相对越难找)对于 (L502, L508, L9999)出错的对策对于一个优化计算,它的过程是先做一个 SCF 计算,得到这个构型下的能量,然后优化构型,再做 SCF,然后再优化构型因此,会有两种不收敛的情况:一是在某一步的 SCF 不收敛(L502 错误),或者构型优化没有找到最后结果(L9999 错误) 预备知识:计算时保存 chk 文件,可以在后续计算中使用 guess=read读初始猜测.对于 SCF 不收敛,通常有以下的解决方法:1. 使用小基组,或低级算法计算,得到 scf 收敛的波函数,用guess=read 读初始波函数。

2. 使用 scf=qc,这个计算会慢,而且需要用 stable 关键字来测试结果是否波函数稳定如果这个还不收敛,会提示 L508 错误3. 改变键长,一般是缩小一点,有时会有用4. 计算相同体系的其他电子态,比如相应的阴离子、阳离子体系或单重态体系,得到的收敛波函数作为初始猜测进行计算对于优化不收敛,即 L9999 错误,实际上是在规定的步数内没有完成优化,即还没有找到极小值点 (或者对于过渡态优化,还没有找到过渡态)这有几种可能性:1. 看一下能量的收敛的情况,可能正在单调减小,眼看有收敛的趋势,这样的情况下,只要加大循环的步数(opt(maxcycle=200)) ,可能就可以解决问题了2. 加大循环步数还不能解决的(循环步数有人说超过 200 再不收敛,再加也不会有用了,这虽然不一定绝对正确,但 200 步应该也差不多了) ,有两种可能一是查看能量,发现能量在振荡了,且变化已经很小了,这时可能重新算一下,或者构型稍微变一下,继续优化,就可以得到收敛的结果(当然也有麻烦的,看运气和经验了) ;二是构型变化太大,和你预计的差别过大,这很可能是你的初始构型太差了,优化不知道到哪里去了,这时最好检查一下初始构型,再从头优化。

3. 对于 L9999 快达到收敛时,考虑减小优化步长有时对于能量振荡的情况也是有用的,opt(maxstep=1).(flyingheart )。

下载提示
相似文档
正为您匹配相似的精品文档