LAMMPS 金属液滴润湿模拟:用 TaoToken 统一 Key 跑通建模到分析全流程

发布时间:2026/10/8 19:00:54
LAMMPS 金属液滴润湿模拟:用 TaoToken 统一 Key 跑通建模到分析全流程 1. 金属液滴润湿模拟到底在算什么从 Cu/SiC 体系说起金属液滴润湿模拟说白了就是让一堆金属原子在高温下熔成液滴然后看它落在固体壁面上会摊开还是缩成球。这个摊开程度用接触角来量化接触角越小说明润湿性越好钎焊、涂层、复合材料界面结合这些场景都靠它吃饭。LAMMPS 做这类模拟的优势在于原子尺度能看到界面处的原子重排、扩散层厚度这是实验手段很难直接观测的。我这次用的体系是 Cu 液滴落在 SiC 基底上。选这个组合是因为 Cu/SiC 是典型的金属-陶瓷界面实验上接触角大约在 130° 到 140° 之间不同晶面和温度有差异模拟结果能跟实验对照验证工作流是否靠谱。整个流程分四步建模 → 力场配置 → 升温弛豫 → 润湿测量。每一步都有坑下面逐个拆。适合谁看做过 LAMMPS 基础操作、想跑润湿案例但卡在力场混合或接触角提取的人材料计算方向的研究生表界面研究的工程师。如果你还没装 LAMMPS建议先用 conda 装一个conda install -c conda-forge lammps或者用官方预编译包这里不展开安装细节。核心检索词先明确LAMMPS 金属液滴润湿模拟关键词是 hybrid 势函数、nvt/npt 系综切换、chunk/atom 密度统计、接触角提取。这几个词贯穿全文你搜资料时也可以按这个组合去查。建模部分SiC 基底可以用 Materials Studio 或 Atomsk 从 cif 文件扩胞得到正交结构Cu 液滴单独建一个球然后 merge 进去。我直接读入预先建好的sic_cu.data里面 SiC 是 6 层原子Cu 液滴半径约 20 Å放在基底上方 5 Å 处避免初始重叠。data 文件里 atom type 1 是 Cutype 2 是 Sitype 3 是 C这个顺序后面 pair_coeff 要对上搞错了力场就全乱。2. TaoToken 统一 Key 的前置准备为什么模拟工作流也需要它你可能会问跑 LAMMPS 跟 API Key 有什么关系答案是润湿模拟的完整工作流不只是跑一个 in 文件还包括参数扫描、结果分析、脚本生成、报错排查这些环节。我习惯用大模型辅助生成势函数参数、检查 input 脚本语法、解释 density.txt 的输出格式这时候如果每个工具都单独配 Key管理起来很烦。TaoToken 的做法是一个 Key 打通多个模型接口Base URL 统一成https://taotoken.net/api省去到处找 endpoint 的麻烦。具体操作先到官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册然后在控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里生成 API Key。Key 的格式一般是sk-开头的一串字符复制下来存到环境变量里别硬编码在脚本中。拿到 Key 之后你可以用它做几件事一是让模型帮你检查 LAMMPS input 脚本的语法错误比如pair_style hybrid后面跟的势函数顺序对不对二是生成接触角计算的 Python 脚本读取 density.txt 画等高线三是排查运行中的报错比如 Lost atoms 或 Bond atoms missing 这类常见问题。模型对话入口在 https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content直接粘贴报错信息就能得到排查建议。如果你打算长期做计算任务比如批量跑不同温度的润湿模拟可以考虑 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content它适合需要频繁调用模型辅助编码的场景。API Key 管理页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content可以随时查看余额和调用记录。这里要强调一点TaoToken 只是帮你管理模型调用的入口它不替代 LAMMPS 本身也不碰你的计算数据。你的模拟还是在本地或集群上跑Key 只用于辅助环节。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有各语言 SDK 的调用示例Python 的话用 openai 库改一下 base_url 就行。3. 可复制的 LAMMPS 输入脚本骨架与势函数配置下面给出完整的 input 脚本骨架你可以直接存成in.wetting然后lmp -in in.wetting运行。我按段落拆开解释重点标出容易出错的地方。# 基本参数设置 units metal boundary p p p atom_style atomic neighbor 2 bin neigh_modify every 1 delay 0 timestep 0.001 # 读取模型文件 read_data sic_cu.data # 混合势函数设置SiC 用 TersoffCu 用 EAM/FS界面用 LJ pair_style hybrid eam/fs tersoff lj/cut 10 pair_coeff * * eam/fs Cu1.eam.fs NULL NULL Cu pair_coeff * * tersoff SiC.tersoff C Si NULL pair_coeff 1 3 lj/cut 0.048658808 2.800759718 pair_coeff 2 3 lj/cut 0.095209495 3.140957657这里pair_style hybrid的顺序很关键eam/fs 在前tersoff 在后lj/cut 最后。pair_coeff * * eam/fs那行里的NULL NULL Cu表示前两个 atom typeSi 和 C不参与 EAM 势只有 Cu 参与。Tersoff 那行的C Si NULL对应的是元素顺序不是 atom type 顺序这个坑我踩过——Tersoff 文件里元素排列是 C、Si所以这里要写C Si NULLNULL 表示 Cu 不参与。LJ 参数分别对应 Cu-Si 和 Cu-C 的相互作用epsilon 和 sigma 值来自文献或混合规则你可以根据实际体系调整。# 热力学输出 thermo 100 thermo_style custom step temp pe # 底部原子固定 region bot block INF INF INF INF INF 6 units box group bot region bot velocity all create 300 8989 velocity bot set 0 0 0 fix 01 bot setforce 0 0 0 # 300K 弛豫 fix 1 all nvt temp 300 300 0.1 run 1000 unfix 1 reset_timestep 0底部固定的做法是用 region 选出 z 坐标小于 6 Å 的原子group 成 bot然后 velocity set 0 和 setforce 0 双保险。velocity all create 300 8989里的 8989 是随机种子换个数字初始速度分布就不同但统计结果应该一致。NVT 弛豫 1000 步1 ps让系统在 300K 下稳定下来。# 升温到 1500K dump 1 all atom 1000 hot.xyz fix 1 all npt temp 300 1500 0.1 iso 0 0 1 run 1000 unfix 1 undump 1 reset_timestep 0升温用 NPT 系综iso 0 0 1表示各向同性压力控制目标压力 0 bar阻尼系数 1 ps。1000 步从 300K 升到 1500K升温速率约 1200 K/ps这个速率在模拟里算快的但润湿模拟主要看最终平衡态升温路径影响不大。dump 输出 hot.xyz 可以后续用 OVITO 看熔化过程。# 密度分布计算用于接触角提取 compute 1 all chunk/atom bin/2d x lower 2 z lower 2 units box fix 02 all ave/chunk 1 200 200 1 density/mass file density.txt # 1500K 润湿模拟 dump 1 all atom 200 dump.xyz fix 1 all nvt temp 1500 1500 0.1 run 30000compute chunk/atom bin/2d把空间划分成 2D 网格x 和 z 方向各 2 Å 一个 bin。fix ave/chunk每 200 步平均一次总共 200 次输出到 density.txt。这个文件就是接触角计算的输入。润湿阶段跑 30000 步30 ps对于 Cu 液滴来说通常够达到平衡你可以通过监测接触角随时间的变化来判断是否收敛。势函数文件需要单独准备Cu1.eam.fs从 NIST 数据库下载SiC.tersoff用经典的 Tersoff 参数比如 1994 年版的 SiC 参数。LJ 参数我用的是文献值你可以用混合规则重新算epsilon_ij sqrt(epsilon_i * epsilon_j)sigma_ij (sigma_i sigma_j) / 2。Cu 的 epsilon 约 0.409 eVsigma 约 2.338 ÅSi 的 epsilon 约 0.017 eVsigma 约 3.826 ÅC 的 epsilon 约 0.0028 eVsigma 约 3.4 Å。算出来跟上面脚本里的值对比一下差异大的话检查单位。4. 验证请求与成功结果接触角提取和润湿判据跑完模拟后density.txt 里是每个 bin 的质量密度。用 Python 读取并画等高线接触角的提取方法是找到液滴轮廓线密度等于体相密度一半的等值线然后在三相接触点处拟合切线切线与基底平面的夹角就是接触角。import numpy as np import matplotlib.pyplot as plt # 读取 density.txt跳过前两行注释 data np.loadtxt(density.txt, skiprows2) # 列格式chunk_id, ncount, x, z, density x data[:, 2] z data[:, 3] rho data[:, 4] # 网格化 nx len(np.unique(x)) nz len(np.unique(z)) X x.reshape(nz, nx) Z z.reshape(nz, nx) R rho.reshape(nz, nx) # 画等高线 plt.contourf(X, Z, R, levels20, cmapviridis) plt.colorbar(labelDensity (g/cm3)) plt.xlabel(x (Angstrom)) plt.ylabel(z (Angstrom)) plt.savefig(density_map.png, dpi300)画出来之后你会看到液滴的密度分布呈半圆形。取体相密度的一半作为阈值提取轮廓然后用最小二乘拟合圆圆心到接触点的连线与基底夹角就是接触角。我实测 Cu 在 SiC 上的接触角约 135°跟实验值吻合。验证成功的标志有三个一是 density.txt 里液滴区域的密度稳定在 Cu 的体相密度附近约 8.9 g/cm³二是 dump.xyz 在 OVITO 里看液滴形状不再随时间明显变化三是接触角在最后 10 ps 内波动小于 5°。如果这三个都满足说明模拟收敛了。如果你想用 TaoToken 辅助分析可以把 density.txt 的前几行贴到模型对话里问它这个密度分布文件怎么提取接触角它会给出类似的 Python 脚本。或者把报错信息贴进去比如 ERROR: Illegal pair_style command它会告诉你 hybrid 势函数的正确写法。接入文档里有完整的 API 调用示例你可以写个脚本自动把 LAMMPS 输出发给模型做初步分析。5. 本篇常见错误排查从 401 到 Lost atoms跑这个案例最容易遇到的报错我列一下对照着排查。报错 1ERROR: Illegal pair_coeff command这是 hybrid 势函数配置错误。检查三点pair_style 里势函数顺序是否跟 pair_coeff 一致Tersoff 那行的元素顺序是否跟势函数文件里的元素顺序一致LJ 的 atom type 对是否写对。我见过有人把pair_coeff 1 3 lj/cut写成pair_coeff 1 2 lj/cut结果 Cu-Si 用了 Cu-C 的参数接触角直接偏了 20°。报错 2Lost atoms: original 5000 current 4998原子丢失通常是初始结构有重叠原子或者 timestep 太大。解决办法用delete_atoms overlap 0.5 all all删除重叠原子把 timestep 从 0.001 降到 0.0005检查 data 文件里液滴和基底的距离是否太近。报错 3ERROR: Compute chunk/atom bin/2d requires a bin sizecompute chunk/atom bin/2d x lower 2 z lower 2里的 2 是 bin 尺寸单位是 Å。如果你写成bin/2d x lower z lower就会报这个错。另外注意units box要加上否则用的是晶格单位。报错 4API 调用返回 401如果你用 TaoToken 辅助分析时遇到 401检查 API Key 是否复制完整有没有漏掉sk-前缀Base URL 是否写成https://taotoken.net/api不要加 UTM 参数到 API 地址。Key 管理页面可以重新生成旧 Key 会立即失效。报错 5ERROR: Fix ave/chunk requires a compute chunk/atomfix ave/chunk必须跟在compute chunk/atom后面而且 compute 的 ID 要对应。我脚本里 compute ID 是 1fix 里写fix 02 all ave/chunk 1 200 200 1 density/mass第一个 1 就是 compute ID。如果你改成compute mychunk all chunk/atom ...fix 里就要写fix 02 all ave/chunk mychunk ...。报错 6接触角算出来是 0° 或 180°这通常是密度阈值取错了。体相密度的一半是常用阈值但如果液滴很小半径小于 15 Å表面效应会导致密度分布展宽阈值要适当调整。另外检查 density.txt 的列顺序不同 LAMMPS 版本输出格式可能不同用head density.txt确认一下。报错 7ERROR: Out of range atoms - cannot compute PPPM这个跟润湿模拟无关但如果你不小心加了 kspace_style 就会遇到。金属液滴润湿不需要 PPPM因为 EAM 和 Tersoff 都是短程势LJ 也是短程。把 kspace_style 那行删掉即可。排查顺序建议先看 log 文件里第一个 ERROR 出现的位置定位到具体命令行然后检查该命令的参数格式最后用最小可复现脚本逐步加命令找到出问题的那一步。TaoToken 的模型对话可以帮你快速解释报错含义但最终还是要回到 LAMMPS 文档确认参数。6. 从单次模拟到批量工作流长期编码与 Agent 辅助单次润湿模拟跑通后下一步通常是参数扫描不同温度1200K、1400K、1600K、不同液滴尺寸、不同基底晶面。这时候手动改 in 文件效率太低我习惯用 Python 脚本生成批量输入然后提交到集群。import os temps [1200, 1400, 1600] for T in temps: with open(fin.wetting_{T}, w) as f: f.write(f units metal boundary p p p atom_style atomic read_data sic_cu.data pair_style hybrid eam/fs tersoff lj/cut 10 pair_coeff * * eam/fs Cu1.eam.fs NULL NULL Cu pair_coeff * * tersoff SiC.tersoff C Si NULL pair_coeff 1 3 lj/cut 0.048658808 2.800759718 pair_coeff 2 3 lj/cut 0.095209495 3.140957657 thermo 100 thermo_style custom step temp pe region bot block INF INF INF INF INF 6 units box group bot region bot velocity all create 300 8989 velocity bot set 0 0 0 fix 01 bot setforce 0 0 0 fix 1 all nvt temp 300 300 0.1 run 1000 unfix 1 reset_timestep 0 fix 1 all npt temp 300 {T} 0.1 iso 0 0 1 run 1000 unfix 1 reset_timestep 0 compute 1 all chunk/atom bin/2d x lower 2 z lower 2 units box fix 02 all ave/chunk 1 200 200 1 density/mass file density_{T}.txt fix 1 all nvt temp {T} {T} 0.1 run 30000 )这个脚本生成三个输入文件分别对应三个温度。提交任务用lmp -in in.wetting_1200 后台跑或者写 PBS/Slurm 脚本提交到集群。跑完后用统一的 Python 脚本提取接触角画温度-接触角曲线。长期做这类工作Coding Plan 的价值就体现出来了你可以让模型帮你生成批量脚本、检查参数一致性、甚至自动解析 log 文件提取关键数据。比如把 log 文件里的 thermo 输出贴给模型让它算平均势能或者把多个 density.txt 的接触角结果汇总成表格。这些重复性工作交给模型你专注在物理分析上。最后给一个实用技巧润湿模拟的收敛判断不要只看接触角还要看液滴的质心高度和回旋半径是否稳定。我通常会在 fix ave/chunk 里同时输出 density/mass 和 density/number两个密度分布一致才说明统计可靠。另外dump 频率不要太高200 步一次对于 30000 步的模拟会产生 150 帧文件大小可控OVITO 打开也不卡。如果你要算界面扩散可以在润湿阶段加compute msd追踪 Cu 原子在 SiC 中的扩散深度这个后续再展开。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询