3. CALPHAD数据库文件结构解析

TDB(Thermo-Calc DataBase)文件是CALPHAD计算的事实标准输入格式,Thermo-Calc、Pandat、OpenCalphad、pycalphad等主流软件都能读写它。理解TDB的结构,等于掌握了热力学数据库的"源代码"。本节从文件骨架入手,逐层拆解元素定义、相声明、模型与参数语法,并给出阅读与编辑的实用方法。

一、TDB文件的整体骨架

一个TDB文件本质上是若干"命令块"的顺序集合,每个块以关键字开头,以感叹号 ! 结束。常见块类型包括:ELEMENT(元素定义)、SPECIES(组元/物种定义)、PHASE(相声明)、CONSTITUENT(相组成)、PARAMETER(模型参数)、TYPE_DEFINITION(类型定义)、FUNCTION(自定义函数)、DATABASE_INFO(元信息)。文件通常以 $ 开头的行为注释,以 _ 结尾的行为续行。

下面是一个最小可用的TDB片段,用于说明各块的书写方式:

$ 示例:Al-Zn二元系简化TDB片段
ELEMENT AL FCC_A1 26.9815 4577.3 28.322 !
ELEMENT ZN HCP_A3 65.38 5657.0 41.63 !

SPECIES AL AL1 !
SPECIES ZN ZN1 !

PHASE LIQUID % 1 1.0 !
CONSTITUENT LIQUID :AL,ZN: !

PHASE FCC_A1 % 2 1 1 !
CONSTITUENT FCC_A1 :AL,ZN:VA: !

PARAMETER G(LIQUID,AL;0) 298.15 +GHSERAL+11005-6.5*T; 6000 N !
PARAMETER G(LIQUID,ZN;0) 298.15 +GHSERZN+7157-5.6*T; 6000 N !
PARAMETER L(LIQUID,AL,ZN;0) 298.15 +10465-3.4*T; 6000 N !

可以看到,TDB用极简的符号系统描述了一个热力学模型:元素、物种、相、组成、参数,层层递进。

二、元素与组元定义

ELEMENT 行定义纯元素,字段依次为:元素名、参考相(reference phase)、原子量、298.15 K下的焓、298.15 K下的熵。参考相通常是该元素在标准态下的稳定结构,如Al取FCC_A1、Zn取HCP_A3。这些数值用于计算GHSER函数(元素在参考态下的Gibbs能),是后续所有参数的基准。

SPECIES 行定义组元(species),即参与相组成的化学实体。对于简单置换固溶体,物种名与元素名一致(如AL、ZN);对于化合物或离子,物种可以带化学计量数,例如 SPECIES FE2O3 FE2O3! 或 SPECIES O O-2!。物种定义决定了相组成中可出现的"化学单元"。

元素与物种的区别:元素是周期表上的原子,物种是热力学模型中实际参与混合的实体。一个元素可以对应多个物种(如O、O-2、O2),但一个物种通常只对应一个元素。

三、相与模型声明

PHASE 行声明一个相,字段为:相名、模型类型符号、亚点阵数目、各亚点阵的位点数。例如 PHASE FCC_A1 % 2 1 1 ! 表示FCC_A1相采用双亚点阵模型,两个亚点阵的位点数均为1。模型类型符号 % 表示置换固溶体,& 表示离子液体,# 表示其他特殊模型。

CONSTITUENT 行紧跟其后,用冒号分隔各亚点阵的组元列表。例如 CONSTITUENT FCC_A1 :AL,ZN:VA: ! 表示第一个亚点阵由Al和Zn占据,第二个亚点阵由空位VA占据。空位是热力学模型中的重要"虚拟组元",用于描述间隙固溶体或缺陷。

相与模型的关系可以用下图概括:

TDB文件结构:从元素到参数的层级关系 ELEMENT 层 定义纯元素:名称、参考相、原子量、H298、S298 → 生成 GHSER 基准 AL / ZN / FE / O … SPECIES 层 定义组元/物种:化学实体、可带电荷或化学计量数 → 决定相组成单元 AL / ZN / O-2 / FE2O3 … PHASE + CONSTITUENT 层 声明相名、模型类型、亚点阵数目与位点数;指定各亚点阵的组元列表 例:PHASE FCC_A1 % 2 1 1 ! → CONSTITUENT FCC_A1 :AL,ZN:VA: ! LIQUID / FCC_A1 / HCP_A3 … PARAMETER 层 G / L / TC / BMAGN 等参数,按相、组元、阶数索引,含温度区间与表达式 例:PARAMETER G(LIQUID,AL;0) 298.15 +GHSERAL+11005-6.5*T; 6000 N ! G / L / TC / BMAGN …

四、参数类型与语法规则

参数是TDB的核心,决定了相的热力学性质。常见参数类型包括:

  • G:Gibbs能参数,用于描述纯组元或端元化合物的自由能。
  • L:相互作用参数,描述组元间的混合非理想性,常用Redlich-Kister多项式展开。
  • TC:Curie温度,用于磁性模型。
  • BMAGN:Bohr磁子数,用于磁性贡献计算。

参数行的语法格式为:PARAMETER 类型(相名,组元列表;阶数) 温度下限 表达式; 温度上限 状态 !。其中阶数用于Redlich-Kister展开,如 L(LIQUID,AL,ZN;0) 表示零阶相互作用参数,;1 表示一阶。表达式可以引用已定义的函数(如GHSERAL),也可以直接写多项式。

温度区间是TDB的重要特性:同一参数可以在不同温度段用不同表达式描述,软件会自动分段计算。例如 298.15 +GHSERAL+11005-6.5*T; 6000 N ! 表示该表达式在298.15 K到6000 K之间有效,N 表示无需外推。

编辑TDB时务必注意:参数的温度区间不能出现空隙或重叠,否则计算时可能报错或产生非物理结果。建议在修改后使用软件自带的语法检查功能验证。

五、常用阅读与编辑工具

实际工作中,TDB文件通常有数千行,手工阅读效率低。推荐以下工具组合:

工具用途特点
Thermo-Calc GUI图形化浏览与编辑TDB内置语法检查、相图预览
Pandat数据库管理与计算支持多数据库合并
pycalphadPython读取与计算开源,适合批量处理
文本编辑器 + 语法高亮快速查看与修改VS Code、Notepad++ 均可

以pycalphad为例,读取TDB并查看相信息只需几行代码:

from pycalphad import Database
db = Database('alzn.tdb')
print(db.phases.keys())          # 查看所有相
print(db.elements)               # 查看所有元素
print(db.species)                # 查看所有物种

对于需要批量修改参数或提取数据的场景,pycalphad的 Database 对象支持直接操作参数字典,比手工编辑TDB更安全高效。

六、阅读TDB的实用建议

面对一个陌生的TDB文件,建议按以下顺序阅读:先看 DATABASE_INFO 了解数据库来源与版本;再扫 ELEMENT 和 SPECIES 确认体系范围;然后浏览 PHASE 和 CONSTITUENT 建立相结构图;最后重点阅读 PARAMETER 中与目标相相关的部分。对于参数表达式,不必逐项推导,但应关注温度区间、阶数和引用函数是否完整。

编辑TDB时,建议遵循"最小改动"原则:只修改必要参数,保留原有注释和格式,修改后立即用软件验证。对于新增相或组元,务必同步更新 PHASE、CONSTITUENT 和 PARAMETER 三处,缺一不可。