ITADN
deepmodeling/openlam
deepmodeling/openlam · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

基于 ASE 构建的晶体结构优化工具

安装

克隆此项目后,通过以下方式安装 lam-crystal-philately 及其常用依赖项(包括工作流所需的依赖项)

pip install .

要安装 DP 的额外依赖项

pip install ".[dp]"

或 mace

pip install ".[mace]"

通过以下方式下载用于结构优化的最新 DP 模型

wget https://bohrium-api.dp.tech/ds-dl/lam-crystal-model-01oe-v4.zip
unzip lam-crystal-model-01oe-v4.zip

结构优化

Python API

from pathlib import Path
from lam_optimize.main import relax_run
from lam_optimize.relaxer import Relaxer

cif_folder_path = Path("/cifs")
relaxer = Relaxer("mace") # using default mace model
# relaxer = Relaxer(Path("dp.pth")) # using DP model
res_df = relax_run(
    cif_folder_path,
    relaxer
)

您应该看到类似以下内容:

image

生成的 dataframe 应包含以下列:

image

要获取优化后的结构(如果已收敛),请执行以下操作:

from pymatgen.core import Structure

Structure.from_dict(df['final_structure'][0])

命令行工具

使用 DP 模型优化结构

lam-opt relax -i examples/data -m <path-to-DP-model>

或使用 mace

lam-opt relax -i examples/data -t mace

提交用于在并行环境下优化结构的工作流

lam-opt submit examples/wf.json -i part0 part1 -m <path-to-DP-model>

其中 -i 之后的参数应为包含 cifs 的目录列表。

单点评估

from lam_optimize.main import single_point

single_point(Path(fpth), relaxer)

这返回给定 .cif 结构的势能和力。

image

从 OpenLAM 数据库查询晶体结构

设置环境变量 BOHRIUM_ACCESS_KEY,该变量由 https://bohrium.dp.tech/settings/user 生成

export BOHRIUM_ACCESS_KEY=xxx

使用 Python API 从 OpenLAM 数据库查询晶体结构(方法 query_by_page 已弃用!请改用 query_by_offset。)

from lam_optimize import CrystalStructure
data = CrystalStructure.query_by_offset()

方法 query_by_offset 接受以下参数作为查询条件

formula: Optional[str] = None
min_energy: Optional[float] = None
max_energy: Optional[float] = None
min_submission_time: Optional[datetime.datetime] = None
max_submission_time: Optional[datetime.datetime] = None
offset: int = 0
limit: int = 10

返回数据的结构如下

{'nextStartId': 18, 'items': [<lam_optimize.db.CrystalStructure object at 0x7fbd6832e520>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d04aaf0>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d11c610>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d11cd60>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d21a130>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d21a4c0>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d21a850>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d21abe0>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d21af70>, <lam_optimize.db.CrystalStructure object at 0x7fbd6d21d340>]}

除了 nextStartId(用作下一次查询中的 offset)外,itemsCrystalStructure 对象的列表

class CrystalStructure:
    formula: str
    structure: pymatgen.core.Structure
    energy: float
    submission_time: datetime.datetime

还提供了合并分页结果的方法 query

structures = CrystalStructure.query(formula="Sr2YSbO6")

它返回一个 CrystalStructure 对象的列表。

注意:在没有查询条件的情况下调用非分页方法会极其缓慢。

从 OpenLAM 数据库查询凸包

设置环境变量 BOHRIUM_ACCESS_KEY,该变量由 https://bohrium.dp.tech/settings/user 生成

export BOHRIUM_ACCESS_KEY=xxx

使用 Python API 从 OpenLAM 数据库按成分查询凸包

from lam_optimize.utils import query_hull_by_composition
hull = query_hull_by_composition(["Ac", "Ag", "Bi", "As", "Rh", "Cl", "O"])

您可以使用凸包计算高于凸包的能

from lam_optimize.utils import get_e_above_hull
ehull = get_e_above_hull(structure, hull, 0.123)

在出版物中引用 OpenLAM 数据库时,请引用 预印本

Anyang Peng, Xinzijian Liu, Ming-Yu Guo, Linfeng Zhang, Han Wang. "The OpenLAM Challenges." arXiv, January 20, 2025. https://doi.org/10.48550/arXiv.2501.16358.