2. 轴向应变与修正面积计算实现

为什么必须用修正面积而不是初始面积

三轴试样在轴向压缩过程中,高度减小、直径增大,横截面积持续变化。若始终用初始面积 A₀ 去除轴向力,得到的应力会随应变增大而系统性偏高。修正面积 A_c 的作用,就是把当前轴向力换算到“当前真实承载截面”上。两种常用口径:

  • 考虑体变(排水/固结排水条件):由体积变化 ΔV 与轴向位移 ΔH 共同确定当前体积 V = V₀ − ΔV(压缩为正),当前高度 H = H₀ − ΔH,则 A_c = V / H。
  • 假定不排水(体积不变):V = V₀ 恒定,A_c = A₀·H₀ / H = A₀ / (1 − ε₁),其中 ε₁ = ΔH / H₀。

轴向应变统一定义为 ε₁ = ΔH / H₀(以压缩为正,ΔH 取正值)。下面用一段可直接运行的 Python 实现两种口径,并输出 ε₁–A_c 曲线数据。

实现:向量化计算与曲线数据生成

import numpy as np
import csv

def corrected_area(H0, D0, dH, dV=None, drained=True):
    """
    H0, D0 : 初始高度、初始直径 (mm)
    dH     : 轴向位移序列 (mm),压缩为正
    dV     : 体积变化序列 (mm^3),压缩(体积减小)为正;drained=False 时忽略
    drained: True 按体变修正;False 假定不排水
    返回 eps1(小数), Ac(mm^2)
    """
    H0, D0 = float(H0), float(D0)
    dH = np.asarray(dH, dtype=float)
    A0 = np.pi * D0**2 / 4.0
    V0 = A0 * H0
    eps1 = dH / H0
    H = H0 - dH
    if drained:
        dV = np.asarray(dV, dtype=float)
        V = V0 - dV
        Ac = V / H
    else:
        Ac = A0 * H0 / H          # 等价于 A0/(1-eps1)
    return eps1, Ac

# ---- 教学示例数据(示例值,非实测)----
H0, D0 = 80.0, 39.1          # mm
dH = np.array([0, 0.4, 0.8, 1.2, 1.6, 2.0, 2.4, 2.8, 3.2])
dV = np.array([0, 60, 118, 172, 222, 268, 310, 348, 382])  # mm^3

eps_d, Ac_d = corrected_area(H0, D0, dH, dV, drained=True)
eps_u, Ac_u = corrected_area(H0, D0, dH, drained=False)

A0 = np.pi * D0**2 / 4.0
print(f"A0 = {A0:.2f} mm^2, V0 = {A0*H0:.1f} mm^3")
print(f"{'eps1%':>7}{'Ac_drain':>11}{'Ac_undrain':>12}{'差值%':>8}")
for e, a1, a2 in zip(eps_d, Ac_d, Ac_u):
    print(f"{e*100:7.2f}{a1:11.2f}{a2:12.2f}{(a1-a2)/a2*100:8.2f}")

with open("area_curve.csv", "w", newline="") as f:
    w = csv.writer(f)
    w.writerow(["eps1", "Ac_drained_mm2", "Ac_undrained_mm2"])
    for row in zip(eps_d, Ac_d, Ac_u):
        w.writerow([f"{row[0]:.6f}", f"{row[1]:.4f}", f"{row[2]:.4f}"])

关键点:H = H0 - dH 必须与 V = V0 - dV 使用同一符号约定(压缩为正),否则 A_c 会朝错误方向变化。当 dH 接近 H0 时 H→0,A_c 会急剧放大,实际处理中应把 ε₁ 限制在合理范围(如 ≤20%)并对 H 设下限保护。

曲线形态与两种口径的差异

轴向应变 ε₁ 与修正面积 A_c 关系(示例数据) ε₁ (%) A_c (mm²) 0 1 2 3 4 1200 1250 1300 1350 1400 不排水:A₀/(1−ε₁) 考虑体变:V/H 体变修正偏高 体积不变基准 示例:H₀=80 mm,D₀=39.1 mm,A₀≈1200.6 mm²;曲线为按给定 dH、dV 序列计算所得

从曲线可读出两点工程含义:其一,两种口径在 ε₁=1% 时差异约 1%,到 ε₁=4% 时差异扩大到约 4.6%,应变越大越不能忽略体变;其二,排水条件下试样体积减小,A_c 增长快于不排水假设,若误用不排水公式会把偏应力算低。因此计算前必须先确认试验排水条件,再选择对应分支。

结果校验与进入应力计算的接口

计算完成后至少做三项检查:

  1. 端点自检:ε₁=0 时 A_c 应严格等于 A₀(排水口径下 dV=0 时 V₀/H₀=A₀),否则说明初始值或符号有误。
  2. 单调性:压缩过程中 A_c 应单调不减;若出现回落,检查 dV 是否被误填为膨胀正值或单位不一致(mm³ 与 cm³)。
  3. 量级核对:ε₁=5% 时不排水口径 A_c ≈ 1.053·A₀,若结果偏离该比例超过 1%,优先排查 H 的计算。

输出的 area_curve.csv 含 eps1、Ac_drained_mm2、Ac_undrained_mm2 三列,后续偏应力计算直接按 q = F / Ac(F 为轴向力,需与面积同单位制)取用对应列即可,无需在应力环节重复换算面积。

若原始数据只提供体积应变 ε_v 而非 ΔV,可用 ΔV = ε_v·V₀ 换算后再代入;注意部分厂家的 ε_v 以膨胀为正,需先统一为压缩为正。
当 ε₁ 超过约 15%~20% 时,试样可能已出现鼓胀或剪切带,均匀变形假设失效,此时 A_c 仅作为形式换算值,不宜再据此解读真实应力。