1. 一张 6×6 矩阵摆在面前判读为什么必须靠图第一次被问到“这批样品到底算不算强各向异性”的时候我手里只有一张 6×6 的弹性刚度矩阵。数据完整、精度也够但我盯着那三十多个数字看了半小时能说出来的只有“C11 比 C33 大”——这句话对判断方向依赖性几乎没有帮助。弹性各向异性的麻烦就在这里它描述的是波速、模量随方向变化的全景而刚度矩阵是这套全景的压缩编码人眼无法直接解码。我后来把整套流程写成了一个工具也就是这篇要讲的VELAS程序名字取的是“弹性各向异性可视化与分析”这几个词的首字母组合定位很朴素吃进一个刚度张量吐出三张速度面、一组方向极值、一张各向异性强度报告。适合读这篇的人大概是三类。第一类是做岩石物理或岩心弹性表征的手里有一批超声测量反演出来的 Cij需要快速判断这块岩心是不是该按横向各向同性处理。第二类是材料方向关注晶体、织构化金属、增材制造件里的方向依赖性想直观看到“最软的加载方向在哪”。第三类是做地震或超声数值模拟的需要从张量里抽出相速度、群速度、剪切波分裂这些输入参数。三类人的共同点是不满足于知道“有各向异性”而是需要知道“在哪个方向、强到什么程度、能不能用一个参数横向排序”。这也是我把 VELAS 做成一个带交互界面的程序而不是一段一次性脚本的原因。1.1 各向同性假设在哪一步开始崩掉用各向同性近似处理实际问题是常见操作本身没问题问题在于近似什么时候失效。我做过一轮对比拿同一批样品一边用完整刚度张量算方向速度一边用两个拉梅常数加密度算各向同性速度然后看两者的偏差随方向怎么变。结论是——偏差不是均匀分布的小扰动而是集中在少数几个方向上且最大偏差往往正好落在工程上最关心的方向。比如很多沉积类样品的最软方向接近垂直于层理而受力分析和取心设计恰恰关心这个方向。这就带来一个实操上的判断如果你的应用只涉及某一个固定方向各向同性近似可能完全够用一旦涉及方向扫描比如井壁稳定性分析、超声波探头的多角度扫查、构件多轴加载评估近似就会在特定角度上产生明显误差而这种误差用全局平均值是看不出来的。VELAS 的第一个价值点就在这儿——它把“误差在哪个方向最大、多大”变成一张可以旋转查看的曲面而不是一行统计数字。我一般会先跑一遍max|v_aniso - v_iso| / v_iso这个相对偏差场如果峰值出现在 5% 以内各向同性处理基本没风险超过 15% 就得老老实实按各向异性走。1.2 程序要回答的三个具体问题把需求收敛之后我发现所有使用场景都能归到三个问题上VELAS 的功能也就按这三个问题来切分问题输出物典型用途波速/模量随方向怎么变三分支速度面准P、准S1、准S2、方向切片曲线判断最软/最硬方向确定测量角度极值有多大、在哪个方向全局极值表方向余弦 数值 相对偏差给数值模拟提供边界参数不同样品之间怎么横向比较各向异性强度指数、Thomsen 参数、分裂强度表批量筛选、质量分级第一类输出是给人看的第二类是给下游程序用的第三类是给报告用的。三者必须来自同一套计算内核否则你会遇到“图上看着差不多、表里数值差一截”的尴尬。VELAS 的做法是所有输出统一从同一个相速度求解器出发极值搜索和图表渲染都只是这个求解器的不同消费者。这个设计看起来是常识但我见过不少自研脚本图上画的和表里报的是两套代码最后对不上账排查起来极其痛苦。1.3 最小输入契约与真实数据的卡点一篇讲工具的文章如果不讲输入格式基本等于没讲。VELAS 要求的最小输入是一个 6×6 的刚度矩阵加一个标量密度。矩阵按标准 Voigt 顺序排列即行列为 11、22、33、23、13、12 对应的下标单位要求随密度一起给程序内部统一换算。除此之外全部可选样品名、测量温度、数据来源备注。真实数据的卡点几乎全在“不完整”上。最常见的三种只给了 21 个独立分量的一维列表顺序还得靠猜给了柔度矩阵而不是刚度矩阵单位还是 1/TPa给了 9 个分量并说明“近似取为各向同性”但多出来的那些其实不为零。我在 VELAS 里加了一个输入检查层专门处理这几种情况——列表按标准顺序展开并做对称性校验柔度矩阵自动求逆并提示条件数声明为各向同性但残留偏差超过阈值的直接给出警告而不是静默通过。这些检查写起来不到两百行但省下来的排查时间远超预期后面第 4 章会详细讲怎么组织这一层。2. Christoffel 方程把 21 个独立常数压成一个 3×3 特征值问题弹性各向异性的数学核心其实很干净给定传播方向 n构造一个 3×3 的实对称矩阵求它的特征值开个方就得到该方向的三个相速度。这个矩阵叫 Christoffel 矩阵表达式是Γ_ik C_ijkl · n_j · n_l / ρ。理论上就这么一行。但真要从四阶张量落到代码里中间有几个地方特别容易出错而且错了之后现象很像“物理效应”很难第一时间怀疑到代码上。2.1 Voigt 下标映射错一位后面全盘皆错四阶张量到 6×6 矩阵的压缩依赖 Voigt 约定而这个约定在不同文献里的下标顺序并不完全统一。VELAS 采用最常见的顺序1→11、2→22、3→33、4→23、5→13、6→12。注意 4、5、6 对应的三个剪切分量有些教材排成 23、31、12有些排成 12、13、23一旦你的输入数据按另一套顺序排程序读进来的矩阵在数值上完全合法、物理上完全错位。我最初就栽在这儿。那批样品是别人给的表格我按自己的约定直接读出来 P 波速度面看着挺正常但 S 波分裂的方位角怎么都和实测对不上。排查了两天才想起来去核对下标约定换成对方的顺序后一切吻合。从那以后 VELAS 的输入层强制带一个voigt_order字段默认值写在配置里不填就按默认走填了就必须校验。这个教训值得单独强调刚度矩阵的错位不会报错只会给你一个看起来很像真的、但错了的结果。2.2 六个分量的装配表达式与自检方法Christoffel 矩阵是实对称的六个独立分量各有一个显式表达式。下面这份是我在 VELAS 里实际用的版本方向余弦记作n1, n2, n3刚度矩阵用 0 起始的下标c[0][0]对应C11import numpy as np def christoffel(C, n): C: 6x6 刚度矩阵(Pa), n: 单位方向向量 c C n1, n2, n3 n G np.zeros((3, 3)) G[0, 0] (c[0,0]*n1*n1 c[5,5]*n2*n2 c[4,4]*n3*n3 2*(c[0,5]*n1*n2 c[0,4]*n1*n3 c[5,4]*n2*n3)) G[1, 1] (c[5,5]*n1*n1 c[1,1]*n2*n2 c[3,3]*n3*n3 2*(c[1,5]*n1*n2 c[3,5]*n1*n3 c[1,3]*n2*n3)) G[2, 2] (c[4,4]*n1*n1 c[3,3]*n2*n2 c[2,2]*n3*n3 2*(c[2,4]*n1*n2 c[3,4]*n1*n3 c[2,3]*n2*n3)) G[0, 1] (c[0,5]*n1*n1 c[1,5]*n2*n2 c[3,4]*n3*n3 (c[0,1] c[5,5])*n1*n2 (c[0,3] c[5,4])*n1*n3 (c[3,5] c[1,4])*n2*n3) G[0, 2] (c[0,4]*n1*n1 c[3,5]*n2*n2 c[2,4]*n3*n3 (c[0,3] c[5,4])*n1*n2 (c[0,2] c[4,4])*n1*n3 (c[2,5] c[3,4])*n2*n3) G[1, 2] (c[5,4]*n1*n1 c[1,3]*n2*n2 c[2,3]*n3*n3 (c[1,4] c[3,5])*n1*n2 (c[2,5] c[3,4])*n1*n3 (c[1,2] c[3,3])*n2*n3) G[1, 0], G[2, 0], G[2, 1] G[0, 1], G[0, 2], G[1, 2] return G这份表达式建议不要盲信一定要做自检。最有效的自检方法是退化到各向同性代入C11C22C33λ2μ、C12C13C23λ、C44C55C66μ把所有剪切-正应变耦合项设为零此时 Christoffel 矩阵应该严格等于μ·I (λμ)·n⊗n三个特征值分别是λ2μ和两个重根μ。如果这条自检过不了后面的所有图都不用看了。VELAS 的单元测试里就放着这条用例还有一条立方对称的用例沿 [100] 和 [111] 方向的解析解是已知的双保险。2.3 特征值排序带来的分支交叉问题速度求解本身一行就够v sqrt(eigvalsh(Γ)/ρ)。坑在“三个分支怎么归属”。eigvalsh返回升序排列的特征值对应下来就是“最慢、中间、最快”。按大小排序看起来天经地义但在某些方向附近两个剪切波速度会非常接近一旦穿过某个方向发生顺序交换你画出来的 S1 曲面和 S2 曲面就会在那个位置强行“拧”一下形成一道折痕。实测中这道折痕非常显眼而且会被误认为是物理上的剪切波简并。VELAS 的处理办法是不按大小排序而是按与前一采样点的匹配度排序。具体做法球面采样时按邻接顺序遍历比如按纬度从一极扫到另一极对每个点算完三个特征向量后与上一个采样点的三个特征向量做内积选内积绝对值最大的一一配对准P 波那一支的特征向量总是与传播方向最接近可以先锁定剩下两支再做匹配。这样得到的曲面是连续的简并点附近会出现两支贴合的“接缝”那才是真实的物理现象。代价是遍历顺序必须严格不能并行乱序。VELAS 里这一步是单线程串行的牺牲一点速度换来曲面的连续性我认为完全值得。2.4 球面采样的三种方案与代价速度面要在单位球上采样采样方案直接决定图的质量和极值搜索的可靠性。我用过三种各自的脾气不太一样经纬网格最直观theta从 0 到 π、phi从 0 到 2π 均匀取点。优点是可以直接喂给plot_surface出图快缺点是两个极点的采样密度爆炸而赤道附近偏疏做面积加权统计时会严重高估极区。做展示图可以做定量分析不行。Fibonacci 球按黄金角在球面上撒点近似等面积分布点数可控。做极值粗筛和面积平均最合适两万点就能覆盖得相当均匀。缺点是不能直接构成四边形网格画曲面得走三角化。细分二十面体从正二十面体开始递归细分三角形大小均匀天然适合plot_trisurf。缺点是细分层级只能按 4 倍增长点数不够灵活。VELAS 的实际策略是混合定量计算极值、平均值、面积加权用 Fibonacci 球展示曲面用经纬网格两套采样共用同一个求解器。这样图上看到的东西和表里报的数字是一致的只是采样点不同误差在可控范围内。如果只允许选一种我建议选 Fibonacci因为定量结果的可信度比图的顺眼程度重要得多。3. 速度面画出来只是开始极值、指数与分裂的判读三张曲面渲染出来第一次看确实很惊艳但很快就会发现两个问题。第一旋转着看能感觉到“有方向性”但说不出具体在哪个方向最强。第二两张不同样品的曲面摆在一起肉眼根本分不出谁的各向异性更强。可视化解决的是直觉问题不解决量化问题所以 VELAS 在渲染之外还做了三件事极值搜索、强度指数、分裂分析。3.1 从粗筛到球面局部优化网格上取最大值这种做法我一开始也用过误差大到不能用。原因是速度极值出现的方向往往不在采样点上网格越粗偏差越大而且对于剪切波分支极值附近曲面可能很平网格最大值和真实极值能差出百分之几。VELAS 的做法是两段式。第一段用 Fibonacci 球撒两万个点做粗筛对每个分支维护一个“候选集”保留数值排名前 5% 的点。第二段对候选点做球面局部优化把方向参数化为球坐标(theta, phi)用 Nelder-Mead 单纯形法最小化负速度。选 Nelder-Mead 而不是梯度法是因为在剪切波简并点附近曲面不可导梯度法会在那儿原地打转。局部优化完之后还有一步对称性去重。一个立方对称的晶体沿 [100]、[010]、[001] 三个方向的 P 波速度完全相等优化器会给你三个几乎相同的最优解直接列进表里会让人以为有三个不同的极值方向。VELAS 的去重逻辑是按晶体学等价方向分组每组只保留一个代表同时把该组的方向数列在备注里。这一步看起来是锦上添花实际上直接决定了极值表的可读性。提示粗筛点数不要低于一万。我试过五千点某些近退化样品的极值会被漏掉因为极值所在的那一小片区域恰好落在采样点的空隙里。3.2 Thomsen 参数只在 VTI 语境里成立提到各向异性强度很多人的第一反应是 Thomsen 三参数ε、γ、δ。它们确实好用定义也简单ε (C11 - C33) / (2·C33) γ (C66 - C44) / (2·C44) δ ((C13 C44)² - (C33 - C44)²) / (2·C33·(C33 - C44))但这套参数的适用前提是横向各向同性且对称轴沿 3 轴也就是 VTI。VELAS 在报告里会把这三个值算出来但前面加了一行状态标记如果输入张量的对称性检测结果不是 VTI这一行会标成“参考值语义不成立”。这么做是因为我见过太多把 HTI 样品硬套 Thomsen 参数、然后困惑于“为什么 γ 是负的”的情况。HTI 的正确做法是先旋转到 VTI 参考系或者直接用下一节讲的通用指数。δ还有一个更隐蔽的坑当C33接近C44时分母趋于零δ会爆掉。这种情况在近各向同性样品上真的会出现程序必须显式拦截不能让一个1e6量级的数字混进报告里。3.3 一个能跨样品横向比较的通用指数要横向排序需要一个不依赖对称性假设的标量。VELAS 用的是 Voigt-Reuss 上下界构造的各向异性指数分别算出 Voigt 平均和 Reuss 平均的体积模量与剪切模量然后组合成一个偏离度。量表达式Voigt 体积模量K_V [(C11C22C33) 2(C12C13C23)] / 9Voigt 剪切模量G_V [(C11C22C33) - (C12C13C23) 3(C44C55C66)] / 15Reuss 体积模量1/K_R (S11S22S33) 2(S12S13S23)Reuss 剪切模量15/G_R 4(S11S22S33) - 4(S12S13S23) 3(S44S55S66)各向异性指数A 5·(G_V/G_R) (K_V/K_R) - 6其中S是刚度矩阵的逆柔度矩阵。这个指数的好处是各向同性时严格为零且量纲无关跨样品可比。我把一批样品按这个值排序过结果和超声多角度扫描的直观判断基本一致只有一两个边界情况需要人工复核。需要提醒的是这个指数只反映“偏离各向同性的程度”不反映“哪个方向偏离最大”两者要配合着看。3.4 三分支曲面的读图规则速度面的读图有几个固定套路我在 VELAS 的帮助文档里直接写进去了因为新用户最容易在下面这几点上绕圈第一准P 波曲面永远是最外层的那个因为它速度最高两个准S 波曲面在内层且在某些方向上会贴合形成剪切波简并。看到内层曲面“粘”在一起不要怀疑渲染出了问题那是真实的物理。第二曲面上的“尖点”和“凹坑”位置比曲面的整体形状更重要。各向异性带来的信息几乎全在极值附近的局部形态里整体轮廓反而看不出太多。VELAS 允许在曲面上叠加极值标记点方便定位。第三半径的归一化方式会改变视觉印象这一点后面第 5 章会专门讲是踩过的坑。第四相速度面不等于能量传播速度面。这一条最容易被忽略。相速度是波前法向的速度能量实际传播的方向群速度是相速度面在波矢空间的梯度方向两者只有在高对称方向上才重合。VELAS 提供群速度的数值计算对相速度面做切向差分但在图上默认不画因为把相速度和群速度两条曲线画在同一张图里会让初学者彻底混乱。如果你要做射线追踪或者探头角度设计务必用群速度那一套输出。4. 从脚本到程序渲染、容错与批处理上的取舍自己用和给别人用之间隔着一道鸿沟。脚本阶段我只需要“跑出图来”程序阶段要考虑的是别人拿到一个格式不太标准的矩阵会不会直接崩、图在别人电脑上能不能正常转、一次处理五十个样品要花多久。VELAS 在这三件事上做的取舍比算法部分更值得写下来。4.1 渲染后端的三档选择三维曲面渲染有几条路我用过三档适用场景差别很大方案优点缺点适合谁Matplotlib 的plot_surface零额外依赖出静态图快能直接导出 PDF交互旋转卡顿光照简单遮挡处理粗糙只出报告插图三角化 散点渲染采样更均匀能画 Fibonacci 点云视觉效果一般不好做光照快速检查专业三维库带交互窗口旋转流畅支持光照、剖切、拾取安装体积大部分环境缺图形驱动探索式分析我最终的方案是双轨批处理出报告走 Matplotlib探索式分析开交互窗口。两者共用同一份速度计算代码只是渲染层不同。这个分层很关键因为一旦把计算逻辑写进渲染回调里换后端就意味着重写。Matplotlib 出曲面时有两个细节值得说。一是采样网格别太密plot_surface的默认网格数是 50×50对速度面这种光滑曲面加密到 200×200 视觉提升有限但渲染时间翻好几倍我一般用 120×240配合rstride2, cstride2能兼顾平滑和速度。二是极区的退化三角形会让光照出现暗斑把纬度采样从[0, π]稍微内缩一点比如[1e-3, π-1e-3]就能规避。4.2 输入检查该放在哪一层我最初把输入检查散落在各处读文件时检查一次算速度时再检查一次画图前又检查一次。结果是错误信息五花八门用户根本不知道自己错在哪。后来把它整个收到一个独立的校验层所有入口都必须过这一层规则也统一成几条对称性C[i][j]与C[j][i]的相对偏差超过1e-6直接报错不静默平均。静默平均会让用户误以为数据本来就是对称的掩盖了上游的录入错误。正定性所有特征值为正。刚度和柔度都应该是正定的出现负特征值基本意味着单位搞错或者分量错位。单位必须显式给出不允许“猜”。VELAS 内部统一换算到 Pa 和 kg/m³配置里写GPa和g/cm³的都行但必须写。对称性等级判定自动比对各个分量判断最接近哪种对称类各向同性、立方、六方、正交、单斜、三斜并把“与理想对称的最大偏差”报出来。这一步的实用价值极高——很多时候用户自己也不确定样品该按哪种对称处理让程序给个参考再人工确认比拍脑袋强。第四条实现起来不复杂把矩阵按对称类的约束条件逐项比较算相对偏差取最小值对应的类别。六方对称的判断要小心因为它的约束是C11C22、C13C23、C44C55、C66(C11-C12)/2、其余为零其中最后一条是恒等式约束偏差大的话说明数据有问题。4.3 批处理与报告的组织方式单样品交互是一回事一批样品跑一遍是另一回事。VELAS 的命令行模式接一个目录自动扫描里面的数据文件逐个计算、逐张出图、最后汇总成一张总表。总表按各向异性指数降序排第一列是样品名后面依次是三个方向的最大速度、最小速度、相对偏差、强度指数、对称类判定结果、警告信息。这个流程里有两点经验。第一单个样品失败不能中断整批。早期版本一个文件格式不对整个批处理就崩了五十个样品重跑一遍很痛苦。现在每个样品包在独立的错误捕获里失败信息写进汇总表的备注列其余照常。第二图的命名要可排序。用样品名加分支名比如S01_P.png、S01_S1.png不要用时间戳否则汇总的时候排序会乱。报告我倾向输出 PDF 加 CSV 两份。PDF 给人工看CSV 给下游脚本用。CSV 里只放数值和方向余弦不放任何格式化字符串避免下游解析时因为逗号或者中文标点出问题。5. 实测中反复出现的四类问题及其排查路径这一章是整篇里最不想写、但最该写的部分。下面四个问题每一个都让我花过至少半天而且每一个都有“看起来像物理、实际是程序”的迷惑性。5.1 单位制速度整体偏了三十倍现象某批样品的速度面形状完全正常各向异性比例也对但绝对数值比预期小了一个数量级。第一反应是密度给错了核对之后密度没问题。根因在单位混用。刚度矩阵用的是 GPa密度用的是 kg/m³。v sqrt(C/ρ)里如果 C 按 GPa 的数值比如 80代入ρ 按 kg/m³ 的数值比如 2700代入得到sqrt(80/2700) ≈ 0.172单位既不是 m/s 也不是 km/s而正确值应该是sqrt(80e9/2700) ≈ 5443 m/s。两者差了sqrt(1e9) ≈ 31623倍……实际观测到的偏差没那么夸张是因为中间还混了别的换算但量级完全对不上。这里有个极其好用的心算技巧刚度用 GPa、密度用 g/cm³ 时sqrt(C/ρ)的数值直接就是 km/s。因为1 GPa / (1 g/cm³) 1e9 Pa / 1e3 kg/m³ 1e6 (m/s)²开方正好是 1000 m/s也就是 1 km/s。这个换算我写在了 VELAS 的配置注释里也写在了每一份输出的页脚因为它是这类错误最高发的地方。排查路径现在固定成三步先看速度量级是否落在材料常识范围内岩石 2–8 km/s金属 3–7 km/s陶瓷更高再看 P 波和 S 波的比值是否在 1.5–2.5 之间最后才去看曲面形状。顺序反了就会在形状上浪费大量时间。5.2 归一化制造出来的假各向异性现象两个样品各向异性指数差了将近一倍但把速度面并排放在一起看形状几乎一样。根因是渲染时的归一化方式。VELAS 早期版本的曲面半径直接取速度值两个样品如果整体速度水平不同画出来的曲面大小就不一样视觉上一大一小很容易被误读成“各向异性强度不同”。反过来如果为了“放在一起好比较”而把每个曲面都归一化到单位球各向异性的视觉差异反而被抹平了两个形状差别很大的样品看起来也差不多。最后的处理是提供三种显示模式让用户显式选绝对模式半径就是速度值适合看单个样品的真实量级。相对偏差模式半径画(v - v_mean)/v_mean适合看方向依赖的形状因为它把平均速度的影响剥掉了。归一化模式半径画v / v_max适合把多个样品叠在一张图里比形状。默认用相对偏差模式因为绝大多数时候用户关心的是“哪个方向软、软多少”而不是“绝对速度是多少”。这个默认值改过之后关于“为什么两个样品看起来一样”的疑问基本消失了。5.3 近退化张量把参数算成 0/0现象某个样品的δ参数输出成了一个巨大的数其他参数都正常。排查下来是这样这个样品的数据本身就接近各向同性C33和C44的差值很小而δ的分母里正好有(C33 - C44)这一项。分母趋近于零分子却是有限值结果自然爆掉。这个问题不能靠调容差糊过去必须显式检测。VELAS 的做法是算δ之前先算分母的绝对值如果小于C33的千分之一就把δ标记为“不可靠”并输出NaN同时在报告的警告列里写清楚原因。用户看到NaN会来问看到1e7反而可能直接拿去用了这是更危险的情况。近退化还有另一个表现两个剪切波速度几乎相同第 2 章讲的分支匹配算法在这个位置会频繁切换配对导致曲面上出现细小的锯齿。VELAS 在这种情况下会降低匹配的敏感度用内积阈值而不是硬选最大宁可让两支短暂重叠也不制造假的分裂。5.4 自遮挡与色标误导现象用户反馈“图上看到一块暗区是不是速度特别低”。实际上那是背面的曲面透过来被前面的曲面挡住了加上默认色标是速度的连续映射暗区就被误读成了低速区。三维曲面渲染在这方面的误导性很强尤其是三张曲面叠在一起的时候。VELAS 的应对有几条默认只画准P 曲面另外两张需要显式打开色标改为按方向着色而不是按速度着色速度信息用等值线标出来提供一个“半透明外壳 内层实体”的组合模式让内外层结构一眼可辨。另外强烈建议在报告里配一张方向切片曲线因为二维曲线没有遮挡问题读数也精确是最可靠的判读依据。提示凡是从三维曲面图上读出“某个方向速度最低”这类结论都建议回二维切片上复核一遍。三维图的视觉误差经常超过各向异性本身带来的差异。6. 三类典型样品的判读记录抽象讲完落地还是得看具体数据长什么样。下面这三类是我处理得最多的记录一下判读过程和结论给遇到类似情况的同行一个参照。6.1 横向各向同性的层状样品这类样品最典型沿层理方向和垂直层理方向的 P 波速度差异明显剪切波在两个方向上的分裂行为也不同。VELAS 的对称性判定通常会给出六方对称C11 ≈ C22、C13 ≈ C23、C44 ≈ C55偏差都在百分之几以内。判读的时候我先看准P 波曲面的形状如果是标准的“橄榄形”长轴沿对称轴短轴在垂直于对称轴的平面内那就是典型的 VTI。接着看 Thomsen 参数ε一般在 0.1 到 0.3 之间γ稍小一点δ的变化范围最大、也最不稳定这符合经验。最后看剪切波分裂强度垂直方向分裂最强、沿对称轴方向分裂为零这个规律非常稳定可以用来交叉验证对称轴的方向有没有搞错。有一点要提醒这类样品的各向异性强度对不同物性参数的敏感度不一样。速度的差异可能只有百分之十几但弹性模量的差异能到百分之几十因为模量对速度是平方关系。做力学分析的时候要用模量那一套输出别直接拿速度比值去代入。6.2 立方对称的晶体类样品立方对称的特点是三个主轴方向等价C11C22C33、C12C13C23、C44C55C66独立常数只有三个。这类样品的速度面很有意思沿 [100] 和 [111] 两个方向的差异决定了各向异性的强弱而且在某些材料里会出现“沿 [111] 反而更慢”的反常情况。判读的关键是 Zener 比A 2·C44/(C11 - C12)它等于 1 时材料在剪切意义上各向同性。VELAS 报告里会把A和它偏离 1 的程度单独列出来。这个比值超过 1 和小于 1 对应的是两种完全不同的方向依赖模式前者最硬方向在 [111]后者在 [100]画出来的曲面形态一眼就能分辨。立方对称还有一个视觉特征速度面有明显的四重对称瓣沿三个主轴方向完全一样。如果画出来的图三个主轴方向不对称那基本可以断定是数据录入出了问题或者样品本身就不是立方对称、被误判了。6.3 正交对称的复合材料样件正交对称是这三个里最麻烦的独立常数有九个三个主轴方向互不等价。速度面既不是橄榄形也不是四重瓣而是三轴椭球被“扭”过的样子看第一眼很难建立直觉。我处理这类数据的方式是先降维再看。VELAS 提供沿三个主平面的方向切片也就是固定一个方向余弦为零、在另外两个方向构成的平面内扫角度。三张二维曲线拿到手各向异性的主轴方向和强弱立刻清楚了然后再回头看三维曲面就不会迷路。这类样品最容易出的问题是“误判成六方”。因为如果两个方向恰好接近C11和C22差得不多自动对称性判定可能给出六方但残差偏大。VELAS 在报告里会同时给出“最可能的对称类”和“与理想约束的最大相对偏差”当偏差超过 5% 时我在报告里会加一句“建议按正交对称处理”。多花一点计算量换来的是后续所有解释的可靠性。