基于 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
)
您应该看到类似以下内容:
生成的 dataframe 应包含以下列:
要获取优化后的结构(如果已收敛),请执行以下操作:
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 结构的势能和力。
从 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)外,items 是 CrystalStructure 对象的列表
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.