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!。物种定义决定了相组成中可出现的"化学单元"。
三、相与模型声明
PHASE 行声明一个相,字段为:相名、模型类型符号、亚点阵数目、各亚点阵的位点数。例如 PHASE FCC_A1 % 2 1 1 ! 表示FCC_A1相采用双亚点阵模型,两个亚点阵的位点数均为1。模型类型符号 % 表示置换固溶体,& 表示离子液体,# 表示其他特殊模型。
CONSTITUENT 行紧跟其后,用冒号分隔各亚点阵的组元列表。例如 CONSTITUENT FCC_A1 :AL,ZN:VA: ! 表示第一个亚点阵由Al和Zn占据,第二个亚点阵由空位VA占据。空位是热力学模型中的重要"虚拟组元",用于描述间隙固溶体或缺陷。
相与模型的关系可以用下图概括:
四、参数类型与语法规则
参数是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文件通常有数千行,手工阅读效率低。推荐以下工具组合:
| 工具 | 用途 | 特点 |
|---|---|---|
| Thermo-Calc GUI | 图形化浏览与编辑TDB | 内置语法检查、相图预览 |
| Pandat | 数据库管理与计算 | 支持多数据库合并 |
| pycalphad | Python读取与计算 | 开源,适合批量处理 |
| 文本编辑器 + 语法高亮 | 快速查看与修改 | 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 三处,缺一不可。