@theerapat-s28/ts-structural-eng-tools 2.1.0 → 2.1.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/CHANGELOG.md ADDED
@@ -0,0 +1,131 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@theerapat-s28/ts-structural-eng-tools` are recorded here.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the package uses [semantic versioning](https://semver.org/): a **major** release can break existing code, a **minor** release adds features, a **patch** release fixes bugs.
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [2.1.1] — 2026-10-23
10
+
11
+ ### Fixed
12
+
13
+ - The package root now re-exports `distributeAreaLoads`, the `TrapezoidalMemberLoad`, `TorqueMemberLoad`, `NullArea`, `AreaLoad`, `AreaDistribution` and `AreaLoadDirection` types, and the `AREA_GEOMETRY_TOLERANCE` constant. Since 2.1.0 they were reachable only through the `/fea` and `/core` subpaths.
14
+ - The quick-start example on the docs landing page used `fc` instead of `fc_`.
15
+
16
+ ### Documentation
17
+
18
+ - README: added a quick-start example, the `core` and `utils` exports, error codes, release steps and the license.
19
+
20
+ ## [2.1.0] — 2026-10-23
21
+
22
+ ### Added
23
+
24
+ - **Trapezoidal member load** (`type: "trapezoidal"`): a load varying linearly from `w1` at `start` to `w2` at `end`. Member diagrams stay exact for it.
25
+ - **Torque member load** (`type: "torque"`): a uniform torque per unit length about the member's local 1 axis.
26
+ - **Null areas** (`model.areas`) and **area loads** (`model.areaLoads`, kN/m²): 3- or 4-node areas that add no stiffness and pass their loads to the edge members, distributed `"twoWay"`, `"oneWay"` or `"cantilever"`.
27
+ - `distributeAreaLoads(model)` returns the member loads generated from the areas, for checking or previewing (from `/fea`).
28
+ - `FrameAnalysisError` codes 315 (area geometry), 316 (an area edge without members) and 317 (supports that do not fit the distribution).
29
+
30
+ ### Changed
31
+
32
+ - Package description and README now present the library as a headless analysis engine for front-end applications.
33
+
34
+ ## [2.0.1] — 2026-10-11
35
+
36
+ Maintenance release with no changes to the library code.
37
+
38
+ ## [2.0.0] — 2026-10-11
39
+
40
+ ### Breaking changes
41
+
42
+ - `FrameModel` now requires `loadCases`. Loads move to the top-level lists `nodalLoads` and `memberLoads`, and every load names its `loadCase`.
43
+ - `analyzeFrame` returns `{ cases, combinations, envelope, … }` keyed by id, instead of a single result.
44
+
45
+ ### Added
46
+
47
+ - **3D frame analysis** (`/fea` subpath) by the direct stiffness method: uniform and point member loads in local or global directions, end releases, fixed and spring supports, ETABS-style local axes.
48
+ - **Load cases and combinations**: a self-weight multiplier per load case, combinations by superposition (including nested combinations), and an `envelope` reporting the governing combination.
49
+ - Member diagrams of forces (`N`, `V2`, `V3`, `T`, `M2`, `M3`) and deflections (`u1`–`u3` local, `ux`–`uz` global) along every member.
50
+ - `createFrameAnalysis` to compute member diagrams on demand, and `options.diagrams: "extremes"` for smaller results.
51
+ - `validateFrameModel` reports every problem in a model, with `details` locating it. `FrameAnalysisError` codes 301–314.
52
+ - `memberDemandEnvelope` turns analysis results into `MuPositive`, `MuNegative`, `Vu` and `Nu` for the RC capacity functions.
53
+ - `rectBeamToSectionProperties` (in `/rc`) converts an RC section into frame section properties, with the ACI 318-19 6.6.3.1.1 inertia modifiers and a unit weight for self-weight.
54
+ - `beam3dLocalStiffness`, `beam3dLocalStiffnessRightHanded` and `memberAxes`.
55
+ - Matrix and skyline solver helpers in `/utils`. Large models solve much faster (an 847-node model in about 1.5 s instead of 16.6 s).
56
+ - ES-module build in `dist/esm/` alongside CommonJS, with `"sideEffects": false` so bundlers can drop unused code.
57
+
58
+ ## [1.5.0] — 2026-08-17
59
+
60
+ ### Added
61
+
62
+ - **Side plate shear strengthening**, with two models because ACI 318-19 has no provisions for steel side plates:
63
+ - `sidePlateShearCapacityByWebYielding` (plate as a supplementary web, AISC 360 G2.1)
64
+ - `sidePlateShearCapacityByTensionTie` (plate as a tie across the crack, ACI 440.2R-17 §11.4 with steel in place of FRP)
65
+ - `compareSidePlateShearCapacity` runs both and reports the lower as governing.
66
+ - `hasSidePlate` type guard.
67
+ - `RCDesignError` codes 205 (inconsistent side plate geometry) and 206 (no shear headroom left for strengthening).
68
+
69
+ ## [1.4.0] — 2026-08-14
70
+
71
+ ### Changed
72
+
73
+ - Doubly reinforced sections are solved by strain compatibility. Compression steel below the neutral axis no longer throws: it is treated as tension steel and reported with a warning citing ACI 318-19 22.2.1.2.
74
+ - Steel plate jacketing measures every depth from the extreme compression fibre. A top plate now turns a singly reinforced section into a doubly reinforced one.
75
+ - `calculationDetails` reports `c`, `a`, `beta1`, `d`, `As` and `ro` for every section. `ro_` uses the same `b·d` basis as `ro`.
76
+ - `rectBeamBarLayout` takes `topBars` as optional.
77
+
78
+ ### Deprecated
79
+
80
+ - `RCDesignError` code 101 (`COMP_STEEL_DISTANCE_OVER_AC`) is no longer thrown. It will be removed in the next major release.
81
+
82
+ ## [1.3.0] — 2026-08-14
83
+
84
+ ### Added
85
+
86
+ - API reference site, published on GitHub Pages: <https://theerapat-s28.github.io/ts-structural-eng/>.
87
+ - `homepage`, `repository` and `bugs` links in the package metadata.
88
+
89
+ ## [1.2.0] — 2026-08-13
90
+
91
+ ### Added
92
+
93
+ - **Plate-to-concrete interface bolts** for steel plate jacketing:
94
+ - `plateInterfaceShearFlow` (shear flow `q = V·Q/I`, cracked or uncracked section)
95
+ - `boltShearCapacity` (ACI 318-19 17.7.1.2b)
96
+ - `plateInterfaceBoltRequirement` (required bolt pitch and count).
97
+ - Top and bottom jacketing plates are each optional, with the `hasTopPlate` and `hasBottomPlate` type guards.
98
+ - `RCDesignError` codes 201–204 for strengthening.
99
+
100
+ ### Fixed
101
+
102
+ - The RC shear functions are now exported from the package root, not only from `/rc`.
103
+
104
+ ## [1.1.0] — 2026-07-19
105
+
106
+ ### Added
107
+
108
+ - RC shear design per ACI 318-19: `concreteShearCapacity`, `stirrupShearCapacity` and `checkStirrupRequirement`, with `RCDesignError` code 105.
109
+ - `rectBeamBarLayout`: arranges bar groups into layers that meet the ACI 318-19 spacing rules and returns `d` and `d_`.
110
+
111
+ ## [1.0.1] — 2026-07-19
112
+
113
+ ### Fixed
114
+
115
+ - npm packaging: scoped package name `@theerapat-s28/ts-structural-eng-tools`, a build output that matches the `exports` map, and path aliases rewritten in the published JavaScript.
116
+
117
+ ## 1.0.0
118
+
119
+ First version, under the unscoped name `ts-structural-eng-tools`: `rectBeamMomentCapacity` (singly and doubly reinforced rectangular beams per ACI 318-19), steel plate jacketing, and concrete property helpers.
120
+
121
+ [Unreleased]: https://github.com/theerapat-s28/ts-structural-eng/compare/v2.1.1...HEAD
122
+ [2.1.1]: https://github.com/theerapat-s28/ts-structural-eng/compare/v2.1.0...v2.1.1
123
+ [2.1.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v2.0.1...v2.1.0
124
+ [2.0.1]: https://github.com/theerapat-s28/ts-structural-eng/compare/v2.0.0...v2.0.1
125
+ [2.0.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v1.5.0...v2.0.0
126
+ [1.5.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v1.4.0...v1.5.0
127
+ [1.4.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v1.3.0...v1.4.0
128
+ [1.3.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v1.2.0...v1.3.0
129
+ [1.2.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v1.1.0...v1.2.0
130
+ [1.1.0]: https://github.com/theerapat-s28/ts-structural-eng/compare/v1.0.1...v1.1.0
131
+ [1.0.1]: https://github.com/theerapat-s28/ts-structural-eng/releases/tag/v1.0.1
package/README.md CHANGED
@@ -59,6 +59,58 @@ Or install this repository's dependencies to work on the library itself:
59
59
  pnpm install
60
60
  ```
61
61
 
62
+ ## Quick start
63
+
64
+ Analyse a simply supported RC beam under self-weight and live load, envelope the design demands, and check them against the section's flexural capacity:
65
+
66
+ ```ts
67
+ import { analyzeFrame, memberDemandEnvelope } from "@theerapat-s28/ts-structural-eng-tools/fea";
68
+ import type { FrameModel } from "@theerapat-s28/ts-structural-eng-tools/fea";
69
+ import {
70
+ rectBeamMomentCapacity,
71
+ rectBeamToSectionProperties,
72
+ } from "@theerapat-s28/ts-structural-eng-tools/rc";
73
+
74
+ // 300×600 beam, f'c 28 MPa, fy 420 MPa, As 1800 mm²
75
+ const beam = { Es: 200_000, fc_: 28, fy: 420, As: 1800, b: 300, h: 600, d: 540 };
76
+ const { sectionProperties } = rectBeamToSectionProperties(beam, { member: "beam" });
77
+
78
+ const model: FrameModel = {
79
+ nodes: [
80
+ { id: "A", x: 0, y: 0, z: 0 },
81
+ { id: "B", x: 6000, y: 0, z: 0 }, // mm
82
+ ],
83
+ members: [{ id: "AB", startNodeId: "A", endNodeId: "B", section: sectionProperties }],
84
+ restraints: [
85
+ { nodeId: "A", ux: true, uy: true, uz: true, rx: true },
86
+ { nodeId: "B", uy: true, uz: true },
87
+ ],
88
+ loadCases: [
89
+ { id: "D", type: "dead", selfWeight: 1 },
90
+ { id: "L", type: "live" },
91
+ ],
92
+ memberLoads: [{ loadCase: "L", type: "udl", memberId: "AB", direction: "Z", w: -15 }], // kN/m
93
+ combinations: [
94
+ {
95
+ id: "1.2D+1.6L",
96
+ terms: [
97
+ { case: "D", factor: 1.2 },
98
+ { case: "L", factor: 1.6 },
99
+ ],
100
+ },
101
+ ],
102
+ };
103
+
104
+ const result = analyzeFrame(model);
105
+ const demand = memberDemandEnvelope(result, "AB");
106
+ // demand.MuPositive → 131.328 (kN·m), demand.Vu → 87.552 (kN), governed by "1.2D+1.6L"
107
+
108
+ const { phiMn, warnings } = rectBeamMomentCapacity(beam);
109
+ // phiMn → 331.39 (kN·m), warnings → []
110
+ ```
111
+
112
+ Each module is also its own subpath export (`/fea`, `/rc`, `/strengthening`, `/core`, `/utils`), so a front end can import only what it uses. The package root re-exports the most-used functions and types from every module.
113
+
62
114
  ## Scripts
63
115
 
64
116
  | Command | Description |
@@ -80,6 +132,7 @@ src/
80
132
  ├── rc/ # Reinforced concrete design
81
133
  │ ├── index.ts # Module exports
82
134
  │ ├── general.ts # Concrete properties (beta1, Ec, unit conversion)
135
+ │ ├── rc-bar-layout.ts # Bar groups → layers satisfying ACI spacing, giving d and d'
83
136
  │ ├── rc-beam-design.ts # Beam moment capacity (singly/doubly reinforced) and shear capacity (Vc, Vs, stirrup requirement)
84
137
  │ └── rc-section-properties.ts # Section properties (E, G, A, I22, I33, J) for frame analysis
85
138
  ├── strengthening/ # Strengthening methods
@@ -101,8 +154,8 @@ src/
101
154
  ├── core/ # Shared infrastructure
102
155
  │ ├── index.ts
103
156
  │ ├── constants/ # RC design constants (ACI 318) and frame-analysis tolerances
104
- │ ├── errors/ # Custom error classes
105
- │ └── types/ # Shared type definitions
157
+ │ ├── errors/ # RCDesignError and FrameAnalysisError with their coded entries
158
+ │ └── types/ # Shared types: RC sections, plate jacketing, section properties, warnings, units
106
159
  └── utils/ # Helper utilities
107
160
  ├── index.ts
108
161
  ├── math.ts # Quadratic solver, rounding
@@ -122,6 +175,10 @@ html-docs/ # HTML API reference, deployed to GitHub Pages
122
175
  ├── rc/index.html
123
176
  ├── strengthening/index.html
124
177
  └── fea/index.html
178
+ html-implementation-plans/ # Planning notes for upcoming features (not published)
179
+ └── fea-future-features.html
180
+ .agents/skills/update-version/ # AI agent skill: bump the version and roll the changelog
181
+ .claude/skills/npm-publish/ # AI agent skill: release checklist for publishing to npm
125
182
  ```
126
183
 
127
184
  ## TypeScript path aliases
@@ -183,23 +240,46 @@ Linear-elastic 3D frame analysis by the direct stiffness method, imported from `
183
240
  - **`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.
184
241
  - **`memberAxes(start, end, angle?)`** — The ETABS-style local axes of a member as a direction-cosine matrix.
185
242
 
186
- ### General Utilities
243
+ ### Concrete properties (from `rc`)
187
244
 
188
245
  - **`concreteBeta(fc_)`** — ACI 318 β₁ factor
189
246
  - **`concreteElasticModulus(fc_)`** — Ec = 4700√f'c (MPa)
190
247
  - **`psiToMpa(psi)`** — Unit conversion
191
248
 
249
+ ### Errors and warnings (from `core`)
250
+
251
+ A design that is valid but breaks a code provision returns normally with an entry in `warnings`, citing the clause (e.g. `"ACI318-19, 9.6.1.2"`). A calculation whose assumptions break down throws instead, never returning a silently wrong result:
252
+
253
+ - **`RCDesignError`** — `code` and `message` from `Errors`: 1XX for RC beam design (e.g. 102, tensile steel not yielding; 105, `Vs` above the 22.5.1.2 limit), 2XX for strengthening and plate connections (201–206).
254
+ - **`FrameAnalysisError`** — `code` from `FrameErrors` (301–317), `details` locating the problem, and `issues` listing every problem `validateFrameModel` found.
255
+
256
+ `core` also exports the shared input types, the type guards `isSinglyReinforced`, `hasTopPlate`, `hasBottomPlate` and `hasSidePlate`, and the engineering constants (φ factors, ultimate concrete strain, inertia modifiers, frame-analysis tolerances).
257
+
258
+ ### Utilities (from `utils`)
259
+
260
+ Low-level helpers the engine is built on, exported for reuse: `solveQuadratic`, `roundToDecimalPlaces`, `mergeWarnings`, dense matrix helpers (`zeros`, `identity`, `transpose`, `matMul`, `matVec`), Cholesky and general linear solvers (`choleskyFactor`, `choleskySolveFactored`, `choleskySolve`, `solveLinearSystem`), and the skyline solver (`createSkyline`, `skylineAdd`, `skylineGet`, `skylineSize`, `skylineFactor`, `skylineSolve`, `reverseCuthillMcKee`).
261
+
192
262
  ## Build
193
263
 
194
264
  ```bash
195
265
  pnpm run build
196
- node dist/index.js
197
266
  ```
198
267
 
199
- 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.
268
+ 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. `pnpm run dev` runs [`examples/basic-usage.ts`](examples/basic-usage.ts) against the sources without building.
200
269
 
201
270
  ## Tests
202
271
 
203
272
  ```bash
204
- pnpm run test
273
+ pnpm run test # all tests
274
+ pnpm vitest run tests/rc/rc-beam-design.test.ts # one file
205
275
  ```
276
+
277
+ Tests live in `tests/`, mirroring `src/`, and check results against hand-calculated or textbook values.
278
+
279
+ ## Releasing
280
+
281
+ Releases follow semantic versioning and are published to npm with tags `vX.Y.Z`. What changed in each version is in [CHANGELOG.md](CHANGELOG.md). Preparing a version (changelog, version number, checks) is described in [`.agents/skills/update-version/SKILL.md`](.agents/skills/update-version/SKILL.md), and publishing (release commit and tag, dry run, publish, push tags) in [`.claude/skills/npm-publish/SKILL.md`](.claude/skills/npm-publish/SKILL.md).
282
+
283
+ ## License
284
+
285
+ [ISC](LICENSE)
package/dist/esm/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  // RC Beam Design
2
2
  export { rectBeamMomentCapacity, rectBeamBarLayout, concreteShearCapacity, stirrupShearCapacity, checkStirrupRequirement, concreteBeta, concreteElasticModulus, psiToMpa, rectBeamToSectionProperties, } from "./rc/index.js";
3
3
  // FEA — frame analysis
4
- export { analyzeFrame, createFrameAnalysis, validateFrameModel, beam3dLocalStiffness, beam3dLocalStiffnessRightHanded, memberAxes, memberDemandEnvelope, } from "./fea/index.js";
4
+ export { analyzeFrame, createFrameAnalysis, validateFrameModel, distributeAreaLoads, beam3dLocalStiffness, beam3dLocalStiffnessRightHanded, memberAxes, memberDemandEnvelope, } from "./fea/index.js";
5
5
  // Strengthening
6
6
  export { calculateSteelJacketedBeamMomentCapacity, plateInterfaceShearFlow, boltShearCapacity, plateInterfaceBoltRequirement, sidePlateShearCapacityByWebYielding, sidePlateShearCapacityByTensionTie, compareSidePlateShearCapacity, } from "./strengthening/index.js";
7
- export { isSinglyReinforced, hasTopPlate, hasBottomPlate, hasSidePlate, 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, CONCRETE_POISSON_RATIO, CONCRETE_UNIT_WEIGHT, BEAM_INERTIA_MODIFIER, COLUMN_INERTIA_MODIFIER, VERTICAL_MEMBER_TOLERANCE, SINGULARITY_TOLERANCE, EQUILIBRIUM_TOLERANCE, RCDesignError, Errors, FrameAnalysisError, FrameErrors, } from "./core/index.js";
7
+ export { isSinglyReinforced, hasTopPlate, hasBottomPlate, hasSidePlate, 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, CONCRETE_POISSON_RATIO, CONCRETE_UNIT_WEIGHT, BEAM_INERTIA_MODIFIER, COLUMN_INERTIA_MODIFIER, VERTICAL_MEMBER_TOLERANCE, SINGULARITY_TOLERANCE, EQUILIBRIUM_TOLERANCE, AREA_GEOMETRY_TOLERANCE, RCDesignError, Errors, FrameAnalysisError, FrameErrors, } from "./core/index.js";
8
8
  // Utilities
9
9
  export { solveQuadratic, roundToDecimalPlaces, mergeWarnings, zeros, identity, transpose, matMul, matVec, choleskyFactor, choleskySolveFactored, choleskySolve, solveLinearSystem, createSkyline, skylineAdd, skylineGet, skylineSize, skylineFactor, skylineSolve, reverseCuthillMcKee, } from "./utils/index.js";
10
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,YAAY,EACZ,sBAAsB,EACtB,QAAQ,EACR,2BAA2B,GAC5B,MAAM,MAAM,CAAC;AAGd,uBAAuB;AACvB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,+BAA+B,EAC/B,UAAU,EACV,oBAAoB,GACrB,MAAM,OAAO,CAAC;AAsCf,gBAAgB;AAChB,OAAO,EACL,wCAAwC,EACxC,uBAAuB,EACvB,iBAAiB,EACjB,6BAA6B,EAC7B,mCAAmC,EACnC,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AA4BzB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kCAAkC,EAClC,wBAAwB,EACxB,+BAA+B,EAC/B,sCAAsC,EACtC,sBAAsB,EACtB,6BAA6B,EAC7B,iCAAiC,EACjC,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,YAAY;AACZ,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,KAAK,EACL,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iBAAiB;AACjB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,YAAY,EACZ,sBAAsB,EACtB,QAAQ,EACR,2BAA2B,GAC5B,MAAM,MAAM,CAAC;AAGd,uBAAuB;AACvB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,EAC/B,UAAU,EACV,oBAAoB,GACrB,MAAM,OAAO,CAAC;AA4Cf,gBAAgB;AAChB,OAAO,EACL,wCAAwC,EACxC,uBAAuB,EACvB,iBAAiB,EACjB,6BAA6B,EAC7B,mCAAmC,EACnC,kCAAkC,EAClC,6BAA6B,GAC9B,MAAM,iBAAiB,CAAC;AA4BzB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,kCAAkC,EAClC,wBAAwB,EACxB,+BAA+B,EAC/B,sCAAsC,EACtC,sBAAsB,EACtB,6BAA6B,EAC7B,iCAAiC,EACjC,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EACvB,aAAa,EACb,MAAM,EACN,kBAAkB,EAClB,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,YAAY;AACZ,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,KAAK,EACL,QAAQ,EACR,SAAS,EACT,MAAM,EACN,MAAM,EACN,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export { rectBeamMomentCapacity, rectBeamBarLayout, concreteShearCapacity, stirrupShearCapacity, checkStirrupRequirement, concreteBeta, concreteElasticModulus, psiToMpa, rectBeamToSectionProperties, } from "./rc";
2
2
  export type { SectionPropertiesOptions } from "./rc";
3
- export { analyzeFrame, createFrameAnalysis, validateFrameModel, beam3dLocalStiffness, beam3dLocalStiffnessRightHanded, memberAxes, memberDemandEnvelope, } from "./fea";
4
- export type { AnalyzeFrameOptions, FrameAnalysis, FrameId, FrameNode, DofRestraint, Restraint, MemberEndRelease, Member, NodalLoad, LoadDirection, UniformMemberLoad, PointMemberLoad, MemberLoad, LoadCaseType, LoadCase, CombinationTerm, LoadCombination, FrameModel, NodalDisplacement, NodalReaction, MemberEndForce, MemberEndForces, MemberStation, StationComponent, ExtremeValue, MemberDiagram, GoverningValue, GoverningExtremeValue, Bound, FrameCaseResult, FrameEnvelope, FrameResult, MemberDemandEnvelope, DemandEnvelopeOptions, } from "./fea";
3
+ export { analyzeFrame, createFrameAnalysis, validateFrameModel, distributeAreaLoads, beam3dLocalStiffness, beam3dLocalStiffnessRightHanded, memberAxes, memberDemandEnvelope, } from "./fea";
4
+ export type { AnalyzeFrameOptions, FrameAnalysis, FrameId, FrameNode, DofRestraint, Restraint, MemberEndRelease, Member, NodalLoad, LoadDirection, UniformMemberLoad, PointMemberLoad, TrapezoidalMemberLoad, TorqueMemberLoad, MemberLoad, AreaDistribution, NullArea, AreaLoadDirection, AreaLoad, LoadCaseType, LoadCase, CombinationTerm, LoadCombination, FrameModel, NodalDisplacement, NodalReaction, MemberEndForce, MemberEndForces, MemberStation, StationComponent, ExtremeValue, MemberDiagram, GoverningValue, GoverningExtremeValue, Bound, FrameCaseResult, FrameEnvelope, FrameResult, MemberDemandEnvelope, DemandEnvelopeOptions, } from "./fea";
5
5
  export { calculateSteelJacketedBeamMomentCapacity, plateInterfaceShearFlow, boltShearCapacity, plateInterfaceBoltRequirement, sidePlateShearCapacityByWebYielding, sidePlateShearCapacityByTensionTie, compareSidePlateShearCapacity, } from "./strengthening";
6
6
  export type { RectBeamSection, RectSinglyBeamSection, RectDoublyBeamSection, RectShearSection, StirrupShearSection, ShearReinforcementCheckInput, RebarGroupInput, RectBeamBarLayoutInput, SteelJacketedProps, SectionState, PlateShearFlowInput, BoltProps, PlateInterfaceBoltInput, SidePlateConfiguration, SidePlateAnchorage, SidePlateShearProps, SectionProperties, FrameErrorDetails, FrameModelIssue, Warnings, calculationResult, unit, } from "./core";
7
- export { isSinglyReinforced, hasTopPlate, hasBottomPlate, hasSidePlate, 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, CONCRETE_POISSON_RATIO, CONCRETE_UNIT_WEIGHT, BEAM_INERTIA_MODIFIER, COLUMN_INERTIA_MODIFIER, VERTICAL_MEMBER_TOLERANCE, SINGULARITY_TOLERANCE, EQUILIBRIUM_TOLERANCE, RCDesignError, Errors, FrameAnalysisError, FrameErrors, } from "./core";
7
+ export { isSinglyReinforced, hasTopPlate, hasBottomPlate, hasSidePlate, 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, CONCRETE_POISSON_RATIO, CONCRETE_UNIT_WEIGHT, BEAM_INERTIA_MODIFIER, COLUMN_INERTIA_MODIFIER, VERTICAL_MEMBER_TOLERANCE, SINGULARITY_TOLERANCE, EQUILIBRIUM_TOLERANCE, AREA_GEOMETRY_TOLERANCE, RCDesignError, Errors, FrameAnalysisError, FrameErrors, } from "./core";
8
8
  export { solveQuadratic, roundToDecimalPlaces, mergeWarnings, zeros, identity, transpose, matMul, matVec, choleskyFactor, choleskySolveFactored, choleskySolve, solveLinearSystem, createSkyline, skylineAdd, skylineGet, skylineSize, skylineFactor, skylineSolve, reverseCuthillMcKee, } from "./utils";
9
9
  export type { Matrix, SkylineMatrix } from "./utils";
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.zeros = exports.mergeWarnings = exports.roundToDecimalPlaces = exports.solveQuadratic = 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 = exports.compareSidePlateShearCapacity = exports.sidePlateShearCapacityByTensionTie = exports.sidePlateShearCapacityByWebYielding = exports.plateInterfaceBoltRequirement = exports.boltShearCapacity = exports.plateInterfaceShearFlow = exports.calculateSteelJacketedBeamMomentCapacity = exports.memberDemandEnvelope = exports.memberAxes = exports.beam3dLocalStiffnessRightHanded = exports.beam3dLocalStiffness = exports.validateFrameModel = exports.createFrameAnalysis = exports.analyzeFrame = exports.rectBeamToSectionProperties = exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.checkStirrupRequirement = exports.stirrupShearCapacity = exports.concreteShearCapacity = exports.rectBeamBarLayout = exports.rectBeamMomentCapacity = void 0;
4
- exports.reverseCuthillMcKee = exports.skylineSolve = exports.skylineFactor = exports.skylineSize = exports.skylineGet = exports.skylineAdd = exports.createSkyline = exports.solveLinearSystem = exports.choleskySolve = exports.choleskySolveFactored = exports.choleskyFactor = exports.matVec = exports.matMul = exports.transpose = exports.identity = void 0;
3
+ exports.roundToDecimalPlaces = exports.solveQuadratic = exports.FrameErrors = exports.FrameAnalysisError = exports.Errors = exports.RCDesignError = exports.AREA_GEOMETRY_TOLERANCE = 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 = exports.compareSidePlateShearCapacity = exports.sidePlateShearCapacityByTensionTie = exports.sidePlateShearCapacityByWebYielding = exports.plateInterfaceBoltRequirement = exports.boltShearCapacity = exports.plateInterfaceShearFlow = exports.calculateSteelJacketedBeamMomentCapacity = exports.memberDemandEnvelope = exports.memberAxes = exports.beam3dLocalStiffnessRightHanded = exports.beam3dLocalStiffness = exports.distributeAreaLoads = exports.validateFrameModel = exports.createFrameAnalysis = exports.analyzeFrame = exports.rectBeamToSectionProperties = exports.psiToMpa = exports.concreteElasticModulus = exports.concreteBeta = exports.checkStirrupRequirement = exports.stirrupShearCapacity = exports.concreteShearCapacity = exports.rectBeamBarLayout = exports.rectBeamMomentCapacity = void 0;
4
+ exports.reverseCuthillMcKee = exports.skylineSolve = exports.skylineFactor = exports.skylineSize = exports.skylineGet = exports.skylineAdd = exports.createSkyline = exports.solveLinearSystem = exports.choleskySolve = exports.choleskySolveFactored = exports.choleskyFactor = exports.matVec = exports.matMul = exports.transpose = exports.identity = exports.zeros = exports.mergeWarnings = void 0;
5
5
  // RC Beam Design
6
6
  var rc_1 = require("./rc");
7
7
  Object.defineProperty(exports, "rectBeamMomentCapacity", { enumerable: true, get: function () { return rc_1.rectBeamMomentCapacity; } });
@@ -18,6 +18,7 @@ var fea_1 = require("./fea");
18
18
  Object.defineProperty(exports, "analyzeFrame", { enumerable: true, get: function () { return fea_1.analyzeFrame; } });
19
19
  Object.defineProperty(exports, "createFrameAnalysis", { enumerable: true, get: function () { return fea_1.createFrameAnalysis; } });
20
20
  Object.defineProperty(exports, "validateFrameModel", { enumerable: true, get: function () { return fea_1.validateFrameModel; } });
21
+ Object.defineProperty(exports, "distributeAreaLoads", { enumerable: true, get: function () { return fea_1.distributeAreaLoads; } });
21
22
  Object.defineProperty(exports, "beam3dLocalStiffness", { enumerable: true, get: function () { return fea_1.beam3dLocalStiffness; } });
22
23
  Object.defineProperty(exports, "beam3dLocalStiffnessRightHanded", { enumerable: true, get: function () { return fea_1.beam3dLocalStiffnessRightHanded; } });
23
24
  Object.defineProperty(exports, "memberAxes", { enumerable: true, get: function () { return fea_1.memberAxes; } });
@@ -51,6 +52,7 @@ Object.defineProperty(exports, "COLUMN_INERTIA_MODIFIER", { enumerable: true, ge
51
52
  Object.defineProperty(exports, "VERTICAL_MEMBER_TOLERANCE", { enumerable: true, get: function () { return core_1.VERTICAL_MEMBER_TOLERANCE; } });
52
53
  Object.defineProperty(exports, "SINGULARITY_TOLERANCE", { enumerable: true, get: function () { return core_1.SINGULARITY_TOLERANCE; } });
53
54
  Object.defineProperty(exports, "EQUILIBRIUM_TOLERANCE", { enumerable: true, get: function () { return core_1.EQUILIBRIUM_TOLERANCE; } });
55
+ Object.defineProperty(exports, "AREA_GEOMETRY_TOLERANCE", { enumerable: true, get: function () { return core_1.AREA_GEOMETRY_TOLERANCE; } });
54
56
  Object.defineProperty(exports, "RCDesignError", { enumerable: true, get: function () { return core_1.RCDesignError; } });
55
57
  Object.defineProperty(exports, "Errors", { enumerable: true, get: function () { return core_1.Errors; } });
56
58
  Object.defineProperty(exports, "FrameAnalysisError", { enumerable: true, get: function () { return core_1.FrameAnalysisError; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,iBAAiB;AACjB,2BAUc;AATZ,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;AACR,iHAAA,2BAA2B,OAAA;AAI7B,uBAAuB;AACvB,6BAQe;AAPb,mGAAA,YAAY,OAAA;AACZ,0GAAA,mBAAmB,OAAA;AACnB,yGAAA,kBAAkB,OAAA;AAClB,2GAAA,oBAAoB,OAAA;AACpB,sHAAA,+BAA+B,OAAA;AAC/B,iGAAA,UAAU,OAAA;AACV,2GAAA,oBAAoB,OAAA;AAuCtB,gBAAgB;AAChB,iDAQyB;AAPvB,yIAAA,wCAAwC,OAAA;AACxC,wHAAA,uBAAuB,OAAA;AACvB,kHAAA,iBAAiB,OAAA;AACjB,8HAAA,6BAA6B,OAAA;AAC7B,oIAAA,mCAAmC,OAAA;AACnC,mIAAA,kCAAkC,OAAA;AAClC,8HAAA,6BAA6B,OAAA;AA6B/B,+BAwBgB;AAvBd,0GAAA,kBAAkB,OAAA;AAClB,mGAAA,WAAW,OAAA;AACX,sGAAA,cAAc,OAAA;AACd,oGAAA,YAAY,OAAA;AACZ,0HAAA,kCAAkC,OAAA;AAClC,gHAAA,wBAAwB,OAAA;AACxB,uHAAA,+BAA+B,OAAA;AAC/B,8HAAA,sCAAsC,OAAA;AACtC,8GAAA,sBAAsB,OAAA;AACtB,qHAAA,6BAA6B,OAAA;AAC7B,yHAAA,iCAAiC,OAAA;AACjC,uHAAA,+BAA+B,OAAA;AAC/B,8GAAA,sBAAsB,OAAA;AACtB,4GAAA,oBAAoB,OAAA;AACpB,6GAAA,qBAAqB,OAAA;AACrB,+GAAA,uBAAuB,OAAA;AACvB,iHAAA,yBAAyB,OAAA;AACzB,6GAAA,qBAAqB,OAAA;AACrB,6GAAA,qBAAqB,OAAA;AACrB,qGAAA,aAAa,OAAA;AACb,8FAAA,MAAM,OAAA;AACN,0GAAA,kBAAkB,OAAA;AAClB,mGAAA,WAAW,OAAA;AAGb,YAAY;AACZ,iCAoBiB;AAnBf,uGAAA,cAAc,OAAA;AACd,6GAAA,oBAAoB,OAAA;AACpB,sGAAA,aAAa,OAAA;AACb,8FAAA,KAAK,OAAA;AACL,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AACT,+FAAA,MAAM,OAAA;AACN,+FAAA,MAAM,OAAA;AACN,uGAAA,cAAc,OAAA;AACd,8GAAA,qBAAqB,OAAA;AACrB,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,sGAAA,aAAa,OAAA;AACb,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,oGAAA,WAAW,OAAA;AACX,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,4GAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;AAAA,iBAAiB;AACjB,2BAUc;AATZ,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;AACR,iHAAA,2BAA2B,OAAA;AAI7B,uBAAuB;AACvB,6BASe;AARb,mGAAA,YAAY,OAAA;AACZ,0GAAA,mBAAmB,OAAA;AACnB,yGAAA,kBAAkB,OAAA;AAClB,0GAAA,mBAAmB,OAAA;AACnB,2GAAA,oBAAoB,OAAA;AACpB,sHAAA,+BAA+B,OAAA;AAC/B,iGAAA,UAAU,OAAA;AACV,2GAAA,oBAAoB,OAAA;AA6CtB,gBAAgB;AAChB,iDAQyB;AAPvB,yIAAA,wCAAwC,OAAA;AACxC,wHAAA,uBAAuB,OAAA;AACvB,kHAAA,iBAAiB,OAAA;AACjB,8HAAA,6BAA6B,OAAA;AAC7B,oIAAA,mCAAmC,OAAA;AACnC,mIAAA,kCAAkC,OAAA;AAClC,8HAAA,6BAA6B,OAAA;AA6B/B,+BAyBgB;AAxBd,0GAAA,kBAAkB,OAAA;AAClB,mGAAA,WAAW,OAAA;AACX,sGAAA,cAAc,OAAA;AACd,oGAAA,YAAY,OAAA;AACZ,0HAAA,kCAAkC,OAAA;AAClC,gHAAA,wBAAwB,OAAA;AACxB,uHAAA,+BAA+B,OAAA;AAC/B,8HAAA,sCAAsC,OAAA;AACtC,8GAAA,sBAAsB,OAAA;AACtB,qHAAA,6BAA6B,OAAA;AAC7B,yHAAA,iCAAiC,OAAA;AACjC,uHAAA,+BAA+B,OAAA;AAC/B,8GAAA,sBAAsB,OAAA;AACtB,4GAAA,oBAAoB,OAAA;AACpB,6GAAA,qBAAqB,OAAA;AACrB,+GAAA,uBAAuB,OAAA;AACvB,iHAAA,yBAAyB,OAAA;AACzB,6GAAA,qBAAqB,OAAA;AACrB,6GAAA,qBAAqB,OAAA;AACrB,+GAAA,uBAAuB,OAAA;AACvB,qGAAA,aAAa,OAAA;AACb,8FAAA,MAAM,OAAA;AACN,0GAAA,kBAAkB,OAAA;AAClB,mGAAA,WAAW,OAAA;AAGb,YAAY;AACZ,iCAoBiB;AAnBf,uGAAA,cAAc,OAAA;AACd,6GAAA,oBAAoB,OAAA;AACpB,sGAAA,aAAa,OAAA;AACb,8FAAA,KAAK,OAAA;AACL,iGAAA,QAAQ,OAAA;AACR,kGAAA,SAAS,OAAA;AACT,+FAAA,MAAM,OAAA;AACN,+FAAA,MAAM,OAAA;AACN,uGAAA,cAAc,OAAA;AACd,8GAAA,qBAAqB,OAAA;AACrB,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,sGAAA,aAAa,OAAA;AACb,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,oGAAA,WAAW,OAAA;AACX,sGAAA,aAAa,OAAA;AACb,qGAAA,YAAY,OAAA;AACZ,4GAAA,mBAAmB,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theerapat-s28/ts-structural-eng-tools",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "description": "Headless structural analysis and design engine for TypeScript: 3D frame analysis (direct stiffness method), RC beam design per ACI 318-19 and strengthening methods",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -47,6 +47,7 @@
47
47
  "files": [
48
48
  "dist",
49
49
  "README.md",
50
+ "CHANGELOG.md",
50
51
  "LICENSE"
51
52
  ],
52
53
  "keywords": [