@theerapat-s28/ts-structural-eng-tools/strengthening
Strengthening
Moment-capacity and plate-to-concrete connection calculations for existing RC beams strengthened with steel plate jacketing.
The strengthening module evaluates how much a strengthening intervention
increases the flexural capacity of an existing beam. It follows a
transform-then-delegate pattern: the strengthening elements (steel plates)
are converted into equivalent rebar areas, the effective depths are recomputed, and the
capacity math is delegated to rectBeamMomentCapacity from the
rc module rather than reimplemented.
unit field.
A jacket is only effective if the plates are actually attached, so the module also sizes the
interface bolting between the concrete and each plate: the interface shear flow
q = V·Q/I from an elastic transformed section, the design shear strength of one
anchor bolt, and the resulting bolt pitch and count.
null where a plate is absent.
rc module.V (kN) and the sectionState used for the transformed section.phiVboltOverride.PlateShearFlowInput plus the bolt, the bolts per row, and the transfer length.topSteelWidth and topSteelThickness are both positive.bottomSteelWidth and bottomSteelThickness are both positive.The original section is run through
rectBeamMomentCapacity unchanged —
this becomes the before result.
Plate areas are scaled by the strength ratio
n = fy,plate / fy,rebar
so they can be treated as additional reinforcement of the rebar's grade.
d (and d_ whenever compression steel or a top plate is
present) are replaced by the area-weighted centroids of the combined rebar + plate
steel, still measured from the extreme concrete compression fibre. The bottom plate
sits below the soffit; a top plate sits above the datum and so takes a negative depth.
The modified section is run through
rectBeamMomentCapacity again —
this becomes the after result, with warnings merged.
rc-beam-steel-plate-jacketing.tsCalculates the design moment capacity of an RC beam before and after strengthening with top and bottom steel plates. The bottom plate contributes to the tension steel; the top plate contributes to the compression steel — including on an originally singly reinforced section, which a top plate turns into a doubly reinforced one.
| Param | Type | Unit | Required? | Description |
|---|---|---|---|---|
| Es | number | MPa | Required | Elastic modulus of reinforcing steel |
| fc_ | number | MPa | Required | Specified compressive strength of concrete f′c |
| fy | number | MPa | Required | Yield strength of the existing rebar |
| As | number | mm² | Required | Area of existing tension reinforcement |
| b | number | mm | Required | Section width |
| h | number | mm | Required | Overall section height |
| d | number | mm | Required | Effective depth to the existing tension steel |
| As_ | number | mm² | Optional | Area of existing compression reinforcement (doubly reinforced only) |
| d_ | number | mm | Optional | Depth to the existing compression steel centroid |
| Param | Type | Unit | Required? | Description |
|---|---|---|---|---|
| Es | number | MPa | Required | Elastic modulus of the steel plates |
| fy | number | MPa | Required | Yield strength of the steel plates |
| topSteelWidth | number | mm | Optional | Width of the top plate — omit or set to 0 for no top plate |
| topSteelThickness | number | mm | Optional | Thickness of the top plate |
| bottomSteelWidth | number | mm | Optional | Width of the bottom plate — omit or set to 0 for no bottom plate |
| bottomSteelThickness | number | mm | Optional | Thickness of the bottom plate |
import { calculateSteelJacketedBeamMomentCapacity } from '@theerapat-s28/ts-structural-eng-tools/strengthening'; const result = calculateSteelJacketedBeamMomentCapacity( { Es: 200000, // MPa fc_: 28, // MPa fy: 390, // MPa As: 1472.6, // mm² (3-DB25) b: 300, // mm h: 500, // mm d: 440, // mm }, { Es: 200000, // MPa fy: 245, // MPa (SS400 plate) topSteelWidth: 300, // mm topSteelThickness: 6, // mm bottomSteelWidth: 300, // mm bottomSteelThickness: 6 // mm }, );
{
before: { // original section
phiMn: 206.64,
calculationDetails: {
c: 94.63, a: 80.44, beta1: 0.85,
d: 440, As: 1472.6, ro: 0.011156
},
unit: 'kN-m',
warnings: []
},
after: { // jacketed section
phiMn: 407.47, // +97% capacity in this example
calculationDetails: {
c: 94.63, // mm, neutral axis from the concrete face
a: 80.44, // mm, stress block depth — concrete only
beta1: 0.85,
d: 467.364, // mm, rebar + bottom plate centroid
d_: -3, // mm, top plate centroid — above the concrete face
As: 2603.37, // mm², rebar + bottom plate
As_: 1130.77, // mm², top plate as compression steel
fs_: 390, // MPa, capped at fy — the top plate yields
ro: 0.018568,
ro_: 0.008065
},
unit: 'kN-m',
warnings: []
}
}
Both entries have the same shape as a rectBeamMomentCapacity result. The
after warnings are the merged set from the jacketed-section run.
rectBeamMomentCapacity apply to both the before and after runs — see the rc module reference for the full list.
d_ (half its thickness above that face), and d is unchanged by adding one. Note this differs from the datum used by the interface-bolting functions below.
rectBeamMomentCapacity: the added plate steel can push a section out of the tension-controlled region even when the original section was fine. Because before and after are computed in one call, a throw from either leg loses both results.
rc-beam-plate-interface-bolts.tsHorizontal shear must be transferred across the concrete-to-plate interface for the jacket to act compositely. These functions compute that demand from an elastic transformed section and size the bolt group that resists it.
Q at a cut is the first moment of the area beyond it — the plate alone — while ybar and Itr come from a single solve that includes every plate present. Adding a top plate therefore changes the bottom interface result too, so the two cannot be computed independently.
Calculates q = V·Q/I at each concrete-to-plate interface using an elastic
transformed section. Rebar is transformed with (n−1) because it displaces
concrete already counted in the section; the plates sit outside the concrete and take the
full n. Both moduli use Ec = 4700√f′c.
| Param | Type | Unit | Required? | Description |
|---|---|---|---|---|
| section | RectBeamSection | — | Required | The original beam section (singly or doubly reinforced) |
| plates | SteelJacketedProps | — | Required | Plate material and dimensions; at least one plate must be present |
| V | number | kN | Required | Factored shear force at the section under consideration |
| sectionState | 'cracked' | 'uncracked' | — | Optional | Transformed section basis (default: 'cracked') |
import { plateInterfaceShearFlow } from '@theerapat-s28/ts-structural-eng-tools/strengthening'; const flow = plateInterfaceShearFlow({ section: { Es: 200000, fc_: 28, fy: 400, As: 1200, b: 300, h: 500, d: 440, }, plates: { Es: 200000, fy: 250, bottomSteelWidth: 200, // mm — bottom plate only bottomSteelThickness: 10, // mm }, V: 150, // kN });
{
top: null, // no top plate in this example
bottom: {
q: 247.71, // N/mm of shear flow to transfer
Q: 4681782, // mm³, first moment of the plate about the NA
leverArm: 291.09 // mm, plate centroid to neutral axis
},
calculationDetails: {
Ec: 24870.06, // MPa
ns: 8.042, // Es,rebar / Ec
np: 8.042, // Es,plate / Ec
ybar: 213.91, // mm, neutral axis from the datum
Itr: 2835033974, // mm⁴
sectionState: 'cracked'
},
unit: 'N/mm',
warnings: []
}
Depths here are measured from a datum at the top face of the top plate
(the concrete top face when there is no top plate), which is what
ybar and every y in the transformed section refer to. This is
not the datum used by calculateSteelJacketedBeamMomentCapacity,
which measures from the extreme concrete compression fibre so that its stress block
covers concrete only. Each function is internally consistent; only compare depths
within one of them.
'cracked' default suits a strengthened beam under service load and gives the higher, conservative q. Use 'uncracked' only when the beam is known to stay below its cracking moment.
Design shear strength of a single anchor bolt from the steel strength per
ACI 318-19 17.7.1.2b, Vsa = 0.6·Ase,V·futa, with φ = 0.65
(Table 17.5.3) and the futa cap of 17.6.1.2.
| Param | Type | Unit | Required? | Description |
|---|---|---|---|---|
| Ase | number | mm² | Required | Effective cross-sectional area of the anchor in shear |
| futa | number | MPa | Required | Specified tensile strength of the anchor steel |
| fya | number | MPa | Optional | Specified yield strength; enables the 1.9·fya part of the cap |
| diameter | number | mm | Optional | Anchor diameter; enables the ACI 17.9.2 minimum spacing check in plateInterfaceBoltRequirement |
| shearPlanes | number | — | Optional | Shear planes per bolt (default: 1) |
| phiVboltOverride | number | kN | Optional | Bypasses the computed steel strength — use for post-installed anchors with an ESR value |
import { boltShearCapacity } from '@theerapat-s28/ts-structural-eng-tools/strengthening'; const bolt = boltShearCapacity({ Ase: 157, // mm² (M16) futa: 400, // MPa fya: 240, // MPa diameter: 16, // mm });
{
phiVbolt: 24.49, // kN, 0.65 * 37.68
calculationDetails: {
source: 'ACI318-19, 17.7.1.2b',
Vsa: 37.68, // kN, 0.6 * 157 * 400
futaEffective: 400, // MPa, below min(1.9*fya, 860)
shearPlanes: 1
},
unit: 'kN',
warnings: [
{
reference: 'ACI318-19, 17.7.2',
message: 'Only anchor steel strength in shear is evaluated; ...'
}
]
}
phiVboltOverride is used, and these limit states must be checked separately.
futa exceeds min(1.9·fya, 860 MPa) and is capped.
Determines the bolts required at every plate present. For each interface the required pitch
follows from the shear flow, s = n·φVbolt / q, and the bolt count is the larger
of that pitch over the transfer length and the count needed to develop the full plate yield
force, Ap·fy / φVbolt. governedBy reports which one controls.
| Param | Type | Unit | Required? | Description |
|---|---|---|---|---|
| section | RectBeamSection | — | Required | The original beam section |
| plates | SteelJacketedProps | — | Required | Plate material and dimensions |
| V | number | kN | Required | Factored shear force at the section |
| sectionState | 'cracked' | 'uncracked' | — | Optional | Transformed section basis (default: 'cracked') |
| bolt | BoltProps | — | Required | Anchor properties, passed to boltShearCapacity |
| boltsPerRow | number | — | Required | Bolts across the plate width at each pitch location |
| transferLength | number | mm | Required | Length over which the plate force is transferred (typically zero moment to maximum moment) |
import { plateInterfaceBoltRequirement } from '@theerapat-s28/ts-structural-eng-tools/strengthening'; const bolts = plateInterfaceBoltRequirement({ section: { Es: 200000, fc_: 28, fy: 400, As: 1200, b: 300, h: 500, d: 440, As_: 600, d_: 50, }, plates: { Es: 200000, fy: 250, topSteelWidth: 200, // mm topSteelThickness: 10, // mm bottomSteelWidth: 200, bottomSteelThickness: 10, }, V: 150, // kN bolt: { Ase: 157, futa: 400, fya: 240, diameter: 16 }, boltsPerRow: 2, transferLength: 2000, // mm });
{
top: {
q: 121.2, Q: 2870171, leverArm: 178.45,
requiredSpacing: 300, // mm, capped at the detailing limit
boltCount: 21,
governedBy: 'plateForce', // near the compression face, q is low
calculationDetails: {
spacingFromShearFlow: 404.1,
rows: 8,
boltCountFromShearFlow: 16,
boltCountFromPlateForce: 21,
plateForce: 500 // kN, Ap * fy
}
},
bottom: {
q: 225.17, Q: 5332462, leverArm: 331.55,
requiredSpacing: 217.5,
boltCount: 22,
governedBy: 'shearFlow',
calculationDetails: {
spacingFromShearFlow: 217.5,
rows: 11,
boltCountFromShearFlow: 22,
boltCountFromPlateForce: 21,
plateForce: 500
}
},
calculationDetails: {
Ec: 24870.06, ns: 8.042, np: 8.042,
ybar: 183.45, Itr: 3552281591,
sectionState: 'cracked',
phiVbolt: 24.49,
boltsPerRow: 2,
transferLength: 2000
},
unit: 'kN',
warnings: [ /* breakout notice + top plate pitch cap */ ]
}
rows is ceil(transferLength / requiredSpacing) + 1, so both ends of
the transfer length carry a row, and boltCount is rows × boltsPerRow
unless the plate force governs.
governedBy: 'plateForce' — it sits near the compression face, so its lever arm to the neutral axis is short and q is low, but the plate still has to develop its force somewhere. A bottom plate is usually governed by shear flow.
4·da (only checked when diameter is supplied).
boltsPerRow or transferLength is not positive.
| Kind | Export | Returns | Description |
|---|---|---|---|
| FN | calculateSteelJacketedBeamMomentCapacity | { before, after } | Moment capacity of an RC beam before and after steel plate jacketing |
| FN | plateInterfaceShearFlow | { top, bottom, calculationDetails, unit, warnings } | Shear flow q = V·Q/I at each concrete-to-plate interface |
| FN | boltShearCapacity | { phiVbolt, calculationDetails, unit, warnings } | Design shear strength of one anchor bolt from the steel strength |
| FN | plateInterfaceBoltRequirement | { top, bottom, calculationDetails, unit, warnings } | Required bolt pitch and count at each interface, with the governing requirement |