计算化学公社

 找回密码 Forget password
 注册 Register
Views: 5385|回复 Reply: 18
打印 Print 上一主题 Last thread 下一主题 Next thread

[VASP] VASP达到收敛标准,但计算仍在继续

[复制链接 Copy URL]

97

帖子

0

威望

535

eV
积分
632

Level 4 (黑子)

各位老师前辈好,我在OUTCAR文件中看到TOTAL-FORCE (eV/Angst)下边的数值已经小于|EDIFFG|,以及dE<EDIFF,这应该是已经达到收敛标准了吧,为啥计算仍在计算没有停止呢?望各位老师不吝赐教

TOTAL-FORCE -1.jpg (49.77 KB, 下载次数 Times of downloads: 37)

TOTAL-FORCE -1.jpg

SCF.jpg (213.91 KB, 下载次数 Times of downloads: 35)

SCF.jpg

TOTAL-FORCE -2.jpg (70.44 KB, 下载次数 Times of downloads: 38)

TOTAL-FORCE -2.jpg

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

19#
发表于 Post on 2022-9-29 22:22:35 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2022-9-29 22:26 编辑

固定的信息可能需要通过CONCAR或者通过vasprun.xml获得,但是vasprun.xml只能在计算结束时才会写入。固定的原子在固定的分量置零就行了。
做法也有两种:
1、完全使用原生python,我就用了math和re两个模块。
  1. import re
  2. import math

  3. class Data:
  4.         def __init__(self):
  5.                 self.natms=0
  6.                 self.constr=[]
  7.                 self.forces=[]
  8.         def get_poscar_info(self):
  9.                 """
  10.                 vasp5 POSCAR format
  11.                 """
  12.                 with open('POSCAR') as f:
  13.                         data=f.read().lower()
  14.                         data=data.replace('t','1')
  15.                         data=data.replace('f','0')
  16.                         data=data.split('\n')
  17.                         self.natms=sum(int(d) for d in data[6].split())
  18.                         if data[7].strip()=='s':
  19.                                 self.constr=[[int(d) for d in line.split()[3:6]]
  20.                                                 for line in data[9:9+self.natms]]
  21.                         else:
  22.                                 self.constr=[[1 for i in range(3)] for j in range(self.natms)]
  23.         def get_outcar_info(self):
  24.                 with open('OUTCAR') as f:
  25.                         data=f.read()
  26.                         parttern='TOTAL-FORCE \(eV/Angst\)\n'
  27.                         parttern+='\s+--+\n(.*?)\n'
  28.                         parttern+='\s+--+\n'
  29.                         data=re.findall(parttern,data,re.S)
  30.                         self.forces=[[[float(d) for d in line.split()[3:6]]
  31.                                         for line in lines.split('\n')] for lines in data]
  32.         def get_forces(self):
  33.                 self.get_poscar_info()
  34.                 self.get_outcar_info()
  35.                 norm=lambda x:math.sqrt(x[0]**2+x[1]**2+x[2]**2)
  36.                 for s,force in enumerate(self.forces):
  37.                         max_force=max([norm([force[i][j]*self.constr[i][j] for j in range(3)])
  38.                                         for i in range(self.natms)])
  39.                         print('% 4d %12.6f'%(s+1,max_force))
复制代码

2、完全使用生态,如ase和numpy
  1. from  ase import io
  2. import numpy as np

  3. poscar=io.read('POSCAR')
  4. outcar=list(io.iread('OUTCAR'))
  5. for s,image in enumerate(outcar):
  6.         image.set_constraint(poscar.constraints)
  7.         forces=image.get_forces()
  8.         max_force=np.max(np.linalg.norm(forces,axis=1))
  9.         print('% 4d %12.6f'%(s+1,max_force))
复制代码



日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。不做培*,不接代*,不接*发谢谢。

97

帖子

0

威望

535

eV
积分
632

Level 4 (黑子)

18#
 楼主 Author| 发表于 Post on 2022-9-29 19:22:59 | 只看该作者 Only view this author
本帖最后由 种花家的蓝兔 于 2022-9-29 19:25 编辑
wsz 发表于 2022-9-29 13:00
vasp的收敛标准就是看所有非固定原子中受力最大的原子的受力,三个方向的模长
之前写过一个脚本,对于没有 ...

97

帖子

0

威望

535

eV
积分
632

Level 4 (黑子)

17#
 楼主 Author| 发表于 Post on 2022-9-29 19:18:45 | 只看该作者 Only view this author
wsz 发表于 2022-9-29 13:00
vasp的收敛标准就是看所有非固定原子中受力最大的原子的受力,三个方向的模长
之前写过一个脚本,对于没有 ...

好的好的,非常感谢您,感谢您的回复

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

16#
发表于 Post on 2022-9-29 13:03:52 | 只看该作者 Only view this author

没有,我一开始也记错了,后来看你那层提示去翻了一下源码确定了一下。
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。不做培*,不接代*,不接*发谢谢。

77

帖子

1

威望

2146

eV
积分
2243

Level 5 (御坂)

15#
发表于 Post on 2022-9-29 13:00:02 | 只看该作者 Only view this author
本帖最后由 wsz 于 2022-9-29 13:04 编辑

vasp的收敛标准就是看所有非固定原子中受力最大的原子的受力,三个方向的模长
之前写过一个脚本,对于没有添加VTST的可以用这个查看受力,但是写的比较粗糙,需要手动修改一下体系原子数(第24行),没有去除固定的原子(需要的话可以自己修改一下)python2和3都可以,只用了内置的math库

202209291304103242..png (17.65 KB, 下载次数 Times of downloads: 54)

202209291304103242..png

vasp_force.py

669 Bytes, 下载次数 Times of downloads: 33

评分 Rate

参与人数
Participants 2
eV +9 收起 理由
Reason
针灸大师容嬷嬷 + 4 牛!
含光君 + 5 好物!

查看全部评分 View all ratings

401

帖子

0

威望

2551

eV
积分
2952

Level 5 (御坂)

所念皆星河

14#
发表于 Post on 2022-9-29 10:06:52 | 只看该作者 Only view this author
卡开发发 发表于 2022-9-29 08:55
我去翻了下源码,应该6楼说法是对的,应该是看N个原子的|F|=sqrt(Fx^2+Fy^2+Fz^2)最大的小于EDIFFG才行。

谢谢发发老师~
心之所向,日复一日,必有精进

97

帖子

0

威望

535

eV
积分
632

Level 4 (黑子)

13#
 楼主 Author| 发表于 Post on 2022-9-29 09:07:30 | 只看该作者 Only view this author
含光君 发表于 2022-9-28 22:43
VASPwiki(https://www.vasp.at/wiki/index.php/EDIFFG)上没有说明是每个方向的力还是合力,我个人理解 ...

谢谢您的回复

97

帖子

0

威望

535

eV
积分
632

Level 4 (黑子)

12#
 楼主 Author| 发表于 Post on 2022-9-29 09:07:13 | 只看该作者 Only view this author
卡开发发 发表于 2022-9-29 08:55
我去翻了下源码,应该6楼说法是对的,应该是看N个原子的|F|=sqrt(Fx^2+Fy^2+Fz^2)最大的小于EDIFFG才行。

学到了学到了,谢谢老师的回复

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

11#
发表于 Post on 2022-9-29 08:55:35 | 只看该作者 Only view this author
种花家的蓝兔 发表于 2022-9-29 08:24
那老师可以帮忙看看吗,我这个应该是达到了收敛标准,为啥计算仍在继续呢

我去翻了下源码,应该6楼说法是对的,应该是看N个原子的|F|=sqrt(Fx^2+Fy^2+Fz^2)最大的小于EDIFFG才行。

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
含光君 + 5 谢谢

查看全部评分 View all ratings

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。不做培*,不接代*,不接*发谢谢。

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

10#
发表于 Post on 2022-9-29 08:37:51 | 只看该作者 Only view this author
种花家的蓝兔 发表于 2022-9-29 08:24
那老师可以帮忙看看吗,我这个应该是达到了收敛标准,为啥计算仍在继续呢

你不如发完整OUTCAR上来?
日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。不做培*,不接代*,不接*发谢谢。

97

帖子

0

威望

535

eV
积分
632

Level 4 (黑子)

9#
 楼主 Author| 发表于 Post on 2022-9-29 08:24:48 | 只看该作者 Only view this author
卡开发发 发表于 2022-9-29 08:02
应该是看每一个分量的,也就是3N个forces(N个离子*3坐标)当中的最大的那一个分量的绝对值要≤-EDIFFG。 ...

那老师可以帮忙看看吗,我这个应该是达到了收敛标准,为啥计算仍在继续呢

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

8#
发表于 Post on 2022-9-29 08:02:30 | 只看该作者 Only view this author
本帖最后由 卡开发发 于 2022-9-29 08:59 编辑
含光君 发表于 2022-9-28 22:43
VASPwiki(https://www.vasp.at/wiki/index.php/EDIFFG)上没有说明是每个方向的力还是合力,我个人理解 ...

应该是看每一个分量的,也就是N个forces(F=sqrt(Fx^2+Fy^2+Fz^2))当中的最大的那一个分量的绝对值要≤-EDIFFG。LZ给出的力信息不完善其实没办法判断,另外有固定的原子也应该被排除。

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
noodles的困惑 + 5 谢谢分享

查看全部评分 View all ratings

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。不做培*,不接代*,不接*发谢谢。

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

7#
发表于 Post on 2022-9-29 07:58:23 | 只看该作者 Only view this author

不要看RMS的Force,应该看Max的Force,但只有装了Henckelman他们的VTST插件这两个值才会打印到OUTCAR。

日常打哑谜&&探寻更多可能。
原理问题不公开讨论,非商业性质讨论欢迎私聊。不做培*,不接代*,不接*发谢谢。

401

帖子

0

威望

2551

eV
积分
2952

Level 5 (御坂)

所念皆星河

6#
发表于 Post on 2022-9-28 22:43:55 | 只看该作者 Only view this author
种花家的蓝兔 发表于 2022-9-28 22:04
看力收敛,是看上边这些数值

VASPwiki(https://www.vasp.at/wiki/index.php/EDIFFG)上没有说明是每个方向的力还是合力,我个人理解是每个离子所受合力达到收敛标准才行。以及,在VASPwiki上一个实例(https://www.vasp.at/wiki/index.php/H2O)上出现如下表述:

从表达式看是对每一个离子判定收敛条件,所以我想大概是要达到合力收敛才行?以上内容仅为个人理解,如有不正确之处欢迎大佬指正。

评分 Rate

参与人数
Participants 1
eV +5 收起 理由
Reason
noodles的困惑 + 5 谢谢

查看全部评分 View all ratings

心之所向,日复一日,必有精进

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-2-21 06:37 , Processed in 0.222271 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list