- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
导读
fix deform是 LAMMPS 中用于在动力学模拟过程中动态改变仿真盒(simulation box)体积与形状的核心命令,广泛应用于单轴拉伸/压缩、剪切流(shear flow)、振荡应变等非平衡分子动力学(NEMD)模拟。本文以 doc/src/fix_deform.rst 为骨架,结合 src/fix_deform.cpp、examples/nemd/in.nemd 与 unittest 中的测试用例,完整讲解命令语法、全部样式(style)的数学含义、关键字选项、盒翻转(box flip)机制,并给出可直接复制的实战输入文件。
1. 命令总览与语法
fix deform的基本语法为:
fix ID group-ID deform N parameter style args ... keyword value ...- ID、group-ID:与所有
fix命令一致(参见 fix 命令文档)。 - N:每隔多少个时间步更新一次仿真盒。
N > 0时在每个时间步结束时更新;N = 0时在每次位置更新之后立即更新,这是精确 NEMD 模拟(配合fix nvt/sllod)所要求的,但与variable样式不兼容。 - parameter/args:一个或多个形变参数序列,可同时、独立地控制多个方向。
- keyword value:零个或多个可选关键字。
1.1 可调节参数
正交(orthogonal)仿真盒有 3 个可调参数(x、y、z);三斜(triclinic,非正交)仿真盒有 6 个可调参数(x、y、z、xy、xz、yz)。任意多个参数可以同时、独立地设置。
三斜盒前提:从源码看,当解析到
xy/xz/yz参数时,fix_deform.cpp 会直接检查domain->triclinic,若当前盒为正交盒则报错:Fix {} tilt factors require triclinic box。即使初始倾斜因子(tilt factor)全为 0,只要 fix deform 改变了 xy/xz/yz,仿真盒就必须是 triclinic。
1.2 加速器变体
本命令提供 KOKKOS 加速变体deform/kk。在 src/KOKKOS/fix_deform_kokkos.h 中注册了三种风格:
deform/kk(按设备自动选择)deform/kk/device(强制设备端)deform/kk/host(强制主机端)
在构建了 KOKKOS 包的 LAMMPS 中,把命令中的deform换成deform/kk即可使用。
1.3 官方示例(Syntax 小节)
fix 1 all deform 1 x final 0.0 9.0 z final 0.0 5.0 units box fix 1 all deform 1 x trate 0.1 y volume z volume fix 1 all deform 1 xy erate 0.001 remap v fix 1 all deform 10 y delta -0.5 0.5 xz vel 1.02. 参数样式(parameter/style)完整说明
2.1 x、y、z 维度支持的样式
| 样式 | 参数 | 含义 |
|---|---|---|
final | lo hi | 运行结束时盒边界 lo/hi(距离单位) |
delta | dlo dhi | 运行结束时盒边界的变化量(距离单位) |
scale | factor | 盒长的乘性因子(factor < 1 为压缩) |
vel | V | 盒长变化速度(距离/时间),等价于工程应变率 |
erate | R | 工程应变率(1/时间) |
trate | R | 真应变率(1/时间) |
volume | 无 | 调整该维以保持体系体积不变 |
wiggle | A Tp | 正弦振荡的振幅 A 与周期 Tp |
variable | v_name1 v_name2 | 用 equal 样式变量定义盒长变化量及变化率 |
pressure与pressure/mean样式仅存在于扩展命令 fix deform/pressure 中,不在本页范围内。
2.2 xy、xz、yz 倾斜因子支持的样式
| 样式 | 参数 | 含义 |
|---|---|---|
final | tilt | 运行结束时倾斜因子(距离单位) |
delta | dtilt | 运行结束时倾斜因子的变化量 |
vel | V | 倾斜因子变化速度,等价于工程剪切应变率 |
erate | R | 工程剪切应变率(1/时间) |
erate/rescale | R | 按当前垂直方向盒长重新标度的剪切应变率 |
trate | R | 真剪切应变率(1/时间) |
wiggle | A Tp | 正弦振荡振幅与周期 |
variable | v_name1 v_name2 | 变量驱动的倾斜因子变化 |
注意:改变三斜盒的倾斜因子不会改变盒体积。
2.3 可选关键字
remap=x(默认)|v|none:盒形变时原子坐标/速度的重映射方式。flip=yes(默认)|no:允许/禁止盒在高度倾斜时发生盒翻转。units=lattice(默认)|box:距离参数的单位(晶格单位或盒单位)。couple、vol/balance/p、max/rate、normalize/pressure:这四个关键字仅属于fix deform/pressure,详见 fix_deform_pressure.rst。
源码层面,参数解析与关键字解析分别对应FixDeform构造函数(fix_deform.cpp)与options()方法(fix_deform.cpp)。内部每种样式用一个Set结构体记录(见 fix_deform.h),其中枚举了全部样式:NONE, FINAL, DELTA, SCALE, VEL, ERATE, TRATE, VOLUME, WIGGLE, VARIABLE, PRESSURE, PMEAN, ERATERS。
3. 盒长样式:工程应变率与真应变率
3.1 final / delta / scale:恒定位移
final、delta、scale、vel、erate都属于"恒定位移"型变化,等价于"恒定工程应变率"——盒维度随时间线性地从初始值过渡到最终值。
final:直接给出最终 lo/hi 边界。delta:给出 lo/hi 边界各自的变化量(正/负均可)。scale:给出乘性因子。例如初始盒长 10、因子 1.1,则最终盒长为 11;因子小于 1.0 表示压缩。
3.2 vel:以速度定义盒长变化
vel指定盒长变化速度 V(距离/时间单位),等价于"恒定工程应变率",其中 rate = V/L0,L0 为初始盒长。官方示例:初始盒长 100 Å,V = 10 Å/ps,则 10 ps 后盒长翻倍,20 ps 后变为三倍。
3.3 erate:恒定工程应变率
盒长随时间按以下规律变化:
L(t) = L0 (1 + erate*dt)其中 dt 为流逝时间。若 R = 0.1、时间单位为皮秒,意味着盒长每个皮秒增加其初始长度的 10%:1 ps 后应变 0.1,2 ps 后 0.2……R = -0.01 则表示每 ps 缩短初始长度的 1%。由于工程应变率基于原始盒长计算,以 R = 1 运行 10 ps 会把盒长放大 11 倍(应变为 10),这与trate的行为有本质区别。
3.4 trate:恒定真应变率
盒长随时间按指数规律变化:
L(t) = L0 exp(trate*dt)真应变率的"率"恒定,盒长变化非线性。若 R = ln(1.1),盒长每 ps 增加其当前长度的 10%:1 ps 后应变 0.1,2 ps 后 0.21……以 R = ln(2) 运行 10 ps,盒长不是放大 11 倍而是放大 2^10 = 1024 倍(每 ps 翻倍)。
组合技巧:若要以恒定速率改变盒体积(或横截面积),可同时对多个维度施加
erate或trate。例如要在 1 ps 内盒体积翻倍:令 x、y、z 均为erate M,M = pow(2,1/3) - 1 ≈ 0.26(每个维度增长 26%,体积翻倍);或三者均为trate M,M = ln(1.26) ≈ 0.231。
3.5 volume:保持体积/横截面积不变
volume样式在其它维度被显式改变时,反算本维度的长度以维持体积(或仅两维时的横截面积乘积)恒定。源码中的三种子模式可见于apply_volume()(fix_deform.cpp)与Set结构体的substyle字段(fix_deform.h):
- ONE_FROM_ONE:一维固定(
fixed)、一维动态(dynamic1),本维随之调整,保持"固定维 × 动态维"乘积不变(即横截面积守恒)。 - ONE_FROM_TWO:两维均动态,本维调整为两维动态长度的反比,保持体积不变。
- TWO_FROM_ONE:多维共同压缩,y、z 按比例收缩以保持相对纵横比不变。
官方示例:x scale 1.1 y scale 1.1 z volume在 x、y 增长时收缩 z,保持 x·y·z 体积恒定;x scale 1.1 y volume z volume则同时收缩 y、z。
物理提醒:对固体或液体,单维拉伸而其它两维恒定会隐含密度变化。用
volume保持体积虽然更合理,但对泊松比非 0.5 的材料/势函数可能不正确;替代方案是对未被 fix deform 控制的两维使用零外压的fix npt aniso,让它们动态响应。
3.6 wiggle:正弦振荡
盒长随时间按正弦规律变化:
L(t) = L0 + A sin(2π t/Tp)A > 0 时盒先膨胀后收缩;A < 0 时先收缩后膨胀。振幅可指定为晶格单位或盒单位。
3.7 variable:任意函数驱动
variable样式通过两个 equal 样式变量控制盒长:
- v_name1:盒长变化量(距离单位,注意是 box 单位而非 lattice 单位),应返回 0.0 作为起始值,> 0 膨胀、< 0 压缩。公式中可以引用当前时间步。
- v_name2:盒长变化率(距离/时间),即 v_name1 的时间导数。此量被 LAMMPS 内部用于在原子跨越周期边界时重置速度;其它样式由程序内部计算,而
variable样式必须由用户提供。
官方示例——用变量复现wiggle的振荡形变:
variable A equal 5.0 variable Tp equal 10.0 variable displace equal "v_A * sin(2*PI * step*dt/v_Tp)" variable rate equal "2*PI*v_A/v_Tp * cos(2*PI * step*dt/v_Tp)" fix 2 all deform 1 x variable v_displace v_rate remap v同样的变量方式也适用于倾斜因子(把x换成xy即可)。源码中variable样式在init()里校验变量存在且为 equal 样式(fix_deform.cpp),在apply_strain()中通过compute_equal()求值并更新 h_rate(fix_deform.cpp)。
除
final外,scale、vel、erate、trate、volume、wiggle、variable样式都以盒中点为中心进行膨胀/压缩(源码中可见 lo/hi 的对称 shift 处理,如 fix_deform.cpp)。
4. 倾斜因子样式:剪切变形详解
4.1 final / delta / vel / erate:恒定工程剪切应变率
这四个样式使倾斜因子随时间线性变化。
vel:指定倾斜因子变化速度 V(距离/时间),rate = V/L0,L0 为剪切方向垂直的初始盒长。官方示例:初始倾斜因子 5 Å,V = 10 Å/ps,1 ps 后倾斜因子为 15 Å,2 ps 后为 25 Å。erate:倾斜因子随时间变化为
T(t) = T0 + L0*erate*dt剪切应变 = 偏移/长度(如 xy 变形中,偏移沿 x 方向、垂直长度取 y 盒长)。R = 0.1 时剪切应变每 ps 增加 0.1;R = 1 或 2 时倾斜因子每 ps 增加 1 或 2 个垂直盒长;R = -0.01 表示剪切应变每 ps 减少 0.01。
4.2 erate/rescale:随当前盒长重新标度(新版特性)
erate/rescale与erate类似,但倾斜因子变化依赖当前(而非初始)的垂直盒长 L,并计入其它方向的伸长与剪切耦合。其演化方程为:
d T_αβ(t)/dt = L_β * erate + (1/L_α) * (dL_α/dt) * T_αβ(t)其中 α、β 为两个方向(如 x 与 y、y 与 z)。xz 倾斜因子额外包含 xy 剪切与 yz 倾斜的耦合项:
d T_xz(t)/dt = L_z * erate + (1/L_x) * (dL_x/dt) * T_xz(t) + (1/L_y) * (dT_xy/dt) * T_yz(t)当 x/y/z 使用trate、xy/xz/yz 使用erate/rescale时,等价于按恒定流张量演化晶格矢量:
∇u = [ trate_x 0 0 ] [ erate_xy trate_y 0 ] [ erate_xz erate_yz trate_z ]倾斜因子在 x/y/z 盒长变化前后分两个半步积分,顺序分别为 xz、yz、xy 与逆序,保证全步可逆。该选项在 L 随时间变化时非常有用,fix nvt/sllod计算混合流粘度时要求使用它。混合 xy 与 yz 剪切时,可将 xz 设为erate/rescale 0.0以维持恒定 ∇u。
源码佐证:
ERATERS样式在 fix_deform.h 中定义,其半步步进、xz 修正项与翻转后 h_rate 重算逻辑分布在apply_strain()、update_domain()、pre_exchange()中(如 fix_deform.cpp 与 fix_deform.cpp)。注意该样式要求盒为 triclinic,且与 KOKKOS/OPENMP 等加速变体的兼容性以当前仓库源码为准。
4.3 trate:恒定真剪切应变率
倾斜因子按指数变化:
T(t) = T0 exp(trate*dt)若 R = ln(1.1),剪切应变(或倾斜因子)每 ps 增加 10%;R = ln(2) 每 ps 翻倍。使用trate时初始倾斜因子必须非零——源码在init()中强制检查(fix_deform.cpp)。
注意:
erate/trate控制倾斜因子时假设垂直盒长恒定;若垂直盒长同时被其它参数改变,其对剪切应变的影响会被忽略。
4.4 wiggle 与 variable:倾斜因子的振荡与变量驱动
倾斜因子的wiggle遵循T(t) = T0 + A sin(2π t/Tp);variable样式同样要求 v_name1 返回倾斜因子变化量、v_name2 返回变化率(距离/时间)。官方变量示例(把x换为xy):
variable A equal 5.0 variable Tp equal 10.0 variable displace equal "v_A * sin(2*PI * step*dt/v_Tp)" variable rate equal "2*PI*v_A/v_Tp * cos(2*PI * step*dt/v_Tp)" fix 2 all deform 1 xy variable v_displace v_rate remap v5. 盒翻转(box flip)机制
5.1 倾斜因子的界限
LAMMPS 中 triclinic 盒的倾斜因子(xy、xz、yz)通常被限制在平行方向盒长的一半以内。例如 xlo = 2、xhi = 12(盒长 10),则 xy 倾斜因子必须处于 -5 到 5 之间;xz、yz 同理。这并非限制,因为倾斜因子 = ..., -15, -5, 5, 15, 25, ... 的构型彼此等价。
5.2 翻转算法
若倾斜因子在模拟中超过该范围,盒会"翻转"到另一个等价极限并继续模拟。官方例子:初始 xy = 0.0、指定xy final 100.0,则模拟过程中 xy 从 0 涨到 5、翻转为 -5、再涨到 5、再翻转……共翻转 10 次,最终倾斜因子为 0.0。每次翻转时原子被按适当方式重映射进新盒。
翻转算法在源码update_domain()中实现(fix_deform.cpp):先检查各倾斜因子与垂直长度的比值是否超过 ±0.5,再按 yz → xz → xy 的优先级对tilt_flip做 ±一个周期长度的调整,并通过domain->image_flip()修正镜像标志(image flags)。
唯一例外:倾斜因子的第一维(如 xy 中的 x)为非周期时,界限不被强制——因为该维非周期使翻转不改变原子位置;但极端倾斜会让通信子域畸变,模拟效率下降。
5.3 flip 关键字
flip yes(默认):强制界限,超出即翻转。flip no:倾斜继续增大而不翻转。大幅形变下盒形会严重倾斜,幽灵原子通信量剧增、运行效率下降;极端倾斜下 LAMMPS 可能丢失原子并报错。
6. remap 关键字:原子坐标/速度的重映射
每次盒尺寸或形状改变时,remap决定原子如何适应新盒:
remap x(默认):对 fix 组内的原子坐标做仿射重映射,使其"跟随"盒的仿射变形。适用于固体——原子并非因速度追踪盒变化,而是仅因重映射而移动。remap v:组内原子跨越周期边界时,其速度加上 lo/hi 边界的速度差(该差可含倾斜分量,如原子跨 y 周期边界时 x 速度的增量)。适用于流体——原子自行响应盒形变并获得匹配盒变化的速度。remap none:两者都不做。
源码实现:remap x时对组内原子执行domain->x2lamda()/lamda2x()转换(fix_deform.cpp);remap v的边界速度差处理由 Domain 层完成。remap选项在options()中映射为Domain::X_REMAP / V_REMAP / NO_REMAP三个枚举(fix_deform.cpp)。
6.1 与 fix nvt/sllod 的配合(NEMD 关键)
- 使用
fix nvt/sllod(默认peculiar no)做 NEMD 时,应使用remap v:SLLOD 算法负责调整原子位置与速度以产生匹配盒形变的速度剖面,因此 fix deform 不应重映射坐标,但应重映射穿越周期边界的速度。若fix nvt/sllod使用peculiar yes,则 fix deform 应使用remap none。LAMMPS 会在两者不匹配时给出警告。 - 若使用
remap v但未加恒温器,则没有驱动力使原子流场与盒形变一致(例如盒底部变形速度为 0、顶部为 10,而原子流剖面可能是 -5 到 +5)。可用fix ave/chunk、compute temp/deform、compute temp/profile监控;用velocity ramp命令施加匹配的初始速度剖面,或用fix nvt/sllod的kick yes选项注入正确流场,可加速平衡并最小化周期边界穿越。 - 刚性体:若定义了
fix rigid且remap x,刚体质心会被重映射到变化后的盒中(无论刚体原子是否在 fix deform 组内);remap v不会重映射质心速度,因为fix nvt/sllod目前不处理刚体粒子。
7. units 关键字与其它可选参数
7.1 units = lattice | box
box:距离参数使用units命令定义的标准距离单位(如 real/metal 单位的 Å)。lattice(默认):距离参数以晶格间距为单位,需事先用lattice命令定义晶格间距。
该选择同样影响vel样式(距离/时间单位),但不影响variable样式——若要在变量公式中引用晶格间距,请使用thermo_style的xlat/ylat/zlat关键字。
源码层面,units lattice对应scaleflag = 1,构造函数据此将FINAL/DELTA/VEL/WIGGLE样式的数值乘以domain->lattice->xlattice/ylattice/zlattice(fix_deform.cpp),倾斜因子的缩放映射取第一维晶格常数(map[3..5] = y/x/x 晶格尺度)。
7.2 N 参数、RESPA 与多重 run
N > 0:每 N 步的时间步结束时更新盒;N = 0:每次位置更新后立即更新(end_flag = 0,挂接 POST_INTEGRATE 钩子),是fix nvt/sllod精确 NEMD 所需,但不能与variable样式并用。- 若
N = 0且run_style respa,盒在内层循环更新;rRESPA 下盒翻转推迟到外层时间步执行(源码post_integrate_respa()中通过allow_flip_change/need_flip_change控制,见 fix_deform.cpp)。
7.3 与其它 fix 的协同
未被 fix deform 指定的维度可以保持周期/非周期,也可由fix npt或fix nph控制。盒的初始尺寸/形状来自create_box、read_data或read_restart。
7.4 重启、run start/stop 与 minimize
- 本 fix 会将初始盒设置写入二进制重启文件(
write_restart()/restart(),fix_deform.cpp),配合run的 start/stop 选项可跨多个 run 连续形变。 fix_modify选项对本 fix 均不适用;本 fix 不存储任何全局或逐原子量供输出命令使用。- 能量最小化(minimize)期间不会调用本 fix。
8. 使用限制与默认值
8.1 限制(Restrictions)
- x、y、z 维度不能对经
boundary命令 shrink-wrapped(收缩包裹)的维度施加形变;xy、yz、xz 的第二维(如 xy 中的 y)也不能是 shrink-wrapped。源码在构造函数中逐项检查并报错(fix_deform.cpp)。 - 一个模拟中只能定义一个形变命令:fix deform 或 fix deform/pressure。源码
init()中若检测到多个 deform fix 直接报错(fix_deform.cpp)。
8.2 默认值
remap = x,flip = yes,units = lattice8.3 相关命令
- fix deform/pressure:扩展本命令,额外提供
pressure、pressure/mean样式与couple、vol/balance/p、max/rate、normalize/pressure关键字。 - change_box:静态改变盒的尺寸/形状。
- fix nvt/sllod 与 compute temp/deform:NEMD 形变模拟配套。
- fix nh(npt/nph):未指定维度的恒压控制。
- 持续伸长流(extensional flow)可用 UEF 包 的
fix nve/uef等命令建模。
9. 仓库实战案例与验证
9.1 官方 NEMD 剪切示例(examples/nemd/in.nemd)
examples/nemd/in.nemd 是官方 2D NEMD 剪切模拟,展示了fix deform与fix nvt/sllod的标准搭配:
units lj atom_style atomic dimension 2 lattice sq2 0.8442 region box prism 0 10 0 8 -0.5 0.5 0 0 0 create_box 2 box create_atoms 1 box mass * 1.0 velocity all create 1.44 87287 loop geom region slice block 4 6 INF INF INF INF set region slice type 2 pair_style lj/cut 4.0 pair_coeff * * 1.0 1.0 neighbor 0.3 bin neigh_modify delay 0 every 1 fix 1 all nvt/sllod temp 1.0 1.0 1.0 tchain 1 fix 2 all deform 0 xy erate 0.01 remap v thermo 50 run 1000要点:region box prism ...构建了 triclinic 盒;fix 2 all deform 0 xy erate 0.01 remap v每步更新、以 0.01 工程剪切应变率剪切 xy 并重映射速度,与fix nvt/sllod(恒温器 + SLLOD)严格配套。注意N = 0正是 SLLOD 精确积分所要求的。
9.2 各向同性压缩与剪切的组合示例(examples/srd/tri_srd.in)
examples/srd/tri_srd.in 中同时演示了scale与erate两种用法:
fix 3 all deform 1 x scale 0.6 y scale 0.6 z scale 0.6 fix 3 all deform 1 xy erate 0.05 units box remap v第一行以scale 0.6对三个维度等比压缩(各向同性收缩 40%);第二行以units box(盒单位)指定 0.05 的工程剪切应变率。
9.3 单元测试验证(unittest)
仓库的 yaml 驱动测试覆盖了 fix deform 的数值正确性:unittest/force-styles/tests/fix-timestep-deform.yaml(fix test solute deform 1 x scale 1.2)、fix-timestep-deform_noremap.yaml与三斜盒版fix-timestep-deform_tri.yaml。这些测试以 5e-13 的 epsilon 对比固定时间步位置,验证盒形变后坐标更新的确定性。此外 unittest/examples/test_examples_elastic.cpp 等示例测试也会运行包含形变命令的弹性算例。
9.4 底层调用链小结
从源码看,一次盒更新的调用链为:end_of_step()/post_integrate()→update_box()→apply_strain()(应变型维度求目标值)→apply_volume()(volume 联动维度)→update_domain()(倾斜因子取整、盒翻转判定、原子重映射、提交新全局/局部盒)→(必要时)force->kspace->setup()重算 KSpace 系数(fix_deform.cpp)。盒翻转发生在pre_exchange()钩子(fix_deform.cpp),先于邻居重建,通过domain->image_flip()+remap_all()+ Irregular 迁移保持原子与盒同步。
9.5 镜像标志溢出提醒
长时间高速剪切模拟中,存储非折叠原子位置的镜像标志可能"回绕":默认编译设置下镜像标志限制在 -512 ≤ i ≤ 511,当原子从零标志开始穿越周期盒超过 512 次即溢出。将 LAMMPS 整数类型改为 "bigbig" 设置可把镜像标志范围扩大到约 -1,048,576 ≤ i ≤ 1,048,575,大幅降低溢出概率。
10. 快速上手清单
- 确定是否需要 triclinic 盒:只要用到 xy/xz/yz,就用
region box prism ...或create_box指定三斜盒。 - 选择参数与样式:单轴拉伸用
x erate/trate/scale/final;剪切用xy erate/erate/rescale;保体积拉伸用volume;振荡载荷用wiggle;任意时间函数用variable(同时提供变化量与变化率两个变量)。 - 选择
N:与fix nvt/sllod搭配时用N = 0;普通形变用N > 0。 - 选择
remap:固体倾向remap x,NEMD 流体配合 SLLOD 用remap v。 - 检查限制:形变维度不能 shrink-wrapped;同一模拟只能定义一个形变 fix。
- 验证结果:参考 unittest/force-styles/tests 下的 fix-timestep-deform 系列测试,或直接运行 examples/nemd/in.nemd 复现官方剪切算例。
- 科研
- 科学计算
- 高性能计算
【免费下载链接】lammps
Public development project of the LAMMPS MD software package
相关推荐
LAMMPS compute temp/deform 详解:扣除盒子变形流速度的热温度计算
LAMMPS compute temp/deform 详解:扣除盒子变形流速度的热温度计算 导读 compute temp/deform 是 LAMMPS 中面
科研科学计算高性能计算LAMMPS change_box 命令完全指南:仿真盒尺寸、形状与边界条件的动态操控
LAMMPS change_box 命令完全指南:仿真盒尺寸、形状与边界条件的动态操控 change_box 是 LAMMPS 中用于在输入脚本运行过程中动态修
科研科学计算高性能计算Deform:解锁Unity 3D模型变形的终极指南
Deform:解锁Unity 3D模型变形的终极指南 想要在Unity中创建生动的角色动画、流畅的环境特效或独特的视觉风格吗?Deform作为一款功能强大的网格
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考