@theerapat-s28/ts-structural-eng-tools 1.5.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +34 -3
  2. package/dist/core/constants/frame.constant.d.ts +14 -0
  3. package/dist/core/constants/frame.constant.js +18 -0
  4. package/dist/core/constants/frame.constant.js.map +1 -0
  5. package/dist/core/errors/frame-analysis.error.d.ts +33 -0
  6. package/dist/core/errors/frame-analysis.error.js +74 -0
  7. package/dist/core/errors/frame-analysis.error.js.map +1 -0
  8. package/dist/core/index.d.ts +4 -0
  9. package/dist/core/index.js +12 -1
  10. package/dist/core/index.js.map +1 -1
  11. package/dist/core/types/section-properties.type.d.ts +13 -0
  12. package/dist/core/types/section-properties.type.js +3 -0
  13. package/dist/core/types/section-properties.type.js.map +1 -0
  14. package/dist/esm/core/constants/frame.constant.js +15 -0
  15. package/dist/esm/core/constants/frame.constant.js.map +1 -0
  16. package/dist/esm/core/constants/rc.constant.js +63 -0
  17. package/dist/esm/core/constants/rc.constant.js.map +1 -0
  18. package/dist/esm/core/errors/frame-analysis.error.js +70 -0
  19. package/dist/esm/core/errors/frame-analysis.error.js.map +1 -0
  20. package/dist/esm/core/errors/rc-design.error.js +64 -0
  21. package/dist/esm/core/errors/rc-design.error.js.map +1 -0
  22. package/dist/esm/core/index.js +9 -0
  23. package/dist/esm/core/index.js.map +1 -0
  24. package/dist/esm/core/types/output-message.type.js +2 -0
  25. package/dist/esm/core/types/output-message.type.js.map +1 -0
  26. package/dist/esm/core/types/plate-jacketing.type.js +18 -0
  27. package/dist/esm/core/types/plate-jacketing.type.js.map +1 -0
  28. package/dist/esm/core/types/rc-beam.type.js +11 -0
  29. package/dist/esm/core/types/rc-beam.type.js.map +1 -0
  30. package/dist/esm/core/types/section-properties.type.js +2 -0
  31. package/dist/esm/core/types/section-properties.type.js.map +1 -0
  32. package/dist/esm/core/types/unit.type.js +2 -0
  33. package/dist/esm/core/types/unit.type.js.map +1 -0
  34. package/dist/esm/fea/frame/elements/beam-3d-stiffness.js +84 -0
  35. package/dist/esm/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
  36. package/dist/esm/fea/frame/elements/fixed-end-forces.js +75 -0
  37. package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -0
  38. package/dist/esm/fea/frame/elements/static-condensation.js +55 -0
  39. package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -0
  40. package/dist/esm/fea/frame/index.js +6 -0
  41. package/dist/esm/fea/frame/index.js.map +1 -0
  42. package/dist/esm/fea/frame/post/demand-envelope.js +97 -0
  43. package/dist/esm/fea/frame/post/demand-envelope.js.map +1 -0
  44. package/dist/esm/fea/frame/post/envelope.js +59 -0
  45. package/dist/esm/fea/frame/post/envelope.js.map +1 -0
  46. package/dist/esm/fea/frame/post/member-diagram.js +332 -0
  47. package/dist/esm/fea/frame/post/member-diagram.js.map +1 -0
  48. package/dist/esm/fea/frame/post/present-state.js +106 -0
  49. package/dist/esm/fea/frame/post/present-state.js.map +1 -0
  50. package/dist/esm/fea/frame/solver/analyze-frame.js +123 -0
  51. package/dist/esm/fea/frame/solver/analyze-frame.js.map +1 -0
  52. package/dist/esm/fea/frame/solver/boundary-conditions.js +33 -0
  53. package/dist/esm/fea/frame/solver/boundary-conditions.js.map +1 -0
  54. package/dist/esm/fea/frame/solver/combinations.js +69 -0
  55. package/dist/esm/fea/frame/solver/combinations.js.map +1 -0
  56. package/dist/esm/fea/frame/solver/frame-system.js +122 -0
  57. package/dist/esm/fea/frame/solver/frame-system.js.map +1 -0
  58. package/dist/esm/fea/frame/solver/global-assembly.js +27 -0
  59. package/dist/esm/fea/frame/solver/global-assembly.js.map +1 -0
  60. package/dist/esm/fea/frame/solver/load-case-solver.js +119 -0
  61. package/dist/esm/fea/frame/solver/load-case-solver.js.map +1 -0
  62. package/dist/esm/fea/frame/transformation/coordinate-transform.js +71 -0
  63. package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -0
  64. package/dist/esm/fea/frame/types/model.type.js +2 -0
  65. package/dist/esm/fea/frame/types/model.type.js.map +1 -0
  66. package/dist/esm/fea/frame/types/results.type.js +2 -0
  67. package/dist/esm/fea/frame/types/results.type.js.map +1 -0
  68. package/dist/esm/fea/frame/validation/validate-model.js +292 -0
  69. package/dist/esm/fea/frame/validation/validate-model.js.map +1 -0
  70. package/dist/esm/fea/index.js +3 -0
  71. package/dist/esm/fea/index.js.map +1 -0
  72. package/dist/esm/index.js +10 -0
  73. package/dist/esm/index.js.map +1 -0
  74. package/dist/esm/package.json +1 -0
  75. package/dist/esm/rc/general.js +32 -0
  76. package/dist/esm/rc/general.js.map +1 -0
  77. package/dist/esm/rc/index.js +5 -0
  78. package/dist/esm/rc/index.js.map +1 -0
  79. package/dist/esm/rc/rc-bar-layout.js +89 -0
  80. package/dist/esm/rc/rc-bar-layout.js.map +1 -0
  81. package/dist/esm/rc/rc-beam-design.js +320 -0
  82. package/dist/esm/rc/rc-beam-design.js.map +1 -0
  83. package/dist/esm/rc/rc-section-properties.js +55 -0
  84. package/dist/esm/rc/rc-section-properties.js.map +1 -0
  85. package/dist/esm/strengthening/index.js +4 -0
  86. package/dist/esm/strengthening/index.js.map +1 -0
  87. package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js +338 -0
  88. package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js.map +1 -0
  89. package/dist/esm/strengthening/rc-beam-side-plate-shear.js +381 -0
  90. package/dist/esm/strengthening/rc-beam-side-plate-shear.js.map +1 -0
  91. package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js +90 -0
  92. package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js.map +1 -0
  93. package/dist/esm/utils/index.js +5 -0
  94. package/dist/esm/utils/index.js.map +1 -0
  95. package/dist/esm/utils/math.js +30 -0
  96. package/dist/esm/utils/math.js.map +1 -0
  97. package/dist/esm/utils/matrix.js +145 -0
  98. package/dist/esm/utils/matrix.js.map +1 -0
  99. package/dist/esm/utils/merge-warning.js +11 -0
  100. package/dist/esm/utils/merge-warning.js.map +1 -0
  101. package/dist/esm/utils/skyline.js +151 -0
  102. package/dist/esm/utils/skyline.js.map +1 -0
  103. package/dist/fea/frame/elements/beam-3d-stiffness.d.ts +29 -0
  104. package/dist/fea/frame/elements/beam-3d-stiffness.js +90 -0
  105. package/dist/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
  106. package/dist/fea/frame/elements/fixed-end-forces.d.ts +22 -0
  107. package/dist/fea/frame/elements/fixed-end-forces.js +79 -0
  108. package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -0
  109. package/dist/fea/frame/elements/static-condensation.d.ts +19 -0
  110. package/dist/fea/frame/elements/static-condensation.js +59 -0
  111. package/dist/fea/frame/elements/static-condensation.js.map +1 -0
  112. package/dist/fea/frame/index.d.ts +9 -0
  113. package/dist/fea/frame/index.js +16 -0
  114. package/dist/fea/frame/index.js.map +1 -0
  115. package/dist/fea/frame/post/demand-envelope.d.ts +36 -0
  116. package/dist/fea/frame/post/demand-envelope.js +101 -0
  117. package/dist/fea/frame/post/demand-envelope.js.map +1 -0
  118. package/dist/fea/frame/post/envelope.d.ts +8 -0
  119. package/dist/fea/frame/post/envelope.js +63 -0
  120. package/dist/fea/frame/post/envelope.js.map +1 -0
  121. package/dist/fea/frame/post/member-diagram.d.ts +26 -0
  122. package/dist/fea/frame/post/member-diagram.js +336 -0
  123. package/dist/fea/frame/post/member-diagram.js.map +1 -0
  124. package/dist/fea/frame/post/present-state.d.ts +19 -0
  125. package/dist/fea/frame/post/present-state.js +111 -0
  126. package/dist/fea/frame/post/present-state.js.map +1 -0
  127. package/dist/fea/frame/solver/analyze-frame.d.ts +67 -0
  128. package/dist/fea/frame/solver/analyze-frame.js +128 -0
  129. package/dist/fea/frame/solver/analyze-frame.js.map +1 -0
  130. package/dist/fea/frame/solver/boundary-conditions.d.ts +14 -0
  131. package/dist/fea/frame/solver/boundary-conditions.js +37 -0
  132. package/dist/fea/frame/solver/boundary-conditions.js.map +1 -0
  133. package/dist/fea/frame/solver/combinations.d.ts +11 -0
  134. package/dist/fea/frame/solver/combinations.js +73 -0
  135. package/dist/fea/frame/solver/combinations.js.map +1 -0
  136. package/dist/fea/frame/solver/frame-system.d.ts +42 -0
  137. package/dist/fea/frame/solver/frame-system.js +126 -0
  138. package/dist/fea/frame/solver/frame-system.js.map +1 -0
  139. package/dist/fea/frame/solver/global-assembly.d.ts +17 -0
  140. package/dist/fea/frame/solver/global-assembly.js +33 -0
  141. package/dist/fea/frame/solver/global-assembly.js.map +1 -0
  142. package/dist/fea/frame/solver/load-case-solver.d.ts +34 -0
  143. package/dist/fea/frame/solver/load-case-solver.js +124 -0
  144. package/dist/fea/frame/solver/load-case-solver.js.map +1 -0
  145. package/dist/fea/frame/transformation/coordinate-transform.d.ts +21 -0
  146. package/dist/fea/frame/transformation/coordinate-transform.js +76 -0
  147. package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -0
  148. package/dist/fea/frame/types/model.type.d.ts +112 -0
  149. package/dist/fea/frame/types/model.type.js +3 -0
  150. package/dist/fea/frame/types/model.type.js.map +1 -0
  151. package/dist/fea/frame/types/results.type.d.ts +134 -0
  152. package/dist/fea/frame/types/results.type.js +3 -0
  153. package/dist/fea/frame/types/results.type.js.map +1 -0
  154. package/dist/fea/frame/validation/validate-model.d.ts +18 -0
  155. package/dist/fea/frame/validation/validate-model.js +298 -0
  156. package/dist/fea/frame/validation/validate-model.js.map +1 -0
  157. package/dist/fea/index.d.ts +1 -0
  158. package/dist/fea/index.js +19 -0
  159. package/dist/fea/index.js.map +1 -0
  160. package/dist/index.d.ts +8 -4
  161. package/dist/index.js +37 -1
  162. package/dist/index.js.map +1 -1
  163. package/dist/rc/index.d.ts +2 -0
  164. package/dist/rc/index.js +3 -1
  165. package/dist/rc/index.js.map +1 -1
  166. package/dist/rc/rc-section-properties.d.ts +35 -0
  167. package/dist/rc/rc-section-properties.js +59 -0
  168. package/dist/rc/rc-section-properties.js.map +1 -0
  169. package/dist/utils/index.d.ts +4 -0
  170. package/dist/utils/index.js +19 -1
  171. package/dist/utils/index.js.map +1 -1
  172. package/dist/utils/matrix.d.ts +45 -0
  173. package/dist/utils/matrix.js +157 -0
  174. package/dist/utils/matrix.js.map +1 -0
  175. package/dist/utils/skyline.d.ts +49 -0
  176. package/dist/utils/skyline.js +161 -0
  177. package/dist/utils/skyline.js.map +1 -0
  178. package/package.json +20 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-diagram.js","sourceRoot":"","sources":["../../../../src/fea/frame/post/member-diagram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { FrameSystem } from "../solver/frame-system";
2
+ import type { RawState } from "../solver/load-case-solver";
3
+ import type { FrameCaseResult, MemberDiagram } from "../types/results.type";
4
+ /**
5
+ * The presented diagram of member `m` in a raw state.
6
+ *
7
+ * @param stations - Evenly spaced stations
8
+ * @param withStations - false keeps only the extremes (empty `stations`)
9
+ */
10
+ export declare const presentMemberDiagram: (system: FrameSystem, state: RawState, m: number, stations?: number, withStations?: boolean) => MemberDiagram;
11
+ /**
12
+ * Rounds a raw state into the presented result of one load case or combination.
13
+ *
14
+ * @param diagram - Evenly spaced station count, and whether to return stations or only extremes
15
+ */
16
+ export declare const presentState: (system: FrameSystem, state: RawState, meta: Pick<FrameCaseResult, "id" | "kind" | "name" | "type">, diagram?: {
17
+ stations?: number;
18
+ withStations?: boolean;
19
+ }) => FrameCaseResult;
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.presentState = exports.presentMemberDiagram = void 0;
4
+ const frame_constant_1 = require("../../../core/constants/frame.constant");
5
+ const math_1 = require("../../../utils/math");
6
+ const matrix_1 = require("../../../utils/matrix");
7
+ const global_assembly_1 = require("../solver/global-assembly");
8
+ const member_diagram_1 = require("./member-diagram");
9
+ const FORCE_DECIMALS = 4;
10
+ const DISPLACEMENT_DECIMALS = 5;
11
+ const ROTATION_DECIMALS = 8;
12
+ const roundForce = (value, factor) => (0, math_1.roundToDecimalPlaces)(value * factor, FORCE_DECIMALS) + 0; // + 0 turns -0 into 0
13
+ const endForce = (f) => ({
14
+ f1: roundForce(f[0], 1e-3),
15
+ f2: roundForce(f[1], 1e-3),
16
+ f3: roundForce(f[2], 1e-3),
17
+ m1: roundForce(f[3], 1e-6),
18
+ m2: roundForce(f[4], 1e-6),
19
+ m3: roundForce(f[5], 1e-6),
20
+ });
21
+ /** Global force and moment residual of applied loads plus reactions, in kN and kN·m. */
22
+ const equilibrium = (system, state) => {
23
+ const { F, R } = state;
24
+ const total = { fx: 0, fy: 0, fz: 0, mx: 0, my: 0, mz: 0 };
25
+ let loadScale = 0;
26
+ system.nodes.forEach((node, n) => {
27
+ const q = (k) => F[6 * n + k] + R[6 * n + k]; // applied + reaction
28
+ const fx = q(0);
29
+ const fy = q(1);
30
+ const fz = q(2);
31
+ total.fx += fx;
32
+ total.fy += fy;
33
+ total.fz += fz;
34
+ total.mx += q(3) + node.y * fz - node.z * fy;
35
+ total.my += q(4) + node.z * fx - node.x * fz;
36
+ total.mz += q(5) + node.x * fy - node.y * fx;
37
+ loadScale += Math.abs(F[6 * n]) + Math.abs(F[6 * n + 1]) + Math.abs(F[6 * n + 2]);
38
+ });
39
+ const span = Math.max(1, ...system.nodes.map((n) => Math.hypot(n.x, n.y, n.z)));
40
+ const force = Math.hypot(total.fx, total.fy, total.fz); // N
41
+ const moment = Math.hypot(total.mx, total.my, total.mz); // N·mm
42
+ const scale = Math.max(loadScale, 1);
43
+ return {
44
+ force: force * 1e-3,
45
+ moment: moment * 1e-6,
46
+ exceeded: force > frame_constant_1.EQUILIBRIUM_TOLERANCE * scale || moment > frame_constant_1.EQUILIBRIUM_TOLERANCE * scale * span,
47
+ };
48
+ };
49
+ /**
50
+ * The presented diagram of member `m` in a raw state.
51
+ *
52
+ * @param stations - Evenly spaced stations
53
+ * @param withStations - false keeps only the extremes (empty `stations`)
54
+ */
55
+ const presentMemberDiagram = (system, state, m, stations, withStations = true) => {
56
+ const member = system.members[m];
57
+ return (0, member_diagram_1.memberDiagram)(member, state.memberForces[m].slice(0, 6), (0, matrix_1.matVec)(member.T, (0, global_assembly_1.memberDofs)(member).map((d) => state.U[d])), state.memberLoads[m], stations, withStations);
58
+ };
59
+ exports.presentMemberDiagram = presentMemberDiagram;
60
+ /**
61
+ * Rounds a raw state into the presented result of one load case or combination.
62
+ *
63
+ * @param diagram - Evenly spaced station count, and whether to return stations or only extremes
64
+ */
65
+ const presentState = (system, state, meta, diagram = {}) => {
66
+ const { U, R } = state;
67
+ const warnings = [];
68
+ const residual = equilibrium(system, state);
69
+ if (residual.exceeded) {
70
+ warnings.push({
71
+ reference: "Frame analysis, global equilibrium check",
72
+ message: `Global equilibrium residual is ${residual.force.toExponential(2)} kN and ${residual.moment.toExponential(2)} kN·m; the stiffness matrix may be ill-conditioned.`,
73
+ });
74
+ }
75
+ const mm = (v) => (0, math_1.roundToDecimalPlaces)(v, DISPLACEMENT_DECIMALS) + 0;
76
+ const rad = (v) => (0, math_1.roundToDecimalPlaces)(v, ROTATION_DECIMALS) + 0;
77
+ return {
78
+ ...meta,
79
+ nodalDisplacements: system.nodes.map((node, n) => ({
80
+ nodeId: node.id,
81
+ ux: mm(U[6 * n]),
82
+ uy: mm(U[6 * n + 1]),
83
+ uz: mm(U[6 * n + 2]),
84
+ rx: rad(U[6 * n + 3]),
85
+ ry: rad(U[6 * n + 4]),
86
+ rz: rad(U[6 * n + 5]),
87
+ })),
88
+ reactions: system.nodes.map((node, n) => ({
89
+ nodeId: node.id,
90
+ fx: roundForce(R[6 * n], 1e-3),
91
+ fy: roundForce(R[6 * n + 1], 1e-3),
92
+ fz: roundForce(R[6 * n + 2], 1e-3),
93
+ mx: roundForce(R[6 * n + 3], 1e-6),
94
+ my: roundForce(R[6 * n + 4], 1e-6),
95
+ mz: roundForce(R[6 * n + 5], 1e-6),
96
+ })),
97
+ memberEndForces: system.members.map((member, m) => ({
98
+ memberId: member.id,
99
+ start: endForce(state.memberForces[m].slice(0, 6)),
100
+ end: endForce(state.memberForces[m].slice(6, 12)),
101
+ })),
102
+ memberDiagrams: system.members.map((_, m) => (0, exports.presentMemberDiagram)(system, state, m, diagram.stations, diagram.withStations ?? true)),
103
+ equilibriumResidual: {
104
+ force: (0, math_1.roundToDecimalPlaces)(residual.force, 8),
105
+ moment: (0, math_1.roundToDecimalPlaces)(residual.moment, 8),
106
+ },
107
+ warnings,
108
+ };
109
+ };
110
+ exports.presentState = presentState;
111
+ //# sourceMappingURL=present-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"present-state.js","sourceRoot":"","sources":["../../../../src/fea/frame/post/present-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { FrameId, FrameModel } from "../types/model.type";
2
+ import type { FrameResult, MemberDiagram } from "../types/results.type";
3
+ export interface AnalyzeFrameOptions {
4
+ /** Number of evenly spaced stations per member diagram (default 21). */
5
+ stations?: number;
6
+ /**
7
+ * `"full"` (default) returns every member diagram with its `stations`; `"extremes"` keeps
8
+ * each diagram's `extremes` (so the envelope and `memberDemandEnvelope` still work) but leaves
9
+ * `stations` empty, which makes large results far smaller. Full diagrams are then available on
10
+ * demand from `createFrameAnalysis(...).memberDiagram`.
11
+ */
12
+ diagrams?: "full" | "extremes";
13
+ }
14
+ /** An analysed model whose member diagrams can be computed on demand. */
15
+ export interface FrameAnalysis {
16
+ /** The same result `analyzeFrame` returns. */
17
+ result: FrameResult;
18
+ /**
19
+ * The full diagram (stations and extremes) of one member for one load case or combination,
20
+ * computed from the stored solution without re-analysing.
21
+ *
22
+ * @param resultId - Load case or combination id
23
+ * @param memberId - Member id
24
+ * @param stations - Evenly spaced stations (default: the analysis option, else 21)
25
+ * @throws {Error} if either id is not in the model
26
+ */
27
+ memberDiagram: (resultId: string, memberId: FrameId, stations?: number) => MemberDiagram;
28
+ }
29
+ /**
30
+ * Analyses a 3D frame like `analyzeFrame` and keeps the solution, so that full member diagrams
31
+ * can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
32
+ * draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
33
+ *
34
+ * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
35
+ * and combinations
36
+ * @param options - Diagram station count and detail
37
+ * @returns `{ result, memberDiagram }`
38
+ * @throws {FrameAnalysisError} 301–314 for an invalid model (with `details` and every problem in
39
+ * `issues`), 304 for an unstable structure
40
+ */
41
+ export declare const createFrameAnalysis: (model: FrameModel, options?: AnalyzeFrameOptions) => FrameAnalysis;
42
+ /**
43
+ * Analyses a 3D frame by the direct stiffness method (linear elastic, small displacements)
44
+ * for every load case, then forms every load combination by superposition.
45
+ *
46
+ * The model is validated first (`validateFrameModel`). The stiffness matrix is assembled once
47
+ * in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
48
+ * load case is a separate solve. A combination is the factored sum of its load cases (nested
49
+ * combinations are expanded), and its member diagrams are rebuilt from the combined end forces
50
+ * and factored member loads, so their extremes are exact rather than sums of case extremes.
51
+ *
52
+ * Units: node coordinates, section properties and positions in mm and MPa; loads in kN, kN·m
53
+ * and kN/m; springs in kN/mm and kN·m/rad; unit weight in kN/m³. Results are in kN, kN·m, mm
54
+ * and rad. Global axes X, Y, Z are right-handed with Z up; members use ETABS-style local axes
55
+ * 1, 2, 3 (see `memberAxes`). Member end forces and diagrams use right-hand rotations.
56
+ *
57
+ * Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
58
+ *
59
+ * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
60
+ * and combinations
61
+ * @param options - Diagram station count and detail
62
+ * @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
63
+ * `calculationDetails`, `units` and `warnings`
64
+ * @throws {FrameAnalysisError} 301–314 for an invalid model (with `details` and every problem in
65
+ * `issues`), 304 for an unstable structure
66
+ */
67
+ export declare const analyzeFrame: (model: FrameModel, options?: AnalyzeFrameOptions) => FrameResult;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.analyzeFrame = exports.createFrameAnalysis = void 0;
4
+ const envelope_1 = require("../post/envelope");
5
+ const present_state_1 = require("../post/present-state");
6
+ const validate_model_1 = require("../validation/validate-model");
7
+ const combinations_1 = require("./combinations");
8
+ const frame_system_1 = require("./frame-system");
9
+ const load_case_solver_1 = require("./load-case-solver");
10
+ /** Groups loads by their load case id, keeping the input order within each case. */
11
+ const groupByCase = (loads = []) => {
12
+ const groups = new Map();
13
+ for (const load of loads) {
14
+ const group = groups.get(load.loadCase);
15
+ if (group)
16
+ group.push(load);
17
+ else
18
+ groups.set(load.loadCase, [load]);
19
+ }
20
+ return groups;
21
+ };
22
+ /**
23
+ * Analyses a 3D frame like `analyzeFrame` and keeps the solution, so that full member diagrams
24
+ * can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
25
+ * draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
26
+ *
27
+ * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
28
+ * and combinations
29
+ * @param options - Diagram station count and detail
30
+ * @returns `{ result, memberDiagram }`
31
+ * @throws {FrameAnalysisError} 301–314 for an invalid model (with `details` and every problem in
32
+ * `issues`), 304 for an unstable structure
33
+ */
34
+ const createFrameAnalysis = (model, options = {}) => {
35
+ const issues = (0, validate_model_1.validateFrameModel)(model);
36
+ if (issues.length > 0)
37
+ (0, validate_model_1.throwIssues)(issues);
38
+ const system = (0, frame_system_1.prepareFrameSystem)(model);
39
+ const combinations = model.combinations ?? [];
40
+ const resolved = (0, combinations_1.resolveCombinations)(combinations, new Set(model.loadCases.map((c) => c.id)));
41
+ const withStations = (options.diagrams ?? "full") === "full";
42
+ const states = new Map();
43
+ const cases = {};
44
+ const nodalByCase = groupByCase(model.nodalLoads);
45
+ const memberByCase = groupByCase(model.memberLoads);
46
+ for (const loadCase of model.loadCases) {
47
+ const state = (0, load_case_solver_1.solveLoadCase)(system, loadCase, {
48
+ nodalLoads: nodalByCase.get(loadCase.id) ?? [],
49
+ memberLoads: memberByCase.get(loadCase.id) ?? [],
50
+ });
51
+ states.set(loadCase.id, state);
52
+ cases[loadCase.id] = (0, present_state_1.presentState)(system, state, { id: loadCase.id, kind: "case", name: loadCase.name, type: loadCase.type }, { stations: options.stations, withStations });
53
+ }
54
+ const combinationStates = new Map();
55
+ const combinationResults = {};
56
+ for (const combination of combinations) {
57
+ // Non-empty: validation rejects combinations without terms
58
+ const terms = [...resolved.get(combination.id)].map(([caseId, factor]) => ({ state: states.get(caseId), factor }));
59
+ const state = (0, load_case_solver_1.combineStates)(terms);
60
+ combinationStates.set(combination.id, state);
61
+ combinationResults[combination.id] = (0, present_state_1.presentState)(system, state, { id: combination.id, kind: "combination", name: combination.name }, { stations: options.stations, withStations });
62
+ }
63
+ const warnings = [
64
+ ...Object.values(cases),
65
+ ...Object.values(combinationResults),
66
+ ].flatMap((r) => r.warnings.map((w) => ({
67
+ ...w,
68
+ message: `${r.kind === "case" ? "Load case" : "Load combination"} "${r.id}": ${w.message}`,
69
+ })));
70
+ const combinationList = combinations.map((c) => combinationResults[c.id]);
71
+ const result = {
72
+ cases,
73
+ combinations: combinationResults,
74
+ envelope: combinationList.length > 0 ? (0, envelope_1.buildEnvelope)(combinationList) : undefined,
75
+ calculationDetails: {
76
+ nodeCount: system.nodes.length,
77
+ memberCount: system.members.length,
78
+ dofCount: system.dofCount,
79
+ freeDofCount: system.free.length,
80
+ profileSize: system.profileSize,
81
+ loadCaseCount: model.loadCases.length,
82
+ combinationCount: combinations.length,
83
+ },
84
+ units: { force: "kN", moment: "kN·m", length: "mm", rotation: "rad" },
85
+ warnings,
86
+ };
87
+ return {
88
+ result,
89
+ memberDiagram: (resultId, memberId, stations) => {
90
+ const state = combinationStates.get(resultId) ?? states.get(resultId);
91
+ if (!state)
92
+ throw new Error(`Load case or combination "${resultId}" is not in the model.`);
93
+ const m = system.memberIndex.get(memberId);
94
+ if (m === undefined)
95
+ throw new Error(`Member ${String(memberId)} is not in the model.`);
96
+ return (0, present_state_1.presentMemberDiagram)(system, state, m, stations ?? options.stations);
97
+ },
98
+ };
99
+ };
100
+ exports.createFrameAnalysis = createFrameAnalysis;
101
+ /**
102
+ * Analyses a 3D frame by the direct stiffness method (linear elastic, small displacements)
103
+ * for every load case, then forms every load combination by superposition.
104
+ *
105
+ * The model is validated first (`validateFrameModel`). The stiffness matrix is assembled once
106
+ * in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
107
+ * load case is a separate solve. A combination is the factored sum of its load cases (nested
108
+ * combinations are expanded), and its member diagrams are rebuilt from the combined end forces
109
+ * and factored member loads, so their extremes are exact rather than sums of case extremes.
110
+ *
111
+ * Units: node coordinates, section properties and positions in mm and MPa; loads in kN, kN·m
112
+ * and kN/m; springs in kN/mm and kN·m/rad; unit weight in kN/m³. Results are in kN, kN·m, mm
113
+ * and rad. Global axes X, Y, Z are right-handed with Z up; members use ETABS-style local axes
114
+ * 1, 2, 3 (see `memberAxes`). Member end forces and diagrams use right-hand rotations.
115
+ *
116
+ * Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
117
+ *
118
+ * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
119
+ * and combinations
120
+ * @param options - Diagram station count and detail
121
+ * @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
122
+ * `calculationDetails`, `units` and `warnings`
123
+ * @throws {FrameAnalysisError} 301–314 for an invalid model (with `details` and every problem in
124
+ * `issues`), 304 for an unstable structure
125
+ */
126
+ const analyzeFrame = (model, options = {}) => (0, exports.createFrameAnalysis)(model, options).result;
127
+ exports.analyzeFrame = analyzeFrame;
128
+ //# sourceMappingURL=analyze-frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze-frame.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/analyze-frame.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { Restraint } from "../types/model.type";
2
+ export interface BoundaryConditions {
3
+ fixed: boolean[];
4
+ spring: number[];
5
+ restrained: boolean[];
6
+ }
7
+ /**
8
+ * Collects restraints into per-DOF fixed flags and spring stiffnesses.
9
+ *
10
+ * @param restraints - Model restraints
11
+ * @param nodeIndex - Map from node id to node index (6 DOFs per node)
12
+ * @param dofCount - Total number of global DOFs
13
+ */
14
+ export declare const buildBoundaryConditions: (restraints: Restraint[], nodeIndex: Map<Restraint["nodeId"], number>, dofCount: number) => BoundaryConditions;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildBoundaryConditions = void 0;
4
+ const DOF_KEYS = ["ux", "uy", "uz", "rx", "ry", "rz"];
5
+ /** Spring stiffness unit conversion: kN/mm → N/mm, kN·m/rad → N·mm/rad. */
6
+ const SPRING_FACTOR = [1e3, 1e3, 1e3, 1e6, 1e6, 1e6];
7
+ const parse = (value, factor) => {
8
+ if (value === true)
9
+ return { fixed: true, spring: 0 };
10
+ if (typeof value === "number" && value > 0)
11
+ return { fixed: false, spring: value * factor };
12
+ return { fixed: false, spring: 0 };
13
+ };
14
+ /**
15
+ * Collects restraints into per-DOF fixed flags and spring stiffnesses.
16
+ *
17
+ * @param restraints - Model restraints
18
+ * @param nodeIndex - Map from node id to node index (6 DOFs per node)
19
+ * @param dofCount - Total number of global DOFs
20
+ */
21
+ const buildBoundaryConditions = (restraints, nodeIndex, dofCount) => {
22
+ const fixed = new Array(dofCount).fill(false);
23
+ const spring = new Array(dofCount).fill(0);
24
+ for (const restraint of restraints) {
25
+ const base = 6 * nodeIndex.get(restraint.nodeId);
26
+ DOF_KEYS.forEach((key, k) => {
27
+ const parsed = parse(restraint[key], SPRING_FACTOR[k]);
28
+ if (parsed.fixed)
29
+ fixed[base + k] = true;
30
+ spring[base + k] = parsed.spring;
31
+ });
32
+ }
33
+ const restrained = fixed.map((f, i) => f || spring[i] > 0);
34
+ return { fixed, spring, restrained };
35
+ };
36
+ exports.buildBoundaryConditions = buildBoundaryConditions;
37
+ //# sourceMappingURL=boundary-conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary-conditions.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/boundary-conditions.ts"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAE/D,2EAA2E;AAC3E,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAQrD,MAAM,KAAK,GAAG,CACZ,KAA+B,EAC/B,MAAc,EACsB,EAAE;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAC5F,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;;GAMG;AACI,MAAM,uBAAuB,GAAG,CACrC,UAAuB,EACvB,SAA2C,EAC3C,QAAgB,EACI,EAAE;IACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAU,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,GAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAY,CAAC;QAC7D,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,MAAM,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACzC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
@@ -0,0 +1,11 @@
1
+ import type { LoadCombination } from "../types/model.type";
2
+ /**
3
+ * Expands every combination into net factors on load cases, following nested combinations.
4
+ *
5
+ * @param combinations - Model combinations
6
+ * @param caseIds - Ids of the model's load cases
7
+ * @returns For each combination id, the net factor on each load case it uses
8
+ * @throws {FrameAnalysisError} 309 for an unknown or missing reference, 310 for a loop,
9
+ * 311 for a non-finite factor or an empty combination
10
+ */
11
+ export declare const resolveCombinations: (combinations: LoadCombination[], caseIds: Set<string>) => Map<string, Map<string, number>>;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveCombinations = void 0;
4
+ const frame_analysis_error_1 = require("../../../core/errors/frame-analysis.error");
5
+ /**
6
+ * Expands every combination into net factors on load cases, following nested combinations.
7
+ *
8
+ * @param combinations - Model combinations
9
+ * @param caseIds - Ids of the model's load cases
10
+ * @returns For each combination id, the net factor on each load case it uses
11
+ * @throws {FrameAnalysisError} 309 for an unknown or missing reference, 310 for a loop,
12
+ * 311 for a non-finite factor or an empty combination
13
+ */
14
+ const resolveCombinations = (combinations, caseIds) => {
15
+ const byId = new Map(combinations.map((c) => [c.id, c]));
16
+ for (const combination of combinations) {
17
+ if (!Array.isArray(combination.terms) || combination.terms.length === 0) {
18
+ throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.INVALID_LOAD_FACTOR, {
19
+ combinationId: combination.id,
20
+ });
21
+ }
22
+ for (const term of combination.terms) {
23
+ if (!Number.isFinite(term.factor))
24
+ throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.INVALID_LOAD_FACTOR, {
25
+ combinationId: combination.id,
26
+ });
27
+ const isCase = "case" in term && term.case !== undefined;
28
+ const isCombination = "combination" in term && term.combination !== undefined;
29
+ if (isCase === isCombination)
30
+ throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.UNKNOWN_LOAD_CASE, {
31
+ combinationId: combination.id,
32
+ });
33
+ if (isCase && !caseIds.has(term.case)) {
34
+ throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.UNKNOWN_LOAD_CASE, {
35
+ combinationId: combination.id,
36
+ });
37
+ }
38
+ if (isCombination && !byId.has(term.combination)) {
39
+ throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.UNKNOWN_LOAD_CASE, {
40
+ combinationId: combination.id,
41
+ });
42
+ }
43
+ }
44
+ }
45
+ const resolved = new Map();
46
+ const visiting = new Set();
47
+ const resolve = (id) => {
48
+ const done = resolved.get(id);
49
+ if (done)
50
+ return done;
51
+ if (visiting.has(id)) {
52
+ throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.CIRCULAR_COMBINATION, { combinationId: id });
53
+ }
54
+ visiting.add(id);
55
+ const factors = new Map();
56
+ const addFactor = (caseId, factor) => factors.set(caseId, (factors.get(caseId) ?? 0) + factor);
57
+ for (const term of byId.get(id).terms) {
58
+ if ("case" in term) {
59
+ addFactor(term.case, term.factor);
60
+ }
61
+ else {
62
+ resolve(term.combination).forEach((f, caseId) => addFactor(caseId, term.factor * f));
63
+ }
64
+ }
65
+ visiting.delete(id);
66
+ resolved.set(id, factors);
67
+ return factors;
68
+ };
69
+ combinations.forEach((c) => resolve(c.id));
70
+ return resolved;
71
+ };
72
+ exports.resolveCombinations = resolveCombinations;
73
+ //# sourceMappingURL=combinations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combinations.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/combinations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { SectionProperties } from "../../../core/types/section-properties.type";
2
+ import type { Matrix } from "../../../utils/matrix";
3
+ import { type SkylineMatrix } from "../../../utils/skyline";
4
+ import type { FrameId, FrameModel, FrameNode } from "../types/model.type";
5
+ import { type BoundaryConditions } from "./boundary-conditions";
6
+ import { type AssemblyMember } from "./global-assembly";
7
+ /** A member with everything that does not depend on the loads. */
8
+ export interface SystemMember extends AssemblyMember {
9
+ id: FrameId;
10
+ section: SectionProperties;
11
+ length: number;
12
+ lambda: Matrix;
13
+ released: boolean[];
14
+ /** Condenses a member's fixed-end forces for its end releases. */
15
+ condenseFixedEndForces: (fixed: number[]) => number[];
16
+ }
17
+ /** The load-independent part of a frame analysis: geometry, stiffness and its factorisation. */
18
+ export interface FrameSystem {
19
+ nodes: FrameNode[];
20
+ nodeIndex: Map<FrameId, number>;
21
+ memberIndex: Map<FrameId, number>;
22
+ members: SystemMember[];
23
+ dofCount: number;
24
+ boundary: BoundaryConditions;
25
+ /** Equation number of each global DOF in the factorised system, −1 for a fixed DOF. */
26
+ equation: Int32Array;
27
+ /** Global DOF of each equation. */
28
+ free: number[];
29
+ /** Skyline Cholesky factor of the free stiffness including springs; null when nothing is free. */
30
+ factor: SkylineMatrix | null;
31
+ /** Stored entries of the factor (a measure of bandwidth, memory and work). */
32
+ profileSize: number;
33
+ }
34
+ /**
35
+ * Builds the member matrices of a model that passed `validateFrameModel`, assembles the free
36
+ * stiffness in skyline storage with nodes in reverse Cuthill–McKee order, and factorises it
37
+ * once for all load cases.
38
+ *
39
+ * @throws {FrameAnalysisError} 304 if the structure is a mechanism; `details` names a node and
40
+ * a DOF involved in it
41
+ */
42
+ export declare const prepareFrameSystem: (model: FrameModel) => FrameSystem;