三亩地.
  • 首页
  • 学习日记
  • 项目实战
  • 学习方法
  • 代码技巧
  • 避坑指南
  • 调试经验
  • 实战教程
  • 编程思维
  • 资讯中心
  • 关于我们

资讯详情

深入了解每一个知识点

  • 首页
  • /
  • 资讯中心
  • /
  • 文章详情

ATAT 完全使用教程

📅 2026/8/3 3:42:52 👁️ 阅读次数 📝 编程学习
ATAT 完全使用教程

ATAT 完全使用教程

ATAT 完全使用教程

 

COMPUTATIONAL MATERIALS SCIENCE

ATAT 完全使用教程

 基于 v3.36 官方文档与示例

本书是一本面向第一次接触 ATAT 的研究者的完整教程。不同于文件罗列或源码索引,本书按照学习 ATAT 的自然流程组织内容:从"ATAT是什么"出发,逐步深入到 Cluster Expansion 原理、SQS 建模、Monte Carlo 模拟、DFT 接口,最终到达科研实战。每个知识点都说明是什么、为什么、什么时候用、怎么用,形成完整的学习闭环。所有内容基于 ATAT v3.36 官方文档和示例的理解整理,80% 分析解释 + 20% 命令引用。

📑 目录

本书面向第一次接触 ATAT 的研究者,从零开始讲解 ATAT 的安装、原理、工作流程和科研实战。

所有内容基于 ATAT v3.36 官方文档和示例理解整理,不是文件罗列,而是学习路径。

第一章 · ATAT是什么?—— 合金理论自动化工具包概览

第二章 · ATAT安装 —— 从编译到环境配置

第三章 · ATAT目录结构 —— 快速了解软件体系

第四章 · Cluster Expansion 原理 —— 从DFT到合金热力学

第五章 · 完整案例:Cu-Au合金 —— 从晶格到相图

第六章 · SQS 特殊准随机结构 —— 随机固溶体建模

第七章 · Monte Carlo 模拟 —— 有限温度热力学

第八章 · ATAT与VASP接口 —— DFT计算自动化

第九章 · 命令大全 —— 按功能分类的程序速查

第十章 · 示例文件总结 —— 每个example学什么

第十一章 · 科研实战案例 —— 高熵合金/催化/相图

第十二章 · ATAT最佳实践 —— 经验与技巧

第十三章 · 常见错误与解决方案 —— 踩坑指南

 


第一章 · ATAT是什么?—— 合金理论自动化工具包

核心概念

ATAT(Alloy-Theoretic Automated Toolkit)是由 Axel van de Walle 开发的合金理论计算自动化工具包。

它将第一性原理(DFT)计算与统计力学方法相结合,实现从电子结构到合金相图的全自动多尺度模拟。

1.1 ATAT 能解决什么问题?

在材料科学中,我们经常需要回答这些问题:

• 合金的相图是什么样的?在哪個温度下会发生相变?

• 有序-无序转变的温度是多少?

• 掺杂元素在合金中如何分布?是均匀分散还是偏聚?

• 高熵合金的短程序(SRO)如何影响力学性能?

• 催化剂的表面偏析行为?

 

如果只用 DFT 计算,每计算一个构型就需要数小时到数天,而合金的可能构型数量随原子数指数增长。

ATAT 通过 Cluster Expansion 方法,用几十到几百个 DFT 计算拟合出一个可预测任意构型能量的模型,

然后用 Monte Carlo 模拟在秒级时间内探索数百万个构型,得到有限温度下的热力学性质。

1.2 ATAT 的四大核心方法

方法解决的问题核心程序
Cluster Expansion<br>(团簇展开) 将合金能量表示为晶格占位构型的函数,<br>用少量 DFT 计算拟合任意构型的能量 corrdump → maps → csfit
SQS<br>(特殊准随机结构) 用一个小超胞模拟完全随机固溶体的<br>统计性质,用于单点 DFT 计算 mcsqs, gensqs
Monte Carlo<br>(蒙特卡洛) 在 Cluster Expansion 能量模型上进行<br>大规模采样,模拟有限温度下的热力学 emc2, memc2, phb
Phase Diagram<br>(相图计算) 通过 Monte Carlo 计算自由能,<br>确定相界和相变温度 phb, emc2

1.3 ATAT 完整工作流

ATAT 的核心工作流可以分为六个阶段

从晶体结构出发,经过团簇生成、训练结构枚举、DFT 计算、ECI 拟合,最终到 Monte Carlo 模拟和相图预测。

下面这张流程图展示了所有程序之间的数据流向和依赖关系。

图片

 

1.4 为什么材料计算需要 ATAT?

DFT 的局限:一个 32 原子的二元合金超胞有 2³² ≈ 40 亿种可能构型,DFT 不可能全部计算。

Cluster Expansion 的优势:用几十个 DFT 计算拟合 ECI(Effective Cluster Interaction),

然后可以在毫秒级时间内预测任意构型的能量,精度可达 ~meV/atom。

Monte Carlo 的优势:在 ECI 模型上进行 Metropolis 采样,模拟百万级原子在有限温度下的统计行为,

得到自由能、比热、短程序参数等热力学量。

💡 提示

ATAT 不是替代 DFT,而是扩展 DFT。DFT 提供训练数据,ATAT 提供统计力学框架,两者结合才能研究合金的有限温度行为。


第二章 · ATAT 安装 —— 从编译到环境配置

安装概览

ATAT 是 C++ 编写的开源软件,通过编译源码安装。需要 C++ 编译器(g++ 或 icpc),可选 MPI 支持。

安装过程包括:配置编译选项 → 编译源码 → 安装可执行文件到指定目录。

2.1 系统依赖

依赖用途是否必需
g++ (GCC C++ 编译器) 编译 ATAT 源码 必需
MPI (OpenMPI/MPICH) mcsqs/memc2 并行计算 可选但推荐
VASP/ABINIT/QE 等 DFT 能量计算 必需(任选其一)
csh/tcsh 运行 glue 脚本 必需(glue 脚本用 csh 编写)
perl patchtail 等辅助脚本 推荐

2.2 安装步骤

Step 1: 准备安装目录

ATAT 需要将编译好的可执行文件放入一个 bin 目录。建议创建:

mkdir -p ~/software/atat3_36/atat/bin

Step 2: 编辑 makefile

修改 ATAT 根目录下的 makefile 文件,设置 BINDIR 指向你的 bin 目录:

BINDIR=/home/yourname/software/atat3_36/atat/bin

# 编译器设置

CXX=g++

# MPI 设置(可选)

MPICXX=mpiCC -DATAT_MPI

Step 3: 编译和安装

在 ATAT 根目录下执行 make 命令。foolproof 脚本会自动检查编译器是否可用:

cd ~/software/atat3_36/atat

make          # 普通编译

make mpi      # MPI 编译(可选)

make install  # 安装到 BINDIR

⚠️ 注意

makefile 中的 BINDIR 必须是已存在的目录,否则 foolproof.sh 会提示创建。

如果编译器检查失败但你知道编译器可用,使用 make force 跳过检查。

2.3 环境变量设置

安装完成后,需要将 ATAT 的 bin 目录加入 PATH,并设置 ATAT 数据目录的环境变量:

# 加入 ~/.bashrc

export PATH=$PATH:/home/yourname/software/atat3_36/atat/bin

export ATATDIR=/home/yourname/software/atat3_36/atat

💡 提示

make install 会自动创建 ~/.atat.rc 文件,记录 ATAT 的安装路径。

ATAT 程序在运行时会读取这个文件来定位数据文件(如 elements.in、masses.in 等)。

如果移动了 ATAT 目录,需要重新运行 make install 或手动更新此文件。

2.4 验证安装

corrdump -h      # 应该显示帮助信息

maps -h          # 应该显示帮助信息

mcsqs -h         # 应该显示帮助信息(如果编译了 MPI 版本)

which emc2       # 确认程序在 PATH 中


第三章 · ATAT 目录结构 —— 快速了解软件体系

ATAT 安装后的目录结构反映了它的功能模块划分。理解目录结构有助于快速找到需要的文件和工具。

目录/文件用途重要程度
<code>bin/</code> 所有编译好的可执行程序 ⭐⭐⭐⭐⭐
<code>data/</code> 辅助数据:元素表、原子量、半径、晶格模板 ⭐⭐⭐⭐
<code>data/str/</code> 46种晶体结构模板(.lat文件) ⭐⭐⭐⭐
<code>data/sqsdb/</code> SQS数据库(预计算的SQS结构) ⭐⭐⭐
<code>data/wyckoff/</code> 219个空间群的Wyckoff位置 ⭐⭐⭐
<code>doc/</code> 手册(manual.pdf)和参考文献 ⭐⭐⭐⭐⭐
<code>examples/</code> 示例文件:Cu-Au合金完整案例 ⭐⭐⭐⭐⭐
<code>glue/vasp/</code> VASP接口脚本 ⭐⭐⭐⭐⭐
<code>glue/abinit/</code> ABINIT接口脚本 ⭐⭐⭐
<code>glue/qe/</code> Quantum ESPRESSO接口脚本 ⭐⭐⭐
<code>glue/jobctrl/</code> 作业调度工具(pollmach等) ⭐⭐⭐⭐
<code>src/</code> 全部源代码(C++) ⭐(开发用)
<code>template/</code> HTML模板 ⭐
<code>makefile</code> 编译配置 ⭐⭐⭐
<code>readme</code> 项目简介 ⭐⭐

💡 提示

新手最重要的三个目录:doc/(读手册)、examples/(跑案例)、bin/(用程序)。

data/str/ 中的 .lat 文件是各种晶格结构的模板,可以直接复制到工作目录使用。

src/ 目录有几百个 C++ 源文件,不需要阅读,除非你想修改 ATAT 源码。


第四章 · Cluster Expansion 原理 —— 从 DFT 到合金热力学

核心问题

一个 N 原子的二元合金有 2^N 种可能的原子排布方式。DFT 每次只能计算一种。

Cluster Expansion(团簇展开)的核心思想是:用一种数学形式,用少量 DFT 计算拟合出能预测所有构型能量的模型。

4.1 为什么不能全部用 DFT?

假设一个 32 原子的二元合金(如 Cu₃Au),可能的构型数量为 2³² ≈ 4.3×10⁹ 种。

即使每个构型的 DFT 计算只需 1 小时,全部计算也需要 49 万年。

但实际上,这些构型的能量并不是独立的——它们遵循某种物理规律。

Cluster Expansion 就是发现和利用这种规律的方法。

4.2 Cluster Expansion 的数学本质

Cluster Expansion 将合金的能量 E 展开为晶格占位变量 σᵢ(σᵢ=+1 表示 A 原子,σᵢ=-1 表示 B 原子)的多体相互作用之和:

 

E(σ) = J₀ + Σᵢ Jᵢσᵢ + Σᵢⱼ Jᵢⱼσᵢσⱼ + Σᵢⱼₖ Jᵢⱼₖσᵢσⱼσₖ + ...

 

其中:

• J₀:常数项(空团簇),对应平均能量

• Jᵢ:点项(point term),单个原子对能量的贡献

• Jᵢⱼ:对相互作用(pair),两体团簇的贡献

• Jᵢⱼₖ:三体相互作用(triplet),以此类推

 

这些 J 系数就是 ECI(Effective Cluster Interaction,有效团簇相互作用)。

一旦确定了 ECI,就可以用上面的公式瞬间计算任意构型的能量。

4.3 ATAT 中 Cluster Expansion 的五个步骤

图片图片

 

4.4 关键概念:ECI 的物理意义

ECI 的符号和大小反映了原子间相互作用的性质:

• J₀(常数项):两种纯组分的平均能量,决定了合金的整体能量水平

• J_pairs(对相互作用):正值表示同种原子倾向分开(有序化),负值表示同种原子倾向聚集(相分离)

• J_triplets(三体)和更高阶项:通常远小于对相互作用,但忽略它们会降低预测精度

 

在 Cu-Au 合金的例子中,对相互作用通常在 meV 量级,远小于 DFT 总能量(~eV 量级),

这说明合金的形成能是各种原子排布之间微小能量差异的竞争结果。

4.5 训练集的选择:MAPS 算法

训练集的质量决定了 Cluster Expansion 的预测精度。ATAT 使用 MAPS(Mitchell Algorithm for Phase Stability)算法来选择训练结构:

• MAPS 从一个初始结构集合开始,逐步添加结构,每次选择预测不确定性最大的结构

• 这确保了训练集覆盖了能量分布最关键的构型空间

• MAPS 会持续运行直到预测量(如基态能量、有序化温度)收敛

 

maps 程序的核心参数:

• -d:最大团簇直径(Å),控制团簇的截断范围

• 迭代终止条件:当新预测的基态能量与已有基态偏差小于阈值时停止

💡 提示

训练集大小:通常需要 30~100 个 DFT 计算即可获得可靠的 ECI。

如果 ECI 拟合的交叉验证(CV)分数低于 0.01 eV/atom,说明模型质量很好。

如果 CV 分数过高,需要增加训练结构或调整团簇截断。


第五章 · 完整案例:Cu-Au 合金 —— 从晶格到相图

案例概述

Cu-Au 合金是 Cluster Expansion 的经典案例。FCC 晶格上 Cu 和 Au 的有序-无序转变是理解合金相变的标准模型。

ATAT 的 examples/ 目录提供了完整的 Cu-Au 案例,包括晶格定义、VASP 参数模板、Monte Carlo 输入和输出。

下面我们逐步讲解每一步的目的、输入、输出和文件关系。

5.1 Step 1:定义晶格 —— lat.in

所有计算始于晶格定义文件 lat.in。它定义了母晶格的几何信息和原子占位。

3.8 3.8 3.8 90 90 90      # a b c α β γ (晶格常数3.8Å, 立方)

0   0.5 0.5                    # 晶格矢量1 (FCC primitive)

0.5 0   0.5                    # 晶格矢量2

0.5 0.5 0                      # 晶格矢量3

0 0 0 Cu,Au                    # 基矢位置: 坐标 + 可占据的原子种类

lat.in 格式说明:

• 第1行:晶格常数 a, b, c(Å)和角度 α, β, γ(度)

• 第2-4行:三个晶格矢量(以晶格常数为单位)

• 第5行起:每个基矢位置的分数坐标和可占据的原子种类(逗号分隔)

 

这个文件定义了 FCC 母晶格,在 (0,0,0) 位置可以被 Cu 或 Au 占据。

ATAT 会自动根据这个定义生成各种超胞构型。

5.2 Step 2:生成团簇 —— corrdump

corrdump 是 Cluster Expansion 的第一步,它枚举晶格中所有对称性不等价的团簇

(点、最近邻对、次近邻对、三体...),输出到 clusters.out 文件。

corrdump -l=lat.in -2=2.687 -3=3.8 -noe -nop

参数说明:

• -l=lat.in:指定晶格定义文件

• -2=2.687:对团簇(pair)的最大距离(Å)。应设为第一近邻和第二近邻之间的距离

—— FCC 中第一近邻 ~2.687Å(√2×a/2),第二近邻 ~3.800Å(a)

• -3=3.8:三体团簇(triplet)的最大距离(Å)

• -noe:不包含空团簇(empty cluster)

• -nop:不包含点团簇(point cluster)

 

输出文件 clusters.out:包含每个团簇的对称性多重度、直径、顶点数和顶点坐标。

例如 Cu-Au FCC 案例中,clusters.out 包含 8 个团簇(1个空团簇 + 1个点团簇 + 6个对团簇)。

⚠️ 注意

-2= 参数的设置非常关键!

如果设得太小(< 第一邻近距离),corrdump 找不到任何对团簇,会段错误。

如果设得太大,团簇数量过多,后续计算效率降低。

推荐值:设为第一近邻和第二近邻距离之间的值。

例如,FCC 结构 a=3.8Å 时,第一近邻 = 2.687Å,第二近邻 = 3.8Å,建议 -2=3.0~3.5。

5.3 Step 3:生成训练结构 —— maps

maps 使用 MAPS 算法自动选择最优的训练结构集合。

它会迭代地选择信息量最大的结构,并创建子目录执行 DFT 计算。

maps -d=6.5              # 运行 maps,最大团簇直径 6.5Å

# maps 会创建子目录 00/, 01/, 02/... 每个包含一个 str.out

maps 的工作方式:

1. 从 clusters.out 读取团簇定义

2. 选择一个初始结构集合

3. 在每个子目录中创建 str.out(结构文件)和 wait(等待计算标志)

4. 等待 DFT 计算完成后,读取能量,拟合 ECI

5. 根据 ECI 预测不确定性,选择下一个结构

6. 重复直到收敛

 

maps 创建的目录结构:

• 00/str.out, 00/wait — 第一个训练结构

• 01/str.out, 01/wait — 第二个训练结构

• ...

• energy — 所有结构的 DFT 能量(maps 完成后自动生成)

5.4 Step 4:运行 DFT 计算 —— runstruct_vasp + pollmach

maps 在每个子目录中创建了 wait 文件后,需要用 pollmach 来自动执行 DFT 计算。

 

pollmach 的工作原理:

1. 扫描所有子目录,找到包含 wait 文件的目录

2. 进入该目录,删除 wait 文件(防止重复执行)

3. 执行 runstruct_vasp(或其他 DFT 接口脚本)

4. runstruct_vasp 将 str.out 转换为 POSCAR,运行 VASP,提取能量写入 energy 文件

5. 继续扫描下一个 wait 文件

pollmach runstruct_vasp   # 在单机模式下顺序执行

# 或

pollmach -m ~/.machines.rc runstruct_vasp  # 多机并行模式

VASP 参数模板(vasp.wrap):控制 DFT 计算的精度和设置。

ATAT 提供了多个模板用于不同场景:

模板文件INCAR 设置适用场景
vasp.wrap ISIF=3, IBRION=2, NSW=41, DOSTATIC 全弛豫(体积+形状+离子)+ 静态计算
cvvasp.wrap ISIF=4, IBRION=2, DOSTATIC 定形状体积弛豫 + 静态计算
fvasp.wrap IBRION=-1, LREAL=AUTO 快速静态计算(不弛豫)
csvasp.wrap ISMEAR=-5, IBRION=-1 高精度静态计算(四面体方法)
svasp.wrap ISMEAR=-5, IBRION=-1, KPPRA=1000 简单静态计算
abinit.wrap ABINIT 参数 使用 ABINIT 替代 VASP

💡 提示

对于体积变化较小的合金体系(如 FCC 金属),使用 cvvasp.wrap(ISIF=4)通常比 vasp.wrap(ISIF=3)更稳定。

DOSTATIC 指令非常重要:弛豫后自动执行一次高精度静态计算,确保能量精度。

KPPRA=1000 表示自动设置 k 点密度为每倒易原子 1000 个 k 点。

5.5 Step 5:拟合 ECI —— csfit 和 fit.out

所有 DFT 计算完成后,maps 会自动调用 csfit(或手动执行)来拟合 ECI。

拟合结果写入 eci.out 和 fit.out。

csfit -d=6.5             # 拟合 ECI,最大团簇直径 6.5Å

# 输出: eci.out (ECI 系数)  fit.out (拟合报告)

eci.out 示例(Cu-Au 案例,8个ECI值,单位 eV):

0.006143      # ECI 0: 常数项 (J₀)

-0.018951     # ECI 1: 点项

0.011470      # ECI 2: 最近邻对 (2.687Å)

-0.009881     # ECI 3: 次近邻对 (3.800Å)

0.000023      # ECI 4: 第三近邻对

0.002117      # ECI 5: 第四近邻对

-0.003311     # ECI 6: 第五近邻对

-0.002577     # ECI 7: 第六近邻对

ECI 值的解读:

• 所有 ECI 值都在 meV 量级,说明合金形成能是微小的能量差异

• ECI[2] = +11.5 meV(最近邻对正值):同种原子排在一起能量升高 → 倾向有序化

• ECI[3] = -9.9 meV(次近邻对负值):次近邻倾向于同种原子聚集

• 高层 ECI 通常 < 2 meV,说明对相互作用主导了 Cu-Au 的合金行为

5.6 Step 6:预测基态与 Monte Carlo

有了 ECI,就可以预测任意构型的能量,找到基态结构,并进行 Monte Carlo 模拟。

# 预测基态结构

clusterpredict -d=6.5

# 输出: gs_str.out (基态结构列表)

 

 

# 基态检查

 

checkrelax -d=6.5

gs_str.out 示例解读(Cu-Au 案例,6个基态):

• 基态0:纯 Cu(全部 Cu 原子)

• 基态1:Cu₃Au(L1₂ 结构,有序 FCC 超胞)

• 基态2:CuAu(L1₀ 结构,层状交替排列)

• 基态3-5:其他中间成分的基态结构

 

每个基态以 end 结束。文件包含超胞晶格矢量和每个原子的坐标+种类。

5.7 完整 Cu-Au 工作流总结

图片

 


第六章 · SQS 特殊准随机结构 —— 随机固溶体建模

核心问题

高熵合金、随机固溶体等材料中,不同元素随机分布在晶格上。

DFT 计算只能处理周期性的小超胞,如何用一个小超胞近似随机固溶体的统计性质?

答案就是 SQS(Special Quasirandom Structure,特殊准随机结构)。

6.1 什么是 SQS?

SQS 的核心思想:构造一个小超胞,使得其中原子排布的对关联函数(pair correlation function)

前若干壳层与完全随机固溶体完全匹配。

 

简单来说:

• 完全随机固溶体:每个原子位置独立随机地被 A 或 B 占据

• SQS:在有限大小的超胞中排列原子,使得短程的原子关联统计与随机固溶体尽可能一致

• 这样,用 SQS 做一次 DFT 计算,就能获得近似随机固溶体的性质

 

物理意义:合金的很多性质(如形成能、晶格常数、电子结构)主要由短程化学环境决定。

如果 SQS 准确复现了前几个近邻壳层的对关联和多体关联,DFT 计算的结果就能代表随机固溶体。

6.2 SQS vs Cluster Expansion:两种方法的区别

特性SQSCluster Expansion
目的 用一个小超胞<strong>近似</strong>随机固溶体 构建能<strong>预测任意构型</strong>能量的模型
DFT计算量 1次 30~100次
温度效应 仅0K 通过Monte Carlo可模拟有限温度
适用场景 快速评估随机固溶体的形成能、<br>晶格常数、电子结构 研究有序-无序转变、相图、<br>短程序、温度依赖的热力学
程序 mcsqs, gensqs corrdump+maps+csfit+emc2

💡 提示

什么时候用 SQS,什么时候用 Cluster Expansion?

• 如果只关心随机固溶体的基态性质(形成能、晶格常数),用 SQS 就够了

• 如果关心有序-无序转变、相图、短程序,必须用 Cluster Expansion + Monte Carlo

• 两者可以结合:先用 SQS 快速评估,确认值得深入研究后再做完整的 Cluster Expansion

6.3 mcsqs 的使用方法

mcsqs 是 ATAT 中生成 SQS 的主要程序。它需要两个输入:

1. rndstr.in(随机结构模板):定义母晶格和原子占位

2. clusters.out(团簇定义):定义需要匹配的关联函数范围

# Step 1: 准备 rndstr.in

# 格式与 lat.in 类似,但原子种类用概率表示

# 例如: 0 0 0 Cu=0.5,Au=0.5 表示此位置 Cu 和 Au 各占 50%

 

 

# Step 2: 生成 clusters.out

 

corrdump -l=rndstr.in -2=3.0 -3=3.8 -noe -nop

 

 

# Step 3: 运行 mcsqs

 

mcsqs -n=32              # 生成 32 原子的 SQS

# 或

mcsqs -n=64 -rc          # 生成 64 原子 SQS,包含所有团簇关联

 

 

# 输出:

 

# bestsqs.out   — 最佳 SQS 结构(分数坐标)

# sqscell.out   — 最佳 SQS 的晶胞(POSCAR 格式)

# clusters.out  — 更新后的团簇信息(含匹配质量)

6.4 mcsqs 关键参数

参数含义建议值
<code>-n=N</code> SQS 超胞中的原子数 二元:32~64;多元:100~200
<code>-rc</code> 包含所有团簇类型的关联函数 推荐使用,匹配更全面
<code>-2=x</code> 对团簇最大距离(Å) 同 corrdump 的 -2 参数
<code>-3=x</code> 三体团簇最大距离(Å) 同 corrdump 的 -3 参数
<code>-lv=N</code> 团簇展开的壳层数 默认即可

6.5 判断 SQS 质量

mcsqs 运行结束后,检查 clusters.out 中的匹配质量:

• objective function(目标函数值):越小越好,通常 < 0.001 表示优秀

• 每个团簇的 perfect_match 标记:表示该团簇的关联函数是否与随机值完全匹配

• 如果重要的近邻对团簇没有 perfect_match,考虑增大超胞或调整团簇截断

6.6 预计算的 SQS 数据库

ATAT 的 data/sqsdb/ 目录包含了大量预计算的 SQS 结构,涵盖 30+ 种常见的晶格类型:

• FCC_A1, BCC_A2, HCP_A3 — 常见金属结构

• ROCKSALT_B1, ZINCBLENDE_B3, WURTZITE_B4 — 化合物结构

• PEROVSKITE_E21, HEUSLER_L21, MGCU2_C15 — 功能材料结构

• LIQUID — 液态结构

• 以及多种成分比例(如 AUCU_L10 的 50/50, GAMMA_L12 的 75/25)

 

每个子目录包含:

• rndstr.skel — 随机结构模板

• parentlat.in — 母晶格定义

• sqsdb_lev=... — 预计算的 SQS 结构文件

• equiv.in — 等价位置信息

 

如果体系与数据库中某个结构匹配,可以直接使用预计算的结果,大幅节省时间。

💡 提示

对于2D 材料(表面/界面),SQS 只需要在面内(a、b轴)方向构造超胞,

c 轴方向保持原胞大小。ATAT 的 SQS 工具支持这种部分无序的建模。


第七章 · Monte Carlo 模拟 —— 有限温度热力学

核心概念

Cluster Expansion 给出了 T=0K 时的能量模型。要研究有限温度下的热力学行为,

需要在 ECI 模型上进行 Monte Carlo(MC)模拟。

ATAT 提供了两个主要 MC 程序:emc2(正则系综)和 memc2(MPI 并行版)。

7.1 Monte Carlo 模拟的基本原理

在固定温度 T 和化学势 μ 下,MC 模拟通过 Metropolis 算法对原子构型进行采样:

1. 随机选择一个原子,尝试将其种类从 A 变为 B(或反之)

2. 用 ECI 模型计算能量变化 ΔE

3. 如果 ΔE < 0(能量降低),接受此变化

4. 如果 ΔE > 0,以概率 exp(-ΔE/kBT) 接受(热涨落)

5. 重复数百万步,收集统计信息

 

最终得到在给定 (T, μ) 下的平衡态统计性质:

• 平均成分(浓度)

• 平均能量(内能)

• 比热(能量涨落)

• 短程序参数(Warren-Cowley 参数)

7.2 emc2 的使用方法

emc2 需要在包含 lat.in、clusters.out 和 eci.out 的目录中运行。

它扫描温度和化学势范围,输出每个 (T, μ) 点的平衡态性质。

emc2 -T0=50 -T1=700 -dT=25 \

     -mu0=0.5 -mu1=1.5 -dmu=0.05 \

     -er=40 -gs=0 -o=mc.out \

     -k=8.617e-5 -dx=0.005

参数说明:

• -T0/T1/dT:温度范围(50K~700K)和步长(25K)

• -mu0/mu1/dmu:化学势范围(0.5~1.5 eV)和步长(0.05 eV)

• -er=40:Ewald 求和半径(Å),用于静电相互作用

• -gs=0:从基态 0 开始模拟

• -o=mc.out:输出文件

• -k=8.617e-5:Boltzmann 常数(eV/K)

• -dx=0.005:原子位移步长(Å),用于原子弛豫

💡 提示

超胞大小:MC 模拟通常使用比训练结构更大的超胞(如 256~1024 原子),以减小有限尺寸效应。

如果超胞太小,相变会被"抹平",无法观察到尖锐的相变信号。

对于一级相变,成分-化学势曲线会出现明显的跳跃(不连续)。

对于二级相变(有序-无序),比热会出现 λ 形峰。

7.3 phb —— 相界计算

phb(Phase Boundary)程序专门用于计算两个相之间的相界(共存线)。

它通过计算两个相的自由能,找到自由能相等的条件。

phb -dT=10 -dmu=0.001 -ltep=1e-3 \

    -er=40 -gs1=0 -gs2=1 \

    -o=phb.out -k=8.617e-5 -dx=1e-4

参数说明:

• -gs1=0 -gs2=1:计算基态 0 和基态 1 之间的相界

• -ltep=1e-3:低温展开精度

• -dT=10:温度步长(K)

• -dmu=0.001:化学势步长(eV)

 

phb 使用 低温展开(Low Temperature Expansion)方法,

在低温下比直接 MC 模拟更高效。

7.4 输出文件的解读

输出文件内容用途
mc.out 每个 (T,μ) 点的成分、能量、比热等 绘制相图、分析相变
phb.out 两个相之间的相界坐标 绘制相界曲线
gs_str.out 基态结构列表 验证基态预测
clusters.out 团簇信息(含匹配质量) 检查 SQS 质量

第八章 · ATAT 与 VASP 接口 —— DFT 计算自动化

接口概览

ATAT 通过 glue 脚本实现与 DFT 代码的自动化交互。VASP 是最常用的 DFT 引擎,

ATAT 提供了完整的 VASP 接口套件。理解这些接口是高效使用 ATAT 的关键。

8.1 接口工作流

图片

 

8.2 vasp.wrap 文件详解

vasp.wrap 是 ATAT 控制 VASP 计算的核心文件。它使用 [SECTION] 标记来组织不同的 VASP 输入部分:

 

[INCAR] 段:定义 VASP 的 INCAR 参数

[KPOINTS] 段:定义 k 点网格

[POTCAR] 段:定义赝势信息

 

ATAT 特有的 sspp 预处理器会在运行前展开 vasp.wrap 中的宏和变量。

[INCAR]

PREC = high

ISMEAR = 1

SIGMA = 0.1

NSW=41

IBRION = 2

ISIF = 3

KPPRA = 1000        # ATAT 自动 k 点密度

USEPOT = PAWPBE     # 使用 PAW-PBE 赝势

DOSTATIC            # 弛豫后自动执行静态计算

 

 

[KPOINTS]

 

# KPPRA=1000 自动设置,无需手动指定

8.3 关键 VASP 接口脚本

脚本功能典型用法
<code>runstruct_vasp</code> 将 str.out 转为 VASP 输入并运行 pollmach runstruct_vasp
<code>ezvasp</code> 从 str.out 创建 VASP 输入文件 ezvasp str.out
<code>extract_vasp</code> 从 VASP 输出提取能量 自动被 runstruct_vasp 调用
<code>cleanvasp</code> 清理 VASP 输出文件,释放空间 cleanvasp
<code>set_default_pp</code> 设置默认赝势(POTCAR) set_default_pp
<code>doberryvasp</code> Berry phase 计算 doberryvasp
<code>checkerr_vasp</code> 检查 VASP 计算是否出错 自动被调用
<code>robustrelax_vasp</code> 鲁棒弛豫(多次弛豫) robustrelax_vasp
<code>xdat2str</code> 将 XDATCAR 转为 ATAT 结构 xdat2str

8.4 作业调度系统

ATAT 的作业调度工具(glue/jobctrl/)实现了 DFT 计算的自动化管理:

 

核心工具:

• pollmach:主调度器。扫描 wait 文件,分配计算任务到本地或远程机器

• minload:返回当前负载最低的机器(用于多机环境)

• chl:列出所有机器的负载状态

• node:在远程机器上执行命令,确保工作目录一致

• sspp:符号预处理器,用于展开 vasp.wrap 中的宏

 

~/.machines.rc 配置文件:

定义可用的计算节点、负载检测方式和命令前缀。

文件格式:每行两个字段(用 + 分隔),第一个是负载检测命令,第二个是远程执行前缀。

# ~/.machines.rc 示例

set waitbetweenpoll=60           # 轮询间隔(秒)

 

 

# 本地机器

 

echo 0.5 + none                  # 负载阈值 0.5,本地执行

 

 

# 远程机器(通过 SSH)

 

ssh user@node1 uptime | getvalue average + node -s user@node1

ssh user@node2 uptime | getvalue average + node -s user@node2

 

 

# 队列系统(如 SLURM)

 

squeue -u $USER | wc -l | awk '{print ($1-4)/2}' + qit

💡 提示

单机模式:如果不存在 ~/.machines.rc,pollmach 自动进入单机模式,

在每个包含 wait 文件的目录中顺序执行 runstruct_vasp。

对于集群环境,建议配置 ~/.machines.rc 以利用多机并行。

pollmach 的 -s 选项(自管理模式)在多机场景下更高效,无需轮询节点负载。


第九章 · 命令大全 —— 按功能分类的程序速查

9.1 结构建模工具

程序用途典型命令关键输出
corrdump 枚举团簇 corrdump -l=lat.in -2=3.0 -3=4.0 clusters.out
cellcvrt 晶胞转换 cellcvrt -p < str.out > POSCAR POSCAR/str.out
genstr 生成结构 genstr lat.in str.out
supercell 创建超胞 supercell lat.in 2 2 2 超胞 str.out
checkcell 检查晶胞 checkcell lat.in 晶胞信息

9.2 Cluster Expansion 工具

程序用途典型命令关键输出
maps 自动选择训练结构 maps -d=6.5 str.out 系列, energy
getclus 获取团簇信息 getclus -d=6.5 clusinfo.out
clusterexpand 团簇展开 clusterexpand -d=6.5 展开系数
csfit 拟合 ECI csfit -d=6.5 eci.out, fit.out
clusterpredict 预测基态 clusterpredict -d=6.5 gs_str.out, predstr.out
checkrelax 检查基态 checkrelax -d=6.5 基态验证
cv 交叉验证 cv -d=6.5 CV 分数

9.3 Monte Carlo 工具

程序用途典型命令关键输出
emc2 正则系综 MC emc2 -T0=0 -T1=1000 -dT=50 ... mc.out
memc2 MPI 并行 MC mpirun -np 4 memc2 ... mc.out(并行)
phb 相界计算 phb -gs1=0 -gs2=1 -dT=10 ... phb.out
calcbulk 体相能量 calcbulk 体相热力学

9.4 SQS 工具

程序用途典型命令关键输出
mcsqs 生成 SQS mcsqs -n=32 -rc bestsqs.out, sqscell.out
gensqs 生成 SQS 模板 gensqs rndstr.in
randstr 随机结构 randstr 随机 str.out
sqscell.out SQS 晶胞 (自动生成) POSCAR 格式晶胞
bestsqs.out 最佳 SQS (自动生成) SQS 分数坐标

9.5 DFT 接口工具

程序用途典型命令
runstruct_vasp 运行 VASP 计算 pollmach runstruct_vasp
runstruct_abinit 运行 ABINIT 计算 pollmach runstruct_abinit
runstruct_qe 运行 QE 计算 pollmach runstruct_qe
ezvasp 创建 VASP 输入 ezvasp str.out
extract_vasp 提取 VASP 能量 (自动调用)
cleanvasp 清理 VASP 文件 cleanvasp
pollmach 作业调度 pollmach runstruct_vasp
minload 最低负载机器 minload
chl 查看机器负载 chl

第十章 · 示例文件总结 —— 每个 example 学什么

ATAT 的 examples/ 目录提供了多组示例文件,每个展示了不同的功能和使用场景。

下面总结每个示例的学习目标和关键技巧。

示例学习目标关键技巧
cuau.in + mc/ 完整 Cu-Au Cluster Expansion<br>+ Monte Carlo 工作流 理解 lat.in → corrdump → maps →<br>csfit → emc2/phb 的完整流程
fcc_lat.in / bcc_lat.in /<br>hcp_lat.in 通用晶格模板 可以作为任何二元合金的起点,<br>只需修改晶格常数和元素种类
rocksalt_lat.in 多子晶格建模 阳离子子晶格无序 + 阴离子子晶格固定,<br>适用于氧化物、氮化物等
vasp.wrap 系列 VASP 参数模板 了解不同场景(弛豫/静态/快速)<br>的 INCAR 设置差异
abinit.wrap ABINIT 接口 使用 ABINIT 替代 VASP 的示例
dir.in 方向文件 用于 Monte Carlo 中的各向异性分析
mc/emc2.in emc2 参数 温度-化学势扫描的参数设置
mc/phb.in phb 参数 相界计算的参数设置
mc/gs_str.out 基态结构 理解基态结构的输出格式和物理意义
mc/eci.out ECI 系数 理解 ECI 的数值范围和物理意义

💡 提示

学习建议:

1. 先跑通 Cu-Au 案例(examples/ 目录),理解完整工作流

2. 将 fcc_lat.in 替换为自己的材料,跑通 Cluster Expansion

3. 遇到问题先看 mc/ 目录的输出文件格式,了解预期输出

4. vasp.wrap 系列是理解 VASP 接口的最佳参考


第十一章 · 科研实战案例 —— ATAT 在不同领域的应用

11.1 高熵合金(HEA)的短程序研究

背景:高熵合金由 4-5 种等摩尔比元素组成,传统上被认为形成理想随机固溶体。

但最新研究表明,HEA 中存在显著的化学短程序(CSRO),影响力学性能。

 

ATAT 方案:

1. 构建多元 SQS(如 CoCrFeMnNi 五元 SQS,~200 原子)

2. 用 SQS 做 DFT 计算,获得形成能和电荷转移

3. 构建 Cluster Expansion 模型(多元体系需要更多训练结构)

4. Monte Carlo 模拟不同温度下的短程序参数

5. 分析短程序对层错能、屈服强度的影响

 

关键点:多元体系的 ECI 数量随元素种类和团簇截断急剧增加,

需要谨慎选择团簇截断,并确保足够的训练结构数量。

11.2 催化剂的表面偏析

背景:合金催化剂(如 Pt-Ni、Pd-Ag)的表面成分与体相不同,

表面偏析行为直接影响催化活性和选择性。

 

ATAT 方案:

1. 构建 slab 模型(2D 切面结构)

2. 只在面内(a、b 轴)方向进行 Cluster Expansion

3. c 轴方向保持 slab 厚度 + 真空层

4. Monte Carlo 模拟不同温度和气氛下的表面成分

5. 结合 DFT 计算关键反应路径的能垒

 

关键点:2D 体系的 Cluster Expansion 比 3D 简单(团簇数量少),

但需要仔细处理表面弛豫和吸附物效应。

11.3 相图计算

背景:实验相图的测定耗时耗力,计算相图(CALPHAD)是材料设计的核心工具。

ATAT 可以从第一性原理出发,无需实验输入地预测合金相图。

 

ATAT 方案:

1. 对每个相(FCC、BCC、HCP 等)分别构建 Cluster Expansion

2. 对每个相进行 Monte Carlo 模拟,得到自由能 G(T, x)

3. 用 phb 计算各相之间的相界

4. 绘制完整相图(温度-成分图)

5. 与实验相图或 CALPHAD 数据库对比

 

关键点:ATAT 预测的相图精度取决于 DFT 计算的精度和 ECI 拟合的质量。

对于含磁性元素的体系,需要考虑自旋极化效应。

11.4 温度稳定性研究

ATAT 方案:

1. 用 Cluster Expansion 拟合 0K 能量面

2. 加入振动自由能(通过 phonon 计算或 Debye 模型)

3. 加入电子自由能(从 DOS 计算)

4. 在 MC 模拟中同时考虑构型熵 + 振动熵 + 电子熵

5. 预测温度依赖的相稳定性

 

ATAT 支持在 Monte Carlo 中自动包含振动和电子熵(通过 -v 和 -e 选项),

但这些需要额外的 DFT 计算(如 phonon 谱)。


第十二章 · ATAT 最佳实践 —— 经验与技巧

12.1 如何选择训练集

1. 让 maps 自动选择:MAPS 算法经过验证,通常能选出最优训练集

2. 监控交叉验证(CV)分数:CV < 0.01 eV/atom 为优秀,> 0.05 eV/atom 需要更多训练结构

3. 包含端元(纯组分):确保训练集中包含纯 A 和纯 B 的结构

4. 关注基态结构:如果 predicted ground states 不稳定,需要增加训练结构

5. 训练集大小参考:二元体系 30-50 个,三元体系 50-100 个,四元及以上 100+ 个

12.2 ECI 收敛判断

1. CV 分数:最重要的收敛指标。CV 分数不再随训练集增大而显著降低时,说明 ECI 已收敛

2. 基态稳定性:预测的基态结构应与已知实验结果一致

3. 团簇截断:通常 -d 参数设为 6-8 Å 足够。增大截断会引入更多团簇,

但 ECI 值通常随团簇直径增大而快速衰减

4. 拟合权重:对接近基态的结构给予更高权重(csfit 的 -w 选项)

5. ECI 衰减:ECI 值应随团簇直径增大而衰减。如果高层 ECI 反而很大,

说明存在过拟合,需要减小团簇截断或增加训练集

12.3 SQS 超胞选择

1. 原子数:二元体系 32-64 原子通常足够。多元体系(5+ 元素)需要 100-200 原子

2. 匹配质量:objective function < 0.001 为优秀。如果匹配质量差,增大超胞

3. 多个 SQS:对于关键性质,生成 3-5 个不同 SQS,取平均和标准差

4. 2D 体系:面内超胞 4×4 到 6×6 通常足够,c 轴保持 1

12.4 DFT 精度要求

1. 能量收敛:EDIFF < 1e-6 eV/atom(比普通 DFT 计算更严格)

2. k 点密度:KPPRA ≥ 1000(ATAT 的自动 k 点设置标准)

3. 弛豫策略:先用 ISIF=3 全弛豫端元,再用 ISIF=4 定形状弛豫合金结构

4. 赝势一致:所有计算使用相同的赝势类型(推荐 PAW-PBE)

5. 自旋极化:含磁性元素时,务必开启自旋极化(ISPIN=2)

12.5 Monte Carlo 参数

1. 超胞大小:至少 256 原子。对于一级相变,建议 512-1024 原子

2. 平衡步数:至少 10,000 MC 步/原子。更多步数可提高统计精度

3. 采样步数:平衡后至少 10,000 MC 步/原子用于统计

4. 温度步长:在相变温度附近(±50K)使用更细的步长(如 5-10K)

5. 化学势步长:0.01-0.05 eV 通常足够

 

收敛判断:

• 在相同条件下运行 2-3 次独立 MC 模拟,结果应一致

• 增大超胞 2 倍,结果变化应 < 5%

• 比热峰的位置和高度应稳定


第十三章 · 常见错误与解决方案 —— 踩坑指南

13.1 corrdump 段错误(Segmentation Fault)

现象:运行 corrdump 时直接崩溃,没有任何错误信息。

原因:-2= 参数设置过小,小于第一近邻距离,导致找不到任何对团簇。

解决方案:增大 -2= 的值。建议设为第一近邻和第二近邻距离之间的值。

例如,FCC a=3.8Å 时,第一近邻 = 2.687Å,第二近邻 = 3.8Å,建议 -2=3.0~3.5。

预防:在运行 corrdump 前手动计算第一近邻和第二近邻距离。

13.2 maps 一直不收敛

现象:maps 运行了很长时间(> 50 个结构),仍然没有停止。

原因:

• 团簇截断太小(-d 参数),CE 模型精度不足

• 存在未发现的基态

• 训练结构数量不足

解决方案:

• 增大 -d 参数(如从 6.5 增加到 8.0)

• 检查 fit.out 中的 CV 分数

• 手动添加一些已知的基态结构

• 如果 CV 分数已经很好,可以手动停止 maps 并继续

13.3 mcsqs 找不到 SQS

现象:mcsqs 运行后 bestsqs.out 为空或 objective function 很大。

原因:

• 超胞太小,无法满足所有团簇关联约束

• 目标成分在给定超胞大小下无法实现(如要求 33% 成分在 32 原子超胞中无法精确实现)

• 团簇截断太大,约束条件过多

解决方案:

• 增大超胞(-n 参数)

• 调整目标成分使其能被超胞原子数整除

• 减小团簇截断距离

• 使用 -rc 选项包含所有团簇类型

13.4 clusters.out 为空

现象:corrdump 运行后 clusters.out 为空或只有很少的团簇。

原因:

• -2= 或 -3= 参数设置过小

• lat.in 格式错误(如坐标、晶格矢量格式不正确)

• 晶格中有重复的原子位置

解决方案:

• 增大 -2= 和 -3= 的值

• 用 checkcell 检查 lat.in 格式是否正确

• 确保 lat.in 中原子坐标是分数坐标

13.5 ECI 震荡 / 过拟合

现象:ECI 值随团簇直径增大而不衰减,反而增大。

原因:训练集太小,导致过拟合。

解决方案:

• 增加训练结构数量

• 减小团簇截断(-d 参数)

• 使用交叉验证(cv 程序)评估模型质量

• 对高层团簇使用正则化(如 ridge regression)

13.6 pollmach 找不到命令

现象:pollmach 报错 "Cannot find command runstruct_vasp"。

原因:ATAT 的 bin 目录不在 PATH 中,或 glue 脚本未安装。

解决方案:

• 确保 ATAT bin 目录在 PATH 中:export PATH=$PATH:/path/to/atat/bin

• 运行 make install 安装 glue 脚本

• 检查 glue 脚本的执行权限:chmod +x /path/to/atat/bin/runstruct_vasp

13.7 VASP 计算能量异常

现象:某些结构的 VASP 能量与预期偏差很大。

原因:

• 弛豫不充分(NSW 太小或未收敛)

• k 点密度不足

• 赝势不一致

• 结构中有原子重叠

解决方案:

• 使用 DOSTATIC 指令确保弛豫后进行高精度静态计算

• 增大 KPPRA(如 2000-4000)

• 确保所有计算使用相同的赝势

• 用 checkcell 检查结构是否合理

13.8 快速排查清单

遇到问题时,按以下顺序检查:

✅ lat.in 格式:用 checkcell 验证

✅ corrdump -2= 参数:是否大于第一近邻距离

✅ PATH 环境变量:ATAT bin 目录是否在 PATH 中

✅ ATATDIR 环境变量:是否正确指向 ATAT 根目录

✅ VASP 计算:检查 OUTCAR 中的能量是否收敛

✅ fit.out:检查 CV 分数是否合理

✅ clusters.out:检查团簇数量是否合理

✅ eci.out:检查 ECI 值是否合理(meV 量级)

📖 参考: ATAT Manual v3.36 | Axel van de Walle | https://alum.mit.edu/www/avdw/atat/ 

 
编程学习 技术分享 实战经验

相关新闻

科研绘图进阶:解析1200张Nature插图,掌握顶级期刊图表设计

2026/8/3 3:42:52

2026年8月优质的手工型板直销厂家推荐,水平线模具/铸铝铁模具/静压线模具/铁件产品加工,手工型板生产厂家有哪些 - 品牌推荐师

2026/8/3 3:42:52

Windows系统下PS4手柄无法识别的终极排查与驱动冲突解决指南

2026/8/3 3:42:26

最新新闻

2026 年至今,淮南比较好的果园围栏网制造厂家竞争格局,别被老观念坑了!果园用这玩意儿,成本降一半还能防住野猪偷果? - 行业推荐【认证官】

2026/8/3 4:43:53

为什么你的AI副业增长停滞?揭秘流量-转化-复购漏斗中3个被99%人忽略的断点

2026/8/3 4:43:53

三亚海棠区卫生间漏水怎么处理_2026海南海棠湾漏水维修避坑指南与靠谱吗 - 雨婺虹房屋维修

2026/8/3 4:43:53

2026年正规奉贤区注册公司服务商怎么选?厂家推荐与全维度评测! - 优质品牌商家

2026/8/3 4:43:53

Aseprite与Unity骨骼动画全流程:从像素分层到性能优化

2026/8/3 4:43:53

SpringBoot在服装行业数字化转型中的实践与应用

2026/8/3 4:43:08

日新闻

AI编程助手重塑工程师工作流:从效率提升到角色转型

2026/8/3 0:01:16

基于Tauri与DeepSeek API构建微信AI助手:技术实现与效率革命

2026/8/3 0:01:16

2026深圳疑难签证办理指南:拒签再签/商务签/高端定制机构怎么选 - 互联网科技品牌测评

2026/8/3 0:01:16

周新闻

怀化母婴除甲醛公司测甲醛中心怎么选:康之居母婴除甲醛标准、流程、避坑指南 - 信誉隆金银铂奢回收

2026/8/2 0:01:38

Penpot组件系统完全指南:三步打造企业级设计系统的终极方案

2026/8/2 0:01:56

如何快速掌握Penpot组件系统:开源设计平台的终极指南

2026/8/2 0:01:56

月新闻

ClickHouse版本管理深度实战:4步构建零风险升级与回滚体系

2026/8/2 11:50:07

Java 23 种设计模式:从踩坑到精通 | 番外:责任链模式 —— 物流审批流程实战

2026/8/2 11:50:07

华硕笔记本性能解放指南:G-Helper轻量级控制工具全面解析

2026/8/2 11:50:07

分类目录

  • 学习日记
  • 项目实战
  • 学习方法
  • 代码技巧
  • 避坑指南
  • 调试经验

热门标签

JavaScript Python Java 前端开发 后端开发 算法 数据结构 项目实战

关于三亩地

三亩地是一个专注于编程学习的平台,以真实学习日记为载体,分享编程学习经验、项目实操技巧和高效学习方法。

快速链接

学习日记

项目实战

学习方法

资讯中心

联系方式

邮箱:contact@mfbz.cn

微信:sanmudi_code

QQ 群:123456789

© 2026 三亩地 编程学习日记 版权所有 | mfbz.cn