Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
ABACUS计算模拟实例 | V. Al的弹性性能指标计算
ABACUS
计算材料学
ABACUS使用教程
DFT
ABACUS计算材料学ABACUS使用教程DFT
FermiNoodles
更新于 2024-07-12
推荐镜像 :abacus:3.6.3-user-guide
推荐机型 :c2_m4_cpu
2
ABACUS-cases(v17)

ABACUS计算模拟实例 | V. Al的弹性性能指标计算

代码
文本

©️ Copyright 2023 @ Authors
作者:Jinghang Wang (AISI电子结构团队实习生) 📨
日期:2024-6-19
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
快速开始:本案例不要求完成具体计算,只涉及预处理、部分运行命令展示以及结果分析,故使用c2_m4_cpuABACUS:3.6.3-user-guide 镜像,点击上方的 开始连接 按钮并在连接后点击右上方的切换内核,选择Bash内核稍等片刻即可运行。

代码
文本

🎯 本教程旨在帮助初学者学习使用ABACUS以及APEX完成合金弹性常数计算

代码
文本

本节教程目录如下:
1. 各类弹性常数计算方法
2. 使用APEX完成弹性常数计算

代码
文本

在使用ABACUS进行计算时,所有操作都需要在指定的文件夹目录下进行。我们已经准备好了数据集ABACUS-cases,,其中文件夹“5”对应本节教程。

代码
文本

首先我们将数据集中的文件复制到根目录下(否则可能碰到文件没有执行权限的情况):

代码
文本
[1]
cp -r /bohr/ABACUS-cases-nu6t/v17/ABACUS-cases/5 .
代码
文本
[2]
cd 5 && ls
Al_lcao  Al_pw

代码
文本

可以看到有一共有两个目录,Al_lcaoAl_pw分别对应使用lcao基组和pw进行Al的弹性常数计算。

代码
文本
  • APEX
Fig1

Alloy Properties EXplorer using simulations (APEX)合金测试工作流,基于dflow科学计算云原生工作流所提供的完备且方便的工作流开发功能,第一性原理计算算子库fpop等工具对合金性质测试流程进行了重构。APEX的安装及功能使用教程可见notebook: 快速上手合金测试工作流APEX,用户可以查看APEX仓库下的README.md来了解更详细的使用说明。

代码
文本

1. 各类弹性常数计算方法

代码
文本

弹性性能是金属单质及合金的基本性质之一,不仅反映了材料的稳定性,还在一定程度上表征了其力学性能。本节以fcc-Al为例,详细介绍各种弹性性能指标的计算方法,内容涉及弹性常数、Born稳定性准则、弹性模量、泊松比、Pugh比和弹性各向异性指数等。

代码
文本

弹性常数是最基本的弹性特性描述量,可用于推导体模量、剪切模量、泊松比等其他多种弹性特性描述量,可以利用第一性原理计算得到的。考虑到计算中使用了相对较小的晶胞,其中的原子分布可能导致各向异性的化学环境,所以采用平均方案近似最终的弹性常数: 式中:是单晶弹性常数。

根据弹性常数,可以相应地计算出用于测量晶格机械稳定性的Born稳定性参数,包括。立方晶格若要稳定,必须满足以下不等式:。此即Born稳定性准则。一般来说,满足以上条件的金属晶格可以被认为是结构稳定的。

弹性模量是衡量物体或物质在施加应力时抵抗弹性形变的能力的量。三个主要的弹性模量是杨氏模量()、剪切模量()和体积模量()。基于获得的弹性常数, 弹性模量可以通过Voigt-Reuss-Hill方法计算。一般情况下体积模量和剪切模量取由Voigt算法和Reuss算法得到的结果的平均值: 式中:分别是使用Voigt模型计算得到的体积模量和剪切模量;而分别是使用Reuss模型计算得到的体积模量和剪切模量。它们可以分别使用以下公式获得: 式中:是弹性柔量。由组成的矩阵是由组成的弹性矩阵的逆矩阵。杨氏模量由式(10)给出:

为了估算材料的延展性或脆性,Pugh 引入了 比(有时使用 比,二者统称为 Pugh 比)。一般来说,比越大(或越小),材料的延展性越好。如果,则材料具有延展性,否则表现出脆性。此外,泊松比()也可用于测量材料的延展性或脆性,其值由式(11)给出:

根据经验,泊松比大于0.31的材料具有延展性,泊松比越大,材料的延展性越好。事实上,泊松比和 Pugh 比之间存在着内在的相关性,这从它们各自的公式可以清楚地看出。除了这两个参数之外,柯西压力( )也可用于评估材料的延展性。对于具有良好延展性的材料,通常可以观察到正柯西压力,而负柯西压力通常用于表示脆性。

材料的弹性各向异性也很重要,因为它可能在材料中诱发微裂纹。有两个不同的弹性各向异性指数:Zener各向异性指数和 Chung-Buessem 各项异性指数。它们用于评估金属晶格的弹性各向异性,对于各向同性材料,的值接近1,的值接近0,它们分别可以使用以下公式计算:

代码
文本

APEX弹性常数计算完成后默认使用Voigt算法得到各弹性模量:

Fig1
代码
文本

2. 使用APEX完成弹性常数计算

代码
文本

首先我们安装APEX:

代码
文本
[3]
if [ -e APEX ]; then rm -rf APEX; fi;
代码
文本
[4]
git clone https://github.com/deepmodeling/APEX
Cloning into 'APEX'...
remote: Enumerating objects: 3523, done.        
remote: Counting objects: 100% (1044/1044), done.        
remote: Compressing objects: 100% (371/371), done.        
remote: Total 3523 (delta 730), reused 823 (delta 671), pack-reused 2479        
Receiving objects: 100% (3523/3523), 16.31 MiB | 5.39 MiB/s, done.
Resolving deltas: 100% (2390/2390), done.

代码
文本
[5]
cd APEX && pip install .
已隐藏输出
代码
文本
[6]
apex -v
APEX v1.2.0

代码
文本

dpdata是一款用于不同材料计算软件间的格式转化的python软件包,支持ABACUS, DeePMD-kit, VASP, LAMMPS, GROMACS, Gaussian等软件。APEX+ABACUS做弹性常数计算时也需要用到dpdata处理ABACUS的输入输出文件。你可以通过以下命令检查并更新dpdata至最新版,以避免数据读取报错。

代码
文本
[7]
#pip show dpdata
#pip install --upgrade dpdata
代码
文本

至此APEX安装完毕。

代码
文本
  • 输入文件准备:
  1. global_bohrium.json:包含了APEX提交工作流至Bohrium平台相关的全局设置(例如:Bohrium账号信息;镜像地址;节点种类等)。该文件应当提前准备在用户提交的工作路径下。
  2. param.json:一个完整的APEX合金测试工作流由 结构弛豫 relaxation性质测试 property两个单独的计算工作流串联完成,其具体参数设置均通过工作路径下的相关json文件传递给APEX。我们可以分别提交param_relax.jsonparam_props.json文件依次完成结构弛豫及性质测试计算,也可以使用一个param_joint.json联合工作流文件完成上述两个计算。
  3. ABACUS的输入文件:INPUTSTRU以及赝势轨道。
代码
文本
[8]
cd ../Al_lcao && ls
abacus_input     confs             global_bohrium.json  param_props.json
all_result.json  dpdispatcher.log  param_joint.json     param_relax.json

代码
文本
[9]
cat global_bohrium.json
{
    "dflow_host": "https://workflows.deepmodeling.com",
    "k8s_api_server": "https://workflows.deepmodeling.com",
    "email": "xxxx",
    "password": "xxxx",
    "program_id": 00000,
    "apex_image_name":"registry.dp.tech/dptech/prod-11045/apex-dependency:1.2.0",
    "abacus_image_name":"registry.dp.tech/dptech/prod-17819/abacus:3.6.3-user-guide",
    "abacus_run_command":"mpirun -n 32 abacus",
    "batch_type": "Bohrium",
    "context_type": "Bohrium",
    "scass_type":"c32_m128_cpu"
}

代码
文本

我们来分析一下global_bohrium.json文件:
1.dflow_hostk8s_api_server:分别为dflow与其对应的工作流引擎Argo Workflows的地址,无需更改。
2.email,password,program_id:分别为个人账号的邮箱、密码以及项目ID,需要更改。
3.apex_image_name:apex的Bohrium镜像地址(可在Bohrium平台的“镜像”模块中查看)。这里给出的为截止目前(2024.7.12)的最新版镜像地址。
4.abacus_image_name:abacus的Bohrium镜像地址(可在Bohrium平台的“镜像”模块中查看)。可根据需要自行修改。
5.abacus_run_command:abacus的运行命令。可根据需要自行修改。
6.batch_typecontext_type:批处理系统类型及工作流执行的上下文环境类型,这里均为Bohrium
7.scass_type:使用的机型。可根据需要自行修改。

代码
文本
[10]
#结构弛豫工作流
cat param_relax.json
{
            "structures": ["confs/fcc-Al"],
            "interaction": {
                "type": "abacus",
                "incar": "abacus_input/INPUT",
                "potcar_prefix": "abacus_input",
                "potcars": {"Al": "Al-sp.PD04.PBE.UPF"},
                "orb_files": {"Al":"Al_gga_9au_100Ry_4s4p1d.orb"}

            },
	    "relaxation": {
	    "cal_type":      "relaxation",
	    "cal_setting":  {"relax_pos":true,
                         "relax_shape":true,
                         "relax_vol":true}
			 }
}

代码
文本

param_relax.json文件中的参数设置:
1.structures:包含结构文件STRU的目录路径。
2.interaction:软件信息以及输入文件。type对应所使用的软件;incar对应ABACUS的输入参数文件INPUT的路径;potcar_prefixpotcars分别对应赝势文件所在目录路径以及赝势文件名;orb_files对应原子轨道文件名(原子轨道文件也应放在potcar_prefix目录下)。
3.relaxation:弛豫计算设置。relax_pos,relax_shaperelax_vol分别对应在弛豫计算时离子位置/晶胞形状/晶胞体积是否改变。

代码
文本
[11]
#性质测试工作流
cat param_props.json
{
     "structures": ["confs/fcc-Al"],
     "interaction": {
         "type": "abacus",
         "incar": "abacus_input/INPUT",
         "potcar_prefix": "abacus_input",
         "potcars": {"Al": "Al-sp.PD04.PBE.UPF"},
         "orb_files": {"Al":"Al_gga_9au_100Ry_4s4p1d.orb"}
     },
    "properties": [
        {
         "type":         "eos",
         "skip":         true,
         "vol_start":    0.6,
         "vol_end":      1.4,
         "vol_step":     0.05
        },
        {
         "type":         "elastic",
          "skip":         false,
         "norm_deform":  1e-2,
         "shear_deform": 1e-2
        },
	{
         "type":           "surface",
         "skip":         true,
         "min_slab_size":  10,
         "min_vacuum_size":11,
         "max_miller":     2,
         "cal_type":       "static"
        },
      {
         "type":         "interstitial",
         "skip":         true,
         "supercell":   [1, 1, 1],
         "insert_ele":  ["Mo"]
        },
	  {
	  "type":            "gamma",
	  "skip":            true,
      "plane_miller":    [1,2,3],
      "slip_direction":  [1,1,-1],
	  "hcp": {
        	"plane_miller":    [0,0,0,1],
        	"slip_direction":  [2,-1,-1,0],
		    "slip_length": 1
		},
      "supercell_size":   [1,1,20],
      "vacuum_size": 15,
	  "add_fix": ["true","true","false"],
      "n_steps":         20
	},
	{
         "type":         "phonon",
	 "skip":         true,
	 "BAND": "0.5000 0.5000 0.5000  0.0000 0.0000 0.0000  0.5000 0.0000 0.5000  0.5000 0.2500 0.7500",
	 "supercell_size":[1,1,1],
	 "MESH":[8,8,8],
	 "PRIMITIVE_AXES": "0 1/2 1/2  1/2 0 1/2  1/2 1/2 0",
	 "BAND_POINTS":21,
	 "BAND_CONNECTION" :true,
	 "cal_setting": {
	 	"K_POINTS": [6,6,6,0,0,0],
	 	"input_prop": "abacus_input/INPUT_phonon"
	}
    }

        ]
}

代码
文本

param_props.json文件中的参数设置:
1.structuresinteractionparam_relaxation.json文件中相同。
2.通过设置properties中的skip参数为True or False 选择想要进行的材料性质计算。
3.每一个材料性质计算的详细参数设置见APEX仓库下的README.md。

代码
文本
[12]
#联合工作流
cat param_joint.json
{
     "structures": ["confs/fcc-Al"],
     "interaction": {
         "type": "abacus",
         "incar": "abacus_input/INPUT",
         "potcar_prefix": "abacus_input",
         "potcars": {"Al": "Al-sp.PD04.PBE.UPF"},
         "orb_files": {"Al":"Al_gga_9au_100Ry_4s4p1d.orb"}
     },
     "relaxation": {
            "cal_type":      "relaxation",
            "cal_setting":  {"relax_pos":true,
                         "relax_shape":true,
                         "relax_vol":true}
                         },

    "properties": [
        {
         "type":         "eos",
         "skip":         true,
         "vol_start":    0.6,
         "vol_end":      1.4,
         "vol_step":     0.05
        },
        {
         "type":         "elastic",
          "skip":        false,
         "norm_deform":  1e-2,
         "shear_deform": 1e-2
        },
	{
         "type":           "surface",
         "skip":         true,
         "min_slab_size":  10,
         "min_vacuum_size":11,
         "max_miller":     2,
         "cal_type":       "static"
        },
      {
         "type":         "interstitial",
         "skip":         true,
         "supercell":   [1, 1, 1],
         "insert_ele":  ["Mo"]
        },
	  {
	  "type":            "gamma",
	  "skip":            true,
      "plane_miller":    [1,2,3],
      "slip_direction":  [1,1,-1],
	  "hcp": {
        	"plane_miller":    [0,0,0,1],
        	"slip_direction":  [2,-1,-1,0],
		    "slip_length": 1
		},
      "supercell_size":   [1,1,20],
      "vacuum_size": 15,
	  "add_fix": ["true","true","false"],
      "n_steps":         20
	},
	{
         "type":         "phonon",
	 "skip":         true,
	 "BAND": "0.5000 0.5000 0.5000  0.0000 0.0000 0.0000  0.5000 0.0000 0.5000  0.5000 0.2500 0.7500",
	 "supercell_size":[1,1,1],
	 "MESH":[8,8,8],
	 "PRIMITIVE_AXES": "0 1/2 1/2  1/2 0 1/2  1/2 1/2 0",
	 "BAND_POINTS":21,
	 "BAND_CONNECTION" :true,
	 "cal_setting": {
	 	"K_POINTS": [6,6,6,0,0,0],
	 	"input_prop": "abacus_input/INPUT_phonon"
	}
    }

        ]
}

代码
文本

ABACUS输入文件如下。注意,弹性常数计算需要较高的精度,因此我们设置ecutwfc为100,kspacing为0.08以及force_thr为0.001(Unit: Ry/Bohr, 1 Ry/Bohr = 25.7112 eV/Angstrom)。

代码
文本
[13]
ls abacus_input && cat abacus_input/INPUT
Al-sp.PD04.PBE.UPF  Al_gga_9au_100Ry_4s4p1d.orb  INPUT
INPUT_PARAMETERS
calculation cell-relax
symmetry 0
ecutwfc 100
scf_thr 1e-9
scf_nmax 100
basis_type lcao
smearing_method gauss
smearing_sigma 0.015
ks_solver genelpa
cal_stress 1
cal_force 1
kspacing 0.08
relax_nmax 100
force_thr 0.001

代码
文本
[14]
cat ../Al_pw/abacus_input/INPUT
INPUT_PARAMETERS
calculation cell-relax
symmetry 0
ecutwfc 100
scf_thr 1e-9
scf_nmax 100
basis_type pw
smearing_method gauss
smearing_sigma 0.015
ks_solver dav
cal_stress 1
cal_force 1
kspacing 0.08
relax_nmax 100
force_thr 0.001
pseudo_rcut	10
pseudo_mesh	1

代码
文本

confs目录下包含fcc-Al的构型文件STRU,因此结构弛豫和弹性常数计算的结果也会输出在该目录下。

代码
文本
[15]
tree -L 2 confs
confs
└── fcc-Al
    ├── STRU
    ├── STRU.bk
    ├── elastic_00
    └── relaxation

3 directories, 2 files

代码
文本
[16]
cat confs/fcc-Al/STRU
ATOMIC_SPECIES
Al 26.982 pp_orb/Al-sp.PD04.PBE.UPF

NUMERICAL_ORBITAL
pp_orb/Al_gga_7au_100Ry_4s4p1d.orb

LATTICE_CONSTANT
1.8897261254578281     

LATTICE_VECTORS
4.04495 0.0 0.0          
0.0 4.04495 0.0         
0.0 0.0 4.04495

ATOMIC_POSITIONS
Direct               
Al
0.0                   
4                    
0.00 0.00 0.00 1 1 1
0.50 0.50 0.00 1 1 1
0.50 0.00 0.50 1 1 1
0.00 0.50 0.50 1 1 1

代码
文本

使用下面的命令提交联合工作流:

代码
文本
[17]
#apex submit param_joint.json -c global_bohrium.json
代码
文本

计算完成后,可以看到,对于弹性常数计算,一共有24个task(xx,yy,zz3个方向对应4个法向形变,yz,xz,xy3个方向对应4个剪切形变),每一个task都要跑一个relax。

代码
文本
[18]
tree -L 3 confs
confs
└── fcc-Al
    ├── STRU
    ├── STRU.bk
    ├── elastic_00
    │   ├── INPUT
    │   ├── KPT
    │   ├── POSCAR.ieee
    │   ├── STRU
    │   ├── equi.stress.json
    │   ├── param.json
    │   ├── result.json
    │   ├── result.out
    │   ├── task.000000
    │   ├── task.000001
    │   ├── task.000002
    │   ├── task.000003
    │   ├── task.000004
    │   ├── task.000005
    │   ├── task.000006
    │   ├── task.000007
    │   ├── task.000008
    │   ├── task.000009
    │   ├── task.000010
    │   ├── task.000011
    │   ├── task.000012
    │   ├── task.000013
    │   ├── task.000014
    │   ├── task.000015
    │   ├── task.000016
    │   ├── task.000017
    │   ├── task.000018
    │   ├── task.000019
    │   ├── task.000020
    │   ├── task.000021
    │   ├── task.000022
    │   ├── task.000023
    │   └── task_list.json
    └── relaxation
        ├── INPUT
        └── relax_task

28 directories, 12 files

代码
文本

可以直接查看result.out文件获取弹性常数的计算结果。

代码
文本
[19]
cat confs/fcc-Al/elastic_00/result.out
/tmp/inputs/artifacts/input_all/tmp/tmptq818kqv/confs/fcc-Al/elastic_00
  92.52   69.44   69.44    0.00    0.00    0.00 
  69.44   92.52   69.44    0.00    0.00    0.00 
  69.44   69.44   92.52    0.00    0.00    0.00 
  -0.00   -0.00   -0.00   34.27    0.00    0.00 
   0.00    0.00    0.00    0.00   34.27    0.00 
  -0.00   -0.00   -0.00    0.00    0.00   34.27 
# Bulk   Modulus BV = 77.13 GPa
# Shear  Modulus GV = 25.18 GPa
# Youngs Modulus EV = 68.12 GPa
# Poission Ratio uV = 0.35
 
代码
文本
[20]
cat ../Al_pw/confs/fcc-Al/elastic_00/result.out
/tmp/inputs/artifacts/input_all/tmp/tmpspvq7zkx/confs/fcc-Al/elastic_00
  94.66   69.51   69.51   -0.00   -0.00    0.00 
  69.51   94.66   69.51    0.00    0.00    0.00 
  69.51   69.51   94.66    0.00    0.00   -0.00 
  -0.00    0.00    0.00   34.86    0.00    0.00 
  -0.00   -0.00    0.00   -0.00   34.86    0.00 
   0.00    0.00    0.00   -0.00   -0.00   34.86 
# Bulk   Modulus BV = 77.89 GPa
# Shear  Modulus GV = 25.95 GPa
# Youngs Modulus EV = 70.07 GPa
# Poission Ratio uV = 0.35
 
代码
文本

实验值:
# Bulk Modulus BV = 75 GPa
# Shear Modulus GV = 25 GPa
# Youngs Modulus EV = 70 GPa
#Poission Ratio uV = 0.33

代码
文本

可以看到,在本案例中,lcao基组和平面波基组都给出了和实验值非常接近的结果。

代码
文本

恭喜你完成了第五个ABACUS计算模拟实例🎉

代码
文本

如果你还想尝试更多的计算实例,可以点击下方了解ABACUS计算模拟合集链接: ABACUS计算模拟实例 | 概述

代码
文本
ABACUS
计算材料学
ABACUS使用教程
DFT
ABACUS计算材料学ABACUS使用教程DFT
点个赞吧
本文被以下合集收录
ABACUS@计算材料学 | 计算模拟实例
weiqingzhou@whu.edu.cn
更新于 2024-08-09
13 篇8 人关注
ABACUS计算模拟实例
FermiNoodles
更新于 2024-07-15
13 篇1 人关注
推荐阅读
公开
ABACUS计算模拟实例 | IV. 堆垛层错能的计算
ABACUS计算材料学
ABACUS计算材料学
FermiNoodles
发布于 2024-04-10
1 赞2 转存文件
公开
ABACUS计算模拟实例 | IX. 表面能的计算
ABACUSDFT
ABACUSDFT
FermiNoodles
发布于 2024-05-21
2 转存文件