ABACUS计算模拟实例 | V. Al的弹性性能指标计算
©️ Copyright 2023 @ Authors
作者:Jinghang Wang (AISI电子结构团队实习生) 📨
日期:2024-6-19
共享协议:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
快速开始:本案例不要求完成具体计算,只涉及预处理、部分运行命令展示以及结果分析,故使用c2_m4_cpu及ABACUS:3.6.3-user-guide 镜像,点击上方的 开始连接 按钮并在连接后点击右上方的切换内核,选择Bash内核稍等片刻即可运行。
🎯 本教程旨在帮助初学者学习使用ABACUS以及APEX完成合金弹性常数计算
本节教程目录如下:
1. 各类弹性常数计算方法
2. 使用APEX完成弹性常数计算
在使用ABACUS进行计算时,所有操作都需要在指定的文件夹目录下进行。我们已经准备好了数据集ABACUS-cases,,其中文件夹“5”对应本节教程。
首先我们将数据集中的文件复制到根目录下(否则可能碰到文件没有执行权限的情况):
Al_lcao Al_pw
可以看到有一共有两个目录,Al_lcao
和Al_pw
分别对应使用lcao基组和pw进行Al的弹性常数计算。
- APEX
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算法得到各弹性模量:
2. 使用APEX完成弹性常数计算
首先我们安装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.
APEX v1.2.0
dpdata是一款用于不同材料计算软件间的格式转化的python软件包,支持ABACUS, DeePMD-kit, VASP, LAMMPS, GROMACS, Gaussian等软件。APEX+ABACUS做弹性常数计算时也需要用到dpdata处理ABACUS的输入输出文件。你可以通过以下命令检查并更新dpdata至最新版,以避免数据读取报错。
至此APEX安装完毕。
- 输入文件准备:
global_bohrium.json
:包含了APEX提交工作流至Bohrium平台相关的全局设置(例如:Bohrium账号信息;镜像地址;节点种类等)。该文件应当提前准备在用户提交的工作路径下。param.json
:一个完整的APEX合金测试工作流由 结构弛豫relaxation
和 性质测试property
两个单独的计算工作流串联完成,其具体参数设置均通过工作路径下的相关json文件传递给APEX。我们可以分别提交param_relax.json
和param_props.json
文件依次完成结构弛豫及性质测试计算,也可以使用一个param_joint.json
联合工作流文件完成上述两个计算。- ABACUS的输入文件:
INPUT
、STRU
以及赝势轨道。
abacus_input confs global_bohrium.json param_props.json all_result.json dpdispatcher.log param_joint.json param_relax.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_host
和k8s_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_type
和context_type
:批处理系统类型及工作流执行的上下文环境类型,这里均为Bohrium
。
7.scass_type
:使用的机型。可根据需要自行修改。
{ "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_prefix
和potcars
分别对应赝势文件所在目录路径以及赝势文件名;orb_files
对应原子轨道文件名(原子轨道文件也应放在potcar_prefix
目录下)。
3.relaxation
:弛豫计算设置。relax_pos
,relax_shape
及relax_vol
分别对应在弛豫计算时离子位置/晶胞形状/晶胞体积是否改变。
{ "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.structures
和interaction
与param_relaxation.json
文件中相同。
2.通过设置properties
中的skip
参数为True
or False
选择想要进行的材料性质计算。
3.每一个材料性质计算的详细参数设置见APEX仓库下的README.md。
{ "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)。
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
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
,因此结构弛豫和弹性常数计算的结果也会输出在该目录下。
confs └── fcc-Al ├── STRU ├── STRU.bk ├── elastic_00 └── relaxation 3 directories, 2 files
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
使用下面的命令提交联合工作流:
计算完成后,可以看到,对于弹性常数计算,一共有24个task(xx,yy,zz3个方向对应4个法向形变,yz,xz,xy3个方向对应4个剪切形变),每一个task都要跑一个relax。
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
文件获取弹性常数的计算结果。
/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
/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计算模拟实例 | 概述