☰
ANSYS应力集中仿真验证:网格收敛性研究与Kirsch理论解对比
2026/9/27 13:57:20 网站建设 项目流程

在有限元分析(FEA)的学习和应用中,新手和有一定经验的工程师常常面临一个核心困惑:仿真结果到底准不准?尤其是在处理应力集中这类经典问题时,我们依赖软件给出的云图和数据,但如何验证其可靠性?是网格不够密,还是理论公式不适用?

本文将以 ANSYS 2024 R1 官方验证手册中的经典案例——带圆孔平板的应力集中分析——为例,为你完整拆解一套“仿真-理论-验证”的闭环工作流。我们将从零开始,在 ANSYS Workbench 中建立模型、划分网格、施加载荷并求解,得到孔边的应力集中系数。然后,引入材料力学中的Kirsch 理论解作为黄金标准,并使用MATLAB 编写脚本进行理论值计算与数据对比。最后,通过系统的网格收敛性研究,直观展示网格密度如何影响结果精度,并指导我们如何以最经济的计算成本获得可靠解。

无论你是正在学习有限元的学生,还是需要验证仿真流程的工程师,这篇教程都将提供一套可复现、可验证的方法论。你将不仅学会操作 ANSYS,更能理解其背后的原理,并掌握用 MATLAB 进行后处理与验证的关键技能。

1. 问题背景与核心概念

在开始操作之前,我们必须明确要解决什么问题,以及其中涉及的核心理论。

1.1 应力集中现象

当一个构件中存在孔洞、缺口、沟槽等几何形状突变时,即使构件承受均匀的载荷,在形状突变的局部区域,应力值也会显著高于名义应力。这种现象称为应力集中。它是导致机械零件疲劳破坏和脆性断裂的主要因素之一。

带中心圆孔的无限大平板是研究应力集中最经典的模型。在工程中,当平板的宽度远大于圆孔直径时,可近似按此模型处理。

1.2 Kirsch 弹性理论解

1898年,德国工程师 Ernst Gustav Kirsch 推导出了无限大平板中圆孔附近应力分布的精确弹性理论解。这是弹性力学中的一个经典结论。

对于一块在无穷远处受单向拉伸应力σ₀的无限大平板,中心有一个半径为a的圆孔。以孔心为原点建立极坐标(r, θ),则孔边(r = a)的环向应力σ_θ分布为:

σ_θ = σ₀ * (1 - 2cos2θ)

其中,θ是从拉伸方向开始度量的角度。

从这个公式我们可以得出两个关键结论:

  1. 最大应力点:当θ = 90°或270°(即垂直于拉伸方向的孔边)时,cos2θ = -1,代入公式得到σ_θ_max = 3σ₀。
  2. 应力集中系数 (Kt):定义为局部最大应力与名义应力之比。在此模型中,Kt = σ_θ_max / σ₀ = 3。

这意味着,在孔边垂直于载荷的方向上,应力是远处均匀应力的整整3倍。这个Kt=3就是我们今天要用 ANSYS 仿真来验证的目标值,也是评估我们仿真精度和网格质量的基准。

1.3 有限元仿真与网格收敛性

有限元法通过将连续体离散为有限个单元(网格)来近似求解。网格的密度(即单元大小)直接影响结果的精度。一般来说,网格越密,结果越接近理论解,但计算成本也越高。

网格收敛性研究是指:系统地改变网格尺寸(如将单元大小依次减半),观察关键结果(如最大应力)的变化。当连续加密网格,结果的变化量小于一个可接受的公差(例如 1%)时,我们认为结果已经“收敛”。此时的网格密度足以代表该问题的解,继续加密网格对精度提升有限,是不经济的。

本次实战将清晰地演示这一过程。

2. 环境准备与软件版本

工欲善其事,必先利其器。以下是完成本案例所需的软件环境。

  • 操作系统:Windows 10/11 64位 或 Linux。本文演示基于 Windows。
  • 有限元软件:ANSYS 2024 R1。本案例是官方验证案例,在该版本中可直接调用。如果你使用 ANSYS 2023 R2、2022 R2 等较新版本,界面和流程基本一致。请务必使用正版授权软件。
  • 数值计算软件:MATLAB R2021a 或更新版本。我们将用它来计算 Kirsch 理论解并进行数据对比。Octave 等开源替代品理论上也可运行本文提供的脚本。
  • 基础概念:需要对材料力学、弹性力学基础以及 ANSYS Workbench 的图形用户界面有基本了解。

重要提示:不同 ANSYS 版本间的界面布局和部分功能名称可能有细微差异。本文以 2024 R1 的 Workbench 界面为准,核心操作逻辑通用。请关注操作的本质,而非按钮的绝对位置。

3. 在 ANSYS Workbench 中建立仿真模型

现在,我们开始第一步:在 ANSYS Workbench 中创建并完成一个静力学结构分析。

3.1 创建项目与选择分析系统

  1. 启动 ANSYS Workbench。
  2. 在工具箱Toolbox中,找到Analysis Systems。
  3. 拖动Static Structural到项目流程图Project Schematic中。这将创建一个包含材料、几何、模型、设置、求解和结果完整链的分析系统。

3.2 定义工程材料

  1. 双击Static Structural系统中的Engineering Data单元格。
  2. 在材料库中,默认已有Structural Steel。对于线弹性分析,我们主要关注两个参数:
    • 各向同性弹性 Isotropic Elasticity:杨氏模量Young‘s Modulus,通常设为2e11 Pa(即 200 GPa)。
    • 泊松比 Poisson‘s Ratio:通常设为0.3。
  3. 检查Structural Steel的属性,确保这两个值已正确设置。本案例中,弹性模量和泊松比的具体值不影响应力集中系数Kt(它是一个无量纲比值),但为了仿真完整性,我们使用默认值即可。
  4. 关闭Engineering Data界面,返回项目流程图。

3.3 创建几何模型

由于是无限大平板的近似,我们需要创建一个有限尺寸但足够大的平板,使得边界效应不影响孔边的应力状态。一个经验法则是:平板的宽度和高度至少是圆孔直径的 10 倍。

  1. 双击Geometry单元格,启动SpaceClaim或DesignModeler(取决于你的默认设置)。
  2. 在XY平面上创建草图。
  3. 绘制一个矩形。通过尺寸约束,设定其宽度W = 200 mm,高度H = 400 mm。这模拟了一个“足够大”的平板。
  4. 在矩形中心绘制一个圆,约束其直径D = 20 mm。这样,平板宽度是孔径的10倍(200/20=10),满足近似无限大条件。
  5. 完成草图,通过Extrude命令拉伸草图,厚度设为1 mm(平面应力问题,我们分析一个薄板)。
  6. 生成几何体,保存并关闭几何编辑器。

3.4 定义连接、接触与网格划分

本例是单一零件,无接触问题。

  1. 返回项目流程图,双击Model单元格,启动Mechanical应用程序。
  2. 在左侧树形图Project中,确保导入的几何体下,Solid的材料已分配为Structural Steel。
  3. 关键步骤:网格划分。这是收敛性研究的核心。
    • 点击Mesh分支。
    • 在详细信息窗口Details of “Mesh”中,将Relevance设为100(提高网格相关度)。
    • 首先,我们使用全局尺寸控制。将Element Size设置为10 mm。这是一个非常粗糙的网格,用于第一次计算。
    • 为了更精确地捕捉孔边的应力梯度,我们需要对圆孔边缘进行局部细化。右键点击Mesh->Insert->Sizing。
    • 在图形窗口中选择圆孔的边线。
    • 在新增的Edge Sizing细节中,将Type改为Number of Divisions,并设置为10。这意味着圆孔周长将被均匀划分为10段。
    • 点击Generate Mesh生成网格。你应该能看到一个相对稀疏的网格。

3.5 施加载荷与约束

为了模拟无限大平板受单向拉伸,我们需要在有限尺寸平板的边界上施加等效的位移和力边界条件。

  1. 施加固定约束:选择平板左侧短边的端面(X方向最小处)。右键点击Static Structural->Insert->Fixed Support。这将约束该端面所有方向的位移。这模拟了拉伸时的一端固定。
  2. 施加载荷:
    • 选择平板右侧短边的端面(X方向最大处)。
    • 右键点击Static Structural->Insert->Force。
    • 在详细信息中,将Define By改为Components。
    • 在X Component中输入1000 N(一个示例值,大小可调)。Y Component和Z Component设为0。
    • 这样,我们在平板右侧施加了一个沿 X 轴正向的拉力。
  3. 施加防止刚体运动的约束:为了避免平板在受力后发生奇怪的刚体转动,通常需要施加弱弹簧约束或额外的位移约束。一个简单的方法是:
    • 选择平板下侧长边的一个顶点(避免影响孔边应力区)。
    • 右键点击Static Structural->Insert->Displacement。
    • 约束Y方向位移为0。这不会显著影响孔边的应力状态,但能稳定求解。

3.6 设置求解选项与后处理

  1. 在Solution分支上右键,选择Insert->Stress->Normal。
  2. 在出现的Normal Stress对象细节中,将Orientation设置为X Axis。这将输出 X 方向的正应力σ_x。
  3. 我们更关心孔边的环向应力。但为了与 Kirsch 解对比最大应力,我们可以直接查询孔边θ=90°位置处的σ_x。因为在该点,σ_x就等于环向应力σ_θ。
    • 更精确的方法是插入一个Stress->Maximum Principal,并探测孔边的路径。但为简化首次验证,我们可以先用σ_x近似。
  4. 点击Solve进行求解。

4. 结果提取与第一次计算

求解完成后,我们查看结果并计算第一次的应力集中系数。

  1. 查看Normal Stress云图。你应该能看到应力在圆孔两侧(上下位置)明显集中。
  2. 我们需要读取孔边最大应力点的值。
    • 在Solution分支下,右键 ->Insert->Probe->Point。
    • 在图形窗口中,点击圆孔右侧边缘(θ=0°)和上侧边缘(θ=90°)附近,比较应力值。理论上,θ=90°处的应力应远大于θ=0°处。
    • 精确选取θ=90°处的节点(孔顶部的节点)。在点探针细节中会显示该点的Normal Stress值,记为σ_max_FEA。假设我们读到的值是30.5 MPa。
  3. 计算名义应力σ_nominal。
    • 名义应力 = 载荷 / 净截面积。
    • 载荷F = 1000 N。
    • 净截面积A_net = (板宽 - 孔径) * 板厚 = (200 mm - 20 mm) * 1 mm = 180 mm² = 1.8e-4 m²。
    • 所以σ_nominal = 1000 N / 1.8e-4 m² ≈ 5.556e6 Pa = 5.556 MPa。
  4. 计算仿真得到的应力集中系数Kt_FEA。
    • Kt_FEA = σ_max_FEA / σ_nominal = 30.5 MPa / 5.556 MPa ≈ 5.49。

发现问题:理论值Kt_theory = 3,而我们粗糙网格下的仿真结果Kt_FEA ≈ 5.49,误差高达83%!这显然不可接受。这说明我们的网格太粗糙了,无法捕捉到真实的应力梯度。

5. 使用 MATLAB 计算 Kirsch 理论解与对比

在进行网格收敛性研究之前,我们先编写一个 MATLAB 脚本,用于计算理论解,以便后续自动化对比。

创建一个新的 MATLAB 脚本文件,例如kirsch_validation.m。

% kirsch_validation.m % 计算无限大平板圆孔应力集中的Kirsch理论解,并与FEA结果对比 clear; clc; close all; %% 1. 输入参数 sigma0 = 5.556e6; % 名义应力,单位 Pa,与FEA计算一致 a = 0.01; % 圆孔半径,单位 m (直径20mm) theta_deg = 90; % 关注的角度,单位 度 theta_rad = deg2rad(theta_deg); % 转换为弧度 %% 2. 计算Kirsch理论解 (孔边 r = a) % 环向应力公式: sigma_theta = sigma0 * (1 - 2*cos(2*theta)) sigma_theta_kirsch = sigma0 * (1 - 2 * cos(2 * theta_rad)); fprintf('=== Kirsch 理论解计算 ===\n'); fprintf('名义应力 sigma0 = %.3f MPa\n', sigma0/1e6); fprintf('计算角度 theta = %.1f deg\n', theta_deg); fprintf('Kirsch理论环向应力 = %.3f MPa\n', sigma_theta_kirsch/1e6); fprintf('理论应力集中系数 Kt_theory = %.3f\n\n', sigma_theta_kirsch/sigma0); %% 3. 输入FEA结果进行对比 % 假设我们从ANSYS中得到了不同网格尺寸下的最大应力值 % 这里用数组模拟,实际应从文件读取或手动输入 mesh_size_mm = [10, 5, 2.5, 1.25, 0.625]; % 全局单元尺寸 (mm) sigma_max_FEA_MPa = [30.5, 18.2, 17.1, 16.8, 16.75]; % 对应FEA最大应力 (MPa) sigma_max_FEA = sigma_max_FEA_MPa * 1e6; % 转换为 Pa % 计算FEA的Kt Kt_FEA = sigma_max_FEA / sigma0; fprintf('=== FEA 结果与理论对比 ===\n'); fprintf('网格尺寸(mm) | FEA最大应力(MPa) | Kt_FEA | 相对误差(%%)\n'); fprintf('--------------------------------------------------------\n'); for i = 1:length(mesh_size_mm) error_percent = abs(Kt_FEA(i) - 3) / 3 * 100; fprintf('%12.3f | %17.3f | %6.3f | %14.2f\n', ... mesh_size_mm(i), sigma_max_FEA_MPa(i), Kt_FEA(i), error_percent); end %% 4. 绘制网格收敛性曲线 figure('Position', [100, 100, 800, 400]); subplot(1,2,1); plot(mesh_size_mm, sigma_max_FEA_MPa, 'bo-', 'LineWidth', 2, 'MarkerSize', 8); hold on; yline(sigma_theta_kirsch/1e6, 'r--', 'LineWidth', 2, 'Label', 'Kirsch理论值'); xlabel('全局网格尺寸 (mm)'); ylabel('FEA最大应力 \sigma_{max} (MPa)'); title('最大应力随网格尺寸变化'); legend('FEA结果', '理论解', 'Location', 'best'); grid on; subplot(1,2,2); plot(mesh_size_mm, Kt_FEA, 's-', 'Color', [0.85, 0.33, 0.10], 'LineWidth', 2, 'MarkerSize', 8); hold on; yline(3, 'k--', 'LineWidth', 2, 'Label', 'Kt=3'); xlabel('全局网格尺寸 (mm)'); ylabel('应力集中系数 K_t'); title('应力集中系数收敛性'); legend('FEA K_t', '理论 K_t', 'Location', 'best'); grid on; sgtitle('带圆孔平板应力集中分析的网格收敛性研究');

运行此脚本,它将输出理论值,并以表格和图形化的方式展示FEA结果随网格加密的变化趋势。目前我们只填入了第一次的粗糙网格结果。

6. 进行网格收敛性研究

现在,我们回到 ANSYS Mechanical,系统地加密网格,观察结果的收敛情况。

  1. 第一次计算(基准):如前所述,全局尺寸10 mm,孔边划分10段。记录σ_max_FEA和计算出的Kt_FEA。填入MATLAB脚本的数组sigma_max_FEA_MPa的第一个位置(30.5)。
  2. 第二次计算:
    • 在Mesh->Details中,将全局Element Size改为5 mm(减半)。
    • 将孔边的Edge Sizing的Number of Divisions改为20(加倍,以保持孔边单元尺寸与全局比例协调)。
    • 重新生成网格并求解。
    • 使用Point Probe再次读取θ=90°处的σ_x应力值。假设得到18.2 MPa。
    • 计算Kt_FEA = 18.2 / 5.556 ≈ 3.275。误差约为9.2%。
    • 将结果(5, 18.2)填入MATLAB数组。
  3. 第三次计算:
    • 全局尺寸2.5 mm,孔边划分40段。
    • 求解并读取应力,假设为17.1 MPa,Kt_FEA ≈ 3.078,误差2.6%。
    • 填入数组(2.5, 17.1)。
  4. 第四次计算:
    • 全局尺寸1.25 mm,孔边划分80段。
    • 求解并读取应力,假设为16.8 MPa,Kt_FEA ≈ 3.024,误差0.8%。
    • 填入数组(1.25, 16.8)。
  5. 第五次计算(验证收敛):
    • 全局尺寸0.625 mm,孔边划分160段。网格数量会显著增加,计算时间变长。
    • 求解并读取应力,假设为16.75 MPa,Kt_FEA ≈ 3.015,误差0.5%。
    • 填入数组(0.625, 16.75)。

注意:以上应力值为示例,实际仿真结果会根据你的精确建模、边界条件施加位置和求解器设置略有不同,但变化趋势一致。

7. 结果分析与结论

更新 MATLAB 脚本中的数组并重新运行,你将得到类似下表的输出和收敛曲线图:

=== Kirsch 理论解计算 === 名义应力 sigma0 = 5.556 MPa 计算角度 theta = 90.0 deg Kirsch理论环向应力 = 16.667 MPa 理论应力集中系数 Kt_theory = 3.000 === FEA 结果与理论对比 === 网格尺寸(mm) | FEA最大应力(MPa) | Kt_FEA | 相对误差(%) -------------------------------------------------------- 10.000 | 30.500 | 5.490 | 83.00 5.000 | 18.200 | 3.275 | 9.17 2.500 | 17.100 | 3.078 | 2.60 1.250 | 16.800 | 3.024 | 0.80 0.625 | 16.750 | 3.015 | 0.50

分析图表和表格,我们可以得出以下重要结论:

  1. 网格收敛性明显:随着网格尺寸从10mm加密到0.625mm,FEA计算出的最大应力和Kt值迅速向理论解(16.667 MPa, Kt=3)靠近。从第二次加密开始,误差已降至10%以内。
  2. “足够好”的网格:对于此问题,当全局网格尺寸加密到2.5 mm时,误差约为2.6%;加密到1.25 mm时,误差小于1%。通常,工程上认为误差在1%-5%以内是可接受的。因此,1.25 mm的网格对于这个问题可能是精度与计算成本的最佳平衡点。继续加密到0.625 mm,精度提升(从0.8%到0.5%)非常有限,但计算量(单元和节点数)可能成倍增加。
  3. 应力奇异性与网格:在理论上存在应力奇异性(应力理论上无限大,但实际材料不会)或应力梯度极大的区域,如尖锐凹角,FEA结果可能永远无法完全收敛于理论弹性解,需要借助断裂力学或特殊单元。本例圆孔边是光滑的,不存在奇异性,因此FEA可以很好地收敛。
  4. 验证了仿真流程:通过系统性的网格收敛性研究,并与经典理论解对比,我们验证了从几何建模、材料定义、网格划分、载荷约束到结果读取的整个ANSYS仿真流程是正确和可靠的。

8. 常见问题与排查思路

在复现此案例时,你可能会遇到以下问题:

问题现象可能原因排查思路与解决方案
求解失败,提示网格质量差1. 网格尺寸变化过于剧烈。
2. 存在极度扭曲的单元。
1. 检查Edge Sizing的过渡是否平滑,可尝试使用Body Sizing并设置平滑过渡。
2. 在Mesh->Details中,检查Mesh Metric(如 Skewness),并尝试改进网格。对于本例简单几何,通常不会出现。
最大应力位置不对1. 边界条件施加不当,导致变形模式错误。
2. 探测点选错位置。
1. 检查固定支撑和力载荷是否施加在相对的端面上,且方向正确。检查防止刚体运动的约束是否生效。
2. 确保在θ=90°(孔顶部)读取应力。可使用Path工具沿孔边创建路径,绘制应力分布曲线来确认最大值位置。
Kt计算结果远大于31. 网格过于粗糙(如本文第一次计算)。
2. 名义应力计算错误。
1.这是最可能的原因。必须进行网格收敛性研究,逐步加密孔边及附近的网格。
2. 复核净截面积计算:(板宽 - 孔径) * 板厚,注意单位统一。
Kt计算结果小于31. 平板尺寸不够大,边界效应显著。
2. 使用了平面应变假设而非平面应力。
1. 确保平板宽度/高度至少是孔径的8-10倍。可尝试增大平板尺寸重新计算,观察Kt是否趋近于3。
2. 对于薄板(厚度远小于其他尺寸),应使用平面应力假设。在Geometry或Model中检查2D假设设置。
MATLAB脚本运行错误1. 数组维度不匹配。
2. 变量未定义。
1. 确保mesh_size_mm和sigma_max_FEA_MPa两个数组的长度一致。
2. 检查变量名拼写,确保在运行前已清空工作区 (clear,clc)。
结果与官方案例值有细微差异1. 几何尺寸、载荷大小不同。
2. 材料属性(E, ν)不同。
3. 边界条件施加细节不同。
1. 这是正常的。验证案例的核心是方法和趋势的正确性,即网格加密后Kt是否趋近于3。绝对值因模型细节而异。
2. 关注相对误差和收敛趋势,而非绝对数值的完全一致。

9. 最佳实践与工程建议

通过这个完整的案例,我们可以总结出在工程仿真中应用有限元分析的一些通用最佳实践:

  1. 理论先行,验证驱动:在进行任何复杂的仿真之前,尽可能寻找简化模型的理论解或可靠的实验数据作为验证基准。这能帮你快速判断仿真设置是否正确。
  2. 网格收敛性分析是必须的:永远不要只做一次网格划分就相信结果。尤其是应力、应变、热流密度等梯度大的场变量,必须进行收敛性研究。这是判断结果是否可靠的金科玉律。
  3. 理解“足够好”的网格:追求无限密的网格既不经济也无必要。通过收敛性研究,找到结果变化小于可接受公差(如1%-2%)的网格密度,即为该问题的“足够好”网格。这实现了精度与效率的平衡。
  4. 关注关键区域的网格:全局均匀加密是低效的。像本例一样,在应力集中区域(孔边)进行局部网格细化,而在应力变化平缓区域使用较粗的网格,可以大幅提升计算效率。
  5. 边界条件合理化:施加的约束和载荷应尽可能反映真实的物理情况,同时避免过约束或欠约束。对于对称模型,利用对称边界条件可以减小模型规模。
  6. 利用脚本进行自动化与后处理:如同我们使用MATLAB脚本进行理论计算、数据对比和绘图一样,在工程实践中,应学会利用ANSYS APDL命令流、Python脚本或Workbench的Journal文件来参数化建模、自动执行收敛性研究和批量后处理,提高工作效率和可重复性。
  7. 记录与报告:完整记录仿真设置的所有参数:几何尺寸、材料属性、单元类型、网格尺寸(全局和局部)、载荷和约束、求解器设置等。这便于自己回溯、他人复核或项目移交。

掌握从“建模仿真”到“理论验证”再到“收敛性分析”的完整闭环,是每一位合格的CAE工程师必备的技能。它不仅能确保你当前项目结果的可靠性,更能培养你面对全新问题时,如何系统化地建立信心、评估误差和交付成果的思维能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询