高通量计算:Ni-xCr-yAl合金成分空间中液相线、固相线及相含量变化实例
高通量计算(Pandat代算或自己操作) 高通量计算筛选材料 实例6:在 Ni-xCr-yAl (x=10-100,y=10-100)成分空间中,合金的液相线、固相线、相含量的变化
咱们今天来点硬核操作,手把手教你怎么用Pandat在镍基合金里搞液相线固相线的批量计算。材料狗都懂,每次算三元相图的时候手动调成分能调到腱鞘炎发作,这回直接玩把大的——搞它个8100个成分点!
先整活个脚本模板(别慌,其实就二十行代码的事):
from pandatoolkit import * base_comp = {'Ni': 50, 'Cr': 30, 'Al': 20} # 随便写个初始值 temp_range = (800, 1600) # 温度范围要覆盖液相线 # 生成成分矩阵 cr_range = np.linspace(10, 100, 90) # x轴步长1% al_range = np.linspace(10, 100, 90) # y轴步长1% results = [] for cr in cr_range: for al in al_range: # 保证总含量不超过100% ni = 100 - cr - al if ni < 0: continue # 调用Pandat计算引擎 calc = PanCalculation() calc.set_elements(['Ni', 'Cr', 'Al']) calc.set_composition(Ni=ni, Cr=cr, Al=al) # 关键操作:液相线扫描 liquidus = calc.find_transition('LIQUID', temp_range) solidus = calc.find_transition('FCC_A1', temp_range) results.append([cr, al, liquidus, solidus])这段代码的精髓在双重循环里的成分遍历。注意那个ni = 100 - cr - al的小心机,直接避免成分溢出的尴尬。不过实际跑数据时建议加个进度条,不然盯着黑框框等半小时会怀疑人生。
高通量计算(Pandat代算或自己操作) 高通量计算筛选材料 实例6:在 Ni-xCr-yAl (x=10-100,y=10-100)成分空间中,合金的液相线、固相线、相含量的变化
计算结果出来别急着做图,先看几个典型点验证下:
# 检查Cr=30, Al=20时的数据 sample = next(x for x in results if x[0]==30 and x[1]==20) print(f"液相线:{sample[2]}℃ 固相线:{sample[3]}℃") # 预期输出类似: # 液相线:1420℃ 固相线:1325℃这时候如果发现液相线比固相线还低,八成是热力学数据库没选对。搞镍基合金记得用TTNI8数据库,别用默认的钢铁数据库,否则会收获一堆离大谱的数据。
数据处理阶段推荐用pandas玩点花的:
df = pd.DataFrame(results, columns=['Cr', 'Al', 'Liquidus', 'Solidus']) # 计算凝固区间 df['DeltaT'] = df['Liquidus'] - df['Solidus'] # 找出最佳加工区间(凝固区间50-80℃) best_processing = df[(df['DeltaT']>50) & (df['DeltaT']<80)]这时候上三维图最直观,但考虑到有些同学没装mayavi,咱们用matplotlib凑合看看趋势:
from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_trisurf(df['Cr'], df['Al'], df['Liquidus'], cmap='viridis') ax.set_xlabel('Cr content') ax.set_ylabel('Al content') ax.set_zlabel('Temperature (℃)') plt.show()跑出来的图如果像个滑梯就对了——高Cr高Al区域液相线骤降,说明这区域容易形成低熔点相。重点要关注液相线斜率突变的位置,这些成分点往往是多相区边界。
最后给个实战经验:批量计算前务必做网格验证。先用5%步长跑个测试集,确认热力学模型在边界条件(比如纯组元附近)的表现。上次有个兄弟没做验证,结果在Cr=95%的区域算出一堆负温度,被导师怼到怀疑人生...
