lammps和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个数字01,
  对应所有网格,0表示不选,1表示选择,排序从增加x开始,然后增加y,最后增加z
2.第一行为Finite element,然后给出多行数据,包括坐标(x,y,z)0/10表示取消选择,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 Image

f = 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:          #白色为0
                f.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 = A s i n ( ω x ) + k z=Asin\left(\omega x\right)+k z=Asin(ωx)+k
A A A:为振幅,控制曲面的起伏高度
ω \omega ω:控制正弦周期,即控制曲面的起伏个数
k k 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       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 = A s i n ( ω x ) ∗ s i n ( ω y ) + k z=Asin\left(\omega x\right)*sin\left(\omega y\right)+k z=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
  • 8
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用Atomsk进行建模替换时,可以使用命令"atomsk -remove-atom <index>"或者"atomsk -remove-atom <species>"来删除给定索引或者种类的原子。另外,也可以使用"atomsk -remove-atom select"命令来删除所选择的原子。\[1\] 例如,如果要替换原子生成合金结构,可以使用以下命令: ``` 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 ``` 这个命令将会替换原子,生成合金结构,并将结果写入FeNiCr.data文件。\[2\] 另外,如果想使用Atomsk建立管道类模型,可以使用命令"atomsk -roll <direction> <θ> <axis>"。这个命令可以根据指定的方向、角度和轴来建立管道类模型。\[2\] 希望以上信息对您有所帮助。如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [lammpsatomsk常用建模方法](https://blog.csdn.net/qq_44963682/article/details/125883094)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Atomsk空位缺陷建模技巧](https://blog.csdn.net/lammps_jiayou/article/details/119208769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值