calc—_v1
This commit is contained in:
115
readme.md
115
readme.md
@@ -1,71 +1,74 @@
|
||||
# 高通量筛选
|
||||
# 高通量筛选与扩胞项目
|
||||
|
||||
## 版本
|
||||
calc
|
||||
## 环境配置需求
|
||||
|
||||
## 配置需求
|
||||
项目需要配置两个 Conda 环境,名称分别为 **screen** 和 **zeo**。
|
||||
|
||||
需要两个conda环境,名字分别为**screen**,**zeo**
|
||||
### 1. zeo 环境 (用于几何结构分析)
|
||||
* **Python**: 2
|
||||
* **核心库**: `zeo++` (需编译), `pymatgen==2018.12.12`, `numpy==1.16.6`
|
||||
* **其他**: `os`, `argparse`, `PrettyTable`, `monty`, `future`
|
||||
|
||||
### zeo
|
||||
### 2. screen 环境 (用于逻辑筛选与数据处理)
|
||||
* **Python**: 3.11.4
|
||||
* **核心库**: `pymatgen==2024.11.13`, `pandas` (新增,用于处理CSV)
|
||||
|
||||
#### 运行库需求
|
||||
## 快速开始
|
||||
|
||||
``` 2018.12.12
|
||||
python == 2
|
||||
pymatgen == 2018.12.12
|
||||
Numpy = 1.16.6
|
||||
os
|
||||
argparse = 1.4.0
|
||||
PrettyTable = 1.01
|
||||
monty = 1.0.0
|
||||
future = 1.0.0
|
||||
```
|
||||
1. **数据准备**:
|
||||
* 如果数据来源为 **Materials Project (MP)**,请将 CIF 文件放入 `data/input_pre`。
|
||||
* 如果数据来源为 **ICSD**,请直接将 CIF 文件放入 `data/input`。
|
||||
2. **运行**:
|
||||
* 确保已创建上述两个 Conda 环境。
|
||||
* 在根目录下运行自动化脚本:
|
||||
```bash
|
||||
bash main.sh
|
||||
```
|
||||
|
||||
#### zeo++软件需求
|
||||
## 处理流程详解
|
||||
|
||||
需要编译后放入python库中
|
||||
### Stage 1: 预处理与基础筛选 (Step 1)
|
||||
* **Pre-process**: 清洗数据,统一放入 `input` 文件夹。
|
||||
* **Step 1**:
|
||||
* 读取 CIF 文件,利用 `crystal_2` 库检查电荷平衡与化学式。
|
||||
* **文件重组**: 将通过筛选的文件按阴离子类型分类。
|
||||
* **新结构**: 每个材料拥有独立的文件夹(例如 `after_step1/O/141/141.cif`),便于管理后续的计算日志。
|
||||
* **Make SH**: 自动生成用于调用 Zeo++ 的 `analyze.sh` 脚本。
|
||||
|
||||
### screen
|
||||
### Stage 2: Zeo++ 计算
|
||||
* 切换至 `zeo` 环境。
|
||||
* 计算材料的孔径 (Percolation diameter)、比表面积等几何参数。
|
||||
* 结果输出为每个文件夹下的 **`log.txt`**。
|
||||
|
||||
```
|
||||
python == 3.11.4
|
||||
pymatgen == 2024.11.13
|
||||
```
|
||||
### Stage 3: 数据提取与联合筛选 (Step 2-4)
|
||||
* **数据提取 (`extract_data.py`)**:
|
||||
* 自动遍历所有文件夹中的 `log.txt`。
|
||||
* 提取关键参数:`Percolation Diameter` (Step 2), `Minimum of d` (Step 3), `Maximum Node Length` (Step 4)。
|
||||
* 结果汇总为 CSV 文件保存在 `output/` 目录下(例如 `output/O/O.csv`)。
|
||||
* **联合筛选 (`step2_4_combined.py`)**:
|
||||
* 读取 CSV 文件,根据预设的阈值(如 O: Perc>0.5, Min_d<3.0, Node>2.2)进行过滤。
|
||||
* **结果**: 将符合所有条件的材料,以**软链接**的形式汇聚到 `data/after_screening` 文件夹中。
|
||||
|
||||
## 使用说明
|
||||
---
|
||||
|
||||
如果配置的conda环境同名,运行**main.sh**即可
|
||||
## 扩胞逻辑 (Step 5 - 待后续执行)
|
||||
|
||||
当数据来源为MP时,需要将数据放在input_pre中
|
||||
目前扩胞逻辑维持原状,基于筛选后的结构进行处理。
|
||||
|
||||
如果数据来源为ICSD,仅需将数据放在input中即可
|
||||
### 算法分解
|
||||
1. **读取结构**: 解析 CIF 文件。
|
||||
2. **统计 Occupation**:
|
||||
* 将具有相同 Occupation 值的原子归为一类。
|
||||
* 生成 `Occupation_list` 字典。
|
||||
3. **计算扩大倍数**:
|
||||
* 根据 Occupation 的分子分母情况(如 0.5 对应 1/2),计算公约数。
|
||||
4. **生成结构列表**:
|
||||
* 根据分子与分母生成 `structure_list`。
|
||||
5. **对称性处理与扩胞**:
|
||||
* 根据材料结构的对称性,生成三个方向的扩胞列表 (如 `{"x":1, "y":2, "z":1}`)。
|
||||
6. **生成新文件**:
|
||||
* 结合 `structure_list` 与扩胞倍数生成最终的超胞 CIF。
|
||||
|
||||
|
||||
|
||||
# 扩胞
|
||||
## 以下为每一步的分解
|
||||
### Step1
|
||||
读取cif文件
|
||||
### Step2
|
||||
统计Occupation情况,将具有相同Occupation值的记为一类,用Occupation值作为Key创建字典,该字典的一个项为atom_serial,是一个列表,记录相同Ocupation值的原子序号
|
||||
将上述字典输入一个列表Occupation_list,字典预留分子与分母两个参数
|
||||
需要函数为
|
||||
```angular2html
|
||||
def process_cif_file(struct)
|
||||
return Occupation_list
|
||||
```
|
||||
### step3
|
||||
根据Occupation_list来计算扩大倍数\\
|
||||
首先逐一计算每个字典的分子与分母,根据key来计算,例如第一个key值为0.5,此时其对应分子为1,分母为2
|
||||
合并没一个字典,探索每一个分数的情况并求出公约数与对应的分子,更新每一个字典的值
|
||||
### step4
|
||||
根据分子与分母情况,生成structure_list,其中Occupation_list中的元素的number处的和为分子,总共个数为分母
|
||||
### step5
|
||||
根据材料结构决定对称性,对不同对称性得到不同等效情况
|
||||
根据对称性与最终扩胞生成三个方向扩胞列表,其中每个元素是字典,遵循格式为{["x":1,"y":2,"z":1]}
|
||||
### step5
|
||||
根据structure_list与Occupation_list生成新的cif并保存
|
||||
### 一些假设
|
||||
只考虑两个原子在同一位置上,暂不考虑三个原子以上的情况
|
||||
不考虑Li原子的共占位情况,对Li原子不做处理
|
||||
### 假设条件
|
||||
* 只考虑两个原子在同一位置上的共占位情况。
|
||||
* 不考虑 Li 原子的共占位情况,对 Li 原子不做处理。
|
||||
Reference in New Issue
Block a user