Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
ABACUS 使用教程|如何转换 STRU 文件
ABACUS
ABACUS使用教程
中文
ABACUSABACUS使用教程中文
MileAway
ABACUS 兴趣小组
发布于 2023-08-23
推荐镜像 :ABACUS:3.3.2-user-guide
推荐机型 :c2_m4_cpu
赞 7
14
20
ABACUS-Series-STRU(v2)

ABACUS 使用教程|如何转换 STRU 文件

代码
文本
[ ]
'''@ 作者: 赵天琦'''
代码
文本

经常有同学问 CIF 文件怎么转 STRU, POSCAR 怎么转 STRU,以及反过来又怎么做?这个文档就来回答这个问题。

总的回答是:我们推荐使用Python ASE-ABACUS 接口来做。具体的操作步骤和例子如下:

1 安装 python ase-abacus 模块

(在本篇 Notebook 镜像中已安装,可跳过)

%%bash
# 安装 ase-abacus
git clone https://gitlab.com/1041176461/ase-abacus.git
cd ase-abacus
python3 setup.py install
代码
文本

2 设置环境变量(可选)

代码
文本

ABACUS支持两种基组PW, LCAO。赝势和轨道文件的存放路径可以通过环境变量设置,分别为:ABACUS_PP_PATH 和 ABACUS_ORBITAL_PATH,设置方法如下:

%%bash
# Set up the environment for ABACUS
PP=${HOME}/pseudopotentials  # 赝势文件路径
ORB=${HOME}/orbitals  # 轨道文件路径
export ABACUS_PP_PATH=${PP}  # 设置环境变量
export ABACUS_ORBITAL_PATH=${ORB}  # 设置环境变量
代码
文本

PW 赝势计算只需要设置 ABACUS_PP_PATH 。 LCAO 赝势需要两个都设置:ABACUS_PP_PATH 和 ABACUS_ORBITAL_PATH 。

代码
文本

3 加入 ABACUS 计算器的方法

在 Python 脚本中引入 ABACUS 接口的方式为:

from ase.calculators.abacus import Abacus
代码
文本

4 STRU 格式转化例子

代码
文本

在示例数据集中,我们为你准备好了格式转换的示例文件。我们可以直接访问:

代码
文本
[1]
! tree /bohr/abacus-stru-q28v/v2/
/bohr/abacus-stru-q28v/v2/
└── ABACUS_STRU
    ├── CIF2STRU
    │   └── AMS_DATA-92.cif
    ├── POSCAR2STRU
    │   └── POSCAR
    ├── STRU2CIF
    │   └── STRU
    └── STRU2POSCAR
        └── STRU

5 directories, 4 files
代码
文本

出于安全考虑,我们没有数据集所在文件夹的写入权限,因此我们将其复制到 /data/ 目录下:

代码
文本
[2]
! cp -nr /bohr/ /data/
代码
文本

4.1 CIF 转 STRU

*.cif 是常见的晶体结构文件,这里提供了一种 cif 文件转 STRU 文件的方法:

代码
文本
[3]
from ase.io import read, write
import os

parent_path = os.path.join("/", "data", "bohr", "abacus-stru-q28v", "v2", "ABACUS_STRU")

cs_dir = os.path.join(parent_path, "CIF2STRU")

# CIF文件路径
cs_vasp = os.path.join(cs_dir, "AMS_DATA-92.cif")

# 读取CIF文件
cs_atoms = read(cs_vasp, format="cif")

# 输出的STRU文件路径
cs_stru = os.path.join(cs_dir, "STRU")

# 赝势文件路径
pp = {"Si": "Si.PD04.PBE.UPF", "O": "O.upf"}

# 基组文件路径
basis = {"Si": "Si_gga_10au_100Ry_3s3p2d.orb", "O": "O.orb"}

# 输出STRU文件
write(cs_stru, cs_atoms, format="abacus", pp=pp, basis=basis)
代码
文本

可以看到,我们的 CIF2STRU 文件夹下除了 cif 文件外,生成了相应的 STRU 文件:

代码
文本
[4]
! tree /data/bohr/abacus-stru-q28v/v2/ABACUS_STRU
/data/bohr/abacus-stru-q28v/v2/ABACUS_STRU
├── CIF2STRU
│   ├── AMS_DATA-92.cif
│   └── STRU
├── POSCAR2STRU
│   └── POSCAR
├── STRU2CIF
│   └── STRU
└── STRU2POSCAR
    └── STRU

4 directories, 5 files
代码
文本

4.2 STRU 转 CIF

代码
文本
[ ]
from ase.io import read, write
import os

cs_dir = os.path.join(parent_path, "STRU2CIF")
cs_stru = os.path.join(cs_dir, 'STRU')
cs_atoms= read( cs_stru, format='abacus')
cs_vasp = os.path.join(cs_dir, 'STRU.cif')
write(cs_vasp, cs_atoms, format='cif')
代码
文本

4.3 POSCAR 转 STRU

POSCAR 是常见第一性原理计算软件 VASP 的结构文件,这里提供了一种 POSCAR 转 STRU 文件的方法:

代码
文本
[ ]
from ase.io import read, write
import os

cs_dir = os.path.join(parent_path, "POSCAR2STRU")
cs_vasp = os.path.join(cs_dir, "POSCAR")
cs_atoms = read(cs_vasp, format="vasp")
cs_stru = os.path.join(cs_dir, "STRU")

# # 需要设置原子磁矩时,可添加代码:
# cs_atoms.set_initial_magnetic_moments([1.0,1.0,1.0,2.0]) # 后面列表里列出每个原子的磁矩;

# # 如果需要设置每个原子每个方向的磁矩,则需要设置为二维数组:
# cs_atoms.set_initial_magnetic_moments([[1.0,1.0,1.0],
# [1.0,1.0,2.0],
# [1.0,1.0,3.0],
# [1.0,1.0,4.0]])

pp = {"Al": "Al.PD04.PBE.UPF"}
basis = {"Al": "Al_gga_10au_100Ry_3s3p2d.orb"}
write(cs_stru, cs_atoms, format="abacus", pp=pp, basis=basis)

代码
文本

4.4 STRU 转 POSCAR

代码
文本
[ ]
from ase.io import read, write
from pathlib import Path
from ase.calculators.abacus import Abacus

cs_dir = os.path.join(parent_path, "STRU2POSCAR")
cs_stru = os.path.join(cs_dir, 'STRU')
cs_atoms= read(cs_stru, format='abacus')
cs_vasp = os.path.join(cs_dir, 'POSCAR')
write(cs_vasp, cs_atoms, format='vasp')
代码
文本
ABACUS
ABACUS使用教程
中文
ABACUSABACUS使用教程中文
已赞7
本文被以下合集收录
ABACUS
bohr9d1500
更新于 2024-05-18
14 篇5 人关注
别人的笔记
bohrce9030
更新于 2024-05-23
4 篇0 人关注
推荐阅读
公开
用ABACUS-ASE自动产生能带路径
ABACUSABACUS使用教程中文
ABACUSABACUS使用教程中文
shimengchao@dp.tech
发布于 2023-08-23
1 赞4 转存文件
公开
玩转电子轨道可视化
ABACUSpython包可视化
ABACUSpython包可视化
jie
发布于 2024-03-04
6 赞4 转存文件
评论
 经常有同学问 CIF 文件怎么转 STR...

zhaojianguo

03-18 03:56
python3 安装报错,说numpy版本太低了。用pip安装的ase识别不了abacus?大佬?

孙琳

08-12 04:54
请问除了CIF文件,非晶体比如溶液体系的什么格式的文件可以转换成STRU文件
评论
 ## 3 加入 ABACUS 计算器的方...

SharpLonde

2023-09-09
有哪些镜像已经安装ase-abacus模块?

名字

04-27 21:59
切换到python的环境中,在linux中输入python,之后再输入这个脚本。
评论
 from ase.io import r...

名字

04-28 21:08
请教下,怎么把dirct转换成笛卡尔坐标
评论