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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +44 -4
  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/constants/rc.constant.d.ts +7 -0
  6. package/dist/core/constants/rc.constant.js +20 -1
  7. package/dist/core/constants/rc.constant.js.map +1 -1
  8. package/dist/core/errors/frame-analysis.error.d.ts +33 -0
  9. package/dist/core/errors/frame-analysis.error.js +74 -0
  10. package/dist/core/errors/frame-analysis.error.js.map +1 -0
  11. package/dist/core/errors/rc-design.error.js +8 -0
  12. package/dist/core/errors/rc-design.error.js.map +1 -1
  13. package/dist/core/index.d.ts +7 -3
  14. package/dist/core/index.js +16 -1
  15. package/dist/core/index.js.map +1 -1
  16. package/dist/core/types/plate-jacketing.type.d.ts +37 -0
  17. package/dist/core/types/plate-jacketing.type.js +8 -0
  18. package/dist/core/types/plate-jacketing.type.js.map +1 -1
  19. package/dist/core/types/section-properties.type.d.ts +13 -0
  20. package/dist/core/types/section-properties.type.js +3 -0
  21. package/dist/core/types/section-properties.type.js.map +1 -0
  22. package/dist/esm/core/constants/frame.constant.js +15 -0
  23. package/dist/esm/core/constants/frame.constant.js.map +1 -0
  24. package/dist/esm/core/constants/rc.constant.js +63 -0
  25. package/dist/esm/core/constants/rc.constant.js.map +1 -0
  26. package/dist/esm/core/errors/frame-analysis.error.js +70 -0
  27. package/dist/esm/core/errors/frame-analysis.error.js.map +1 -0
  28. package/dist/esm/core/errors/rc-design.error.js +64 -0
  29. package/dist/esm/core/errors/rc-design.error.js.map +1 -0
  30. package/dist/esm/core/index.js +9 -0
  31. package/dist/esm/core/index.js.map +1 -0
  32. package/dist/esm/core/types/output-message.type.js +2 -0
  33. package/dist/esm/core/types/output-message.type.js.map +1 -0
  34. package/dist/esm/core/types/plate-jacketing.type.js +18 -0
  35. package/dist/esm/core/types/plate-jacketing.type.js.map +1 -0
  36. package/dist/esm/core/types/rc-beam.type.js +11 -0
  37. package/dist/esm/core/types/rc-beam.type.js.map +1 -0
  38. package/dist/esm/core/types/section-properties.type.js +2 -0
  39. package/dist/esm/core/types/section-properties.type.js.map +1 -0
  40. package/dist/esm/core/types/unit.type.js +2 -0
  41. package/dist/esm/core/types/unit.type.js.map +1 -0
  42. package/dist/esm/fea/frame/elements/beam-3d-stiffness.js +84 -0
  43. package/dist/esm/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
  44. package/dist/esm/fea/frame/elements/fixed-end-forces.js +75 -0
  45. package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -0
  46. package/dist/esm/fea/frame/elements/static-condensation.js +55 -0
  47. package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -0
  48. package/dist/esm/fea/frame/index.js +6 -0
  49. package/dist/esm/fea/frame/index.js.map +1 -0
  50. package/dist/esm/fea/frame/post/demand-envelope.js +97 -0
  51. package/dist/esm/fea/frame/post/demand-envelope.js.map +1 -0
  52. package/dist/esm/fea/frame/post/envelope.js +59 -0
  53. package/dist/esm/fea/frame/post/envelope.js.map +1 -0
  54. package/dist/esm/fea/frame/post/member-diagram.js +332 -0
  55. package/dist/esm/fea/frame/post/member-diagram.js.map +1 -0
  56. package/dist/esm/fea/frame/post/present-state.js +106 -0
  57. package/dist/esm/fea/frame/post/present-state.js.map +1 -0
  58. package/dist/esm/fea/frame/solver/analyze-frame.js +123 -0
  59. package/dist/esm/fea/frame/solver/analyze-frame.js.map +1 -0
  60. package/dist/esm/fea/frame/solver/boundary-conditions.js +33 -0
  61. package/dist/esm/fea/frame/solver/boundary-conditions.js.map +1 -0
  62. package/dist/esm/fea/frame/solver/combinations.js +69 -0
  63. package/dist/esm/fea/frame/solver/combinations.js.map +1 -0
  64. package/dist/esm/fea/frame/solver/frame-system.js +122 -0
  65. package/dist/esm/fea/frame/solver/frame-system.js.map +1 -0
  66. package/dist/esm/fea/frame/solver/global-assembly.js +27 -0
  67. package/dist/esm/fea/frame/solver/global-assembly.js.map +1 -0
  68. package/dist/esm/fea/frame/solver/load-case-solver.js +119 -0
  69. package/dist/esm/fea/frame/solver/load-case-solver.js.map +1 -0
  70. package/dist/esm/fea/frame/transformation/coordinate-transform.js +71 -0
  71. package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -0
  72. package/dist/esm/fea/frame/types/model.type.js +2 -0
  73. package/dist/esm/fea/frame/types/model.type.js.map +1 -0
  74. package/dist/esm/fea/frame/types/results.type.js +2 -0
  75. package/dist/esm/fea/frame/types/results.type.js.map +1 -0
  76. package/dist/esm/fea/frame/validation/validate-model.js +292 -0
  77. package/dist/esm/fea/frame/validation/validate-model.js.map +1 -0
  78. package/dist/esm/fea/index.js +3 -0
  79. package/dist/esm/fea/index.js.map +1 -0
  80. package/dist/esm/index.js +10 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/package.json +1 -0
  83. package/dist/esm/rc/general.js +32 -0
  84. package/dist/esm/rc/general.js.map +1 -0
  85. package/dist/esm/rc/index.js +5 -0
  86. package/dist/esm/rc/index.js.map +1 -0
  87. package/dist/esm/rc/rc-bar-layout.js +89 -0
  88. package/dist/esm/rc/rc-bar-layout.js.map +1 -0
  89. package/dist/esm/rc/rc-beam-design.js +320 -0
  90. package/dist/esm/rc/rc-beam-design.js.map +1 -0
  91. package/dist/esm/rc/rc-section-properties.js +55 -0
  92. package/dist/esm/rc/rc-section-properties.js.map +1 -0
  93. package/dist/esm/strengthening/index.js +4 -0
  94. package/dist/esm/strengthening/index.js.map +1 -0
  95. package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js +338 -0
  96. package/dist/esm/strengthening/rc-beam-plate-interface-bolts.js.map +1 -0
  97. package/dist/esm/strengthening/rc-beam-side-plate-shear.js +381 -0
  98. package/dist/esm/strengthening/rc-beam-side-plate-shear.js.map +1 -0
  99. package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js +90 -0
  100. package/dist/esm/strengthening/rc-beam-steel-plate-jacketing.js.map +1 -0
  101. package/dist/esm/utils/index.js +5 -0
  102. package/dist/esm/utils/index.js.map +1 -0
  103. package/dist/esm/utils/math.js +30 -0
  104. package/dist/esm/utils/math.js.map +1 -0
  105. package/dist/esm/utils/matrix.js +145 -0
  106. package/dist/esm/utils/matrix.js.map +1 -0
  107. package/dist/esm/utils/merge-warning.js +11 -0
  108. package/dist/esm/utils/merge-warning.js.map +1 -0
  109. package/dist/esm/utils/skyline.js +151 -0
  110. package/dist/esm/utils/skyline.js.map +1 -0
  111. package/dist/fea/frame/elements/beam-3d-stiffness.d.ts +29 -0
  112. package/dist/fea/frame/elements/beam-3d-stiffness.js +90 -0
  113. package/dist/fea/frame/elements/beam-3d-stiffness.js.map +1 -0
  114. package/dist/fea/frame/elements/fixed-end-forces.d.ts +22 -0
  115. package/dist/fea/frame/elements/fixed-end-forces.js +79 -0
  116. package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -0
  117. package/dist/fea/frame/elements/static-condensation.d.ts +19 -0
  118. package/dist/fea/frame/elements/static-condensation.js +59 -0
  119. package/dist/fea/frame/elements/static-condensation.js.map +1 -0
  120. package/dist/fea/frame/index.d.ts +9 -0
  121. package/dist/fea/frame/index.js +16 -0
  122. package/dist/fea/frame/index.js.map +1 -0
  123. package/dist/fea/frame/post/demand-envelope.d.ts +36 -0
  124. package/dist/fea/frame/post/demand-envelope.js +101 -0
  125. package/dist/fea/frame/post/demand-envelope.js.map +1 -0
  126. package/dist/fea/frame/post/envelope.d.ts +8 -0
  127. package/dist/fea/frame/post/envelope.js +63 -0
  128. package/dist/fea/frame/post/envelope.js.map +1 -0
  129. package/dist/fea/frame/post/member-diagram.d.ts +26 -0
  130. package/dist/fea/frame/post/member-diagram.js +336 -0
  131. package/dist/fea/frame/post/member-diagram.js.map +1 -0
  132. package/dist/fea/frame/post/present-state.d.ts +19 -0
  133. package/dist/fea/frame/post/present-state.js +111 -0
  134. package/dist/fea/frame/post/present-state.js.map +1 -0
  135. package/dist/fea/frame/solver/analyze-frame.d.ts +67 -0
  136. package/dist/fea/frame/solver/analyze-frame.js +128 -0
  137. package/dist/fea/frame/solver/analyze-frame.js.map +1 -0
  138. package/dist/fea/frame/solver/boundary-conditions.d.ts +14 -0
  139. package/dist/fea/frame/solver/boundary-conditions.js +37 -0
  140. package/dist/fea/frame/solver/boundary-conditions.js.map +1 -0
  141. package/dist/fea/frame/solver/combinations.d.ts +11 -0
  142. package/dist/fea/frame/solver/combinations.js +73 -0
  143. package/dist/fea/frame/solver/combinations.js.map +1 -0
  144. package/dist/fea/frame/solver/frame-system.d.ts +42 -0
  145. package/dist/fea/frame/solver/frame-system.js +126 -0
  146. package/dist/fea/frame/solver/frame-system.js.map +1 -0
  147. package/dist/fea/frame/solver/global-assembly.d.ts +17 -0
  148. package/dist/fea/frame/solver/global-assembly.js +33 -0
  149. package/dist/fea/frame/solver/global-assembly.js.map +1 -0
  150. package/dist/fea/frame/solver/load-case-solver.d.ts +34 -0
  151. package/dist/fea/frame/solver/load-case-solver.js +124 -0
  152. package/dist/fea/frame/solver/load-case-solver.js.map +1 -0
  153. package/dist/fea/frame/transformation/coordinate-transform.d.ts +21 -0
  154. package/dist/fea/frame/transformation/coordinate-transform.js +76 -0
  155. package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -0
  156. package/dist/fea/frame/types/model.type.d.ts +112 -0
  157. package/dist/fea/frame/types/model.type.js +3 -0
  158. package/dist/fea/frame/types/model.type.js.map +1 -0
  159. package/dist/fea/frame/types/results.type.d.ts +134 -0
  160. package/dist/fea/frame/types/results.type.js +3 -0
  161. package/dist/fea/frame/types/results.type.js.map +1 -0
  162. package/dist/fea/frame/validation/validate-model.d.ts +18 -0
  163. package/dist/fea/frame/validation/validate-model.js +298 -0
  164. package/dist/fea/frame/validation/validate-model.js.map +1 -0
  165. package/dist/fea/index.d.ts +1 -0
  166. package/dist/fea/index.js +19 -0
  167. package/dist/fea/index.js.map +1 -0
  168. package/dist/index.d.ts +9 -5
  169. package/dist/index.js +44 -1
  170. package/dist/index.js.map +1 -1
  171. package/dist/rc/index.d.ts +2 -0
  172. package/dist/rc/index.js +3 -1
  173. package/dist/rc/index.js.map +1 -1
  174. package/dist/rc/rc-section-properties.d.ts +35 -0
  175. package/dist/rc/rc-section-properties.js +59 -0
  176. package/dist/rc/rc-section-properties.js.map +1 -0
  177. package/dist/strengthening/index.d.ts +1 -0
  178. package/dist/strengthening/index.js +5 -1
  179. package/dist/strengthening/index.js.map +1 -1
  180. package/dist/strengthening/rc-beam-side-plate-shear.d.ts +254 -0
  181. package/dist/strengthening/rc-beam-side-plate-shear.js +420 -0
  182. package/dist/strengthening/rc-beam-side-plate-shear.js.map +1 -0
  183. package/dist/utils/index.d.ts +4 -0
  184. package/dist/utils/index.js +19 -1
  185. package/dist/utils/index.js.map +1 -1
  186. package/dist/utils/matrix.d.ts +45 -0
  187. package/dist/utils/matrix.js +157 -0
  188. package/dist/utils/matrix.js.map +1 -0
  189. package/dist/utils/skyline.d.ts +49 -0
  190. package/dist/utils/skyline.js +161 -0
  191. package/dist/utils/skyline.js.map +1 -0
  192. package/package.json +20 -2
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.solveLinearSystem = exports.choleskySolve = exports.choleskySolveFactored = exports.choleskyFactor = exports.matVec = exports.matMul = exports.transpose = exports.identity = exports.zeros = void 0;
4
+ /** Returns an m×n zero matrix. */
5
+ const zeros = (m, n) => Array.from({ length: m }, () => new Array(n).fill(0));
6
+ exports.zeros = zeros;
7
+ /** Returns the n×n identity matrix. */
8
+ const identity = (n) => {
9
+ const I = (0, exports.zeros)(n, n);
10
+ for (let i = 0; i < n; i++)
11
+ I[i][i] = 1;
12
+ return I;
13
+ };
14
+ exports.identity = identity;
15
+ /** Returns the transpose of a matrix. */
16
+ const transpose = (A) => {
17
+ const m = A.length;
18
+ const n = A[0].length;
19
+ const T = (0, exports.zeros)(n, m);
20
+ for (let i = 0; i < m; i++) {
21
+ for (let j = 0; j < n; j++)
22
+ T[j][i] = A[i][j];
23
+ }
24
+ return T;
25
+ };
26
+ exports.transpose = transpose;
27
+ /** Returns the product A·B of an m×n and an n×p matrix. */
28
+ const matMul = (A, B) => {
29
+ const m = A.length;
30
+ const n = B.length;
31
+ const p = B[0].length;
32
+ const C = (0, exports.zeros)(m, p);
33
+ for (let i = 0; i < m; i++) {
34
+ for (let k = 0; k < n; k++) {
35
+ const aik = A[i][k];
36
+ if (aik === 0)
37
+ continue;
38
+ for (let j = 0; j < p; j++)
39
+ C[i][j] += aik * B[k][j];
40
+ }
41
+ }
42
+ return C;
43
+ };
44
+ exports.matMul = matMul;
45
+ /** Returns the product A·x of an m×n matrix and an n-vector. */
46
+ const matVec = (A, x) => A.map((row) => row.reduce((sum, a, j) => sum + a * x[j], 0));
47
+ exports.matVec = matVec;
48
+ /**
49
+ * Cholesky factorisation A = L·Lᵀ of a symmetric positive-definite matrix.
50
+ *
51
+ * @param A - Symmetric matrix (only the lower triangle is read)
52
+ * @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
53
+ * @returns The lower-triangular factor L, or `null` when A is not positive definite (singular or a mechanism)
54
+ */
55
+ const choleskyFactor = (A, tolerance = 1e-12) => {
56
+ const n = A.length;
57
+ const L = (0, exports.zeros)(n, n);
58
+ for (let i = 0; i < n; i++) {
59
+ for (let j = 0; j <= i; j++) {
60
+ let sum = A[i][j];
61
+ for (let k = 0; k < j; k++)
62
+ sum -= L[i][k] * L[j][k];
63
+ if (i === j) {
64
+ if (!(sum > tolerance * A[i][i]))
65
+ return null;
66
+ L[i][i] = Math.sqrt(sum);
67
+ }
68
+ else {
69
+ L[i][j] = sum / L[j][j];
70
+ }
71
+ }
72
+ }
73
+ return L;
74
+ };
75
+ exports.choleskyFactor = choleskyFactor;
76
+ /**
77
+ * Solves A·x = b from the Cholesky factor L of A (forward then back substitution), so one
78
+ * factorisation serves any number of right-hand sides.
79
+ *
80
+ * @param L - Lower-triangular factor from `choleskyFactor`
81
+ * @param b - Right-hand side
82
+ */
83
+ const choleskySolveFactored = (L, b) => {
84
+ const n = L.length;
85
+ const y = new Array(n).fill(0);
86
+ for (let i = 0; i < n; i++) {
87
+ let sum = b[i];
88
+ for (let k = 0; k < i; k++)
89
+ sum -= L[i][k] * y[k];
90
+ y[i] = sum / L[i][i];
91
+ }
92
+ const x = new Array(n).fill(0);
93
+ for (let i = n - 1; i >= 0; i--) {
94
+ let sum = y[i];
95
+ for (let k = i + 1; k < n; k++)
96
+ sum -= L[k][i] * x[k];
97
+ x[i] = sum / L[i][i];
98
+ }
99
+ return x;
100
+ };
101
+ exports.choleskySolveFactored = choleskySolveFactored;
102
+ /**
103
+ * Solves A·x = b for a symmetric positive-definite A by Cholesky factorisation.
104
+ *
105
+ * @param A - Symmetric matrix (only the lower triangle is read)
106
+ * @param b - Right-hand side
107
+ * @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
108
+ * @returns The solution, or `null` when A is not positive definite (singular or a mechanism)
109
+ */
110
+ const choleskySolve = (A, b, tolerance = 1e-12) => {
111
+ const L = (0, exports.choleskyFactor)(A, tolerance);
112
+ return L ? (0, exports.choleskySolveFactored)(L, b) : null;
113
+ };
114
+ exports.choleskySolve = choleskySolve;
115
+ /**
116
+ * Solves A·X = B for a general square A by Gaussian elimination with partial pivoting.
117
+ *
118
+ * @param A - n×n matrix
119
+ * @param B - n×p right-hand-side matrix
120
+ * @param tolerance - A pivot at or below `tolerance` times the largest entry of A is treated as zero
121
+ * @returns The n×p solution, or `null` when A is singular
122
+ */
123
+ const solveLinearSystem = (A, B, tolerance = 1e-12) => {
124
+ const n = A.length;
125
+ const p = B[0].length;
126
+ const M = A.map((row, i) => [...row, ...B[i]]);
127
+ const scale = Math.max(...A.map((row) => Math.max(...row.map(Math.abs))));
128
+ for (let col = 0; col < n; col++) {
129
+ let pivot = col;
130
+ for (let r = col + 1; r < n; r++) {
131
+ if (Math.abs(M[r][col]) > Math.abs(M[pivot][col]))
132
+ pivot = r;
133
+ }
134
+ if (!(Math.abs(M[pivot][col]) > tolerance * scale))
135
+ return null;
136
+ [M[col], M[pivot]] = [M[pivot], M[col]];
137
+ for (let r = col + 1; r < n; r++) {
138
+ const factor = M[r][col] / M[col][col];
139
+ if (factor === 0)
140
+ continue;
141
+ for (let c = col; c < n + p; c++)
142
+ M[r][c] -= factor * M[col][c];
143
+ }
144
+ }
145
+ const X = (0, exports.zeros)(n, p);
146
+ for (let c = 0; c < p; c++) {
147
+ for (let i = n - 1; i >= 0; i--) {
148
+ let sum = M[i][n + c];
149
+ for (let k = i + 1; k < n; k++)
150
+ sum -= M[i][k] * X[k][c];
151
+ X[i][c] = sum / M[i][i];
152
+ }
153
+ }
154
+ return X;
155
+ };
156
+ exports.solveLinearSystem = solveLinearSystem;
157
+ //# sourceMappingURL=matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matrix.js","sourceRoot":"","sources":["../../src/utils/matrix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Symmetric matrix in skyline (variable-band, column profile) storage: column `j` holds rows
3
+ * `first[j]` … `j` of the upper triangle, so memory follows the band of each column instead of
4
+ * n². Cholesky factorisation stays inside this profile.
5
+ */
6
+ export interface SkylineMatrix {
7
+ n: number;
8
+ /** First stored row of each column. */
9
+ first: Int32Array;
10
+ /** `columns[j][i − first[j]]` = A[i][j] for `first[j] ≤ i ≤ j`. */
11
+ columns: Float64Array[];
12
+ }
13
+ /** Creates a zero skyline matrix with the given first row of each column (`first[j] ≤ j`). */
14
+ export declare const createSkyline: (first: ArrayLike<number>) => SkylineMatrix;
15
+ /** Adds `value` to A[i][j] (and so to A[j][i]); the entry must lie inside the profile. */
16
+ export declare const skylineAdd: (S: SkylineMatrix, i: number, j: number, value: number) => void;
17
+ /** Reads A[i][j] (0 outside the profile). */
18
+ export declare const skylineGet: (S: SkylineMatrix, i: number, j: number) => number;
19
+ /** Number of stored entries, a measure of memory and of factorisation work. */
20
+ export declare const skylineSize: (S: SkylineMatrix) => number;
21
+ /**
22
+ * Factorises a symmetric positive-definite skyline matrix in place as A = Uᵀ·U (U upper
23
+ * triangular, same profile).
24
+ *
25
+ * @param S - Matrix, overwritten by U
26
+ * @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
27
+ * @returns `{ ok: true }`, or `{ ok: false, failedPivot }` with the index of the first pivot that
28
+ * failed (A is singular or indefinite there — for a structure, a mechanism involving that DOF)
29
+ */
30
+ export declare const skylineFactor: (S: SkylineMatrix, tolerance?: number) => {
31
+ ok: true;
32
+ } | {
33
+ ok: false;
34
+ failedPivot: number;
35
+ };
36
+ /**
37
+ * Solves A·x = b from the factor produced by `skylineFactor` (forward then back substitution).
38
+ * One factorisation serves any number of right-hand sides.
39
+ */
40
+ export declare const skylineSolve: (U: SkylineMatrix, b: ArrayLike<number>) => number[];
41
+ /**
42
+ * Reverse Cuthill–McKee ordering of a graph, which keeps connected vertices close together and
43
+ * so narrows the band of the matrix built on it. Each connected component starts from a
44
+ * pseudo-peripheral vertex.
45
+ *
46
+ * @param adjacency - Neighbours of each vertex (undirected)
47
+ * @returns The vertices in their new order (`order[k]` = original index of the k-th vertex)
48
+ */
49
+ export declare const reverseCuthillMcKee: (adjacency: number[][]) => number[];
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reverseCuthillMcKee = exports.skylineSolve = exports.skylineFactor = exports.skylineSize = exports.skylineGet = exports.skylineAdd = exports.createSkyline = void 0;
4
+ /** Creates a zero skyline matrix with the given first row of each column (`first[j] ≤ j`). */
5
+ const createSkyline = (first) => {
6
+ const n = first.length;
7
+ const firstRows = Int32Array.from(first);
8
+ const columns = Array.from({ length: n }, (_, j) => new Float64Array(j - firstRows[j] + 1));
9
+ return { n, first: firstRows, columns };
10
+ };
11
+ exports.createSkyline = createSkyline;
12
+ /** Adds `value` to A[i][j] (and so to A[j][i]); the entry must lie inside the profile. */
13
+ const skylineAdd = (S, i, j, value) => {
14
+ const row = Math.min(i, j);
15
+ const col = Math.max(i, j);
16
+ const offset = row - S.first[col];
17
+ if (offset < 0)
18
+ throw new Error(`Skyline entry (${row}, ${col}) is outside the profile.`);
19
+ S.columns[col][offset] += value;
20
+ };
21
+ exports.skylineAdd = skylineAdd;
22
+ /** Reads A[i][j] (0 outside the profile). */
23
+ const skylineGet = (S, i, j) => {
24
+ const row = Math.min(i, j);
25
+ const col = Math.max(i, j);
26
+ const offset = row - S.first[col];
27
+ return offset < 0 ? 0 : S.columns[col][offset];
28
+ };
29
+ exports.skylineGet = skylineGet;
30
+ /** Number of stored entries, a measure of memory and of factorisation work. */
31
+ const skylineSize = (S) => S.columns.reduce((sum, column) => sum + column.length, 0);
32
+ exports.skylineSize = skylineSize;
33
+ /**
34
+ * Factorises a symmetric positive-definite skyline matrix in place as A = Uᵀ·U (U upper
35
+ * triangular, same profile).
36
+ *
37
+ * @param S - Matrix, overwritten by U
38
+ * @param tolerance - A pivot at or below `tolerance` times its own diagonal term is treated as zero
39
+ * @returns `{ ok: true }`, or `{ ok: false, failedPivot }` with the index of the first pivot that
40
+ * failed (A is singular or indefinite there — for a structure, a mechanism involving that DOF)
41
+ */
42
+ const skylineFactor = (S, tolerance = 1e-12) => {
43
+ const { n, first, columns } = S;
44
+ for (let j = 0; j < n; j++) {
45
+ const colJ = columns[j];
46
+ const fj = first[j];
47
+ for (let i = fj; i < j; i++) {
48
+ const colI = columns[i];
49
+ const fi = first[i];
50
+ const k0 = Math.max(fi, fj);
51
+ let sum = colJ[i - fj];
52
+ for (let k = k0; k < i; k++)
53
+ sum -= colI[k - fi] * colJ[k - fj];
54
+ colJ[i - fj] = sum / colI[i - fi];
55
+ }
56
+ const diagonal = colJ[j - fj];
57
+ let sum = diagonal;
58
+ for (let k = fj; k < j; k++)
59
+ sum -= colJ[k - fj] * colJ[k - fj];
60
+ if (!(sum > tolerance * diagonal))
61
+ return { ok: false, failedPivot: j };
62
+ colJ[j - fj] = Math.sqrt(sum);
63
+ }
64
+ return { ok: true };
65
+ };
66
+ exports.skylineFactor = skylineFactor;
67
+ /**
68
+ * Solves A·x = b from the factor produced by `skylineFactor` (forward then back substitution).
69
+ * One factorisation serves any number of right-hand sides.
70
+ */
71
+ const skylineSolve = (U, b) => {
72
+ const { n, first, columns } = U;
73
+ const y = Array.from(b);
74
+ // Uᵀ·y = b
75
+ for (let j = 0; j < n; j++) {
76
+ const col = columns[j];
77
+ const fj = first[j];
78
+ let sum = y[j];
79
+ for (let k = fj; k < j; k++)
80
+ sum -= col[k - fj] * y[k];
81
+ y[j] = sum / col[j - fj];
82
+ }
83
+ // U·x = y
84
+ for (let j = n - 1; j >= 0; j--) {
85
+ const col = columns[j];
86
+ const fj = first[j];
87
+ y[j] /= col[j - fj];
88
+ const xj = y[j];
89
+ for (let k = fj; k < j; k++)
90
+ y[k] -= col[k - fj] * xj;
91
+ }
92
+ return y;
93
+ };
94
+ exports.skylineSolve = skylineSolve;
95
+ /**
96
+ * Reverse Cuthill–McKee ordering of a graph, which keeps connected vertices close together and
97
+ * so narrows the band of the matrix built on it. Each connected component starts from a
98
+ * pseudo-peripheral vertex.
99
+ *
100
+ * @param adjacency - Neighbours of each vertex (undirected)
101
+ * @returns The vertices in their new order (`order[k]` = original index of the k-th vertex)
102
+ */
103
+ const reverseCuthillMcKee = (adjacency) => {
104
+ const n = adjacency.length;
105
+ const degree = adjacency.map((neighbours) => neighbours.length);
106
+ const visited = new Uint8Array(n);
107
+ const order = [];
108
+ /** Breadth-first levels from `start`, within unvisited vertices. */
109
+ const levels = (start) => {
110
+ const level = new Int32Array(n).fill(-1);
111
+ level[start] = 0;
112
+ const queue = [start];
113
+ let last = start;
114
+ for (let q = 0; q < queue.length; q++) {
115
+ const v = queue[q];
116
+ for (const w of adjacency[v]) {
117
+ if (!visited[w] && level[w] < 0) {
118
+ level[w] = level[v] + 1;
119
+ queue.push(w);
120
+ if (level[w] > level[last] || (level[w] === level[last] && degree[w] < degree[last])) {
121
+ last = w;
122
+ }
123
+ }
124
+ }
125
+ }
126
+ return { depth: level[last], last };
127
+ };
128
+ const byDegree = Array.from({ length: n }, (_, i) => i).sort((a, b) => degree[a] - degree[b]);
129
+ for (const seed of byDegree) {
130
+ if (visited[seed])
131
+ continue;
132
+ // pseudo-peripheral start: move to the far end of the BFS until the depth stops growing
133
+ let start = seed;
134
+ let { depth, last } = levels(start);
135
+ for (let iteration = 0; iteration < 8; iteration++) {
136
+ const next = levels(last);
137
+ if (next.depth <= depth)
138
+ break;
139
+ start = last;
140
+ depth = next.depth;
141
+ last = next.last;
142
+ }
143
+ const component = [start];
144
+ visited[start] = 1;
145
+ for (let q = 0; q < component.length; q++) {
146
+ const neighbours = adjacency[component[q]]
147
+ .filter((w) => !visited[w])
148
+ .sort((a, b) => degree[a] - degree[b]);
149
+ for (const w of neighbours) {
150
+ if (!visited[w]) {
151
+ visited[w] = 1;
152
+ component.push(w);
153
+ }
154
+ }
155
+ }
156
+ order.push(...component);
157
+ }
158
+ return order.reverse();
159
+ };
160
+ exports.reverseCuthillMcKee = reverseCuthillMcKee;
161
+ //# sourceMappingURL=skyline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skyline.js","sourceRoot":"","sources":["../../src/utils/skyline.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,28 +1,46 @@
1
1
  {
2
2
  "name": "@theerapat-s28/ts-structural-eng-tools",
3
- "version": "1.4.0",
3
+ "version": "2.0.1",
4
4
  "description": "TypeScript structural-engineering helper functions and beam design utilities",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "module": "dist/esm/index.js",
8
+ "sideEffects": false,
7
9
  "exports": {
8
10
  ".": {
9
11
  "types": "./dist/index.d.ts",
12
+ "import": "./dist/esm/index.js",
13
+ "require": "./dist/index.js",
10
14
  "default": "./dist/index.js"
11
15
  },
12
16
  "./rc": {
13
17
  "types": "./dist/rc/index.d.ts",
18
+ "import": "./dist/esm/rc/index.js",
19
+ "require": "./dist/rc/index.js",
14
20
  "default": "./dist/rc/index.js"
15
21
  },
16
22
  "./strengthening": {
17
23
  "types": "./dist/strengthening/index.d.ts",
24
+ "import": "./dist/esm/strengthening/index.js",
25
+ "require": "./dist/strengthening/index.js",
18
26
  "default": "./dist/strengthening/index.js"
19
27
  },
28
+ "./fea": {
29
+ "types": "./dist/fea/index.d.ts",
30
+ "import": "./dist/esm/fea/index.js",
31
+ "require": "./dist/fea/index.js",
32
+ "default": "./dist/fea/index.js"
33
+ },
20
34
  "./core": {
21
35
  "types": "./dist/core/index.d.ts",
36
+ "import": "./dist/esm/core/index.js",
37
+ "require": "./dist/core/index.js",
22
38
  "default": "./dist/core/index.js"
23
39
  },
24
40
  "./utils": {
25
41
  "types": "./dist/utils/index.d.ts",
42
+ "import": "./dist/esm/utils/index.js",
43
+ "require": "./dist/utils/index.js",
26
44
  "default": "./dist/utils/index.js"
27
45
  }
28
46
  },
@@ -67,7 +85,7 @@
67
85
  },
68
86
  "scripts": {
69
87
  "dev": "ts-node -r tsconfig-paths/register examples/basic-usage.ts",
70
- "build": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json",
88
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && tsc -p tsconfig.esm.json && tsc-alias -p tsconfig.esm.json --resolve-full-paths && node -e \"require('fs').writeFileSync('dist/esm/package.json', JSON.stringify({ type: 'module' }))\"",
71
89
  "lint": "eslint src/",
72
90
  "lint:fix": "eslint src/ --fix",
73
91
  "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"",