news 2026/6/15 22:06:58

批量生成超胞脚本 gen-sc.py

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
批量生成超胞脚本 gen-sc.py

gen-sc.py

依赖 pymagent
pip install pymagent
or
conda install pymagent

#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ generate_supercells.py - 仅支持三位数字超胞尺寸:231 -> 2x3x1 - 支持从 size.txt 读取 - 默认原胞文件:111.vasp - 输出命名:N1N2N3.vasp - 若发现同名文件:提示 [DUPLICATE] 并跳过,绝不覆盖 """ import argparse import os import sys from typing import Tuple, Set from pymatgen.core import Structure from pymatgen.io.vasp import Poscar def parse_size_3digit(s: str) -> Tuple[int, int, int]: s = s.strip() if not (s.isdigit() and len(s) == 3): raise ValueError(f"非法超胞尺寸 '{s}'(必须是三位数字,如 231)") return int(s[0]), int(s[1]), int(s[2]) def read_size_file(fname: str): sizes = [] with open(fname, "r", encoding="utf-8") as f: for ln, line in enumerate(f, 1): line = line.strip() if not line or line.startswith("#"): continue try: sizes.append(parse_size_3digit(line)) except ValueError as e: raise ValueError(f"{fname}:{ln} {e}") return sizes def main(): parser = argparse.ArgumentParser( description="用 pymatgen 批量生成超胞(尺寸格式:231)" ) parser.add_argument( "input", nargs="?", default="111.vasp", help="原胞 VASP 文件(默认:111.vasp)", ) parser.add_argument( "--sizes", nargs="*", default=[], help="命令行指定超胞尺寸,如:211 221 231", ) parser.add_argument( "--size-file", default="size.txt", help="超胞尺寸文件(默认:size.txt)", ) parser.add_argument( "-o", "--outdir", default=".", help="输出目录(默认当前目录)", ) args = parser.parse_args() # ---------- 检查原胞 ---------- if not os.path.isfile(args.input): print(f"[ERROR] 找不到原胞文件:{args.input}", file=sys.stderr) return 2 # ---------- 收集尺寸 ---------- sizes: Set[Tuple[int, int, int]] = set() if os.path.isfile(args.size_file): try: sizes.update(read_size_file(args.size_file)) except ValueError as e: print(f"[ERROR] {e}", file=sys.stderr) return 2 for s in args.sizes: try: sizes.add(parse_size_3digit(s)) except ValueError as e: print(f"[ERROR] {e}", file=sys.stderr) return 2 if not sizes: print("[ERROR] 未指定任何超胞尺寸(size.txt 和 --sizes 均为空)", file=sys.stderr) return 2 # ---------- 读取结构 ---------- base = Structure.from_file(args.input) os.makedirs(args.outdir, exist_ok=True) # ---------- 生成 ---------- written = 0 skipped = 0 for a, b, c in sorted(sizes): outname = f"{a}{b}{c}.vasp" outpath = os.path.join(args.outdir, outname) if os.path.exists(outpath): print(f"[DUPLICATE] {outname} 已存在,跳过,不覆盖") skipped += 1 continue sc = base.copy() sc.make_supercell([a, b, c]) Poscar(sc).write_file(outpath) print(f"[OK] 生成 {outname}") written += 1 print(f"\n完成:生成 {written} 个,跳过重复 {skipped} 个") return 0 if __name__ == "__main__": raise SystemExit(main())

使用

将超胞尺寸写在文件中(每行一个尺寸)

python gen-SC.py --size-file size.txt

在命令中指定超胞尺寸

python gen-SC.py --sizes 222 332 321 ...

默认原胞的名称为 111.vasp
如果名称为其他,使用
python generate_supercells.py 原胞文件名称.vasp --size-file size.txt

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:49:18

BLE设备通信劫持自动化测试框架

一、框架设计背景与目标 随着物联网设备普及,BLE通信劫持风险显著提升,攻击者可利用未加密传输、服务伪造等漏洞实施中间人攻击或设备控制。传统手动测试难以覆盖动态劫持场景,亟需构建自动化框架实现: 漏洞系统性检测&#xff1…

作者头像 李华
网站建设 2026/6/15 11:41:25

3个步骤掌握语音转文字精准对齐:WhisperX时间戳优化指南

3个步骤掌握语音转文字精准对齐:WhisperX时间戳优化指南 【免费下载链接】whisperX m-bain/whisperX: 是一个用于实现语音识别和语音合成的 JavaScript 库。适合在需要进行语音识别和语音合成的网页中使用。特点是提供了一种简单、易用的 API,支持多种语…

作者头像 李华
网站建设 2026/6/15 11:42:30

零基础入门YOLO11,手把手教你快速搭建目标检测项目

零基础入门YOLO11,手把手教你快速搭建目标检测项目 你是不是也遇到过这些情况: 想试试目标检测,但卡在环境配置上——装Anaconda、建虚拟环境、配CUDA、装PyTorch、下ultralytics……每一步都可能报错; 下载了YOLO相关代码&#…

作者头像 李华
网站建设 2026/6/15 11:42:31

如何通过AI技术高效获取B站硬核会员资格

如何通过AI技术高效获取B站硬核会员资格 【免费下载链接】bili-hardcore bilibili 硬核会员 AI 自动答题,直接调用 B 站 API,非 OCR 实现 项目地址: https://gitcode.com/gh_mirrors/bi/bili-hardcore 副标题:基于本地大模型的智能答题…

作者头像 李华