# 双塔三跨斜拉桥与辅助墩：计算模型

本交互用实际求解的连续梁和固定底悬臂塔响应，展示给定索力时辅助墩、局部调索与全梁内力的关系。它是教学线弹性模型，不是实际桥梁设计验算。主梁先按给定竖向索力求解，两塔随后按索力和各自梁支反力计算；塔位移不反馈到索力中。

## 几何、荷载与默认值

全梁长 320 m，跨径为 80+160+80 m；两塔位于 x=80、240 m。端支座位于 x=0、320 m，可选辅助墩分别位于 x=40、280 m。启用的每个支座只约束竖向位移，允许梁截面转动，主梁在塔位及辅助墩处连续，**不设置内铰**。

主梁 EI=8×10⁸ kN·m²，均布荷载 q=80 kN/m、方向向下。塔基在桥面下 15 m，索锚在桥面上 45 m；塔基坐标 Z=0、桥面 Z=15 m、塔顶 Z=60 m。每座塔采用 EI=2×10⁸ kN·m² 的固定底悬臂模型。

32 根索分成四组，每组 8 根。下表 x 为梁上锚点坐标；四组及组内均按 x 递增组成全局索力向量。UI 可从塔向外重新显示编号，但不得改变全局索力索引。

| 组名 | 所属塔 | 梁上锚点 x（m） | 默认单索竖向托力 V（kN） |
|---|---|---|---|
| leftSide | 左塔 | 8、16、24、32、48、56、64、72 | 600 |
| leftMain | 左塔 | 88、96、104、112、128、136、144、152 | 750 |
| rightMain | 右塔 | 168、176、184、192、208、216、224、232 | 750 |
| rightSide | 右塔 | 248、256、264、272、288、296、304、312 | 600 |

所有索锚均避开支座；四组索全部锚于各自塔顶。总竖向托力 21600 kN，总均布荷载 25600 kN，因此梁支反力合计为 4000 kN。显示的 V 是竖向分量，实际索拉力 T=V/sinθ，水平分量 H=V·|x−x塔|/45，θ=atan2(45,|x−x塔|)。角度计算采用桥面上塔高 45 m，而非塔全高 60 m。

手动拖动改变指定索的 V，锚点的参考坐标不变；它不模拟张拉千斤顶行程或索的无应力长度调整。UI 的 V 范围为 0～2000 kN；计算器拒绝负 V，超出 2000 时保留数值并以 withinForceBounds=false 标记。

## 连续梁力法

以两端简支的 320 m 梁为基本体系。令 f(x,a) 为该基本体系在 a 点施加单位向下集中力时 x 点的向下挠度，m(x,a) 为对应的正弯矩影响函数。先计算给定索力下的自由响应：

\[
w_{free}(x)=\frac{q x(L^3-2Lx^2+x^3)}{24EI}-\sum_i V_i f(x,a_i).
\]

内部竖向支座包括两塔，以及已启用的辅助墩。它们的支反力 R_j 以向上为正，由相容条件联立求解：

\[
\sum_j f(s_k,s_j)R_j=w_{free}(s_k).
\]

这里是 2～4 阶柔度矩阵，采用列主元消元。最终：

\[
w(x)=w_{free}(x)-\sum_jR_jf(x,s_j),\qquad
M(x)=\frac{qx(L-x)}2-\sum_iV_im(x,a_i)-\sum_jR_jm(x,s_j).
\]

M 以正弯矩（下缘受拉）为正，w 向下为正，V 与支反力均对梁向上为正。端反力由同一基本体系的反力修正计算。所有启用支座满足 w=0；支座处弯矩一般不为零，截面转角连续。代码同时返回整体竖向力及对左端力矩平衡残差。

默认曲线采样 321 点（x 间隔 1 m）。全梁及各跨的 maxAbsMoment、maxAbsDeflection 是这些点上的最大绝对值，不宣称为连续函数的精确极值。energy=∫M²/(2EI)dx，单位 kN·m；rmsDeflection=√[∫w²dx/L]，单位 m。积分区间在每个索锚和支座处分段，再作五点 Gauss 积分；对于此模型的分段多项式，积分阶数足够精确。

## 两塔与荷载传递

左侧索对塔产生 −H 水平力，右侧索产生 +H 水平力；所有索对塔产生向下的 V。每座塔额外接收自身梁支座反力，作为 Z=15 m 处竖向荷载。正 R塔 向下压塔，负 R塔 表示相应梁塔连接对塔向上作用。辅助墩反力单独传到辅助墩基础，不计入主塔轴力。

塔底弯矩为 Σ(±H·60)，塔底剪力为 Σ(±H)，塔底轴向压力为 ΣV+R塔。塔顶水平位移按各水平集中力的悬臂梁解叠加，向右为正。塔的基底反力与外荷载弯矩符号相反；towerResponses.bottom.moment 表示塔内力响应的约定符号，不是额外施加在塔基上的外力矩。

同一 V 和 q 下切换辅助墩，会改变梁响应、各支反力和塔轴力。由于本模型未回算索力变化，塔的 H、剪力、弯矩及水平位移不因此改变。不能将这一教学结果推广为真实耦合桥梁中辅助墩对塔的侧向响应完全没有影响。模型未计算主梁水平轴力、水平支座反力、索垂度、几何刚度、塔梁二阶效应、施工阶段或基础变形。

若某支反力为负，代码保留该反力，supportUplift=true，upliftSupports 列出位置。它表示理想双向竖向约束所需的抗拔力。普通只承压支座无法直接实现该状态；不能把反力截成零而仍沿用原响应。全 32 根 V=600 kN 且双辅助墩启用时，两辅助墩反力各为 −468.363636 kN，可作为此现象的对照。

## 同一组索力的辅助墩对照

下列结果均用表中 600/750 kN 默认 V、同一 q 和 EI。曲线指标取默认 321 点；左右对称，边跨指标两边相同。

| 状态 | 支反力，按 x 递增（kN） | 每边跨最大绝对弯矩（kN·m） | 每边跨最大绝对挠度（mm） | 主跨最大绝对弯矩（kN·m） | 主跨最大绝对挠度（mm） |
|---|---|---:|---:|---:|---:|
| 无辅助墩 | x=0/80/240/320：676.25/1323.75/1323.75/676.25 | 11137.5 | 6.844568 | 9900 | 5.733333 |
| 双辅助墩 | x=0/40/80/240/280/320：408/592/1000/1000/592/408 | 7680 | 0.653813 | 8320 | 14.613333 |

默认双辅助墩均承压。增加辅助墩明显降低边跨的弯矩和挠度，但主跨最大挠度由 5.733333 增至 14.613333 mm；因此应分别读取各跨指标，不能用“加墩后所有响应都下降”概括。

默认每塔索竖向合力为 10800 kN。无辅助墩时每塔基底轴压为 12123.75 kN，双辅助墩时为 11800 kN。两种状态的左/右塔基底剪力分别为 ±1066.666667 kN，基底弯矩为 ±64000 kN·m，塔顶位移为 ±0.384 m，正号对应左塔向右。整体对称，但两塔均向跨中弯曲。只把 rightMain 组增加 20% 后，右塔基底弯矩为 −128000 kN·m，左塔仍为 +64000 kN·m。

## API

```js
import {
  TWIN_MODEL, TWIN_CABLES, defaultTwinForces, analyzeTwinBridge,
} from './twin-mechanics.js';

const V = defaultTwinForces();
const current = analyzeTwinBridge(V, {
  auxiliaryLeft: true,
  auxiliaryRight: true,
  samples: 321,
});
const withoutAux = analyzeTwinBridge(V, {
  auxiliaryLeft: false,
  auxiliaryRight: false,
});
```

q、EI、towerEI 可以通过 options 覆盖；梁长、塔位、辅助墩位置及索锚固定。TWIN_MODEL.towerHeight=45 是桥面以上高度；baseBelowDeck=15。TWIN_CABLES 中每索的 z=60 是塔基坐标，angle 单位为弧度。

输出结构：

- x、moment、deflection：等长曲线数组，单位 m、kN·m、m。
- forces、cables：竖向索力向量，以及带 V/H/T 的索几何元数据。
- reactions：按 x 递增的 `{id,x,value,deflection}` 数组，仅含启用支座；id 为 endLeft、auxLeft、towerLeft、towerRight、auxRight、endRight，未启用辅助墩不出现在数组中。
- towerResponses：左塔、右塔两个现有 towerResponse 输出，并补 id、towerX、towerIndex、reactionFromBeam；可直接使用其 z/shear/moment/axial/deflection 曲线、bottom 汇总与 topDeflection。
- spanStats：`leftSide`、`main`、`rightSide` 各含 `{from,to,maxAbsMoment,maxAbsDeflection}`。
- maxAbsMoment、maxAbsDeflection、rmsDeflection、energy：全梁指标。
- equilibriumResidual、momentEquilibriumResidual：力平衡与对左端力矩平衡残差，单位 kN、kN·m。
- supportUplift、upliftSupports、withinForceBounds：支座抗拔及索力范围提示。
- model：本次使用的参数。

## 独立核验

执行 `node --test twin-mechanics.test.mjs`。2026-10-22 实测 9 项测试全部通过。

1. 无索、无辅助墩的 80+160+80 m 连续梁，用三弯矩方程独立求得两塔处 M=−1800q=−144000 kN·m，两端反力 17.5q=1400 kN、两塔反力 142.5q=11400 kN，主跨跨中 M=1400q=112000 kN·m。
2. 另建独立 Euler–Bernoulli 梁有限元程序：4 m 单元、81 节点，每节点竖向位移及转角两个自由度，均布荷载采用一致节点荷载，只约束支座竖向位移。采用刚度法求解，不调用本计算器的柔度或弯矩影响函数。
3. 有限元交叉核验双辅助墩、无辅助墩、单辅助墩加不对称索力三类状态；反力容差 10⁻⁴ kN，节点位移容差 10⁻⁸ m，节点弯矩容差 0.01 kN·m。
4. 其余测试覆盖全部索锚避开支座、默认力平衡与支座位移、左右对称/镜像、局部调索、单侧辅助墩开关、负反力保留、塔轴力荷载路径和不合法输入。
