此文章为用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=False。 Default: 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)