当前位置: 首页 > news >正文

批量生成超胞脚本 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

http://www.jsqmd.com/news/297307/

相关文章:

  • 2026年质量好的流延机设备/质子交换膜流延机厂家推荐及采购参考
  • C语言指针
  • 2026年比较好的除皱衣物护理机/蒸汽衣物护理机用户好评厂家排行
  • C语言数组
  • 2026年质量好的侧装缓冲滑轨/骑马抽缓冲滑轨行业内口碑厂家排行榜
  • 3分钟搞定抽卡记录:原神抽卡记录导出工具让你的原石花得明明白白
  • Ubuntu18.04开机自启难?测试脚本帮你搞定
  • OWASP ASVS 自动化检查清单实践指南
  • 音乐自由新纪元:突破12种加密格式的全方位解密指南
  • 3步解锁视频下载新体验:VK Video Downloader工具全攻略
  • 3步掌握零代码AI模型优化:MediaPipe Studio效率提升指南
  • ModEngine2 故障处理:7个核心问题的预防与解决方案
  • 2026年评价高的工业废气处理/陕西废气处理工程厂家最新权威实力榜
  • [Linux]学习笔记系列 -- [fs]exec - 教程
  • 2026年评价高的耐低温PET片/吸塑PET片厂家最新推荐权威榜
  • C语言枚举
  • 解锁Windows定制新境界:Windhawk个性化工具深度探索
  • 免费玩转Gemma 3:270M模型Unsloth训练教程
  • 三步打造高效知识管理系统:Light Reading Cloud的知识工作者效率解决方案
  • 4个核心技巧:用TRL强化学习实现大模型对齐与PPO优化
  • YOLOv9官方镜像使用全解析,新手避坑必备手册
  • 3大核心功能让你成为AI背景移除大师:革命性图像处理实战指南
  • 解锁边缘AI:5个维度掌握微控制器机器学习部署
  • RePKG完全掌握指南:从入门到高级应用的探索之旅
  • 如何通过AI技术高效获取B站硬核会员资格
  • 手把手教学:如何用 ms-swift 微调 Qwen2.5-7B
  • 企业级架构解决方案:现代化开发框架的深度剖析与实践验证
  • 5个高效解决方案:零基础手机视频合并完整指南
  • Axure RP 11 Mac中文界面完整解决方案:从问题诊断到性能优化的实战指南
  • 中小企业多端商城解决方案:数字化转型的高效路径