python ovito模块计算某一类原子的MSD均方位移

 此文章为用python ovito模块计算某一类原子的MSD

ovito.modifiers.CalculateDisplacementsModifier 基于ovito.pipline.ReferenceConfigurationModifier

ovito GUI界面 Affine mapping of simulation cell 三个选项 Off,To reference, To current分别对应
Off          --> ReferenceConfigurationModifier.AffineMapping.Off
To reference --> ReferenceConfigurationModifier.AffineMapping.TOReference
To current   --> ReferenceConfigurationModifier.AffineMapping.ToCurrent

Default: ReferenceConfigurationModifier.AffineMapping.Off

即下图红框中所示:

ovito GUI 界面 Use minimum image convention对应:minimum_image_convention
若GUI界面勾选,则为:minimum_image_convention=True,
若不勾选则为:minimum_image_convention=FalseDefault: True

ovito GUI界面 Reference animation frame 选项下: 1.Constant reference configuration
                                                2.relative to current frame
use_frame_offset=False 则对应 Constant reference configuration,
使用reference_frame 设定所需要的值(Defalut值为0)
use_frame_offset=True,则对应relative to current frame,
使用frame_offset设定值(Default值为-1)

若使用relative to current frame时,使用python脚本输出文件第一帧(因为frame=0)会报错,需要从第二帧开始

ovito GUI界面Reference configuration source下External file

来自ovito 手册关于python部分:

ovito.pipline.ReferenceConfigurationModifier
# The modifier that requires a reference config:
mod = CalculateDisplacementsModifier()
 
# Load the reference config from a separate input file.
mod.reference = FileSource() # Note: You may have to import FileSource from the ovito.pipeline module. 
mod.reference.load('input/simulation.0.dump')

from ovito.io import import_file, export_file
from ovito.modifiers import CalculateDisplacementsModifier, SelectTypeModifier, DeleteSelectedModifier
from ovito.pipeline import ReferenceConfigurationModifier

import numpy

pipeline = import_file("dump.shear1")

# CalculateDisplacementsModifier 是基于 ovito.pipline.ReferenceConfigurationModifier

# 在ovito GUI界面 Affine mapping of simulation cell 三个选项 Off,To reference, To current分别对应
# ReferenceConfigurationModifier.AffineMapping.Off
# ReferenceConfigurationModifier.AffineMapping.TOReference
# ReferenceConfigurationModifier.AffineMapping.ToCurrent
# Default: ReferenceConfigurationModifier.AffineMapping.Off

# Use minimum image convention对应:minimum_image_convention
# 若GUI界面勾选,则为True,若不勾选则为False
# Default:True

# 关于Reference animation frame 选项下 1.Constant reference configuration
#                                    2.relative to current frame
# use_frame_offset 若为False(Default值)则为Constant reference configuration,
# 使用reference_frame 设定所需要的值(Defalut值为0)
# 若为True,则为relative to current frame,使用frame_offset设定值(Default值为-1)
# 若使用relative to current frame时,输出文件第一帧(因为frame=0)会报错,需要从第二帧开始

# 若使用Reference configuration source下External file
'''
# The modifier that requires a reference config:
mod = CalculateDisplacementsModifier()
 
# Load the reference config from a separate input file.
mod.reference = FileSource() # Note: You may have to import FileSource from the ovito.pipeline module. 
mod.reference.load('input/simulation.0.dump')
'''

mod = CalculateDisplacementsModifier(
    affine_mapping=ReferenceConfigurationModifier.AffineMapping.Off,
    minimum_image_convention=True,
    use_frame_offset=True
)

# 下列为选择所需要的原子种类
sat = SelectTypeModifier(property="Particle Type",
                         types={'Type 1', 'Type 2', 'Type 3', 'Type 4', 'Type 5', 'Type 6', 'Type 7', 'Type 8'})
pipeline.modifiers.append(sat)

# 删除所勾选的原子种类,剩下所需要计算的原子种类
pipeline.modifiers.append(DeleteSelectedModifier())

pipeline.modifiers.append(mod)


# ovito python手册 Code examples-->Example M1
def calculate_msd(frame, data):
    displacement_magnitudes = data.particles["Displacement Magnitude"]
    print(displacement_magnitudes[0])
    msd = numpy.sum(displacement_magnitudes ** 2) / len(displacement_magnitudes)
    data.attributes["MSD"] = msd


pipeline.modifiers.append(calculate_msd)

# 对输出文件更为精细的控制可通过 关键词: start_frame, end_frame, every_nth_frame实现
# ovito python手册中ovito.io下export_file()
export_file(pipeline, "output.txt", format="txt/attr", columns=["Timestep", "MSD"],
            multiple_frames=True, start_frame=1)


                
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值