@theerapat-s28/ts-structural-eng-tools 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/README.md +65 -11
  3. package/dist/core/constants/fea.constant.d.ts +21 -0
  4. package/dist/core/constants/fea.constant.js +26 -0
  5. package/dist/core/constants/fea.constant.js.map +1 -0
  6. package/dist/core/constants/frame.constant.d.ts +0 -34
  7. package/dist/core/constants/frame.constant.js +2 -35
  8. package/dist/core/constants/frame.constant.js.map +1 -1
  9. package/dist/core/constants/rc.constant.d.ts +8 -0
  10. package/dist/core/constants/rc.constant.js +10 -1
  11. package/dist/core/constants/rc.constant.js.map +1 -1
  12. package/dist/core/constants/shell.constant.d.ts +23 -0
  13. package/dist/core/constants/shell.constant.js +28 -0
  14. package/dist/core/constants/shell.constant.js.map +1 -0
  15. package/dist/core/errors/fea.error.d.ts +5 -0
  16. package/dist/core/errors/fea.error.js +9 -1
  17. package/dist/core/errors/fea.error.js.map +1 -1
  18. package/dist/core/index.d.ts +4 -2
  19. package/dist/core/index.js +16 -10
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/esm/core/constants/fea.constant.js +23 -0
  22. package/dist/esm/core/constants/fea.constant.js.map +1 -0
  23. package/dist/esm/core/constants/frame.constant.js +1 -34
  24. package/dist/esm/core/constants/frame.constant.js.map +1 -1
  25. package/dist/esm/core/constants/rc.constant.js +9 -0
  26. package/dist/esm/core/constants/rc.constant.js.map +1 -1
  27. package/dist/esm/core/constants/shell.constant.js +25 -0
  28. package/dist/esm/core/constants/shell.constant.js.map +1 -0
  29. package/dist/esm/core/errors/fea.error.js +9 -1
  30. package/dist/esm/core/errors/fea.error.js.map +1 -1
  31. package/dist/esm/core/index.js +4 -2
  32. package/dist/esm/core/index.js.map +1 -1
  33. package/dist/esm/fea/analysis/mesh/expand-model.js +1 -1
  34. package/dist/esm/fea/analysis/mesh/expand-model.js.map +1 -1
  35. package/dist/esm/fea/analysis/mesh/member-connectivity.js +2 -1
  36. package/dist/esm/fea/analysis/mesh/member-connectivity.js.map +1 -1
  37. package/dist/esm/fea/analysis/post/envelope.js +70 -0
  38. package/dist/esm/fea/analysis/post/envelope.js.map +1 -1
  39. package/dist/esm/fea/analysis/post/present-state.js +9 -2
  40. package/dist/esm/fea/analysis/post/present-state.js.map +1 -1
  41. package/dist/esm/fea/analysis/post/wall-forces.js +299 -0
  42. package/dist/esm/fea/analysis/post/wall-forces.js.map +1 -0
  43. package/dist/esm/fea/analysis/post/wall-geometry.js +173 -0
  44. package/dist/esm/fea/analysis/post/wall-geometry.js.map +1 -0
  45. package/dist/esm/fea/analysis/solver/analysis-system.js +1 -1
  46. package/dist/esm/fea/analysis/solver/analysis-system.js.map +1 -1
  47. package/dist/esm/fea/analysis/solver/analyze.js +13 -5
  48. package/dist/esm/fea/analysis/solver/analyze.js.map +1 -1
  49. package/dist/esm/fea/analysis/solver/load-case-solver.js +4 -3
  50. package/dist/esm/fea/analysis/solver/load-case-solver.js.map +1 -1
  51. package/dist/esm/fea/analysis/validation/validate-model.js +20 -2
  52. package/dist/esm/fea/analysis/validation/validate-model.js.map +1 -1
  53. package/dist/esm/fea/analysis/validation/validate-walls.js +226 -0
  54. package/dist/esm/fea/analysis/validation/validate-walls.js.map +1 -0
  55. package/dist/esm/fea/frame/area/area-geometry.js +1 -1
  56. package/dist/esm/fea/frame/area/area-geometry.js.map +1 -1
  57. package/dist/esm/fea/frame/area/area-member-loads.js +1 -1
  58. package/dist/esm/fea/frame/area/area-member-loads.js.map +1 -1
  59. package/dist/esm/fea/frame/area/edge-members.js +1 -1
  60. package/dist/esm/fea/frame/area/edge-members.js.map +1 -1
  61. package/dist/esm/fea/frame/post/member-diagram.js +12 -0
  62. package/dist/esm/fea/frame/post/member-diagram.js.map +1 -1
  63. package/dist/esm/fea/frame/solver/nodes-along-members.js +1 -1
  64. package/dist/esm/fea/frame/solver/nodes-along-members.js.map +1 -1
  65. package/dist/esm/fea/frame/transformation/coordinate-transform.js +1 -1
  66. package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -1
  67. package/dist/esm/fea/frame/validation/validate-null-areas.js +1 -1
  68. package/dist/esm/fea/frame/validation/validate-null-areas.js.map +1 -1
  69. package/dist/esm/fea/shared/solver/auto-restraint.js +1 -1
  70. package/dist/esm/fea/shared/solver/auto-restraint.js.map +1 -1
  71. package/dist/esm/fea/shared/validation/issues.js +8 -0
  72. package/dist/esm/fea/shared/validation/issues.js.map +1 -1
  73. package/dist/esm/fea/shell/elements/membrane-quad.js +1 -1
  74. package/dist/esm/fea/shell/elements/shell-axes.js +2 -1
  75. package/dist/esm/fea/shell/elements/shell-axes.js.map +1 -1
  76. package/dist/esm/fea/shell/mesh/mesh-shells.js +1 -1
  77. package/dist/esm/fea/shell/mesh/mesh-shells.js.map +1 -1
  78. package/dist/esm/fea/shell/post/strip-forces.js +341 -0
  79. package/dist/esm/fea/shell/post/strip-forces.js.map +1 -0
  80. package/dist/esm/fea/shell/solver/shell-loads.js +3 -0
  81. package/dist/esm/fea/shell/solver/shell-loads.js.map +1 -1
  82. package/dist/esm/fea/shell/validation/validate-shells.js +9 -2
  83. package/dist/esm/fea/shell/validation/validate-shells.js.map +1 -1
  84. package/dist/esm/fea/shell/validation/validate-strips.js +99 -0
  85. package/dist/esm/fea/shell/validation/validate-strips.js.map +1 -0
  86. package/dist/esm/index.js +1 -1
  87. package/dist/esm/index.js.map +1 -1
  88. package/dist/esm/rc/rc-section-properties.js +1 -1
  89. package/dist/esm/rc/rc-section-properties.js.map +1 -1
  90. package/dist/fea/analysis/index.d.ts +2 -2
  91. package/dist/fea/analysis/mesh/expand-model.js +3 -3
  92. package/dist/fea/analysis/mesh/expand-model.js.map +1 -1
  93. package/dist/fea/analysis/mesh/member-connectivity.js +2 -1
  94. package/dist/fea/analysis/mesh/member-connectivity.js.map +1 -1
  95. package/dist/fea/analysis/post/envelope.js +70 -0
  96. package/dist/fea/analysis/post/envelope.js.map +1 -1
  97. package/dist/fea/analysis/post/present-state.d.ts +7 -0
  98. package/dist/fea/analysis/post/present-state.js +10 -3
  99. package/dist/fea/analysis/post/present-state.js.map +1 -1
  100. package/dist/fea/analysis/post/wall-forces.d.ts +65 -0
  101. package/dist/fea/analysis/post/wall-forces.js +305 -0
  102. package/dist/fea/analysis/post/wall-forces.js.map +1 -0
  103. package/dist/fea/analysis/post/wall-geometry.d.ts +73 -0
  104. package/dist/fea/analysis/post/wall-geometry.js +188 -0
  105. package/dist/fea/analysis/post/wall-geometry.js.map +1 -0
  106. package/dist/fea/analysis/solver/analysis-system.js +2 -2
  107. package/dist/fea/analysis/solver/analysis-system.js.map +1 -1
  108. package/dist/fea/analysis/solver/analyze.d.ts +6 -3
  109. package/dist/fea/analysis/solver/analyze.js +13 -5
  110. package/dist/fea/analysis/solver/analyze.js.map +1 -1
  111. package/dist/fea/analysis/solver/load-case-solver.d.ts +1 -0
  112. package/dist/fea/analysis/solver/load-case-solver.js +5 -4
  113. package/dist/fea/analysis/solver/load-case-solver.js.map +1 -1
  114. package/dist/fea/analysis/types/model.type.d.ts +58 -1
  115. package/dist/fea/analysis/types/results.type.d.ts +125 -1
  116. package/dist/fea/analysis/validation/validate-model.d.ts +1 -1
  117. package/dist/fea/analysis/validation/validate-model.js +20 -2
  118. package/dist/fea/analysis/validation/validate-model.js.map +1 -1
  119. package/dist/fea/analysis/validation/validate-walls.d.ts +35 -0
  120. package/dist/fea/analysis/validation/validate-walls.js +230 -0
  121. package/dist/fea/analysis/validation/validate-walls.js.map +1 -0
  122. package/dist/fea/frame/area/area-geometry.js +5 -5
  123. package/dist/fea/frame/area/area-geometry.js.map +1 -1
  124. package/dist/fea/frame/area/area-member-loads.js +7 -7
  125. package/dist/fea/frame/area/area-member-loads.js.map +1 -1
  126. package/dist/fea/frame/area/edge-members.js +2 -2
  127. package/dist/fea/frame/area/edge-members.js.map +1 -1
  128. package/dist/fea/frame/post/member-diagram.d.ts +9 -0
  129. package/dist/fea/frame/post/member-diagram.js +14 -1
  130. package/dist/fea/frame/post/member-diagram.js.map +1 -1
  131. package/dist/fea/frame/solver/nodes-along-members.js +2 -2
  132. package/dist/fea/frame/solver/nodes-along-members.js.map +1 -1
  133. package/dist/fea/frame/transformation/coordinate-transform.js +2 -2
  134. package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -1
  135. package/dist/fea/frame/validation/validate-null-areas.js +2 -2
  136. package/dist/fea/frame/validation/validate-null-areas.js.map +1 -1
  137. package/dist/fea/shared/solver/auto-restraint.js +3 -3
  138. package/dist/fea/shared/solver/auto-restraint.js.map +1 -1
  139. package/dist/fea/shared/validation/issues.js +8 -0
  140. package/dist/fea/shared/validation/issues.js.map +1 -1
  141. package/dist/fea/shell/elements/membrane-quad.js +2 -2
  142. package/dist/fea/shell/elements/shell-axes.js +6 -5
  143. package/dist/fea/shell/elements/shell-axes.js.map +1 -1
  144. package/dist/fea/shell/index.d.ts +2 -2
  145. package/dist/fea/shell/mesh/mesh-shells.js +2 -2
  146. package/dist/fea/shell/mesh/mesh-shells.js.map +1 -1
  147. package/dist/fea/shell/post/strip-forces.d.ts +69 -0
  148. package/dist/fea/shell/post/strip-forces.js +349 -0
  149. package/dist/fea/shell/post/strip-forces.js.map +1 -0
  150. package/dist/fea/shell/solver/shell-loads.d.ts +3 -1
  151. package/dist/fea/shell/solver/shell-loads.js +3 -0
  152. package/dist/fea/shell/solver/shell-loads.js.map +1 -1
  153. package/dist/fea/shell/types/model.type.d.ts +31 -0
  154. package/dist/fea/shell/types/results.type.d.ts +54 -0
  155. package/dist/fea/shell/validation/validate-shells.d.ts +7 -2
  156. package/dist/fea/shell/validation/validate-shells.js +9 -2
  157. package/dist/fea/shell/validation/validate-shells.js.map +1 -1
  158. package/dist/fea/shell/validation/validate-strips.d.ts +11 -0
  159. package/dist/fea/shell/validation/validate-strips.js +103 -0
  160. package/dist/fea/shell/validation/validate-strips.js.map +1 -0
  161. package/dist/index.d.ts +2 -2
  162. package/dist/index.js +6 -2
  163. package/dist/index.js.map +1 -1
  164. package/dist/rc/rc-section-properties.js +4 -4
  165. package/dist/rc/rc-section-properties.js.map +1 -1
  166. package/package.json +1 -1
@@ -0,0 +1,305 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.presentSpandrelForces = exports.presentPierForces = exports.prepareWalls = exports.WALL_COMPONENTS = void 0;
4
+ const fea_constant_1 = require("../../../core/constants/fea.constant");
5
+ const member_diagram_1 = require("../../frame/post/member-diagram");
6
+ const global_assembly_1 = require("../../shared/solver/global-assembly");
7
+ const math_1 = require("../../../utils/math");
8
+ const wall_geometry_1 = require("./wall-geometry");
9
+ /** The resultants, in the order of the raw values. */
10
+ exports.WALL_COMPONENTS = ["P", "V2", "V3", "T", "M2", "M3"];
11
+ const FORCE_DECIMALS = 4;
12
+ const LENGTH_DECIMALS = 3;
13
+ const round = (value, decimals = FORCE_DECIMALS) => (0, math_1.roundToDecimalPlaces)(value, decimals) + 0; // + 0: no −0
14
+ const roundPoint = (p) => [round(p[0], 3), round(p[1], 3), round(p[2], 3)];
15
+ const range = (values) => ({ min: Math.min(...values), max: Math.max(...values) });
16
+ /**
17
+ * One cut: the shell elements and member pieces on its side that reach it, the members that
18
+ * cross it, its section (a leg per area, a point per member) and the section's centroid.
19
+ */
20
+ const prepareCut = (system, shape, e1, s, face, tol) => {
21
+ const negative = (0, wall_geometry_1.fromNegativeSide)(face);
22
+ const sign = negative ? 1 : -1;
23
+ const at = (n) => {
24
+ const node = system.nodes[n];
25
+ return [node.x, node.y, node.z];
26
+ };
27
+ const shells = [];
28
+ const legs = [];
29
+ for (const { areaId, shells: list } of shape.areas) {
30
+ const onCut = [];
31
+ let normal;
32
+ let thickness = 0;
33
+ for (const index of list) {
34
+ const shell = system.shells[index];
35
+ const points = shell.nodeIndices.map(at);
36
+ const r = range(points.map((p) => (0, wall_geometry_1.dot)(p, e1)));
37
+ if (r.max - r.min <= tol)
38
+ continue;
39
+ if (Math.abs((negative ? r.max : r.min) - s) > tol)
40
+ continue;
41
+ const corners = points.flatMap((p, i) => (Math.abs((0, wall_geometry_1.dot)(p, e1) - s) <= tol ? [i] : []));
42
+ shells.push({ shell: index, corners, sign });
43
+ onCut.push(...corners.map((i) => points[i]));
44
+ normal ?? (normal = shell.element.axes.lambda[2]);
45
+ thickness = shell.section.thickness;
46
+ }
47
+ if (!normal)
48
+ continue;
49
+ const d = (0, wall_geometry_1.cross)(e1, normal);
50
+ const dn = Math.hypot(d[0], d[1], d[2]);
51
+ if (dn === 0)
52
+ continue;
53
+ // legs run up (spandrel), else toward +X (+Y for a leg parallel to Y)
54
+ let along = [d[0] / dn, d[1] / dn, d[2] / dn];
55
+ const flip = Math.abs(along[2]) > fea_constant_1.VERTICAL_MEMBER_TOLERANCE
56
+ ? along[2] < 0
57
+ : Math.abs(along[0]) > fea_constant_1.VERTICAL_MEMBER_TOLERANCE
58
+ ? along[0] < 0
59
+ : along[1] < 0;
60
+ if (flip)
61
+ along = [-along[0], -along[1], -along[2]];
62
+ let start = onCut[0];
63
+ let end = onCut[0];
64
+ for (const p of onCut) {
65
+ if ((0, wall_geometry_1.dot)(p, along) < (0, wall_geometry_1.dot)(start, along))
66
+ start = p;
67
+ if ((0, wall_geometry_1.dot)(p, along) > (0, wall_geometry_1.dot)(end, along))
68
+ end = p;
69
+ }
70
+ const length = (0, wall_geometry_1.dot)((0, wall_geometry_1.sub)(end, start), along);
71
+ if (length > tol)
72
+ legs.push({ areaId, start, end, length, thickness });
73
+ }
74
+ const ends = [];
75
+ const crossings = [];
76
+ const members = [];
77
+ for (const { memberId, pieces } of shape.members) {
78
+ for (const piece of pieces) {
79
+ const member = system.members[piece];
80
+ const p0 = at(member.startIndex);
81
+ const p1 = at(member.endIndex);
82
+ const s0 = (0, wall_geometry_1.dot)(p0, e1);
83
+ const s1 = (0, wall_geometry_1.dot)(p1, e1);
84
+ if (Math.abs(s1 - s0) <= tol)
85
+ continue; // lies in the cut plane
86
+ const r = range([s0, s1]);
87
+ if (r.min < s - tol && r.max > s + tol) {
88
+ const t = (s - s0) / (s1 - s0);
89
+ const point = [
90
+ p0[0] + t * (p1[0] - p0[0]),
91
+ p0[1] + t * (p1[1] - p0[1]),
92
+ p0[2] + t * (p1[2] - p0[2]),
93
+ ];
94
+ crossings.push({ piece, x: t * member.length, point, sign: s1 > s0 ? 1 : -1 });
95
+ members.push({ memberId, point, A: member.section.A });
96
+ break;
97
+ }
98
+ if (Math.abs((negative ? r.max : r.min) - s) <= tol) {
99
+ // the piece's end on the cut: the one with the larger s from below, the smaller from above
100
+ const end = negative === s1 > s0 ? 1 : 0;
101
+ const point = end === 1 ? p1 : p0;
102
+ ends.push({ piece, end, point, sign });
103
+ members.push({ memberId, point, A: member.section.A });
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ // centroid: legs by length × thickness at their midpoints, members by A
109
+ let area = 0;
110
+ const sum = [0, 0, 0];
111
+ const addWeighted = (p, w) => {
112
+ area += w;
113
+ for (let k = 0; k < 3; k++)
114
+ sum[k] += w * p[k];
115
+ };
116
+ for (const leg of legs) {
117
+ const mid = [0, 1, 2].map((k) => (leg.start[k] + leg.end[k]) / 2);
118
+ addWeighted(mid, leg.length * leg.thickness);
119
+ }
120
+ for (const m of members)
121
+ addWeighted(m.point, m.A);
122
+ let centroid;
123
+ if (area > 0) {
124
+ centroid = sum.map((v) => v / area);
125
+ }
126
+ else {
127
+ // only corners touch the cut: the mean of the points on it
128
+ const points = [
129
+ ...shells.flatMap((t) => t.corners.map((i) => at(system.shells[t.shell].nodeIndices[i]))),
130
+ ...ends.map((t) => t.point),
131
+ ...crossings.map((t) => t.point),
132
+ ];
133
+ centroid = [0, 1, 2].map((k) => points.reduce((acc, p) => acc + p[k], 0) / Math.max(points.length, 1));
134
+ }
135
+ return {
136
+ face,
137
+ centroid,
138
+ section: {
139
+ legs: legs.map((leg) => ({
140
+ areaId: leg.areaId,
141
+ start: roundPoint(leg.start),
142
+ end: roundPoint(leg.end),
143
+ length: round(leg.length, LENGTH_DECIMALS),
144
+ thickness: leg.thickness,
145
+ })),
146
+ members: members.map((m) => ({ memberId: m.memberId, point: roundPoint(m.point), A: m.A })),
147
+ length: round(legs.reduce((acc, leg) => acc + leg.length, 0), LENGTH_DECIMALS),
148
+ area: round(area, LENGTH_DECIMALS),
149
+ centroid: roundPoint(centroid),
150
+ },
151
+ shells,
152
+ ends,
153
+ crossings,
154
+ };
155
+ };
156
+ /**
157
+ * Prepares the piers and spandrels of a model that passed `validateModel`: their axes, cuts
158
+ * (see `wallCutPositions`) and, for each cut, the shell elements and member pieces whose nodal
159
+ * forces make up its resultant.
160
+ *
161
+ * @param walls - The model's piers and spandrels
162
+ */
163
+ const prepareWalls = (walls, system) => {
164
+ const at = (n) => {
165
+ const node = system.nodes[n];
166
+ return [node.x, node.y, node.z];
167
+ };
168
+ const prepare = (kind, wall) => {
169
+ const areas = (wall.areaIds ?? []).map((areaId) => ({
170
+ areaId,
171
+ shells: system.shellsByArea.get(areaId) ?? [],
172
+ }));
173
+ const members = (wall.memberIds ?? []).map((memberId) => ({
174
+ memberId,
175
+ pieces: system.memberGroups[system.memberIndex.get(memberId)].pieces,
176
+ }));
177
+ const shape = {
178
+ areas: areas.map(({ areaId, shells }) => ({
179
+ areaId,
180
+ elements: shells.map((s) => system.shells[s].nodeIndices.map(at)),
181
+ })),
182
+ members: members.map(({ memberId, pieces }) => ({
183
+ memberId,
184
+ pieces: pieces.map((m) => [
185
+ at(system.members[m].startIndex),
186
+ at(system.members[m].endIndex),
187
+ ]),
188
+ })),
189
+ };
190
+ const axes = (0, wall_geometry_1.wallAxes)(kind, shape, {
191
+ angle: wall.angle,
192
+ reverse: wall.reverse,
193
+ });
194
+ const e1 = axes[0];
195
+ const extent = (0, wall_geometry_1.wallExtent)(shape, e1);
196
+ const tol = (0, wall_geometry_1.wallTolerance)(extent);
197
+ const offset = kind === "pier" ? 0 : extent.min;
198
+ const extra = (wall.cuts ?? []).map((c) => c + offset);
199
+ const cuts = (0, wall_geometry_1.wallCutPositions)(kind, shape, e1, extra).map(({ s, face }) => ({
200
+ position: s - offset,
201
+ ...prepareCut(system, { areas, members }, e1, s, face, tol),
202
+ }));
203
+ return { id: wall.id, axes, length: extent.max - extent.min, cuts };
204
+ };
205
+ return {
206
+ piers: (walls.piers ?? []).map((p) => prepare("pier", p)),
207
+ spandrels: (walls.spandrels ?? []).map((s) => prepare("spandrel", s)),
208
+ };
209
+ };
210
+ exports.prepareWalls = prepareWalls;
211
+ /**
212
+ * The unrounded global force (N) and moment about the cut's centroid (N·mm) on the +1 face of
213
+ * the negative part of one cut: the nodal forces `k·u − f` of the shell elements on the cut's
214
+ * side at their corners on it, the end forces of the member pieces ending on it from that side
215
+ * (both negated when the side is the positive one), and the internal forces of the members
216
+ * crossing it. Linear in the state.
217
+ */
218
+ const cutRawForces = (system, state, cut) => {
219
+ const F = [0, 0, 0];
220
+ const M = [0, 0, 0];
221
+ const c = cut.centroid;
222
+ const addAt = (p, f, m, sign) => {
223
+ const r = (0, wall_geometry_1.sub)(p, c);
224
+ const rf = (0, wall_geometry_1.cross)(r, f);
225
+ for (let k = 0; k < 3; k++) {
226
+ F[k] += sign * f[k];
227
+ M[k] += sign * (m[k] + rf[k]);
228
+ }
229
+ };
230
+ for (const { shell: index, corners, sign } of cut.shells) {
231
+ const shell = system.shells[index];
232
+ const dofs = (0, global_assembly_1.elementDofs)(shell.nodeIndices);
233
+ const u = dofs.map((d) => state.U[d]);
234
+ const p = state.shellPressures[index];
235
+ for (const i of corners) {
236
+ const f = [0, 0, 0, 0, 0, 0];
237
+ for (let r = 0; r < 6; r++) {
238
+ const row = shell.element.kGlobal[6 * i + r];
239
+ let v = 0;
240
+ for (let j = 0; j < 24; j++)
241
+ v += row[j] * u[j];
242
+ f[r] = v;
243
+ }
244
+ for (let k = 0; k < 3; k++)
245
+ f[k] -= p[k] * 1e-3 * shell.cornerAreas[i];
246
+ const node = system.nodes[shell.nodeIndices[i]];
247
+ addAt([node.x, node.y, node.z], [f[0], f[1], f[2]], [f[3], f[4], f[5]], sign);
248
+ }
249
+ }
250
+ const toGlobal = (lambda, local) => [
251
+ lambda[0][0] * local[0] + lambda[1][0] * local[1] + lambda[2][0] * local[2],
252
+ lambda[0][1] * local[0] + lambda[1][1] * local[1] + lambda[2][1] * local[2],
253
+ lambda[0][2] * local[0] + lambda[1][2] * local[1] + lambda[2][2] * local[2],
254
+ ];
255
+ for (const { piece, end, point, sign } of cut.ends) {
256
+ const { lambda } = system.members[piece];
257
+ const f = state.memberForces[piece].slice(6 * end, 6 * end + 6);
258
+ addAt(point, toGlobal(lambda, f.slice(0, 3)), toGlobal(lambda, f.slice(3, 6)), sign);
259
+ }
260
+ for (const { piece, x, point, sign } of cut.crossings) {
261
+ const { lambda } = system.members[piece];
262
+ const f = (0, member_diagram_1.memberInternalForces)(state.memberForces[piece].slice(0, 6), state.memberLoads[piece], x);
263
+ addAt(point, toGlobal(lambda, f.slice(0, 3)), toGlobal(lambda, f.slice(3, 6)), sign);
264
+ }
265
+ return { F, M };
266
+ };
267
+ /** The presented resultant of one cut in the wall's axes (kN, kN·m). */
268
+ const cutResultants = (system, state, axes, cut) => {
269
+ const { F, M } = cutRawForces(system, state, cut);
270
+ return {
271
+ P: round((0, wall_geometry_1.dot)(F, axes[0]) * 1e-3),
272
+ V2: round((0, wall_geometry_1.dot)(F, axes[1]) * 1e-3),
273
+ V3: round((0, wall_geometry_1.dot)(F, axes[2]) * 1e-3),
274
+ T: round((0, wall_geometry_1.dot)(M, axes[0]) * 1e-6),
275
+ M2: round((0, wall_geometry_1.dot)(M, axes[1]) * 1e-6),
276
+ M3: round((0, wall_geometry_1.dot)(M, axes[2]) * 1e-6),
277
+ };
278
+ };
279
+ const presentAxes = (axes) => axes.map((e) => e.map((v) => round(v, 9)));
280
+ /** The presented forces of one pier in a raw state. */
281
+ const presentPierForces = (system, state, pier) => ({
282
+ pierId: pier.id,
283
+ axes: presentAxes(pier.axes),
284
+ cuts: pier.cuts.map((cut) => ({
285
+ z: round(cut.position, LENGTH_DECIMALS),
286
+ face: cut.face,
287
+ ...cutResultants(system, state, pier.axes, cut),
288
+ section: cut.section,
289
+ })),
290
+ });
291
+ exports.presentPierForces = presentPierForces;
292
+ /** The presented forces of one spandrel in a raw state. */
293
+ const presentSpandrelForces = (system, state, spandrel) => ({
294
+ spandrelId: spandrel.id,
295
+ axes: presentAxes(spandrel.axes),
296
+ length: round(spandrel.length, LENGTH_DECIMALS),
297
+ cuts: spandrel.cuts.map((cut) => ({
298
+ x: round(cut.position, LENGTH_DECIMALS),
299
+ face: cut.face,
300
+ ...cutResultants(system, state, spandrel.axes, cut),
301
+ section: cut.section,
302
+ })),
303
+ });
304
+ exports.presentSpandrelForces = presentSpandrelForces;
305
+ //# sourceMappingURL=wall-forces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wall-forces.js","sourceRoot":"","sources":["../../../../src/fea/analysis/post/wall-forces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { FeaId } from "../../shared/types/model.type";
2
+ import type { PierCutFace, SpandrelCutFace } from "../types/results.type";
3
+ /** A point or vector in global axes: X, Y, Z in mm. */
4
+ export type Vec3 = [number, number, number];
5
+ /** Pier or spandrel axes 1, 2, 3 (rows) in global components. */
6
+ export type WallAxes = [Vec3, Vec3, Vec3];
7
+ export type WallKind = "pier" | "spandrel";
8
+ export type WallCutFace = PierCutFace | SpandrelCutFace;
9
+ /** The geometry of a pier or spandrel: its areas' shell elements and its members' pieces. */
10
+ export interface WallShape {
11
+ areas: {
12
+ areaId: FeaId;
13
+ elements: Vec3[][];
14
+ }[];
15
+ members: {
16
+ memberId: FeaId;
17
+ pieces: [Vec3, Vec3][];
18
+ }[];
19
+ }
20
+ /** One cut of a pier or spandrel: its coordinate along axis 1 and the side it is taken from. */
21
+ export interface WallCutPosition {
22
+ s: number;
23
+ face: WallCutFace;
24
+ /** Index into the user's `cuts` for an extra cut. */
25
+ cut?: number;
26
+ }
27
+ export declare const sub: (p: Vec3, q: Vec3) => Vec3;
28
+ export declare const dot: (p: Vec3, q: Vec3) => number;
29
+ export declare const cross: (p: Vec3, q: Vec3) => Vec3;
30
+ /** Unit normal of a polygon by Newell's method (zero for a degenerate polygon). */
31
+ export declare const polygonNormal: (points: readonly Vec3[]) => Vec3;
32
+ /** The horizontal direction in a vertical plane of normal `n`, toward +X (+Y if along Y). */
33
+ export declare const horizontalInPlane: (n: Vec3) => Vec3;
34
+ /**
35
+ * Axes of a pier or spandrel (see `WallPier`, `WallSpandrel`).
36
+ *
37
+ * - Pier: 1 = +Z; 2 = global X rotated by `angle` about +Z, else the horizontal direction of
38
+ * the area with the largest horizontal extent (the first wins a tie), else global X; 3 = 1 × 2.
39
+ * - Spandrel: 1 = horizontal in the plane of its first area, toward +X (+Y for a plane parallel
40
+ * to Y), reversed by `reverse`; 2 = +Z; 3 = 1 × 2.
41
+ */
42
+ export declare const wallAxes: (kind: WallKind, shape: WallShape, options: {
43
+ angle?: number;
44
+ reverse?: boolean;
45
+ }) => WallAxes;
46
+ /** Smallest and largest coordinate along `e1` of every element corner and member end. */
47
+ export declare const wallExtent: (shape: WallShape, e1: Vec3) => {
48
+ min: number;
49
+ max: number;
50
+ };
51
+ /** The distance within which a point counts as on a cut (see `WALL_CUT_TOLERANCE`). */
52
+ export declare const wallTolerance: (extent: {
53
+ min: number;
54
+ max: number;
55
+ }) => number;
56
+ /**
57
+ * The cuts of a pier or spandrel, in order along axis 1.
58
+ *
59
+ * - Pier: at each elevation where one of its areas or members starts or ends, a `"top"` cut
60
+ * when something of the pier ends there from below and a `"bottom"` cut when something starts
61
+ * there going up (the top first); then each extra cut not at such an elevation, as `"cut"`.
62
+ * - Spandrel: `"left"` at its smallest coordinate, `"right"` at its largest, and each extra cut
63
+ * strictly between them as `"cut"`.
64
+ *
65
+ * @param extra - The extra cuts as coordinates along axis 1 (mm)
66
+ */
67
+ export declare const wallCutPositions: (kind: WallKind, shape: WallShape, e1: Vec3, extra?: readonly number[]) => WallCutPosition[];
68
+ /** Whether a face takes the elements on the negative side of its cut (below, or to the left). */
69
+ export declare const fromNegativeSide: (face: WallCutFace) => face is "right" | "top" | "cut";
70
+ /** Areas with a shell element on both sides of the cut at s (no mesh line there). */
71
+ export declare const areasAcrossCut: (shape: WallShape, e1: Vec3, s: number, tol: number) => FeaId[];
72
+ /** Whether some element or member of the shape reaches the cut at s. */
73
+ export declare const reachesCut: (shape: WallShape, e1: Vec3, s: number, tol: number) => boolean;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reachesCut = exports.areasAcrossCut = exports.fromNegativeSide = exports.wallCutPositions = exports.wallTolerance = exports.wallExtent = exports.wallAxes = exports.horizontalInPlane = exports.polygonNormal = exports.cross = exports.dot = exports.sub = void 0;
4
+ const fea_constant_1 = require("../../../core/constants/fea.constant");
5
+ const sub = (p, q) => [p[0] - q[0], p[1] - q[1], p[2] - q[2]];
6
+ exports.sub = sub;
7
+ const dot = (p, q) => p[0] * q[0] + p[1] * q[1] + p[2] * q[2];
8
+ exports.dot = dot;
9
+ const cross = (p, q) => [
10
+ p[1] * q[2] - p[2] * q[1],
11
+ p[2] * q[0] - p[0] * q[2],
12
+ p[0] * q[1] - p[1] * q[0],
13
+ ];
14
+ exports.cross = cross;
15
+ const norm = (p) => Math.hypot(p[0], p[1], p[2]);
16
+ const unit = (p) => {
17
+ const n = norm(p);
18
+ return n > 0 ? [p[0] / n, p[1] / n, p[2] / n] : [0, 0, 0];
19
+ };
20
+ /** Unit normal of a polygon by Newell's method (zero for a degenerate polygon). */
21
+ const polygonNormal = (points) => {
22
+ const n = [0, 0, 0];
23
+ points.forEach((p, i) => {
24
+ const q = points[(i + 1) % points.length];
25
+ n[0] += (p[1] - q[1]) * (p[2] + q[2]);
26
+ n[1] += (p[2] - q[2]) * (p[0] + q[0]);
27
+ n[2] += (p[0] - q[0]) * (p[1] + q[1]);
28
+ });
29
+ return unit(n);
30
+ };
31
+ exports.polygonNormal = polygonNormal;
32
+ /** The horizontal direction in a vertical plane of normal `n`, toward +X (+Y if along Y). */
33
+ const horizontalInPlane = (n) => {
34
+ const d = unit([-n[1], n[0], 0]);
35
+ const flip = Math.abs(d[0]) > fea_constant_1.VERTICAL_MEMBER_TOLERANCE ? d[0] < 0 : d[1] < 0;
36
+ return flip ? [-d[0], -d[1], -d[2]] : d;
37
+ };
38
+ exports.horizontalInPlane = horizontalInPlane;
39
+ /**
40
+ * Axes of a pier or spandrel (see `WallPier`, `WallSpandrel`).
41
+ *
42
+ * - Pier: 1 = +Z; 2 = global X rotated by `angle` about +Z, else the horizontal direction of
43
+ * the area with the largest horizontal extent (the first wins a tie), else global X; 3 = 1 × 2.
44
+ * - Spandrel: 1 = horizontal in the plane of its first area, toward +X (+Y for a plane parallel
45
+ * to Y), reversed by `reverse`; 2 = +Z; 3 = 1 × 2.
46
+ */
47
+ const wallAxes = (kind, shape, options) => {
48
+ const up = [0, 0, 1];
49
+ if (kind === "pier") {
50
+ let e2 = [1, 0, 0];
51
+ if (options.angle !== undefined) {
52
+ e2 = [Math.cos(options.angle), Math.sin(options.angle), 0];
53
+ }
54
+ else {
55
+ let best = 0;
56
+ for (const area of shape.areas) {
57
+ if (area.elements.length === 0)
58
+ continue;
59
+ const d = (0, exports.horizontalInPlane)((0, exports.polygonNormal)(area.elements[0]));
60
+ const s = area.elements.flat().map((p) => (0, exports.dot)(p, d));
61
+ const extent = Math.max(...s) - Math.min(...s);
62
+ if (extent > best) {
63
+ best = extent;
64
+ e2 = d;
65
+ }
66
+ }
67
+ }
68
+ return [up, e2, (0, exports.cross)(up, e2)];
69
+ }
70
+ const first = shape.areas.find((a) => a.elements.length > 0);
71
+ let e1 = first ? (0, exports.horizontalInPlane)((0, exports.polygonNormal)(first.elements[0])) : [1, 0, 0];
72
+ if (options.reverse)
73
+ e1 = [-e1[0], -e1[1], -e1[2]];
74
+ return [e1, up, (0, exports.cross)(e1, up)];
75
+ };
76
+ exports.wallAxes = wallAxes;
77
+ /** Smallest and largest coordinate along `e1` of every element corner and member end. */
78
+ const wallExtent = (shape, e1) => {
79
+ const s = [
80
+ ...shape.areas.flatMap((a) => a.elements.flat()),
81
+ ...shape.members.flatMap((m) => m.pieces.flat()),
82
+ ].map((p) => (0, exports.dot)(p, e1));
83
+ return { min: Math.min(...s), max: Math.max(...s) };
84
+ };
85
+ exports.wallExtent = wallExtent;
86
+ /** The distance within which a point counts as on a cut (see `WALL_CUT_TOLERANCE`). */
87
+ const wallTolerance = (extent) => fea_constant_1.WALL_CUT_TOLERANCE * Math.max(extent.max - extent.min, 1);
88
+ exports.wallTolerance = wallTolerance;
89
+ const range = (points, e1) => {
90
+ const s = points.map((p) => (0, exports.dot)(p, e1));
91
+ return { min: Math.min(...s), max: Math.max(...s) };
92
+ };
93
+ /** Whether anything of the shape lies on the negative / positive side touching the cut at s. */
94
+ const touching = (shape, e1, s, tol) => {
95
+ let negative = false;
96
+ let positive = false;
97
+ const check = (points) => {
98
+ const r = range(points, e1);
99
+ if (r.max - r.min <= tol)
100
+ return; // lies in the cut plane
101
+ if (Math.abs(r.max - s) <= tol)
102
+ negative = true;
103
+ if (Math.abs(r.min - s) <= tol)
104
+ positive = true;
105
+ };
106
+ shape.areas.forEach((a) => a.elements.forEach(check));
107
+ shape.members.forEach((m) => m.pieces.forEach(check));
108
+ return { negative, positive };
109
+ };
110
+ /**
111
+ * The cuts of a pier or spandrel, in order along axis 1.
112
+ *
113
+ * - Pier: at each elevation where one of its areas or members starts or ends, a `"top"` cut
114
+ * when something of the pier ends there from below and a `"bottom"` cut when something starts
115
+ * there going up (the top first); then each extra cut not at such an elevation, as `"cut"`.
116
+ * - Spandrel: `"left"` at its smallest coordinate, `"right"` at its largest, and each extra cut
117
+ * strictly between them as `"cut"`.
118
+ *
119
+ * @param extra - The extra cuts as coordinates along axis 1 (mm)
120
+ */
121
+ const wallCutPositions = (kind, shape, e1, extra = []) => {
122
+ const extent = (0, exports.wallExtent)(shape, e1);
123
+ const tol = (0, exports.wallTolerance)(extent);
124
+ const auto = [];
125
+ const addAuto = (s) => {
126
+ if (!auto.some((a) => Math.abs(a - s) <= tol))
127
+ auto.push(s);
128
+ };
129
+ if (kind === "pier") {
130
+ for (const area of shape.areas) {
131
+ if (area.elements.length === 0)
132
+ continue;
133
+ const r = range(area.elements.flat(), e1);
134
+ addAuto(r.min);
135
+ addAuto(r.max);
136
+ }
137
+ for (const member of shape.members) {
138
+ const r = range(member.pieces.flat(), e1);
139
+ addAuto(r.min);
140
+ addAuto(r.max);
141
+ }
142
+ }
143
+ else {
144
+ addAuto(extent.min);
145
+ addAuto(extent.max);
146
+ }
147
+ auto.sort((a, b) => a - b);
148
+ const cuts = [];
149
+ for (const s of auto) {
150
+ if (kind === "spandrel") {
151
+ cuts.push({ s, face: s === extent.min ? "left" : "right" });
152
+ continue;
153
+ }
154
+ const side = touching(shape, e1, s, tol);
155
+ if (side.negative)
156
+ cuts.push({ s, face: "top" });
157
+ if (side.positive)
158
+ cuts.push({ s, face: "bottom" });
159
+ }
160
+ extra.forEach((s, cut) => {
161
+ if (auto.some((a) => Math.abs(a - s) <= tol))
162
+ return;
163
+ if (cuts.some((c) => c.face === "cut" && Math.abs(c.s - s) <= tol))
164
+ return;
165
+ cuts.push({ s, face: "cut", cut });
166
+ });
167
+ // stable: a "top" stays before the "bottom" at the same level
168
+ return cuts.sort((a, b) => a.s - b.s);
169
+ };
170
+ exports.wallCutPositions = wallCutPositions;
171
+ /** Whether a face takes the elements on the negative side of its cut (below, or to the left). */
172
+ const fromNegativeSide = (face) => face === "top" || face === "right" || face === "cut";
173
+ exports.fromNegativeSide = fromNegativeSide;
174
+ /** Areas with a shell element on both sides of the cut at s (no mesh line there). */
175
+ const areasAcrossCut = (shape, e1, s, tol) => shape.areas
176
+ .filter((a) => a.elements.some((el) => {
177
+ const r = range(el, e1);
178
+ return r.min < s - tol && r.max > s + tol;
179
+ }))
180
+ .map((a) => a.areaId);
181
+ exports.areasAcrossCut = areasAcrossCut;
182
+ /** Whether some element or member of the shape reaches the cut at s. */
183
+ const reachesCut = (shape, e1, s, tol) => [...shape.areas.flatMap((a) => a.elements), ...shape.members.flatMap((m) => m.pieces)].some((points) => {
184
+ const r = range(points, e1);
185
+ return r.min <= s + tol && r.max >= s - tol;
186
+ });
187
+ exports.reachesCut = reachesCut;
188
+ //# sourceMappingURL=wall-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wall-geometry.js","sourceRoot":"","sources":["../../../../src/fea/analysis/post/wall-geometry.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.prepareAnalysisSystem = void 0;
4
- const frame_constant_1 = require("../../../core/constants/frame.constant");
4
+ const fea_constant_1 = require("../../../core/constants/fea.constant");
5
5
  const fea_error_1 = require("../../../core/errors/fea.error");
6
6
  const member_assembly_1 = require("../../frame/solver/member-assembly");
7
7
  const system_member_1 = require("../../frame/solver/system-member");
@@ -144,7 +144,7 @@ const prepareAnalysisSystem = (model) => {
144
144
  }
145
145
  }
146
146
  }
147
- const result = (0, skyline_1.skylineFactor)(K, frame_constant_1.SINGULARITY_TOLERANCE);
147
+ const result = (0, skyline_1.skylineFactor)(K, fea_constant_1.SINGULARITY_TOLERANCE);
148
148
  if (!result.ok) {
149
149
  const dof = free[result.failedPivot];
150
150
  (0, issues_1.throwIssues)([