@ferscloud/fers-calculation-web 0.2.50 → 0.2.52

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/fers-models.d.ts CHANGED
@@ -216,23 +216,51 @@ export interface components {
216
216
  * `K·φ = λ·(−K_g)·φ` where `K_g` is the geometric stiffness from the
217
217
  * reference load's first-order stress state. Reports the lowest positive
218
218
  * critical load factors `α_cr = λ` and their buckling mode shapes.
219
+ *
220
+ * Exactly one reference form must be given: `reference` (single),
221
+ * `references` (explicit list), or `all_combinations: true` (every load
222
+ * combination in the model). With more than one effective reference, each
223
+ * runs as its own analysis — its own StiffnessCurve support/hinge
224
+ * linearization and its own geometric stiffness — and the per-reference
225
+ * results are reported in `results.buckling_runs` (with
226
+ * `results.buckling` carrying the first successful run for backward
227
+ * compatibility).
219
228
  */
220
229
  BucklingAnalysisSettings: {
230
+ /**
231
+ * @description Run one buckling analysis per load combination in the model. Takes
232
+ * precedence over `reference` and `references`.
233
+ */
234
+ all_combinations?: boolean | null;
221
235
  /**
222
236
  * Format: int32
223
237
  * @description Maximum subspace-iteration sweeps. Defaults to 100 when omitted.
224
238
  */
225
239
  max_iterations?: number | null;
240
+ /**
241
+ * @description Compute per-member critical-load-method effective lengths
242
+ * (`results.buckling.member_effective_lengths`). Off by default — the
243
+ * output adds two entries per member.
244
+ */
245
+ member_effective_lengths?: boolean | null;
226
246
  /**
227
247
  * Format: int32
228
248
  * @description Number of buckling modes (lowest positive critical factors) to extract.
229
249
  */
230
250
  num_modes: number;
231
251
  /**
232
- * @description Reference load whose first-order stress state drives the geometric
233
- * stiffness `K_g`.
252
+ * Format: double
253
+ * @description Minimum member-set share of the geometric-stiffness quadratic a mode
254
+ * must have to be considered relevant for a member's effective length.
255
+ * Defaults to 0.05 when omitted.
234
256
  */
235
- reference: components["schemas"]["EigenLoadRef"];
257
+ participation_threshold?: number | null;
258
+ reference?: null | components["schemas"]["EigenLoadRef"];
259
+ /**
260
+ * @description Explicit list of reference loads to analyse, each as an independent
261
+ * buckling run. Takes precedence over `reference`.
262
+ */
263
+ references?: components["schemas"]["EigenLoadRef"][] | null;
236
264
  /**
237
265
  * Format: double
238
266
  * @description Eigen convergence tolerance (relative change in the tracked eigenvalues
@@ -248,6 +276,7 @@ export interface components {
248
276
  BucklingCurve: "A0" | "A" | "B" | "C" | "D";
249
277
  /** @description A single linear buckling mode. */
250
278
  BucklingMode: {
279
+ classification?: null | components["schemas"]["BucklingModeClassification"];
251
280
  /**
252
281
  * Format: double
253
282
  * @description Critical load factor `α_cr = λ`. The structure buckles when the reference
@@ -266,7 +295,75 @@ export interface components {
266
295
  * @description 1-based mode number (1 = lowest critical load factor).
267
296
  */
268
297
  mode: number;
298
+ /**
299
+ * @description Share of the geometric-stiffness quadratic `φᵀ·K_g·φ` carried by each
300
+ * member set (by set id): the buckling analogue of modal mass
301
+ * participation. Shares are computed from absolute per-member
302
+ * contributions; they sum to 1 when every contributing member belongs
303
+ * to a member set (members outside any set count toward the total but
304
+ * appear under no key, and a member listed in several sets is credited
305
+ * to the first set in model order). High share = this eigenvalue
306
+ * belongs to that set's members.
307
+ */
308
+ participation_by_member_set?: {
309
+ [key: string]: number;
310
+ } | null;
311
+ };
312
+ /**
313
+ * @description Shape-derived metadata for one buckling mode.
314
+ *
315
+ * Label rules (checked in order, thresholds fixed and documented here):
316
+ * `local` when `participating_node_fraction ≤ 0.15`; else `torsional` when
317
+ * `twist_fraction ≥ 0.5`; else `sway_*` when the dominant axis holds ≥ 0.6
318
+ * of the translational energy; else `mixed`. The vertical axis is taken
319
+ * opposite to the model's gravity direction (global +Y when gravity is
320
+ * absent or zero).
321
+ */
322
+ BucklingModeClassification: {
323
+ /**
324
+ * Format: int32
325
+ * @description Harmonic number along the height for sway/torsional characters:
326
+ * 1 + the number of sign changes of the level-mean sway (or level-twist)
327
+ * profile over the vertical axis. `null` for local/mixed labels.
328
+ */
329
+ harmonic?: number | null;
330
+ /** @description Suggested mode character (see label rules above). */
331
+ label: components["schemas"]["BucklingModeLabel"];
332
+ /**
333
+ * Format: double
334
+ * @description Effective fraction of nodes participating in the mode: the inverse
335
+ * participation ratio `(Σe)²/Σe²` of nodal translational energies,
336
+ * divided by the node count. Small values mean the motion localizes in
337
+ * few nodes regardless of model size.
338
+ */
339
+ participating_node_fraction: number;
340
+ /**
341
+ * Format: double
342
+ * @description Translational-energy share of the top 1 % of nodes (at least one
343
+ * node). A single-element local mode on a large model approaches 1; a
344
+ * global mode stays near the ~1–2 % a uniform shape would give.
345
+ */
346
+ top_node_energy_fraction: number;
347
+ /**
348
+ * @description Fractions of the translational mode energy (`Σ d²`) per global axis
349
+ * `[X, Y, Z]`; the three sum to 1 for any mode with translational motion.
350
+ */
351
+ translation_fractions: number[];
352
+ /**
353
+ * Format: double
354
+ * @description Fraction of the horizontal translational energy explained by the
355
+ * best-fit rigid plan rotation about the vertical axis (1 = pure twist,
356
+ * 0 = pure translation).
357
+ */
358
+ twist_fraction: number;
269
359
  };
360
+ /**
361
+ * @description Suggested character of a buckling mode, computed from the mode shape the
362
+ * engine already holds. The label is a heuristic aid for mode selection; the
363
+ * underlying fractions are reported so consumers can apply their own rules.
364
+ * @enum {string}
365
+ */
366
+ BucklingModeLabel: "sway_x" | "sway_y" | "sway_z" | "torsional" | "local" | "mixed";
270
367
  /**
271
368
  * @description A buckling restraint located at a node along a member set (one physical beam).
272
369
  *
@@ -299,7 +396,31 @@ export interface components {
299
396
  * critical load factors and their buckling mode shapes.
300
397
  */
301
398
  BucklingResults: {
399
+ /**
400
+ * @description The member-hinge stiffnesses the eigenproblem actually used for
401
+ * StiffnessCurve hinge DOFs — the reference member-end-force secants.
402
+ * Reported per member end and DOF in user units. Absent when the model
403
+ * has no StiffnessCurve member hinges.
404
+ */
405
+ linearized_hinge_stiffness?: components["schemas"]["LinearizedHingeStiffness"][] | null;
406
+ /**
407
+ * @description The support spring stiffnesses the eigenproblem actually used — for
408
+ * StiffnessCurve supports these are the reference-reaction secants, for
409
+ * constant springs the constant value. Reported per supported node and
410
+ * DOF in user units (force/length for translations, moment/radian for
411
+ * rotations). Absent when the model has no support springs.
412
+ */
413
+ linearized_support_stiffness?: components["schemas"]["LinearizedSupportStiffness"][] | null;
414
+ /**
415
+ * @description Per-member critical-load-method effective lengths, populated when
416
+ * `analysis.buckling.member_effective_lengths` is enabled. Members whose
417
+ * governing axial force is tensile, below the compression cutoff, or that
418
+ * participate in none of the computed modes report `null` for the
419
+ * affected direction — never a sentinel length.
420
+ */
421
+ member_effective_lengths?: components["schemas"]["MemberEffectiveLengths"][] | null;
302
422
  modes: components["schemas"]["BucklingMode"][];
423
+ reference?: null | components["schemas"]["EigenLoadRef"];
303
424
  /**
304
425
  * @description Advisories that qualify these results — e.g. model content the
305
426
  * geometric stiffness does not cover. Empty when α_cr is unqualified.
@@ -307,6 +428,21 @@ export interface components {
307
428
  */
308
429
  warnings: components["schemas"]["SolverMessage"][];
309
430
  };
431
+ /**
432
+ * @description One buckling analysis run for one reference load, used when
433
+ * `analysis.buckling` requests multiple references. Exactly one of
434
+ * `results` / `error` is populated — a failed reference reports its error
435
+ * here instead of silently dropping or failing the whole analysis.
436
+ */
437
+ BucklingRun: {
438
+ error?: string | null;
439
+ /**
440
+ * @description The reference load this run linearized at (its own spring/hinge
441
+ * secants and geometric stiffness).
442
+ */
443
+ reference: components["schemas"]["EigenLoadRef"];
444
+ results?: null | components["schemas"]["BucklingResults"];
445
+ };
310
446
  /**
311
447
  * @description One line of the transparent hand-calc: a symbolic formula, the same formula
312
448
  * with real numbers substituted, and the resulting value + unit (display units).
@@ -493,6 +629,37 @@ export interface components {
493
629
  */
494
630
  z_g: number;
495
631
  };
632
+ /**
633
+ * @description One assigned effective length: `L_cr = π·√(E·I / (λ_mode·|N|))`, with the
634
+ * mode id, eigenvalue, and member axial force recorded so the number is
635
+ * auditable. The engine applies no system-length cap — capping (e.g.
636
+ * `min(system length, L_cr)`) is a design-code decision left to consumers.
637
+ */
638
+ EffectiveLengthValue: {
639
+ /**
640
+ * Format: double
641
+ * @description Reference axial force `N` of the member (compression reported
642
+ * positive) in user force units.
643
+ */
644
+ axial_force: number;
645
+ /**
646
+ * Format: double
647
+ * @description Critical load factor `λ` of that mode.
648
+ */
649
+ critical_load_factor: number;
650
+ /**
651
+ * Format: double
652
+ * @description Effective (buckling) length in user length units.
653
+ */
654
+ effective_length: number;
655
+ /**
656
+ * Format: int32
657
+ * @description 1-based id of the mode this length was derived from — the lowest
658
+ * computed mode whose member-set participation meets the threshold and
659
+ * whose shape bends this member in the matching plane.
660
+ */
661
+ mode: number;
662
+ };
496
663
  /**
497
664
  * @description Which load drives the reference stress state for a linear buckling analysis.
498
665
  * Its first-order member axial forces scale linearly with the load, so the
@@ -694,6 +861,11 @@ export interface components {
694
861
  * @enum {string}
695
862
  */
696
863
  GroundType: "A" | "B" | "C" | "D" | "E";
864
+ /**
865
+ * @description Local member-hinge DOF label (member local axes).
866
+ * @enum {string}
867
+ */
868
+ HingeDofLabel: "vx" | "vy" | "vz" | "mx" | "my" | "mz";
697
869
  /** @description Geometric imperfections (sway/translation) applied for a set of load combinations. */
698
870
  ImperfectionCase: {
699
871
  /** Format: int32 */
@@ -716,6 +888,34 @@ export interface components {
716
888
  LengthUnit: "mm" | "cm" | "m";
717
889
  /** @enum {string} */
718
890
  LimitState: "SLS" | "ULS" | "FLS" | "ALS";
891
+ /**
892
+ * @description One StiffnessCurve hinge DOF stiffness as used by the buckling
893
+ * eigenproblem (the secant at the reference member-end forces).
894
+ */
895
+ LinearizedHingeStiffness: {
896
+ dof: components["schemas"]["HingeDofLabel"];
897
+ end: components["schemas"]["MemberEndLabel"];
898
+ /** Format: int32 */
899
+ member_id: number;
900
+ /**
901
+ * Format: double
902
+ * @description Stiffness in user units: force/length for vx/vy/vz, moment/radian
903
+ * for mx/my/mz.
904
+ */
905
+ stiffness: number;
906
+ };
907
+ /** @description One support spring stiffness as used by the buckling eigenproblem. */
908
+ LinearizedSupportStiffness: {
909
+ dof: components["schemas"]["SupportDofLabel"];
910
+ /** Format: int32 */
911
+ node_id: number;
912
+ /**
913
+ * Format: double
914
+ * @description Spring stiffness in user units: force/length for X/Y/Z,
915
+ * moment/radian for RX/RY/RZ, bimoment/radian (F·L²) for warping.
916
+ */
917
+ stiffness: number;
918
+ };
719
919
  /**
720
920
  * @description The coordinate frame a member point load/moment direction is expressed in.
721
921
  * @enum {string}
@@ -889,6 +1089,23 @@ export interface components {
889
1089
  */
890
1090
  x_frac: number;
891
1091
  };
1092
+ /**
1093
+ * @description Critical-load-method effective lengths for one member, per principal
1094
+ * bending direction. `about_y` covers flexural buckling about the member's
1095
+ * local y-axis (deflection in local z, stiffness `E·I_y`); `about_z` covers
1096
+ * buckling about local z (deflection in local y, stiffness `E·I_z`).
1097
+ */
1098
+ MemberEffectiveLengths: {
1099
+ about_y?: null | components["schemas"]["EffectiveLengthValue"];
1100
+ about_z?: null | components["schemas"]["EffectiveLengthValue"];
1101
+ /** Format: int32 */
1102
+ member_id: number;
1103
+ };
1104
+ /**
1105
+ * @description Which end of a member a hinge value belongs to.
1106
+ * @enum {string}
1107
+ */
1108
+ MemberEndLabel: "start" | "end";
892
1109
  /**
893
1110
  * @description A rigid offset between a member end and its node, in the **global** frame
894
1111
  * (`X`, `Y`, `Z`).
@@ -1165,6 +1382,15 @@ export interface components {
1165
1382
  * `weight / |gravity_factor|`).
1166
1383
  */
1167
1384
  ModalAnalysisSettings: {
1385
+ /**
1386
+ * @description Include the geometric (stress) stiffness of the `stiffness_reference`
1387
+ * state in the modal K: compression lowers the frequencies (classic
1388
+ * `f(P) = f₀·√(1 − P/P_cr)` behavior), tension raises them. Requires
1389
+ * `stiffness_reference`. If the structure is unstable at the reference
1390
+ * load (α_cr ≤ 1, K + K_g not positive semi-definite) the analysis
1391
+ * errors instead of reporting frequencies of an unstable state.
1392
+ */
1393
+ include_geometric_stiffness?: boolean | null;
1168
1394
  /** @description Mass-matrix formulation (Consistent default, Lumped optional). */
1169
1395
  mass_formulation?: components["schemas"]["MassFormulation"];
1170
1396
  /**
@@ -1177,6 +1403,7 @@ export interface components {
1177
1403
  * @description Number of natural modes (lowest frequencies) to extract.
1178
1404
  */
1179
1405
  num_modes: number;
1406
+ stiffness_reference?: null | components["schemas"]["EigenLoadRef"];
1180
1407
  /**
1181
1408
  * Format: double
1182
1409
  * @description Eigen convergence tolerance (relative change in the tracked eigenvalues
@@ -1201,6 +1428,12 @@ export interface components {
1201
1428
  */
1202
1429
  ModalResults: {
1203
1430
  modes: components["schemas"]["ModeShape"][];
1431
+ /**
1432
+ * @description Advisories that qualify these results — e.g. a `stiffness_reference`
1433
+ * curve linearization that did not converge. Empty otherwise.
1434
+ * @default []
1435
+ */
1436
+ warnings: components["schemas"]["SolverMessage"][];
1204
1437
  };
1205
1438
  /** @description A single natural vibration mode. */
1206
1439
  ModeShape: {
@@ -2009,6 +2242,13 @@ export interface components {
2009
2242
  /** @description All analysis results: per load case, per load combination, unity-check results and the optional HTML report. */
2010
2243
  ResultsBundle: {
2011
2244
  buckling?: null | components["schemas"]["BucklingResults"];
2245
+ /**
2246
+ * @description Per-reference buckling runs, present only when `analysis.buckling`
2247
+ * requested more than one reference (`references` /
2248
+ * `all_combinations`). Each run reports either results or its own
2249
+ * error — a failed reference never silently drops.
2250
+ */
2251
+ buckling_runs?: components["schemas"]["BucklingRun"][] | null;
2012
2252
  /**
2013
2253
  * @description Version of the `fers_calculations` engine that produced these results.
2014
2254
  *
@@ -2186,6 +2426,19 @@ export interface components {
2186
2426
  directional_combination?: components["schemas"]["DirectionalCombination"];
2187
2427
  /** @description Excitation directions to analyze (default `[X, Y]`). */
2188
2428
  directions?: components["schemas"]["SeismicDirection"][];
2429
+ /**
2430
+ * @description Include the geometric (stress) stiffness of the `stiffness_reference`
2431
+ * state in the seismic eigen K: gravity preload lengthens the periods
2432
+ * and shifts the spectral response accordingly. Requires
2433
+ * `stiffness_reference`. Errors when the structure is unstable at the
2434
+ * reference load (α_cr ≤ 1). The preload acts through the eigenpairs
2435
+ * (periods and mode shapes) only: the equivalent-lateral-force static
2436
+ * response and all member-force/reaction recovery use the elastic
2437
+ * (reference-linearized) stiffness, keeping recovered forces in
2438
+ * equilibrium with the applied loads (see the
2439
+ * `preload_recovery_elastic_forces` advisory).
2440
+ */
2441
+ include_geometric_stiffness?: boolean | null;
2189
2442
  /**
2190
2443
  * @description Include structural self-mass (density·area + weight override) in the
2191
2444
  * seismic mass. Default true.
@@ -2213,6 +2466,7 @@ export interface components {
2213
2466
  spectrum_x: components["schemas"]["ResponseSpectrum"];
2214
2467
  spectrum_y?: null | components["schemas"]["ResponseSpectrum"];
2215
2468
  spectrum_z?: null | components["schemas"]["ResponseSpectrum"];
2469
+ stiffness_reference?: null | components["schemas"]["EigenLoadRef"];
2216
2470
  /**
2217
2471
  * Format: double
2218
2472
  * @description Eigen convergence tolerance (default 1e-6).
@@ -2309,6 +2563,12 @@ export interface components {
2309
2563
  SeismicResults: {
2310
2564
  lateral_force?: null | components["schemas"]["LateralForceResults"];
2311
2565
  modal_response_spectrum?: null | components["schemas"]["MrsaResults"];
2566
+ /**
2567
+ * @description Advisories that qualify these results — e.g. a `stiffness_reference`
2568
+ * curve linearization that did not converge. Empty otherwise.
2569
+ * @default []
2570
+ */
2571
+ warnings: components["schemas"]["SolverMessage"][];
2312
2572
  };
2313
2573
  /** @description Top-level settings: general project info and the unit system. */
2314
2574
  Settings: {
@@ -2426,6 +2686,11 @@ export interface components {
2426
2686
  };
2427
2687
  /** @enum {string} */
2428
2688
  SupportConditionType: "Fixed" | "Free" | "Spring" | "PositiveOnly" | "NegativeOnly";
2689
+ /**
2690
+ * @description Global support DOF label for reporting linearized spring stiffnesses.
2691
+ * @enum {string}
2692
+ */
2693
+ SupportDofLabel: "X" | "Y" | "Z" | "RX" | "RY" | "RZ" | "WARPING";
2429
2694
  /**
2430
2695
  * @description Which global reaction component a **support** stiffness curve depends on.
2431
2696
  *
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.50",
4
+ "version": "0.2.52",
5
5
  "license": "BSD-3-Clause",
6
6
  "repository": {
7
7
  "type": "git",