@theerapat-s28/ts-structural-eng-tools 1.0.1 → 1.2.0

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 (37) hide show
  1. package/README.md +13 -3
  2. package/dist/core/constants/rc.constant.d.ts +23 -0
  3. package/dist/core/constants/rc.constant.js +42 -1
  4. package/dist/core/constants/rc.constant.js.map +1 -1
  5. package/dist/core/errors/rc-design.error.js +29 -0
  6. package/dist/core/errors/rc-design.error.js.map +1 -1
  7. package/dist/core/index.d.ts +4 -3
  8. package/dist/core/index.js +7 -1
  9. package/dist/core/index.js.map +1 -1
  10. package/dist/core/types/plate-jacketing.type.d.ts +31 -4
  11. package/dist/core/types/plate-jacketing.type.js +12 -0
  12. package/dist/core/types/plate-jacketing.type.js.map +1 -1
  13. package/dist/core/types/rc-beam.type.d.ts +30 -0
  14. package/dist/core/types/rc-beam.type.js +1 -4
  15. package/dist/core/types/rc-beam.type.js.map +1 -1
  16. package/dist/index.d.ts +4 -4
  17. package/dist/index.js +13 -1
  18. package/dist/index.js.map +1 -1
  19. package/dist/rc/index.d.ts +2 -1
  20. package/dist/rc/index.js +6 -1
  21. package/dist/rc/index.js.map +1 -1
  22. package/dist/rc/rc-bar-layout.d.ts +34 -0
  23. package/dist/rc/rc-bar-layout.js +125 -0
  24. package/dist/rc/rc-bar-layout.js.map +1 -0
  25. package/dist/rc/rc-beam-design.d.ts +58 -1
  26. package/dist/rc/rc-beam-design.js +144 -5
  27. package/dist/rc/rc-beam-design.js.map +1 -1
  28. package/dist/strengthening/index.d.ts +1 -0
  29. package/dist/strengthening/index.js +5 -1
  30. package/dist/strengthening/index.js.map +1 -1
  31. package/dist/strengthening/rc-beam-plate-interface-bolts.d.ts +134 -0
  32. package/dist/strengthening/rc-beam-plate-interface-bolts.js +377 -0
  33. package/dist/strengthening/rc-beam-plate-interface-bolts.js.map +1 -0
  34. package/dist/strengthening/rc-beam-steel-plate-jacketing.js +23 -13
  35. package/dist/strengthening/rc-beam-steel-plate-jacketing.js.map +1 -1
  36. package/dist/utils/math.js.map +1 -1
  37. package/package.json +1 -1
package/README.md CHANGED
@@ -40,10 +40,11 @@ src/
40
40
  ├── rc/ # Reinforced concrete design
41
41
  │ ├── index.ts # Module exports
42
42
  │ ├── general.ts # Concrete properties (beta1, Ec, unit conversion)
43
- │ └── rc-beam-design.ts # Beam moment capacity (singly/doubly reinforced)
43
+ │ └── rc-beam-design.ts # Beam moment capacity (singly/doubly reinforced) and shear capacity (Vc, Vs, stirrup requirement)
44
44
  ├── strengthening/ # Strengthening methods
45
45
  │ ├── index.ts
46
- │ └── rc-beam-steel-plate-jacketing.ts
46
+ │ ├── rc-beam-steel-plate-jacketing.ts # Moment capacity before/after plate jacketing
47
+ │ └── rc-beam-plate-interface-bolts.ts # Interface shear flow and required interface bolts
47
48
  ├── core/ # Shared infrastructure
48
49
  │ ├── index.ts
49
50
  │ ├── constants/ # RC design constants (ACI 318)
@@ -57,6 +58,7 @@ examples/
57
58
  └── basic-usage.ts # Example usage of the library
58
59
  tests/
59
60
  ├── rc/ # Tests for RC module
61
+ ├── strengthening/ # Tests for strengthening module
60
62
  └── utils/ # Tests for utilities
61
63
  ```
62
64
 
@@ -81,10 +83,18 @@ For runtime resolution, `tsconfig-paths` is registered in the `dev` script.
81
83
  ### RC Beam Design
82
84
 
83
85
  - **`rectBeamMomentCapacity(section)`** — Computes φMn for a rectangular RC beam (singly or doubly reinforced). Returns `phiMn` in kN·m with calculation details and ACI 318-19 warnings.
86
+ - **`concreteShearCapacity(section)`** — Computes φVc, the concrete contribution to shear capacity (ACI 318-19, 22.5.5.1).
87
+ - **`stirrupShearCapacity(section)`** — Computes φVs, the stirrup contribution to shear capacity (ACI 318-19, 22.5.10.5.3).
88
+ - **`checkStirrupRequirement(input)`** — Determines whether stirrups are required, and the required Av/s ratio and max spacing (ACI 318-19, 9.6.3.1, 9.6.3.3, 9.7.6.2.2).
84
89
 
85
90
  ### Strengthening
86
91
 
87
- - **`calculateSteelJacketedBeamMomentCapacity(section, jacketedProperties)`** — Computes φMn for a beam strengthened with steel plate jacketing.
92
+ - **`calculateSteelJacketedBeamMomentCapacity(section, jacketedProperties)`** — Computes φMn for a beam strengthened with steel plate jacketing, as a `before` / `after` pair.
93
+ - **`plateInterfaceShearFlow(input)`** — Computes the shear flow `q = V·Q/I` (N/mm) to transfer across each concrete-to-plate interface, from a cracked (default) or uncracked elastic transformed section. Returns a per-plate `top` / `bottom` result, `null` where a plate is absent.
94
+ - **`boltShearCapacity(bolt)`** — Computes φVsa for one anchor bolt from the steel strength (ACI 318-19, 17.7.1.2b, φ per Table 17.5.3). Concrete breakout and pryout are not evaluated and must be checked separately.
95
+ - **`plateInterfaceBoltRequirement(input)`** — Computes the required bolt pitch and count at each interface, taking the larger of the shear-flow requirement (`s = n·φVbolt / q`) and the count needed to develop the full plate yield force, and reports which one governs.
96
+
97
+ Both plates are independently optional: a plate counts as present only when its width and thickness are both positive, so the same functions cover a bottom-only jacket and a top-and-bottom jacket. Use `hasTopPlate(props)` / `hasBottomPlate(props)` to test for presence.
88
98
 
89
99
  ### General Utilities
90
100
 
@@ -1,2 +1,25 @@
1
1
  export declare const FLEXURAL_STRENGTH_REDUCTION_FACTOR = 0.9;
2
2
  export declare const CONCRETE_ULTIMATE_STRAIN = 0.003;
3
+ export declare const DEFAULT_BEAM_COVER = 40;
4
+ export declare const DEFAULT_STIRRUP_DIAMETER = 10;
5
+ export declare const DEFAULT_MAX_AGGREGATE_SIZE = 20;
6
+ export declare const MIN_BAR_CLEAR_SPACING = 25;
7
+ export declare const AGGREGATE_SPACING_FACTOR: number;
8
+ export declare const MIN_LAYER_CLEAR_SPACING = 25;
9
+ export declare const SHEAR_STRENGTH_REDUCTION_FACTOR = 0.75;
10
+ export declare const CONCRETE_SHEAR_VC_COEFFICIENT = 0.17;
11
+ export declare const SQRT_FC_SHEAR_LIMIT = 8.3;
12
+ export declare const MAX_VS_COEFFICIENT = 0.66;
13
+ export declare const VS_SPACING_THRESHOLD_COEFFICIENT = 0.33;
14
+ export declare const MAX_STIRRUP_SPACING_LOW_VS = 600;
15
+ export declare const MAX_STIRRUP_SPACING_LOW_VS_DEPTH_FACTOR = 0.5;
16
+ export declare const MAX_STIRRUP_SPACING_HIGH_VS = 300;
17
+ export declare const MAX_STIRRUP_SPACING_HIGH_VS_DEPTH_FACTOR = 0.25;
18
+ export declare const MIN_AV_SQRT_FC_COEFFICIENT = 0.062;
19
+ export declare const MIN_AV_ABSOLUTE_COEFFICIENT = 0.35;
20
+ export declare const ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR = 0.65;
21
+ export declare const ANCHOR_STEEL_SHEAR_COEFFICIENT = 0.6;
22
+ export declare const ANCHOR_FUTA_FYA_FACTOR = 1.9;
23
+ export declare const MAX_ANCHOR_FUTA = 860;
24
+ export declare const MIN_ANCHOR_SPACING_DIAMETER_FACTOR = 4;
25
+ export declare const MAX_PLATE_BOLT_SPACING = 300;
@@ -1,6 +1,47 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CONCRETE_ULTIMATE_STRAIN = exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = void 0;
3
+ exports.MAX_PLATE_BOLT_SPACING = exports.MIN_ANCHOR_SPACING_DIAMETER_FACTOR = exports.MAX_ANCHOR_FUTA = exports.ANCHOR_FUTA_FYA_FACTOR = exports.ANCHOR_STEEL_SHEAR_COEFFICIENT = exports.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR = exports.MIN_AV_ABSOLUTE_COEFFICIENT = exports.MIN_AV_SQRT_FC_COEFFICIENT = exports.MAX_STIRRUP_SPACING_HIGH_VS_DEPTH_FACTOR = exports.MAX_STIRRUP_SPACING_HIGH_VS = exports.MAX_STIRRUP_SPACING_LOW_VS_DEPTH_FACTOR = exports.MAX_STIRRUP_SPACING_LOW_VS = exports.VS_SPACING_THRESHOLD_COEFFICIENT = exports.MAX_VS_COEFFICIENT = exports.SQRT_FC_SHEAR_LIMIT = exports.CONCRETE_SHEAR_VC_COEFFICIENT = exports.SHEAR_STRENGTH_REDUCTION_FACTOR = exports.MIN_LAYER_CLEAR_SPACING = exports.AGGREGATE_SPACING_FACTOR = exports.MIN_BAR_CLEAR_SPACING = exports.DEFAULT_MAX_AGGREGATE_SIZE = exports.DEFAULT_STIRRUP_DIAMETER = exports.DEFAULT_BEAM_COVER = exports.CONCRETE_ULTIMATE_STRAIN = exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = void 0;
4
4
  exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = 0.9;
5
5
  exports.CONCRETE_ULTIMATE_STRAIN = 0.003;
6
+ // ACI 318-19 Table 20.6.1.3.1: cast-in-place beams, not exposed to weather or in contact with ground
7
+ exports.DEFAULT_BEAM_COVER = 40; // mm, clear cover to stirrup
8
+ exports.DEFAULT_STIRRUP_DIAMETER = 10; // mm
9
+ exports.DEFAULT_MAX_AGGREGATE_SIZE = 20; // mm, nominal max aggregate size
10
+ // ACI 318-19 25.2.1: min clear spacing between parallel bars in a layer
11
+ exports.MIN_BAR_CLEAR_SPACING = 25; // mm
12
+ exports.AGGREGATE_SPACING_FACTOR = 4 / 3;
13
+ // ACI 318-19 25.2.2: min clear distance between layers
14
+ exports.MIN_LAYER_CLEAR_SPACING = 25; // mm
15
+ // ACI 318-19 21.2.1: strength reduction factor for shear
16
+ exports.SHEAR_STRENGTH_REDUCTION_FACTOR = 0.75;
17
+ // ACI 318-19 22.5.5.1, Table 22.5.5.1(a): Vc = 0.17 * lambda * sqrt(fc') * bw * d
18
+ exports.CONCRETE_SHEAR_VC_COEFFICIENT = 0.17;
19
+ // ACI 318-19 22.5.3.1: sqrt(fc') used to compute Vc shall not exceed this limit
20
+ // unless minimum shear reinforcement per 9.6.3.3 is provided
21
+ exports.SQRT_FC_SHEAR_LIMIT = 8.3; // MPa
22
+ // ACI 318-19 22.5.1.2: Vs shall not exceed 0.66 * sqrt(fc') * bw * d
23
+ exports.MAX_VS_COEFFICIENT = 0.66;
24
+ // ACI 318-19 9.7.6.2.2: spacing threshold at which the tighter max-spacing limit applies
25
+ exports.VS_SPACING_THRESHOLD_COEFFICIENT = 0.33; // * sqrt(fc') * bw * d
26
+ // ACI 318-19 9.7.6.2.2: max stirrup spacing, Vs <= 0.33 * sqrt(fc') * bw * d
27
+ exports.MAX_STIRRUP_SPACING_LOW_VS = 600; // mm
28
+ exports.MAX_STIRRUP_SPACING_LOW_VS_DEPTH_FACTOR = 0.5; // * d
29
+ // ACI 318-19 9.7.6.2.2: max stirrup spacing, Vs > 0.33 * sqrt(fc') * bw * d
30
+ exports.MAX_STIRRUP_SPACING_HIGH_VS = 300; // mm
31
+ exports.MAX_STIRRUP_SPACING_HIGH_VS_DEPTH_FACTOR = 0.25; // * d
32
+ // ACI 318-19 9.6.3.3: Av,min = max(0.062 * sqrt(fc') * bw * s / fyt, 0.35 * bw * s / fyt)
33
+ exports.MIN_AV_SQRT_FC_COEFFICIENT = 0.062;
34
+ exports.MIN_AV_ABSOLUTE_COEFFICIENT = 0.35;
35
+ // ACI 318-19 Table 17.5.3: strength reduction factor for anchor steel in shear
36
+ exports.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR = 0.65;
37
+ // ACI 318-19 17.7.1.2b: Vsa = 0.6 * Ase,V * futa
38
+ exports.ANCHOR_STEEL_SHEAR_COEFFICIENT = 0.6;
39
+ // ACI 318-19 17.6.1.2: futa shall not exceed min(1.9 * fya, 860 MPa)
40
+ exports.ANCHOR_FUTA_FYA_FACTOR = 1.9;
41
+ exports.MAX_ANCHOR_FUTA = 860; // MPa
42
+ // ACI 318-19 17.9.2: min center-to-center spacing of cast-in anchors = 4 * da
43
+ exports.MIN_ANCHOR_SPACING_DIAMETER_FACTOR = 4;
44
+ // Practical detailing limit on bolt pitch along a bonded strengthening plate,
45
+ // so the plate is restrained against local buckling / peeling between fasteners
46
+ exports.MAX_PLATE_BOLT_SPACING = 300; // mm
6
47
  //# sourceMappingURL=rc.constant.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rc.constant.js","sourceRoot":"","sources":["../../../src/core/constants/rc.constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,kCAAkC,GAAG,GAAG,CAAC;AACzC,QAAA,wBAAwB,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"rc.constant.js","sourceRoot":"","sources":["../../../src/core/constants/rc.constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,kCAAkC,GAAG,GAAG,CAAC;AACzC,QAAA,wBAAwB,GAAG,KAAK,CAAC;AAE9C,qGAAqG;AACxF,QAAA,kBAAkB,GAAG,EAAE,CAAC,CAAC,6BAA6B;AACtD,QAAA,wBAAwB,GAAG,EAAE,CAAC,CAAC,KAAK;AACpC,QAAA,0BAA0B,GAAG,EAAE,CAAC,CAAC,iCAAiC;AAE/E,wEAAwE;AAC3D,QAAA,qBAAqB,GAAG,EAAE,CAAC,CAAC,KAAK;AACjC,QAAA,wBAAwB,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9C,uDAAuD;AAC1C,QAAA,uBAAuB,GAAG,EAAE,CAAC,CAAC,KAAK;AAEhD,yDAAyD;AAC5C,QAAA,+BAA+B,GAAG,IAAI,CAAC;AAEpD,kFAAkF;AACrE,QAAA,6BAA6B,GAAG,IAAI,CAAC;AAElD,gFAAgF;AAChF,6DAA6D;AAChD,QAAA,mBAAmB,GAAG,GAAG,CAAC,CAAC,MAAM;AAE9C,qEAAqE;AACxD,QAAA,kBAAkB,GAAG,IAAI,CAAC;AAEvC,yFAAyF;AAC5E,QAAA,gCAAgC,GAAG,IAAI,CAAC,CAAC,uBAAuB;AAE7E,6EAA6E;AAChE,QAAA,0BAA0B,GAAG,GAAG,CAAC,CAAC,KAAK;AACvC,QAAA,uCAAuC,GAAG,GAAG,CAAC,CAAC,MAAM;AAElE,4EAA4E;AAC/D,QAAA,2BAA2B,GAAG,GAAG,CAAC,CAAC,KAAK;AACxC,QAAA,wCAAwC,GAAG,IAAI,CAAC,CAAC,MAAM;AAEpE,0FAA0F;AAC7E,QAAA,0BAA0B,GAAG,KAAK,CAAC;AACnC,QAAA,2BAA2B,GAAG,IAAI,CAAC;AAEhD,+EAA+E;AAClE,QAAA,sCAAsC,GAAG,IAAI,CAAC;AAE3D,iDAAiD;AACpC,QAAA,8BAA8B,GAAG,GAAG,CAAC;AAElD,qEAAqE;AACxD,QAAA,sBAAsB,GAAG,GAAG,CAAC;AAC7B,QAAA,eAAe,GAAG,GAAG,CAAC,CAAC,MAAM;AAE1C,8EAA8E;AACjE,QAAA,kCAAkC,GAAG,CAAC,CAAC;AAEpD,8EAA8E;AAC9E,gFAAgF;AACnE,QAAA,sBAAsB,GAAG,GAAG,CAAC,CAAC,KAAK"}
@@ -20,5 +20,34 @@ exports.Errors = {
20
20
  code: 102,
21
21
  message: "Out of tension controlled region, tensile steel is not yielding.",
22
22
  },
23
+ SECTION_TOO_NARROW_FOR_BAR: {
24
+ code: 103,
25
+ message: "Section width is too narrow to fit even one bar of the given diameter with the required cover and spacing.",
26
+ },
27
+ BAR_LAYOUT_EXCEEDS_SECTION_HEIGHT: {
28
+ code: 104,
29
+ message: "Combined top and bottom rebar layers exceed the section height h.",
30
+ },
31
+ SHEAR_STRENGTH_EXCEEDS_MAX: {
32
+ code: 105,
33
+ message: "Vs exceeds 0.66*sqrt(fc')*bw*d (ACI318-19, 22.5.1.2); section is too small for shear, increase bw or d.",
34
+ },
35
+ // 2XX : Strengthening / plate-to-concrete connection errors
36
+ NON_POSITIVE_SHEAR_FLOW: {
37
+ code: 201,
38
+ message: "Interface shear flow requires a positive shear force V and at least one jacketing plate with non-zero area.",
39
+ },
40
+ INVALID_BOLT_CAPACITY: {
41
+ code: 202,
42
+ message: "Resolved bolt shear capacity is not positive; check Ase, futa, or the supplied phiVboltOverride.",
43
+ },
44
+ PLATE_OUTSIDE_SECTION: {
45
+ code: 203,
46
+ message: "Inconsistent jacketed section geometry; plate and section dimensions must be positive and d must lie within h.",
47
+ },
48
+ CRACKED_NA_NOT_FOUND: {
49
+ code: 204,
50
+ message: "No valid cracked neutral axis was found within the concrete depth; check the section and plate properties.",
51
+ },
23
52
  };
24
53
  //# sourceMappingURL=rc-design.error.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rc-design.error.js","sourceRoot":"","sources":["../../../src/core/errors/rc-design.error.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAc,SAAQ,KAAK;IAItC,YAAY,MAAyB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE;QACxE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;CACF;AAVD,sCAUC;AAOY,QAAA,MAAM,GAAsC;IACvD,8BAA8B;IAC9B,2BAA2B,EAAE;QAC3B,IAAI,EAAE,GAAG;QACT,OAAO,EACL,sFAAsF;KACzF;IACD,0BAA0B,EAAE;QAC1B,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,kEAAkE;KAC5E;CACF,CAAC"}
1
+ {"version":3,"file":"rc-design.error.js","sourceRoot":"","sources":["../../../src/core/errors/rc-design.error.ts"],"names":[],"mappings":";;;AAAA,MAAa,aAAc,SAAQ,KAAK;IAItC,YAAY,MAAyB,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE;QACxE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;CACF;AAVD,sCAUC;AAOY,QAAA,MAAM,GAAsC;IACvD,8BAA8B;IAC9B,2BAA2B,EAAE;QAC3B,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,sFAAsF;KAChG;IACD,0BAA0B,EAAE;QAC1B,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,kEAAkE;KAC5E;IACD,0BAA0B,EAAE;QAC1B,IAAI,EAAE,GAAG;QACT,OAAO,EACL,4GAA4G;KAC/G;IACD,iCAAiC,EAAE;QACjC,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,mEAAmE;KAC7E;IACD,0BAA0B,EAAE;QAC1B,IAAI,EAAE,GAAG;QACT,OAAO,EACL,yGAAyG;KAC5G;IAED,4DAA4D;IAC5D,uBAAuB,EAAE;QACvB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,6GAA6G;KAChH;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,kGAAkG;KACrG;IACD,qBAAqB,EAAE;QACrB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,gHAAgH;KACnH;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,4GAA4G;KAC/G;CACF,CAAC"}
@@ -1,7 +1,8 @@
1
- export type { RectBeamSection, RectSinglyBeamSection, RectDoublyBeamSection, } from "./types/rc-beam.type";
1
+ export type { RectBeamSection, RectSinglyBeamSection, RectDoublyBeamSection, RectShearSection, StirrupShearSection, ShearReinforcementCheckInput, RebarGroupInput, RectBeamBarLayoutInput, } from "./types/rc-beam.type";
2
2
  export { isSinglyReinforced } from "./types/rc-beam.type";
3
- export type { SteelJacketedProps } from "./types/plate-jacketing.type";
3
+ export type { SteelJacketedProps, SectionState, PlateShearFlowInput, BoltProps, PlateInterfaceBoltInput, } from "./types/plate-jacketing.type";
4
+ export { hasTopPlate, hasBottomPlate } from "./types/plate-jacketing.type";
4
5
  export type { Warnings, calculationResult } from "./types/output-message.type";
5
6
  export type { unit } from "./types/unit.type";
6
- export { FLEXURAL_STRENGTH_REDUCTION_FACTOR, CONCRETE_ULTIMATE_STRAIN, } from "./constants/rc.constant";
7
+ export { FLEXURAL_STRENGTH_REDUCTION_FACTOR, CONCRETE_ULTIMATE_STRAIN, SHEAR_STRENGTH_REDUCTION_FACTOR, ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR, MAX_PLATE_BOLT_SPACING, } from "./constants/rc.constant";
7
8
  export { RCDesignError, Errors } from "./errors/rc-design.error";
@@ -1,12 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Errors = exports.RCDesignError = exports.CONCRETE_ULTIMATE_STRAIN = exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = exports.isSinglyReinforced = void 0;
3
+ exports.Errors = exports.RCDesignError = exports.MAX_PLATE_BOLT_SPACING = exports.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR = exports.SHEAR_STRENGTH_REDUCTION_FACTOR = exports.CONCRETE_ULTIMATE_STRAIN = exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = exports.hasBottomPlate = exports.hasTopPlate = exports.isSinglyReinforced = void 0;
4
4
  var rc_beam_type_1 = require("./types/rc-beam.type");
5
5
  Object.defineProperty(exports, "isSinglyReinforced", { enumerable: true, get: function () { return rc_beam_type_1.isSinglyReinforced; } });
6
+ var plate_jacketing_type_1 = require("./types/plate-jacketing.type");
7
+ Object.defineProperty(exports, "hasTopPlate", { enumerable: true, get: function () { return plate_jacketing_type_1.hasTopPlate; } });
8
+ Object.defineProperty(exports, "hasBottomPlate", { enumerable: true, get: function () { return plate_jacketing_type_1.hasBottomPlate; } });
6
9
  // Constants
7
10
  var rc_constant_1 = require("./constants/rc.constant");
8
11
  Object.defineProperty(exports, "FLEXURAL_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return rc_constant_1.FLEXURAL_STRENGTH_REDUCTION_FACTOR; } });
9
12
  Object.defineProperty(exports, "CONCRETE_ULTIMATE_STRAIN", { enumerable: true, get: function () { return rc_constant_1.CONCRETE_ULTIMATE_STRAIN; } });
13
+ Object.defineProperty(exports, "SHEAR_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return rc_constant_1.SHEAR_STRENGTH_REDUCTION_FACTOR; } });
14
+ Object.defineProperty(exports, "ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return rc_constant_1.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR; } });
15
+ Object.defineProperty(exports, "MAX_PLATE_BOLT_SPACING", { enumerable: true, get: function () { return rc_constant_1.MAX_PLATE_BOLT_SPACING; } });
10
16
  // Errors
11
17
  var rc_design_error_1 = require("./errors/rc-design.error");
12
18
  Object.defineProperty(exports, "RCDesignError", { enumerable: true, get: function () { return rc_design_error_1.RCDesignError; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAMA,qDAA0D;AAAjD,kHAAA,kBAAkB,OAAA;AAK3B,YAAY;AACZ,uDAGiC;AAF7B,iIAAA,kCAAkC,OAAA;AAClC,uHAAA,wBAAwB,OAAA;AAG5B,SAAS;AACT,4DAAiE;AAAxD,gHAAA,aAAa,OAAA;AAAE,yGAAA,MAAM,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAWA,qDAA0D;AAAjD,kHAAA,kBAAkB,OAAA;AAQ3B,qEAA2E;AAAlE,mHAAA,WAAW,OAAA;AAAE,sHAAA,cAAc,OAAA;AAIpC,YAAY;AACZ,uDAMiC;AAL/B,iIAAA,kCAAkC,OAAA;AAClC,uHAAA,wBAAwB,OAAA;AACxB,8HAAA,+BAA+B,OAAA;AAC/B,qIAAA,sCAAsC,OAAA;AACtC,qHAAA,sBAAsB,OAAA;AAGxB,SAAS;AACT,4DAAiE;AAAxD,gHAAA,aAAa,OAAA;AAAE,yGAAA,MAAM,OAAA"}
@@ -1,8 +1,35 @@
1
+ import { RectBeamSection } from "./rc-beam.type";
1
2
  export interface SteelJacketedProps {
2
3
  Es: number;
3
4
  fy: number;
4
- topSteelWidth: number;
5
- topSteelThickness: number;
6
- bottomSteelWidth: number;
7
- bottomSteelThickness: number;
5
+ topSteelWidth?: number;
6
+ topSteelThickness?: number;
7
+ bottomSteelWidth?: number;
8
+ bottomSteelThickness?: number;
9
+ }
10
+ /**
11
+ * A plate counts as present only when both its width and thickness are positive,
12
+ * so a bottom-only jacket may omit the top plate fields or pass them as zero.
13
+ */
14
+ export declare function hasTopPlate(props: SteelJacketedProps): boolean;
15
+ export declare function hasBottomPlate(props: SteelJacketedProps): boolean;
16
+ export type SectionState = "cracked" | "uncracked";
17
+ export interface PlateShearFlowInput {
18
+ section: RectBeamSection;
19
+ plates: SteelJacketedProps;
20
+ V: number;
21
+ sectionState?: SectionState;
22
+ }
23
+ export interface BoltProps {
24
+ Ase: number;
25
+ futa: number;
26
+ fya?: number;
27
+ diameter?: number;
28
+ shearPlanes?: number;
29
+ phiVboltOverride?: number;
30
+ }
31
+ export interface PlateInterfaceBoltInput extends PlateShearFlowInput {
32
+ bolt: BoltProps;
33
+ boltsPerRow: number;
34
+ transferLength: number;
8
35
  }
@@ -1,3 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hasTopPlate = hasTopPlate;
4
+ exports.hasBottomPlate = hasBottomPlate;
5
+ /**
6
+ * A plate counts as present only when both its width and thickness are positive,
7
+ * so a bottom-only jacket may omit the top plate fields or pass them as zero.
8
+ */
9
+ function hasTopPlate(props) {
10
+ return (props.topSteelWidth ?? 0) > 0 && (props.topSteelThickness ?? 0) > 0;
11
+ }
12
+ function hasBottomPlate(props) {
13
+ return (props.bottomSteelWidth ?? 0) > 0 && (props.bottomSteelThickness ?? 0) > 0;
14
+ }
3
15
  //# sourceMappingURL=plate-jacketing.type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plate-jacketing.type.js","sourceRoot":"","sources":["../../../src/core/types/plate-jacketing.type.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"plate-jacketing.type.js","sourceRoot":"","sources":["../../../src/core/types/plate-jacketing.type.ts"],"names":[],"mappings":";;AAeA,kCAEC;AAED,wCAEC;AAVD;;;GAGG;AACH,SAAgB,WAAW,CAAC,KAAyB;IACnD,OAAO,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,cAAc,CAAC,KAAyB;IACtD,OAAO,CAAC,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACpF,CAAC"}
@@ -12,4 +12,34 @@ export interface RectDoublyBeamSection extends RectSinglyBeamSection {
12
12
  As_: number;
13
13
  d_: number;
14
14
  }
15
+ export interface RectShearSection {
16
+ fc_: number;
17
+ bw: number;
18
+ d: number;
19
+ lambda?: number;
20
+ }
21
+ export interface StirrupShearSection extends RectShearSection {
22
+ Av: number;
23
+ fyt: number;
24
+ s: number;
25
+ }
26
+ export interface ShearReinforcementCheckInput extends RectShearSection {
27
+ Vu: number;
28
+ fyt: number;
29
+ Av?: number;
30
+ s?: number;
31
+ }
32
+ export interface RebarGroupInput {
33
+ count: number;
34
+ diameter: number;
35
+ }
36
+ export interface RectBeamBarLayoutInput {
37
+ b: number;
38
+ h: number;
39
+ topBars: RebarGroupInput;
40
+ bottomBars: RebarGroupInput;
41
+ cover?: number;
42
+ stirrupDiameter?: number;
43
+ maxAggregateSize?: number;
44
+ }
15
45
  export declare function isSinglyReinforced(section: RectBeamSection): section is RectSinglyBeamSection;
@@ -2,9 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isSinglyReinforced = isSinglyReinforced;
4
4
  function isSinglyReinforced(section) {
5
- return (!("As_" in section) ||
6
- !("d_" in section) ||
7
- section.As_ <= 0 ||
8
- section.d_ <= 0);
5
+ return !("As_" in section) || !("d_" in section) || section.As_ <= 0 || section.d_ <= 0;
9
6
  }
10
7
  //# sourceMappingURL=rc-beam.type.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rc-beam.type.js","sourceRoot":"","sources":["../../../src/core/types/rc-beam.type.ts"],"names":[],"mappings":";;AAiBA,gDASC;AATD,SAAgB,kBAAkB,CAChC,OAAwB;IAExB,OAAO,CACL,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC;QACnB,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;QAClB,OAAO,CAAC,GAAG,IAAI,CAAC;QAChB,OAAO,CAAC,EAAE,IAAI,CAAC,CAChB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"rc-beam.type.js","sourceRoot":"","sources":["../../../src/core/types/rc-beam.type.ts"],"names":[],"mappings":";;AAoDA,gDAEC;AAFD,SAAgB,kBAAkB,CAAC,OAAwB;IACzD,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1F,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { rectBeamMomentCapacity, concreteBeta, concreteElasticModulus, psiToMpa, } from "./rc";
2
- export { calculateSteelJacketedBeamMomentCapacity } from "./strengthening";
3
- export type { RectBeamSection, RectSinglyBeamSection, RectDoublyBeamSection, SteelJacketedProps, Warnings, calculationResult, unit, } from "./core";
4
- export { isSinglyReinforced, FLEXURAL_STRENGTH_REDUCTION_FACTOR, CONCRETE_ULTIMATE_STRAIN, RCDesignError, Errors, } from "./core";
1
+ export { rectBeamMomentCapacity, rectBeamBarLayout, concreteShearCapacity, stirrupShearCapacity, checkStirrupRequirement, concreteBeta, concreteElasticModulus, psiToMpa, } from "./rc";
2
+ export { calculateSteelJacketedBeamMomentCapacity, plateInterfaceShearFlow, boltShearCapacity, plateInterfaceBoltRequirement, } from "./strengthening";
3
+ export type { RectBeamSection, RectSinglyBeamSection, RectDoublyBeamSection, RectShearSection, StirrupShearSection, ShearReinforcementCheckInput, RebarGroupInput, RectBeamBarLayoutInput, SteelJacketedProps, SectionState, PlateShearFlowInput, BoltProps, PlateInterfaceBoltInput, Warnings, calculationResult, unit, } from "./core";
4
+ export { isSinglyReinforced, hasTopPlate, hasBottomPlate, FLEXURAL_STRENGTH_REDUCTION_FACTOR, CONCRETE_ULTIMATE_STRAIN, SHEAR_STRENGTH_REDUCTION_FACTOR, ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR, MAX_PLATE_BOLT_SPACING, RCDesignError, Errors, } from "./core";
5
5
  export { solveQuadratic, roundToDecimalPlaces, mergeWarnings } from "./utils";
package/dist/index.js CHANGED
@@ -1,19 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mergeWarnings = exports.roundToDecimalPlaces = exports.solveQuadratic = exports.Errors = exports.RCDesignError = exports.CONCRETE_ULTIMATE_STRAIN = exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = exports.isSinglyReinforced = exports.calculateSteelJacketedBeamMomentCapacity = exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.rectBeamMomentCapacity = void 0;
3
+ exports.mergeWarnings = exports.roundToDecimalPlaces = exports.solveQuadratic = exports.Errors = exports.RCDesignError = exports.MAX_PLATE_BOLT_SPACING = exports.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR = exports.SHEAR_STRENGTH_REDUCTION_FACTOR = exports.CONCRETE_ULTIMATE_STRAIN = exports.FLEXURAL_STRENGTH_REDUCTION_FACTOR = exports.hasBottomPlate = exports.hasTopPlate = exports.isSinglyReinforced = exports.plateInterfaceBoltRequirement = exports.boltShearCapacity = exports.plateInterfaceShearFlow = exports.calculateSteelJacketedBeamMomentCapacity = exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.checkStirrupRequirement = exports.stirrupShearCapacity = exports.concreteShearCapacity = exports.rectBeamBarLayout = exports.rectBeamMomentCapacity = void 0;
4
4
  // RC Beam Design
5
5
  var rc_1 = require("./rc");
6
6
  Object.defineProperty(exports, "rectBeamMomentCapacity", { enumerable: true, get: function () { return rc_1.rectBeamMomentCapacity; } });
7
+ Object.defineProperty(exports, "rectBeamBarLayout", { enumerable: true, get: function () { return rc_1.rectBeamBarLayout; } });
8
+ Object.defineProperty(exports, "concreteShearCapacity", { enumerable: true, get: function () { return rc_1.concreteShearCapacity; } });
9
+ Object.defineProperty(exports, "stirrupShearCapacity", { enumerable: true, get: function () { return rc_1.stirrupShearCapacity; } });
10
+ Object.defineProperty(exports, "checkStirrupRequirement", { enumerable: true, get: function () { return rc_1.checkStirrupRequirement; } });
7
11
  Object.defineProperty(exports, "concreteBeta", { enumerable: true, get: function () { return rc_1.concreteBeta; } });
8
12
  Object.defineProperty(exports, "concreteElasticModulus", { enumerable: true, get: function () { return rc_1.concreteElasticModulus; } });
9
13
  Object.defineProperty(exports, "psiToMpa", { enumerable: true, get: function () { return rc_1.psiToMpa; } });
10
14
  // Strengthening
11
15
  var strengthening_1 = require("./strengthening");
12
16
  Object.defineProperty(exports, "calculateSteelJacketedBeamMomentCapacity", { enumerable: true, get: function () { return strengthening_1.calculateSteelJacketedBeamMomentCapacity; } });
17
+ Object.defineProperty(exports, "plateInterfaceShearFlow", { enumerable: true, get: function () { return strengthening_1.plateInterfaceShearFlow; } });
18
+ Object.defineProperty(exports, "boltShearCapacity", { enumerable: true, get: function () { return strengthening_1.boltShearCapacity; } });
19
+ Object.defineProperty(exports, "plateInterfaceBoltRequirement", { enumerable: true, get: function () { return strengthening_1.plateInterfaceBoltRequirement; } });
13
20
  var core_1 = require("./core");
14
21
  Object.defineProperty(exports, "isSinglyReinforced", { enumerable: true, get: function () { return core_1.isSinglyReinforced; } });
22
+ Object.defineProperty(exports, "hasTopPlate", { enumerable: true, get: function () { return core_1.hasTopPlate; } });
23
+ Object.defineProperty(exports, "hasBottomPlate", { enumerable: true, get: function () { return core_1.hasBottomPlate; } });
15
24
  Object.defineProperty(exports, "FLEXURAL_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return core_1.FLEXURAL_STRENGTH_REDUCTION_FACTOR; } });
16
25
  Object.defineProperty(exports, "CONCRETE_ULTIMATE_STRAIN", { enumerable: true, get: function () { return core_1.CONCRETE_ULTIMATE_STRAIN; } });
26
+ Object.defineProperty(exports, "SHEAR_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return core_1.SHEAR_STRENGTH_REDUCTION_FACTOR; } });
27
+ Object.defineProperty(exports, "ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return core_1.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR; } });
28
+ Object.defineProperty(exports, "MAX_PLATE_BOLT_SPACING", { enumerable: true, get: function () { return core_1.MAX_PLATE_BOLT_SPACING; } });
17
29
  Object.defineProperty(exports, "RCDesignError", { enumerable: true, get: function () { return core_1.RCDesignError; } });
18
30
  Object.defineProperty(exports, "Errors", { enumerable: true, get: function () { return core_1.Errors; } });
19
31
  // Utilities
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,2BAKc;AAJZ,4GAAA,sBAAsB,OAAA;AACtB,kGAAA,YAAY,OAAA;AACZ,4GAAA,sBAAsB,OAAA;AACtB,8FAAA,QAAQ,OAAA;AAGV,gBAAgB;AAChB,iDAA2E;AAAlE,yIAAA,wCAAwC,OAAA;AAajD,+BAMgB;AALd,0GAAA,kBAAkB,OAAA;AAClB,0HAAA,kCAAkC,OAAA;AAClC,gHAAA,wBAAwB,OAAA;AACxB,qGAAA,aAAa,OAAA;AACb,8FAAA,MAAM,OAAA;AAGR,YAAY;AACZ,iCAA8E;AAArE,uGAAA,cAAc,OAAA;AAAE,6GAAA,oBAAoB,OAAA;AAAE,sGAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iBAAiB;AACjB,2BASc;AARZ,4GAAA,sBAAsB,OAAA;AACtB,uGAAA,iBAAiB,OAAA;AACjB,2GAAA,qBAAqB,OAAA;AACrB,0GAAA,oBAAoB,OAAA;AACpB,6GAAA,uBAAuB,OAAA;AACvB,kGAAA,YAAY,OAAA;AACZ,4GAAA,sBAAsB,OAAA;AACtB,8FAAA,QAAQ,OAAA;AAGV,gBAAgB;AAChB,iDAKyB;AAJvB,yIAAA,wCAAwC,OAAA;AACxC,wHAAA,uBAAuB,OAAA;AACvB,kHAAA,iBAAiB,OAAA;AACjB,8HAAA,6BAA6B,OAAA;AAuB/B,+BAWgB;AAVd,0GAAA,kBAAkB,OAAA;AAClB,mGAAA,WAAW,OAAA;AACX,sGAAA,cAAc,OAAA;AACd,0HAAA,kCAAkC,OAAA;AAClC,gHAAA,wBAAwB,OAAA;AACxB,uHAAA,+BAA+B,OAAA;AAC/B,8HAAA,sCAAsC,OAAA;AACtC,8GAAA,sBAAsB,OAAA;AACtB,qGAAA,aAAa,OAAA;AACb,8FAAA,MAAM,OAAA;AAGR,YAAY;AACZ,iCAA8E;AAArE,uGAAA,cAAc,OAAA;AAAE,6GAAA,oBAAoB,OAAA;AAAE,sGAAA,aAAa,OAAA"}
@@ -1,2 +1,3 @@
1
- export { rectBeamMomentCapacity } from "./rc-beam-design";
1
+ export { rectBeamMomentCapacity, concreteShearCapacity, stirrupShearCapacity, checkStirrupRequirement, } from "./rc-beam-design";
2
2
  export { concreteBeta, concreteElasticModulus, psiToMpa } from "./general";
3
+ export { rectBeamBarLayout } from "./rc-bar-layout";
package/dist/rc/index.js CHANGED
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.rectBeamMomentCapacity = void 0;
3
+ 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
+ Object.defineProperty(exports, "concreteShearCapacity", { enumerable: true, get: function () { return rc_beam_design_1.concreteShearCapacity; } });
7
+ Object.defineProperty(exports, "stirrupShearCapacity", { enumerable: true, get: function () { return rc_beam_design_1.stirrupShearCapacity; } });
8
+ Object.defineProperty(exports, "checkStirrupRequirement", { enumerable: true, get: function () { return rc_beam_design_1.checkStirrupRequirement; } });
6
9
  var general_1 = require("./general");
7
10
  Object.defineProperty(exports, "concreteBeta", { enumerable: true, get: function () { return general_1.concreteBeta; } });
8
11
  Object.defineProperty(exports, "concreteElasticModulus", { enumerable: true, get: function () { return general_1.concreteElasticModulus; } });
9
12
  Object.defineProperty(exports, "psiToMpa", { enumerable: true, get: function () { return general_1.psiToMpa; } });
13
+ var rc_bar_layout_1 = require("./rc-bar-layout");
14
+ Object.defineProperty(exports, "rectBeamBarLayout", { enumerable: true, get: function () { return rc_bar_layout_1.rectBeamBarLayout; } });
10
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rc/index.ts"],"names":[],"mappings":";;;AAAA,mDAA0D;AAAjD,wHAAA,sBAAsB,OAAA;AAC/B,qCAA2E;AAAlE,uGAAA,YAAY,OAAA;AAAE,iHAAA,sBAAsB,OAAA;AAAE,mGAAA,QAAQ,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"}
@@ -0,0 +1,34 @@
1
+ import { RectBeamBarLayoutInput } from "../core/types/rc-beam.type";
2
+ import { Warnings } from "../core/types/output-message.type";
3
+ /**
4
+ * Lays out top and bottom rebar groups within a rectangular beam section,
5
+ * determining the number of layers required to satisfy ACI 318-19 minimum
6
+ * bar spacing (25.2.1) and layer spacing (25.2.2), and returns the resulting
7
+ * effective depth `d` and compression steel depth `d_`, both measured from
8
+ * the top (compression) face so they plug directly into
9
+ * {@link rectBeamMomentCapacity}'s `d` / `d_` inputs.
10
+ *
11
+ * @param input - Section dimensions, top/bottom bar groups, and optional
12
+ * cover / stirrup diameter / max aggregate size (default to ACI 318-19
13
+ * Table 20.6.1.3.1 values for cast-in-place beams not exposed to weather
14
+ * or in contact with ground)
15
+ * @returns `d`, `d_`, per-group layer counts and areas, `unit`, and `warnings`
16
+ * @throws {RCDesignError} If a bar does not fit within the section width, or
17
+ * if the combined top/bottom layers exceed the section height
18
+ */
19
+ export declare const rectBeamBarLayout: (input: RectBeamBarLayoutInput) => {
20
+ d: number;
21
+ d_: number;
22
+ top: {
23
+ numberOfLayers: number;
24
+ barsPerLayer: number[];
25
+ As: number;
26
+ };
27
+ bottom: {
28
+ numberOfLayers: number;
29
+ barsPerLayer: number[];
30
+ As: number;
31
+ };
32
+ unit: string;
33
+ warnings: Warnings;
34
+ };
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.rectBeamBarLayout = void 0;
37
+ const rc_design_error_1 = require("../core/errors/rc-design.error");
38
+ const MyMath = __importStar(require("../utils/math"));
39
+ const RCConstants = __importStar(require("../core/constants/rc.constant"));
40
+ /**
41
+ * Lays out a group of same-diameter bars (top or bottom) into the minimum
42
+ * number of layers that fit within the section width, per ACI 318-19 25.2.1
43
+ * (min clear spacing within a layer) and 25.2.2 (min clear spacing between
44
+ * layers), then returns the centroid distance from the near face.
45
+ */
46
+ const calculateBarGroupLayout = (group, b, cover, stirrupDiameter, maxAggregateSize) => {
47
+ const { count, diameter } = group;
48
+ if (count <= 0) {
49
+ return {
50
+ numberOfLayers: 0,
51
+ barsPerLayer: [],
52
+ distanceFromFace: 0,
53
+ outerExtent: 0,
54
+ As: 0,
55
+ };
56
+ }
57
+ const minClearSpacing = Math.max(RCConstants.MIN_BAR_CLEAR_SPACING, diameter, RCConstants.AGGREGATE_SPACING_FACTOR * maxAggregateSize);
58
+ const availableWidth = b - 2 * (cover + stirrupDiameter);
59
+ const maxBarsPerLayer = Math.min(count, Math.floor((availableWidth + minClearSpacing) / (diameter + minClearSpacing)));
60
+ if (maxBarsPerLayer < 1) {
61
+ throw new rc_design_error_1.RCDesignError(rc_design_error_1.Errors.SECTION_TOO_NARROW_FOR_BAR);
62
+ }
63
+ const numberOfLayers = Math.ceil(count / maxBarsPerLayer);
64
+ const baseBarsPerLayer = Math.floor(count / numberOfLayers);
65
+ const remainder = count % numberOfLayers;
66
+ const barsPerLayer = Array.from({ length: numberOfLayers }, (_, i) => i < remainder ? baseBarsPerLayer + 1 : baseBarsPerLayer);
67
+ const layerPitch = diameter + RCConstants.MIN_LAYER_CLEAR_SPACING;
68
+ const firstLayerDistance = cover + stirrupDiameter + diameter / 2;
69
+ const weightedSum = barsPerLayer.reduce((sum, n, i) => sum + n * (firstLayerDistance + i * layerPitch), 0);
70
+ return {
71
+ numberOfLayers,
72
+ barsPerLayer,
73
+ distanceFromFace: weightedSum / count,
74
+ outerExtent: cover +
75
+ stirrupDiameter +
76
+ numberOfLayers * diameter +
77
+ (numberOfLayers - 1) * RCConstants.MIN_LAYER_CLEAR_SPACING,
78
+ As: count * (Math.PI / 4) * diameter ** 2,
79
+ };
80
+ };
81
+ /**
82
+ * Lays out top and bottom rebar groups within a rectangular beam section,
83
+ * determining the number of layers required to satisfy ACI 318-19 minimum
84
+ * bar spacing (25.2.1) and layer spacing (25.2.2), and returns the resulting
85
+ * effective depth `d` and compression steel depth `d_`, both measured from
86
+ * the top (compression) face so they plug directly into
87
+ * {@link rectBeamMomentCapacity}'s `d` / `d_` inputs.
88
+ *
89
+ * @param input - Section dimensions, top/bottom bar groups, and optional
90
+ * cover / stirrup diameter / max aggregate size (default to ACI 318-19
91
+ * Table 20.6.1.3.1 values for cast-in-place beams not exposed to weather
92
+ * or in contact with ground)
93
+ * @returns `d`, `d_`, per-group layer counts and areas, `unit`, and `warnings`
94
+ * @throws {RCDesignError} If a bar does not fit within the section width, or
95
+ * if the combined top/bottom layers exceed the section height
96
+ */
97
+ const rectBeamBarLayout = (input) => {
98
+ const warnings = [];
99
+ const cover = input.cover ?? RCConstants.DEFAULT_BEAM_COVER;
100
+ const stirrupDiameter = input.stirrupDiameter ?? RCConstants.DEFAULT_STIRRUP_DIAMETER;
101
+ const maxAggregateSize = input.maxAggregateSize ?? RCConstants.DEFAULT_MAX_AGGREGATE_SIZE;
102
+ const top = calculateBarGroupLayout(input.topBars, input.b, cover, stirrupDiameter, maxAggregateSize);
103
+ const bottom = calculateBarGroupLayout(input.bottomBars, input.b, cover, stirrupDiameter, maxAggregateSize);
104
+ if (top.outerExtent + bottom.outerExtent > input.h) {
105
+ throw new rc_design_error_1.RCDesignError(rc_design_error_1.Errors.BAR_LAYOUT_EXCEEDS_SECTION_HEIGHT);
106
+ }
107
+ return {
108
+ d: MyMath.roundToDecimalPlaces(input.h - bottom.distanceFromFace, 1),
109
+ d_: MyMath.roundToDecimalPlaces(top.distanceFromFace, 1),
110
+ top: {
111
+ numberOfLayers: top.numberOfLayers,
112
+ barsPerLayer: top.barsPerLayer,
113
+ As: MyMath.roundToDecimalPlaces(top.As, 1),
114
+ },
115
+ bottom: {
116
+ numberOfLayers: bottom.numberOfLayers,
117
+ barsPerLayer: bottom.barsPerLayer,
118
+ As: MyMath.roundToDecimalPlaces(bottom.As, 1),
119
+ },
120
+ unit: "mm",
121
+ warnings: warnings,
122
+ };
123
+ };
124
+ exports.rectBeamBarLayout = rectBeamBarLayout;
125
+ //# sourceMappingURL=rc-bar-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rc-bar-layout.js","sourceRoot":"","sources":["../../src/rc/rc-bar-layout.ts"],"names":[],"mappings":"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"}