预存
    Document
    当前位置:文库百科文章详情
    ASE原子模拟环境入门之操作原子
    来源: 时间:2022-12-16 16:36:30 浏览:3515次

    银吸附在镍板上

    我们建立一个由四个Ni原子组成的单层平板和一个Ag吸附原子构成的模型。

    定义原子板

    
    

    >>> from math import sqrt

    >>> from ase import Atoms

    >>> a = 3.55

    >>> atoms = Atoms('Ni4',

    ...               cell=[sqrt(2) * a, sqrt(2) * a, 1.0, 90, 90, 120],

    ...               pbc=(1, 1, 0),

    ...               scaled_positions=[(0, 0, 0),

    ...                                 (0.5, 0, 0),

    ...                                 (0, 0.5, 0),

    ...                                 (0.5, 0.5, 0)])

    >>> atoms.center(vacuum=5.0, axis=2)

    看看晶胞和原子的位置:

    
    

    >>> atoms.cell

    Cell([[5.020458146424487, 0.0, 0.0], [-2.5102290732122423, 4.347844293440141, 0.0], [0.0, 0.0, 10.0]])

    >>> atoms.positions

    array([[ 0.        ,  0.        ,  5.        ],

           [ 2.51022907,  0.        ,  5.        ],

           [-1.25511454,  2.17392215,  5.        ],

           [ 1.25511454,  2.17392215,  5.        ]])

    >>> atoms[0]

    Atom('Ni', [0.0, 0.0, 5.0], index=0)

    将这个结构写入一个文件,并通过调用ase.gui来绘制整个系统:

    >>> from ase.visualize import view

    >>> atoms.write('slab.xyz')

    >>> view(atoms)

    在查看器(ase  gui)中,可以在所有三个方向上重复单元格(使用Repeat ‣ View window)。从命令行,使用ase  gui -r 3,3,2 slab.xyz

    我们现在在一个高度为h=1.9Å的三原子中心位点添加一个吸附原子 :

    
    

    >>>h = 1.9

    >>> relative = (1 / 6, 1 / 6, 0.5)

    >>> absolute = np.dot(relative, atoms.cell) + (0, 0, h)

    >>> atoms.append('Ag')

    >>> atoms.positions[-1] = absolute

    现在的结构是这样的:

    
    

    view(atoms)




    构造界面


    现在,我们用Ni(111)和水做一个界面。首先我们需要一层水。在这个脚本WL.py中构建了一层水,并保存在文件WL.traj中。

    WL.py

    
    

    import numpy as np

    from ase import Atoms

    p = np.array(

       [[0.27802511, -0.07732213, 13.46649107],

        [0.91833251, -1.02565868, 13.41456626],

        [0.91865997, 0.87076761, 13.41228287],

        [1.85572027, 2.37336781, 13.56440907],

        [3.13987926, 2.3633134, 13.4327577],

        [1.77566079, 2.37150862, 14.66528237],

        [4.52240322, 2.35264513, 13.37435864],

        [5.16892729, 1.40357034, 13.42661052],

        [5.15567324, 3.30068395, 13.4305779],

        [6.10183518, -0.0738656, 13.27945071],

        [7.3856151, -0.07438536, 13.40814585],

        [6.01881192, -0.08627583, 12.1789428]])

    c = np.array([[8.490373, 0., 0.],

                 [0., 4.901919, 0.],

                 [0., 0., 26.93236]])

    W = Atoms('4(OH2)', positions=p, cell=c, pbc=[1, 1, 0])

    W.write('WL.traj')

    现在运行WL.py脚本,从traj文件中读取原子对象:

    
    

    from ase.io import read

    >>> W = read('WL.traj')

    使用视图的看看结构

    我们看看这个单位晶胞

    
    

    W.cell

    Cell([8.490373, 4.901919, 26.93236])

    我们需要一个镍(111)平板,它与水尽可能接近。一个2 × 4正交的fcc111 超晶胞应该足够好了。

    
    

    >>> from ase.build import fcc111

    >>> slab = fcc111('Ni', size=[2, 4, 3], a=3.55, orthogonal=True)

    
    

    slab.cell

    Cell([5.020458146424487, 8.695688586880282, 0.0])

    看看这两个单元晶胞,我们可以看到,如果我们把其中一个单元晶胞在平面上旋转90度,它们的匹配度相差大约2%。让我们旋转单元晶胞:

    W.cell = [W.cell[1, 1], W.cell[0, 0], 0.0]

    用rotate()旋转分子:

    >>> W.rotate(90, 'z', center=(0, 0, 0))

    再将原子放回到晶胞里

    >>> W.wrap()

    wrap()方法仅在启用周期性边界条件时有效。我们在Ni(111)和水之间有2%的晶格失配,所以我们在平面上缩放水的晶胞以匹配平板的晶胞。参数scale_atoms=True表示原子位置应该随单元格缩放。默认值是scale_atoms=False,表示单元格更改时笛卡尔坐标保持不变。

    
    

    >>> W.set_cell(slab.cell, scale_atoms=True)

    >>> zmin = W.positions[:, 2].min()

    >>> zmax = slab.positions[:, 2].max()

    >>> W.positions += (0, 0, zmax - zmin + 1.5)

    最后我们将水复制到平板上:

    >>> interface = slab + W

    >>> interface.center(vacuum=6, axis=2)

    >>> interface.write('NiH2O.traj')

    两个atoms对象的求和,会将两个atoms对象的原子位置都包括进来,而使用第一个atoms对象的超晶胞。


    计算狗·模拟计算

    评论 / 文明上网理性发言
    12条评论
    全部评论 / 我的评论
    最热 /  最新
    全部 3小时前 四川
    文字是人类用符号记录表达信息以传之久远的方式和工具。现代文字大多是记录语言的工具。人类往往先有口头的语言后产生书面文字,很多小语种,有语言但没有文字。文字的不同体现了国家和民族的书面表达的方式和思维不同。文字使人类进入有历史记录的文明社会。
    点赞12
    回复
    全部
    查看更多评论
    相关文章

    基础理论丨一文了解XPS(概念、定性定量分析、分析方法、谱线结构)

    2020-05-03

    手把手教你用ChemDraw 画化学结构式:基础篇

    2021-06-19

    晶体结构可视化软件 VESTA使用教程(下篇)

    2021-01-22

    【科研干货】电化学表征:循环伏安法详解(上)

    2019-10-25

    【科研干货】电化学表征:循环伏安法详解(下)

    2019-10-25

    Zeta电位的基本理论、测试方法和应用

    2020-08-24

    项目推荐/Project
    第一性原理-声子谱

    第一性原理-声子谱

    第一性原理-吸附能

    第一性原理-吸附能

    热门文章/popular

    基础理论丨一文了解XPS(概念、定性定量分析、分析方法、谱线结构)

    手把手教你用ChemDraw 画化学结构式:基础篇

    晶体结构可视化软件 VESTA使用教程(下篇)

    【科研干货】电化学表征:循环伏安法详解(上)

    电化学实验基础之电化学工作站篇 (二)三电极和两电极体系的搭建 和测试

    【科研干货】电化学表征:循环伏安法详解(下)

    微信扫码分享文章