@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.
Files changed (192) hide show
  1. package/README.md +44 -4
  2. package/dist/core/constants/frame.constant.d.ts +14 -0
  3. package/dist/core/constants/frame.constant.js +18 -0
  4. package/dist/core/constants/frame.constant.js.map +1 -0
  5. package/dist/core/constants/rc.constant.d.ts +7 -0
  6. package/dist/core/constants/rc.constant.js +20 -1
  7. package/dist/core/constants/rc.constant.js.map +1 -1
  8. package/dist/core/errors/frame-analysis.error.d.ts +33 -0
  9. package/dist/core/errors/frame-analysis.error.js +74 -0
  10. package/dist/core/errors/frame-analysis.error.js.map +1 -0
  11. package/dist/core/errors/rc-design.error.js +8 -0
  12. package/dist/core/errors/rc-design.error.js.map +1 -1
  13. package/dist/core/index.d.ts +7 -3
  14. package/dist/core/index.js +16 -1
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/core/types/plate-jacketing.type.d.ts +37 -0
  17. package/dist/core/types/plate-jacketing.type.js +8 -0
  18. package/dist/core/types/plate-jacketing.type.js.map +1 -1
  19. package/dist/core/types/section-properties.type.d.ts +13 -0
  20. package/dist/core/types/section-properties.type.js +3 -0
  21. package/dist/core/types/section-properties.type.js.map +1 -0
  22. package/dist/esm/core/constants/frame.constant.js +15 -0
  23. package/dist/esm/core/constants/frame.constant.js.map +1 -0
  24. package/dist/esm/core/constants/rc.constant.js +63 -0
  25. package/dist/esm/core/constants/rc.constant.js.map +1 -0
  26. package/dist/esm/core/errors/frame-analysis.error.js +70 -0
  27. package/dist/esm/core/errors/frame-analysis.error.js.map +1 -0
  28. package/dist/esm/core/errors/rc-design.error.js +64 -0
  29. package/dist/esm/core/errors/rc-design.error.js.map +1 -0
  30. package/dist/esm/core/index.js +9 -0
  31. package/dist/esm/core/index.js.map +1 -0
  32. package/dist/esm/core/types/output-message.type.js +2 -0
  33. package/dist/esm/core/types/output-message.type.js.map +1 -0
  34. package/dist/esm/core/types/plate-jacketing.type.js +18 -0
  35. package/dist/esm/core/types/plate-jacketing.type.js.map +1 -0
  36. package/dist/esm/core/types/rc-beam.type.js +11 -0
  37. package/dist/esm/core/types/rc-beam.type.js.map +1 -0
  38. package/dist/esm/core/types/section-properties.type.js +2 -0
  39. package/dist/esm/core/types/section-properties.type.js.map +1 -0
  40. package/dist/esm/core/types/unit.type.js +2 -0
  41. package/dist/esm/core/types/unit.type.js.map +1 -0
  42. package/dist/esm/fea/frame/elements/beam-3d-stiffness.js +84 -0
  43. package/dist/esm/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
  44. package/dist/esm/fea/frame/elements/fixed-end-forces.js +75 -0
  45. package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -0
  46. package/dist/esm/fea/frame/elements/static-condensation.js +55 -0
  47. package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -0
  48. package/dist/esm/fea/frame/index.js +6 -0
  49. package/dist/esm/fea/frame/index.js.map +1 -0
  50. package/dist/esm/fea/frame/post/demand-envelope.js +97 -0
  51. package/dist/esm/fea/frame/post/demand-envelope.js.map +1 -0
  52. package/dist/esm/fea/frame/post/envelope.js +59 -0
  53. package/dist/esm/fea/frame/post/envelope.js.map +1 -0
  54. package/dist/esm/fea/frame/post/member-diagram.js +332 -0
  55. package/dist/esm/fea/frame/post/member-diagram.js.map +1 -0
  56. package/dist/esm/fea/frame/post/present-state.js +106 -0
  57. package/dist/esm/fea/frame/post/present-state.js.map +1 -0
  58. package/dist/esm/fea/frame/solver/analyze-frame.js +123 -0
  59. package/dist/esm/fea/frame/solver/analyze-frame.js.map +1 -0
  60. package/dist/esm/fea/frame/solver/boundary-conditions.js +33 -0
  61. package/dist/esm/fea/frame/solver/boundary-conditions.js.map +1 -0
  62. package/dist/esm/fea/frame/solver/combinations.js +69 -0
  63. package/dist/esm/fea/frame/solver/combinations.js.map +1 -0
  64. package/dist/esm/fea/frame/solver/frame-system.js +122 -0
  65. package/dist/esm/fea/frame/solver/frame-system.js.map +1 -0
  66. package/dist/esm/fea/frame/solver/global-assembly.js +27 -0
  67. package/dist/esm/fea/frame/solver/global-assembly.js.map +1 -0
  68. package/dist/esm/fea/frame/solver/load-case-solver.js +119 -0
  69. package/dist/esm/fea/frame/solver/load-case-solver.js.map +1 -0
  70. package/dist/esm/fea/frame/transformation/coordinate-transform.js +71 -0
  71. package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -0
  72. package/dist/esm/fea/frame/types/model.type.js +2 -0
  73. package/dist/esm/fea/frame/types/model.type.js.map +1 -0
  74. package/dist/esm/fea/frame/types/results.type.js +2 -0
  75. package/dist/esm/fea/frame/types/results.type.js.map +1 -0
  76. package/dist/esm/fea/frame/validation/validate-model.js +292 -0
  77. package/dist/esm/fea/frame/validation/validate-model.js.map +1 -0
  78. package/dist/esm/fea/index.js +3 -0
  79. package/dist/esm/fea/index.js.map +1 -0
  80. package/dist/esm/index.js +10 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/package.json +1 -0
  83. package/dist/esm/rc/general.js +32 -0
  84. package/dist/esm/rc/general.js.map +1 -0
  85. package/dist/esm/rc/index.js +5 -0
  86. package/dist/esm/rc/index.js.map +1 -0
  87. package/dist/esm/rc/rc-bar-layout.js +89 -0
  88. package/dist/esm/rc/rc-bar-layout.js.map +1 -0
  89. package/dist/esm/rc/rc-beam-design.js +320 -0
  90. package/dist/esm/rc/rc-beam-design.js.map +1 -0
  91. package/dist/esm/rc/rc-section-properties.js +55 -0
  92. package/dist/esm/rc/rc-section-properties.js.map +1 -0
  93. package/dist/esm/strengthening/index.js +4 -0
  94. package/dist/esm/strengthening/index.js.map +1 -0
  95. package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js +338 -0
  96. package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js.map +1 -0
  97. package/dist/esm/strengthening/rc-beam-side-plate-shear.js +381 -0
  98. package/dist/esm/strengthening/rc-beam-side-plate-shear.js.map +1 -0
  99. package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js +90 -0
  100. package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js.map +1 -0
  101. package/dist/esm/utils/index.js +5 -0
  102. package/dist/esm/utils/index.js.map +1 -0
  103. package/dist/esm/utils/math.js +30 -0
  104. package/dist/esm/utils/math.js.map +1 -0
  105. package/dist/esm/utils/matrix.js +145 -0
  106. package/dist/esm/utils/matrix.js.map +1 -0
  107. package/dist/esm/utils/merge-warning.js +11 -0
  108. package/dist/esm/utils/merge-warning.js.map +1 -0
  109. package/dist/esm/utils/skyline.js +151 -0
  110. package/dist/esm/utils/skyline.js.map +1 -0
  111. package/dist/fea/frame/elements/beam-3d-stiffness.d.ts +29 -0
  112. package/dist/fea/frame/elements/beam-3d-stiffness.js +90 -0
  113. package/dist/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
  114. package/dist/fea/frame/elements/fixed-end-forces.d.ts +22 -0
  115. package/dist/fea/frame/elements/fixed-end-forces.js +79 -0
  116. package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -0
  117. package/dist/fea/frame/elements/static-condensation.d.ts +19 -0
  118. package/dist/fea/frame/elements/static-condensation.js +59 -0
  119. package/dist/fea/frame/elements/static-condensation.js.map +1 -0
  120. package/dist/fea/frame/index.d.ts +9 -0
  121. package/dist/fea/frame/index.js +16 -0
  122. package/dist/fea/frame/index.js.map +1 -0
  123. package/dist/fea/frame/post/demand-envelope.d.ts +36 -0
  124. package/dist/fea/frame/post/demand-envelope.js +101 -0
  125. package/dist/fea/frame/post/demand-envelope.js.map +1 -0
  126. package/dist/fea/frame/post/envelope.d.ts +8 -0
  127. package/dist/fea/frame/post/envelope.js +63 -0
  128. package/dist/fea/frame/post/envelope.js.map +1 -0
  129. package/dist/fea/frame/post/member-diagram.d.ts +26 -0
  130. package/dist/fea/frame/post/member-diagram.js +336 -0
  131. package/dist/fea/frame/post/member-diagram.js.map +1 -0
  132. package/dist/fea/frame/post/present-state.d.ts +19 -0
  133. package/dist/fea/frame/post/present-state.js +111 -0
  134. package/dist/fea/frame/post/present-state.js.map +1 -0
  135. package/dist/fea/frame/solver/analyze-frame.d.ts +67 -0
  136. package/dist/fea/frame/solver/analyze-frame.js +128 -0
  137. package/dist/fea/frame/solver/analyze-frame.js.map +1 -0
  138. package/dist/fea/frame/solver/boundary-conditions.d.ts +14 -0
  139. package/dist/fea/frame/solver/boundary-conditions.js +37 -0
  140. package/dist/fea/frame/solver/boundary-conditions.js.map +1 -0
  141. package/dist/fea/frame/solver/combinations.d.ts +11 -0
  142. package/dist/fea/frame/solver/combinations.js +73 -0
  143. package/dist/fea/frame/solver/combinations.js.map +1 -0
  144. package/dist/fea/frame/solver/frame-system.d.ts +42 -0
  145. package/dist/fea/frame/solver/frame-system.js +126 -0
  146. package/dist/fea/frame/solver/frame-system.js.map +1 -0
  147. package/dist/fea/frame/solver/global-assembly.d.ts +17 -0
  148. package/dist/fea/frame/solver/global-assembly.js +33 -0
  149. package/dist/fea/frame/solver/global-assembly.js.map +1 -0
  150. package/dist/fea/frame/solver/load-case-solver.d.ts +34 -0
  151. package/dist/fea/frame/solver/load-case-solver.js +124 -0
  152. package/dist/fea/frame/solver/load-case-solver.js.map +1 -0
  153. package/dist/fea/frame/transformation/coordinate-transform.d.ts +21 -0
  154. package/dist/fea/frame/transformation/coordinate-transform.js +76 -0
  155. package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -0
  156. package/dist/fea/frame/types/model.type.d.ts +112 -0
  157. package/dist/fea/frame/types/model.type.js +3 -0
  158. package/dist/fea/frame/types/model.type.js.map +1 -0
  159. package/dist/fea/frame/types/results.type.d.ts +134 -0
  160. package/dist/fea/frame/types/results.type.js +3 -0
  161. package/dist/fea/frame/types/results.type.js.map +1 -0
  162. package/dist/fea/frame/validation/validate-model.d.ts +18 -0
  163. package/dist/fea/frame/validation/validate-model.js +298 -0
  164. package/dist/fea/frame/validation/validate-model.js.map +1 -0
  165. package/dist/fea/index.d.ts +1 -0
  166. package/dist/fea/index.js +19 -0
  167. package/dist/fea/index.js.map +1 -0
  168. package/dist/index.d.ts +9 -5
  169. package/dist/index.js +44 -1
  170. package/dist/index.js.map +1 -1
  171. package/dist/rc/index.d.ts +2 -0
  172. package/dist/rc/index.js +3 -1
  173. package/dist/rc/index.js.map +1 -1
  174. package/dist/rc/rc-section-properties.d.ts +35 -0
  175. package/dist/rc/rc-section-properties.js +59 -0
  176. package/dist/rc/rc-section-properties.js.map +1 -0
  177. package/dist/strengthening/index.d.ts +1 -0
  178. package/dist/strengthening/index.js +5 -1
  179. package/dist/strengthening/index.js.map +1 -1
  180. package/dist/strengthening/rc-beam-side-plate-shear.d.ts +254 -0
  181. package/dist/strengthening/rc-beam-side-plate-shear.js +420 -0
  182. package/dist/strengthening/rc-beam-side-plate-shear.js.map +1 -0
  183. package/dist/utils/index.d.ts +4 -0
  184. package/dist/utils/index.js +19 -1
  185. package/dist/utils/index.js.map +1 -1
  186. package/dist/utils/matrix.d.ts +45 -0
  187. package/dist/utils/matrix.js +157 -0
  188. package/dist/utils/matrix.js.map +1 -0
  189. package/dist/utils/skyline.d.ts +49 -0
  190. package/dist/utils/skyline.js +161 -0
  191. package/dist/utils/skyline.js.map +1 -0
  192. 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
@@ -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
+ };