@theerapat-s28/ts-structural-eng-tools 3.1.0 → 3.3.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 +48 -1
- package/README.md +293 -131
- package/dist/core/constants/frame.constant.d.ts +8 -0
- package/dist/core/constants/frame.constant.js +9 -1
- package/dist/core/constants/frame.constant.js.map +1 -1
- 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 +5 -3
- package/dist/core/index.js +10 -4
- package/dist/core/index.js.map +1 -1
- package/dist/esm/core/constants/frame.constant.js +8 -0
- package/dist/esm/core/constants/frame.constant.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 +4 -2
- package/dist/esm/core/index.js.map +1 -1
- package/dist/esm/fea/analysis/index.js +7 -0
- package/dist/esm/fea/analysis/index.js.map +1 -0
- package/dist/esm/fea/{frame → analysis}/mesh/expand-model.js +30 -41
- package/dist/esm/fea/analysis/mesh/expand-model.js.map +1 -0
- package/dist/esm/fea/analysis/mesh/member-connectivity.js +66 -0
- package/dist/esm/fea/analysis/mesh/member-connectivity.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 +6 -6
- 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} +28 -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 +4 -4
- 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/nodes-along-members.js +73 -0
- package/dist/esm/fea/frame/solver/nodes-along-members.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 +164 -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 +10 -0
- package/dist/fea/analysis/index.js +16 -0
- package/dist/fea/analysis/index.js.map +1 -0
- package/dist/fea/analysis/mesh/expand-model.d.ts +34 -0
- package/dist/fea/{frame → analysis}/mesh/expand-model.js +30 -41
- package/dist/fea/analysis/mesh/expand-model.js.map +1 -0
- package/dist/fea/analysis/mesh/member-connectivity.d.ts +43 -0
- package/dist/fea/analysis/mesh/member-connectivity.js +71 -0
- package/dist/fea/analysis/mesh/member-connectivity.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/analysis/post/present-state.d.ts +21 -0
- package/dist/fea/{frame → analysis}/post/present-state.js +7 -7
- 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} +29 -20
- package/dist/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +33 -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 +123 -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 +8 -8
- package/dist/fea/frame/post/member-diagram.js +4 -4
- 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/nodes-along-members.d.ts +31 -0
- package/dist/fea/frame/solver/nodes-along-members.js +77 -0
- package/dist/fea/frame/solver/nodes-along-members.js.map +1 -0
- package/dist/fea/frame/solver/system-member.d.ts +51 -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 +16 -175
- package/dist/fea/frame/types/results.type.d.ts +17 -152
- package/dist/fea/frame/validation/validate-members.d.ts +30 -0
- package/dist/fea/frame/validation/validate-members.js +169 -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 +16 -6
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- 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.d.ts +0 -29
- 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.d.ts +0 -20
- 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,30 +1,27 @@
|
|
|
1
1
|
import { SINGULARITY_TOLERANCE } from "../../../core/constants/frame.constant.js";
|
|
2
|
-
import {
|
|
2
|
+
import { FeaErrors } from "../../../core/errors/fea.error.js";
|
|
3
|
+
import { memberGlobalStiffness } from "../../frame/solver/member-assembly.js";
|
|
4
|
+
import { prepareSystemMembers, } from "../../frame/solver/system-member.js";
|
|
5
|
+
import { findAutoRestraints, findUnresistedTranslations, } from "../../shared/solver/auto-restraint.js";
|
|
6
|
+
import { buildBoundaryConditions, } from "../../shared/solver/boundary-conditions.js";
|
|
7
|
+
import { elementDofs } from "../../shared/solver/global-assembly.js";
|
|
8
|
+
import { modelIssue, throwIssues } from "../../shared/validation/issues.js";
|
|
9
|
+
import { prepareSystemShells } from "../../shell/solver/system-shell.js";
|
|
3
10
|
import { createSkyline, reverseCuthillMcKee, skylineAdd, skylineFactor, skylineSize, } from "../../../utils/skyline.js";
|
|
4
|
-
import { beam3dLocalStiffnessRightHanded } from "../elements/beam-3d-stiffness.js";
|
|
5
|
-
import { memberEndReleases } from "../elements/end-releases.js";
|
|
6
|
-
import { flatShellElement } from "../elements/shell/flat-shell.js";
|
|
7
|
-
import { cornerAreas } from "../elements/shell/quad-geometry.js";
|
|
8
|
-
import { condenseMember } from "../elements/static-condensation.js";
|
|
9
|
-
import { memberAxes, transformationMatrix } from "../transformation/coordinate-transform.js";
|
|
10
|
-
import { frameIssue, throwIssues } from "../validation/validate-model.js";
|
|
11
|
-
import { findAutoRestraints, findUnresistedTranslations, } from "./auto-restraint.js";
|
|
12
|
-
import { buildBoundaryConditions } from "./boundary-conditions.js";
|
|
13
|
-
import { elementDofs, memberGlobalStiffness, } from "./global-assembly.js";
|
|
14
11
|
const DOF_NAMES = ["ux", "uy", "uz", "rx", "ry", "rz"];
|
|
15
12
|
/**
|
|
16
|
-
* Builds the member and shell matrices of a model that passed `
|
|
13
|
+
* Builds the member and shell matrices of a model that passed `validateModel`, assembles
|
|
17
14
|
* the free stiffness in skyline storage with nodes in reverse Cuthill–McKee order, and
|
|
18
15
|
* factorises it once for all load cases. Joint rotations that nothing resists (e.g. at truss
|
|
19
16
|
* joints) are held by a spring along each null direction, which carries no force.
|
|
20
17
|
*
|
|
21
|
-
* @throws {
|
|
18
|
+
* @throws {FeaError} 328 if a node connected only to shells has a translation that
|
|
22
19
|
* nothing resists (a membrane's out-of-plane or a plate's in-plane direction), with `nodeId`,
|
|
23
20
|
* `shellId` and `dof`; 304 if the structure is a mechanism; `details` names a node and a DOF
|
|
24
21
|
* involved in it
|
|
25
22
|
*/
|
|
26
|
-
export const
|
|
27
|
-
const { nodes, members, restraints } = model;
|
|
23
|
+
export const prepareAnalysisSystem = (model) => {
|
|
24
|
+
const { nodes, members = [], restraints } = model;
|
|
28
25
|
// shell elements: after `expandModel` they carry their area's id
|
|
29
26
|
const shells = (model.shells ?? []);
|
|
30
27
|
const nodeIndex = new Map(nodes.map((n, i) => [n.id, i]));
|
|
@@ -32,78 +29,8 @@ export const prepareFrameSystem = (model) => {
|
|
|
32
29
|
const shellIndex = new Map(shells.map((sh, i) => [sh.id, i]));
|
|
33
30
|
const dofCount = 6 * nodes.length;
|
|
34
31
|
const boundary = buildBoundaryConditions(restraints, nodeIndex, dofCount);
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
return [n.x, n.y, n.z];
|
|
38
|
-
};
|
|
39
|
-
const systemMembers = [];
|
|
40
|
-
const memberGroups = members.map((member) => {
|
|
41
|
-
// pieces between the member's ends and the mesh nodes inside it (see `expandModel`)
|
|
42
|
-
const chain = [member.startNodeId, ...(member.through ?? []), member.endNodeId];
|
|
43
|
-
const whole = memberAxes(point(member.startNodeId), point(member.endNodeId), member.angle ?? 0);
|
|
44
|
-
const { E, G, A, I22, I33, J } = member.section;
|
|
45
|
-
const pieces = [];
|
|
46
|
-
let offset = 0;
|
|
47
|
-
for (let k = 0; k + 1 < chain.length; k++) {
|
|
48
|
-
const { length, lambda } = chain.length === 2
|
|
49
|
-
? whole
|
|
50
|
-
: memberAxes(point(chain[k]), point(chain[k + 1]), member.angle ?? 0);
|
|
51
|
-
// releases only at the member's own ends
|
|
52
|
-
const releases = memberEndReleases({
|
|
53
|
-
start: k === 0 ? member.releases?.start : undefined,
|
|
54
|
-
end: k === chain.length - 2 ? member.releases?.end : undefined,
|
|
55
|
-
});
|
|
56
|
-
const condensed = condenseMember(beam3dLocalStiffnessRightHanded(E, G, A, I22, I33, J, length), releases);
|
|
57
|
-
pieces.push(systemMembers.length);
|
|
58
|
-
systemMembers.push({
|
|
59
|
-
id: member.id,
|
|
60
|
-
offset,
|
|
61
|
-
section: member.section,
|
|
62
|
-
startIndex: nodeIndex.get(chain[k]),
|
|
63
|
-
endIndex: nodeIndex.get(chain[k + 1]),
|
|
64
|
-
T: transformationMatrix(lambda),
|
|
65
|
-
k: condensed.k,
|
|
66
|
-
hasReleases: releases.length > 0,
|
|
67
|
-
condenseFixedEndForces: condensed.condenseFixedEndForces,
|
|
68
|
-
memberEndDisplacements: condensed.memberEndDisplacements,
|
|
69
|
-
length,
|
|
70
|
-
lambda,
|
|
71
|
-
});
|
|
72
|
-
offset += length;
|
|
73
|
-
}
|
|
74
|
-
return {
|
|
75
|
-
id: member.id,
|
|
76
|
-
pieces,
|
|
77
|
-
section: member.section,
|
|
78
|
-
length: whole.length,
|
|
79
|
-
lambda: whole.lambda,
|
|
80
|
-
};
|
|
81
|
-
});
|
|
82
|
-
const systemShells = shells.map((shell) => {
|
|
83
|
-
const nodeIndices = shell.nodeIds.map((id) => nodeIndex.get(id));
|
|
84
|
-
const points = nodeIndices.map((n) => [nodes[n].x, nodes[n].y, nodes[n].z]);
|
|
85
|
-
const { thickness, E, nu } = shell.section;
|
|
86
|
-
const m = shell.modifiers ?? {};
|
|
87
|
-
const type = shell.type ?? "shell";
|
|
88
|
-
const element = flatShellElement(points, {
|
|
89
|
-
E,
|
|
90
|
-
nu,
|
|
91
|
-
t: thickness,
|
|
92
|
-
type,
|
|
93
|
-
membraneModifiers: [m.f11 ?? 1, m.f22 ?? 1, m.f12 ?? 1],
|
|
94
|
-
bendingModifiers: [m.m11 ?? 1, m.m22 ?? 1, m.m12 ?? 1],
|
|
95
|
-
}, shell.angle ?? 0);
|
|
96
|
-
return {
|
|
97
|
-
id: shell.id,
|
|
98
|
-
areaId: shell.areaId ?? shell.id,
|
|
99
|
-
nodeIndices,
|
|
100
|
-
type,
|
|
101
|
-
section: shell.section,
|
|
102
|
-
modifiers: m,
|
|
103
|
-
element,
|
|
104
|
-
cornerAreas: cornerAreas(element.axes.corners),
|
|
105
|
-
};
|
|
106
|
-
});
|
|
32
|
+
const { pieces: systemMembers, groups: memberGroups } = prepareSystemMembers(members, nodes, nodeIndex);
|
|
33
|
+
const systemShells = prepareSystemShells(shells, nodes, nodeIndex);
|
|
107
34
|
const shellsByArea = new Map();
|
|
108
35
|
systemShells.forEach((sh, s) => {
|
|
109
36
|
const list = shellsByArea.get(sh.areaId);
|
|
@@ -130,7 +57,7 @@ export const prepareFrameSystem = (model) => {
|
|
|
130
57
|
if (unresisted.length > 0) {
|
|
131
58
|
throwIssues(unresisted.map(({ node, axis }) => {
|
|
132
59
|
const lead = axis.reduce((best, c, i) => (Math.abs(c) > Math.abs(axis[best]) ? i : best), 0);
|
|
133
|
-
return
|
|
60
|
+
return modelIssue(FeaErrors.SHELL_DOF_UNSUPPORTED, {
|
|
134
61
|
nodeId: nodes[node].id,
|
|
135
62
|
shellId: systemShells.find((sh) => sh.nodeIndices.includes(node))?.id,
|
|
136
63
|
dof: DOF_NAMES[lead],
|
|
@@ -218,7 +145,7 @@ export const prepareFrameSystem = (model) => {
|
|
|
218
145
|
if (!result.ok) {
|
|
219
146
|
const dof = free[result.failedPivot];
|
|
220
147
|
throwIssues([
|
|
221
|
-
|
|
148
|
+
modelIssue(FeaErrors.STRUCTURE_UNSTABLE, {
|
|
222
149
|
nodeId: nodes[Math.floor(dof / 6)].id,
|
|
223
150
|
dof: DOF_NAMES[dof % 6],
|
|
224
151
|
}),
|
|
@@ -244,4 +171,4 @@ export const prepareFrameSystem = (model) => {
|
|
|
244
171
|
profileSize: factor ? skylineSize(factor) : 0,
|
|
245
172
|
};
|
|
246
173
|
};
|
|
247
|
-
//# sourceMappingURL=
|
|
174
|
+
//# sourceMappingURL=analysis-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis-system.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/solver/analysis-system.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { areaMemberLoads } from "../../frame/area/area-member-loads.js";
|
|
2
|
+
import { throwIssues } from "../../shared/validation/issues.js";
|
|
1
3
|
import { roundToDecimalPlaces } from "../../../utils/math.js";
|
|
2
|
-
import { areaMemberLoads } from "../area/distribute-area-loads.js";
|
|
3
4
|
import { buildEnvelope } from "../post/envelope.js";
|
|
4
5
|
import { presentMemberDiagram, presentState } from "../post/present-state.js";
|
|
5
|
-
import { throwIssues, validateFrameModel } from "../validation/validate-model.js";
|
|
6
6
|
import { expandModel } from "../mesh/expand-model.js";
|
|
7
|
+
import { validateModel } from "../validation/validate-model.js";
|
|
7
8
|
import { resolveCombinations } from "./combinations.js";
|
|
8
|
-
import {
|
|
9
|
+
import { prepareAnalysisSystem } from "./analysis-system.js";
|
|
9
10
|
import { combineStates, solveLoadCase } from "./load-case-solver.js";
|
|
10
11
|
const ROTATION_DOFS = ["rx", "ry", "rz"];
|
|
11
12
|
/** The presented form of the joint rotations held by the solver. */
|
|
@@ -31,24 +32,24 @@ const groupByCase = (loads = []) => {
|
|
|
31
32
|
return groups;
|
|
32
33
|
};
|
|
33
34
|
/**
|
|
34
|
-
* Analyses a
|
|
35
|
+
* Analyses a model like `analyze` and keeps the solution, so that full member diagrams
|
|
35
36
|
* can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
|
|
36
37
|
* draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
|
|
37
38
|
*
|
|
38
|
-
* @param model - Nodes, members, restraints, load cases, loads tagged with their load
|
|
39
|
-
* null areas, and combinations
|
|
39
|
+
* @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
|
|
40
|
+
* case, null areas, and combinations
|
|
40
41
|
* @param options - Diagram station count and detail
|
|
41
42
|
* @returns `{ result, memberDiagram }`
|
|
42
|
-
* @throws {
|
|
43
|
+
* @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
|
|
43
44
|
* every problem in `issues`), 328 for a translation nothing resists at a node connected only
|
|
44
45
|
* to shells, 304 for an unstable structure
|
|
45
46
|
*/
|
|
46
|
-
export const
|
|
47
|
-
const issues =
|
|
47
|
+
export const createAnalysis = (model, options = {}) => {
|
|
48
|
+
const issues = validateModel(model);
|
|
48
49
|
if (issues.length > 0)
|
|
49
50
|
throwIssues(issues);
|
|
50
51
|
const expanded = expandModel(model);
|
|
51
|
-
const system =
|
|
52
|
+
const system = prepareAnalysisSystem(expanded.model);
|
|
52
53
|
const combinations = model.combinations ?? [];
|
|
53
54
|
const resolved = resolveCombinations(combinations, new Set(model.loadCases.map((c) => c.id)));
|
|
54
55
|
const withStations = (options.diagrams ?? "full") === "full";
|
|
@@ -104,6 +105,8 @@ export const createFrameAnalysis = (model, options = {}) => {
|
|
|
104
105
|
loadCaseCount: model.loadCases.length,
|
|
105
106
|
combinationCount: combinations.length,
|
|
106
107
|
autoRestrainedDofs: autoRestrainedDofs(system),
|
|
108
|
+
intermediateNodes: expanded.connectivity.intermediateNodes,
|
|
109
|
+
nearMissNodes: expanded.connectivity.nearMissNodes,
|
|
107
110
|
},
|
|
108
111
|
units: {
|
|
109
112
|
force: "kN",
|
|
@@ -130,10 +133,11 @@ export const createFrameAnalysis = (model, options = {}) => {
|
|
|
130
133
|
};
|
|
131
134
|
};
|
|
132
135
|
/**
|
|
133
|
-
* Analyses a 3D frame by the direct stiffness method
|
|
134
|
-
* for every load case, then forms every load combination
|
|
136
|
+
* Analyses a 3D structure of frame members, shell areas or both by the direct stiffness method
|
|
137
|
+
* (linear elastic, small displacements) for every load case, then forms every load combination
|
|
138
|
+
* by superposition.
|
|
135
139
|
*
|
|
136
|
-
* The model is validated first (`
|
|
140
|
+
* The model is validated first (`validateModel`). The stiffness matrix is assembled once
|
|
137
141
|
* in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
|
|
138
142
|
* load case is a separate solve. A combination is the factored sum of its load cases (nested
|
|
139
143
|
* combinations are expanded), and its member diagrams are rebuilt from the combined end forces
|
|
@@ -144,6 +148,12 @@ export const createFrameAnalysis = (model, options = {}) => {
|
|
|
144
148
|
* and rad. Global axes X, Y, Z are right-handed with Z up; members use ETABS-style local axes
|
|
145
149
|
* 1, 2, 3 (see `memberAxes`). Member end forces and diagrams use right-hand rotations.
|
|
146
150
|
*
|
|
151
|
+
* A member is connected to every model node lying on it between its ends, as if it were split
|
|
152
|
+
* there, unless it sets `connectIntermediateNodes: false`; it is still reported as one member.
|
|
153
|
+
* The connections are listed in `calculationDetails.intermediateNodes`; a node close to a
|
|
154
|
+
* member but not on it is not connected, and is listed in `calculationDetails.nearMissNodes`
|
|
155
|
+
* with a warning. `memberConnectivity` makes the same check without analysing.
|
|
156
|
+
*
|
|
147
157
|
* Area loads on null areas (`areas`, `areaLoads`) are first turned into member loads on the
|
|
148
158
|
* members along each area's edges (see `distributeAreaLoads`); the areas add no stiffness.
|
|
149
159
|
* Shell areas (`shells`) are four-node flat shell elements with their own stiffness; area loads
|
|
@@ -151,14 +161,14 @@ export const createFrameAnalysis = (model, options = {}) => {
|
|
|
151
161
|
*
|
|
152
162
|
* Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
|
|
153
163
|
*
|
|
154
|
-
* @param model - Nodes, members, restraints, load cases, loads tagged with their load
|
|
155
|
-
* null areas, and combinations
|
|
164
|
+
* @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
|
|
165
|
+
* case, null areas, and combinations
|
|
156
166
|
* @param options - Diagram station count and detail
|
|
157
167
|
* @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
|
|
158
168
|
* `calculationDetails`, `units` and `warnings`
|
|
159
|
-
* @throws {
|
|
169
|
+
* @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
|
|
160
170
|
* every problem in `issues`), 328 for a translation nothing resists at a node connected only
|
|
161
171
|
* to shells, 304 for an unstable structure
|
|
162
172
|
*/
|
|
163
|
-
export const
|
|
164
|
-
//# sourceMappingURL=analyze
|
|
173
|
+
export const analyze = (model, options = {}) => createAnalysis(model, options).result;
|
|
174
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/solver/analyze.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FeaError, FeaErrors } from "../../../core/errors/fea.error.js";
|
|
2
2
|
/**
|
|
3
3
|
* Expands every combination into net factors on load cases, following nested combinations.
|
|
4
4
|
*
|
|
5
5
|
* @param combinations - Model combinations
|
|
6
6
|
* @param caseIds - Ids of the model's load cases
|
|
7
7
|
* @returns For each combination id, the net factor on each load case it uses
|
|
8
|
-
* @throws {
|
|
8
|
+
* @throws {FeaError} 309 for an unknown or missing reference, 310 for a loop,
|
|
9
9
|
* 311 for a non-finite factor or an empty combination
|
|
10
10
|
*/
|
|
11
11
|
export const resolveCombinations = (combinations, caseIds) => {
|
|
12
12
|
const byId = new Map(combinations.map((c) => [c.id, c]));
|
|
13
13
|
for (const combination of combinations) {
|
|
14
14
|
if (!Array.isArray(combination.terms) || combination.terms.length === 0) {
|
|
15
|
-
throw new
|
|
15
|
+
throw new FeaError(FeaErrors.INVALID_LOAD_FACTOR, {
|
|
16
16
|
combinationId: combination.id,
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
for (const term of combination.terms) {
|
|
20
20
|
if (!Number.isFinite(term.factor))
|
|
21
|
-
throw new
|
|
21
|
+
throw new FeaError(FeaErrors.INVALID_LOAD_FACTOR, {
|
|
22
22
|
combinationId: combination.id,
|
|
23
23
|
});
|
|
24
24
|
const isCase = "case" in term && term.case !== undefined;
|
|
25
25
|
const isCombination = "combination" in term && term.combination !== undefined;
|
|
26
26
|
if (isCase === isCombination)
|
|
27
|
-
throw new
|
|
27
|
+
throw new FeaError(FeaErrors.UNKNOWN_LOAD_CASE, {
|
|
28
28
|
combinationId: combination.id,
|
|
29
29
|
});
|
|
30
30
|
if (isCase && !caseIds.has(term.case)) {
|
|
31
|
-
throw new
|
|
31
|
+
throw new FeaError(FeaErrors.UNKNOWN_LOAD_CASE, {
|
|
32
32
|
combinationId: combination.id,
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
if (isCombination && !byId.has(term.combination)) {
|
|
36
|
-
throw new
|
|
36
|
+
throw new FeaError(FeaErrors.UNKNOWN_LOAD_CASE, {
|
|
37
37
|
combinationId: combination.id,
|
|
38
38
|
});
|
|
39
39
|
}
|
|
@@ -46,7 +46,7 @@ export const resolveCombinations = (combinations, caseIds) => {
|
|
|
46
46
|
if (done)
|
|
47
47
|
return done;
|
|
48
48
|
if (visiting.has(id)) {
|
|
49
|
-
throw new
|
|
49
|
+
throw new FeaError(FeaErrors.CIRCULAR_COMBINATION, { combinationId: id });
|
|
50
50
|
}
|
|
51
51
|
visiting.add(id);
|
|
52
52
|
const factors = new Map();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"combinations.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/solver/combinations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { areaMemberLoads } from "../../frame/area/area-member-loads.js";
|
|
2
|
+
import { throwIssues } from "../../shared/validation/issues.js";
|
|
3
|
+
import { validateModel } from "../validation/validate-model.js";
|
|
4
|
+
/**
|
|
5
|
+
* The member loads that a model's null areas send to the members along their edges — what
|
|
6
|
+
* `analyze` adds to `memberLoads` — so they can be checked or previewed.
|
|
7
|
+
*
|
|
8
|
+
* Two-way areas send each point to the nearest edge (corner-bisector split); one-way areas
|
|
9
|
+
* split strips parallel to their unsupported edges half to each end; cantilever areas send
|
|
10
|
+
* `q · c` and a torque `q · c² / 2` per unit length to their support edge (c = depth). Edges
|
|
11
|
+
* split by intermediate nodes are cut at those nodes. Loads are per unit true area (a
|
|
12
|
+
* `projected` load is first converted, `q · |n · direction|`) and come out as trapezoidal loads
|
|
13
|
+
* per member length in global X, Y and Z (and torques), each tagged with its load case.
|
|
14
|
+
*
|
|
15
|
+
* @param model - The model, validated first
|
|
16
|
+
* @returns `memberLoads` and `warnings` (a one-way support edge parallel to the span)
|
|
17
|
+
* @throws {FeaError} 301–317 for an invalid model, with every problem in `issues`
|
|
18
|
+
*/
|
|
19
|
+
export const distributeAreaLoads = (model) => {
|
|
20
|
+
const issues = validateModel(model);
|
|
21
|
+
if (issues.length > 0)
|
|
22
|
+
throwIssues(issues);
|
|
23
|
+
return areaMemberLoads(model);
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=distribute-area-loads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"distribute-area-loads.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/solver/distribute-area-loads.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAe,EACoC,EAAE;IACrD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { SINGULARITY_TOLERANCE } from "../../../core/constants/frame.constant.js";
|
|
2
|
+
import { FeaErrors } from "../../../core/errors/fea.error.js";
|
|
3
|
+
import { fixedEndForces } from "../../frame/elements/fixed-end-forces.js";
|
|
4
|
+
import { memberDofs, scatterMemberForces } from "../../frame/solver/member-assembly.js";
|
|
5
|
+
import { memberPieceLoads, scaleMemberLoad } from "../../frame/solver/member-loads.js";
|
|
6
|
+
import { elementDofs } from "../../shared/solver/global-assembly.js";
|
|
7
|
+
import { modelIssue, throwIssues } from "../../shared/validation/issues.js";
|
|
8
|
+
import { shellRawForces } from "../../shell/post/shell-forces.js";
|
|
9
|
+
import { addShellLoads } from "../../shell/solver/shell-loads.js";
|
|
10
|
+
import { matVec } from "../../../utils/matrix.js";
|
|
11
|
+
import { skylineSolve } from "../../../utils/skyline.js";
|
|
12
|
+
/**
|
|
13
|
+
* Solves one load case against the prepared, factorised system.
|
|
14
|
+
*
|
|
15
|
+
* Members take their loads and self-weight as fixed-end forces (see `memberPieceLoads`); shells
|
|
16
|
+
* take their area loads and self-weight as forces at their corners (see `addShellLoads`).
|
|
17
|
+
*
|
|
18
|
+
* @param loadCase - The load case (id and self-weight multiplier)
|
|
19
|
+
* @param loads - The nodal and member loads tagged with this load case, and its area loads on
|
|
20
|
+
* shell areas
|
|
21
|
+
*
|
|
22
|
+
* @throws {FeaError} 304 if a load has a moment about a joint rotation that nothing
|
|
23
|
+
* resists (an auto-restrained axis), 308 for a load outside its member, 313 if self-weight is
|
|
24
|
+
* requested for a member without `unitWeight`
|
|
25
|
+
*/
|
|
26
|
+
export const solveLoadCase = (system, loadCase, loads) => {
|
|
27
|
+
const { members, dofCount, boundary, equation, free, factor, nodeIndex, memberIndex } = system;
|
|
28
|
+
const F = new Array(dofCount).fill(0);
|
|
29
|
+
const selfWeight = loadCase.selfWeight ?? 0;
|
|
30
|
+
const memberLoads = memberPieceLoads(system.memberGroups, members, memberIndex, loads.memberLoads, loadCase.id, selfWeight);
|
|
31
|
+
const fixed = members.map((member, m) => {
|
|
32
|
+
const condensed = member.condenseFixedEndForces(fixedEndForces(memberLoads[m], member.length));
|
|
33
|
+
scatterMemberForces(F, member, condensed, -1);
|
|
34
|
+
return condensed;
|
|
35
|
+
});
|
|
36
|
+
// Shell surface loads as forces at the element corners
|
|
37
|
+
addShellLoads(F, system.shells, system.shellsByArea, loads.shellLoads ?? [], selfWeight);
|
|
38
|
+
for (const load of loads.nodalLoads) {
|
|
39
|
+
const base = 6 * nodeIndex.get(load.nodeId);
|
|
40
|
+
[load.fx, load.fy, load.fz].forEach((v, k) => (F[base + k] += (v ?? 0) * 1e3));
|
|
41
|
+
[load.mx, load.my, load.mz].forEach((v, k) => (F[base + 3 + k] += (v ?? 0) * 1e6));
|
|
42
|
+
}
|
|
43
|
+
// A held rotation axis is decoupled from the structure: a moment about it has no load path.
|
|
44
|
+
let momentScale = 0;
|
|
45
|
+
for (let n = 0; n < system.nodes.length; n++) {
|
|
46
|
+
for (let k = 3; k < 6; k++)
|
|
47
|
+
momentScale = Math.max(momentScale, Math.abs(F[6 * n + k]));
|
|
48
|
+
}
|
|
49
|
+
for (const { node, axis } of system.autoRestraints) {
|
|
50
|
+
const moment = axis.reduce((sum, a, i) => sum + a * F[6 * node + 3 + i], 0);
|
|
51
|
+
if (Math.abs(moment) > SINGULARITY_TOLERANCE * momentScale) {
|
|
52
|
+
const lead = axis.reduce((best, a, i) => (Math.abs(a) > Math.abs(axis[best]) ? i : best), 0);
|
|
53
|
+
throwIssues([
|
|
54
|
+
modelIssue(FeaErrors.STRUCTURE_UNSTABLE, {
|
|
55
|
+
nodeId: system.nodes[node].id,
|
|
56
|
+
dof: ["rx", "ry", "rz"][lead],
|
|
57
|
+
loadCaseId: loadCase.id,
|
|
58
|
+
}),
|
|
59
|
+
]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const U = new Array(dofCount).fill(0);
|
|
63
|
+
if (factor) {
|
|
64
|
+
const solution = skylineSolve(factor, free.map((dof) => F[dof]));
|
|
65
|
+
free.forEach((dof) => (U[dof] = solution[equation[dof]]));
|
|
66
|
+
}
|
|
67
|
+
// Elastic end forces k·u per member; their global sum is K·U, from which R = K·U − F
|
|
68
|
+
const KU = new Array(dofCount).fill(0);
|
|
69
|
+
const memberForces = members.map((member, m) => {
|
|
70
|
+
const uLocal = matVec(member.T, memberDofs(member).map((d) => U[d]));
|
|
71
|
+
const elastic = matVec(member.k, uLocal);
|
|
72
|
+
scatterMemberForces(KU, member, elastic, 1);
|
|
73
|
+
return elastic.map((v, i) => v + fixed[m][i]);
|
|
74
|
+
});
|
|
75
|
+
for (const shell of system.shells) {
|
|
76
|
+
const dofs = elementDofs(shell.nodeIndices);
|
|
77
|
+
const forces = matVec(shell.element.kGlobal, dofs.map((d) => U[d]));
|
|
78
|
+
dofs.forEach((d, a) => (KU[d] += forces[a]));
|
|
79
|
+
}
|
|
80
|
+
const R = KU.map((v, i) => (boundary.restrained[i] ? v - F[i] : 0));
|
|
81
|
+
const shellForces = system.shells.map((shell) => shellRawForces(shell, U));
|
|
82
|
+
return { U, R, F, memberForces, shellForces, memberLoads };
|
|
83
|
+
};
|
|
84
|
+
/** Superposes factored states: `Σ factor × state`. Member loads are concatenated, scaled. */
|
|
85
|
+
export const combineStates = (terms) => {
|
|
86
|
+
const first = terms[0].state;
|
|
87
|
+
const add = (pick, length) => {
|
|
88
|
+
const out = new Array(length).fill(0);
|
|
89
|
+
for (const { state, factor } of terms) {
|
|
90
|
+
pick(state).forEach((v, i) => (out[i] += factor * v));
|
|
91
|
+
}
|
|
92
|
+
return out;
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
U: add((s) => s.U, first.U.length),
|
|
96
|
+
R: add((s) => s.R, first.R.length),
|
|
97
|
+
F: add((s) => s.F, first.F.length),
|
|
98
|
+
memberForces: first.memberForces.map((_, m) => add((s) => s.memberForces[m], 12)),
|
|
99
|
+
shellForces: first.shellForces.map((f, sh) => add((s) => s.shellForces[sh], f.length)),
|
|
100
|
+
memberLoads: first.memberLoads.map((_, m) => terms.flatMap(({ state, factor }) => factor === 0 ? [] : state.memberLoads[m].map((l) => scaleMemberLoad(l, factor)))),
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=load-case-solver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-case-solver.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/solver/load-case-solver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.type.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/types/model.type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.type.js","sourceRoot":"","sources":["../../../../../src/fea/analysis/types/results.type.ts"],"names":[],"mappings":""}
|