lammps和atomsk中常用的建模方法
文章目录
- 1.Atomsk生成刃型位错
- 2.Atomsk生成任意角度晶界
- 3.Atomsk生成孪晶
- 4.Atomsk生成非晶
- 5.合金多晶结构建模
- 6.Atomsk建立管道类模型
- 7.Atomsk建立不规则界面
- 8.Atomsk产生空位缺陷
- 9.复杂图案建模
- 10.lammps晶界偏析建模
- 11.region union复杂形状建模
- 12.正弦粗糙界面建模
- 13.Atomsk多相建模
当在模拟过程中需要较为复杂的模型时,仅靠lammps建模已经不行。需要lammps和atomsk共同协助来帮助我们建立复杂的模型,本文介绍在lammps和atomsk中常用的建模方法,希望能够帮助初学者更好的建立较为复杂的模型。
1.Atomsk生成刃型位错
刃型位错是在晶体结构中插入一个半原子面,产生晶格畸变,位错处能量较高,在外力作用下容易发生滑移。
塑性变形时位错沿着一定的晶面和晶向运动,这些晶面和晶向分别称为滑移面和滑移方向。滑移面和滑移方向往往是晶体中原子排列最密的晶面和晶向。原因:原子排列最密的晶面其面间距最大,点阵阻力最小,容易沿这些晶面发生滑移。同理,原子排列最密的晶向上原子间距最短,在此晶向上滑移最容易。一个滑移面和此面上的一个滑移方向组成一个滑移系。
对于面心立方来说,有滑移面{111}4个,滑移方向<110>3个,组合出12个滑移系。
atomsk -dislocation <p1> <p2> <edge|edge2> <ξ> <n> <b> <v>
p1 p2:确定位错的位置,位错在垂直于位错线的平面中的坐标
edge或者edge2:表示插入的为刃型位错
ξ:位错线的方向,必须为x、y或z
n:半原子面方向,必须为x、y或z,但必须不同于ξ
b:位错泊氏矢量的长度,为位错移动方向上两相邻原子之间的间距
v:泊松比
atomsk --create fcc 3.52 Ni orient [-110] [111] [11-2] Ni_cell.xsf
# 创建Ni单胞,xyz坐标轴方向为[-110][111][11-2],滑移面为[111]面,滑移方向[-110]
atomsk Ni_cell.xsf -duplicate 40 10 10 Ni_supercell.xsf
# 将Ni单胞扩展成40*10*10的超晶胞
atomsk Ni_supercell.xsf -dislocation 0.5*box 0.5*box edge Z Y 2.4893918 0.33 -wrap Ni_edge.lmp
# 插入刃型位错,位置位于box中央,位错线平行于Z轴
# wrap将所有原子保存在Ni_edge.lmp中
2.Atomsk生成任意角度晶界
根据多晶建模理论,将晶界上下两部分视为2个大晶粒,每个晶粒按一定角度旋转即可。
# 1.生成Al的单胞
atomsk --create fcc 4.046 Al aluminium.xsf
# 2.建立多晶参数文件ployX.txt
box 100 100 10 #盒子尺寸,100*100*10埃
node 0.5*box 0.25*box 0 0° 0° -26.57° #上下晶粒分别旋转26.57度(围绕Z轴旋转),旋转中心坐标+角度
node 0.5*box 0.75*box 0 0° 0° -26.57°
# 3.建立晶界/多晶
atomsk --polycrystal aluminium.xsf ployX.txt polycrystal.cfg
# 保存为polycrystal.cfg
3.Atomsk生成孪晶
1.生成Al单胞并设定取向
atomsk --create fcc 4.05 Al orient [11-2] [111] [-110] -duplicate 8 4 4 Al_cell.xsf
# create建立单胞,orient设定xyz三轴方向,duplicate复制扩胞
2.生成镜像晶体
atomsk -mirror <d> <normal>
d:镜面与坐标原点的距离
normal:垂直于镜面方向,可以为x、y、z或晶向
atomsk Al_cell.xsf -mirror 0 Y -wrap Al_mirror.xsf
# mirror生成镜像Al_mirror.xsf(沿着Y方向)
3.合并晶体
atomsk --merge Y 2 Al_cell.xsf Al_mirror.xsf Al_final.xsf
# 将Al_cell.xsf和Al_mirror两晶体沿Y方向合并到一起,存入Al_final.xsf
4.Atomsk生成非晶
非晶态是指原子处于无序状态的一种结构。使用Atomsk建立非晶,首先建立晶体,然后随机调整原子坐标,使其脱离原晶格点位置即可。
# 1.建立Al晶体模型
atomsk --create fcc 4.046 Al -duplicate 20 20 20 Al_supercell.cfg
# create建立Al单胞,并扩胞为20*20*20的超晶胞# 2.随机调整原子位移
atomsk Al_supercell.cfg -disturb 1.5 final.lmp
# disturb随机调整原子位移,最大调整不超过1.5埃
5.合金多晶结构建模
1.生成Fe单胞
atomsk --create fcc 3.65 Fe Fe.xsf
2.建立多晶节点文件polycrystal.txt
box 200 100 200
random 20
# 盒子尺寸200*100*200埃,随机生成20个晶粒
3.生成多晶文件final.lmp
atomsk --polycrystal Fe.xsf polycrystal.txt final.lmp -wrap
# 将Fe单胞填充到20个晶粒中,保存为final.lmp,-wrap将所有原子保存
4.修改final.lmp
3 atom stypes
# 原子类型由1种改为3种Masses
1 55.845 #Fe
2 58.69 #Ni
3 51.96 #Cr
# 添加Nr、Cr原子摩尔质量
5.替换原子生成合金结构
units metal
dimension 3
boundary p p p
atom_style atomic
timestep 0.001
neighbor 0.2 bin
read_data final.lmp
set type 1 type/ratio 2 0.33 8793
set type 1 type/ratio 3 0.5 56332 #替换原子,1:1:1
write_data FeNiCr.data
6.Atomsk建立管道类模型
atomsk -roll <direction> <θ> <axis>
direction:“滚动”方向,必须是x、y或z
θ:旋转角度,θ=360 形成管状
axis:圆柱体的轴,必须是x、y或z
# 1.建立Al板模型
atomsk --create bcc 4.046 Al -duplicate 20 20 1 Al.xsf# 2.roll变形
atomsk Al.xsf -roll y 360 x fianl.lmp
7.Atomsk建立不规则界面
1.生成2层Al原子
atomsk --create fcc 4.046 Al -duplicate 20 20 1 Al_supercell.cfg
2.建立disp.txt文件
# Atom displacements
displacement function # 位移函数
uz = 10*cos(4*pi*x/Hx) # uz为z坐标,Hx为x方向框尺寸,pi为π
# Atom displacements
displacement function
uz = 2*cos(4*pi*x/Hx) + 2*cos(4*pi*y/Hy)
3.生成不规则界面
atomsk Al_supercell.cfg -properties disp.txt final.lmp
# properties 设置每一个原子属性
8.Atomsk产生空位缺陷
使用“-select”选择原子,后通过“-remove-atom”删除被选择的原子,形成空位缺陷,“-select”可以选择特定原子,也可以随机选择一定数目原子。
Atomsk中select的用法:
atomsk -select all
#选择所有原子
atomsk -select invert
#反选原子,若之前未定义选择,则不做任何操作
atomsk -select <species>
#选择给定种类的所有原子
atosmk -select <index>
#选择给定索引的原子,多个时用逗号隔开
atomsk -select list <file>
#<file>为每行包含一个原子索引的文本文件
atomsk -select random <N> <species>
#给定种类中随机选择N个原子,若为N%,则为百分比,若<species>为any或all,则从所有种类中随机选择N个原子
atomsk -select <above|below> <d> <dir>
#<dir>为x y z或者晶向,选择在<dir>方向上距离原点大于above/小于below给定距离<d>的原子
atomsk -select <in|out> cell
#选择模拟单元内部in/外部out的原子
atomsk -select <in|out> box <x> <y> <z> <x'> <y'> <z'>
#选择给定盒子box 内部in/外部out的原子
atomsk -select <in|out> sphere <x> <y> <z> <R>
#选择给定球体sphere 内部in/外部out的原子
atomsk -select <in|out> cylinder <axis> <x1> <x2> <R>
#圆柱体由轴<axis>,圆心坐标<x1><x2>,半径<R>确定
atomsk -select <in|out> cone <axis> <x> <y> <z> <α>
#圆锥由轴<axis>,尖端坐标<x><y><z>,相对于开口角度数α确定
atomsk -select <in|out> torus <axis> <x> <y> <z> <R> <r>
#圆环由法线轴<axis>,圆心坐标<x><y><z>,主半径<R>,次半径<r>确定
atomsk -select prop <property> <value1[:value2]>
#选择给定属性<property>为值<value>的原子,两个值时用冒号:隔开,为选择范围
atomsk -select <NNN> <species> neighbors <index>
#选择给定索引<index>的邻居原子,<NNN>为正值,则选择<NNN>个最近邻居;
# <NNN>为负值,则选择半径为-<NNN>内的所有邻居原子;<NNN>为零,则选择第一个最近邻居
atomsk -select <i> modulo <j>
#选择索引为i ± nj的原子,n为整数atomsk -select [add|rm|intersect|xor|among] <any of the select>
#可以使用关键词来组合选择,假设之前选择了原子组A,新选择了原子组B
# add选择属于A或者属于B的原子
# rm选择属于A但不属于B的原子
# intersect选择同时属于A和B的原子
# xor选择属于A或者属于B但是非共同的原子
# among再A组原子中再选择,常用于prop和random命令
atomsk -select grid <file>
#<file>为符合以下三种格式的文本文件
#前两种适用于2D或3D网格,最后一种只用于2D网格1.第一行为Nx Ny Nz,为xyz方向的网格数目,文件包含Nx*Ny*Nz个数字0或1,对应所有网格,0表示不选,1表示选择,排序从增加x开始,然后增加y,最后增加z
2.第一行为Finite element,然后给出多行数据,包括坐标(x,y,z)和0/1,0表示取消选择,1表示选择
3.包含多行ASCll字符,为二维网格的可视化表示,0或空格表示未选择,1或其他ASCll字符表示选择
Atomsk中remove-atom的用法:
atomsk -remove-atom <index>
atomsk -remove-atom <species>
# 删除给定索引或者种类的原子
atomsk -remove-atom select
# 删除所选择的原子
9.复杂图案建模
准备一张图片,将其转换为掩码文件,然后在Atomsk中使用该掩码文件对模型进行蒙版处理即可。
1.蒙版图像
准备一张图片,长宽大约为100-200像素即可。
2.生成mask.txt
import numpy
from PIL import Imagef = open("mask.txt",'a') #a为追加写模式
def pretreatment(img):img = img.convert('L') #模式转换,将RGB转换为L(灰色图像)im = numpy.array(img) #图像转换为数组# print(im.shape) #输出数组大小for i in range(im.shape[0]):for j in range(im.shape[1]):# print(im[i,j]) #输出该点灰度值if im[i,j] >= 125: #白色为0f.write('0')else:f.write('1')return im
img = Image.open('mask.png') #打开图片,PIL类型,默认RGB模式
im = pretreatment(img)
f.close()
运行mask.py,根据图片mask.png(100*100),生成掩码文件mask.txt。
3.Atomsk建模
atomsk --create fcc 4.046 Al -duplicate 100 100 1 Al.xsf
# 生成一个Al版atomsk Al.xsf -select grid mask.txt -substitute Al Au final.lmp
# 将被蒙版遮住的Al原子替换为Au原子,substitute替换
10.lammps晶界偏析建模
划分一个替换原子区域并将该区域原子设置为一个新类型,替换完成后在设回原来的原子类型,此法只适用于形状简单的晶界。
以Cu晶界偏析Al原子为例
(1)Cu晶界建模(孪晶)
# 创建上部Cu
lattice fcc 3.61 origin 0.6 0.5 0 orient x 1 1 -2 orient y 1 1 1 orient z 1 -1 0
#重新定义原点origin坐标和坐标轴orient方向
region upper block 0 100 0 25 0 20 units box
create_atoms 1 region upper
#创建下部Cu
lattice fcc 3.61 origin 0 0.2 0 orient x -1 -1 2 orient y 1 1 1 orient z -1 1 0
region lower block 0 100 25 50 0 20 units box
create_atoms 1 region lower
(2)设置晶界区域,并替换原子,后将原子类型复原
region mid block INF INF 18 32 INF INF units box #设置晶界区域
group mid region mid #晶界原子组
set group mid type 3 #晶界原子组设为类型3
set type 3 type/fraction 2 0.3 23985 #将近似30%的类型3原子替换为类型2(Al)原子
group new3 type 3 #将剩余的类型3原子设为new3原子组
set group new3 type 1 #将new3原子组重新设为类型1
如果在模拟过程中需要精确控制原子的替换比例,则使用set type/ratio命令,如果对原子比例要求不严格,则可以使用set type/fraction命令近似比例替换。
11.region union复杂形状建模
region ID union N reg-ID1 reg-ID2...
# N合并区数目,reg-ID1 reg-ID2...合并区ID
region plane建立锐角刀具模型
region plane命令可以设置多个平面,通过组合可以得到具有特定形状的区域。
region ID plane px py pz nx ny nz
# px py pz 平面上任意一点的坐标
# nx ny nz 平面的法线向量
设置三个平面p1、p2、p3,相交得到中间三角形区域
region p1 plane 0 0 0 1 0 -1
region p2 plane 20 0 20 0 0 1
region p3 plane 80 0 20 -1 0 0
region tool intersect 3 p1 p2 p3 #intersect取交集
12.正弦粗糙界面建模
一维正弦粗糙界面
1.创建曲面方程
z=Asin(ωx)+kz=Asin\left(\omega x\right)+kz=Asin(ωx)+k
AAA:为振幅,控制曲面的起伏高度
ω\omegaω:控制正弦周期,即控制曲面的起伏个数
kkk:为偏距,控制曲面的上下位置
曲面方程为:
z=(8*sin(x*2.0*PI/30)+30)
2.根据曲面方程填充原子
#模型初始条件设置
units metal #单位
dimension 3 #维度
boundary p p p #边界条件
atom_style atomic #原子类型variable x equal 40 #x变量
variable y equal 25 #y变量
lattice fcc 3.61 #晶格
region box block 0 $x 0 $y 0 20 #设置box区域
create_box 1 box #设置box区域1种原子
variable xx internal 0.0 #internal将值赋予内部变量使用,只有create_atoms和fix controller命令使用
variable zz internal 0.0
variable v equal "v_zz < (8*sin(v_xx*2.0*PI/30)+30)" #计算是否小于曲面方程
create_atoms 1 box var v set x xx set z zz #var和set根据坐标计算来确定是否添加单个原子,set标识内部变量
二维正弦粗糙界面
1.创建曲面方程
z=Asin(ωx)∗sin(ωy)+kz=Asin\left(\omega x\right)*sin\left(\omega y\right)+kz=Asin(ωx)∗sin(ωy)+k
z=(8*sin(x*2.0*PI/30)+30)
2.根据曲面方程填充原子
#模型初始条件设置
units metal #单位
dimension 3 #维度
boundary p p p #边界条件
atom_style atomic #原子类型variable x equal 40 #x变量
variable y equal 25 #y变量
lattice fcc 3.61 #晶格
region box block 0 $x 0 $y 0 20 #设置box区域
create_box 1 box #设置box区域1种原子
variable xx internal 0.0 #internal将值赋予内部变量使用,只有create_atoms和fix controller命令使用
variable yy internal 0.0
variable zz internal 0.0
variable v equal "v_zz < (15*sin(v_xx*2.0*PI/50)*sin(v_yy*2.0*PI/50)+30)" #计算是否小于曲面方程
create_atoms 1 box var v set x xx set y yy set z zz #var和set根据坐标计算来确定是否添加单个原子,set标识内部变量
13.Atomsk多相建模
先建立一个相的多晶模型,然后删除一部分晶粒,然后用另一种相填充被删除的空间,从而建立多晶多相结构。
1.建立多晶节点文件
polycrystal.txt
box 200 180 210 #盒子尺寸200*180*210 埃
#定义6个晶粒
node 0 0 0 [100] [010] [001] #node 晶粒位置(单位埃) 方向
node 40 80 60 56° -83° 45° #node 晶粒位置 旋转角度
node 0.8*box 0.6*box 0.9*box [11-1] [112] [1-10]
node 50 5 60 [110] [1-10] [001]
node 0.75*box 0.3*box 0.45*box -31.4° 28.7° 90.0°
node 60 100 80 random #使用随机晶向
2.多晶Cu建模fcc
Cu晶胞文件:Cu_unitcell.xsf
atomsk --create fcc 3.61 Cu Cu_unitcell.xsf #创建Cu晶胞
atomsk --polycrystal Cu_unitcell.xsf polycrystal.txt Cu_polycrystal.cfg -select prop grainID 1 -rmatom select -select prop grainID 6 -rmatom select
#生成一个包含6 Cu晶粒的模型文件Cu_polycrystal.cfg,选择并删除编号1和6的晶粒,grainID每个原子的晶粒值
3.多晶W建模bcc
atomsk --create bcc 3.16 W W_unitcell.xsf #创建W晶胞
atomsk --polycrystal W_unitcell.xsf polycrystal.txt W_polycrystal.cfg -select prop grainID 2:5 -rmatom select
#生成一个包含6 W晶粒的模型文件W_polycrystal.cfg,选择并删除编号2到5的晶粒
4.合并模型
atomsk --merge 2 Cu_crystal.cfg W_polycrystal.cfg final_polycrystal,cfg
#合并多晶Cu和多晶W模型,并保存为final_polycrystal.cfg
lammps和atomsk中常用的建模方法相关推荐
- 统计计量 | 统计学中常用的数据分析方法汇总
来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...
- 光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法
是新朋友吗?记得先点蓝字关注我哦- 数据挖掘中 常用的数据清洗方法 在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四类异常数据进行处理,分别是缺失值(missing va ...
- 5种JavaScript中常用的排序方法
5种JavaScript中常用的排序方法 01.冒泡排序 通过相邻数据元素的交换,逐步将待排序序列变为有序序列,如果前面的数据大于后面的数据,就将两值进行交换,将数据进行从小到大的排序,这样对数组的第 ...
- 深度学习中常用的误差方法
深度学习中常用的误差方法有: 标准差(Standard Deviation): 标准差也叫均方差,是方差的算术平方根,反应数据的离散程度 ,标准差越小,数据偏离平均值越小,反之亦然 . 公式为: py ...
- VB的一些项目中常用的通用方法-一般用于验证类
1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...
- 人脸扫描建模_人脸识别中的特征建模方法与流程
本发明涉及生物特征识别,特别是涉及人脸识别中的特征建模方法. 背景技术: 人脸识别技术一般包括四个组成部分,分别为人脸图像采集.人脸图像预处理.人脸图像特征提取以及匹配与识别,具体来说: 人脸图像采集 ...
- MPI中常用的通信方法
MPI中常用的通信方法 问题描述 梯形法求解积分的串行程序 使用MPI并行化 使用树形结构优化通信 使用MPI_Reduce优化通信 使用MPI_Bcast优化通信 使用派生数据类型优化通信 使用结构 ...
- 夺命雷公狗jquery---18jquery中常用属性(方法)
<!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...
- JS lodash库在开发中常用到的方法
目录 一.摘要 二.常用方法 一.摘要 lodash是JS一个开箱即用的库函数,里面对于在日常开发中常用到的方法都是已经封装好的,使用起来非常方便,本篇记录了在日常开发过程总经常用的方法,就大概记录一 ...
最新文章
- NLP未来,路在何方?12位巨佬联名指路!
- python 两个内置函数——locals 和globals(名字空间)批量以自定义变量名创建对象
- JAVA并发编程学习笔记之CAS操作
- STM32看门狗总结
- JDK 7,jdk1.7 安装及配置
- Redis:02---安装Redis(Linux+Windows+Docker)
- 单元格格式_单元格格式的用法你知道吗~~
- Java中Integer类的方法
- 排序归并连接Merge Sort Join
- golang 两个一样的字符串不相等_分享一个姑娘双眼皮术后两个眼睛有点不一样,不知道该不该修复?...
- php+redis实现消息队列
- LINE:不得不看的大规模信息网络嵌入
- 乡镇上那些卖散白酒的一天不见几个人买,为什么不关店?
- iTOP-4412开发板基于Linux-C测试程序的编译和运行
- Swoole Framework 入门教程(1)
- json离线解析格式化工具
- c语言中感叹号什么意思_啥是c语言-c语言感叹号用法-c语言中的/和%表示什么意思...
- 方正飞鸿:OA系统先进性如何在工作流中体现
- 搭载网站的云服务器需要空间备案,网站空间要备案吗
- R语言绘图—快速绘制Lollipop图
热门文章
- mapboxgl+echarts 简单制作专题地图
- 电脑值得收藏的10个网站,知乎超100万人推荐,让你办公事半功倍,还请低调使用!!!
- dae怎么用草图大师打开_将草图大师su模型导入lumion的方法与步骤
- 从计算机屏幕上抓取动态操作过程 也称为,计算机学业水平考试单项选择题综合训练一 答案复习过程...
- 一个正经的前端学习 开源 仓库(阶段十四)
- uni-app小程序到微信发布踩的坑
- Spring Cloud微服务开发笔记4——Ribbon框架使用方法
- 如何正确的从零开始学英语
- 查看Linux是x86还是x64
- 智慧城市发展情况及未来