Liutex涡识别法:从物理定义到Matlab与Tecplot工程实践指南
简介Liutex 方法作为第三代涡识别技术常用于替代 Q 准则、λ2 等传统方法这套资料面向流体力学研究人员与 CFD 工程师提供从理论到代码实现的一站式参考。压缩包共 6 个文件、大小 6.67MB其中 3 个 Matlab 脚本覆盖核心函数与数据写入流程配套 PDF、PPTX 讲解阐明涡定义和实现思路另有 eqn 步骤公式文件便于推导对照。已有 3582 人学习下载适合希望快速掌握 Liutex 并衔接 Tecplot 可视化的中高级学习者。通过这份资料可对照 Liutex 定义理解向量旋转与涡核提取要点直接复用或修改 Matlab 脚本生成结果再借助文档中的后处理步骤在 Tecplot 中显示涡结构减少从公式到程序的搭建时间。资料包内同时提供 PDF 全文与 PPT 演示便于从理论过渡到实践尤其对需要做流动可视化报告或课题研究的读者很有帮助。1. 为什么我卸掉了 Q 准则改学 Liutex一个新涡识别方法的前因后果做完 CFD 后处理的人大概率都被 Q 准则和 Lambda2 准则的阈值“玄学”折磨过——把阈值调得稍大大涡结构稀碎调得稍小剪切层和边界层全被当真涡渲染出来图一出来根本没法写进报告。Liutex 这个名字近两年在涡识别里越来越热它最大的不同是直接刻画流场里真实的、相对刚体旋转的那一部分而不是用某个阈值去等价成涡强度。配合 Matlab 算场、Tecplot 出图这套实现流程完全可以复现到模拟项目 X 的后处理环节中。这篇文章就是我在给某跨平台系统做流场分析时把 Liutex 从公式落实到可跑脚本的完整记录。适合手里有 CFD 数据、想摆脱阈值后处理烦恼的工程师。我们先从理论拆起因为公式里的符号没吃透后面代码里的参数就会变成纯黑匣子。2. Liutex 矢量定义的物理拆解从涡量到刚体旋转核心到底是哪一步2.1 为什么要单独定义“旋转”涡量输运场里的水分太多传统涡识别绕不开涡量 ω ∇ × u。但涡量本身不区分剪切和刚体旋转一个简单的平面库埃特流涡量处处不为零却没有一个真正的旋转核心。Q 准则把速度梯度张量拆成正对称和反对称部分用应变率去抵消旋转贡献本质上是个“能量平衡”的判断所以它对阈值相当敏感。Omega 准则通过涡量平方和应变率平方之比把旋转占优的网格筛出来鲁棒性好很多但会丢掉局部旋转轴方向这对湍流拟序结构分析很不友好。Liutex 的定义思路完全不同它认为流场中某点附近的运动可以唯一地分解成“刚体旋转部分”和“非旋转部分”刚体旋转是真正的涡核特征。Liutex 是一个矢量 R方向指向局部旋转轴大小就是刚体旋转的角速度相关量不再经过阈值筛选。换句话说算完整个流场每个网格点都会有一个明确的旋转矢量和模值后续做等值面、做剖面统计都有直接的物理含义不需要反复试阈值。这也是我后来把项目里的涡判据全部换成 Liutex 的根本原因。2.2 局部旋转轴的确定旋量代换法是怎么回事Liutex 的计算难点在于求局部旋转轴方向 r。早期论文里给出了数学定义但直接实现需要做特征值分解和约束优化。目前工程上最常用的是旋量代换法curl replacement method思路分两步第一步先算涡量 ω并归一化得到初始旋转轴方向 n ω / |ω|。在大多数流动中涡量方向和真实刚体旋转轴方向的偏差通常不大可以作为迭代初值。第二步把速度梯度张量 G ∇u 投影到以 n 为法向的平面和垂直平面上提取“真正伴随旋转”的那部分。定义变换后的张量 G’取其中包含旋转的二阶子张量计算出局部角速度 λci特征值虚部。然后把旋量值更新为R ω·r − sqrt( (ω·r)^2 − 4λci^2 )如果 ω·r 不大于 2λci说明这一点的变形以剪切为主旋转贡献为零直接赋 R 0。这个公式的关键点在于它把“涡量贡献”减去“剪切变形消耗”之后剩下的部分才算作真实旋转。这么做的好处是数学上严格物理上也不再依赖人工阈值。2.3 参与计算的物理量Rmag 与方向矢量 R 的分工在实际写代码时我会把 Liutex 结果拆成三个量来存储Liutex 矢量本身 Rx、Ry、Rz以及标量模值 Rmag。可视化时等值面尽量用 Rmag因为它是标量不会出现方向翻转导致显示断裂的问题而分析涡轴走向时用 Rx/Ry/Rz比如画涡管中心线或者沿涡轴提取剖面。有一点必须注意Liutex 方向和涡量方向并不是完全一致的。涡量方向在剪切占主导的区域可能是个斜的指向Liutex 方向因为做了二次修正更贴近刚体旋转的真实轴。这也是为什么直接用涡量矢量做 iso-surface 时会看到很多“假核”而换成 Liutex 矢量之后干净很多。后面 Matlab 代码里我也会把这两个方向都导出来方便大家自己对比差异。3. Matlab 计算 Liutex从三维速度场到 Rmag 的完整脚本与性能优化3.1 数据准备如何把 CFD 结果整理成 Matlab 能直接用矩阵CFD 软件导出的数据有两种典型形态。非结构网格数据一般是一个点表和一个连接表Matlab 处理起来要做散点插值结构化网格数据是规则的三维数组直接用索引差分就行。第一次尝试 Liutex 时我建议先用结构化网格把网格点坐标存成 X、Y、Z 三维数组速度分量存成 U、V、W 三维数组维度都是 Nx × Ny × Nz。如果你的原始数据是非结构的先用 griddata 或 scatteredInterpolant 插值到规则网格上这一步虽然损失一点精度但能让你把算法调通。常见的坑是网格间距不一致。很多程序只会输出 x/y/z 坐标不会直接给出 dx、dy、dz。我一般会检查坐标数组如果坐标是线性分布就直接算间距标量如果是非均匀网格就生成三个与网格同尺寸的间距数组。中心差分时非均匀间距的差分系数不能简单套均匀网格公式否则梯度场会有锯齿。下面的代码先按均匀网格处理非均匀情况我在后面避坑章节里单独说明。3.2 速度梯度与涡量计算用中心差分避开内置方法的限制Matlab 自带 curl 函数但它是针对二维平面场设计的三维情况下不能省事直接调。同时它也把方向定义为正切于坐标平面的旋转不符合流体力学里的右手定则标注。所以我习惯自己写梯度函数用中心差分function liu compute_liutex(U, V, W, dx, dy, dz) % 输入U/V/W 三维速度分量数组 % dx/dy/dz 网格间距标量或与 U 同尺寸的数组 % 输出Rx/Ry/Rz 分量与 Rmag 绝对值 [Nx, Ny, Nz] size(U); % 预分配空间避免循环里动态扩维 Rx zeros(Nx, Ny, Nz); Ry zeros(Nx, Ny, Nz); Rz zeros(Nx, Ny, Nz); Rmag zeros(Nx, Ny, Nz); % 边界用前向/后向差分内部用中心差分 for k 2:Nz-1 for j 2:Ny-1 for i 2:Nx-1 duidx (U(i1,j,k) - U(i-1,j,k)) / (2*dx); duidy (U(i,j1,k) - U(i,j-1,k)) / (2*dy); duidz (U(i,j,k1) - U(i,j,k-1)) / (2*dz); dvidx (V(i1,j,k) - V(i-1,j,k)) / (2*dx); dvidy (V(i,j1,k) - V(i,j-1,k)) / (2*dy); dvicz (V(i,j,k1) - V(i,j,k-1)) / (2*dz); dwidx (W(i1,j,k) - W(i-1,j,k)) / (2*dx); dwidy (W(i,j1,k) - W(i,j-1,k)) / (2*dy); dwidz (W(i,j,k1) - W(i,j,k-1)) / (2*dz); % 构造速度梯度张量 G G [duidx, duidy, duidz; dvidx, dvidy, dvicz; dwidx, dwidy, dwidz]; % 涡量 omega curl(V) wx (V(i,j,k1)-V(i,j,k-1))/(2*dz) - (W(i,j1,k)-W(i,j-1,k))/(2*dy); wy (W(i1,j,k)-W(i-1,j,k))/(2*dx) - (U(i,j,k1)-U(i,j-1,k))/(2*dz); wz (U(i,j1,k)-U(i,j-1,k))/(2*dy) - (V(i1,j,k)-V(i-1,j,k))/(2*dx); omega_norm sqrt(wx^2 wy^2 wz^2); % 如果涡量为零则这一片没有旋转 if omega_norm 1e-10 continue; end % 初始旋转轴方向取涡量归一化方向 nvec [wx, wy, wz] / omega_norm; [R, ~, ~] liutex_from_gradient(G, nvec); Rx(i,j,k) R(1); Ry(i,j,k) R(2); Rz(i,j,k) R(3); end end end Rmag sqrt(Rx.^2 Ry.^2 Rz.^2); end这块代码逻辑很直白对每个内部网格点做中心差分求速度梯度张量再求涡量归一化方向 nvec最后把梯度张量和方向交给核心子函数liutex_from_gradient去算。边界层暂时跳过否则索引会越界。需要注意如果 dx、dy、dz 是标量代码没问题如果是非均匀网格的数组这里要改成(U(i1,j,k)-U(i-1,j,k)) / (x(i1)-x(i-1))这种索引式写法。另外涡量为零的点直接 continue 掉省去后面无意义的矩阵运算。3.3 旋量代换法核心子函数解析计算 λci避免硬扛特征值分解子函数里最重要的一步是把速度梯度张量沿 nvec 方向做坐标变换。我的做法是构造一个旋转矩阵 Q让 nvec 对应新坐标系的 x 轴然后把 G 相似变换到新坐标系下。变换后 G’ 的 2x2 子块包含了垂直于旋转轴平面上的变形信息。此时可以直接用解析公式求 λciλci sqrt( max(0, 4*det - trace^2) ) / 2其中 det 和 trace 都是那个 2x2 子块的行列式与迹。解析公式比逐点调用 eig 快两个数量级大阵列仿真的性能瓶颈一般就在这一步。function [Rvec, Rscalar, flag] liutex_from_gradient(G, nvec) % 输入速度梯度张量 G (3x3)单位旋转轴方向 nvec % 输出Liutex 矢量 Rvec标量 Rscalar以及是否有效标志 flag % 构造正交基使 nvec 为新 x 轴 e1 [1 0 0]; if abs(dot(nvec, e1)) 0.9 e1 [0 1 0]; % 如果 nvec 与原 x 轴接近改用 y 轴为辅助 end e2 cross(nvec, e1); e2 e2 / norm(e2); e1 cross(e2, nvec); % 重新正交化 % Q 的行是新基向量Q*G*Q 把梯度张量投影到新坐标系 Q [nvec; e1; e2]; G_rot Q * G * Q; % 提取垂直于旋转轴的 2x2 子块 A G_rot(2:3, 2:3); trA A(1,1) A(2,2); detA A(1,1)*A(2,2) - A(1,2)*A(2,1); lambda_ci sqrt(max(0, 4*detA - trA^2)) / 2; % 涡量在轴向的投影 omega_dot_r G(3,2) - G(2,3); % 涡量沿 nvec 方向的分量 % 旋量代换法核心公式 inner omega_dot_r^2 - 4*lambda_ci^2; if inner 0 Rscalar 0; flag 0; % 剪切主导不认为存在刚体旋转 else Rscalar omega_dot_r - sqrt(inner); if Rscalar 0 Rscalar 0; flag 0; else flag 1; end end Rvec Rscalar * nvec; end从代码可以看到旋转坐标系的构造顺序很关键先用 nvec 叉乘辅助向量得到 e2再用 e2 叉乘 nvec 得到 e1这样可以保证三个基向量构成右手系。如果顺序颠倒旋转轴方向会整体翻转导出的 Liutex 矢量全都会指向反方向。我在最初实现时就在这里翻过车图里涡轴方向在相邻网格间来回跳看起来像信号紊乱其实只是坐标系构造顺序问题。lambda_ci这里用的是二维子块的解析公式完全绕开了eig函数的复杂分支。4*detA - trA^2如果不加 max(0,...) 保护在剪切占主导的区域会出现负值sqrt 直接给 NaN后面无论怎么可视化都是白屏这是最常见的内存级“暗坑”。3.4 性能瓶颈与向量化方案别在三维循环里逐点计算上面这个版本适合先跑通逻辑。如果网格规模是 500×300×200逐点三重循环加坐标变换Matlab 里可能要跑十几分钟。常见做法是把循环体改成逐列或逐面操作。我发现直接去掉中间层循环把 j 方向向量化能稳定提速 5~8 倍% 以 k 维度最外层循环j 和 i 采用数组切片 for k 2:Nz-1 dudx (U(3:Nx,j,k) - U(1:Nx-2,j,k)) / (2*dx); dudy (U(2:Nx-1,3:Ny,k) - U(2:Nx-1,1:Ny-2,k)) / (2*dy); % 以二维矩阵块方式计算 G ... end这个版本的写起来稍显繁琐但在数据量大的时候非常值得。我一般先把三维数组降成若干二维面逐面调用一个矩阵化函数避免 Matlab 的 JIT 编译器在深层循环里矫情。如果要处理大规模 DNS 或者 LES 数据甚至可以把梯度计算部分改成 mex 函数或者用 GPU 数组。不过第一次上手先保证和理论结果对上再去折腾性能。4. 从 Matlab 到 Tecplot把 Liutex 结果导出并渲染出能放进论文的图4.1 数据导出格式选择ASCII dat 是最稳妥的互通方案Tecplot 读取数据的方式很多但最不挑版本的就是 ASCII 的 .dat 文件。它本质上是文本格式Matlab 用 fprintf 写出来Tecplot 直接 File - Load Data Files 就能读。如果数据量特别大比如超过 2000 万网格点文本文件确实会非常占磁盘可以考虑 Tecplot 的二进制 plt 格式但初次实验完全没有必要。为了后续切片和等值面方便我的导出脚本会把 X、Y、Z、U、V、W、Rx、Ry、Rz、Rmag 这十个变量都写进同一个文件。这样 Tecplot 里一个 zone 就包含全部数据切换显示变量比反复导多次文件省事很多。坐标单位要和速度单位保持一致这个很多人会忽略导致后期算 Q 准则的公式时量纲对不上。function export_to_tecplot(filename, X, Y, Z, U, V, W, Rx, Ry, Rz, Rmag) % 导出结构化网格 Liutex 结果到 Tecplot ASCII 文件 [Nx, Ny, Nz] size(X); fileID fopen(filename, w); fprintf(fileID, TITLELiutex simulation case\n); fprintf(fileID, VARIABLESX,Y,Z,U,V,W,RX,RY,RZ,RMAG\n); fprintf(fileID, ZONE I%d, J%d, K%d, ZONETYPEORDERED, DATAPACKINGPOINT\n, Nx, Ny, Nz); for k 1:Nz for j 1:Ny for i 1:Nx fprintf(fileID, %e %e %e %e %e %e %e %e %e %e\n, ... X(i,j,k), Y(i,j,k), Z(i,j,k), ... U(i,j,k), V(i,j,k), W(i,j,k), ... Rx(i,j,k), Ry(i,j,k), Rz(i,j,k), Rmag(i,j,k)); end end end fclose(fileID); end这段写入逻辑是逐个网格点输出一行。注意 Tecplot 的ZONETYPEORDERED必须和 Matlab 数组的索引顺序对应不然一进入 Tecplot 就会看到网格拓扑完全乱掉。DATAPACKINGPOINT 表示一行一个数据点清晰且不容易错如果选中 BLOCK 模式需要把同一变量所有数据一次性输出文本行会非常长不利于人工检查第一行数据是否合理。导完以后我还会用文本编辑器打开文件头几行确认第一行坐标不是负数、速度没有出现 NaN再做后续操作。这一步能提前挡住大量渲染时的“莫名其妙白屏”问题。4.2 Tecplot 可视化的三个关键步骤切片、等值面、轴向着色拿到数据后我会在 Tecplot 里按固定套路操作。第一步做剖面。进入 Plot - Slice选取 X-Y 平面切一刀把 Z 方向速度为 0 的剖面显示出来。变量选择 RmagZones 限制在当前唯一的一个 zone 上。切片的好处是能快速确认涡核位置分布是否符合物理直觉比如绕圆柱体的卡门涡街切片上应该能看到周期性的交替脱落。第二步做等值面。Tecplot 的等值面默认基于某变量这里选 Rmag。和传统 Q 准则等值面不同Rmag 的数值有明确的“刚体旋转强度”含义所以我们可以用同一套阈值处理不同工况的数据不再需要每张图重新调。我一般先取全局 Rmag 最大值的 20% 作为初始值然后上下微调 5%找到涡核清晰且连接体完整的水平。第三步给等值面上色。这个上色变量可选的很多常见做法是选 velocity magnitude或者根据流场方向选某个速度分量。如果关心流向变化我习惯用 U 分量着色如果关心旋转强度干脆用 Rmag 自己给自己着色得到的是从红到蓝的“涡强度云图”。Tecplot 的色标范围默认自动适应但为了论文统一必须手动设置最大最小值。4.3 用 Tecplot 宏批量出图一键生成多个截面的动画脚本如果想看三维涡结构在不同截面上的演化手动操作几十个切片会累死人。Tecplot 支持宏脚本可以把操作录下来重放。我常用的方式是用 Tecplot 的宏录制功能先手动操作一次再在文本编辑器里修改截面位置参数得到类似下面的模板#!MC 1410 $!REDRAWALL $!CREATEEQUATION SOLVEEQUATION XSLICE 0.1 $!SETACTIVESTRAND 1 $!EXTENDSLICES注意#!MC 1410是 Tecplot 宏文件的固定头部格式版本不同的话后缀会有区别。我不推荐直接手写宏建议先在界面上录一遍再在生成的脚本里改截面坐标和文件输出路径。录制方式是 Macros - Record Macro做完切片后选保存Tecplot 会把整个交互过程转化为可编辑的脚本。批量出图时把循环变量改成数组就能直接跑出一系列 PNG 帧后期用视频工具拼成动画。Tecplot 切片面板里的“Extend To Domain”选项也有讲究。如果切面没有延伸到几何域的所有方向最终图像外圈会留下一圈空白我一般保持默认不勾选让切面和整个计算域重叠这样不同工况的图在视觉上是同等范围对比起来不会因为边界差异产生误导。可视化目标推荐变量推荐操作注意事项涡核空间形态Rmag等值面 着色等值面数值选 Rmag 最大值的 15%~25%涡轴走向Rx, Ry, Rz管道流线 / 带方向的散点切片方向要检查局部连续性流向剖面U RmagXY 平面切片 云图叠加切片位置和流场尺度对齐理论验证与湍流统计Rmag沿流向积分 / 时间平均需要先做空间平均再比较5. 实战避坑Liutex 计算与可视化中让我往返修改的五类问题5.1 中心差分边界处理导致涡核“断裂”现象等值面在大涡核中间出现规则性的缺口但涡量切片显示流场明明是连续旋转的。缺口位置恰好位于i2或jNy-1这类边界附近越靠近外侧越明显。原因核心算法里我把边界点跳过了。当计算域边缘的导数值只由一侧决定时我直接用前向差分而内部点用中心差分两种差分格式的截断误差不同造成 Liutex 幅值在边界附近突然掉下来等值面迎合一截就断。解决边界层附近建议至少保留三层网格做差分缓冲。如果计算域本身的涡核靠近边界就用多项式拟合求导而不是简单的前向/后向差分。我后来在代码里写了边界处理分支当i1时用(-3U(1,j,k)4U(2,j,k)-U(3,j,k))/(2dx)这个二阶精度单侧差分公式比普通前向差分平滑很多边界处的 Rmag 不会出现断崖。5.2 根号内出现负数导致大量 NaN整个云图变白屏现象Matlab 脚本跑完检查结果矩阵里全是 NaNTecplot 导入后画面一片空白连等值面都没有。检查代码发现sqrt(omega_dot_r^2 - 4*lambda_ci^2)经常报“复数的 sqrt 不推荐”警告。原因当局部变形张量的剪切贡献超过了涡量的有效旋转贡献时根号内确实为负。这在理论上正好说明该点不是合适的旋转核心。不加保护的 sqrt 会把实数域扩展到复数域得到的虚数无法参与后续绘图。解决在核心函数里对根号内做max(0, ...)钳位。如果结果为负直接置 Rscalar0这既符合物理判断也让代码在数值上变得健壮。我那版代码里inner 0分支已处理了这层逻辑后续所有网格点都没有再出现 NaN。5.3 非结构化网格直接套用三维数组索引结果完全错乱现象从某软件导出的 CFD 数据是三角形/四面体网格点数和网格数不一致。直接把散点坐标 reshape 成三维数组Tecplot 里看网格拓扑完全是乱线等值面位置也完全对不上。原因结构化网格的索引连续性在非结构网格里不存在。我虽然用 griddata 做了插值但插值时的散点坐标顺序没有和原始网格的局部编号对齐导致插值结果其实是“张冠李戴”。解决插值前先检查原始点云的空间包围盒。把坐标中心平移到原点再统一单位。我习惯先用scatteredInterpolant建立速度场的插值器再在规则网格的坐标上做评估最后导出之前再画一张快速切片对比原始数据确认没有局部错位。非结构网格过渡到规则网格后Liutex 计算精度取决于插值方法线性插值一般够用但要注意网格分辨率不能比原始网格粗太多。5.4 Liutex 方向矢量在涡心附近“打架”流线图出现反向跳跃现象渲染涡轴流线时相邻两条流线在涡心区域突然反向颜色也由红变蓝。单独看每个点 Rmag 幅值似乎正常就是方向不稳定。原因Liutex 矢量方向在局部旋转轴穿过零涡量线时会因为数值误差出现符号翻转。虽然理论上方向连续但数值计算中涡量方向接近零时归一化方向对舍入误差极其敏感稍微一点不对称扰动就能让方向跳到反方向。解决做流线显示时不要直接画矢量头而是绘制基于Rmag 等值面 Rx/Ry/Rz 分量投影的组合。比如 Rmag 等值面确定涡核位置再用速度矢量在场内做流线加上的箭头的疏密靠 Rmag 调制就不会出现方向跳变导致的视觉撕裂。如果必须直接显示 Liutex 矢量场可以先用高斯滤波把方向场平滑一遍。5.5 大网格数据内存爆掉运行到一半 Matlab 直接崩溃现象三维数组分别是 1024×512×512 时代码跑到三分之一就提示内存不足系统物理内存使用了 90% 以上。原因预分配 Rx、Ry、Rz 和 Rmag 四个双精度矩阵每个都是 1024×512×512×8 字节约 2GB四个就是 8GB。加原始速度场和梯度场整机 32GB 内存也扛不住。解决Rmag 和矢量的存储可以降精度为 single 类型精度损失在可视化尺度上几乎不可见。更彻底的做法是分块计算按 k 方向切出若干子块每个子块单独调 compute_liutex 函数算完直接写入磁盘或 Tecio 导出文件不保留全局结果矩阵。我通常把 k 循环切成 64 层一块循环处理完所有切片后再整合。实测内存占用能降到 5GB 以内运行时长只多了约 8% 的边界重复计算。6. 验证与更进阶的玩法用 Taylor-Green 涡检验代码并把 Liutex 方向信息用于涡轴追踪拿到一套新算法代码第一件事不是去算大工程而是先做数学验证。我会构造一个已知解析解的 Taylor-Green 涡场速度分量满足 u sin(x)cos(y)cos(z)v -cos(x)sin(y)cos(z)w 0。理论上 Liutex 幅值在涡心位置应该等于对应角速度的两倍并且方向严格对齐 z 轴。把这个理论场喂给上面的 Matlab 代码对比 Rmag 解析解和数值解最大误差控制在 1% 以内就说明代码整体是可靠的。这个验证步骤看起来简单但非常重要。我在给模拟项目 X 部署到新机器后重新运行时发现数值结果比之前差了 3%排查半天发现是编译器的浮点优化选项变了导致差分精度下降。从那以后我每次修改任何参数或切换环境都会先跑一遍 Taylor-Green 验证案例给自己一个“后悔药”级别的安全网再开展大规模分析。验证通过后还可以进一步用 Liutex 矢量方向追踪涡轴。做法是从 Rmag 等值面上取最高幅值点作为种子然后沿局部 Liutex 方向做步进每走一步在该点附近重新计算 Rmag 和方向持续积分得到涡轴中心线。这个方法比传统压力极小值法稳定尤其在高剪切环境下压力极值点常常不在真实涡心。如果是研究边界层转捩还能用 Liutex 矢量方向做条件平均观察不同涡片段的旋转轴统计分布这是 Q 准则完全给不了的信息。数据显示管路的最终习惯是我用 Matlab 脚本把 Nd 帧动画全部算好Tecplot 里用一个循环宏批量导出 PNG再用工具把 PNG 合成为动画。动画里能看到涡核从产生、拉伸到破裂全过程而且因为 Liutex 已经在物理上剔除了剪切不会有剪切层导致的视觉噪音。希望这份记录能帮到准备在 Tecplot 里把涡识别做得更干净的人。本文还有配套的精品资源点击获取

相关新闻

13ft Ladder 付费墙绕过:自托管部署与原理实操

13ft Ladder 付费墙绕过:自托管部署与原理实操

13ft Ladder 付费墙绕过:自托管部署与原理实操 【免费下载链接】13ft My own custom 12ft.io replacement 项目地址: https://gitcode.com/GitHub_Trending/13/13ft 把一条付费文章的链接贴进输入框,回车,正文就出现在页面上&#xff…

2026/10/18 23:03:15 阅读更多 →
本地部署个人AI助理OpenClaw:从环境准备到配置调优全指南

本地部署个人AI助理OpenClaw:从环境准备到配置调优全指南

1. 需求拆解与整体方案设计1.1 个人AI助理到底解决什么问题先说个实在话:我在本地部署OpenClaw这个个人AI助理,最初不是因为赶时髦,而是被每天重复的信息整理、日程协调和杂事提醒逼的。你手机里可以装一堆效率App,每个App都是一个…

2026/10/18 23:02:14 阅读更多 →
AI训练抗噪指南:让模型在噪声数据中照样成长

AI训练抗噪指南:让模型在噪声数据中照样成长

做AI训练的人,大概都经历过那种“模型怎么训都不对劲”的至暗时刻。你明明把代码检查了一遍又一遍,损失函数也在降,可一到评测集上就是达不到理想效果。最后把数据翻出来一看,好家伙,标注错得一塌糊涂,网页…

2026/10/18 23:02:14 阅读更多 →

最新新闻

STATA外部命令资源库搭建:从adopath到源码管理的完整方案

STATA外部命令资源库搭建:从adopath到源码管理的完整方案

简介:面向使用STATA开展数据分析、统计与计量经济学研究的学者、研究人员及学生,这份外部命令资源库将分散在官方社区、个人主页等处的第三方扩展工具汇集一处,有效解决外部命令获取渠道不一、版本兼容难查等问题,降低建模前的环境…

2026/10/19 0:46:07 阅读更多 →
MATLAB实现电力系统潮流计算:从导纳矩阵到牛顿法收敛

MATLAB实现电力系统潮流计算:从导纳矩阵到牛顿法收敛

简介:本资源是一份面向电气工程专业本科生及电力系统初学者的MATLAB实践教学文档,聚焦电力系统核心基础——潮流计算的原理实现与编程落地。文档完整阐述牛顿-拉夫逊法(直角坐标形式)的数学建模逻辑、节点导纳矩阵构建方法、程序变…

2026/10/19 0:46:07 阅读更多 →
豆包读取电商客服聊天窗口:本机客户端走本地端口即可完成会话监听

豆包读取电商客服聊天窗口:本机客户端走本地端口即可完成会话监听

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:45:07 阅读更多 →
【Mac】vscode 配置 GD32E230CXXX 开发环境:从工具链到烧录的完整落地

【Mac】vscode 配置 GD32E230CXXX 开发环境:从工具链到烧录的完整落地

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:45:07 阅读更多 →
大模型本地部署体积对照:从0.5B到70B量化版本配置清单

大模型本地部署体积对照:从0.5B到70B量化版本配置清单

大模型本地部署这件事,聊起来都是算力、精度、上下文,但真正动手之前,第一道门槛其实是“机器能不能装下”。我最近把一套开源模型家族的多个版本在本地环境里来回实测了几轮,从最小的0.5B到70B量化版都跑过一遍,最后整…

2026/10/19 0:44:06 阅读更多 →
疲劳驾驶数据集图片与XML标注不匹配?清洗与YOLO转换指南

疲劳驾驶数据集图片与XML标注不匹配?清洗与YOLO转换指南

简介:这是一份面向深度学习和图像识别入门练习的疲劳驾驶监测数据集,包含人体疲劳状态下的真实照片,可重点将打哈欠时的张嘴状态与闭眼状态作为疲劳判定标准,适合有一定Python基础、正在学习目标检测或图像分类的初学者&#xff0…

2026/10/19 0:44:06 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →