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 设下限保护。
曲线形态与两种口径的差异
从曲线可读出两点工程含义:其一,两种口径在 ε₁=1% 时差异约 1%,到 ε₁=4% 时差异扩大到约 4.6%,应变越大越不能忽略体变;其二,排水条件下试样体积减小,A_c 增长快于不排水假设,若误用不排水公式会把偏应力算低。因此计算前必须先确认试验排水条件,再选择对应分支。
结果校验与进入应力计算的接口
计算完成后至少做三项检查:
- 端点自检:ε₁=0 时 A_c 应严格等于 A₀(排水口径下 dV=0 时 V₀/H₀=A₀),否则说明初始值或符号有误。
- 单调性:压缩过程中 A_c 应单调不减;若出现回落,检查 dV 是否被误填为膨胀正值或单位不一致(mm³ 与 cm³)。
- 量级核对:ε₁=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 仅作为形式换算值,不宜再据此解读真实应力。