@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,349 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.presentStripForces = exports.stripRawForces = exports.prepareStrips = exports.clipToQuad = exports.inverseBilinear = exports.STRIP_COMPONENTS = void 0;
4
+ const fea_constant_1 = require("../../../core/constants/fea.constant");
5
+ const shell_constant_1 = require("../../../core/constants/shell.constant");
6
+ const math_1 = require("../../../utils/math");
7
+ const quad_geometry_1 = require("../elements/quad-geometry");
8
+ const shell_forces_1 = require("./shell-forces");
9
+ /** The strip resultants, in the order of the raw values. */
10
+ exports.STRIP_COMPONENTS = ["P", "V", "M", "T", "Vp", "Mp"];
11
+ const [P, V, M, T, VP, MP] = [0, 1, 2, 3, 4, 5];
12
+ const RAW_LENGTH = 4 * shell_forces_1.SHELL_FORCE_COMPONENTS;
13
+ const FORCE_DECIMALS = 4;
14
+ const LENGTH_DECIMALS = 3;
15
+ /** 4-point Gauss–Legendre rule on −1 ≤ t ≤ 1. */
16
+ const GAUSS_4 = (() => {
17
+ const a = Math.sqrt(3 / 7 - (2 / 7) * Math.sqrt(6 / 5));
18
+ const b = Math.sqrt(3 / 7 + (2 / 7) * Math.sqrt(6 / 5));
19
+ const wa = (18 + Math.sqrt(30)) / 36;
20
+ const wb = (18 - Math.sqrt(30)) / 36;
21
+ return [
22
+ { t: -b, w: wb },
23
+ { t: -a, w: wa },
24
+ { t: a, w: wa },
25
+ { t: b, w: wb },
26
+ ];
27
+ })();
28
+ const sub = (p, q) => [p[0] - q[0], p[1] - q[1], p[2] - q[2]];
29
+ const dot = (p, q) => p[0] * q[0] + p[1] * q[1] + p[2] * q[2];
30
+ const cross = (p, q) => [
31
+ p[1] * q[2] - p[2] * q[1],
32
+ p[2] * q[0] - p[0] * q[2],
33
+ p[0] * q[1] - p[1] * q[0],
34
+ ];
35
+ const scale = (p, k) => [p[0] * k, p[1] * k, p[2] * k];
36
+ const add = (p, q) => [p[0] + q[0], p[1] + q[1], p[2] + q[2]];
37
+ const unit = (p) => scale(p, 1 / Math.hypot(p[0], p[1], p[2]));
38
+ /**
39
+ * Natural coordinates (ξ, η) of a point of the element plane, by Newton's method on the
40
+ * bilinear map (exact in one step for a parallelogram).
41
+ */
42
+ const inverseBilinear = (corners, x, y) => {
43
+ let xi = 0;
44
+ let eta = 0;
45
+ for (let k = 0; k < 25; k++) {
46
+ const { N, dXi, dEta } = (0, quad_geometry_1.bilinearShape)(xi, eta);
47
+ let rx = x;
48
+ let ry = y;
49
+ let xXi = 0;
50
+ let yXi = 0;
51
+ let xEta = 0;
52
+ let yEta = 0;
53
+ for (let i = 0; i < 4; i++) {
54
+ rx -= N[i] * corners[i][0];
55
+ ry -= N[i] * corners[i][1];
56
+ xXi += dXi[i] * corners[i][0];
57
+ yXi += dXi[i] * corners[i][1];
58
+ xEta += dEta[i] * corners[i][0];
59
+ yEta += dEta[i] * corners[i][1];
60
+ }
61
+ const det = xXi * yEta - xEta * yXi;
62
+ const dXiStep = (yEta * rx - xEta * ry) / det;
63
+ const dEtaStep = (-yXi * rx + xXi * ry) / det;
64
+ xi += dXiStep;
65
+ eta += dEtaStep;
66
+ if (Math.abs(dXiStep) + Math.abs(dEtaStep) < 1e-13)
67
+ break;
68
+ }
69
+ return [xi, eta];
70
+ };
71
+ exports.inverseBilinear = inverseBilinear;
72
+ /**
73
+ * The interval of the cut `c + s·d` (element-plane coordinates, mm) inside a convex quad with
74
+ * counter-clockwise corners, clipped to `lo ≤ s ≤ hi` (Cyrus–Beck). A cut lying along an edge,
75
+ * within `eps`, counts as inside.
76
+ *
77
+ * @returns `[from, to]`, or null when the cut misses the quad or touches it over less than `eps`
78
+ */
79
+ const clipToQuad = (corners, c, d, lo, hi, eps) => {
80
+ let from = lo;
81
+ let to = hi;
82
+ for (let i = 0; i < 4; i++) {
83
+ const p = corners[i];
84
+ const q = corners[(i + 1) % 4];
85
+ const ex = q[0] - p[0];
86
+ const ey = q[1] - p[1];
87
+ const length = Math.hypot(ex, ey);
88
+ const n = [-ey / length, ex / length]; // inward normal of a counter-clockwise quad
89
+ const distance = n[0] * (c[0] - p[0]) + n[1] * (c[1] - p[1]);
90
+ const rate = n[0] * d[0] + n[1] * d[1];
91
+ // inside where distance + s·rate ≥ 0
92
+ if (Math.abs(rate) * Math.max(Math.abs(lo), Math.abs(hi)) <= eps) {
93
+ if (distance < -eps)
94
+ return null;
95
+ continue;
96
+ }
97
+ const s = -distance / rate;
98
+ if (rate > 0)
99
+ from = Math.max(from, s);
100
+ else
101
+ to = Math.min(to, s);
102
+ }
103
+ return to - from > eps ? [from, to] : null;
104
+ };
105
+ exports.clipToQuad = clipToQuad;
106
+ /** The shell elements lying in a strip's plane (through `origin`, normal `n`). */
107
+ const planeElements = (shells, origin, n) => shells.flatMap((shell, index) => {
108
+ const { lambda, origin: centre, corners, offsets } = shell.element.axes;
109
+ const size = Math.max(...corners.map((p, i) => {
110
+ const q = corners[(i + 1) % 4];
111
+ return Math.hypot(q[0] - p[0], q[1] - p[1]);
112
+ }));
113
+ const tolerance = shell_constant_1.STRIP_PLANE_TOLERANCE * size;
114
+ const e1 = lambda[0];
115
+ const e2 = lambda[1];
116
+ const e3 = lambda[2];
117
+ // the element's corners in global axes, as it was built (mean plane plus warping offsets)
118
+ const inPlane = corners.every((p, i) => {
119
+ const point = add(add(add(centre, scale(e1, p[0])), scale(e2, p[1])), scale(e3, offsets[i]));
120
+ return Math.abs(dot(sub(point, origin), n)) <= tolerance;
121
+ });
122
+ if (!inPlane)
123
+ return [];
124
+ return [{ index, shell, size, sign: dot(e3, n) >= 0 ? 1 : -1 }];
125
+ });
126
+ /** Adds one Gauss point of the cut in one element to the station's coefficients. */
127
+ const addGaussPoint = (coef, element, axes, local, s, weight) => {
128
+ const { lambda, corners } = element.shell.element.axes;
129
+ const e1 = lambda[0];
130
+ const e2 = lambda[1];
131
+ const ca1 = dot(axes.a, e1);
132
+ const ca2 = dot(axes.a, e2);
133
+ const cb1 = dot(axes.b, e1);
134
+ const cb2 = dot(axes.b, e2);
135
+ // a·X·a and b·X·a of a symmetric tensor X with components 11, 22, 12 in element axes
136
+ const aa = [ca1 * ca1, ca2 * ca2, 2 * ca1 * ca2];
137
+ const ba = [cb1 * ca1, cb2 * ca2, cb1 * ca2 + cb2 * ca1];
138
+ const sign = element.sign;
139
+ const [xi, eta] = (0, exports.inverseBilinear)(corners, local[0], local[1]);
140
+ const shape = (0, quad_geometry_1.bilinearShape)(xi, eta);
141
+ const { dX, dY } = (0, quad_geometry_1.cartesianDerivatives)((0, quad_geometry_1.quadJacobian)(corners, xi, eta), shape);
142
+ for (let c = 0; c < 4; c++) {
143
+ const base = shell_forces_1.SHELL_FORCE_COMPONENTS * c;
144
+ const N = shape.N[c] * weight;
145
+ for (let j = 0; j < 3; j++) {
146
+ // membrane forces F11, F22, F12
147
+ coef[P][base + j] += aa[j] * N;
148
+ coef[VP][base + j] += ba[j] * N;
149
+ coef[MP][base + j] -= s * aa[j] * N;
150
+ // moments M11, M22, M12, about the strip normal
151
+ coef[M][base + 3 + j] += sign * aa[j] * N;
152
+ coef[T][base + 3 + j] += sign * ba[j] * N;
153
+ }
154
+ // Kirchhoff shear: V = −∫ ∂M_aa/∂a ds and T = ∫ (2·m_ab − s·∂M_aa/∂a) ds, on the bilinear
155
+ // moment field through the corner values (the transverse shear Q_a plus the edge forces of
156
+ // the twisting moment at the ends of each element's piece of the cut)
157
+ const slope = ca1 * dX[c] + ca2 * dY[c]; // ∂N_c/∂a
158
+ for (let j = 0; j < 3; j++) {
159
+ const dM = sign * aa[j] * slope * weight;
160
+ coef[V][base + 3 + j] -= dM;
161
+ coef[T][base + 3 + j] += sign * ba[j] * N - s * dM; // with the m_ab term above: 2·m_ab
162
+ }
163
+ }
164
+ };
165
+ /** The station's coefficients for one element, created on first use. */
166
+ const termFor = (terms, element) => {
167
+ let term = terms.get(element.index);
168
+ if (!term) {
169
+ term = {
170
+ shell: element.index,
171
+ coef: exports.STRIP_COMPONENTS.map(() => new Array(RAW_LENGTH).fill(0)),
172
+ };
173
+ terms.set(element.index, term);
174
+ }
175
+ return term.coef;
176
+ };
177
+ /** Element-plane coordinates of the cut point at offset `s` (mm). */
178
+ const localPoint = (element, centre, b, s) => {
179
+ const { lambda, origin } = element.shell.element.axes;
180
+ const relative = sub(add(centre, scale(b, s)), origin);
181
+ return [dot(relative, lambda[0]), dot(relative, lambda[1])];
182
+ };
183
+ /**
184
+ * Prepares one cut: the part of the line `centre + s·b`, −widthRight ≤ s ≤ widthLeft, on each
185
+ * element of the plane, and the Gauss points that integrate the element's force field there.
186
+ * Where elements overlap on the cut (a cut along a shared edge), each takes an equal share.
187
+ */
188
+ const prepareStation = (elements, centre, axes, widthLeft, widthRight) => {
189
+ const pieces = [];
190
+ for (const element of elements) {
191
+ const { lambda, origin, corners } = element.shell.element.axes;
192
+ const e1 = lambda[0];
193
+ const e2 = lambda[1];
194
+ const relative = sub(centre, origin);
195
+ const clipped = (0, exports.clipToQuad)(corners, [dot(relative, e1), dot(relative, e2)], [dot(axes.b, e1), dot(axes.b, e2)], -widthRight, widthLeft, fea_constant_1.AREA_GEOMETRY_TOLERANCE * element.size);
196
+ if (clipped)
197
+ pieces.push({ element, from: clipped[0], to: clipped[1] });
198
+ }
199
+ const full = widthLeft + widthRight;
200
+ const eps = fea_constant_1.AREA_GEOMETRY_TOLERANCE * Math.max(full, ...pieces.map((p) => p.element.size));
201
+ const breaks = [...new Set(pieces.flatMap((p) => [p.from, p.to]))].sort((u, v) => u - v);
202
+ const terms = new Map();
203
+ // covered sub-intervals, in order, with the elements over each
204
+ const covered = [];
205
+ for (let i = 0; i + 1 < breaks.length; i++) {
206
+ const [u, v] = [breaks[i], breaks[i + 1]];
207
+ if (v - u <= eps)
208
+ continue;
209
+ const middle = (u + v) / 2;
210
+ const on = pieces.filter((p) => p.from < middle && middle < p.to).map((p) => p.element);
211
+ if (on.length > 0)
212
+ covered.push({ u, v, on });
213
+ }
214
+ let width = 0;
215
+ for (const { u, v, on } of covered) {
216
+ width += v - u;
217
+ const half = (v - u) / 2;
218
+ const middle = (u + v) / 2;
219
+ for (const element of on) {
220
+ const coef = termFor(terms, element);
221
+ for (const { t, w } of GAUSS_4) {
222
+ const s = middle + half * t;
223
+ addGaussPoint(coef, element, axes, localPoint(element, centre, axes.b, s), s, (w * half) / on.length);
224
+ }
225
+ }
226
+ }
227
+ return { width, full: width >= full - eps, terms: [...terms.values()] };
228
+ };
229
+ /**
230
+ * Prepares every strip of a model that passed `validateModel`: its stations and, for each, the
231
+ * linear map from the shell elements' raw corner forces to the six resultants on the cut. The
232
+ * shell force field of each element is integrated on its own (no averaging between elements).
233
+ *
234
+ * @param strips - The model's strips
235
+ * @param shells - The analysed shell elements
236
+ * @returns The prepared strips, and a warning for each strip with stations not fully on shells
237
+ */
238
+ const prepareStrips = (strips, shells) => {
239
+ const warnings = [];
240
+ const prepared = strips.map((strip) => {
241
+ const n = unit(strip.normal ?? [0, 0, 1]);
242
+ const points = strip.points.map((p) => [p.x, p.y, p.z]);
243
+ const elements = planeElements(shells, points[0], n);
244
+ const stations = [];
245
+ let x0 = 0;
246
+ for (let k = 0; k + 1 < points.length; k++) {
247
+ const chord = sub(points[k + 1], points[k]);
248
+ const along = sub(chord, scale(n, dot(chord, n))); // in the strip plane
249
+ const length = Math.hypot(along[0], along[1], along[2]);
250
+ const a = scale(along, 1 / length);
251
+ const b = cross(n, a);
252
+ const count = strip.maxSpacing !== undefined
253
+ ? Math.max(1, Math.ceil(length / strip.maxSpacing - 1e-9))
254
+ : shell_constant_1.STRIP_DEFAULT_DIVISIONS;
255
+ for (let j = 0; j <= count; j++) {
256
+ const t = j / count;
257
+ const point = add(points[k], scale(chord, t));
258
+ stations.push({
259
+ x: x0 + t * length,
260
+ point,
261
+ segment: k,
262
+ ...prepareStation(elements, point, { a, b }, strip.widthLeft, strip.widthRight),
263
+ });
264
+ }
265
+ x0 += length;
266
+ }
267
+ const partial = stations.filter((st) => !st.full).length;
268
+ if (stations.every((st) => st.width === 0)) {
269
+ warnings.push({
270
+ reference: "Strip forces, shell coverage",
271
+ message: `Strip "${String(strip.id)}" crosses no shell element in its plane; all its forces are 0.`,
272
+ });
273
+ }
274
+ else if (partial > 0) {
275
+ warnings.push({
276
+ reference: "Strip forces, shell coverage",
277
+ message: `Strip "${String(strip.id)}": ${partial} of ${stations.length} stations are not fully on shell elements in its plane (an opening, a slab edge or a strip wider than the slab); their resultants cover the shells crossed and their per-width values use that covered width.`,
278
+ });
279
+ }
280
+ return { id: strip.id, stations };
281
+ });
282
+ return { strips: prepared, warnings };
283
+ };
284
+ exports.prepareStrips = prepareStrips;
285
+ /**
286
+ * Unrounded resultants [P, V, M, T, Vp, Mp] (N, N·mm) of each station of a prepared strip.
287
+ * Linear in `shellForces`, so they superpose like the shell forces.
288
+ *
289
+ * @param shellForces - Raw corner forces of every shell element (see `shellRawForces`)
290
+ */
291
+ const stripRawForces = (strip, shellForces) => strip.stations.map(({ terms }) => {
292
+ const out = [0, 0, 0, 0, 0, 0];
293
+ for (const { shell, coef } of terms) {
294
+ const raw = shellForces[shell];
295
+ for (let r = 0; r < 6; r++) {
296
+ let sum = 0;
297
+ for (let i = 0; i < RAW_LENGTH; i++)
298
+ sum += coef[r][i] * raw[i];
299
+ out[r] += sum;
300
+ }
301
+ }
302
+ return out;
303
+ });
304
+ exports.stripRawForces = stripRawForces;
305
+ const round = (value, decimals = FORCE_DECIMALS) => (0, math_1.roundToDecimalPlaces)(value, decimals) + 0; // + 0: no −0
306
+ /**
307
+ * The presented forces of one strip: totals in kN and kN·m, per-width values in kN/m and
308
+ * kN·m/m, and the max and min of each total along the strip.
309
+ *
310
+ * @param shellForces - Raw corner forces of every shell element, for one case or combination
311
+ */
312
+ const presentStripForces = (strip, shellForces) => {
313
+ const raw = (0, exports.stripRawForces)(strip, shellForces);
314
+ const stations = strip.stations.map((station, i) => {
315
+ const values = raw[i];
316
+ // N → kN for forces, N·mm → kN·m for moments
317
+ const totals = exports.STRIP_COMPONENTS.map((_, r) => r === M || r === T || r === MP ? values[r] * 1e-6 : values[r] * 1e-3);
318
+ const resultants = {};
319
+ const perWidth = {};
320
+ exports.STRIP_COMPONENTS.forEach((key, r) => {
321
+ resultants[key] = round(totals[r]);
322
+ // kN ÷ m and kN·m ÷ m; the width is in mm
323
+ perWidth[key] = station.width > 0 ? round(totals[r] / (station.width * 1e-3)) : 0;
324
+ });
325
+ return {
326
+ x: round(station.x, LENGTH_DECIMALS),
327
+ point: station.point.map((v) => round(v, LENGTH_DECIMALS)),
328
+ segment: station.segment,
329
+ width: round(station.width, LENGTH_DECIMALS),
330
+ ...resultants,
331
+ perWidth,
332
+ };
333
+ });
334
+ const extremes = {};
335
+ for (const key of exports.STRIP_COMPONENTS) {
336
+ let max = { value: stations[0][key], x: stations[0].x };
337
+ let min = max;
338
+ for (const station of stations) {
339
+ if (station[key] > max.value)
340
+ max = { value: station[key], x: station.x };
341
+ if (station[key] < min.value)
342
+ min = { value: station[key], x: station.x };
343
+ }
344
+ extremes[key] = { max, min };
345
+ }
346
+ return { stripId: strip.id, stations, extremes };
347
+ };
348
+ exports.presentStripForces = presentStripForces;
349
+ //# sourceMappingURL=strip-forces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-forces.js","sourceRoot":"","sources":["../../../../src/fea/shell/post/strip-forces.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,7 @@ import type { SystemShell } from "./system-shell";
13
13
  * @param shellsByArea - Element indices of each shell area
14
14
  * @param loads - The load case's area loads on shell areas
15
15
  * @param selfWeight - The load case's self-weight multiplier
16
+ * @returns The surface load of each shell element as a global vector (kN/m²); its corner `i`
17
+ * takes `p · 10⁻³ · cornerAreas[i]` (N)
16
18
  */
17
- export declare const addShellLoads: (F: number[], shells: SystemShell[], shellsByArea: Map<FeaId, number[]>, loads: AreaLoad[], selfWeight: number) => void;
19
+ export declare const addShellLoads: (F: number[], shells: SystemShell[], shellsByArea: Map<FeaId, number[]>, loads: AreaLoad[], selfWeight: number) => [number, number, number][];
@@ -19,6 +19,8 @@ const GLOBAL_DIRECTIONS = {
19
19
  * @param shellsByArea - Element indices of each shell area
20
20
  * @param loads - The load case's area loads on shell areas
21
21
  * @param selfWeight - The load case's self-weight multiplier
22
+ * @returns The surface load of each shell element as a global vector (kN/m²); its corner `i`
23
+ * takes `p · 10⁻³ · cornerAreas[i]` (N)
22
24
  */
23
25
  const addShellLoads = (F, shells, shellsByArea, loads, selfWeight) => {
24
26
  // kN/m² as a global vector per shell, then N at the corners
@@ -52,6 +54,7 @@ const addShellLoads = (F, shells, shellsByArea, loads, selfWeight) => {
52
54
  F[6 * node + k] += p[k] * 1e-3 * shell.cornerAreas[i];
53
55
  });
54
56
  });
57
+ return shellPressure;
55
58
  };
56
59
  exports.addShellLoads = addShellLoads;
57
60
  //# sourceMappingURL=shell-loads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shell-loads.js","sourceRoot":"","sources":["../../../../src/fea/shell/solver/shell-loads.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-loads.js","sourceRoot":"","sources":["../../../../src/fea/shell/solver/shell-loads.ts"],"names":[],"mappings":"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"}
@@ -55,3 +55,34 @@ export interface ShellArea {
55
55
  modifiers?: ShellModifiers;
56
56
  mesh?: ShellMesh;
57
57
  }
58
+ /** A point in global axes (mm). */
59
+ export interface StripPoint {
60
+ x: number;
61
+ y: number;
62
+ z: number;
63
+ }
64
+ /**
65
+ * A design strip across shell elements, drawn as a centreline polyline with a width on each
66
+ * side, for which `analyze` integrates the shell forces across the strip at stations along it
67
+ * (see `StripForces`). The strip lies in the plane through its points normal to `normal`, and
68
+ * picks up every shell element in that plane (each corner within `STRIP_PLANE_TOLERANCE` of the
69
+ * element's longest side from it); elements off the plane, such as walls, are ignored.
70
+ *
71
+ * Strip axes, per segment: 1 along the segment, 3 = `normal` (up for a floor slab), 2 = 3 × 1
72
+ * across the strip, pointing to its left seen from +3. A strip adds nothing to the analysis
73
+ * and changes no other result.
74
+ */
75
+ export interface ShellStrip {
76
+ id: FeaId;
77
+ /** Centreline points (at least 2), in order along the strip, in one plane normal to `normal`. */
78
+ points: StripPoint[];
79
+ widthLeft: number;
80
+ widthRight: number;
81
+ /** Strip axis 3 in global components; need not be unit. Default [0, 0, 1]. */
82
+ normal?: [number, number, number];
83
+ /**
84
+ * Largest distance between stations along a segment (mm). Default: each segment in
85
+ * `STRIP_DEFAULT_DIVISIONS` (20) equal parts.
86
+ */
87
+ maxSpacing?: number;
88
+ }
@@ -45,3 +45,57 @@ export interface FeaMesh {
45
45
  nodeIds: FeaId[];
46
46
  }[];
47
47
  }
48
+ /**
49
+ * Resultants on a strip's cut, in strip axes 1 (along), 2 (across, left) and 3 (normal), acting
50
+ * on the face whose outward normal is +1, as a member's internal forces:
51
+ *
52
+ * - `P` axial force along 1, positive in tension (kN)
53
+ * - `V` transverse shear along 3, `V = −dM/dx` as V2 of a member (kN)
54
+ * - `M` bending moment, positive sagging: tension on the −3 face (kN·m)
55
+ * - `T` torsion about 1, right-hand rule, including the moment of `V` about the centreline (kN·m)
56
+ * - `Vp` in-plane shear along 2 (kN)
57
+ * - `Mp` in-plane moment about 3, right-hand rule, positive with tension on the right (−2)
58
+ * side (kN·m)
59
+ */
60
+ export interface StripResultants {
61
+ P: number;
62
+ V: number;
63
+ M: number;
64
+ T: number;
65
+ Vp: number;
66
+ Mp: number;
67
+ }
68
+ /** A strip resultant. */
69
+ export type StripForceComponent = keyof StripResultants;
70
+ /** The resultants on one cut across a strip. */
71
+ export interface StripStation extends StripResultants {
72
+ /** Distance along the strip's centreline from its first point (mm). */
73
+ x: number;
74
+ /** The cut's centre on the centreline, global X, Y, Z (mm). */
75
+ point: [number, number, number];
76
+ /**
77
+ * Strip segment the cut is normal to (0 = first point to second). A bend has two stations at
78
+ * the same `x`: the end of one segment and the start of the next.
79
+ */
80
+ segment: number;
81
+ /** Length of the cut that lies on shells in the strip's plane (mm); the full width when covered. */
82
+ width: number;
83
+ /** The resultants divided by `width`: kN/m and kN·m/m; all 0 where `width` is 0. */
84
+ perWidth: StripResultants;
85
+ }
86
+ /** Max or min of a strip resultant along the strip, with the station's `x`. */
87
+ export interface StripExtremeValue {
88
+ value: number;
89
+ x: number;
90
+ }
91
+ /** Forces of one strip in one load case or combination. */
92
+ export interface StripForces {
93
+ stripId: FeaId;
94
+ /** In order along the strip: the stations of each segment, its end points included. */
95
+ stations: StripStation[];
96
+ /** Max and min of each total resultant over the stations. */
97
+ extremes: Record<StripForceComponent, {
98
+ max: StripExtremeValue;
99
+ min: StripExtremeValue;
100
+ }>;
101
+ }
@@ -1,5 +1,6 @@
1
1
  import { type FeaModelIssue } from "../../../core/errors/fea.error";
2
2
  import type { FeaId, FeaNode } from "../../shared/types/model.type";
3
+ import { type ShellMeshResult } from "../mesh/mesh-shells";
3
4
  import type { ShellArea } from "../types/model.type";
4
5
  /**
5
6
  * Checks each shell area on its own: `type`, `angle`, section, modifiers, mesh settings and its
@@ -16,6 +17,10 @@ export declare const validateShells: (shells: ShellArea[], nodeById: Map<FeaId,
16
17
  * Meshes the shell areas and reports those that cannot be meshed (see `meshShells`). Call it
17
18
  * only when every node and every shell is valid.
18
19
  *
19
- * @returns Code 329 for each area that cannot be meshed, with `shellId` and `field: "mesh"`
20
+ * @returns Code 329 for each area that cannot be meshed, with `shellId` and `field: "mesh"`,
21
+ * and the mesh itself
20
22
  */
21
- export declare const validateShellMesh: (nodes: FeaNode[], shells: ShellArea[]) => FeaModelIssue[];
23
+ export declare const validateShellMesh: (nodes: FeaNode[], shells: ShellArea[]) => {
24
+ issues: FeaModelIssue[];
25
+ mesh: ShellMeshResult;
26
+ };
@@ -96,8 +96,15 @@ exports.validateShells = validateShells;
96
96
  * Meshes the shell areas and reports those that cannot be meshed (see `meshShells`). Call it
97
97
  * only when every node and every shell is valid.
98
98
  *
99
- * @returns Code 329 for each area that cannot be meshed, with `shellId` and `field: "mesh"`
99
+ * @returns Code 329 for each area that cannot be meshed, with `shellId` and `field: "mesh"`,
100
+ * and the mesh itself
100
101
  */
101
- const validateShellMesh = (nodes, shells) => (0, mesh_shells_1.meshShells)(nodes, shells).problems.map((shellId) => (0, issues_1.modelIssue)(fea_error_1.FeaErrors.INVALID_SHELL_MESH, { shellId, field: "mesh" }));
102
+ const validateShellMesh = (nodes, shells) => {
103
+ const mesh = (0, mesh_shells_1.meshShells)(nodes, shells);
104
+ return {
105
+ issues: mesh.problems.map((shellId) => (0, issues_1.modelIssue)(fea_error_1.FeaErrors.INVALID_SHELL_MESH, { shellId, field: "mesh" })),
106
+ mesh,
107
+ };
108
+ };
102
109
  exports.validateShellMesh = validateShellMesh;
103
110
  //# sourceMappingURL=validate-shells.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-shells.js","sourceRoot":"","sources":["../../../../src/fea/shell/validation/validate-shells.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-shells.js","sourceRoot":"","sources":["../../../../src/fea/shell/validation/validate-shells.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type FeaModelIssue } from "../../../core/errors/fea.error";
2
+ import type { ShellStrip } from "../types/model.type";
3
+ /**
4
+ * Checks the model's strips: unique ids, finite points, widths, normal and spacing, and the
5
+ * geometry (at least 2 points in one plane normal to `normal`, no zero-length segment, no
6
+ * segment turning straight back, widths not negative and not both 0).
7
+ *
8
+ * @param strips - The model's strips
9
+ * @returns Every problem found (codes 303, 314 and 330), in model order, with `stripId`
10
+ */
11
+ export declare const validateStrips: (strips: ShellStrip[]) => FeaModelIssue[];