@theerapat-s28/ts-structural-eng-tools 3.1.0 → 3.2.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 +33 -1
- package/README.md +284 -127
- package/dist/core/errors/fea.error.d.ts +47 -0
- package/dist/{esm/core/errors/frame-analysis.error.js → core/errors/fea.error.js} +14 -5
- package/dist/core/errors/fea.error.js.map +1 -0
- package/dist/core/index.d.ts +4 -2
- package/dist/core/index.js +8 -4
- package/dist/core/index.js.map +1 -1
- package/dist/{core/errors/frame-analysis.error.js → esm/core/errors/fea.error.js} +10 -9
- package/dist/esm/core/errors/fea.error.js.map +1 -0
- package/dist/esm/core/index.js +3 -1
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/fea/analysis/index.js +6 -0
- package/dist/esm/fea/analysis/index.js.map +1 -0
- package/dist/esm/fea/{frame → analysis}/mesh/expand-model.js +12 -6
- package/dist/esm/fea/analysis/mesh/expand-model.js.map +1 -0
- package/dist/esm/fea/{frame → analysis}/post/demand-envelope.js +4 -4
- package/dist/esm/fea/analysis/post/demand-envelope.js.map +1 -0
- package/dist/esm/fea/analysis/post/envelope.js.map +1 -0
- package/dist/esm/fea/{frame → analysis}/post/present-state.js +4 -4
- package/dist/esm/fea/analysis/post/present-state.js.map +1 -0
- package/dist/esm/fea/{frame/solver/frame-system.js → analysis/solver/analysis-system.js} +17 -90
- package/dist/esm/fea/analysis/solver/analysis-system.js.map +1 -0
- package/dist/esm/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +20 -18
- package/dist/esm/fea/analysis/solver/analyze.js.map +1 -0
- package/dist/esm/fea/{frame → analysis}/solver/combinations.js +8 -8
- package/dist/esm/fea/analysis/solver/combinations.js.map +1 -0
- package/dist/esm/fea/analysis/solver/distribute-area-loads.js +25 -0
- package/dist/esm/fea/analysis/solver/distribute-area-loads.js.map +1 -0
- package/dist/esm/fea/analysis/solver/load-case-solver.js +103 -0
- package/dist/esm/fea/analysis/solver/load-case-solver.js.map +1 -0
- package/dist/esm/fea/analysis/types/model.type.js +2 -0
- package/dist/esm/fea/analysis/types/model.type.js.map +1 -0
- package/dist/esm/fea/analysis/types/results.type.js +2 -0
- package/dist/esm/fea/analysis/types/results.type.js.map +1 -0
- package/dist/esm/fea/analysis/validation/validate-model.js +263 -0
- package/dist/esm/fea/analysis/validation/validate-model.js.map +1 -0
- package/dist/esm/fea/deprecated.js +9 -0
- package/dist/esm/fea/deprecated.js.map +1 -0
- package/dist/esm/fea/frame/area/{distribute-area-loads.js → area-member-loads.js} +7 -28
- package/dist/esm/fea/frame/area/area-member-loads.js.map +1 -0
- package/dist/esm/fea/frame/area/edge-members.js.map +1 -1
- package/dist/esm/fea/frame/elements/end-releases.js +2 -6
- package/dist/esm/fea/frame/elements/end-releases.js.map +1 -1
- package/dist/esm/fea/frame/elements/fixed-end-forces.js +5 -5
- package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -1
- package/dist/esm/fea/frame/elements/static-condensation.js +3 -3
- package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -1
- package/dist/esm/fea/frame/index.js +1 -4
- package/dist/esm/fea/frame/index.js.map +1 -1
- package/dist/esm/fea/frame/post/member-diagram.js.map +1 -1
- package/dist/esm/fea/frame/solver/{global-assembly.js → member-assembly.js} +2 -10
- package/dist/esm/fea/frame/solver/member-assembly.js.map +1 -0
- package/dist/esm/fea/frame/solver/member-loads.js +141 -0
- package/dist/esm/fea/frame/solver/member-loads.js.map +1 -0
- package/dist/esm/fea/frame/solver/system-member.js +66 -0
- package/dist/esm/fea/frame/solver/system-member.js.map +1 -0
- package/dist/esm/fea/frame/transformation/coordinate-transform.js +3 -3
- package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -1
- package/dist/esm/fea/frame/validation/validate-members.js +160 -0
- package/dist/esm/fea/frame/validation/validate-members.js.map +1 -0
- package/dist/esm/fea/frame/validation/validate-null-areas.js +88 -0
- package/dist/esm/fea/frame/validation/validate-null-areas.js.map +1 -0
- package/dist/esm/fea/index.js +4 -1
- package/dist/esm/fea/index.js.map +1 -1
- package/dist/esm/fea/shared/index.js +2 -0
- package/dist/esm/fea/shared/index.js.map +1 -0
- package/dist/esm/fea/shared/solver/auto-restraint.js.map +1 -0
- package/dist/esm/fea/{frame → shared}/solver/boundary-conditions.js +5 -1
- package/dist/esm/fea/shared/solver/boundary-conditions.js.map +1 -0
- package/dist/esm/fea/shared/solver/global-assembly.js +10 -0
- package/dist/esm/fea/shared/solver/global-assembly.js.map +1 -0
- package/dist/esm/fea/shared/types/model.type.js +2 -0
- package/dist/esm/fea/shared/types/model.type.js.map +1 -0
- package/dist/esm/fea/shared/validation/issues.js +32 -0
- package/dist/esm/fea/shared/validation/issues.js.map +1 -0
- package/dist/esm/fea/{frame/elements/shell → shell/elements}/dkq-plate.js +1 -1
- package/dist/esm/fea/shell/elements/dkq-plate.js.map +1 -0
- package/dist/esm/fea/{frame/elements/shell → shell/elements}/flat-shell.js +1 -1
- package/dist/esm/fea/shell/elements/flat-shell.js.map +1 -0
- package/dist/esm/fea/{frame/elements/shell → shell/elements}/membrane-quad.js +2 -2
- package/dist/esm/fea/shell/elements/membrane-quad.js.map +1 -0
- package/dist/esm/fea/shell/elements/quad-geometry.js.map +1 -0
- package/dist/esm/fea/shell/elements/rigidity.js.map +1 -0
- package/dist/esm/fea/{frame/elements/shell → shell/elements}/shell-axes.js +1 -1
- package/dist/esm/fea/shell/elements/shell-axes.js.map +1 -0
- package/dist/esm/fea/shell/index.js +2 -0
- package/dist/esm/fea/shell/index.js.map +1 -0
- package/dist/esm/fea/{frame → shell}/mesh/mesh-shells.js +1 -1
- package/dist/esm/fea/shell/mesh/mesh-shells.js.map +1 -0
- package/dist/esm/fea/{frame → shell}/post/shell-forces.js +4 -4
- package/dist/esm/fea/{frame → shell}/post/shell-forces.js.map +1 -1
- package/dist/esm/fea/shell/solver/shell-loads.js +53 -0
- package/dist/esm/fea/shell/solver/shell-loads.js.map +1 -0
- package/dist/esm/fea/shell/solver/system-shell.js +37 -0
- package/dist/esm/fea/shell/solver/system-shell.js.map +1 -0
- package/dist/esm/fea/shell/types/model.type.js +2 -0
- package/dist/esm/fea/shell/types/model.type.js.map +1 -0
- package/dist/esm/fea/shell/types/results.type.js +2 -0
- package/dist/esm/fea/shell/types/results.type.js.map +1 -0
- package/dist/esm/fea/shell/validation/validate-shells.js +98 -0
- package/dist/esm/fea/shell/validation/validate-shells.js.map +1 -0
- package/dist/esm/index.js +5 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/fea/analysis/index.d.ts +8 -0
- package/dist/fea/analysis/index.js +14 -0
- package/dist/fea/analysis/index.js.map +1 -0
- package/dist/fea/{frame → analysis}/mesh/expand-model.d.ts +9 -7
- package/dist/fea/{frame → analysis}/mesh/expand-model.js +12 -6
- package/dist/fea/analysis/mesh/expand-model.js.map +1 -0
- package/dist/fea/{frame → analysis}/post/demand-envelope.d.ts +5 -5
- package/dist/fea/{frame → analysis}/post/demand-envelope.js +4 -4
- package/dist/fea/analysis/post/demand-envelope.js.map +1 -0
- package/dist/fea/{frame → analysis}/post/envelope.d.ts +2 -2
- package/dist/fea/analysis/post/envelope.js.map +1 -0
- package/dist/fea/{frame → analysis}/post/present-state.d.ts +6 -5
- package/dist/fea/{frame → analysis}/post/present-state.js +5 -5
- package/dist/fea/analysis/post/present-state.js.map +1 -0
- package/dist/fea/analysis/solver/analysis-system.d.ts +46 -0
- package/dist/fea/{frame/solver/frame-system.js → analysis/solver/analysis-system.js} +22 -95
- package/dist/fea/analysis/solver/analysis-system.js.map +1 -0
- package/dist/fea/{frame/solver/analyze-frame.d.ts → analysis/solver/analyze.d.ts} +23 -20
- package/dist/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +25 -23
- package/dist/fea/analysis/solver/analyze.js.map +1 -0
- package/dist/fea/{frame → analysis}/solver/combinations.d.ts +1 -1
- package/dist/fea/{frame → analysis}/solver/combinations.js +8 -8
- package/dist/fea/analysis/solver/combinations.js.map +1 -0
- package/dist/fea/{frame/area → analysis/solver}/distribute-area-loads.d.ts +6 -15
- package/dist/fea/analysis/solver/distribute-area-loads.js +29 -0
- package/dist/fea/analysis/solver/distribute-area-loads.js.map +1 -0
- package/dist/fea/{frame → analysis}/solver/load-case-solver.d.ts +9 -13
- package/dist/fea/analysis/solver/load-case-solver.js +108 -0
- package/dist/fea/analysis/solver/load-case-solver.js.map +1 -0
- package/dist/fea/analysis/types/model.type.d.ts +80 -0
- package/dist/fea/analysis/types/model.type.js +3 -0
- package/dist/fea/analysis/types/model.type.js.map +1 -0
- package/dist/fea/analysis/types/results.type.d.ts +113 -0
- package/dist/fea/analysis/types/results.type.js +3 -0
- package/dist/fea/analysis/types/results.type.js.map +1 -0
- package/dist/fea/analysis/validation/validate-model.d.ts +12 -0
- package/dist/fea/analysis/validation/validate-model.js +267 -0
- package/dist/fea/analysis/validation/validate-model.js.map +1 -0
- package/dist/fea/deprecated.d.ts +27 -0
- package/dist/fea/deprecated.js +12 -0
- package/dist/fea/deprecated.js.map +1 -0
- package/dist/fea/frame/area/area-member-loads.d.ts +19 -0
- package/dist/fea/frame/area/{distribute-area-loads.js → area-member-loads.js} +8 -30
- package/dist/fea/frame/area/area-member-loads.js.map +1 -0
- package/dist/fea/frame/area/edge-members.d.ts +5 -4
- package/dist/fea/frame/area/edge-members.js.map +1 -1
- package/dist/fea/frame/elements/end-releases.d.ts +1 -6
- package/dist/fea/frame/elements/end-releases.js +4 -8
- package/dist/fea/frame/elements/end-releases.js.map +1 -1
- package/dist/fea/frame/elements/fixed-end-forces.d.ts +1 -1
- package/dist/fea/frame/elements/fixed-end-forces.js +5 -5
- package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -1
- package/dist/fea/frame/elements/static-condensation.d.ts +1 -1
- package/dist/fea/frame/elements/static-condensation.js +3 -3
- package/dist/fea/frame/elements/static-condensation.js.map +1 -1
- package/dist/fea/frame/index.d.ts +2 -8
- package/dist/fea/frame/index.js +2 -10
- package/dist/fea/frame/index.js.map +1 -1
- package/dist/fea/frame/post/member-diagram.d.ts +3 -3
- package/dist/fea/frame/post/member-diagram.js.map +1 -1
- package/dist/fea/frame/solver/{global-assembly.d.ts → member-assembly.d.ts} +0 -11
- package/dist/fea/frame/solver/{global-assembly.js → member-assembly.js} +4 -13
- package/dist/fea/frame/solver/member-assembly.js.map +1 -0
- package/dist/fea/frame/solver/member-loads.d.ts +21 -0
- package/dist/fea/frame/solver/member-loads.js +146 -0
- package/dist/fea/frame/solver/member-loads.js.map +1 -0
- package/dist/fea/frame/solver/system-member.d.ts +50 -0
- package/dist/fea/frame/solver/system-member.js +70 -0
- package/dist/fea/frame/solver/system-member.js.map +1 -0
- package/dist/fea/frame/transformation/coordinate-transform.d.ts +1 -1
- package/dist/fea/frame/transformation/coordinate-transform.js +3 -3
- package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -1
- package/dist/fea/frame/types/model.type.d.ts +10 -175
- package/dist/fea/frame/types/results.type.d.ts +4 -159
- package/dist/fea/frame/validation/validate-members.d.ts +30 -0
- package/dist/fea/frame/validation/validate-members.js +165 -0
- package/dist/fea/frame/validation/validate-members.js.map +1 -0
- package/dist/fea/frame/validation/validate-null-areas.d.ts +38 -0
- package/dist/fea/frame/validation/validate-null-areas.js +93 -0
- package/dist/fea/frame/validation/validate-null-areas.js.map +1 -0
- package/dist/fea/index.d.ts +4 -0
- package/dist/fea/index.js +4 -1
- package/dist/fea/index.js.map +1 -1
- package/dist/fea/shared/index.d.ts +1 -0
- package/dist/fea/shared/index.js +3 -0
- package/dist/fea/shared/index.js.map +1 -0
- package/dist/fea/shared/solver/auto-restraint.js.map +1 -0
- package/dist/fea/{frame → shared}/solver/boundary-conditions.d.ts +5 -0
- package/dist/fea/{frame → shared}/solver/boundary-conditions.js +7 -3
- package/dist/fea/shared/solver/boundary-conditions.js.map +1 -0
- package/dist/fea/shared/solver/global-assembly.d.ts +12 -0
- package/dist/fea/shared/solver/global-assembly.js +14 -0
- package/dist/fea/shared/solver/global-assembly.js.map +1 -0
- package/dist/fea/shared/types/model.type.d.ts +34 -0
- package/dist/fea/shared/types/model.type.js +3 -0
- package/dist/fea/shared/types/model.type.js.map +1 -0
- package/dist/fea/shared/validation/issues.d.ts +9 -0
- package/dist/fea/shared/validation/issues.js +38 -0
- package/dist/fea/shared/validation/issues.js.map +1 -0
- package/dist/fea/{frame/elements/shell → shell/elements}/dkq-plate.d.ts +1 -1
- package/dist/fea/{frame/elements/shell → shell/elements}/dkq-plate.js +1 -1
- package/dist/fea/shell/elements/dkq-plate.js.map +1 -0
- package/dist/fea/{frame/elements/shell → shell/elements}/flat-shell.d.ts +1 -1
- package/dist/fea/{frame/elements/shell → shell/elements}/flat-shell.js +1 -1
- package/dist/fea/shell/elements/flat-shell.js.map +1 -0
- package/dist/fea/{frame/elements/shell → shell/elements}/membrane-quad.d.ts +1 -1
- package/dist/fea/{frame/elements/shell → shell/elements}/membrane-quad.js +2 -2
- package/dist/fea/shell/elements/membrane-quad.js.map +1 -0
- package/dist/fea/shell/elements/quad-geometry.js.map +1 -0
- package/dist/fea/{frame/elements/shell → shell/elements}/rigidity.d.ts +1 -1
- package/dist/fea/shell/elements/rigidity.js.map +1 -0
- package/dist/fea/{frame/elements/shell → shell/elements}/shell-axes.d.ts +1 -1
- package/dist/fea/{frame/elements/shell → shell/elements}/shell-axes.js +1 -1
- package/dist/fea/shell/elements/shell-axes.js.map +1 -0
- package/dist/fea/shell/index.d.ts +2 -0
- package/dist/fea/shell/index.js +3 -0
- package/dist/fea/shell/index.js.map +1 -0
- package/dist/fea/{frame → shell}/mesh/mesh-shells.d.ts +7 -6
- package/dist/fea/{frame → shell}/mesh/mesh-shells.js +1 -1
- package/dist/fea/shell/mesh/mesh-shells.js.map +1 -0
- package/dist/fea/{frame → shell}/post/shell-forces.d.ts +1 -1
- package/dist/fea/{frame → shell}/post/shell-forces.js +4 -4
- package/dist/fea/{frame → shell}/post/shell-forces.js.map +1 -1
- package/dist/fea/shell/solver/shell-loads.d.ts +17 -0
- package/dist/fea/shell/solver/shell-loads.js +57 -0
- package/dist/fea/shell/solver/shell-loads.js.map +1 -0
- package/dist/fea/shell/solver/system-shell.d.ts +29 -0
- package/dist/fea/shell/solver/system-shell.js +41 -0
- package/dist/fea/shell/solver/system-shell.js.map +1 -0
- package/dist/fea/shell/types/model.type.d.ts +57 -0
- package/dist/fea/shell/types/model.type.js +3 -0
- package/dist/fea/shell/types/model.type.js.map +1 -0
- package/dist/fea/shell/types/results.type.d.ts +47 -0
- package/dist/fea/shell/types/results.type.js +3 -0
- package/dist/fea/shell/types/results.type.js.map +1 -0
- package/dist/fea/shell/validation/validate-shells.d.ts +21 -0
- package/dist/fea/shell/validation/validate-shells.js +103 -0
- package/dist/fea/shell/validation/validate-shells.js.map +1 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +13 -6
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/core/errors/frame-analysis.error.d.ts +0 -37
- package/dist/core/errors/frame-analysis.error.js.map +0 -1
- package/dist/esm/core/errors/frame-analysis.error.js.map +0 -1
- package/dist/esm/fea/frame/area/distribute-area-loads.js.map +0 -1
- package/dist/esm/fea/frame/elements/shell/dkq-plate.js.map +0 -1
- package/dist/esm/fea/frame/elements/shell/flat-shell.js.map +0 -1
- package/dist/esm/fea/frame/elements/shell/membrane-quad.js.map +0 -1
- package/dist/esm/fea/frame/elements/shell/quad-geometry.js.map +0 -1
- package/dist/esm/fea/frame/elements/shell/rigidity.js.map +0 -1
- package/dist/esm/fea/frame/elements/shell/shell-axes.js.map +0 -1
- package/dist/esm/fea/frame/mesh/expand-model.js.map +0 -1
- package/dist/esm/fea/frame/mesh/mesh-shells.js.map +0 -1
- package/dist/esm/fea/frame/post/demand-envelope.js.map +0 -1
- package/dist/esm/fea/frame/post/envelope.js.map +0 -1
- package/dist/esm/fea/frame/post/present-state.js.map +0 -1
- package/dist/esm/fea/frame/solver/analyze-frame.js.map +0 -1
- package/dist/esm/fea/frame/solver/auto-restraint.js.map +0 -1
- package/dist/esm/fea/frame/solver/boundary-conditions.js.map +0 -1
- package/dist/esm/fea/frame/solver/combinations.js.map +0 -1
- package/dist/esm/fea/frame/solver/frame-system.js.map +0 -1
- package/dist/esm/fea/frame/solver/global-assembly.js.map +0 -1
- package/dist/esm/fea/frame/solver/load-case-solver.js +0 -255
- package/dist/esm/fea/frame/solver/load-case-solver.js.map +0 -1
- package/dist/esm/fea/frame/validation/validate-model.js +0 -529
- package/dist/esm/fea/frame/validation/validate-model.js.map +0 -1
- package/dist/fea/frame/area/distribute-area-loads.js.map +0 -1
- package/dist/fea/frame/elements/shell/dkq-plate.js.map +0 -1
- package/dist/fea/frame/elements/shell/flat-shell.js.map +0 -1
- package/dist/fea/frame/elements/shell/membrane-quad.js.map +0 -1
- package/dist/fea/frame/elements/shell/quad-geometry.js.map +0 -1
- package/dist/fea/frame/elements/shell/rigidity.js.map +0 -1
- package/dist/fea/frame/elements/shell/shell-axes.js.map +0 -1
- package/dist/fea/frame/mesh/expand-model.js.map +0 -1
- package/dist/fea/frame/mesh/mesh-shells.js.map +0 -1
- package/dist/fea/frame/post/demand-envelope.js.map +0 -1
- package/dist/fea/frame/post/envelope.js.map +0 -1
- package/dist/fea/frame/post/present-state.js.map +0 -1
- package/dist/fea/frame/solver/analyze-frame.js.map +0 -1
- package/dist/fea/frame/solver/auto-restraint.js.map +0 -1
- package/dist/fea/frame/solver/boundary-conditions.js.map +0 -1
- package/dist/fea/frame/solver/combinations.js.map +0 -1
- package/dist/fea/frame/solver/frame-system.d.ts +0 -89
- package/dist/fea/frame/solver/frame-system.js.map +0 -1
- package/dist/fea/frame/solver/global-assembly.js.map +0 -1
- package/dist/fea/frame/solver/load-case-solver.js +0 -260
- package/dist/fea/frame/solver/load-case-solver.js.map +0 -1
- package/dist/fea/frame/validation/validate-model.d.ts +0 -19
- package/dist/fea/frame/validation/validate-model.js +0 -535
- package/dist/fea/frame/validation/validate-model.js.map +0 -1
- /package/dist/esm/fea/{frame → analysis}/post/envelope.js +0 -0
- /package/dist/esm/fea/{frame → shared}/solver/auto-restraint.js +0 -0
- /package/dist/esm/fea/{frame/elements/shell → shell/elements}/quad-geometry.js +0 -0
- /package/dist/esm/fea/{frame/elements/shell → shell/elements}/rigidity.js +0 -0
- /package/dist/fea/{frame → analysis}/post/envelope.js +0 -0
- /package/dist/fea/{frame → shared}/solver/auto-restraint.d.ts +0 -0
- /package/dist/fea/{frame → shared}/solver/auto-restraint.js +0 -0
- /package/dist/fea/{frame/elements/shell → shell/elements}/quad-geometry.d.ts +0 -0
- /package/dist/fea/{frame/elements/shell → shell/elements}/quad-geometry.js +0 -0
- /package/dist/fea/{frame/elements/shell → shell/elements}/rigidity.js +0 -0
|
@@ -1,23 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { FrameId, FrameNode, LoadCaseType } from "./model.type";
|
|
3
|
-
export interface NodalDisplacement {
|
|
4
|
-
nodeId: FrameId;
|
|
5
|
-
ux: number;
|
|
6
|
-
uy: number;
|
|
7
|
-
uz: number;
|
|
8
|
-
rx: number;
|
|
9
|
-
ry: number;
|
|
10
|
-
rz: number;
|
|
11
|
-
}
|
|
12
|
-
export interface NodalReaction {
|
|
13
|
-
nodeId: FrameId;
|
|
14
|
-
fx: number;
|
|
15
|
-
fy: number;
|
|
16
|
-
fz: number;
|
|
17
|
-
mx: number;
|
|
18
|
-
my: number;
|
|
19
|
-
mz: number;
|
|
20
|
-
}
|
|
1
|
+
import type { FeaId } from "../../shared/types/model.type";
|
|
21
2
|
/** Force the node exerts on one member end, in local axes 1, 2, 3 (right-hand rotations). */
|
|
22
3
|
export interface MemberEndForce {
|
|
23
4
|
f1: number;
|
|
@@ -28,7 +9,7 @@ export interface MemberEndForce {
|
|
|
28
9
|
m3: number;
|
|
29
10
|
}
|
|
30
11
|
export interface MemberEndForces {
|
|
31
|
-
memberId:
|
|
12
|
+
memberId: FeaId;
|
|
32
13
|
start: MemberEndForce;
|
|
33
14
|
end: MemberEndForce;
|
|
34
15
|
}
|
|
@@ -46,18 +27,10 @@ export interface ReleaseDeformation {
|
|
|
46
27
|
r3: number;
|
|
47
28
|
}
|
|
48
29
|
export interface MemberReleaseDeformations {
|
|
49
|
-
memberId:
|
|
30
|
+
memberId: FeaId;
|
|
50
31
|
start: ReleaseDeformation;
|
|
51
32
|
end: ReleaseDeformation;
|
|
52
33
|
}
|
|
53
|
-
/** A rotation direction at a node held by `analyzeFrame` because no member resists it. */
|
|
54
|
-
export interface AutoRestrainedDof {
|
|
55
|
-
nodeId: FrameId;
|
|
56
|
-
/** Unit vector of the held rotation axis, global X, Y, Z. */
|
|
57
|
-
axis: [number, number, number];
|
|
58
|
-
/** The global rotation DOF when `axis` is a global axis. */
|
|
59
|
-
dof?: "rx" | "ry" | "rz";
|
|
60
|
-
}
|
|
61
34
|
/**
|
|
62
35
|
* Internal forces and displacements at a distance `x` from the member start. Forces act on
|
|
63
36
|
* the positive (+1) face of the cut; N is positive in tension. Displacements are the member's
|
|
@@ -86,7 +59,7 @@ export interface ExtremeValue {
|
|
|
86
59
|
x: number;
|
|
87
60
|
}
|
|
88
61
|
export interface MemberDiagram {
|
|
89
|
-
memberId:
|
|
62
|
+
memberId: FeaId;
|
|
90
63
|
length: number;
|
|
91
64
|
stations: MemberStation[];
|
|
92
65
|
extremes: Record<StationComponent, {
|
|
@@ -94,131 +67,3 @@ export interface MemberDiagram {
|
|
|
94
67
|
min: ExtremeValue;
|
|
95
68
|
}>;
|
|
96
69
|
}
|
|
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
|
-
}
|
|
143
|
-
/** Max or min of a result across combinations, with the combination that produces it. */
|
|
144
|
-
export interface GoverningValue {
|
|
145
|
-
value: number;
|
|
146
|
-
combinationId: string;
|
|
147
|
-
}
|
|
148
|
-
export interface GoverningExtremeValue extends GoverningValue {
|
|
149
|
-
x: number;
|
|
150
|
-
}
|
|
151
|
-
export type Bound<T> = {
|
|
152
|
-
max: T;
|
|
153
|
-
min: T;
|
|
154
|
-
};
|
|
155
|
-
/** Results of one load case or one load combination. */
|
|
156
|
-
export interface FrameCaseResult {
|
|
157
|
-
id: string;
|
|
158
|
-
kind: "case" | "combination";
|
|
159
|
-
name?: string;
|
|
160
|
-
type?: LoadCaseType;
|
|
161
|
-
nodalDisplacements: NodalDisplacement[];
|
|
162
|
-
reactions: NodalReaction[];
|
|
163
|
-
memberEndForces: MemberEndForces[];
|
|
164
|
-
/** One entry per member with any released or spring end DOF, in model order. */
|
|
165
|
-
releaseDeformations: MemberReleaseDeformations[];
|
|
166
|
-
memberDiagrams: MemberDiagram[];
|
|
167
|
-
/** One entry per shell area, in model order. */
|
|
168
|
-
shellForces: ShellElementForces[];
|
|
169
|
-
equilibriumResidual: {
|
|
170
|
-
force: number;
|
|
171
|
-
moment: number;
|
|
172
|
-
};
|
|
173
|
-
warnings: Warnings;
|
|
174
|
-
}
|
|
175
|
-
/** Max/min of every result across a set of combinations, with the governing combination. */
|
|
176
|
-
export interface FrameEnvelope {
|
|
177
|
-
combinationIds: string[];
|
|
178
|
-
nodalDisplacements: ({
|
|
179
|
-
nodeId: FrameId;
|
|
180
|
-
} & Record<"ux" | "uy" | "uz" | "rx" | "ry" | "rz", Bound<GoverningValue>>)[];
|
|
181
|
-
reactions: ({
|
|
182
|
-
nodeId: FrameId;
|
|
183
|
-
} & Record<"fx" | "fy" | "fz" | "mx" | "my" | "mz", Bound<GoverningValue>>)[];
|
|
184
|
-
members: {
|
|
185
|
-
memberId: FrameId;
|
|
186
|
-
extremes: Record<StationComponent, Bound<GoverningExtremeValue>>;
|
|
187
|
-
}[];
|
|
188
|
-
shells: {
|
|
189
|
-
shellId: FrameId;
|
|
190
|
-
corners: ({
|
|
191
|
-
nodeId: FrameId;
|
|
192
|
-
} & Record<ShellForceComponent, Bound<GoverningValue>>)[];
|
|
193
|
-
}[];
|
|
194
|
-
}
|
|
195
|
-
export interface FrameResult {
|
|
196
|
-
cases: Record<string, FrameCaseResult>;
|
|
197
|
-
combinations: Record<string, FrameCaseResult>;
|
|
198
|
-
/** Envelope over all combinations; absent when the model has none. */
|
|
199
|
-
envelope?: FrameEnvelope;
|
|
200
|
-
/** The shell mesh; absent when the model has no shells. */
|
|
201
|
-
mesh?: FrameMesh;
|
|
202
|
-
calculationDetails: {
|
|
203
|
-
nodeCount: number;
|
|
204
|
-
memberCount: number;
|
|
205
|
-
shellCount: number;
|
|
206
|
-
dofCount: number;
|
|
207
|
-
freeDofCount: number;
|
|
208
|
-
profileSize: number;
|
|
209
|
-
loadCaseCount: number;
|
|
210
|
-
combinationCount: number;
|
|
211
|
-
/** Joint rotations held because every member there releases them (e.g. truss joints). */
|
|
212
|
-
autoRestrainedDofs: AutoRestrainedDof[];
|
|
213
|
-
};
|
|
214
|
-
units: {
|
|
215
|
-
force: "kN";
|
|
216
|
-
moment: "kN·m";
|
|
217
|
-
length: "mm";
|
|
218
|
-
rotation: "rad";
|
|
219
|
-
forcePerLength: "kN/m";
|
|
220
|
-
momentPerLength: "kN·m/m";
|
|
221
|
-
stress: "MPa";
|
|
222
|
-
};
|
|
223
|
-
warnings: Warnings;
|
|
224
|
-
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type FeaModelIssue } from "../../../core/errors/fea.error";
|
|
2
|
+
import type { FeaId, FeaNode } from "../../shared/types/model.type";
|
|
3
|
+
import type { Member, MemberLoad } from "../types/model.type";
|
|
4
|
+
/**
|
|
5
|
+
* Checks each member on its own: its end nodes, section, `angle` and release values, a
|
|
6
|
+
* non-zero length, and end releases that leave it stable. Ends at nodes with invalid
|
|
7
|
+
* coordinates are not checked further; those are reported on the node.
|
|
8
|
+
*
|
|
9
|
+
* @param members - The model's members
|
|
10
|
+
* @param nodeById - Model nodes by id
|
|
11
|
+
* @param validNode - Ids of the nodes whose coordinates are valid
|
|
12
|
+
* @returns `issues` (codes 301, 302, 305, 307 and 314), in model order, with `memberId`, and the
|
|
13
|
+
* length (mm) of every member whose geometry is valid
|
|
14
|
+
*/
|
|
15
|
+
export declare const validateMembers: (members: Member[], nodeById: Map<FeaId, FeaNode>, validNode: Set<FeaId>) => {
|
|
16
|
+
issues: FeaModelIssue[];
|
|
17
|
+
memberLength: Map<FeaId, number>;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Checks member loads: their load case and member, `type`, direction and `projected`, finite
|
|
21
|
+
* intensities and positions, and an extent that lies within the member.
|
|
22
|
+
*
|
|
23
|
+
* @param loads - The model's member loads
|
|
24
|
+
* @param members - The model's members
|
|
25
|
+
* @param memberLength - Length of each member whose geometry is valid (from `validateMembers`)
|
|
26
|
+
* @param caseIds - Ids of the model's load cases
|
|
27
|
+
* @returns Every problem found (codes 302, 308, 309 and 314), in model order, with `memberId`
|
|
28
|
+
* and `loadCaseId`
|
|
29
|
+
*/
|
|
30
|
+
export declare const validateMemberLoads: (loads: MemberLoad[], members: Member[], memberLength: Map<FeaId, number>, caseIds: Set<string>) => FeaModelIssue[];
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateMemberLoads = exports.validateMembers = void 0;
|
|
4
|
+
const fea_error_1 = require("../../../core/errors/fea.error");
|
|
5
|
+
const issues_1 = require("../../shared/validation/issues");
|
|
6
|
+
const beam_3d_stiffness_1 = require("../elements/beam-3d-stiffness");
|
|
7
|
+
const end_releases_1 = require("../elements/end-releases");
|
|
8
|
+
const static_condensation_1 = require("../elements/static-condensation");
|
|
9
|
+
const SECTION_KEYS = ["E", "G", "A", "I22", "I33", "J"];
|
|
10
|
+
const DIRECTIONS = new Set(["1", "2", "3", "X", "Y", "Z"]);
|
|
11
|
+
const GLOBAL_DIRECTIONS = new Set(["X", "Y", "Z"]);
|
|
12
|
+
/**
|
|
13
|
+
* Checks each member on its own: its end nodes, section, `angle` and release values, a
|
|
14
|
+
* non-zero length, and end releases that leave it stable. Ends at nodes with invalid
|
|
15
|
+
* coordinates are not checked further; those are reported on the node.
|
|
16
|
+
*
|
|
17
|
+
* @param members - The model's members
|
|
18
|
+
* @param nodeById - Model nodes by id
|
|
19
|
+
* @param validNode - Ids of the nodes whose coordinates are valid
|
|
20
|
+
* @returns `issues` (codes 301, 302, 305, 307 and 314), in model order, with `memberId`, and the
|
|
21
|
+
* length (mm) of every member whose geometry is valid
|
|
22
|
+
*/
|
|
23
|
+
const validateMembers = (members, nodeById, validNode) => {
|
|
24
|
+
const issues = [];
|
|
25
|
+
const add = (std, details = {}) => issues.push((0, issues_1.modelIssue)(std, details));
|
|
26
|
+
const memberLength = new Map(); // only for members whose geometry is valid
|
|
27
|
+
for (const member of members) {
|
|
28
|
+
const at = { memberId: member.id };
|
|
29
|
+
let geometryOk = true;
|
|
30
|
+
for (const field of ["startNodeId", "endNodeId"]) {
|
|
31
|
+
if (!nodeById.has(member[field])) {
|
|
32
|
+
add(fea_error_1.FeaErrors.UNKNOWN_NODE_REFERENCE, { ...at, field });
|
|
33
|
+
geometryOk = false;
|
|
34
|
+
}
|
|
35
|
+
else if (!validNode.has(member[field])) {
|
|
36
|
+
geometryOk = false; // reported on the node
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const section = member.section ?? {};
|
|
40
|
+
let sectionOk = true;
|
|
41
|
+
for (const field of SECTION_KEYS) {
|
|
42
|
+
const v = section[field];
|
|
43
|
+
if (!(0, issues_1.isFiniteNumber)(v) || v <= 0) {
|
|
44
|
+
add(fea_error_1.FeaErrors.INVALID_SECTION_PROPERTIES, { ...at, field });
|
|
45
|
+
sectionOk = false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (section.unitWeight !== undefined &&
|
|
49
|
+
(!(0, issues_1.isFiniteNumber)(section.unitWeight) || section.unitWeight < 0)) {
|
|
50
|
+
add(fea_error_1.FeaErrors.INVALID_SECTION_PROPERTIES, { ...at, field: "unitWeight" });
|
|
51
|
+
}
|
|
52
|
+
if (member.angle !== undefined && !(0, issues_1.isFiniteNumber)(member.angle)) {
|
|
53
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field: "angle" });
|
|
54
|
+
}
|
|
55
|
+
// each release value: true/false, or a spring stiffness ≥ 0 (0 = full release)
|
|
56
|
+
let releasesOk = true;
|
|
57
|
+
for (const end of ["start", "end"]) {
|
|
58
|
+
const release = member.releases?.[end];
|
|
59
|
+
if (release === undefined)
|
|
60
|
+
continue;
|
|
61
|
+
for (const key of end_releases_1.RELEASE_KEYS) {
|
|
62
|
+
const v = release[key];
|
|
63
|
+
if (v === undefined || typeof v === "boolean" || ((0, issues_1.isFiniteNumber)(v) && v >= 0))
|
|
64
|
+
continue;
|
|
65
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field: `releases.${end}.${key}` });
|
|
66
|
+
releasesOk = false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (!geometryOk)
|
|
70
|
+
continue;
|
|
71
|
+
const a = nodeById.get(member.startNodeId);
|
|
72
|
+
const b = nodeById.get(member.endNodeId);
|
|
73
|
+
const L = Math.hypot(b.x - a.x, b.y - a.y, b.z - a.z);
|
|
74
|
+
if (!(L > 0)) {
|
|
75
|
+
add(fea_error_1.FeaErrors.ZERO_LENGTH_MEMBER, at);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
memberLength.set(member.id, L);
|
|
79
|
+
const releases = releasesOk ? (0, end_releases_1.memberEndReleases)(member.releases) : [];
|
|
80
|
+
if (sectionOk && releases.length > 0) {
|
|
81
|
+
const { E, G, A, I22, I33, J } = section;
|
|
82
|
+
try {
|
|
83
|
+
(0, static_condensation_1.condenseMember)((0, beam_3d_stiffness_1.beam3dLocalStiffnessRightHanded)(E, G, A, I22, I33, J, L), releases);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
add(fea_error_1.FeaErrors.INVALID_RELEASE, at);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { issues, memberLength };
|
|
91
|
+
};
|
|
92
|
+
exports.validateMembers = validateMembers;
|
|
93
|
+
/**
|
|
94
|
+
* Checks member loads: their load case and member, `type`, direction and `projected`, finite
|
|
95
|
+
* intensities and positions, and an extent that lies within the member.
|
|
96
|
+
*
|
|
97
|
+
* @param loads - The model's member loads
|
|
98
|
+
* @param members - The model's members
|
|
99
|
+
* @param memberLength - Length of each member whose geometry is valid (from `validateMembers`)
|
|
100
|
+
* @param caseIds - Ids of the model's load cases
|
|
101
|
+
* @returns Every problem found (codes 302, 308, 309 and 314), in model order, with `memberId`
|
|
102
|
+
* and `loadCaseId`
|
|
103
|
+
*/
|
|
104
|
+
const validateMemberLoads = (loads, members, memberLength, caseIds) => {
|
|
105
|
+
const issues = [];
|
|
106
|
+
const add = (std, details = {}) => issues.push((0, issues_1.modelIssue)(std, details));
|
|
107
|
+
for (const load of loads) {
|
|
108
|
+
const at = { loadCaseId: load.loadCase, memberId: load.memberId };
|
|
109
|
+
if (!caseIds.has(load.loadCase))
|
|
110
|
+
add(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, { ...at, field: "loadCase" });
|
|
111
|
+
const memberKnown = members.some((m) => m.id === load.memberId);
|
|
112
|
+
if (!memberKnown)
|
|
113
|
+
add(fea_error_1.FeaErrors.UNKNOWN_NODE_REFERENCE, { ...at, field: "memberId" });
|
|
114
|
+
if (load.type !== "torque" && !DIRECTIONS.has(load.direction))
|
|
115
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field: "direction" });
|
|
116
|
+
// a projected length needs a distributed load in a global direction
|
|
117
|
+
const projected = load.projected;
|
|
118
|
+
if ((projected !== undefined && typeof projected !== "boolean") ||
|
|
119
|
+
(projected === true &&
|
|
120
|
+
((load.type !== "udl" && load.type !== "trapezoidal") ||
|
|
121
|
+
!GLOBAL_DIRECTIONS.has(load.direction)))) {
|
|
122
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field: "projected" });
|
|
123
|
+
}
|
|
124
|
+
const L = memberLength.get(load.memberId);
|
|
125
|
+
if (load.type === "udl" || load.type === "trapezoidal" || load.type === "torque") {
|
|
126
|
+
const intensities = load.type === "udl"
|
|
127
|
+
? { w: load.w }
|
|
128
|
+
: load.type === "trapezoidal"
|
|
129
|
+
? { w1: load.w1, w2: load.w2 }
|
|
130
|
+
: { t: load.t };
|
|
131
|
+
const extent = { start: load.start, end: load.end };
|
|
132
|
+
let ok = true;
|
|
133
|
+
for (const [field, v] of [...Object.entries(intensities), ...Object.entries(extent)]) {
|
|
134
|
+
if ((field in intensities || v !== undefined) && !(0, issues_1.isFiniteNumber)(v)) {
|
|
135
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field });
|
|
136
|
+
ok = false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (ok && L !== undefined) {
|
|
140
|
+
const start = load.start ?? 0;
|
|
141
|
+
const end = load.end ?? L;
|
|
142
|
+
if (!(start >= 0 && end <= L && start < end))
|
|
143
|
+
add(fea_error_1.FeaErrors.LOAD_OUTSIDE_MEMBER, at);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else if (load.type === "point") {
|
|
147
|
+
let ok = true;
|
|
148
|
+
for (const field of ["P", "a"]) {
|
|
149
|
+
if (!(0, issues_1.isFiniteNumber)(load[field])) {
|
|
150
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field });
|
|
151
|
+
ok = false;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (ok && L !== undefined && !(load.a >= 0 && load.a <= L)) {
|
|
155
|
+
add(fea_error_1.FeaErrors.LOAD_OUTSIDE_MEMBER, at);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field: "type" });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return issues;
|
|
163
|
+
};
|
|
164
|
+
exports.validateMemberLoads = validateMemberLoads;
|
|
165
|
+
//# sourceMappingURL=validate-members.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-members.js","sourceRoot":"","sources":["../../../../src/fea/frame/validation/validate-members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type FeaModelIssue } from "../../../core/errors/fea.error";
|
|
2
|
+
import type { FeaId, FeaNode } from "../../shared/types/model.type";
|
|
3
|
+
import { type AreaPlane, type AreaSupports, type Vec3 } from "../area/area-geometry";
|
|
4
|
+
import type { Member, NullArea } from "../types/model.type";
|
|
5
|
+
/** A null area whose geometry and supports are valid, with its plane and loaded edges. */
|
|
6
|
+
export interface NullAreaInfo {
|
|
7
|
+
area: NullArea;
|
|
8
|
+
plane: AreaPlane;
|
|
9
|
+
supports: AreaSupports;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Checks each null area: its `distribution`, corners (3 or 4 known nodes, planar and convex; a
|
|
13
|
+
* rectangle for a cantilever), `supportEdges`, and members covering every edge that receives
|
|
14
|
+
* load. Corners at nodes with invalid coordinates are skipped; those are reported on the node.
|
|
15
|
+
*
|
|
16
|
+
* @param areas - The model's null areas
|
|
17
|
+
* @param members - The model's members
|
|
18
|
+
* @param memberLength - Length of each member whose geometry is valid (from `validateMembers`);
|
|
19
|
+
* only those can support an edge
|
|
20
|
+
* @param nodeById - Model nodes by id
|
|
21
|
+
* @param validNode - Ids of the nodes whose coordinates are valid
|
|
22
|
+
* @returns `issues` (codes 302, 314, 315, 316 and 317), in model order, with `areaId`, and the
|
|
23
|
+
* plane and supports of every area that passed
|
|
24
|
+
*/
|
|
25
|
+
export declare const validateNullAreas: (areas: NullArea[], members: Member[], memberLength: Map<FeaId, number>, nodeById: Map<FeaId, FeaNode>, validNode: Set<FeaId>) => {
|
|
26
|
+
issues: FeaModelIssue[];
|
|
27
|
+
areaInfo: Map<FeaId, NullAreaInfo>;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Whether a load along global `direction` acts partly along the support edge of a cantilever
|
|
31
|
+
* area, which its distribution cannot carry: a cantilever sends its load to the support edge as
|
|
32
|
+
* a line load plus a torque about that edge, and a component along the edge would also need a
|
|
33
|
+
* distributed moment about the normal. Always false for other distributions.
|
|
34
|
+
*
|
|
35
|
+
* @param info - The area, as `validateNullAreas` returns it
|
|
36
|
+
* @param direction - The load's global direction (unit vector)
|
|
37
|
+
*/
|
|
38
|
+
export declare const loadsAlongCantileverSupport: (info: NullAreaInfo, direction: Vec3) => boolean;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadsAlongCantileverSupport = exports.validateNullAreas = void 0;
|
|
4
|
+
const frame_constant_1 = require("../../../core/constants/frame.constant");
|
|
5
|
+
const fea_error_1 = require("../../../core/errors/fea.error");
|
|
6
|
+
const issues_1 = require("../../shared/validation/issues");
|
|
7
|
+
const area_geometry_1 = require("../area/area-geometry");
|
|
8
|
+
const edge_members_1 = require("../area/edge-members");
|
|
9
|
+
const AREA_DISTRIBUTIONS = new Set(["twoWay", "oneWay", "cantilever"]);
|
|
10
|
+
/**
|
|
11
|
+
* Checks each null area: its `distribution`, corners (3 or 4 known nodes, planar and convex; a
|
|
12
|
+
* rectangle for a cantilever), `supportEdges`, and members covering every edge that receives
|
|
13
|
+
* load. Corners at nodes with invalid coordinates are skipped; those are reported on the node.
|
|
14
|
+
*
|
|
15
|
+
* @param areas - The model's null areas
|
|
16
|
+
* @param members - The model's members
|
|
17
|
+
* @param memberLength - Length of each member whose geometry is valid (from `validateMembers`);
|
|
18
|
+
* only those can support an edge
|
|
19
|
+
* @param nodeById - Model nodes by id
|
|
20
|
+
* @param validNode - Ids of the nodes whose coordinates are valid
|
|
21
|
+
* @returns `issues` (codes 302, 314, 315, 316 and 317), in model order, with `areaId`, and the
|
|
22
|
+
* plane and supports of every area that passed
|
|
23
|
+
*/
|
|
24
|
+
const validateNullAreas = (areas, members, memberLength, nodeById, validNode) => {
|
|
25
|
+
const issues = [];
|
|
26
|
+
const add = (std, details = {}) => issues.push((0, issues_1.modelIssue)(std, details));
|
|
27
|
+
const adjacency = (0, edge_members_1.memberAdjacency)(members.filter((m) => memberLength.has(m.id)));
|
|
28
|
+
const position = (id) => {
|
|
29
|
+
const node = nodeById.get(id);
|
|
30
|
+
return [node.x, node.y, node.z];
|
|
31
|
+
};
|
|
32
|
+
// only for areas whose geometry and supports are valid
|
|
33
|
+
const areaInfo = new Map();
|
|
34
|
+
for (const area of areas) {
|
|
35
|
+
const at = { areaId: area.id };
|
|
36
|
+
const distributionOk = AREA_DISTRIBUTIONS.has(area.distribution);
|
|
37
|
+
if (!distributionOk)
|
|
38
|
+
add(fea_error_1.FeaErrors.INVALID_INPUT_VALUE, { ...at, field: "distribution" });
|
|
39
|
+
const ids = Array.isArray(area.nodeIds) ? area.nodeIds : [];
|
|
40
|
+
if (ids.length !== 3 && ids.length !== 4) {
|
|
41
|
+
add(fea_error_1.FeaErrors.INVALID_AREA_GEOMETRY, { ...at, field: "nodeIds" });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
if (ids.some((id) => !nodeById.has(id))) {
|
|
45
|
+
add(fea_error_1.FeaErrors.UNKNOWN_NODE_REFERENCE, { ...at, field: "nodeIds" });
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!ids.every((id) => validNode.has(id)))
|
|
49
|
+
continue; // reported on the node
|
|
50
|
+
const plane = (0, area_geometry_1.areaPlane)(ids.map(position));
|
|
51
|
+
if ("problem" in plane) {
|
|
52
|
+
add(fea_error_1.FeaErrors.INVALID_AREA_GEOMETRY, { ...at, field: "nodeIds" });
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (!distributionOk)
|
|
56
|
+
continue;
|
|
57
|
+
if (area.distribution === "cantilever" && !(0, area_geometry_1.isRectangle)(plane)) {
|
|
58
|
+
add(fea_error_1.FeaErrors.INVALID_AREA_GEOMETRY, { ...at, field: "nodeIds" });
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const supports = (0, area_geometry_1.resolveAreaSupports)(plane, area.distribution, area.supportEdges);
|
|
62
|
+
if (!supports) {
|
|
63
|
+
add(fea_error_1.FeaErrors.INVALID_AREA_DISTRIBUTION, { ...at, field: "supportEdges" });
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
for (const edge of supports.loadedEdges) {
|
|
67
|
+
const chain = (0, edge_members_1.edgeMemberChain)(ids[edge], ids[(edge + 1) % ids.length], position, adjacency);
|
|
68
|
+
if (!chain)
|
|
69
|
+
add(fea_error_1.FeaErrors.AREA_EDGE_UNSUPPORTED, { ...at, edge });
|
|
70
|
+
}
|
|
71
|
+
areaInfo.set(area.id, { area, plane, supports });
|
|
72
|
+
}
|
|
73
|
+
return { issues, areaInfo };
|
|
74
|
+
};
|
|
75
|
+
exports.validateNullAreas = validateNullAreas;
|
|
76
|
+
/**
|
|
77
|
+
* Whether a load along global `direction` acts partly along the support edge of a cantilever
|
|
78
|
+
* area, which its distribution cannot carry: a cantilever sends its load to the support edge as
|
|
79
|
+
* a line load plus a torque about that edge, and a component along the edge would also need a
|
|
80
|
+
* distributed moment about the normal. Always false for other distributions.
|
|
81
|
+
*
|
|
82
|
+
* @param info - The area, as `validateNullAreas` returns it
|
|
83
|
+
* @param direction - The load's global direction (unit vector)
|
|
84
|
+
*/
|
|
85
|
+
const loadsAlongCantileverSupport = (info, direction) => {
|
|
86
|
+
if (info.area.distribution !== "cantilever")
|
|
87
|
+
return false;
|
|
88
|
+
const t = (0, area_geometry_1.edgeDirection)(info.plane, info.supports.loadedEdges[0]);
|
|
89
|
+
const along = direction[0] * t[0] + direction[1] * t[1] + direction[2] * t[2];
|
|
90
|
+
return Math.abs(along) > frame_constant_1.AREA_GEOMETRY_TOLERANCE;
|
|
91
|
+
};
|
|
92
|
+
exports.loadsAlongCantileverSupport = loadsAlongCantileverSupport;
|
|
93
|
+
//# sourceMappingURL=validate-null-areas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-null-areas.js","sourceRoot":"","sources":["../../../../src/fea/frame/validation/validate-null-areas.ts"],"names":[],"mappings":"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"}
|
package/dist/fea/index.d.ts
CHANGED
package/dist/fea/index.js
CHANGED
|
@@ -14,6 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
|
|
17
|
+
__exportStar(require("./shared"), exports);
|
|
18
|
+
__exportStar(require("./shell"), exports);
|
|
18
19
|
__exportStar(require("./frame"), exports);
|
|
20
|
+
__exportStar(require("./analysis"), exports);
|
|
21
|
+
__exportStar(require("./deprecated"), exports);
|
|
19
22
|
//# sourceMappingURL=index.js.map
|
package/dist/fea/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fea/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fea/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB;AACxB,6CAA2B;AAC3B,+CAA6B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { FeaId, FeaNode, DofRestraint, Restraint, AreaLoadDirection, AreaLoad, } from "./types/model.type";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fea/shared/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-restraint.js","sourceRoot":"","sources":["../../../../src/fea/shared/solver/auto-restraint.ts"],"names":[],"mappings":";;;AAAA,uEAA2E;AAa3E;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,CAAS,EAA6C,EAAE;IAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,GAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC;QACxC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,GAAG,IAAI;YAAE,MAAM;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAC5B,qCAAqC;gBACrC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnF,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC9B,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC9B,CAAC;gBACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;oBAC5B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACjG,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACI,MAAM,kBAAkB,GAAG,CAChC,SAAiB,EACjB,QAA4B,EAC5B,QAA4B,EACX,EAAE;IACnB,MAAM,MAAM,GAAsB,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,IAAI,MAAX,MAAM,CAAC,IAAI,IAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAC,CAAC;YAChE,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;YAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,sFAAsF;IACtF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAC/F,CAAC;IAEF,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7B,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,qEAAqE;QACzF,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACjF,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,sCAAqB,GAAG,KAAK;gBAAE,OAAO;YAC/D,MAAM,IAAI,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,iDAAiD;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AA3CW,QAAA,kBAAkB,sBA2C7B;AAQF;;;;;;;;;GASG;AACI,MAAM,0BAA0B,GAAG,CACxC,KAAuB,EACvB,QAA4B,EAC5B,QAA4B,EACH,EAAE;IAC3B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK;QACtB,MAAM,CAAC,GAAG,CACR,IAAI,EACJ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAC/B,CAAC;IACJ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YACjF,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC7E,CAAC;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,sCAAqB,GAAG,KAAK;gBAAE,OAAO;YAC/D,MAAM,IAAI,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7F,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAzCW,QAAA,0BAA0B,8BAyCrC"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import type { Restraint } from "../types/model.type";
|
|
2
|
+
/**
|
|
3
|
+
* Spring stiffness unit conversion per DOF of one node or member end:
|
|
4
|
+
* kN/mm → N/mm for translations, kN·m/rad → N·mm/rad for rotations.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SPRING_UNIT_FACTOR: readonly [1000, 1000, 1000, 1000000, 1000000, 1000000];
|
|
2
7
|
export interface BoundaryConditions {
|
|
3
8
|
fixed: boolean[];
|
|
4
9
|
spring: number[];
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildBoundaryConditions = void 0;
|
|
4
|
-
const end_releases_1 = require("../elements/end-releases");
|
|
3
|
+
exports.buildBoundaryConditions = exports.SPRING_UNIT_FACTOR = void 0;
|
|
5
4
|
const DOF_KEYS = ["ux", "uy", "uz", "rx", "ry", "rz"];
|
|
5
|
+
/**
|
|
6
|
+
* Spring stiffness unit conversion per DOF of one node or member end:
|
|
7
|
+
* kN/mm → N/mm for translations, kN·m/rad → N·mm/rad for rotations.
|
|
8
|
+
*/
|
|
9
|
+
exports.SPRING_UNIT_FACTOR = [1e3, 1e3, 1e3, 1e6, 1e6, 1e6];
|
|
6
10
|
const parse = (value, factor) => {
|
|
7
11
|
if (value === true)
|
|
8
12
|
return { fixed: true, spring: 0 };
|
|
@@ -23,7 +27,7 @@ const buildBoundaryConditions = (restraints, nodeIndex, dofCount) => {
|
|
|
23
27
|
for (const restraint of restraints) {
|
|
24
28
|
const base = 6 * nodeIndex.get(restraint.nodeId);
|
|
25
29
|
DOF_KEYS.forEach((key, k) => {
|
|
26
|
-
const parsed = parse(restraint[key],
|
|
30
|
+
const parsed = parse(restraint[key], exports.SPRING_UNIT_FACTOR[k]);
|
|
27
31
|
if (parsed.fixed)
|
|
28
32
|
fixed[base + k] = true;
|
|
29
33
|
spring[base + k] = parsed.spring;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary-conditions.js","sourceRoot":"","sources":["../../../../src/fea/shared/solver/boundary-conditions.ts"],"names":[],"mappings":";;;AAEA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAC;AAE/D;;;GAGG;AACU,QAAA,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAQ1E,MAAM,KAAK,GAAG,CACZ,KAA+B,EAC/B,MAAc,EACsB,EAAE;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAC5F,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;;GAMG;AACI,MAAM,uBAAuB,GAAG,CACrC,UAAuB,EACvB,SAA2C,EAC3C,QAAgB,EACI,EAAE;IACtB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAU,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAS,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,GAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAY,CAAC;QAC7D,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,0BAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,MAAM,CAAC,KAAK;gBAAE,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;YACzC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AACvC,CAAC,CAAC;AAjBW,QAAA,uBAAuB,2BAiBlC"}
|