@ferscloud/fers-calculation-web 0.2.41 → 0.2.43

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/README.md CHANGED
@@ -165,6 +165,26 @@ import type { FERS, ResultsBundle } from "@ferscloud/fers-calculation-web/fers-m
165
165
 
166
166
  `FERS` is the input model; `ResultsBundle` is the `result` payload of a successful envelope. Both are generated from the engine's OpenAPI schema, so they track the published version.
167
167
 
168
+ ## Deflected shape (optional)
169
+
170
+ Set `include_member_deflected_shape` in the model's analysis options to get a
171
+ ready-to-plot, **load-exact** deflected shape per member — the member's global
172
+ displacement sampled along its length — instead of reconstructing the curve yourself:
173
+
174
+ ```ts
175
+ const model = {
176
+ /* … model + load cases … */
177
+ analysis: { /* … */ options: { /* … */ include_member_deflected_shape: true } },
178
+ };
179
+
180
+ const res = JSON.parse(calculate_from_json(JSON.stringify(model)));
181
+ const mr = res.result.results.loadcases["…"].member_results["1"];
182
+ // mr.member_displacements: [{ x_frac, displacement: [dx, dy, dz] }, …]
183
+ // x_frac 0→1 along the member; displacement in the global input frame.
184
+ ```
185
+
186
+ Off by default to keep the payload lean; omitted from `member_results` when not requested.
187
+
168
188
  ## Links
169
189
 
170
190
  - [Full documentation & getting started](https://ferscloud.com/getting-started)
package/fers-models.d.ts CHANGED
@@ -312,7 +312,16 @@ export interface components {
312
312
  * @enum {string}
313
313
  */
314
314
  DeflectionComponent: "LocalY" | "LocalZ" | "Magnitude";
315
- /** @enum {string} */
315
+ /**
316
+ * @description Unit of mass density used by every `Material.density` in the model.
317
+ *
318
+ * Chosen **independently** of `lengthUnit` — a mm/N model may still declare
319
+ * `kg/m3` and pass raw values like structural steel's `7850`. Accepted JSON
320
+ * tokens are the ASCII strings `"kg/m3"` and `"kg/mm3"` (digit `3`, not the
321
+ * superscript `³`); both normalise to SI (kg/m³) internally regardless of the
322
+ * length unit. Default: `"kg/m3"`.
323
+ * @enum {string}
324
+ */
316
325
  DensityUnit: "kg/m3" | "kg/mm3";
317
326
  /**
318
327
  * @description Python:
@@ -1198,6 +1207,12 @@ export interface components {
1198
1207
  member_sets: components["schemas"]["MemberSet"][];
1199
1208
  /** @description Single source of truth for member objects. Member sets reference these by id. */
1200
1209
  members: components["schemas"]["Member"][];
1210
+ /**
1211
+ * @description Concentrated (lumped) nodal masses for modal & seismic analysis. Optional;
1212
+ * SI units (kg, kg·m²). See [`NodalMass`].
1213
+ * @default []
1214
+ */
1215
+ nodal_masses: components["schemas"]["NodalMass"][];
1201
1216
  nodal_supports: components["schemas"]["NodalSupport"][];
1202
1217
  nodes: components["schemas"]["Node"][];
1203
1218
  /** @default [] */
@@ -1228,6 +1243,44 @@ export interface components {
1228
1243
  /** Format: int32 */
1229
1244
  node: number;
1230
1245
  };
1246
+ /**
1247
+ * @description A concentrated (lumped) mass attached to a node, for modal and seismic
1248
+ * analysis (equipment, added / non-structural mass, floor mass, …).
1249
+ *
1250
+ * `mass` is an isotropic translational mass added to the node's three
1251
+ * translational DOFs; the optional rotary inertias are added to the three
1252
+ * rotational DOFs (absent ⇒ 0). **Units are SI regardless of the model's unit
1253
+ * system — `mass` in kg, inertias in kg·m²** (the same convention as
1254
+ * `gravity_factor`), so a nodal mass reads consistently with the structural
1255
+ * self-mass (`density·area`, which is kg after unit normalization).
1256
+ */
1257
+ NodalMass: {
1258
+ /**
1259
+ * Format: double
1260
+ * @description Optional rotary inertia [kg·m²] about global X, added to the θx DOF.
1261
+ */
1262
+ inertia_x?: number | null;
1263
+ /**
1264
+ * Format: double
1265
+ * @description Optional rotary inertia [kg·m²] about global Y, added to the θy DOF.
1266
+ */
1267
+ inertia_y?: number | null;
1268
+ /**
1269
+ * Format: double
1270
+ * @description Optional rotary inertia [kg·m²] about global Z, added to the θz DOF.
1271
+ */
1272
+ inertia_z?: number | null;
1273
+ /**
1274
+ * Format: double
1275
+ * @description Translational (isotropic) mass [kg], added to the ux, uy, uz DOFs.
1276
+ */
1277
+ mass: number;
1278
+ /**
1279
+ * Format: int32
1280
+ * @description Id of the node the mass is attached to.
1281
+ */
1282
+ node: number;
1283
+ };
1231
1284
  /** @description A concentrated moment applied at a node. */
1232
1285
  NodalMoment: {
1233
1286
  direction: components["schemas"]["Vector3"];
@@ -2347,6 +2400,10 @@ export interface components {
2347
2400
  };
2348
2401
  /** @description The model's unit system (length, force, density, pressure) for input and results. */
2349
2402
  UnitSettings: {
2403
+ /**
2404
+ * @description Unit of every `Material.density`; independent of `lengthUnit`
2405
+ * (a mm/N model may still declare `"kg/m3"`). See [`DensityUnit`].
2406
+ */
2350
2407
  densityUnit?: components["schemas"]["DensityUnit"];
2351
2408
  forceUnit?: components["schemas"]["ForceUnit"];
2352
2409
  lengthUnit?: components["schemas"]["LengthUnit"];
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ferscloud/fers-calculation-web",
3
3
  "type": "module",
4
- "version": "0.2.41",
4
+ "version": "0.2.43",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/Jeroen124/FERS_calculations.git"