计算化学公社

标题: 求应力应变结构拉伸脚本 [打印本页]

作者
Author:
mylifecg    时间: 2017-4-19 20:57
标题: 求应力应变结构拉伸脚本
如题,为提高 工作效率,又由于个人程序方面不才,特此向各位高手求助力学拉伸程序。不胜感激!

作者
Author:
ggdh    时间: 2017-4-19 22:18
你这个问题不详细啊。

作者
Author:
sobereva    时间: 2017-4-19 22:30
至少也得把用的程序写明了,要从答疑者的角度去思考需要提供什么信息,尤其是脚本这直接牵扯到计算程序,没有细节没法回答
作者
Author:
mylifecg    时间: 2017-4-20 09:34
不好意思,补充一下我的求助细节啊:
我是想对二维材料进行某个方向的拉伸,比如沿着x方向拉伸,就要实现晶格常数的逐步增大(比如每一步增加1%),且下一步应变需要用到上一步的输出CONTCAR文件作为下一步的POSCAR输入文件。每一步计算都要输出一个一个文件夹为保存此步的计算结构。比如对应1%的拉伸可输出一个命名为1的文件夹,包含了此步拉伸的计算结果。2%拉伸的计算结果可输入一个命名为2的文件夹,包含了此步拉伸的计算结果。2%的拉伸实在1%拉伸的基础上实现的。所以要用到1计算的结果文件CONTCAR再继续拉伸。

作者
Author:
万里云    时间: 2017-4-20 11:57
这个问题最棘手的部分是生成不同的POSCAR。POSCAR中原子坐标不变,只根据一套公式改变基矢。

麻烦就在这改变基矢上了。拉伸还行,压缩有个负号-,而-在Shell中又有其它用途,导致程序稳定性堪忧。

据个人经验,先用Matlab把POSCAR做好,再逐个计算最好。Shell的计算能力实在着急。

贴个用QuantumESPRESSO优化不同应变下结构的脚本:

  1. #! /bin/bash

  2. runjob()
  3. {
  4.         local a1x=$(echo $a      | awk '{printf "%14.9f", $1/2}')
  5.         local a1y=$(echo $a $ita | awk '{printf "%14.9f", (1-$2)/2*sqrt(3)*$1}')
  6.         local a2x=$(echo $a      | awk '{printf "%14.9f", -$1/2}')
  7.         local a2y=$(echo $a $ita | awk '{printf "%14.9f", (1-$2)/2*sqrt(3)*$1}')
  8.         cat > $ita.in << EOF
  9. &CONTROL
  10.     prefix           = '$ita'
  11.     calculation      = 'relax'
  12.     restart_mode     = 'from_scratch'
  13.     pseudo_dir       = './'
  14.     outdir           = './'
  15.     wfcdir           = './'
  16.     verbosity        = 'high'
  17.     wf_collect       = .TRUE.
  18.     nstep            = 250
  19.     etot_conv_thr    = 7.3d-6
  20.     forc_conv_thr    = 3.8d-4
  21.     tprnfor          = .TRUE.
  22. /
  23. &SYSTEM
  24.     ibrav            = 0
  25.     celldm(1)        = 1.889726125
  26.     ntyp             = 2
  27.     nat              = 2
  28.     ecutwfc          = 70
  29.     nbnd             = 16
  30.     occupations      = 'smearing'
  31.     smearing         = 'gaussian'
  32.     degauss          = 0.005
  33. /
  34. &ELECTRONS
  35.     electron_maxstep = 250
  36.     conv_thr         = 1.0d-8
  37.     mixing_mode      = 'plain'
  38.     mixing_beta      = 0.7
  39.     mixing_ndim      = 8
  40.     diagonalization  = 'david'
  41.     diago_david_ndim = 4
  42. /
  43. &IONS
  44.     ion_dynamics     = 'bfgs'
  45. /
  46. ATOMIC_SPECIES
  47.    A   1.0   A.pbe-mt_fhi.UPF
  48.    B   2.0   B.pbe-mt_fhi.UPF
  49. CELL_PARAMETERS {alat}
  50. $a1x$a1y   0.000000000
  51. $a2x$a2y   0.000000000
  52.    0.000000000   0.000000000  20.500000000
  53. ATOMIC_POSITIONS {crystal}
  54.    B   0.333334671   0.333334671   0.431781565
  55.    A   0.666665091   0.666665091   0.369744698
  56. K_POINTS {automatic}
  57. 12 12 1 0 0 0
  58. EOF
  59.         $MPIRUN pw.x -in $ita.in &> $ita.out
  60.         wait
  61.         rm -r *.save
  62.         wait
  63. }

  64. ncore=20
  65. MPIRUN="mpirun -np $ncore"
  66. topdir=$(pwd)
  67. a=4.055466757
  68. for ita in $(seq 0.0 0.005 0.03); do
  69.         runjob
  70. done
复制代码

作者
Author:
mylifecg    时间: 2017-4-21 08:18
万里云 发表于 2017-4-20 11:57
这个问题最棘手的部分是生成不同的POSCAR。POSCAR中原子坐标不变,只根据一套公式改变基矢。

麻烦就在这 ...

十分感谢您的回复。
作者
Author:
ggdh    时间: 2017-4-21 11:39
mylifecg 发表于 2017-4-20 09:34
不好意思,补充一下我的求助细节啊:
我是想对二维材料进行某个方向的拉伸,比如沿着x方向拉伸,就要实现 ...

为啥不一次把各种百分比的都拉伸好,在分别算。你这样串行算效率多低啊?




欢迎光临 计算化学公社 (http://ccc.keinsci.com/) Powered by Discuz! X3.3