@theerapat-s28/ts-structural-eng-tools 1.4.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -4
- package/dist/core/constants/frame.constant.d.ts +14 -0
- package/dist/core/constants/frame.constant.js +18 -0
- package/dist/core/constants/frame.constant.js.map +1 -0
- package/dist/core/constants/rc.constant.d.ts +7 -0
- package/dist/core/constants/rc.constant.js +20 -1
- package/dist/core/constants/rc.constant.js.map +1 -1
- package/dist/core/errors/frame-analysis.error.d.ts +33 -0
- package/dist/core/errors/frame-analysis.error.js +74 -0
- package/dist/core/errors/frame-analysis.error.js.map +1 -0
- package/dist/core/errors/rc-design.error.js +8 -0
- package/dist/core/errors/rc-design.error.js.map +1 -1
- package/dist/core/index.d.ts +7 -3
- package/dist/core/index.js +16 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/types/plate-jacketing.type.d.ts +37 -0
- package/dist/core/types/plate-jacketing.type.js +8 -0
- package/dist/core/types/plate-jacketing.type.js.map +1 -1
- package/dist/core/types/section-properties.type.d.ts +13 -0
- package/dist/core/types/section-properties.type.js +3 -0
- package/dist/core/types/section-properties.type.js.map +1 -0
- package/dist/esm/core/constants/frame.constant.js +15 -0
- package/dist/esm/core/constants/frame.constant.js.map +1 -0
- package/dist/esm/core/constants/rc.constant.js +63 -0
- package/dist/esm/core/constants/rc.constant.js.map +1 -0
- package/dist/esm/core/errors/frame-analysis.error.js +70 -0
- package/dist/esm/core/errors/frame-analysis.error.js.map +1 -0
- package/dist/esm/core/errors/rc-design.error.js +64 -0
- package/dist/esm/core/errors/rc-design.error.js.map +1 -0
- package/dist/esm/core/index.js +9 -0
- package/dist/esm/core/index.js.map +1 -0
- package/dist/esm/core/types/output-message.type.js +2 -0
- package/dist/esm/core/types/output-message.type.js.map +1 -0
- package/dist/esm/core/types/plate-jacketing.type.js +18 -0
- package/dist/esm/core/types/plate-jacketing.type.js.map +1 -0
- package/dist/esm/core/types/rc-beam.type.js +11 -0
- package/dist/esm/core/types/rc-beam.type.js.map +1 -0
- package/dist/esm/core/types/section-properties.type.js +2 -0
- package/dist/esm/core/types/section-properties.type.js.map +1 -0
- package/dist/esm/core/types/unit.type.js +2 -0
- package/dist/esm/core/types/unit.type.js.map +1 -0
- package/dist/esm/fea/frame/elements/beam-3d-stiffness.js +84 -0
- package/dist/esm/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
- package/dist/esm/fea/frame/elements/fixed-end-forces.js +75 -0
- package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -0
- package/dist/esm/fea/frame/elements/static-condensation.js +55 -0
- package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -0
- package/dist/esm/fea/frame/index.js +6 -0
- package/dist/esm/fea/frame/index.js.map +1 -0
- package/dist/esm/fea/frame/post/demand-envelope.js +97 -0
- package/dist/esm/fea/frame/post/demand-envelope.js.map +1 -0
- package/dist/esm/fea/frame/post/envelope.js +59 -0
- package/dist/esm/fea/frame/post/envelope.js.map +1 -0
- package/dist/esm/fea/frame/post/member-diagram.js +332 -0
- package/dist/esm/fea/frame/post/member-diagram.js.map +1 -0
- package/dist/esm/fea/frame/post/present-state.js +106 -0
- package/dist/esm/fea/frame/post/present-state.js.map +1 -0
- package/dist/esm/fea/frame/solver/analyze-frame.js +123 -0
- package/dist/esm/fea/frame/solver/analyze-frame.js.map +1 -0
- package/dist/esm/fea/frame/solver/boundary-conditions.js +33 -0
- package/dist/esm/fea/frame/solver/boundary-conditions.js.map +1 -0
- package/dist/esm/fea/frame/solver/combinations.js +69 -0
- package/dist/esm/fea/frame/solver/combinations.js.map +1 -0
- package/dist/esm/fea/frame/solver/frame-system.js +122 -0
- package/dist/esm/fea/frame/solver/frame-system.js.map +1 -0
- package/dist/esm/fea/frame/solver/global-assembly.js +27 -0
- package/dist/esm/fea/frame/solver/global-assembly.js.map +1 -0
- package/dist/esm/fea/frame/solver/load-case-solver.js +119 -0
- package/dist/esm/fea/frame/solver/load-case-solver.js.map +1 -0
- package/dist/esm/fea/frame/transformation/coordinate-transform.js +71 -0
- package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -0
- package/dist/esm/fea/frame/types/model.type.js +2 -0
- package/dist/esm/fea/frame/types/model.type.js.map +1 -0
- package/dist/esm/fea/frame/types/results.type.js +2 -0
- package/dist/esm/fea/frame/types/results.type.js.map +1 -0
- package/dist/esm/fea/frame/validation/validate-model.js +292 -0
- package/dist/esm/fea/frame/validation/validate-model.js.map +1 -0
- package/dist/esm/fea/index.js +3 -0
- package/dist/esm/fea/index.js.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/rc/general.js +32 -0
- package/dist/esm/rc/general.js.map +1 -0
- package/dist/esm/rc/index.js +5 -0
- package/dist/esm/rc/index.js.map +1 -0
- package/dist/esm/rc/rc-bar-layout.js +89 -0
- package/dist/esm/rc/rc-bar-layout.js.map +1 -0
- package/dist/esm/rc/rc-beam-design.js +320 -0
- package/dist/esm/rc/rc-beam-design.js.map +1 -0
- package/dist/esm/rc/rc-section-properties.js +55 -0
- package/dist/esm/rc/rc-section-properties.js.map +1 -0
- package/dist/esm/strengthening/index.js +4 -0
- package/dist/esm/strengthening/index.js.map +1 -0
- package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js +338 -0
- package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js.map +1 -0
- package/dist/esm/strengthening/rc-beam-side-plate-shear.js +381 -0
- package/dist/esm/strengthening/rc-beam-side-plate-shear.js.map +1 -0
- package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js +90 -0
- package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js.map +1 -0
- package/dist/esm/utils/index.js +5 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/math.js +30 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/matrix.js +145 -0
- package/dist/esm/utils/matrix.js.map +1 -0
- package/dist/esm/utils/merge-warning.js +11 -0
- package/dist/esm/utils/merge-warning.js.map +1 -0
- package/dist/esm/utils/skyline.js +151 -0
- package/dist/esm/utils/skyline.js.map +1 -0
- package/dist/fea/frame/elements/beam-3d-stiffness.d.ts +29 -0
- package/dist/fea/frame/elements/beam-3d-stiffness.js +90 -0
- package/dist/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
- package/dist/fea/frame/elements/fixed-end-forces.d.ts +22 -0
- package/dist/fea/frame/elements/fixed-end-forces.js +79 -0
- package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -0
- package/dist/fea/frame/elements/static-condensation.d.ts +19 -0
- package/dist/fea/frame/elements/static-condensation.js +59 -0
- package/dist/fea/frame/elements/static-condensation.js.map +1 -0
- package/dist/fea/frame/index.d.ts +9 -0
- package/dist/fea/frame/index.js +16 -0
- package/dist/fea/frame/index.js.map +1 -0
- package/dist/fea/frame/post/demand-envelope.d.ts +36 -0
- package/dist/fea/frame/post/demand-envelope.js +101 -0
- package/dist/fea/frame/post/demand-envelope.js.map +1 -0
- package/dist/fea/frame/post/envelope.d.ts +8 -0
- package/dist/fea/frame/post/envelope.js +63 -0
- package/dist/fea/frame/post/envelope.js.map +1 -0
- package/dist/fea/frame/post/member-diagram.d.ts +26 -0
- package/dist/fea/frame/post/member-diagram.js +336 -0
- package/dist/fea/frame/post/member-diagram.js.map +1 -0
- package/dist/fea/frame/post/present-state.d.ts +19 -0
- package/dist/fea/frame/post/present-state.js +111 -0
- package/dist/fea/frame/post/present-state.js.map +1 -0
- package/dist/fea/frame/solver/analyze-frame.d.ts +67 -0
- package/dist/fea/frame/solver/analyze-frame.js +128 -0
- package/dist/fea/frame/solver/analyze-frame.js.map +1 -0
- package/dist/fea/frame/solver/boundary-conditions.d.ts +14 -0
- package/dist/fea/frame/solver/boundary-conditions.js +37 -0
- package/dist/fea/frame/solver/boundary-conditions.js.map +1 -0
- package/dist/fea/frame/solver/combinations.d.ts +11 -0
- package/dist/fea/frame/solver/combinations.js +73 -0
- package/dist/fea/frame/solver/combinations.js.map +1 -0
- package/dist/fea/frame/solver/frame-system.d.ts +42 -0
- package/dist/fea/frame/solver/frame-system.js +126 -0
- package/dist/fea/frame/solver/frame-system.js.map +1 -0
- package/dist/fea/frame/solver/global-assembly.d.ts +17 -0
- package/dist/fea/frame/solver/global-assembly.js +33 -0
- package/dist/fea/frame/solver/global-assembly.js.map +1 -0
- package/dist/fea/frame/solver/load-case-solver.d.ts +34 -0
- package/dist/fea/frame/solver/load-case-solver.js +124 -0
- package/dist/fea/frame/solver/load-case-solver.js.map +1 -0
- package/dist/fea/frame/transformation/coordinate-transform.d.ts +21 -0
- package/dist/fea/frame/transformation/coordinate-transform.js +76 -0
- package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -0
- package/dist/fea/frame/types/model.type.d.ts +112 -0
- package/dist/fea/frame/types/model.type.js +3 -0
- package/dist/fea/frame/types/model.type.js.map +1 -0
- package/dist/fea/frame/types/results.type.d.ts +134 -0
- package/dist/fea/frame/types/results.type.js +3 -0
- package/dist/fea/frame/types/results.type.js.map +1 -0
- package/dist/fea/frame/validation/validate-model.d.ts +18 -0
- package/dist/fea/frame/validation/validate-model.js +298 -0
- package/dist/fea/frame/validation/validate-model.js.map +1 -0
- package/dist/fea/index.d.ts +1 -0
- package/dist/fea/index.js +19 -0
- package/dist/fea/index.js.map +1 -0
- package/dist/index.d.ts +9 -5
- package/dist/index.js +44 -1
- package/dist/index.js.map +1 -1
- package/dist/rc/index.d.ts +2 -0
- package/dist/rc/index.js +3 -1
- package/dist/rc/index.js.map +1 -1
- package/dist/rc/rc-section-properties.d.ts +35 -0
- package/dist/rc/rc-section-properties.js +59 -0
- package/dist/rc/rc-section-properties.js.map +1 -0
- package/dist/strengthening/index.d.ts +1 -0
- package/dist/strengthening/index.js +5 -1
- package/dist/strengthening/index.js.map +1 -1
- package/dist/strengthening/rc-beam-side-plate-shear.d.ts +254 -0
- package/dist/strengthening/rc-beam-side-plate-shear.js +420 -0
- package/dist/strengthening/rc-beam-side-plate-shear.js.map +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +19 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/matrix.d.ts +45 -0
- package/dist/utils/matrix.js +157 -0
- package/dist/utils/matrix.js.map +1 -0
- package/dist/utils/skyline.d.ts +49 -0
- package/dist/utils/skyline.js +161 -0
- package/dist/utils/skyline.js.map +1 -0
- package/package.json +20 -2
package/dist/rc/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.rectBeamBarLayout = exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.checkStirrupRequirement = exports.stirrupShearCapacity = exports.concreteShearCapacity = exports.rectBeamMomentCapacity = void 0;
|
|
3
|
+
exports.rectBeamToSectionProperties = exports.rectBeamBarLayout = exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.checkStirrupRequirement = exports.stirrupShearCapacity = exports.concreteShearCapacity = exports.rectBeamMomentCapacity = void 0;
|
|
4
4
|
var rc_beam_design_1 = require("./rc-beam-design");
|
|
5
5
|
Object.defineProperty(exports, "rectBeamMomentCapacity", { enumerable: true, get: function () { return rc_beam_design_1.rectBeamMomentCapacity; } });
|
|
6
6
|
Object.defineProperty(exports, "concreteShearCapacity", { enumerable: true, get: function () { return rc_beam_design_1.concreteShearCapacity; } });
|
|
@@ -12,4 +12,6 @@ Object.defineProperty(exports, "concreteElasticModulus", { enumerable: true, get
|
|
|
12
12
|
Object.defineProperty(exports, "psiToMpa", { enumerable: true, get: function () { return general_1.psiToMpa; } });
|
|
13
13
|
var rc_bar_layout_1 = require("./rc-bar-layout");
|
|
14
14
|
Object.defineProperty(exports, "rectBeamBarLayout", { enumerable: true, get: function () { return rc_bar_layout_1.rectBeamBarLayout; } });
|
|
15
|
+
var rc_section_properties_1 = require("./rc-section-properties");
|
|
16
|
+
Object.defineProperty(exports, "rectBeamToSectionProperties", { enumerable: true, get: function () { return rc_section_properties_1.rectBeamToSectionProperties; } });
|
|
15
17
|
//# sourceMappingURL=index.js.map
|
package/dist/rc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rc/index.ts"],"names":[],"mappings":";;;AAAA,mDAK0B;AAJxB,wHAAA,sBAAsB,OAAA;AACtB,uHAAA,qBAAqB,OAAA;AACrB,sHAAA,oBAAoB,OAAA;AACpB,yHAAA,uBAAuB,OAAA;AAEzB,qCAA2E;AAAlE,uGAAA,YAAY,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAAE,mGAAA,QAAQ,OAAA;AACvD,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rc/index.ts"],"names":[],"mappings":";;;AAAA,mDAK0B;AAJxB,wHAAA,sBAAsB,OAAA;AACtB,uHAAA,qBAAqB,OAAA;AACrB,sHAAA,oBAAoB,OAAA;AACpB,yHAAA,uBAAuB,OAAA;AAEzB,qCAA2E;AAAlE,uGAAA,YAAY,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAAE,mGAAA,QAAQ,OAAA;AACvD,iDAAoD;AAA3C,kHAAA,iBAAiB,OAAA;AAC1B,iEAAsE;AAA7D,oIAAA,2BAA2B,OAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Warnings } from "../core/types/output-message.type";
|
|
2
|
+
import type { RectBeamSection } from "../core/types/rc-beam.type";
|
|
3
|
+
import type { SectionProperties } from "../core/types/section-properties.type";
|
|
4
|
+
export interface SectionPropertiesOptions {
|
|
5
|
+
/** Picks the ACI 318-19 6.6.3.1.1 inertia modifier: 0.35 beam, 0.70 column, 1.0 gross. Default "beam". */
|
|
6
|
+
member?: "beam" | "column" | "gross";
|
|
7
|
+
/** Overrides the modifier chosen by `member`. */
|
|
8
|
+
inertiaModifier?: number;
|
|
9
|
+
/** Poisson's ratio for G = E / (2(1 + ν)). Default 0.2. */
|
|
10
|
+
poissonRatio?: number;
|
|
11
|
+
/** Unit weight in kN/m³ for load-case self-weight. Default 24 (common practice, not an ACI value). */
|
|
12
|
+
unitWeight?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Converts a rectangular RC beam section into `SectionProperties` for frame analysis.
|
|
16
|
+
*
|
|
17
|
+
* Local 2 is taken along the depth `h` and local 3 along the width `b`, so
|
|
18
|
+
* `I33 = m·b·h³/12` (major axis) and `I22 = m·h·b³/12`, where m is the inertia modifier.
|
|
19
|
+
* The modifier is applied to the bending inertias only; A and J are gross values, and the
|
|
20
|
+
* unit weight (for self-weight) acts on the gross area.
|
|
21
|
+
*
|
|
22
|
+
* @param section - Rectangular RC section (uses `fc_`, `b` and `h`)
|
|
23
|
+
* @param options - Member type or explicit inertia modifier, Poisson's ratio
|
|
24
|
+
* @returns Object containing `sectionProperties`, `calculationDetails`, `unit`, and `warnings`
|
|
25
|
+
*/
|
|
26
|
+
export declare const rectBeamToSectionProperties: (section: Pick<RectBeamSection, "fc_" | "b" | "h">, options?: SectionPropertiesOptions) => {
|
|
27
|
+
sectionProperties: SectionProperties;
|
|
28
|
+
calculationDetails: {
|
|
29
|
+
inertiaModifier: number;
|
|
30
|
+
poissonRatio: number;
|
|
31
|
+
unitWeight: number;
|
|
32
|
+
};
|
|
33
|
+
unit: string;
|
|
34
|
+
warnings: Warnings;
|
|
35
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rectBeamToSectionProperties = void 0;
|
|
4
|
+
const frame_constant_1 = require("../core/constants/frame.constant");
|
|
5
|
+
const general_1 = require("./general");
|
|
6
|
+
/**
|
|
7
|
+
* Saint-Venant torsion constant of a solid rectangle:
|
|
8
|
+
* `J = a·t³·(1/3 − 0.21·(t/a)·(1 − t⁴/(12a⁴)))`, with a the longer and t the shorter side.
|
|
9
|
+
*/
|
|
10
|
+
const rectangleTorsionConstant = (b, h) => {
|
|
11
|
+
const a = Math.max(b, h);
|
|
12
|
+
const t = Math.min(b, h);
|
|
13
|
+
return a * t ** 3 * (1 / 3 - 0.21 * (t / a) * (1 - t ** 4 / (12 * a ** 4)));
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Converts a rectangular RC beam section into `SectionProperties` for frame analysis.
|
|
17
|
+
*
|
|
18
|
+
* Local 2 is taken along the depth `h` and local 3 along the width `b`, so
|
|
19
|
+
* `I33 = m·b·h³/12` (major axis) and `I22 = m·h·b³/12`, where m is the inertia modifier.
|
|
20
|
+
* The modifier is applied to the bending inertias only; A and J are gross values, and the
|
|
21
|
+
* unit weight (for self-weight) acts on the gross area.
|
|
22
|
+
*
|
|
23
|
+
* @param section - Rectangular RC section (uses `fc_`, `b` and `h`)
|
|
24
|
+
* @param options - Member type or explicit inertia modifier, Poisson's ratio
|
|
25
|
+
* @returns Object containing `sectionProperties`, `calculationDetails`, `unit`, and `warnings`
|
|
26
|
+
*/
|
|
27
|
+
const rectBeamToSectionProperties = (section, options = {}) => {
|
|
28
|
+
const warnings = [];
|
|
29
|
+
const member = options.member ?? "beam";
|
|
30
|
+
const modifier = options.inertiaModifier ??
|
|
31
|
+
(member === "beam" ? frame_constant_1.BEAM_INERTIA_MODIFIER : member === "column" ? frame_constant_1.COLUMN_INERTIA_MODIFIER : 1);
|
|
32
|
+
const nu = options.poissonRatio ?? frame_constant_1.CONCRETE_POISSON_RATIO;
|
|
33
|
+
const unitWeight = options.unitWeight ?? frame_constant_1.CONCRETE_UNIT_WEIGHT;
|
|
34
|
+
const { fc_, b, h } = section;
|
|
35
|
+
if (modifier === 1) {
|
|
36
|
+
warnings.push({
|
|
37
|
+
reference: "ACI318-19, 6.6.3.1.1",
|
|
38
|
+
message: "Gross-section inertia used; elastic analysis at factored load level should use the reduced moments of inertia (0.35Ig beams, 0.70Ig columns).",
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const E = (0, general_1.concreteElasticModulus)(fc_);
|
|
42
|
+
const sectionProperties = {
|
|
43
|
+
E,
|
|
44
|
+
G: E / (2 * (1 + nu)),
|
|
45
|
+
A: b * h,
|
|
46
|
+
I22: (modifier * h * b ** 3) / 12,
|
|
47
|
+
I33: (modifier * b * h ** 3) / 12,
|
|
48
|
+
J: rectangleTorsionConstant(b, h),
|
|
49
|
+
unitWeight,
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
sectionProperties,
|
|
53
|
+
calculationDetails: { inertiaModifier: modifier, poissonRatio: nu, unitWeight },
|
|
54
|
+
unit: "N, mm, MPa",
|
|
55
|
+
warnings,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
exports.rectBeamToSectionProperties = rectBeamToSectionProperties;
|
|
59
|
+
//# sourceMappingURL=rc-section-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc-section-properties.js","sourceRoot":"","sources":["../../src/rc/rc-section-properties.ts"],"names":[],"mappings":";;;AAAA,uEAK4C;AAK5C,uCAAmD;AAanD;;;GAGG;AACH,MAAM,wBAAwB,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAChE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACI,MAAM,2BAA2B,GAAG,CACzC,OAAiD,EACjD,UAAoC,EAAE,EACtC,EAAE;IACF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,QAAQ,GACZ,OAAO,CAAC,eAAe;QACvB,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,sCAAqB,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,wCAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,IAAI,uCAAsB,CAAC;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,qCAAoB,CAAC;IAC9D,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;IAE9B,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC;YACZ,SAAS,EAAE,sBAAsB;YACjC,OAAO,EACL,+IAA+I;SAClJ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAG,IAAA,gCAAsB,EAAC,GAAG,CAAC,CAAC;IACtC,MAAM,iBAAiB,GAAsB;QAC3C,CAAC;QACD,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACrB,CAAC,EAAE,CAAC,GAAG,CAAC;QACR,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;QACjC,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE;QACjC,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC;QACjC,UAAU;KACX,CAAC;IAEF,OAAO;QACL,iBAAiB;QACjB,kBAAkB,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE;QAC/E,IAAI,EAAE,YAAY;QAClB,QAAQ;KACT,CAAC;AACJ,CAAC,CAAC;AAtCW,QAAA,2BAA2B,+BAsCtC"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { calculateSteelJacketedBeamMomentCapacity } from "./rc-beam-steel-plate-jacketing";
|
|
2
2
|
export { plateInterfaceShearFlow, boltShearCapacity, plateInterfaceBoltRequirement, } from "./rc-beam-plate-interface-bolts";
|
|
3
|
+
export { sidePlateShearCapacityByWebYielding, sidePlateShearCapacityByTensionTie, compareSidePlateShearCapacity, } from "./rc-beam-side-plate-shear";
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.plateInterfaceBoltRequirement = exports.boltShearCapacity = exports.plateInterfaceShearFlow = exports.calculateSteelJacketedBeamMomentCapacity = void 0;
|
|
3
|
+
exports.compareSidePlateShearCapacity = exports.sidePlateShearCapacityByTensionTie = exports.sidePlateShearCapacityByWebYielding = exports.plateInterfaceBoltRequirement = exports.boltShearCapacity = exports.plateInterfaceShearFlow = exports.calculateSteelJacketedBeamMomentCapacity = void 0;
|
|
4
4
|
var rc_beam_steel_plate_jacketing_1 = require("./rc-beam-steel-plate-jacketing");
|
|
5
5
|
Object.defineProperty(exports, "calculateSteelJacketedBeamMomentCapacity", { enumerable: true, get: function () { return rc_beam_steel_plate_jacketing_1.calculateSteelJacketedBeamMomentCapacity; } });
|
|
6
6
|
var rc_beam_plate_interface_bolts_1 = require("./rc-beam-plate-interface-bolts");
|
|
7
7
|
Object.defineProperty(exports, "plateInterfaceShearFlow", { enumerable: true, get: function () { return rc_beam_plate_interface_bolts_1.plateInterfaceShearFlow; } });
|
|
8
8
|
Object.defineProperty(exports, "boltShearCapacity", { enumerable: true, get: function () { return rc_beam_plate_interface_bolts_1.boltShearCapacity; } });
|
|
9
9
|
Object.defineProperty(exports, "plateInterfaceBoltRequirement", { enumerable: true, get: function () { return rc_beam_plate_interface_bolts_1.plateInterfaceBoltRequirement; } });
|
|
10
|
+
var rc_beam_side_plate_shear_1 = require("./rc-beam-side-plate-shear");
|
|
11
|
+
Object.defineProperty(exports, "sidePlateShearCapacityByWebYielding", { enumerable: true, get: function () { return rc_beam_side_plate_shear_1.sidePlateShearCapacityByWebYielding; } });
|
|
12
|
+
Object.defineProperty(exports, "sidePlateShearCapacityByTensionTie", { enumerable: true, get: function () { return rc_beam_side_plate_shear_1.sidePlateShearCapacityByTensionTie; } });
|
|
13
|
+
Object.defineProperty(exports, "compareSidePlateShearCapacity", { enumerable: true, get: function () { return rc_beam_side_plate_shear_1.compareSidePlateShearCapacity; } });
|
|
10
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strengthening/index.ts"],"names":[],"mappings":";;;AAAA,iFAA2F;AAAlF,yJAAA,wCAAwC,OAAA;AACjD,iFAIyC;AAHvC,wIAAA,uBAAuB,OAAA;AACvB,kIAAA,iBAAiB,OAAA;AACjB,8IAAA,6BAA6B,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/strengthening/index.ts"],"names":[],"mappings":";;;AAAA,iFAA2F;AAAlF,yJAAA,wCAAwC,OAAA;AACjD,iFAIyC;AAHvC,wIAAA,uBAAuB,OAAA;AACvB,kIAAA,iBAAiB,OAAA;AACjB,8IAAA,6BAA6B,OAAA;AAE/B,uEAIoC;AAHlC,+IAAA,mCAAmC,OAAA;AACnC,8IAAA,kCAAkC,OAAA;AAClC,yIAAA,6BAA6B,OAAA"}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { StirrupShearSection } from "../core/types/rc-beam.type";
|
|
2
|
+
import { SidePlateShearProps } from "../core/types/plate-jacketing.type";
|
|
3
|
+
/**
|
|
4
|
+
* Shear capacity of a beam strengthened with bolted steel side plates, treating
|
|
5
|
+
* each plate as a supplementary web that resists in-plane shear.
|
|
6
|
+
*
|
|
7
|
+
* The plate reaches the von Mises shear yield stress of 0.6 fy (AISC 360 G2.1):
|
|
8
|
+
*
|
|
9
|
+
* - continuous: `Vp = nSides · 0.6 fy · tp · dp`
|
|
10
|
+
* - strips: `Vp = nSides · 0.6 fy · tp · dp · wp / s`
|
|
11
|
+
*
|
|
12
|
+
* Strips are handled as the fraction `wp / s` of a continuous web, which is an
|
|
13
|
+
* approximation — a discrete strip works more as a tension tie than as a web
|
|
14
|
+
* panel, which is what `sidePlateShearCapacityByTensionTie` models. Run both and
|
|
15
|
+
* take the lower value, or call `compareSidePlateShearCapacity`.
|
|
16
|
+
*
|
|
17
|
+
* ACI 318-19 has no provisions for steel side plates in shear; a warning always
|
|
18
|
+
* says so.
|
|
19
|
+
*
|
|
20
|
+
* @param section - Original beam shear properties (fc_, bw, d, Av, fyt, s, optional lambda)
|
|
21
|
+
* @param plates - Side plate geometry, strength, layout, and optional anchorage
|
|
22
|
+
* @returns `before` and `after` results, each with `phiVn` (kN), `calculationDetails`,
|
|
23
|
+
* `unit`, and `warnings`; `after` also carries `phiVp` and `governedBy`
|
|
24
|
+
* @throws {RCDesignError} 205 if the plate geometry is inconsistent, 206 if the
|
|
25
|
+
* existing Vs leaves no headroom under the ACI 318-19 22.5.1.2 maximum, 202 if
|
|
26
|
+
* the supplied bolt capacity is invalid
|
|
27
|
+
*/
|
|
28
|
+
export declare const sidePlateShearCapacityByWebYielding: (section: StirrupShearSection, plates: SidePlateShearProps) => {
|
|
29
|
+
method: "webYielding" | "tensionTie";
|
|
30
|
+
before: {
|
|
31
|
+
phiVn: number;
|
|
32
|
+
calculationDetails: {
|
|
33
|
+
phiVc: number;
|
|
34
|
+
phiVs: number;
|
|
35
|
+
Vc: number;
|
|
36
|
+
Vs: number;
|
|
37
|
+
};
|
|
38
|
+
unit: string;
|
|
39
|
+
warnings: {
|
|
40
|
+
reference?: string;
|
|
41
|
+
message: string;
|
|
42
|
+
}[];
|
|
43
|
+
};
|
|
44
|
+
after: {
|
|
45
|
+
phiVn: number;
|
|
46
|
+
phiVp: number;
|
|
47
|
+
governedBy: "plateCapacity" | "anchorage" | "webCrushing";
|
|
48
|
+
calculationDetails: {
|
|
49
|
+
phiVc: number;
|
|
50
|
+
phiVs: number;
|
|
51
|
+
Vp: number;
|
|
52
|
+
VpEffective: number;
|
|
53
|
+
maxVs: number;
|
|
54
|
+
headroom: number;
|
|
55
|
+
phiVpPlate: number;
|
|
56
|
+
phiVanchorage: number | null;
|
|
57
|
+
anchorageRows: number | null;
|
|
58
|
+
phiVbolt: number | null;
|
|
59
|
+
sides: number;
|
|
60
|
+
coverageRatio: number;
|
|
61
|
+
} & {
|
|
62
|
+
tauY: number;
|
|
63
|
+
slenderness: number;
|
|
64
|
+
slendernessLimit: number;
|
|
65
|
+
};
|
|
66
|
+
unit: string;
|
|
67
|
+
warnings: {
|
|
68
|
+
reference?: string;
|
|
69
|
+
message: string;
|
|
70
|
+
}[];
|
|
71
|
+
};
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Shear capacity of a beam strengthened with bolted steel side plates, treating
|
|
75
|
+
* each plate as a tension tie crossing the diagonal crack, following the bonded
|
|
76
|
+
* shear reinforcement model of ACI 440.2R-17 §11.4 with steel in place of FRP:
|
|
77
|
+
*
|
|
78
|
+
* `Vp = nSides · tp · wp · ffe · (sin α + cos α) · dp / s`
|
|
79
|
+
*
|
|
80
|
+
* with `ffe = min(fy, Es · 0.004)` — the 0.004 strain cap of 440.2R §11.4, which
|
|
81
|
+
* keeps the crack tight enough for aggregate interlock — and the additional
|
|
82
|
+
* reduction factor `psi_f = 0.85` for two-sided bonded strengthening. A continuous
|
|
83
|
+
* plate is the case `wp = s`, `α = 90°`.
|
|
84
|
+
*
|
|
85
|
+
* Note that for structural steel `Es · 0.004 = 800 MPa` sits above any normal `fy`,
|
|
86
|
+
* so the strain cap does not bind and the tie reaches yield; this model therefore
|
|
87
|
+
* usually returns a higher capacity than `sidePlateShearCapacityByWebYielding` for
|
|
88
|
+
* a continuous plate. Neither is code-sanctioned for steel side plates — a warning
|
|
89
|
+
* always says so.
|
|
90
|
+
*
|
|
91
|
+
* @param section - Original beam shear properties (fc_, bw, d, Av, fyt, s, optional lambda)
|
|
92
|
+
* @param plates - Side plate geometry, strength, layout, and optional anchorage
|
|
93
|
+
* @returns `before` and `after` results, each with `phiVn` (kN), `calculationDetails`,
|
|
94
|
+
* `unit`, and `warnings`; `after` also carries `phiVp` and `governedBy`
|
|
95
|
+
* @throws {RCDesignError} 205 if the plate geometry is inconsistent, 206 if the
|
|
96
|
+
* existing Vs leaves no headroom under the ACI 318-19 22.5.1.2 maximum, 202 if
|
|
97
|
+
* the supplied bolt capacity is invalid
|
|
98
|
+
*/
|
|
99
|
+
export declare const sidePlateShearCapacityByTensionTie: (section: StirrupShearSection, plates: SidePlateShearProps) => {
|
|
100
|
+
method: "webYielding" | "tensionTie";
|
|
101
|
+
before: {
|
|
102
|
+
phiVn: number;
|
|
103
|
+
calculationDetails: {
|
|
104
|
+
phiVc: number;
|
|
105
|
+
phiVs: number;
|
|
106
|
+
Vc: number;
|
|
107
|
+
Vs: number;
|
|
108
|
+
};
|
|
109
|
+
unit: string;
|
|
110
|
+
warnings: {
|
|
111
|
+
reference?: string;
|
|
112
|
+
message: string;
|
|
113
|
+
}[];
|
|
114
|
+
};
|
|
115
|
+
after: {
|
|
116
|
+
phiVn: number;
|
|
117
|
+
phiVp: number;
|
|
118
|
+
governedBy: "plateCapacity" | "anchorage" | "webCrushing";
|
|
119
|
+
calculationDetails: {
|
|
120
|
+
phiVc: number;
|
|
121
|
+
phiVs: number;
|
|
122
|
+
Vp: number;
|
|
123
|
+
VpEffective: number;
|
|
124
|
+
maxVs: number;
|
|
125
|
+
headroom: number;
|
|
126
|
+
phiVpPlate: number;
|
|
127
|
+
phiVanchorage: number | null;
|
|
128
|
+
anchorageRows: number | null;
|
|
129
|
+
phiVbolt: number | null;
|
|
130
|
+
sides: number;
|
|
131
|
+
coverageRatio: number;
|
|
132
|
+
} & {
|
|
133
|
+
ffe: number;
|
|
134
|
+
strainLimitedStress: number;
|
|
135
|
+
orientation: number;
|
|
136
|
+
psi: number;
|
|
137
|
+
};
|
|
138
|
+
unit: string;
|
|
139
|
+
warnings: {
|
|
140
|
+
reference?: string;
|
|
141
|
+
message: string;
|
|
142
|
+
}[];
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* Runs both side plate shear models on the same section and reports the lower
|
|
147
|
+
* result as governing, which is the intended entry point when selecting a
|
|
148
|
+
* conservative design capacity.
|
|
149
|
+
*
|
|
150
|
+
* @param section - Original beam shear properties (fc_, bw, d, Av, fyt, s, optional lambda)
|
|
151
|
+
* @param plates - Side plate geometry, strength, layout, and optional anchorage
|
|
152
|
+
* @returns `webYielding` and `tensionTie` results plus `governing`, holding the
|
|
153
|
+
* lower `phiVn`, its `phiVp`, and the `method` that produced it
|
|
154
|
+
* @throws {RCDesignError} Whatever either model throws — see their documentation
|
|
155
|
+
*/
|
|
156
|
+
export declare const compareSidePlateShearCapacity: (section: StirrupShearSection, plates: SidePlateShearProps) => {
|
|
157
|
+
webYielding: {
|
|
158
|
+
method: "webYielding" | "tensionTie";
|
|
159
|
+
before: {
|
|
160
|
+
phiVn: number;
|
|
161
|
+
calculationDetails: {
|
|
162
|
+
phiVc: number;
|
|
163
|
+
phiVs: number;
|
|
164
|
+
Vc: number;
|
|
165
|
+
Vs: number;
|
|
166
|
+
};
|
|
167
|
+
unit: string;
|
|
168
|
+
warnings: {
|
|
169
|
+
reference?: string;
|
|
170
|
+
message: string;
|
|
171
|
+
}[];
|
|
172
|
+
};
|
|
173
|
+
after: {
|
|
174
|
+
phiVn: number;
|
|
175
|
+
phiVp: number;
|
|
176
|
+
governedBy: "plateCapacity" | "anchorage" | "webCrushing";
|
|
177
|
+
calculationDetails: {
|
|
178
|
+
phiVc: number;
|
|
179
|
+
phiVs: number;
|
|
180
|
+
Vp: number;
|
|
181
|
+
VpEffective: number;
|
|
182
|
+
maxVs: number;
|
|
183
|
+
headroom: number;
|
|
184
|
+
phiVpPlate: number;
|
|
185
|
+
phiVanchorage: number | null;
|
|
186
|
+
anchorageRows: number | null;
|
|
187
|
+
phiVbolt: number | null;
|
|
188
|
+
sides: number;
|
|
189
|
+
coverageRatio: number;
|
|
190
|
+
} & {
|
|
191
|
+
tauY: number;
|
|
192
|
+
slenderness: number;
|
|
193
|
+
slendernessLimit: number;
|
|
194
|
+
};
|
|
195
|
+
unit: string;
|
|
196
|
+
warnings: {
|
|
197
|
+
reference?: string;
|
|
198
|
+
message: string;
|
|
199
|
+
}[];
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
tensionTie: {
|
|
203
|
+
method: "webYielding" | "tensionTie";
|
|
204
|
+
before: {
|
|
205
|
+
phiVn: number;
|
|
206
|
+
calculationDetails: {
|
|
207
|
+
phiVc: number;
|
|
208
|
+
phiVs: number;
|
|
209
|
+
Vc: number;
|
|
210
|
+
Vs: number;
|
|
211
|
+
};
|
|
212
|
+
unit: string;
|
|
213
|
+
warnings: {
|
|
214
|
+
reference?: string;
|
|
215
|
+
message: string;
|
|
216
|
+
}[];
|
|
217
|
+
};
|
|
218
|
+
after: {
|
|
219
|
+
phiVn: number;
|
|
220
|
+
phiVp: number;
|
|
221
|
+
governedBy: "plateCapacity" | "anchorage" | "webCrushing";
|
|
222
|
+
calculationDetails: {
|
|
223
|
+
phiVc: number;
|
|
224
|
+
phiVs: number;
|
|
225
|
+
Vp: number;
|
|
226
|
+
VpEffective: number;
|
|
227
|
+
maxVs: number;
|
|
228
|
+
headroom: number;
|
|
229
|
+
phiVpPlate: number;
|
|
230
|
+
phiVanchorage: number | null;
|
|
231
|
+
anchorageRows: number | null;
|
|
232
|
+
phiVbolt: number | null;
|
|
233
|
+
sides: number;
|
|
234
|
+
coverageRatio: number;
|
|
235
|
+
} & {
|
|
236
|
+
ffe: number;
|
|
237
|
+
strainLimitedStress: number;
|
|
238
|
+
orientation: number;
|
|
239
|
+
psi: number;
|
|
240
|
+
};
|
|
241
|
+
unit: string;
|
|
242
|
+
warnings: {
|
|
243
|
+
reference?: string;
|
|
244
|
+
message: string;
|
|
245
|
+
}[];
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
governing: {
|
|
249
|
+
method: "webYielding" | "tensionTie";
|
|
250
|
+
phiVn: number;
|
|
251
|
+
phiVp: number;
|
|
252
|
+
governedBy: "plateCapacity" | "anchorage" | "webCrushing";
|
|
253
|
+
};
|
|
254
|
+
};
|