文章目录

  • 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中常用的建模方法相关推荐

  1. 统计计量 | 统计学中常用的数据分析方法汇总

    来源:数据Seminar本文约10500字,建议阅读15+分钟 统计学中常用的数据分析方法汇总. Part1描述统计 描述统计是通过图表或数学方法,对数据资料进行整理.分析,并对数据的分布状态.数字特 ...

  2. 光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法

    是新朋友吗?记得先点蓝字关注我哦- 数据挖掘中 常用的数据清洗方法 在数据挖掘过程中,数据清洗主要根据探索性分析后得到的一些结论入手,然后主要对四类异常数据进行处理,分别是缺失值(missing va ...

  3. 5种JavaScript中常用的排序方法

    5种JavaScript中常用的排序方法 01.冒泡排序 通过相邻数据元素的交换,逐步将待排序序列变为有序序列,如果前面的数据大于后面的数据,就将两值进行交换,将数据进行从小到大的排序,这样对数组的第 ...

  4. 深度学习中常用的误差方法

    深度学习中常用的误差方法有: 标准差(Standard Deviation): 标准差也叫均方差,是方差的算术平方根,反应数据的离散程度 ,标准差越小,数据偏离平均值越小,反之亦然 . 公式为: py ...

  5. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...

  6. 人脸扫描建模_人脸识别中的特征建模方法与流程

    本发明涉及生物特征识别,特别是涉及人脸识别中的特征建模方法. 背景技术: 人脸识别技术一般包括四个组成部分,分别为人脸图像采集.人脸图像预处理.人脸图像特征提取以及匹配与识别,具体来说: 人脸图像采集 ...

  7. MPI中常用的通信方法

    MPI中常用的通信方法 问题描述 梯形法求解积分的串行程序 使用MPI并行化 使用树形结构优化通信 使用MPI_Reduce优化通信 使用MPI_Bcast优化通信 使用派生数据类型优化通信 使用结构 ...

  8. 夺命雷公狗jquery---18jquery中常用属性(方法)

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>< ...

  9. JS lodash库在开发中常用到的方法

    目录 一.摘要 二.常用方法 一.摘要 lodash是JS一个开箱即用的库函数,里面对于在日常开发中常用到的方法都是已经封装好的,使用起来非常方便,本篇记录了在日常开发过程总经常用的方法,就大概记录一 ...

最新文章

  1. NLP未来,路在何方?12位巨佬联名指路!
  2. python 两个内置函数——locals 和globals(名字空间)批量以自定义变量名创建对象
  3. JAVA并发编程学习笔记之CAS操作
  4. STM32看门狗总结
  5. JDK 7,jdk1.7 安装及配置
  6. Redis:02---安装Redis(Linux+Windows+Docker)
  7. 单元格格式_单元格格式的用法你知道吗~~
  8. Java中Integer类的方法
  9. 排序归并连接Merge Sort Join
  10. golang 两个一样的字符串不相等_分享一个姑娘双眼皮术后两个眼睛有点不一样,不知道该不该修复?...
  11. php+redis实现消息队列
  12. LINE:不得不看的大规模信息网络嵌入
  13. 乡镇上那些卖散白酒的一天不见几个人买,为什么不关店?
  14. iTOP-4412开发板基于Linux-C测试程序的编译和运行
  15. Swoole Framework 入门教程(1)
  16. json离线解析格式化工具
  17. c语言中感叹号什么意思_啥是c语言-c语言感叹号用法-c语言中的/和%表示什么意思...
  18. 方正飞鸿:OA系统先进性如何在工作流中体现
  19. 搭载网站的云服务器需要空间备案,网站空间要备案吗
  20. R语言绘图—快速绘制Lollipop图

热门文章

  1. mapboxgl+echarts 简单制作专题地图
  2. 电脑值得收藏的10个网站,知乎超100万人推荐,让你办公事半功倍,还请低调使用!!!
  3. dae怎么用草图大师打开_将草图大师su模型导入lumion的方法与步骤
  4. 从计算机屏幕上抓取动态操作过程 也称为,计算机学业水平考试单项选择题综合训练一 答案复习过程...
  5. 一个正经的前端学习 开源 仓库(阶段十四)
  6. uni-app小程序到微信发布踩的坑
  7. Spring Cloud微服务开发笔记4——Ribbon框架使用方法
  8. 如何正确的从零开始学英语
  9. 查看Linux是x86还是x64
  10. 智慧城市发展情况及未来