@theerapat-s28/ts-structural-eng-tools 2.2.0 → 3.0.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.
- package/CHANGELOG.md +35 -1
- package/README.md +8 -5
- package/dist/core/constants/frame.constant.d.ts +15 -0
- package/dist/core/constants/frame.constant.js +16 -1
- package/dist/core/constants/frame.constant.js.map +1 -1
- package/dist/core/errors/frame-analysis.error.d.ts +1 -0
- package/dist/core/errors/frame-analysis.error.js +18 -2
- package/dist/core/errors/frame-analysis.error.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/esm/core/constants/frame.constant.js +15 -0
- package/dist/esm/core/constants/frame.constant.js.map +1 -1
- package/dist/esm/core/errors/frame-analysis.error.js +18 -2
- package/dist/esm/core/errors/frame-analysis.error.js.map +1 -1
- package/dist/esm/core/index.js +1 -1
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/fea/frame/area/distribute-area-loads.js +10 -5
- package/dist/esm/fea/frame/area/distribute-area-loads.js.map +1 -1
- package/dist/esm/fea/frame/elements/shell/dkq-plate.js +109 -0
- package/dist/esm/fea/frame/elements/shell/dkq-plate.js.map +1 -0
- package/dist/esm/fea/frame/elements/shell/flat-shell.js +111 -0
- package/dist/esm/fea/frame/elements/shell/flat-shell.js.map +1 -0
- package/dist/esm/fea/frame/elements/shell/membrane-quad.js +107 -0
- package/dist/esm/fea/frame/elements/shell/membrane-quad.js.map +1 -0
- package/dist/esm/fea/frame/elements/shell/quad-geometry.js +127 -0
- package/dist/esm/fea/frame/elements/shell/quad-geometry.js.map +1 -0
- package/dist/esm/fea/frame/elements/shell/rigidity.js +19 -0
- package/dist/esm/fea/frame/elements/shell/rigidity.js.map +1 -0
- package/dist/esm/fea/frame/elements/shell/shell-axes.js +97 -0
- package/dist/esm/fea/frame/elements/shell/shell-axes.js.map +1 -0
- package/dist/esm/fea/frame/mesh/expand-model.js +129 -0
- package/dist/esm/fea/frame/mesh/expand-model.js.map +1 -0
- package/dist/esm/fea/frame/mesh/mesh-shells.js +239 -0
- package/dist/esm/fea/frame/mesh/mesh-shells.js.map +1 -0
- package/dist/esm/fea/frame/post/envelope.js +38 -1
- package/dist/esm/fea/frame/post/envelope.js.map +1 -1
- package/dist/esm/fea/frame/post/member-diagram.js +51 -2
- package/dist/esm/fea/frame/post/member-diagram.js.map +1 -1
- package/dist/esm/fea/frame/post/present-state.js +34 -16
- package/dist/esm/fea/frame/post/present-state.js.map +1 -1
- package/dist/esm/fea/frame/post/shell-forces.js +111 -0
- package/dist/esm/fea/frame/post/shell-forces.js.map +1 -0
- package/dist/esm/fea/frame/solver/analyze-frame.js +27 -7
- package/dist/esm/fea/frame/solver/analyze-frame.js.map +1 -1
- package/dist/esm/fea/frame/solver/auto-restraint.js +58 -10
- package/dist/esm/fea/frame/solver/auto-restraint.js.map +1 -1
- package/dist/esm/fea/frame/solver/frame-system.js +148 -40
- package/dist/esm/fea/frame/solver/frame-system.js.map +1 -1
- package/dist/esm/fea/frame/solver/global-assembly.js +5 -3
- package/dist/esm/fea/frame/solver/global-assembly.js.map +1 -1
- package/dist/esm/fea/frame/solver/load-case-solver.js +111 -11
- package/dist/esm/fea/frame/solver/load-case-solver.js.map +1 -1
- package/dist/esm/fea/frame/validation/validate-model.js +133 -3
- package/dist/esm/fea/frame/validation/validate-model.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/fea/frame/area/distribute-area-loads.d.ts +3 -2
- package/dist/fea/frame/area/distribute-area-loads.js +10 -5
- package/dist/fea/frame/area/distribute-area-loads.js.map +1 -1
- package/dist/fea/frame/elements/shell/dkq-plate.d.ts +50 -0
- package/dist/fea/frame/elements/shell/dkq-plate.js +115 -0
- package/dist/fea/frame/elements/shell/dkq-plate.js.map +1 -0
- package/dist/fea/frame/elements/shell/flat-shell.d.ts +63 -0
- package/dist/fea/frame/elements/shell/flat-shell.js +118 -0
- package/dist/fea/frame/elements/shell/flat-shell.js.map +1 -0
- package/dist/fea/frame/elements/shell/membrane-quad.d.ts +61 -0
- package/dist/fea/frame/elements/shell/membrane-quad.js +113 -0
- package/dist/fea/frame/elements/shell/membrane-quad.js.map +1 -0
- package/dist/fea/frame/elements/shell/quad-geometry.d.ts +71 -0
- package/dist/fea/frame/elements/shell/quad-geometry.js +136 -0
- package/dist/fea/frame/elements/shell/quad-geometry.js.map +1 -0
- package/dist/fea/frame/elements/shell/rigidity.d.ts +14 -0
- package/dist/fea/frame/elements/shell/rigidity.js +23 -0
- package/dist/fea/frame/elements/shell/rigidity.js.map +1 -0
- package/dist/fea/frame/elements/shell/shell-axes.d.ts +43 -0
- package/dist/fea/frame/elements/shell/shell-axes.js +102 -0
- package/dist/fea/frame/elements/shell/shell-axes.js.map +1 -0
- package/dist/fea/frame/index.d.ts +2 -2
- package/dist/fea/frame/mesh/expand-model.d.ts +29 -0
- package/dist/fea/frame/mesh/expand-model.js +133 -0
- package/dist/fea/frame/mesh/expand-model.js.map +1 -0
- package/dist/fea/frame/mesh/mesh-shells.d.ts +38 -0
- package/dist/fea/frame/mesh/mesh-shells.js +244 -0
- package/dist/fea/frame/mesh/mesh-shells.js.map +1 -0
- package/dist/fea/frame/post/envelope.js +38 -1
- package/dist/fea/frame/post/envelope.js.map +1 -1
- package/dist/fea/frame/post/member-diagram.d.ts +21 -1
- package/dist/fea/frame/post/member-diagram.js +53 -3
- package/dist/fea/frame/post/member-diagram.js.map +1 -1
- package/dist/fea/frame/post/present-state.d.ts +3 -2
- package/dist/fea/frame/post/present-state.js +33 -15
- package/dist/fea/frame/post/present-state.js.map +1 -1
- package/dist/fea/frame/post/shell-forces.d.ts +27 -0
- package/dist/fea/frame/post/shell-forces.js +116 -0
- package/dist/fea/frame/post/shell-forces.js.map +1 -0
- package/dist/fea/frame/solver/analyze-frame.d.ts +8 -4
- package/dist/fea/frame/solver/analyze-frame.js +27 -7
- package/dist/fea/frame/solver/analyze-frame.js.map +1 -1
- package/dist/fea/frame/solver/auto-restraint.d.ts +23 -10
- package/dist/fea/frame/solver/auto-restraint.js +60 -11
- package/dist/fea/frame/solver/auto-restraint.js.map +1 -1
- package/dist/fea/frame/solver/frame-system.d.ts +47 -8
- package/dist/fea/frame/solver/frame-system.js +146 -38
- package/dist/fea/frame/solver/frame-system.js.map +1 -1
- package/dist/fea/frame/solver/global-assembly.d.ts +11 -0
- package/dist/fea/frame/solver/global-assembly.js +7 -4
- package/dist/fea/frame/solver/global-assembly.js.map +1 -1
- package/dist/fea/frame/solver/load-case-solver.d.ts +11 -1
- package/dist/fea/frame/solver/load-case-solver.js +109 -9
- package/dist/fea/frame/solver/load-case-solver.js.map +1 -1
- package/dist/fea/frame/types/model.type.d.ts +95 -3
- package/dist/fea/frame/types/results.type.d.ts +61 -1
- package/dist/fea/frame/validation/validate-model.d.ts +3 -2
- package/dist/fea/frame/validation/validate-model.js +133 -3
- package/dist/fea/frame/validation/validate-model.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,7 @@ const frame_analysis_error_1 = require("../../../core/errors/frame-analysis.erro
|
|
|
6
6
|
const matrix_1 = require("../../../utils/matrix");
|
|
7
7
|
const skyline_1 = require("../../../utils/skyline");
|
|
8
8
|
const fixed_end_forces_1 = require("../elements/fixed-end-forces");
|
|
9
|
+
const shell_forces_1 = require("../post/shell-forces");
|
|
9
10
|
const validate_model_1 = require("../validation/validate-model");
|
|
10
11
|
const global_assembly_1 = require("./global-assembly");
|
|
11
12
|
const GLOBAL_DIRECTIONS = {
|
|
@@ -31,6 +32,13 @@ const toLocalLoads = (load, lambda, L) => {
|
|
|
31
32
|
// kN·m/m = 10³ N·mm/mm
|
|
32
33
|
return [{ type: "torque", t: load.t * 1e3, start: load.start ?? 0, end: load.end ?? L }];
|
|
33
34
|
}
|
|
35
|
+
// per projected length → per member length: Lproj / L = |local 1 × d| = √(1 − (local 1 · d)²)
|
|
36
|
+
let projection = 1;
|
|
37
|
+
if (load.type !== "point" && load.projected) {
|
|
38
|
+
const v = GLOBAL_DIRECTIONS[load.direction];
|
|
39
|
+
const c = lambda[0][0] * v[0] + lambda[0][1] * v[1] + lambda[0][2] * v[2];
|
|
40
|
+
projection = Math.sqrt(Math.max(0, 1 - c * c));
|
|
41
|
+
}
|
|
34
42
|
return components(load.direction).map(({ axis, factor }) => {
|
|
35
43
|
if (load.type === "point")
|
|
36
44
|
return { type: "point", axis, P: load.P * factor * 1e3, a: load.a };
|
|
@@ -38,13 +46,48 @@ const toLocalLoads = (load, lambda, L) => {
|
|
|
38
46
|
return {
|
|
39
47
|
type: "distributed",
|
|
40
48
|
axis,
|
|
41
|
-
w1: w1 * factor, // kN/m = N/mm
|
|
42
|
-
w2: w2 * factor,
|
|
49
|
+
w1: w1 * factor * projection, // kN/m = N/mm
|
|
50
|
+
w2: w2 * factor * projection,
|
|
43
51
|
start: load.start ?? 0,
|
|
44
52
|
end: load.end ?? L,
|
|
45
53
|
};
|
|
46
54
|
});
|
|
47
55
|
};
|
|
56
|
+
/**
|
|
57
|
+
* The part of a member's local loads that falls on one of its pieces, `[offset, offset + L]`,
|
|
58
|
+
* in the piece's own positions. A distributed load or torque is cut at the piece ends; a point
|
|
59
|
+
* load goes to the piece it lies in (at an interior node, to the piece that starts there).
|
|
60
|
+
*/
|
|
61
|
+
const clipLoads = (loads, offset, L, last) => {
|
|
62
|
+
const end = offset + L;
|
|
63
|
+
const tolerance = 1e-9 * end;
|
|
64
|
+
const out = [];
|
|
65
|
+
for (const load of loads) {
|
|
66
|
+
if (load.type === "point") {
|
|
67
|
+
const inside = load.a >= offset - tolerance && (load.a < end - tolerance || last);
|
|
68
|
+
if (inside)
|
|
69
|
+
out.push({ ...load, a: Math.min(L, Math.max(0, load.a - offset)) });
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
const from = Math.max(load.start, offset);
|
|
73
|
+
const to = Math.min(load.end, end);
|
|
74
|
+
if (to - from <= tolerance)
|
|
75
|
+
continue;
|
|
76
|
+
if (load.type === "torque") {
|
|
77
|
+
out.push({ ...load, start: from - offset, end: to - offset });
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
out.push({
|
|
81
|
+
...load,
|
|
82
|
+
w1: (0, fixed_end_forces_1.loadIntensity)(load, from),
|
|
83
|
+
w2: (0, fixed_end_forces_1.loadIntensity)(load, to),
|
|
84
|
+
start: from - offset,
|
|
85
|
+
end: to - offset,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return out;
|
|
90
|
+
};
|
|
48
91
|
/**
|
|
49
92
|
* Solves one load case against the prepared, factorised system.
|
|
50
93
|
*
|
|
@@ -53,6 +96,14 @@ const toLocalLoads = (load, lambda, L) => {
|
|
|
53
96
|
* @param loadCase - The load case (id and self-weight multiplier)
|
|
54
97
|
* @param loads - The nodal and member loads tagged with this load case
|
|
55
98
|
*
|
|
99
|
+
* Shell areas take `selfWeight · unitWeight · thickness · modifiers.weight` per unit area along
|
|
100
|
+
* −Z and their `AreaLoad`s as forces at their corners, each corner the share `∫ Nᵢ dA` of the
|
|
101
|
+
* element's area on its mean plane (no corner moments, so a warped element's offsets do not load
|
|
102
|
+
* the rotations auto-restraint holds).
|
|
103
|
+
*
|
|
104
|
+
* @param loads - The nodal and member loads tagged with this load case, and its area loads on
|
|
105
|
+
* shell areas
|
|
106
|
+
*
|
|
56
107
|
* @throws {FrameAnalysisError} 304 if a load has a moment about a joint rotation that nothing
|
|
57
108
|
* resists (an auto-restrained axis), 308 for a load outside its member, 313 if self-weight is
|
|
58
109
|
* requested for a member without `unitWeight`
|
|
@@ -60,15 +111,18 @@ const toLocalLoads = (load, lambda, L) => {
|
|
|
60
111
|
const solveLoadCase = (system, loadCase, loads) => {
|
|
61
112
|
const { members, dofCount, boundary, equation, free, factor, nodeIndex, memberIndex } = system;
|
|
62
113
|
const F = new Array(dofCount).fill(0);
|
|
63
|
-
const
|
|
114
|
+
const groups = system.memberGroups;
|
|
115
|
+
const loadsByMember = groups.map(() => []);
|
|
64
116
|
for (const load of loads.memberLoads) {
|
|
65
117
|
loadsByMember[memberIndex.get(load.memberId)].push(load);
|
|
66
118
|
}
|
|
67
119
|
const selfWeight = loadCase.selfWeight ?? 0;
|
|
68
|
-
|
|
69
|
-
|
|
120
|
+
// local loads of each model member, then of each piece it is analysed as
|
|
121
|
+
const memberLoads = members.map(() => []);
|
|
122
|
+
groups.forEach((group, g) => {
|
|
123
|
+
const memberLoadsHere = [...loadsByMember[g]];
|
|
70
124
|
if (selfWeight !== 0) {
|
|
71
|
-
const { unitWeight, A } =
|
|
125
|
+
const { unitWeight, A } = group.section;
|
|
72
126
|
if (unitWeight === undefined)
|
|
73
127
|
throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.MISSING_UNIT_WEIGHT);
|
|
74
128
|
// kN/m³ · m² = kN/m
|
|
@@ -77,19 +131,58 @@ const solveLoadCase = (system, loadCase, loads) => {
|
|
|
77
131
|
memberLoadsHere.push({
|
|
78
132
|
loadCase: loadCase.id,
|
|
79
133
|
type: "udl",
|
|
80
|
-
memberId:
|
|
134
|
+
memberId: group.id,
|
|
81
135
|
direction: "Z",
|
|
82
136
|
w,
|
|
83
137
|
});
|
|
84
138
|
}
|
|
85
139
|
}
|
|
86
|
-
|
|
140
|
+
const local = memberLoadsHere.flatMap((load) => toLocalLoads(load, group.lambda, group.length));
|
|
141
|
+
if (group.pieces.length === 1) {
|
|
142
|
+
memberLoads[group.pieces[0]] = local;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
group.pieces.forEach((p, k) => {
|
|
146
|
+
const piece = members[p];
|
|
147
|
+
memberLoads[p] = clipLoads(local, piece.offset, piece.length, k === group.pieces.length - 1);
|
|
148
|
+
});
|
|
87
149
|
});
|
|
88
150
|
const fixed = members.map((member, m) => {
|
|
89
151
|
const condensed = member.condenseFixedEndForces((0, fixed_end_forces_1.fixedEndForces)(memberLoads[m], member.length));
|
|
90
152
|
(0, global_assembly_1.scatterMemberForces)(F, member, condensed, -1);
|
|
91
153
|
return condensed;
|
|
92
154
|
});
|
|
155
|
+
// Shell surface loads, kN/m² as a global vector per shell, then N at the corners
|
|
156
|
+
const shellPressure = system.shells.map(() => [0, 0, 0]);
|
|
157
|
+
for (const load of loads.shellLoads ?? []) {
|
|
158
|
+
// every element of the area
|
|
159
|
+
for (const s of system.shellsByArea.get(load.areaId) ?? []) {
|
|
160
|
+
const normal = system.shells[s].element.axes.lambda[2];
|
|
161
|
+
const e = load.direction === "3" ? normal : GLOBAL_DIRECTIONS[load.direction];
|
|
162
|
+
// per projected area → per true area: Aproj / A = |n · e|
|
|
163
|
+
const q = load.projected
|
|
164
|
+
? load.q * Math.abs(normal[0] * e[0] + normal[1] * e[1] + normal[2] * e[2])
|
|
165
|
+
: load.q;
|
|
166
|
+
for (let k = 0; k < 3; k++)
|
|
167
|
+
shellPressure[s][k] += q * e[k];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
system.shells.forEach((shell, s) => {
|
|
171
|
+
if (selfWeight !== 0) {
|
|
172
|
+
// kN/m³ · mm · 10⁻³ = kN/m²
|
|
173
|
+
const { unitWeight = 0, thickness } = shell.section;
|
|
174
|
+
shellPressure[s][2] -=
|
|
175
|
+
selfWeight * unitWeight * thickness * (shell.modifiers.weight ?? 1) * 1e-3;
|
|
176
|
+
}
|
|
177
|
+
const p = shellPressure[s];
|
|
178
|
+
if (p[0] === 0 && p[1] === 0 && p[2] === 0)
|
|
179
|
+
return;
|
|
180
|
+
shell.nodeIndices.forEach((node, i) => {
|
|
181
|
+
// kN/m² = 10⁻³ N/mm², times mm²
|
|
182
|
+
for (let k = 0; k < 3; k++)
|
|
183
|
+
F[6 * node + k] += p[k] * 1e-3 * shell.cornerAreas[i];
|
|
184
|
+
});
|
|
185
|
+
});
|
|
93
186
|
for (const load of loads.nodalLoads) {
|
|
94
187
|
const base = 6 * nodeIndex.get(load.nodeId);
|
|
95
188
|
[load.fx, load.fy, load.fz].forEach((v, k) => (F[base + k] += (v ?? 0) * 1e3));
|
|
@@ -127,8 +220,14 @@ const solveLoadCase = (system, loadCase, loads) => {
|
|
|
127
220
|
(0, global_assembly_1.scatterMemberForces)(KU, member, elastic, 1);
|
|
128
221
|
return elastic.map((v, i) => v + fixed[m][i]);
|
|
129
222
|
});
|
|
223
|
+
for (const shell of system.shells) {
|
|
224
|
+
const dofs = (0, global_assembly_1.elementDofs)(shell.nodeIndices);
|
|
225
|
+
const forces = (0, matrix_1.matVec)(shell.element.kGlobal, dofs.map((d) => U[d]));
|
|
226
|
+
dofs.forEach((d, a) => (KU[d] += forces[a]));
|
|
227
|
+
}
|
|
130
228
|
const R = KU.map((v, i) => (boundary.restrained[i] ? v - F[i] : 0));
|
|
131
|
-
|
|
229
|
+
const shellForces = system.shells.map((shell) => (0, shell_forces_1.shellRawForces)(shell, U));
|
|
230
|
+
return { U, R, F, memberForces, shellForces, memberLoads };
|
|
132
231
|
};
|
|
133
232
|
exports.solveLoadCase = solveLoadCase;
|
|
134
233
|
const scaleLoad = (load, factor) => {
|
|
@@ -153,6 +252,7 @@ const combineStates = (terms) => {
|
|
|
153
252
|
R: add((s) => s.R, first.R.length),
|
|
154
253
|
F: add((s) => s.F, first.F.length),
|
|
155
254
|
memberForces: first.memberForces.map((_, m) => add((s) => s.memberForces[m], 12)),
|
|
255
|
+
shellForces: first.shellForces.map((f, sh) => add((s) => s.shellForces[sh], f.length)),
|
|
156
256
|
memberLoads: first.memberLoads.map((_, m) => terms.flatMap(({ state, factor }) => factor === 0 ? [] : state.memberLoads[m].map((l) => scaleLoad(l, factor)))),
|
|
157
257
|
};
|
|
158
258
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-case-solver.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/load-case-solver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"load-case-solver.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/load-case-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,21 @@ export interface FrameNode {
|
|
|
8
8
|
}
|
|
9
9
|
/** A restrained DOF: `true` is fixed, a number is a spring stiffness, omitted/`false` is free. */
|
|
10
10
|
export type DofRestraint = boolean | number;
|
|
11
|
+
/**
|
|
12
|
+
* Fixed DOFs along a straight line: every node on the segment between two nodes, including the
|
|
13
|
+
* nodes the engine generates when it meshes shell areas, e.g. a wall base fixed along its
|
|
14
|
+
* length. `true` fixes the DOF; there are no line springs. Combined with point restraints at
|
|
15
|
+
* the same node, a fixed DOF stays fixed.
|
|
16
|
+
*/
|
|
17
|
+
export interface LineRestraint {
|
|
18
|
+
nodeIds: [FrameId, FrameId];
|
|
19
|
+
ux?: boolean;
|
|
20
|
+
uy?: boolean;
|
|
21
|
+
uz?: boolean;
|
|
22
|
+
rx?: boolean;
|
|
23
|
+
ry?: boolean;
|
|
24
|
+
rz?: boolean;
|
|
25
|
+
}
|
|
11
26
|
export interface Restraint {
|
|
12
27
|
nodeId: FrameId;
|
|
13
28
|
ux?: DofRestraint;
|
|
@@ -55,7 +70,12 @@ export interface NodalLoad {
|
|
|
55
70
|
}
|
|
56
71
|
/** Load direction: local member axes "1", "2", "3" or global axes "X", "Y", "Z". */
|
|
57
72
|
export type LoadDirection = "1" | "2" | "3" | "X" | "Y" | "Z";
|
|
58
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* Uniform load per unit length of member, along the whole member or from `start` to `end`.
|
|
75
|
+
* With `projected: true` (global directions only) `w` is per unit length projected onto the
|
|
76
|
+
* plane normal to `direction`, e.g. snow on a rafter per unit plan length; it is applied as
|
|
77
|
+
* `w · Lproj / L` per member length.
|
|
78
|
+
*/
|
|
59
79
|
export interface UniformMemberLoad {
|
|
60
80
|
loadCase: string;
|
|
61
81
|
type: "udl";
|
|
@@ -64,6 +84,7 @@ export interface UniformMemberLoad {
|
|
|
64
84
|
w: number;
|
|
65
85
|
start?: number;
|
|
66
86
|
end?: number;
|
|
87
|
+
projected?: boolean;
|
|
67
88
|
}
|
|
68
89
|
export interface PointMemberLoad {
|
|
69
90
|
loadCase: string;
|
|
@@ -75,7 +96,8 @@ export interface PointMemberLoad {
|
|
|
75
96
|
}
|
|
76
97
|
/**
|
|
77
98
|
* Linearly varying load per unit length of member, from `w1` at `start` to `w2` at `end`
|
|
78
|
-
* (triangular when one of them is 0).
|
|
99
|
+
* (triangular when one of them is 0). `projected` works as for a uniform load; `start` and
|
|
100
|
+
* `end` stay measured along the member.
|
|
79
101
|
*/
|
|
80
102
|
export interface TrapezoidalMemberLoad {
|
|
81
103
|
loadCase: string;
|
|
@@ -86,6 +108,7 @@ export interface TrapezoidalMemberLoad {
|
|
|
86
108
|
w2: number;
|
|
87
109
|
start?: number;
|
|
88
110
|
end?: number;
|
|
111
|
+
projected?: boolean;
|
|
89
112
|
}
|
|
90
113
|
/**
|
|
91
114
|
* Uniform torque per unit length of member, about local axis 1 (right-hand rule), along the
|
|
@@ -120,13 +143,77 @@ export interface NullArea {
|
|
|
120
143
|
/** Edge indices that carry the load: one-way supports, or the one cantilever support. */
|
|
121
144
|
supportEdges?: number[];
|
|
122
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* How a shell area carries load: in its plane and in bending (`"shell"`), in its plane only
|
|
148
|
+
* (`"membrane"`: u1, u2 and the rotation about local 3), or in bending only (`"plate"`: u3 and
|
|
149
|
+
* the rotations about local 1 and 2).
|
|
150
|
+
*/
|
|
151
|
+
export type ShellType = "shell" | "membrane" | "plate";
|
|
152
|
+
/** Material and thickness of a shell area. */
|
|
153
|
+
export interface ShellSection {
|
|
154
|
+
thickness: number;
|
|
155
|
+
E: number;
|
|
156
|
+
nu: number;
|
|
157
|
+
unitWeight?: number;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Stiffness modifiers of a shell area along its local axes 1 and 2 (default 1 each), e.g. for
|
|
161
|
+
* cracked walls and slabs: f11, f22, f12 scale the membrane rigidity and m11, m22, m12 the
|
|
162
|
+
* bending rigidity (each matrix becomes S·D·S, S = diag(√f11, √f22, √f12)); weight scales the
|
|
163
|
+
* self-weight only.
|
|
164
|
+
*/
|
|
165
|
+
export interface ShellModifiers {
|
|
166
|
+
f11?: number;
|
|
167
|
+
f22?: number;
|
|
168
|
+
f12?: number;
|
|
169
|
+
m11?: number;
|
|
170
|
+
m22?: number;
|
|
171
|
+
m12?: number;
|
|
172
|
+
weight?: number;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* How the engine meshes a shell area: `maxSize` (mm) is the largest element side wanted;
|
|
176
|
+
* `divisions` the least number of elements along edges 0–1 and 1–2 (from `nodeIds[0]` to
|
|
177
|
+
* `nodeIds[1]` and from `nodeIds[1]` to `nodeIds[2]`). Counts may grow so that areas sharing an
|
|
178
|
+
* edge, or meeting it at a node, share their mesh nodes.
|
|
179
|
+
*/
|
|
180
|
+
export interface ShellMesh {
|
|
181
|
+
maxSize?: number;
|
|
182
|
+
divisions?: [number, number];
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* A four-node flat shell area: a drilling-rotation membrane and a thin (DKQ) plate, built on
|
|
186
|
+
* the mean plane of its corners. Without `mesh` it is one element, unless a neighbour's mesh or
|
|
187
|
+
* a node lying on its edge forces divisions. Local axis 3 is the normal by the
|
|
188
|
+
* right-hand rule around `nodeIds`; local 2 is +Z projected onto the plane (upward on a wall)
|
|
189
|
+
* and local 1 = 2 × 3 is horizontal, except on a horizontal shell, where local 1 = +X.
|
|
190
|
+
* `angle` rotates local 1 and 2 about local 3. Its id shares one namespace with null areas, so
|
|
191
|
+
* `AreaLoad` can load it.
|
|
192
|
+
*/
|
|
193
|
+
export interface ShellArea {
|
|
194
|
+
id: FrameId;
|
|
195
|
+
nodeIds: FrameId[];
|
|
196
|
+
type?: ShellType;
|
|
197
|
+
section: ShellSection;
|
|
198
|
+
angle?: number;
|
|
199
|
+
modifiers?: ShellModifiers;
|
|
200
|
+
mesh?: ShellMesh;
|
|
201
|
+
}
|
|
123
202
|
/** Area load direction: the area's local normal "3" or a global axis. */
|
|
124
203
|
export type AreaLoadDirection = "3" | "X" | "Y" | "Z";
|
|
204
|
+
/**
|
|
205
|
+
* Uniform load on a null area or a shell area. `q` is per unit true area, or with
|
|
206
|
+
* `projected: true` (global directions only) per unit area projected onto the plane normal to
|
|
207
|
+
* `direction`, e.g. per plan area on a ramp; it is then applied as `q · |n · direction|` on
|
|
208
|
+
* the true area. A null area sends it to the members along its edges; a shell area takes it
|
|
209
|
+
* as forces at its corners, each corner the share `∫ Nᵢ dA` of its area.
|
|
210
|
+
*/
|
|
125
211
|
export interface AreaLoad {
|
|
126
212
|
loadCase: string;
|
|
127
213
|
areaId: FrameId;
|
|
128
214
|
direction: AreaLoadDirection;
|
|
129
215
|
q: number;
|
|
216
|
+
projected?: boolean;
|
|
130
217
|
}
|
|
131
218
|
/** Descriptive category of a load case; it labels the case and does not change the analysis. */
|
|
132
219
|
export type LoadCaseType = "dead" | "superDead" | "live" | "roofLive" | "snow" | "wind" | "seismic" | "other";
|
|
@@ -141,7 +228,8 @@ export interface LoadCase {
|
|
|
141
228
|
type?: LoadCaseType;
|
|
142
229
|
/**
|
|
143
230
|
* Self-weight multiplier (1 = full self-weight). Applies `selfWeight · unitWeight · A` per unit
|
|
144
|
-
* length of every member
|
|
231
|
+
* length of every member and `selfWeight · unitWeight · thickness` (times `modifiers.weight`)
|
|
232
|
+
* per unit area of every shell, along global −Z. Default 0.
|
|
145
233
|
*/
|
|
146
234
|
selfWeight?: number;
|
|
147
235
|
}
|
|
@@ -163,6 +251,8 @@ export interface FrameModel {
|
|
|
163
251
|
nodes: FrameNode[];
|
|
164
252
|
members: Member[];
|
|
165
253
|
restraints: Restraint[];
|
|
254
|
+
/** Fixed DOFs of every node along straight lines, generated mesh nodes included. */
|
|
255
|
+
lineRestraints?: LineRestraint[];
|
|
166
256
|
loadCases: LoadCase[];
|
|
167
257
|
/** Nodal loads of every load case, each tagged with its `loadCase`. */
|
|
168
258
|
nodalLoads?: NodalLoad[];
|
|
@@ -170,6 +260,8 @@ export interface FrameModel {
|
|
|
170
260
|
memberLoads?: MemberLoad[];
|
|
171
261
|
/** Null areas that distribute `areaLoads` to the members along their edges. */
|
|
172
262
|
areas?: NullArea[];
|
|
263
|
+
/** Shell areas: four-node flat shell elements with membrane and/or plate stiffness. */
|
|
264
|
+
shells?: ShellArea[];
|
|
173
265
|
/** Area loads of every load case, each tagged with its `loadCase`. */
|
|
174
266
|
areaLoads?: AreaLoad[];
|
|
175
267
|
combinations?: LoadCombination[];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Warnings } from "../../../core/types/output-message.type";
|
|
2
|
-
import type { FrameId, LoadCaseType } from "./model.type";
|
|
2
|
+
import type { FrameId, FrameNode, LoadCaseType } from "./model.type";
|
|
3
3
|
export interface NodalDisplacement {
|
|
4
4
|
nodeId: FrameId;
|
|
5
5
|
ux: number;
|
|
@@ -94,6 +94,52 @@ export interface MemberDiagram {
|
|
|
94
94
|
min: ExtremeValue;
|
|
95
95
|
}>;
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Forces per unit width and face stresses at one corner of a shell element, in the shell's
|
|
99
|
+
* local axes 1, 2, 3. Membrane forces are positive in tension. M11 (M22) is the moment that
|
|
100
|
+
* stresses along local 1 (2), positive when it puts the −3 face in tension (sagging with local
|
|
101
|
+
* 3 up), as M3 of a member; V13 = −(∂M11/∂x₁ + ∂M12/∂x₂), as V2 = −dM3/dx. Top is the +3 face.
|
|
102
|
+
*/
|
|
103
|
+
export interface ShellCornerForces {
|
|
104
|
+
nodeId: FrameId;
|
|
105
|
+
F11: number;
|
|
106
|
+
F22: number;
|
|
107
|
+
F12: number;
|
|
108
|
+
M11: number;
|
|
109
|
+
M22: number;
|
|
110
|
+
M12: number;
|
|
111
|
+
V13: number;
|
|
112
|
+
V23: number;
|
|
113
|
+
S11Top: number;
|
|
114
|
+
S22Top: number;
|
|
115
|
+
S12Top: number;
|
|
116
|
+
S11Bot: number;
|
|
117
|
+
S22Bot: number;
|
|
118
|
+
S12Bot: number;
|
|
119
|
+
}
|
|
120
|
+
/** A force or stress component of `ShellCornerForces`. */
|
|
121
|
+
export type ShellForceComponent = Exclude<keyof ShellCornerForces, "nodeId">;
|
|
122
|
+
/**
|
|
123
|
+
* Forces of one shell element at its four corners, in its node order. `shellId` is the shell
|
|
124
|
+
* area's id when the area is one element, and `"<areaId>:<i>,<j>"` for the elements the engine
|
|
125
|
+
* generated when it meshed the area (see `FrameResult.mesh`).
|
|
126
|
+
*/
|
|
127
|
+
export interface ShellElementForces {
|
|
128
|
+
shellId: FrameId;
|
|
129
|
+
areaId: FrameId;
|
|
130
|
+
corners: ShellCornerForces[];
|
|
131
|
+
}
|
|
132
|
+
/** The shell elements analysed, and the nodes the engine generated to mesh them. */
|
|
133
|
+
export interface FrameMesh {
|
|
134
|
+
/** Generated nodes, in global coordinates (mm); empty when no area was subdivided. */
|
|
135
|
+
nodes: FrameNode[];
|
|
136
|
+
/** Every shell element, in model order of their areas, with its four corner nodes. */
|
|
137
|
+
shells: {
|
|
138
|
+
id: FrameId;
|
|
139
|
+
areaId: FrameId;
|
|
140
|
+
nodeIds: FrameId[];
|
|
141
|
+
}[];
|
|
142
|
+
}
|
|
97
143
|
/** Max or min of a result across combinations, with the combination that produces it. */
|
|
98
144
|
export interface GoverningValue {
|
|
99
145
|
value: number;
|
|
@@ -118,6 +164,8 @@ export interface FrameCaseResult {
|
|
|
118
164
|
/** One entry per member with any released or spring end DOF, in model order. */
|
|
119
165
|
releaseDeformations: MemberReleaseDeformations[];
|
|
120
166
|
memberDiagrams: MemberDiagram[];
|
|
167
|
+
/** One entry per shell area, in model order. */
|
|
168
|
+
shellForces: ShellElementForces[];
|
|
121
169
|
equilibriumResidual: {
|
|
122
170
|
force: number;
|
|
123
171
|
moment: number;
|
|
@@ -137,15 +185,24 @@ export interface FrameEnvelope {
|
|
|
137
185
|
memberId: FrameId;
|
|
138
186
|
extremes: Record<StationComponent, Bound<GoverningExtremeValue>>;
|
|
139
187
|
}[];
|
|
188
|
+
shells: {
|
|
189
|
+
shellId: FrameId;
|
|
190
|
+
corners: ({
|
|
191
|
+
nodeId: FrameId;
|
|
192
|
+
} & Record<ShellForceComponent, Bound<GoverningValue>>)[];
|
|
193
|
+
}[];
|
|
140
194
|
}
|
|
141
195
|
export interface FrameResult {
|
|
142
196
|
cases: Record<string, FrameCaseResult>;
|
|
143
197
|
combinations: Record<string, FrameCaseResult>;
|
|
144
198
|
/** Envelope over all combinations; absent when the model has none. */
|
|
145
199
|
envelope?: FrameEnvelope;
|
|
200
|
+
/** The shell mesh; absent when the model has no shells. */
|
|
201
|
+
mesh?: FrameMesh;
|
|
146
202
|
calculationDetails: {
|
|
147
203
|
nodeCount: number;
|
|
148
204
|
memberCount: number;
|
|
205
|
+
shellCount: number;
|
|
149
206
|
dofCount: number;
|
|
150
207
|
freeDofCount: number;
|
|
151
208
|
profileSize: number;
|
|
@@ -159,6 +216,9 @@ export interface FrameResult {
|
|
|
159
216
|
moment: "kN·m";
|
|
160
217
|
length: "mm";
|
|
161
218
|
rotation: "rad";
|
|
219
|
+
forcePerLength: "kN/m";
|
|
220
|
+
momentPerLength: "kN·m/m";
|
|
221
|
+
stress: "MPa";
|
|
162
222
|
};
|
|
163
223
|
warnings: Warnings;
|
|
164
224
|
}
|
|
@@ -10,9 +10,10 @@ export declare const throwIssues: (issues: FrameModelIssue[]) => never;
|
|
|
10
10
|
/**
|
|
11
11
|
* Checks a frame model without analysing it and returns every problem found, each with the
|
|
12
12
|
* node, member, load case, combination and field it concerns. An empty array means the
|
|
13
|
-
* model can be analysed, apart from an unstable structure (304)
|
|
13
|
+
* model can be analysed, apart from an unstable structure (304) and a translation that nothing
|
|
14
|
+
* resists at a node connected only to shells (328), which only assembling the stiffness detects.
|
|
14
15
|
*
|
|
15
16
|
* @param model - The model to check
|
|
16
|
-
* @returns Every problem found (codes 301–303 and
|
|
17
|
+
* @returns Every problem found (codes 301–303, 305–317 and 326–327, 329), in model order
|
|
17
18
|
*/
|
|
18
19
|
export declare const validateFrameModel: (model: FrameModel) => FrameModelIssue[];
|