@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/README.md
CHANGED
|
@@ -11,6 +11,7 @@ Full API reference, with parameter tables, worked examples, warnings and error c
|
|
|
11
11
|
- **[API reference](https://theerapat-s28.github.io/ts-structural-eng/)** — landing page
|
|
12
12
|
- [RC Beam Design](https://theerapat-s28.github.io/ts-structural-eng/rc/) — `@theerapat-s28/ts-structural-eng-tools/rc`
|
|
13
13
|
- [Strengthening](https://theerapat-s28.github.io/ts-structural-eng/strengthening/) — `@theerapat-s28/ts-structural-eng-tools/strengthening`
|
|
14
|
+
- [FEA — Frame Analysis](https://theerapat-s28.github.io/ts-structural-eng/fea/) — `@theerapat-s28/ts-structural-eng-tools/fea`
|
|
14
15
|
|
|
15
16
|
The pages are served from [`html-docs/`](https://github.com/theerapat-s28/ts-structural-eng/tree/main/html-docs) via GitHub Pages.
|
|
16
17
|
|
|
@@ -61,11 +62,23 @@ src/
|
|
|
61
62
|
├── rc/ # Reinforced concrete design
|
|
62
63
|
│ ├── index.ts # Module exports
|
|
63
64
|
│ ├── general.ts # Concrete properties (beta1, Ec, unit conversion)
|
|
64
|
-
│
|
|
65
|
+
│ ├── rc-beam-design.ts # Beam moment capacity (singly/doubly reinforced) and shear capacity (Vc, Vs, stirrup requirement)
|
|
66
|
+
│ └── rc-section-properties.ts # Section properties (E, G, A, I22, I33, J) for frame analysis
|
|
65
67
|
├── strengthening/ # Strengthening methods
|
|
66
68
|
│ ├── index.ts
|
|
67
69
|
│ ├── rc-beam-steel-plate-jacketing.ts # Moment capacity before/after plate jacketing
|
|
68
|
-
│
|
|
70
|
+
│ ├── rc-beam-plate-interface-bolts.ts # Interface shear flow and required interface bolts
|
|
71
|
+
│ └── rc-beam-side-plate-shear.ts # Shear capacity before/after bolted side plates (two models)
|
|
72
|
+
├── fea/ # Finite-element analysis
|
|
73
|
+
│ ├── index.ts
|
|
74
|
+
│ └── frame/ # 3D frame analysis (direct stiffness method)
|
|
75
|
+
│ ├── index.ts
|
|
76
|
+
│ ├── elements/ # Reference beam stiffness matrix, fixed-end forces, end-release condensation
|
|
77
|
+
│ ├── transformation/ # ETABS-style local axes and the 12×12 transformation
|
|
78
|
+
│ ├── solver/ # System build + skyline factorisation, per-case solve, combinations, analyzeFrame
|
|
79
|
+
│ ├── validation/ # validateFrameModel: every input problem, with its location
|
|
80
|
+
│ ├── post/ # Result presentation, member force diagrams, envelopes, design demands
|
|
81
|
+
│ └── types/ # Model (incl. load cases, combinations) and result types
|
|
69
82
|
├── core/ # Shared infrastructure
|
|
70
83
|
│ ├── index.ts
|
|
71
84
|
│ ├── constants/ # RC design constants (ACI 318)
|
|
@@ -74,18 +87,22 @@ src/
|
|
|
74
87
|
└── utils/ # Helper utilities
|
|
75
88
|
├── index.ts
|
|
76
89
|
├── math.ts # Quadratic solver, rounding
|
|
90
|
+
├── matrix.ts # Dense matrix helpers, Cholesky (factor once, solve many) and general linear solvers
|
|
91
|
+
├── skyline.ts # Skyline (banded) Cholesky solver and reverse Cuthill–McKee ordering
|
|
77
92
|
└── merge-warning.ts # Warning array merging
|
|
78
93
|
examples/
|
|
79
94
|
└── basic-usage.ts # Example usage of the library
|
|
80
95
|
tests/
|
|
81
96
|
├── rc/ # Tests for RC module
|
|
82
97
|
├── strengthening/ # Tests for strengthening module
|
|
98
|
+
├── fea/frame/ # Tests for frame analysis
|
|
83
99
|
└── utils/ # Tests for utilities
|
|
84
100
|
html-docs/ # HTML API reference, deployed to GitHub Pages
|
|
85
101
|
├── DESIGN.md # Style guide for the doc pages
|
|
86
102
|
├── index.html # Landing page
|
|
87
103
|
├── rc/index.html
|
|
88
|
-
|
|
104
|
+
├── strengthening/index.html
|
|
105
|
+
└── fea/index.html
|
|
89
106
|
```
|
|
90
107
|
|
|
91
108
|
## TypeScript path aliases
|
|
@@ -98,7 +115,8 @@ This project uses `baseUrl` + `paths` for clean imports:
|
|
|
98
115
|
"@app-types/*": ["src/core/types/*"],
|
|
99
116
|
"@app-utils/*": ["src/utils/*"],
|
|
100
117
|
"@app-rc/*": ["src/rc/*"],
|
|
101
|
-
"@app-strg/*": ["src/strengthening/*"]
|
|
118
|
+
"@app-strg/*": ["src/strengthening/*"],
|
|
119
|
+
"@app-fea/*": ["src/fea/*"]
|
|
102
120
|
}
|
|
103
121
|
```
|
|
104
122
|
|
|
@@ -125,6 +143,26 @@ Summarised below; see the [full API reference](https://theerapat-s28.github.io/t
|
|
|
125
143
|
|
|
126
144
|
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.
|
|
127
145
|
|
|
146
|
+
Plates bolted to the sides of the web strengthen the beam in shear instead. ACI 318-19 has no provisions for steel side plates, so two independent models are offered and both return a `before` / `after` pair of `phiVn` (kN) for a continuous plate or discrete strips, with the plate contribution limited by the bolt anchorage and by the ACI 318-19 22.5.1.2 web-crushing cap. Use `hasSidePlate(props)` to test for presence.
|
|
147
|
+
|
|
148
|
+
- **`sidePlateShearCapacityByWebYielding(section, plates)`** — Takes each plate as a supplementary web reaching the von Mises shear yield stress `0.6·fy` (AISC 360 G2.1), and warns on plate slenderness beyond `2.24·√(Es/fy)`.
|
|
149
|
+
- **`sidePlateShearCapacityByTensionTie(section, plates)`** — Takes each plate as a tension tie crossing the diagonal crack, per the bonded shear reinforcement model of ACI 440.2R-17 §11.4 with steel in place of FRP: `ffe = min(fy, Es·0.004)` and `psi_f = 0.85`. Supports inclined strips.
|
|
150
|
+
|
|
151
|
+
ACI 440.2R-17 11.4.2 (spacing, which defers to the ACI 318 limits) and 11.4.3 (`Vs + Vf ≤ 0.66·√f'c·bw·d`) are verified against the guide; the subsections carrying the 0.004 strain cap and `psi_f` are still cited at §11.4 only. See the citation-status note at the top of `src/strengthening/rc-beam-side-plate-shear.ts`.
|
|
152
|
+
- **`compareSidePlateShearCapacity(section, plates)`** — Runs both models and reports the lower `phiVn` as `governing`; the intended entry point for a conservative design capacity.
|
|
153
|
+
|
|
154
|
+
### FEA — Frame Analysis
|
|
155
|
+
|
|
156
|
+
Linear-elastic 3D frame analysis by the direct stiffness method, imported from `@theerapat-s28/ts-structural-eng-tools/fea`. Global axes X, Y, Z (Z up) and ETABS-style local axes 1, 2, 3; inputs in mm, MPa, kN and kN·m, results in kN, kN·m, mm and rad.
|
|
157
|
+
|
|
158
|
+
- **`analyzeFrame(model, options?)`** — Analyses every load case in `model.loadCases` (dead, superimposed dead, live, wind…, each with an optional `selfWeight` multiplier) and forms every combination in `model.combinations` by superposition. The loads are flat top-level lists, `model.nodalLoads` and `model.memberLoads` (uniform and point loads in local or global directions), each load tagged with its `loadCase`, so large models stay readable. A combination is a list of factored terms `{ case, factor }` or `{ combination, factor }`; factors are entered by the user, and nested combinations are expanded. Supports end releases and fixed or spring supports. The stiffness matrix is factorised once for all cases. Returns `cases` and `combinations` keyed by id — each with displacements, reactions, member end forces, member diagrams along each member (forces `N`, `V2`, `V3`, `T`, `M2`, `M3` and deflections `u1`–`u3` local / `ux`–`uz` global, ready for plotting) and an equilibrium check — and an `envelope` of max/min over the combinations with the governing combination. Combination diagrams are rebuilt exactly, not summed from case extremes. The stiffness is stored in skyline (banded) form with nodes in reverse Cuthill–McKee order, so a building of ~850 nodes runs in about 1.5 s. Model and result are plain JSON, so it runs in a Web Worker. Invalid models, load cases or combinations and mechanisms throw `FrameAnalysisError` (codes 301–314) with `details` locating the problem.
|
|
159
|
+
- **`createFrameAnalysis(model, options?)`** — Same analysis, keeping the solution: returns `{ result, memberDiagram(resultId, memberId) }` so full member diagrams can be computed on demand. Combine with `options.diagrams: "extremes"`, which keeps diagram extremes (and the envelope) but drops the station arrays, for results about 4× smaller on large models.
|
|
160
|
+
- **`validateFrameModel(model)`** — Checks a model without analysing it and returns every problem, each with `details` (`nodeId`, `memberId`, `loadCaseId`, `combinationId`, `field`, `dof`) for highlighting in a UI. `analyzeFrame` runs it first and throws the first problem as a `FrameAnalysisError` whose `issues` lists all of them; non-finite numbers, negative springs and unknown option values are rejected (314).
|
|
161
|
+
- **`memberDemandEnvelope(result, memberId, options?)`** — Reduces a member's diagrams to `MuPositive`, `MuNegative`, `Vu` (optionally at distance `d` from the supports) and `Nu`, enveloped over all combinations (or the `combinations` / `cases` you select), with the `governing` combination of each, for the RC capacity functions.
|
|
162
|
+
- **`rectBeamToSectionProperties(section, options?)`** (from `rc`) — Converts a rectangular RC section into `SectionProperties` (`E`, `G`, `A`, `I22`, `I33`, `J`, `unitWeight`) with the ACI 318-19 6.6.3.1.1 inertia modifiers (0.35 beams, 0.70 columns) and a unit weight for self-weight (default 24 kN/m³, common practice rather than an ACI value).
|
|
163
|
+
- **`beam3dLocalStiffness(E, G, A, I22, I33, J, L)`** — The 12×12 local stiffness matrix exactly as in the reference "Complete Beam Stiffness Matrix". Its bending rotations R2 and R3 follow the opposite sign to the right-hand rule; **`beam3dLocalStiffnessRightHanded`** returns the right-handed form that `analyzeFrame` uses.
|
|
164
|
+
- **`memberAxes(start, end, angle?)`** — The ETABS-style local axes of a member as a direction-cosine matrix.
|
|
165
|
+
|
|
128
166
|
### General Utilities
|
|
129
167
|
|
|
130
168
|
- **`concreteBeta(fc_)`** — ACI 318 β₁ factor
|
|
@@ -138,6 +176,8 @@ pnpm run build
|
|
|
138
176
|
node dist/index.js
|
|
139
177
|
```
|
|
140
178
|
|
|
179
|
+
The build emits a CommonJS build in `dist/` (for `require`, with the `.d.ts` types) and an ES-module build in `dist/esm/` (for `import` and bundlers such as Vite); `package.json` `exports` routes each subpath to the right one, and `"sideEffects": false` lets bundlers drop unused code.
|
|
180
|
+
|
|
141
181
|
## Tests
|
|
142
182
|
|
|
143
183
|
```bash
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Poisson's ratio of concrete, for G = E / (2(1 + ν)). */
|
|
2
|
+
export declare const CONCRETE_POISSON_RATIO = 0.2;
|
|
3
|
+
/** ACI 318-19 Table 6.6.3.1.1(a): effective I of beams for elastic analysis at factored load. */
|
|
4
|
+
export declare const BEAM_INERTIA_MODIFIER = 0.35;
|
|
5
|
+
/** ACI 318-19 Table 6.6.3.1.1(a): effective I of columns for elastic analysis at factored load. */
|
|
6
|
+
export declare const COLUMN_INERTIA_MODIFIER = 0.7;
|
|
7
|
+
/** Unit weight of reinforced concrete in kN/m³ — common design practice, not an ACI 318-19 value. */
|
|
8
|
+
export declare const CONCRETE_UNIT_WEIGHT = 24;
|
|
9
|
+
/** A member is vertical when the horizontal projection of its unit axis is below this value. */
|
|
10
|
+
export declare const VERTICAL_MEMBER_TOLERANCE = 0.000001;
|
|
11
|
+
/** Smallest pivot, relative to its own diagonal term, accepted when factorising a stiffness matrix. */
|
|
12
|
+
export declare const SINGULARITY_TOLERANCE = 1e-9;
|
|
13
|
+
/** Relative global-equilibrium residual above which a warning is added. */
|
|
14
|
+
export declare const EQUILIBRIUM_TOLERANCE = 0.000001;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EQUILIBRIUM_TOLERANCE = exports.SINGULARITY_TOLERANCE = exports.VERTICAL_MEMBER_TOLERANCE = exports.CONCRETE_UNIT_WEIGHT = exports.COLUMN_INERTIA_MODIFIER = exports.BEAM_INERTIA_MODIFIER = exports.CONCRETE_POISSON_RATIO = void 0;
|
|
4
|
+
/** Poisson's ratio of concrete, for G = E / (2(1 + ν)). */
|
|
5
|
+
exports.CONCRETE_POISSON_RATIO = 0.2;
|
|
6
|
+
/** ACI 318-19 Table 6.6.3.1.1(a): effective I of beams for elastic analysis at factored load. */
|
|
7
|
+
exports.BEAM_INERTIA_MODIFIER = 0.35;
|
|
8
|
+
/** ACI 318-19 Table 6.6.3.1.1(a): effective I of columns for elastic analysis at factored load. */
|
|
9
|
+
exports.COLUMN_INERTIA_MODIFIER = 0.7;
|
|
10
|
+
/** Unit weight of reinforced concrete in kN/m³ — common design practice, not an ACI 318-19 value. */
|
|
11
|
+
exports.CONCRETE_UNIT_WEIGHT = 24;
|
|
12
|
+
/** A member is vertical when the horizontal projection of its unit axis is below this value. */
|
|
13
|
+
exports.VERTICAL_MEMBER_TOLERANCE = 1e-6;
|
|
14
|
+
/** Smallest pivot, relative to its own diagonal term, accepted when factorising a stiffness matrix. */
|
|
15
|
+
exports.SINGULARITY_TOLERANCE = 1e-9;
|
|
16
|
+
/** Relative global-equilibrium residual above which a warning is added. */
|
|
17
|
+
exports.EQUILIBRIUM_TOLERANCE = 1e-6;
|
|
18
|
+
//# sourceMappingURL=frame.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.constant.js","sourceRoot":"","sources":["../../../src/core/constants/frame.constant.ts"],"names":[],"mappings":";;;AAAA,2DAA2D;AAC9C,QAAA,sBAAsB,GAAG,GAAG,CAAC;AAE1C,iGAAiG;AACpF,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAE1C,mGAAmG;AACtF,QAAA,uBAAuB,GAAG,GAAG,CAAC;AAE3C,qGAAqG;AACxF,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAEvC,gGAAgG;AACnF,QAAA,yBAAyB,GAAG,IAAI,CAAC;AAE9C,uGAAuG;AAC1F,QAAA,qBAAqB,GAAG,IAAI,CAAC;AAE1C,2EAA2E;AAC9D,QAAA,qBAAqB,GAAG,IAAI,CAAC"}
|
|
@@ -22,4 +22,11 @@ export declare const ANCHOR_STEEL_SHEAR_COEFFICIENT = 0.6;
|
|
|
22
22
|
export declare const ANCHOR_FUTA_FYA_FACTOR = 1.9;
|
|
23
23
|
export declare const MAX_ANCHOR_FUTA = 860;
|
|
24
24
|
export declare const MIN_ANCHOR_SPACING_DIAMETER_FACTOR = 4;
|
|
25
|
+
export declare const DEFAULT_PLATE_ELASTIC_MODULUS = 200000;
|
|
26
|
+
export declare const PLATE_SHEAR_YIELD_COEFFICIENT = 0.6;
|
|
27
|
+
export declare const PLATE_SHEAR_SLENDERNESS_COEFFICIENT = 2.24;
|
|
28
|
+
export declare const SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT = 0.004;
|
|
29
|
+
export declare const SIDE_PLATE_REDUCTION_FACTOR_PSI = 0.85;
|
|
30
|
+
export declare const DEFAULT_SIDE_PLATE_SIDES = 2;
|
|
31
|
+
export declare const DEFAULT_SIDE_PLATE_ANGLE = 90;
|
|
25
32
|
export declare const MAX_PLATE_BOLT_SPACING = 300;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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;
|
|
3
|
+
exports.MAX_PLATE_BOLT_SPACING = exports.DEFAULT_SIDE_PLATE_ANGLE = exports.DEFAULT_SIDE_PLATE_SIDES = exports.SIDE_PLATE_REDUCTION_FACTOR_PSI = exports.SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT = exports.PLATE_SHEAR_SLENDERNESS_COEFFICIENT = exports.PLATE_SHEAR_YIELD_COEFFICIENT = exports.DEFAULT_PLATE_ELASTIC_MODULUS = 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
6
|
// ACI 318-19 Table 20.6.1.3.1: cast-in-place beams, not exposed to weather or in contact with ground
|
|
@@ -41,6 +41,25 @@ exports.ANCHOR_FUTA_FYA_FACTOR = 1.9;
|
|
|
41
41
|
exports.MAX_ANCHOR_FUTA = 860; // MPa
|
|
42
42
|
// ACI 318-19 17.9.2: min center-to-center spacing of cast-in anchors = 4 * da
|
|
43
43
|
exports.MIN_ANCHOR_SPACING_DIAMETER_FACTOR = 4;
|
|
44
|
+
// Default elastic modulus of structural steel plate, used when the plate props omit Es
|
|
45
|
+
exports.DEFAULT_PLATE_ELASTIC_MODULUS = 200000; // MPa
|
|
46
|
+
// AISC 360 G2.1 / von Mises: shear yield stress of a steel web = 0.6 * Fy
|
|
47
|
+
exports.PLATE_SHEAR_YIELD_COEFFICIENT = 0.6;
|
|
48
|
+
// AISC 360 G2.1(a): a web of slenderness h/tw <= 2.24*sqrt(E/Fy) reaches shear
|
|
49
|
+
// yielding before shear buckling
|
|
50
|
+
exports.PLATE_SHEAR_SLENDERNESS_COEFFICIENT = 2.24; // * sqrt(Es / fy)
|
|
51
|
+
// ACI 440.2R-17, 11.4: effective strain in bonded shear reinforcement is capped
|
|
52
|
+
// to preserve aggregate interlock in the concrete. Subsection unverified — see the
|
|
53
|
+
// TODO in strengthening/rc-beam-side-plate-shear.ts.
|
|
54
|
+
exports.SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT = 0.004;
|
|
55
|
+
// ACI 440.2R-17, 11.4: additional reduction factor psi_f for two-sided bonded
|
|
56
|
+
// shear strengthening (not fully wrapped). Subsection unverified — see the TODO in
|
|
57
|
+
// strengthening/rc-beam-side-plate-shear.ts.
|
|
58
|
+
exports.SIDE_PLATE_REDUCTION_FACTOR_PSI = 0.85;
|
|
59
|
+
// Both faces of the web plated, unless the caller says otherwise
|
|
60
|
+
exports.DEFAULT_SIDE_PLATE_SIDES = 2;
|
|
61
|
+
// Vertical strips, unless the caller gives an inclination
|
|
62
|
+
exports.DEFAULT_SIDE_PLATE_ANGLE = 90; // degrees from the beam axis
|
|
44
63
|
// Practical detailing limit on bolt pitch along a bonded strengthening plate,
|
|
45
64
|
// so the plate is restrained against local buckling / peeling between fasteners
|
|
46
65
|
exports.MAX_PLATE_BOLT_SPACING = 300; // mm
|
|
@@ -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;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"}
|
|
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,uFAAuF;AAC1E,QAAA,6BAA6B,GAAG,MAAM,CAAC,CAAC,MAAM;AAE3D,0EAA0E;AAC7D,QAAA,6BAA6B,GAAG,GAAG,CAAC;AAEjD,+EAA+E;AAC/E,iCAAiC;AACpB,QAAA,mCAAmC,GAAG,IAAI,CAAC,CAAC,kBAAkB;AAE3E,gFAAgF;AAChF,mFAAmF;AACnF,qDAAqD;AACxC,QAAA,iCAAiC,GAAG,KAAK,CAAC;AAEvD,8EAA8E;AAC9E,mFAAmF;AACnF,6CAA6C;AAChC,QAAA,+BAA+B,GAAG,IAAI,CAAC;AAEpD,iEAAiE;AACpD,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAE1C,0DAA0D;AAC7C,QAAA,wBAAwB,GAAG,EAAE,CAAC,CAAC,6BAA6B;AAEzE,8EAA8E;AAC9E,gFAAgF;AACnE,QAAA,sBAAsB,GAAG,GAAG,CAAC,CAAC,KAAK"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a frame-analysis problem is, so a UI can highlight it. Only the fields that apply are set.
|
|
3
|
+
*/
|
|
4
|
+
export interface FrameErrorDetails {
|
|
5
|
+
nodeId?: string | number;
|
|
6
|
+
memberId?: string | number;
|
|
7
|
+
loadCaseId?: string;
|
|
8
|
+
combinationId?: string;
|
|
9
|
+
/** The offending input field, e.g. "x", "fz", "w", "direction", "uz". */
|
|
10
|
+
field?: string;
|
|
11
|
+
/** For an unstable structure: a degree of freedom involved in the mechanism. */
|
|
12
|
+
dof?: "ux" | "uy" | "uz" | "rx" | "ry" | "rz";
|
|
13
|
+
}
|
|
14
|
+
export declare class FrameAnalysisError extends Error {
|
|
15
|
+
code: number;
|
|
16
|
+
message: string;
|
|
17
|
+
details: FrameErrorDetails;
|
|
18
|
+
/** Every problem found when the model was validated; this error is the first of them. */
|
|
19
|
+
issues: FrameModelIssue[];
|
|
20
|
+
constructor(std?: FrameAnalysisErrorType, details?: FrameErrorDetails, issues?: FrameModelIssue[]);
|
|
21
|
+
}
|
|
22
|
+
/** One problem found in a frame model, as returned by `validateFrameModel`. */
|
|
23
|
+
export interface FrameModelIssue {
|
|
24
|
+
code: number;
|
|
25
|
+
message: string;
|
|
26
|
+
details: FrameErrorDetails;
|
|
27
|
+
}
|
|
28
|
+
type FrameAnalysisErrorType = {
|
|
29
|
+
code: number;
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
export declare const FrameErrors: Record<string, FrameAnalysisErrorType>;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FrameErrors = exports.FrameAnalysisError = void 0;
|
|
4
|
+
class FrameAnalysisError extends Error {
|
|
5
|
+
constructor(std = { code: 0, message: "Unknown error" }, details = {}, issues) {
|
|
6
|
+
super(std.message);
|
|
7
|
+
this.code = std.code;
|
|
8
|
+
this.message = std.message;
|
|
9
|
+
this.details = details;
|
|
10
|
+
this.issues = issues ?? [{ code: std.code, message: std.message, details }];
|
|
11
|
+
Object.setPrototypeOf(this, FrameAnalysisError.prototype);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.FrameAnalysisError = FrameAnalysisError;
|
|
15
|
+
exports.FrameErrors = {
|
|
16
|
+
// 3XX : Frame analysis errors
|
|
17
|
+
ZERO_LENGTH_MEMBER: {
|
|
18
|
+
code: 301,
|
|
19
|
+
message: "A member's start and end nodes coincide; the member has zero length.",
|
|
20
|
+
},
|
|
21
|
+
UNKNOWN_NODE_REFERENCE: {
|
|
22
|
+
code: 302,
|
|
23
|
+
message: "A member, restraint or load refers to a node or member id that is not in the model.",
|
|
24
|
+
},
|
|
25
|
+
DUPLICATE_ID: {
|
|
26
|
+
code: 303,
|
|
27
|
+
message: "Node ids, member ids and restrained node ids must each be unique, and load case and combination ids must be unique across both lists.",
|
|
28
|
+
},
|
|
29
|
+
STRUCTURE_UNSTABLE: {
|
|
30
|
+
code: 304,
|
|
31
|
+
message: "The restrained structure is unstable (singular stiffness matrix); add supports or members to prevent a mechanism.",
|
|
32
|
+
},
|
|
33
|
+
INVALID_SECTION_PROPERTIES: {
|
|
34
|
+
code: 305,
|
|
35
|
+
message: "Member section properties E, G, A, I22, I33 and J must all be positive, and unitWeight, when given, must not be negative.",
|
|
36
|
+
},
|
|
37
|
+
NO_RESTRAINTS: {
|
|
38
|
+
code: 306,
|
|
39
|
+
message: "The model has no restrained degrees of freedom.",
|
|
40
|
+
},
|
|
41
|
+
INVALID_RELEASE: {
|
|
42
|
+
code: 307,
|
|
43
|
+
message: "The end releases on a member make it a mechanism (rigid-body motion within the member).",
|
|
44
|
+
},
|
|
45
|
+
LOAD_OUTSIDE_MEMBER: {
|
|
46
|
+
code: 308,
|
|
47
|
+
message: "A member load lies outside the member, or its start is not before its end.",
|
|
48
|
+
},
|
|
49
|
+
UNKNOWN_LOAD_CASE: {
|
|
50
|
+
code: 309,
|
|
51
|
+
message: "A load or a load combination term refers to a load case or combination that is not in the model, or a term names neither.",
|
|
52
|
+
},
|
|
53
|
+
CIRCULAR_COMBINATION: {
|
|
54
|
+
code: 310,
|
|
55
|
+
message: "Load combinations reference each other in a loop.",
|
|
56
|
+
},
|
|
57
|
+
INVALID_LOAD_FACTOR: {
|
|
58
|
+
code: 311,
|
|
59
|
+
message: "A combination factor or self-weight multiplier is not a finite number, or a load combination has no terms.",
|
|
60
|
+
},
|
|
61
|
+
NO_LOAD_CASES: {
|
|
62
|
+
code: 312,
|
|
63
|
+
message: "The model has no load cases; define at least one in loadCases.",
|
|
64
|
+
},
|
|
65
|
+
MISSING_UNIT_WEIGHT: {
|
|
66
|
+
code: 313,
|
|
67
|
+
message: "A load case requests self-weight but a member section has no unitWeight; set unitWeight (0 for a weightless member).",
|
|
68
|
+
},
|
|
69
|
+
INVALID_INPUT_VALUE: {
|
|
70
|
+
code: 314,
|
|
71
|
+
message: "An input value is invalid: a number that is not finite (NaN, Infinity or not a number), a negative spring stiffness, or a value outside its allowed options.",
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=frame-analysis.error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-analysis.error.js","sourceRoot":"","sources":["../../../src/core/errors/frame-analysis.error.ts"],"names":[],"mappings":";;;AAcA,MAAa,kBAAmB,SAAQ,KAAK;IAO3C,YACE,MAA8B,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,EACnE,UAA6B,EAAE,EAC/B,MAA0B;QAE1B,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,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5E,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF;AAnBD,gDAmBC;AAcY,QAAA,WAAW,GAA2C;IACjE,8BAA8B;IAC9B,kBAAkB,EAAE;QAClB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,sEAAsE;KAChF;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,qFAAqF;KAC/F;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,GAAG;QACT,OAAO,EACL,uIAAuI;KAC1I;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,mHAAmH;KACtH;IACD,0BAA0B,EAAE;QAC1B,IAAI,EAAE,GAAG;QACT,OAAO,EACL,2HAA2H;KAC9H;IACD,aAAa,EAAE;QACb,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,iDAAiD;KAC3D;IACD,eAAe,EAAE;QACf,IAAI,EAAE,GAAG;QACT,OAAO,EACL,yFAAyF;KAC5F;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,4EAA4E;KACtF;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,2HAA2H;KAC9H;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,mDAAmD;KAC7D;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,4GAA4G;KAC/G;IACD,aAAa,EAAE;QACb,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,gEAAgE;KAC1E;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,sHAAsH;KACzH;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,GAAG;QACT,OAAO,EACL,8JAA8J;KACjK;CACF,CAAC"}
|
|
@@ -56,5 +56,13 @@ exports.Errors = {
|
|
|
56
56
|
code: 204,
|
|
57
57
|
message: "No valid cracked neutral axis was found within the concrete depth; check the section and plate properties.",
|
|
58
58
|
},
|
|
59
|
+
SIDE_PLATE_GEOMETRY_INVALID: {
|
|
60
|
+
code: 205,
|
|
61
|
+
message: "Inconsistent side plate geometry; thickness, engaged depth, fy and sides must be positive, the depth must fit within the section, and a stripped layout requires a positive width and spacing.",
|
|
62
|
+
},
|
|
63
|
+
STRENGTHENED_SHEAR_NO_HEADROOM: {
|
|
64
|
+
code: 206,
|
|
65
|
+
message: "Existing Vs already reaches 0.66*sqrt(fc')*bw*d (ACI318-19, 22.5.1.2); the web crushes before any added side plate force can be developed, so shear strengthening cannot be realised on this section.",
|
|
66
|
+
},
|
|
59
67
|
};
|
|
60
68
|
//# 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;IAE9B;;;;;;OAMG;IACH,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
|
+
{"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;IAE9B;;;;;;OAMG;IACH,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;IACD,2BAA2B,EAAE;QAC3B,IAAI,EAAE,GAAG;QACT,OAAO,EACL,gMAAgM;KACnM;IACD,8BAA8B,EAAE;QAC9B,IAAI,EAAE,GAAG;QACT,OAAO,EACL,uMAAuM;KAC1M;CACF,CAAC"}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
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, SectionState, PlateShearFlowInput, BoltProps, PlateInterfaceBoltInput, } from "./types/plate-jacketing.type";
|
|
4
|
-
export { hasTopPlate, hasBottomPlate } from "./types/plate-jacketing.type";
|
|
3
|
+
export type { SteelJacketedProps, SectionState, PlateShearFlowInput, BoltProps, PlateInterfaceBoltInput, SidePlateConfiguration, SidePlateAnchorage, SidePlateShearProps, } from "./types/plate-jacketing.type";
|
|
4
|
+
export { hasTopPlate, hasBottomPlate, hasSidePlate } from "./types/plate-jacketing.type";
|
|
5
|
+
export type { SectionProperties } from "./types/section-properties.type";
|
|
5
6
|
export type { Warnings, calculationResult } from "./types/output-message.type";
|
|
6
7
|
export type { unit } from "./types/unit.type";
|
|
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";
|
|
8
|
+
export { FLEXURAL_STRENGTH_REDUCTION_FACTOR, CONCRETE_ULTIMATE_STRAIN, SHEAR_STRENGTH_REDUCTION_FACTOR, ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR, MAX_PLATE_BOLT_SPACING, PLATE_SHEAR_YIELD_COEFFICIENT, SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT, SIDE_PLATE_REDUCTION_FACTOR_PSI, } from "./constants/rc.constant";
|
|
9
|
+
export { CONCRETE_POISSON_RATIO, CONCRETE_UNIT_WEIGHT, BEAM_INERTIA_MODIFIER, COLUMN_INERTIA_MODIFIER, VERTICAL_MEMBER_TOLERANCE, SINGULARITY_TOLERANCE, EQUILIBRIUM_TOLERANCE, } from "./constants/frame.constant";
|
|
8
10
|
export { RCDesignError, Errors } from "./errors/rc-design.error";
|
|
11
|
+
export { FrameAnalysisError, FrameErrors } from "./errors/frame-analysis.error";
|
|
12
|
+
export type { FrameErrorDetails, FrameModelIssue } from "./errors/frame-analysis.error";
|
package/dist/core/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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;
|
|
3
|
+
exports.FrameErrors = exports.FrameAnalysisError = exports.Errors = exports.RCDesignError = exports.EQUILIBRIUM_TOLERANCE = exports.SINGULARITY_TOLERANCE = exports.VERTICAL_MEMBER_TOLERANCE = exports.COLUMN_INERTIA_MODIFIER = exports.BEAM_INERTIA_MODIFIER = exports.CONCRETE_UNIT_WEIGHT = exports.CONCRETE_POISSON_RATIO = exports.SIDE_PLATE_REDUCTION_FACTOR_PSI = exports.SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT = exports.PLATE_SHEAR_YIELD_COEFFICIENT = 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.hasSidePlate = 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
6
|
var plate_jacketing_type_1 = require("./types/plate-jacketing.type");
|
|
7
7
|
Object.defineProperty(exports, "hasTopPlate", { enumerable: true, get: function () { return plate_jacketing_type_1.hasTopPlate; } });
|
|
8
8
|
Object.defineProperty(exports, "hasBottomPlate", { enumerable: true, get: function () { return plate_jacketing_type_1.hasBottomPlate; } });
|
|
9
|
+
Object.defineProperty(exports, "hasSidePlate", { enumerable: true, get: function () { return plate_jacketing_type_1.hasSidePlate; } });
|
|
9
10
|
// Constants
|
|
10
11
|
var rc_constant_1 = require("./constants/rc.constant");
|
|
11
12
|
Object.defineProperty(exports, "FLEXURAL_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return rc_constant_1.FLEXURAL_STRENGTH_REDUCTION_FACTOR; } });
|
|
@@ -13,8 +14,22 @@ Object.defineProperty(exports, "CONCRETE_ULTIMATE_STRAIN", { enumerable: true, g
|
|
|
13
14
|
Object.defineProperty(exports, "SHEAR_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return rc_constant_1.SHEAR_STRENGTH_REDUCTION_FACTOR; } });
|
|
14
15
|
Object.defineProperty(exports, "ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR", { enumerable: true, get: function () { return rc_constant_1.ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR; } });
|
|
15
16
|
Object.defineProperty(exports, "MAX_PLATE_BOLT_SPACING", { enumerable: true, get: function () { return rc_constant_1.MAX_PLATE_BOLT_SPACING; } });
|
|
17
|
+
Object.defineProperty(exports, "PLATE_SHEAR_YIELD_COEFFICIENT", { enumerable: true, get: function () { return rc_constant_1.PLATE_SHEAR_YIELD_COEFFICIENT; } });
|
|
18
|
+
Object.defineProperty(exports, "SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT", { enumerable: true, get: function () { return rc_constant_1.SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT; } });
|
|
19
|
+
Object.defineProperty(exports, "SIDE_PLATE_REDUCTION_FACTOR_PSI", { enumerable: true, get: function () { return rc_constant_1.SIDE_PLATE_REDUCTION_FACTOR_PSI; } });
|
|
20
|
+
var frame_constant_1 = require("./constants/frame.constant");
|
|
21
|
+
Object.defineProperty(exports, "CONCRETE_POISSON_RATIO", { enumerable: true, get: function () { return frame_constant_1.CONCRETE_POISSON_RATIO; } });
|
|
22
|
+
Object.defineProperty(exports, "CONCRETE_UNIT_WEIGHT", { enumerable: true, get: function () { return frame_constant_1.CONCRETE_UNIT_WEIGHT; } });
|
|
23
|
+
Object.defineProperty(exports, "BEAM_INERTIA_MODIFIER", { enumerable: true, get: function () { return frame_constant_1.BEAM_INERTIA_MODIFIER; } });
|
|
24
|
+
Object.defineProperty(exports, "COLUMN_INERTIA_MODIFIER", { enumerable: true, get: function () { return frame_constant_1.COLUMN_INERTIA_MODIFIER; } });
|
|
25
|
+
Object.defineProperty(exports, "VERTICAL_MEMBER_TOLERANCE", { enumerable: true, get: function () { return frame_constant_1.VERTICAL_MEMBER_TOLERANCE; } });
|
|
26
|
+
Object.defineProperty(exports, "SINGULARITY_TOLERANCE", { enumerable: true, get: function () { return frame_constant_1.SINGULARITY_TOLERANCE; } });
|
|
27
|
+
Object.defineProperty(exports, "EQUILIBRIUM_TOLERANCE", { enumerable: true, get: function () { return frame_constant_1.EQUILIBRIUM_TOLERANCE; } });
|
|
16
28
|
// Errors
|
|
17
29
|
var rc_design_error_1 = require("./errors/rc-design.error");
|
|
18
30
|
Object.defineProperty(exports, "RCDesignError", { enumerable: true, get: function () { return rc_design_error_1.RCDesignError; } });
|
|
19
31
|
Object.defineProperty(exports, "Errors", { enumerable: true, get: function () { return rc_design_error_1.Errors; } });
|
|
32
|
+
var frame_analysis_error_1 = require("./errors/frame-analysis.error");
|
|
33
|
+
Object.defineProperty(exports, "FrameAnalysisError", { enumerable: true, get: function () { return frame_analysis_error_1.FrameAnalysisError; } });
|
|
34
|
+
Object.defineProperty(exports, "FrameErrors", { enumerable: true, get: function () { return frame_analysis_error_1.FrameErrors; } });
|
|
20
35
|
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAWA,qDAA0D;AAAjD,kHAAA,kBAAkB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";;;AAWA,qDAA0D;AAAjD,kHAAA,kBAAkB,OAAA;AAW3B,qEAAyF;AAAhF,mHAAA,WAAW,OAAA;AAAE,sHAAA,cAAc,OAAA;AAAE,oHAAA,YAAY,OAAA;AAKlD,YAAY;AACZ,uDASiC;AAR/B,iIAAA,kCAAkC,OAAA;AAClC,uHAAA,wBAAwB,OAAA;AACxB,8HAAA,+BAA+B,OAAA;AAC/B,qIAAA,sCAAsC,OAAA;AACtC,qHAAA,sBAAsB,OAAA;AACtB,4HAAA,6BAA6B,OAAA;AAC7B,gIAAA,iCAAiC,OAAA;AACjC,8HAAA,+BAA+B,OAAA;AAGjC,6DAQoC;AAPlC,wHAAA,sBAAsB,OAAA;AACtB,sHAAA,oBAAoB,OAAA;AACpB,uHAAA,qBAAqB,OAAA;AACrB,yHAAA,uBAAuB,OAAA;AACvB,2HAAA,yBAAyB,OAAA;AACzB,uHAAA,qBAAqB,OAAA;AACrB,uHAAA,qBAAqB,OAAA;AAGvB,SAAS;AACT,4DAAiE;AAAxD,gHAAA,aAAa,OAAA;AAAE,yGAAA,MAAM,OAAA;AAC9B,sEAAgF;AAAvE,0HAAA,kBAAkB,OAAA;AAAE,mHAAA,WAAW,OAAA"}
|
|
@@ -33,3 +33,40 @@ export interface PlateInterfaceBoltInput extends PlateShearFlowInput {
|
|
|
33
33
|
boltsPerRow: number;
|
|
34
34
|
transferLength: number;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* How the side plates are laid out along the span.
|
|
38
|
+
*
|
|
39
|
+
* `"continuous"` is an unbroken plate over the strengthened length; `"strips"`
|
|
40
|
+
* are discrete plates of width `width` repeating at pitch `spacing`, acting like
|
|
41
|
+
* external stirrups.
|
|
42
|
+
*/
|
|
43
|
+
export type SidePlateConfiguration = "continuous" | "strips";
|
|
44
|
+
/**
|
|
45
|
+
* Bolt group anchoring the side plates to the web.
|
|
46
|
+
*
|
|
47
|
+
* `rowSpacing` is the horizontal pitch of the vertical bolt rows along the span;
|
|
48
|
+
* for a stripped layout it is normally the strip spacing itself. `boltsPerRow`
|
|
49
|
+
* counts the bolts in one vertical row, on one face of the beam.
|
|
50
|
+
*/
|
|
51
|
+
export interface SidePlateAnchorage {
|
|
52
|
+
bolt: BoltProps;
|
|
53
|
+
boltsPerRow: number;
|
|
54
|
+
rowSpacing: number;
|
|
55
|
+
}
|
|
56
|
+
export interface SidePlateShearProps {
|
|
57
|
+
fy: number;
|
|
58
|
+
Es?: number;
|
|
59
|
+
thickness: number;
|
|
60
|
+
depth: number;
|
|
61
|
+
configuration: SidePlateConfiguration;
|
|
62
|
+
width?: number;
|
|
63
|
+
spacing?: number;
|
|
64
|
+
angle?: number;
|
|
65
|
+
sides?: 1 | 2;
|
|
66
|
+
anchorage?: SidePlateAnchorage;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A side plate counts as present only when both its thickness and engaged depth
|
|
70
|
+
* are positive.
|
|
71
|
+
*/
|
|
72
|
+
export declare function hasSidePlate(props: SidePlateShearProps): boolean;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.hasTopPlate = hasTopPlate;
|
|
4
4
|
exports.hasBottomPlate = hasBottomPlate;
|
|
5
|
+
exports.hasSidePlate = hasSidePlate;
|
|
5
6
|
/**
|
|
6
7
|
* A plate counts as present only when both its width and thickness are positive,
|
|
7
8
|
* so a bottom-only jacket may omit the top plate fields or pass them as zero.
|
|
@@ -12,4 +13,11 @@ function hasTopPlate(props) {
|
|
|
12
13
|
function hasBottomPlate(props) {
|
|
13
14
|
return (props.bottomSteelWidth ?? 0) > 0 && (props.bottomSteelThickness ?? 0) > 0;
|
|
14
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* A side plate counts as present only when both its thickness and engaged depth
|
|
18
|
+
* are positive.
|
|
19
|
+
*/
|
|
20
|
+
function hasSidePlate(props) {
|
|
21
|
+
return props.thickness > 0 && props.depth > 0;
|
|
22
|
+
}
|
|
15
23
|
//# 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":";;AAeA,kCAEC;AAED,wCAEC;
|
|
1
|
+
{"version":3,"file":"plate-jacketing.type.js","sourceRoot":"","sources":["../../../src/core/types/plate-jacketing.type.ts"],"names":[],"mappings":";;AAeA,kCAEC;AAED,wCAEC;AAiED,oCAEC;AA7ED;;;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;AA6DD;;;GAGG;AACH,SAAgB,YAAY,CAAC,KAA0B;IACrD,OAAO,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prismatic member properties for frame analysis, using ETABS-style local axes:
|
|
3
|
+
* local 1 runs along the member, local 2 and 3 are the transverse axes.
|
|
4
|
+
*/
|
|
5
|
+
export interface SectionProperties {
|
|
6
|
+
E: number;
|
|
7
|
+
G: number;
|
|
8
|
+
A: number;
|
|
9
|
+
I22: number;
|
|
10
|
+
I33: number;
|
|
11
|
+
J: number;
|
|
12
|
+
unitWeight?: number;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"section-properties.type.js","sourceRoot":"","sources":["../../../src/core/types/section-properties.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Poisson's ratio of concrete, for G = E / (2(1 + ν)). */
|
|
2
|
+
export const CONCRETE_POISSON_RATIO = 0.2;
|
|
3
|
+
/** ACI 318-19 Table 6.6.3.1.1(a): effective I of beams for elastic analysis at factored load. */
|
|
4
|
+
export const BEAM_INERTIA_MODIFIER = 0.35;
|
|
5
|
+
/** ACI 318-19 Table 6.6.3.1.1(a): effective I of columns for elastic analysis at factored load. */
|
|
6
|
+
export const COLUMN_INERTIA_MODIFIER = 0.7;
|
|
7
|
+
/** Unit weight of reinforced concrete in kN/m³ — common design practice, not an ACI 318-19 value. */
|
|
8
|
+
export const CONCRETE_UNIT_WEIGHT = 24;
|
|
9
|
+
/** A member is vertical when the horizontal projection of its unit axis is below this value. */
|
|
10
|
+
export const VERTICAL_MEMBER_TOLERANCE = 1e-6;
|
|
11
|
+
/** Smallest pivot, relative to its own diagonal term, accepted when factorising a stiffness matrix. */
|
|
12
|
+
export const SINGULARITY_TOLERANCE = 1e-9;
|
|
13
|
+
/** Relative global-equilibrium residual above which a warning is added. */
|
|
14
|
+
export const EQUILIBRIUM_TOLERANCE = 1e-6;
|
|
15
|
+
//# sourceMappingURL=frame.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame.constant.js","sourceRoot":"","sources":["../../../../src/core/constants/frame.constant.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAC3D,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAE1C,iGAAiG;AACjG,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,mGAAmG;AACnG,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,qGAAqG;AACrG,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC,gGAAgG;AAChG,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAE9C,uGAAuG;AACvG,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAE1C,2EAA2E;AAC3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export const FLEXURAL_STRENGTH_REDUCTION_FACTOR = 0.9;
|
|
2
|
+
export const CONCRETE_ULTIMATE_STRAIN = 0.003;
|
|
3
|
+
// ACI 318-19 Table 20.6.1.3.1: cast-in-place beams, not exposed to weather or in contact with ground
|
|
4
|
+
export const DEFAULT_BEAM_COVER = 40; // mm, clear cover to stirrup
|
|
5
|
+
export const DEFAULT_STIRRUP_DIAMETER = 10; // mm
|
|
6
|
+
export const DEFAULT_MAX_AGGREGATE_SIZE = 20; // mm, nominal max aggregate size
|
|
7
|
+
// ACI 318-19 25.2.1: min clear spacing between parallel bars in a layer
|
|
8
|
+
export const MIN_BAR_CLEAR_SPACING = 25; // mm
|
|
9
|
+
export const AGGREGATE_SPACING_FACTOR = 4 / 3;
|
|
10
|
+
// ACI 318-19 25.2.2: min clear distance between layers
|
|
11
|
+
export const MIN_LAYER_CLEAR_SPACING = 25; // mm
|
|
12
|
+
// ACI 318-19 21.2.1: strength reduction factor for shear
|
|
13
|
+
export const SHEAR_STRENGTH_REDUCTION_FACTOR = 0.75;
|
|
14
|
+
// ACI 318-19 22.5.5.1, Table 22.5.5.1(a): Vc = 0.17 * lambda * sqrt(fc') * bw * d
|
|
15
|
+
export const CONCRETE_SHEAR_VC_COEFFICIENT = 0.17;
|
|
16
|
+
// ACI 318-19 22.5.3.1: sqrt(fc') used to compute Vc shall not exceed this limit
|
|
17
|
+
// unless minimum shear reinforcement per 9.6.3.3 is provided
|
|
18
|
+
export const SQRT_FC_SHEAR_LIMIT = 8.3; // MPa
|
|
19
|
+
// ACI 318-19 22.5.1.2: Vs shall not exceed 0.66 * sqrt(fc') * bw * d
|
|
20
|
+
export const MAX_VS_COEFFICIENT = 0.66;
|
|
21
|
+
// ACI 318-19 9.7.6.2.2: spacing threshold at which the tighter max-spacing limit applies
|
|
22
|
+
export const VS_SPACING_THRESHOLD_COEFFICIENT = 0.33; // * sqrt(fc') * bw * d
|
|
23
|
+
// ACI 318-19 9.7.6.2.2: max stirrup spacing, Vs <= 0.33 * sqrt(fc') * bw * d
|
|
24
|
+
export const MAX_STIRRUP_SPACING_LOW_VS = 600; // mm
|
|
25
|
+
export const MAX_STIRRUP_SPACING_LOW_VS_DEPTH_FACTOR = 0.5; // * d
|
|
26
|
+
// ACI 318-19 9.7.6.2.2: max stirrup spacing, Vs > 0.33 * sqrt(fc') * bw * d
|
|
27
|
+
export const MAX_STIRRUP_SPACING_HIGH_VS = 300; // mm
|
|
28
|
+
export const MAX_STIRRUP_SPACING_HIGH_VS_DEPTH_FACTOR = 0.25; // * d
|
|
29
|
+
// ACI 318-19 9.6.3.3: Av,min = max(0.062 * sqrt(fc') * bw * s / fyt, 0.35 * bw * s / fyt)
|
|
30
|
+
export const MIN_AV_SQRT_FC_COEFFICIENT = 0.062;
|
|
31
|
+
export const MIN_AV_ABSOLUTE_COEFFICIENT = 0.35;
|
|
32
|
+
// ACI 318-19 Table 17.5.3: strength reduction factor for anchor steel in shear
|
|
33
|
+
export const ANCHOR_SHEAR_STRENGTH_REDUCTION_FACTOR = 0.65;
|
|
34
|
+
// ACI 318-19 17.7.1.2b: Vsa = 0.6 * Ase,V * futa
|
|
35
|
+
export const ANCHOR_STEEL_SHEAR_COEFFICIENT = 0.6;
|
|
36
|
+
// ACI 318-19 17.6.1.2: futa shall not exceed min(1.9 * fya, 860 MPa)
|
|
37
|
+
export const ANCHOR_FUTA_FYA_FACTOR = 1.9;
|
|
38
|
+
export const MAX_ANCHOR_FUTA = 860; // MPa
|
|
39
|
+
// ACI 318-19 17.9.2: min center-to-center spacing of cast-in anchors = 4 * da
|
|
40
|
+
export const MIN_ANCHOR_SPACING_DIAMETER_FACTOR = 4;
|
|
41
|
+
// Default elastic modulus of structural steel plate, used when the plate props omit Es
|
|
42
|
+
export const DEFAULT_PLATE_ELASTIC_MODULUS = 200000; // MPa
|
|
43
|
+
// AISC 360 G2.1 / von Mises: shear yield stress of a steel web = 0.6 * Fy
|
|
44
|
+
export const PLATE_SHEAR_YIELD_COEFFICIENT = 0.6;
|
|
45
|
+
// AISC 360 G2.1(a): a web of slenderness h/tw <= 2.24*sqrt(E/Fy) reaches shear
|
|
46
|
+
// yielding before shear buckling
|
|
47
|
+
export const PLATE_SHEAR_SLENDERNESS_COEFFICIENT = 2.24; // * sqrt(Es / fy)
|
|
48
|
+
// ACI 440.2R-17, 11.4: effective strain in bonded shear reinforcement is capped
|
|
49
|
+
// to preserve aggregate interlock in the concrete. Subsection unverified — see the
|
|
50
|
+
// TODO in strengthening/rc-beam-side-plate-shear.ts.
|
|
51
|
+
export const SIDE_PLATE_EFFECTIVE_STRAIN_LIMIT = 0.004;
|
|
52
|
+
// ACI 440.2R-17, 11.4: additional reduction factor psi_f for two-sided bonded
|
|
53
|
+
// shear strengthening (not fully wrapped). Subsection unverified — see the TODO in
|
|
54
|
+
// strengthening/rc-beam-side-plate-shear.ts.
|
|
55
|
+
export const SIDE_PLATE_REDUCTION_FACTOR_PSI = 0.85;
|
|
56
|
+
// Both faces of the web plated, unless the caller says otherwise
|
|
57
|
+
export const DEFAULT_SIDE_PLATE_SIDES = 2;
|
|
58
|
+
// Vertical strips, unless the caller gives an inclination
|
|
59
|
+
export const DEFAULT_SIDE_PLATE_ANGLE = 90; // degrees from the beam axis
|
|
60
|
+
// Practical detailing limit on bolt pitch along a bonded strengthening plate,
|
|
61
|
+
// so the plate is restrained against local buckling / peeling between fasteners
|
|
62
|
+
export const MAX_PLATE_BOLT_SPACING = 300; // mm
|
|
63
|
+
//# sourceMappingURL=rc.constant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rc.constant.js","sourceRoot":"","sources":["../../../../src/core/constants/rc.constant.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,CAAC;AACtD,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,CAAC;AAE9C,qGAAqG;AACrG,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC,CAAC,6BAA6B;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC,CAAC,KAAK;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC,CAAC,iCAAiC;AAE/E,wEAAwE;AACxE,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC,CAAC,KAAK;AAC9C,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9C,uDAAuD;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC,CAAC,KAAK;AAEhD,yDAAyD;AACzD,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAEpD,kFAAkF;AAClF,MAAM,CAAC,MAAM,6BAA6B,GAAG,IAAI,CAAC;AAElD,gFAAgF;AAChF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC,CAAC,MAAM;AAE9C,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEvC,yFAAyF;AACzF,MAAM,CAAC,MAAM,gCAAgC,GAAG,IAAI,CAAC,CAAC,uBAAuB;AAE7E,6EAA6E;AAC7E,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,KAAK;AACpD,MAAM,CAAC,MAAM,uCAAuC,GAAG,GAAG,CAAC,CAAC,MAAM;AAElE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAC,CAAC,KAAK;AACrD,MAAM,CAAC,MAAM,wCAAwC,GAAG,IAAI,CAAC,CAAC,MAAM;AAEpE,0FAA0F;AAC1F,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,2BAA2B,GAAG,IAAI,CAAC;AAEhD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,sCAAsC,GAAG,IAAI,CAAC;AAE3D,iDAAiD;AACjD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAElD,qEAAqE;AACrE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,CAAC,CAAC,MAAM;AAE1C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AAEpD,uFAAuF;AACvF,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,CAAC,MAAM;AAE3D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAEjD,+EAA+E;AAC/E,iCAAiC;AACjC,MAAM,CAAC,MAAM,mCAAmC,GAAG,IAAI,CAAC,CAAC,kBAAkB;AAE3E,gFAAgF;AAChF,mFAAmF;AACnF,qDAAqD;AACrD,MAAM,CAAC,MAAM,iCAAiC,GAAG,KAAK,CAAC;AAEvD,8EAA8E;AAC9E,mFAAmF;AACnF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,+BAA+B,GAAG,IAAI,CAAC;AAEpD,iEAAiE;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,0DAA0D;AAC1D,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC,CAAC,6BAA6B;AAEzE,8EAA8E;AAC9E,gFAAgF;AAChF,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC,CAAC,KAAK"}
|