zhoulong的个人博客分享 http://blog.sciencenet.cn/u/zhoulong

博文

如何使用lammps内部建模命令来创建data文件

已有 6505 次阅读 2021-8-17 21:17 |个人分类:lammps|系统分类:科研笔记

如何使用lammps内部建模命令来创建data文件


在lammps模拟中,必不可少的就是data文件,因为data文件就是你所模拟的模型,data文件的创建方法很多,可以分为两类,一是使用建模软件来创建data 文件,我们称之为外部建模;另一种是使用lammps自生的建模命令来创建data文件,我们称之为内部建模。这里暂时介绍第一种如何使用lammps内部建模命令来建立data文件?内部建模需要的lammps命令有很多,例如:lattice,region,create_atoms,create_box等很多命令,具体可以查看lammps手册。下面就lammps内部建模来交流一下:

lammps命令建模大致可以分为四个步骤描述:

  • 用units 命令定义单位 

  • lattice 命令定义单胞

  • region以及create_box命令定义区域和创建盒子

  • create_atoms 命令创建原子


1. 首先来说说units:

 style
  • style = lj or real or metal or si or cgs or electron or micro or nano

这条命令设置了模拟中使用的单位样式。它决定了在输入脚本和数据文件中指定的所有数量的单位,以及输出到屏幕、日志文件和转储文件的数量。通常情况下,这条命令在输入脚本的最开始使用。


2. lattice的语法与说明:

     lattice style scale keyword values ...

style可以是 none, sc, bcc, fcc, hcp, diamond, sq,sq2, hex 或者 custom

 

scalestyle选项下的参数,比如(当units ≠ lj 时)style填bcc, 那么scale就填体心立方的晶格常数a0的值(当 units 为lj 时,这里的scale就是电子密度值,使用其他units时,scale都是晶格常数)。

需要注意的是,当指定了 lattice的scale之后,位于lammps输入脚本中关于长度的值,其单位就是scale(表示几倍scale长)。

 

零个或更多个 keyword/value 键值对可以被添加

keyword可指定为 origin, orient, spacing, a1, a2, a3或者 basis


  对于所建立的晶胞,我们都可以进行平移origin和旋转orient操作

 

origin 配对的值是三个数字 (x y z) 意思是对单位晶胞里的所有原子的整体平移量,单位晶胞的楞长默认为1,x,y,z的值为偏移量和棱长的比值(0 <= x,y,z <1),缺省值为(0 0 0)。为了便于后续分析,以及避免建模边界原子重合,我们一般会给一个比较小的偏移量(0.1 0.1 0.1).

 

orient 作用是旋转晶胞方向。盒子默认方向为(x 0 0 1) (y 0 1 0)  (z 0 0 1),可以认为orient命令将晶胞的指定晶向旋转至模拟盒子的三条坐标轴,然后将晶胞在盒子里重新排布。orient配对的值格式为 dim i j k,其中dim的值是字母 ‘x’ , ‘y’ 或者’z’,表示空间的三条轴。i j k 为该轴指向向的晶向,其值为整数,例如“orient x 2 1 0” 意思是旋转过后模拟盒子的x轴将会指向 [210] 晶向。三个方向要求满足正交以及右手定则。做旋转处理时,盒子原本的周期性不能被保证,如果仍然要保持其周期性,则先建模运行,然后看lammps的屏幕输出lattice spacing in x,y,z后的值,记为sx,sy,sz。然后将建立的模型放到ovito中切片观察,计算出xyz各个方向上的最小排布周期长度,记为slx,sly,slz。他们必须满足如下关系:

sx*m1=slx*n1

sy*m2=sly*n2

sz*m3=slz*n3

其中m1,2,3以及n1,2,3均为整数,于是取盒子大小为(sx*m sy*m sz*m3)

旋转操作一般被用来建立不同方向的界面。

 

spacing配对的值是 dx dy dz,为两个单胞之间的间距

 

如果我们的style取的是custom,那么我们可以通过a1,a2,a3 和 basis 这两个关键词来指定基矢和单胞里的原子在基矢中的定位

 

a1,a2,a3 各自配对的值为(x y z)意思是a1 a2 a3这三个基矢的值,用来定义单胞的基矢。缺省值对于三维的sc、fcc、bcc和diamond类型的原子,他们的棱长默认为1个单位,默认的基矢为a1 (1 0 0);a2 (0 1 0);a3 (0 0 1)。hpc类型a1 = 1 0 0;a2 =0 sqrt(3) 0;a3 = 0 0 sqrt(8/3)。

 

basis 配对的值是(x y z),表示在基矢定义的空间的一个位置,如有多个位置,则定义多个basis


 对于三维的sc、fcc、bcc和diamond类型的原子,这些已有的类型不需要指定基矢和basis,但是我们可以用custom的style加上基矢和basis的参数来建立同样的模型。bcc, fcc, sc的基矢为a1 = 1 0 0;a2 = 0 1 0;a3 = 0 0 1,bcc默认basis原子(0 0 0)(0.5 0.5 0.5),fcc的basis (0 0 0)(0 0.5 0.5)(0.5 0.5 0)(0.5 0 0.5), sc 的basis(0 0 0)。hpc类型的基矢a1 = 1 0 0;a2= 0 sqrt(3) 0;a3 = 0 0 sqrt(8/3)。


3. region命令用于定义一个空间几何区域。

使用语法:  region  ID style args keyword arg ...

 ID= 待定义区域的ID

style= delete / block / cone / cylinder / plane / prism / sphere / union / intersect

 

使用举例:

  • region1 block -3.0 5.0 INF 10.0 INF INF

  • region2 sphere 0.0 0.0 0.0 5 side out

  • regionvoid cylinder y 2 3 5 -5.0 EDGE units box

  • region1 prism 0 10 0 10 0 10 2 0 0

  • regionoutside union 4 side1 side2 side3 side4

  • region2 sphere 0.0 0.0 0.0 5 side out move v_l

使用介绍

 

该命令用于定义一个空间几何区域。很多其他命令都会使用该命令定义的区域。举例来说,create_atoms可以在定义区域中创建原子,create_box命令可以根据定义区域定义模拟盒子,group命令可以将定义区域中包括的原子定义为一个组,delete_atoms命令可以将定义区域中的原子删掉,fix wall/region可以将定义区域的表面定义为壁面(boundary wall)。

大多数使用region命令所定义区域的命令都需要检测某个原子的位置是否在区域内。刚好在区域边界上原子被认为是属于所定义区域的。举个例子,对于一个球形区域而言,如果在定义的时候使用了关键字side in,那么球形区域表面上的原子就是该定义区域的一部分;如果使用了关键字side out,那么球形区域表面上的原子就不属于该区域的一部分。详细可以参考下面的side关键字。

 

一般来说,LAMMPS所定义的区域都是静态的,也就说所定义的几何空间范围并不会随着时间而改变。但如果使用了关键字move或rotate,如下文所要介绍的,区域就会变成动态的,也就是说所定义区域的位置和朝向会随着时间发生改变。在有些时候,这种动态区域是比较有用的,比如在使用命令compute temp/region对一个区域进行恒温,或使用fixwall/region命令将包含运动粒子的区域表面定义为壁面时。

 

delete类型:删除指定的区域。因为定义冗余的区域并不会占用太大的开销,所以一般不需要这样做,除非在你的输入脚本中定义了大量了区域。

 

block/ cone / cylinder / prism类型中参数lo/hi的值可以指定为EDGE或INF。

 

EDGE是指所定义方向一直延伸到所在方向模拟盒子的边界。需要注意的是,这里所说模拟盒子的边界是指当前盒子的边界。换句话说,如果模拟盒子在模拟的过程中发生了改变,按着这种方式定义的区域并不会随着改变。

INF是指一个非常大的负数或正数(1.0e20),所以即便模拟盒子在模拟过程中发生改变了,使用该定义仍然能将其包括到区域中。

如果模拟盒子还没有创建,那么在使用region定义区域的时候就不能使用EDGE或INF(译注:这是显然的,因为EDGE和INF都是相对于模拟盒子来说的)。

对于prism类型的区域,如果某个倾斜因子不为0,那么它所对应的两个维度上lo/hi都不能设为INF。举例来说,如果xy倾斜因子设为非零,那么xlo/xhi和ylo/yhi都不能设为INF。


下面举几个建模例子,同学们多研究研究下面的例子,结合lammps手册来学习,需要的同学可以参考一下:


Example1:

#注:本模板构建石墨烯模atom_style      atomic#告诉LAMMPS你的模型中包含什么(键角,电荷还是只有原子)lattice         custom 2.4595 a1 1.00000 0 0 &                a2 0 1.73203 0 &                basis 0 0 0  &                basis 0.5 0.16666666666666666 0 &                basis 0.5 0.5 0 &                basis 0 0.6666666666666666 0#定义原子排列规则region        box block  -210 210 -240 240 -5 200 units lattice#划分盒子区域create_box    1 box#定义盒子内包含的原子种数region          graphene block  -210 210 -240 240 0 0.1 units lattice#在盒子内划出一个区域create_atoms    1 region graphene#按照定义好的原子排列规则在graphene区域中填充类型1的原子mass            * 12.011#定义原子质量write_data      struc.lmp#输出LAMMPS可以读取的data文件

Example2: 

SiC-3C

atom_style atomic    

lattice custom 4.36 &

a1 1.0 0.0 0.0 &

a2 0.0 1.0 0.0 &

a3 0.0 0.0 1.0 &

basis 0.0 0.0 0.0 &

basis 0.5 0.0 0.5 &

basis 0.0 0.5 0.5 &

basis 0.5 0.5 0.0 &

basis 0.25 0.25 0.25 &

basis 0.75 0.25 0.75 &

basis 0.25 0.75 0.75 &

basis 0.75 0.75 0.25


region        box block 0 1 0 1 0 1 units lattice


create_box   2 box

create_atoms 2 box basis 1 2 basis 2 2 basis 3 2 basis 4 2 &

                  basis 5 1 basis 6 1  basis 7 1  basis 8 1

Example3:

SiC - 2H

variable alattice equal 3.079

variable basis2 equal 3/8

lattice hcp ${alattice}


region        box block 0 1 0 1 0 1

create_box      2 box

create_atoms 1 region box basis 1 1

lattice hcp ${alattice} origin 0 0 ${basis2}

create_atoms 2 region box basis 1 2

Example4:

SiC - 4H

variable a equal 3.073000

variable b equal $((v_a*sqrt(3)))

variable c equal 10.053000


lattice custom  1.0     &

       a1      $a      0.0     0.0     &

       a2      0.0     $b      0.0     &

       a3      0.0     0.0     $c      &

       basis   0.0    0.0    $((1.889964/v_c)) &

       basis   $((1.536500/v_a))    $((2.661296/v_b))    $((1.889964/v_c))     &

       basis   0.0    0.0    $((6.916464/v_c)) &

       basis   $((1.536500/v_a))    $((2.661296/v_b))    $((6.916464/v_c))     &

       basis   0.0    $((1.774197/v_b))    $((4.403214/v_c))   &

       basis   $((1.536500/v_a))    $((0.887099/v_b))    $((9.429714/v_c))     &

       basis   $((1.536500/v_a))    $((4.43549/v_b))     $((4.403214/v_c))     &

       basis   0.0     $((3.5484/v_b))  $((9.429714/v_c))      &

       basis    0.0    0.0    0.0      &

       basis    $((1.536500/v_a))    $((2.661296/v_b))    0.0  &

       basis    0.0    0.0    $((5.026500/v_c))        &

       basis    $((1.536500/v_a))    $((2.661296/v_b))    $((5.026500/v_c))    &

       basis    0.0    $((1.774197/v_b))    $((2.513250/v_c))  &

       basis    $((1.536500/v_a))    $((0.887099/v_b))    $((7.539750/v_c))    &

       basis    $((1.536500/v_a))    $((4.435493/v_b))    $((2.513250/v_c))    &

       basis    0    $((3.548395/v_b))    $((7.539750/v_c))


region        sim block 0 1 0 1 0 1 units lattice


create_box      2 sim

create_atoms    1 box           &

       basis   1       2       &

       basis   2       2       &

       basis   3       2       &

       basis   4       2       &

       basis   5       2       &

       basis   6       2       &

       basis   7       2       &

       basis   8       2


Example5:

SnO2

#Sn (atom type 1), O (atom type 2)

variable pos1 equal 0.193448055

variable pos2 equal 0.806551945

variable pos3 equal 0.693448055

variable pos4 equal 0.306551945

variable a equal 4.832336

variable b equal ${a}

variable c equal 3.243221

lattice custom  1.0     &

       a1      $a      0.0     0.0     &

       a2      0.0     $b      0.0     &

       a3      0.0     0.0     $c      &

       basis 0 0 0 &

       basis 0.5 0.5 0.5 &

       basis ${pos1} ${pos2} 0.5 &

       basis ${pos2} ${pos1} 0.5 &

       basis ${pos3} ${pos3} 0 &

       basis ${pos4} ${pos4} 0 &


region        sim block 0 1 0 1 0 1 units lattice

create_box      2 sim

create_atoms    1 box           &

       basis   3       2       &

       basis   4       2       &

       basis   5       2       &

       basis   6       2      


Example6:

Ti - Omega

lattice custom 4.6064061 &

       a1 0.5 -0.866025 0 &

       a2 0.5 0.866025 0 &

       a3 0 0 0.611 &

       basis 0 0 0 &

       basis 0.3333333 0.66666666 0.5 &

       basis 0.6666666 0.3333333 0.5


region        sim block 0 1 0 1 0 1 units lattice


create_box      1 sim

create_atoms    1 box


Example7:

C - Graphene (2D)

lattice custom 2.4595 a1 1 0 0 a2 0 1.73203 0 &

       basis 0 0 0  &

       basis 0.5 0.16666 0 &

       basis 0.5 0.5 0 &

       basis 0 0.66666 0


region        sim block 0 2 0 3 0 0.1 units lattice


create_box      1 sim

create_atoms    1 box





https://blog.sciencenet.cn/blog-3437453-1300245.html

上一篇:[转载]原始LAMMPS分布 "in.crack "示例
下一篇:Al 拉伸lammps脚本
收藏 IP: 218.95.214.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-20 16:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部