
科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载导读fix lb/viscous是 LAMMPS LATBOLTZ 包中与fix lb/fluid配套的核心命令当系统中存在显式格子玻尔兹曼Lattice-BoltzmannLB流体时它负责把流体对粒子的水动力反作用力施加到 MD 粒子上使粒子随流体漂移等效于一个流体被显式建模的 Langevin 恒温器。本文结合 fix_lb_viscous 官方文档、fix_lb_fluid 文档 与 源码实现讲解其语法、底层力计算、与积分器/热噪声的配合方式并通过 LATBOLTZ 包自带的微流变、拖曳、聚合物易位等示例给出可直接运行的实战配置。命令定位LATBOLTZ 包与显式 LB 流体LATBOLTZ 包在 LAMMPS 中实现了一个覆盖整个模拟域的背景格子玻尔兹曼流体用于模拟受水动力影响的 MD 粒子。该包位于 src/LATBOLTZ共提供三个 fix见 src/LATBOLTZ/README文件命令职责fix_lb_fluid.cppfix lb/fluid在网格上创建并演化 LB 流体接收粒子对流体施加的力fix_lb_viscous.cppfix lb/viscous把流体的水动力反作用力施加到粒子上fix_lb_momentum.cppfix lb/momentum周期性清零系统粒子流体总动量根据 Packages_details.rstLATBOLTZ 包由 University of Western Ontario 的 Frances Mackay 与 Colin Denniston 开发要求 LAMMPS 以 MPI 并行模式构建——fix_lb_fluid.h中通过#error The LATBOLTZ package cannot be compiled in serial with MPI STUBS强制了这一约束因此不能使用串行 Makefile 编译。关键的一点是fix lb/fluid只计算粒子施加给流体的力本身并不把流体对粒子的水动力反作用力加回粒子详见 fix_lb_fluid 文档 中的 note。如果只使用fix lb/fluid而不搭配fix lb/viscous物理上等价于一个质量无穷大的粒子穿过流体——因为粒子与流体的碰撞不会改变粒子速度。fix lb/viscous正是唯一负责把水动力hydrodynamic力写入粒子总受力的途径。语法与示例fix lb/viscous的语法极为简洁没有任何额外参数fix ID group-ID lb/viscousID、group-ID的语义与所有 fix 命令 一致lb/viscous是该 fix 的风格名。官方示例fix 1 flow lb/viscous由于 LATBOLTZ 包的多个实例脚本都直接沿用了这一写法例如 microrheology/in.microrheology、translocation/in.translocation、dragforce/in.dragtest实际使用中最常见的形态是fix 2 FluidAtoms lb/viscous即把 fix 施加到与流体相互作用的粒子组例如胶体颗粒表面的壳层原子FluidAtoms上。工作原理拖曳力与质量因子与 fix viscous 的关系官方文档明确指出fix lb/viscous与 fix viscous 类似但只能在通过fix lb/fluid创建了 LB 流体的系统中使用并替代fix viscous。fix viscous施加的阻尼力是F_i -γ·v_iγ 由用户直接给定量纲为力/速度而fix lb/viscous无需用户指定任何阻尼系数——流体速度场、局部流体质量和力耦合常数全部由fix lb/fluid在内部计算完成。底层力计算源码视角从 fix_lb_viscous.cpp 的post_force()可以看出核心逻辑double **f atom-f; double *massp fix_lb_fluid-massp; double **hydroF fix_lb_fluid-hydroF; if (rmass) { for (int i 0; i nlocal; i) if (mask[i] groupbit) { massfactor rmass[i] / (rmass[i] massp[i]); f[i][0] hydroF[i][0] massfactor * f[i][0]; f[i][1] hydroF[i][1] massfactor * f[i][1]; f[i][2] hydroF[i][2] massfactor * f[i][2]; } }即每个原子的最终受力为F_total F_hydrodynamic (m_particle / (m_particle m_fluid_local)) · F_other其中hydroF[i]是fix lb/fluid内部计算并保存的水动力力源自在 fix_lb_fluid.cpp 中由F_jα γ(v_n - u_f)ζ反演得到的粒子所受流体作用力单位为 LAMMPS 单位massp[i]是该粒子所耦合的代表性流体质量m_u在 fix_lb_fluid.cpp 中由mnode * dm_lb换算得到massfactor用于把粒子原有的其他受力如成键、硬球排斥按质量比拆分一部分留给粒子、一部分传给流体保证粒子所耦合流体系统的动量守恒。这一设计的物理含义是fix lb/fluid内部按公式γ (2·m_u·m_v) / (m_u m_v) · (1/Δt)计算力耦合常数见 fix_lb_fluid 文档使粒子与其周围流体在时间步末速度一致——类似约束如 SHAKE会扣除部分自由度这些自由度在算法内部被自动计入。fix lb/viscous在POST_FORCE阶段把流体反力合入粒子总力随后由任何内置积分器完成粒子运动积分。力方向的直观理解官方文档将该 fix 的作用概括为对每个原子施加粘性力使其随流体以相同速度运动——流体对粒子的拖曳力方向与粒-流相对速度相反v_n - u_f这正是无滑移 Stokes 拖曳的离散实现而等大反向的力通过fix lb/fluid施加到流体的对应网格点上源码中以Ffull[k]通过插值权重TfP[isten]分布回流体网格见 fix_lb_fluid.cpp从而构成粒子-流体的双向动量交换。与 fix lb/fluid 的配合显式流体的Langevin 等效fix lb/viscous必须与fix lb/fluid成对使用。当fix lb/fluid指定了noise选项热 LB 算法基于 Adhikari 等人的 fluctuating lattice Boltzmann 方法时流体自带涨落粒子在受到拖曳力的同时还会感受到随机碰撞力从而被热化到与流体相同的温度。官方文档给出的等价关系是fix lb/viscousfix lb/fluid 内置积分器如fix nve或fix rigid≈fix langevin但此处流体是显式的差异在于普通fix langevin中的随机力与阻尼项全部来自隐式溶剂模型而 LATBOLTZ 方案中能量注入与耗散均来自真实演化的流体场因此可以自然再现布朗运动、流体力学相互作用HI与流动场耦合等效应。粒子的温度可以通过fix lb/fluid输出的全局标量监测f_ID可被thermo_style等输出命令访问。该标量是粒子组 与之约束共同运动的流体的当前温度由动能和内部计算的总自由度得出。若粒子还受额外约束例如用fix rigid刚性积分被约束扣除的自由度不会自动计入此时需通过fix lb/fluid的dof关键字手动指定自由度总数。此外fix lb/fluid还输出一个含 5 项的全局数组第 1 项为流体温度第 2 项为流体粒子总质量第 3~5 项为总动量三分量均可用于输出与守恒量监控。实战配置基于官方示例的完整用法LATBOLTZ 包在 examples/PACKAGES/latboltz 下提供了 9 组示例microrheology、translocation、polymer、diffusingsphere、confined_colloid、dragforce、pit_geometry、planewall、toycar全部以fix lb/viscous作为水动力反馈环节。以下提炼三种典型模式。模式一微流变学——刚性胶体在热流体中布朗运动microrheology/in.microrheology 模拟两个胶体颗粒在水中的布朗运动其核心配置为units nano dimension 3 boundary p p p atom_style molecular neighbor 0.3 bin neigh_modify delay 0 every 1 comm_modify cutoff 2.5 # 通信截断至少为 2 dx pair_style lj/cut 5.88 pair_coeff * * 0.0 0.0 5.88 pair_coeff 1 1 100.0 5.238484463 5.88 pair_modify shift yes mass * 0.0002398 timestep 0.00025 group ForceAtoms type 1 # 胶体中心不直接与流体作用负责硬球势 group FluidAtoms type 2 # 胶体表面壳层与流体作用 fix 1 FluidAtoms lb/fluid 1 1.0 0.0009982071 dx 1.2 stencil 2 noise 300.0 2762 fix 2 FluidAtoms lb/viscous fix 3 all rigid molecule fix 4 all lb/momentum 50000 linear 1 1 1 run 2000要点注释中明确说明fix lb/fluid只计算粒子对流体的力反作用力必须由fix lb/viscous完成脚本注释原文this is accomplished through the use of the lb/viscous fix水的参数取viscosity1.0、density0.0009982071、dx1.2stencil 2使用三线性插值模板支撑 8 个格点默认选项适合贴近壁面/其他物体的场景noise 300.0 2762启用 300 K 热 LB 流体使粒子获得布朗运动胶体作为刚性分子整体运动fix 3 all rigid molecule每 50000 步用fix lb/momentum清零系统总动量以防止数值误差积累邻居列表须满足delay 0 every 1且 bin 尺寸小于 LB 网格间距保证粒子始终处于其所属处理器的 LB 网格内否则报错终止。模式二拖曳测试——外力驱动下测量水动力阻力dragforce/in.dragtest 以恒定外力拖拽胶体粒子穿过 LB 流体用于拖曳系数drag测试fix drag all addforce ${node_force} v_oscillateY v_oscillateZ # 外力须在 lb/fluid、lb/viscous 之前定义 fix FL all lb/fluid 1 1.0 0.0009982071 stencil ${stpts} dx 1.2 fix 2 all lb/viscous fix 3 all nve # 单节点粒子用 NVE多节点复合粒子用 rigid脚本通过变量stpts2/3/4可切换三线性、3 点浸没边界IBM支撑 27 格点与 4 点 Keys 插值支撑 64 格点模板目录下的多个log.*文件即对应不同插值模板的对照输出。值得注意的是脚本注释强调外部驱动力addforce必须定义在lb/fluid与lb/viscous之前以保证力施加顺序符合 LATBOLTZ 的内部约定。模式三易位/受限流动——scaleGamma 设定无限质量粒子translocation/in.translocation 模拟粗粒化聚合物在压差驱动流中穿过固态纳米孔fix 1 FluidAtoms lb/fluid 1 0.1 0.00009982071 dx 1.0 scaleGamma 3 -1 stencil 2 pressurebcx 1200 noise 300.0 5252 fix 2 FluidAtoms lb/viscous fix 3 Polymer rigid/small molecule fix freeze WallAtoms setforce 0 0 0这里scaleGamma 3 -1将第 3 类原子孔壁原子被setforce冻结的力耦合常数 γ 置为 -1从而在 fix_lb_fluid.cpp 中走Gamma[type[i]] 0分支——进入粒子静止/指定运动、质量趋向无穷的极限流体仍感受到来自壁面的阻力但粒子的hydroF被置零hydroF[i][k] 0.0这正是官方文档所述无限质量粒子极限的显式实现。同时pressurebcx 1200在 x 方向施加压力跳变驱动流动noise提供温度涨落。模式四流体驱动刚体玩具车演示toycar/in.toycar 以 cgs 单位构建一辆由圆柱、棱柱拼装而成的玩具车在fix FL all lb/fluid ... zwall_velocity 0 0创建的流体中行驶fix FL all lb/fluid 1 0.0002 ${density} stencil 2 dx ${dx} zwall_velocity 0 0 fix 2 all lb/viscous fix 4 not_wheels nve fix 3 wheels rigid group 4 gcylinder1 gcylinder2 gcylinder3 gcylinder4 ...zwall_velocity 0 0给 z 方向上下壁面指定 y 向速度需boundary p p f固定壁面边界lb/viscous施加于全部原子all轮子按刚性组积分、其余部件 NVE 积分是流动场驱动复杂形状刚体的直观展示。重启、输出与能量最小化行为fix lb/viscous本身不产生任何重启或输出量其行为与fix viscous完全一致见 fix_viscous 文档 的对应小节重启不向二进制重启文件写入任何信息fix lb/fluid的流体数据可经其write_restart/read_restart关键字独立保存但与主 LAMMPS 重启文件互不关联fix_modify所有选项均不适用输出不存储全局或每原子量温度监测请使用fix lb/fluid的标量输出run start/stop不支持能量最小化min_post_force()会调用post_force()见 fix_lb_viscous.cpp即最小化时该 fix 的力依然生效但只能配合允许非保守力的阻尼动力学最小化器使用如 damped dynamics 类的min_style详见 min_style 文档。从源码看该 fix 通过setmask()注册了POST_FORCE、POST_FORCE_RESPA与MIN_POST_FORCE三个钩子fix_lb_viscous.cpp因此同时支持 Verlet 积分、r-RESPA 多时间步积分post_force_respa仅在最外层 level 生效见 fix_lb_viscous.cpp与最小化流程。使用限制与构建前提包依赖属于 LATBOLTZ 包必须启用该包并完成 MPI 构建-D PKG_LATBOLTZon或make yes-latboltz详见 Build package 文档 与 Packages_details.rst顺序约束必须在fix lb/fluid之后定义构造时即通过modify-get_fix_by_style(lb/fluid)查找 LB 流体找不到则直接报错见 fix_lb_viscous.cpp组约束lb/viscous组内的原子必须同时属于fix lb/fluid的组否则构造时报错Atoms must be in the fix lb/fluid group to apply a fluid force to themfix_lb_viscous.cpp——这也是各示例中两个 fix 使用同一组名如FluidAtoms的原因区域约束fix lb/fluid只能用于正交模拟域边界条件仅支持p p p、p p f、p f f三种一致组合shrunk-wrapped 边界不允许见 fix_lb_fluid 文档积分器必须搭配内置积分器fix nve或fix rigid等使用lb/viscous本身不积分粒子运动。相关命令与引用文献相关命令fix lb/fluid、fix lb/momentum、fix viscous、fix langevin、fix nve、fix rigid源码LATBOLTZ 包实现见 src/LATBOLTZ包级说明见 src/LATBOLTZ/README示例完整可运行脚本见 examples/PACKAGES/latboltz各目录附带对应 log 输出可供对照验证算法细节与测试结果请参阅官方文档引用的文献Denniston, C., Afrasiabian, N., Cole-Andre, M.G., Mackay, F. E., Ollila, S.T.T., and Whitehead, T., LAMMPS lb/fluid fix version 2: Improved Hydrodynamic Forces Implemented into LAMMPS through a lattice-Boltzmann fluid, Computer Physics Communications 275 (2022) 108318若在发表的研究工作中使用该 fix请按此引用流体-粒子保守力耦合细节可参见 Mackay, F. E., and Denniston, C., J. Comput. Phys. 237 (2013) 289-298热fluctuatingLB 算法参见 Adhikari, R., Stratford, K., Cates, M. E., and Wagner, A. J., Europhys. Lett. 71 (2005) 473-479。赞分享科研科学计算高性能计算【免费下载链接】lammpsPublic development project of the LAMMPS MD software package项目地址https://gitcode.com/gh_mirrors/la/lammps点击查看免费下载相关推荐LAMMPS 中的 fix lb/momentum消除含格子玻尔兹曼流体体系的系统线性动量漂移LAMMPS 中的 fix lb/momentum消除含格子玻尔兹曼流体体系的系统线性动量漂移 导读 fix lb/momentum 是 LAMMPS LAT科研科学计算高性能计算Jellyfin Media Player强大的跨平台媒体播放解决方案Jellyfin Media Player强大的跨平台媒体播放解决方案 Jellyfin Media Player 是一款基于 Jellyfin web 界面高性能计算科学计算LAMMPS fix nvt/body 命令详解体粒子body particle的 Nose/Hoover 恒温 NVT 集成LAMMPS fix nvt/body 命令详解体粒子body particle的 Nose/Hoover 恒温 NVT 集成 本文基于 LAMMPS 官科研科学计算高性能计算上一篇微信视频号直播数据抓取的3个核心难题与wxlivespy的解决方案下一篇LDAP测试工具告别繁琐调试让LDAP集成变得轻松自如创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考