6个版本

0.3.2 2020年4月17日
0.3.1 2019年5月27日
0.2.0 2018年1月22日
0.1.1 2018年1月9日

#343 in 模拟

每月 41次下载
用于 6 个Crates(4个直接使用)

MIT/Apache

105KB
1.5K SLoC

Crates.io Docs.rs Build Status

POSACAR格式的Rust

[dependencies]
vasp-poscar = "0.3.2"

用于表示晶体化合物的POSCAR文件格式的解析器和打印器。

POSCAR主要是维也纳从头算模拟包(VASP)使用的输入文件格式,它已经得到了与晶体学和分子动力学相关的广泛软件的良好支持。

示例

示例文件

cubic diamond
  3.7
    0.5 0.5 0.0
    0.0 0.5 0.5
    0.5 0.0 0.5
   C
   2
Direct
  0.0 0.0 0.0
  0.25 0.25 0.25

示例代码

extern crate vasp_poscar;

use vasp_poscar::{Poscar, ScaleLine};

// read from a BufRead instance, such as &[u8] or BufReader<File>
let file = io::BufReader::new(File::open("POSCAR")?);
let poscar = Poscar::from_reader(file)?;

// get a RawPoscar object with public fields you can freely match on and manipulate
let mut poscar = poscar.into_raw();

assert_eq!(poscar.scale, ScaleLine::Factor(3.7));

poscar.comment = "[Subject Name Here] was here".into();
poscar.scale = ScaleLine::Volume(10.0);

// Turn back into a Poscar for writing.
// Notice Poscar implements Display.
let poscar = poscar.validate()?;

print!("{}", poscar);  // default uses dtoa crate to format floats (roundtrip precision)
print!("{:>9.6}", poscar);  // you can also specify flags to format each float

关于格式的说明

整体视角

POSCAR格式主要包含两到三个关键信息

  • 一个 周期性晶格
  • 一个单位细胞中位点的 坐标
  • (从Vasp 5开始) 与位点关联的 元素符号

POSCAR中的结构在 三维 上始终是周期的。低维结构通过为非周期性方向分配一个长的周期长度 (一个“真空分离”) 来近似表示。这可以与只能表示非周期性结构的XYZ文件进行对比。

POSCAR还有一些可选部分,这些部分可能主要只由VASP本身使用

  • 速度
  • 选择动态,允许位点被约束在晶格向量的子集上移动。
  • (待办事项) ...嗯... “预测校正”。

细节

不幸的是,格式也严重缺乏规范。

有关VASP自身文档,请参阅此处:http://cms.mpi.univie.ac.at/vasp/guide/node59.html。有关文件中每个元素的目的和语义的问题,请参阅该页面。

关于格式语法的一种更完整的规范(如本crate实现)可以在doc/format.md中找到。

本crate的范围

vasp-poscar主要是一个后端crate,用于读取和写入文件格式。其目标是提供

  • 合理的错误诊断,特别关注容易犯的错误
  • 可往返的精度;当读取POSCAR时,它不会自动将比例因子吸收到晶格矩阵中,也不会将所有内容转换为它喜欢的表示形式(直接相对于笛卡尔)。这些是的决定!

vasp-poscar次要是一个crate,用于管理文件中存在的冗余数据形式。特别是

  • 获取缩放后的晶格和真实的笛卡尔坐标
  • (待办事项)在直接和笛卡尔表示之间转换
  • (待办事项)根据比例因子和晶格进行操作(例如,在比例和体积之间切换,或将比例因子吸收到晶格中)

vasp-poscar实际上并不是一个用于做科学的crate。它永远不会提供对称性分析、原始结构搜索、超单元构建、位置扰动或平面切割等功能。这些事情根本不是它的职责。

预期是,由vasp-poscar读取的数据可以用来构建一个更通用且更具意见的Structure类型的实例——该类型由另一个crate实现。(当然,如果您正在设计此类类型,我们邀请您依赖这个crate作为解析后端!)

许可证

根据您的要求,许可为以下之一

由您选择。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证定义,都应双许可如上所述,没有任何额外条款或条件。

依赖项

~105KB