计算化学公社

 找回密码 Forget password
 注册 Register
楼主 Author: 种花家的蓝兔
打印 Print 上一主题 Last thread 下一主题 Next thread

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

[复制链接 Copy URL]

3809

帖子

3

威望

1万

eV
积分
20343

Level 6 (一方通行)

围观吃瓜群众

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

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

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的收敛标准就是看所有非固定原子中受力最大的原子的受力,三个方向的模长
之前写过一个脚本,对于没有 ...

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

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的收敛标准就是看所有非固定原子中受力最大的原子的受力,三个方向的模长
之前写过一个脚本,对于没有 ...

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))
复制代码



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

本版积分规则 Credits rule

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

GMT+8, 2026-2-21 01:47 , Processed in 0.173106 second(s), 20 queries , Gzip On.

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