@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
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.presentState = exports.presentMemberDiagram = void 0;
|
|
4
4
|
const frame_constant_1 = require("../../../core/constants/frame.constant");
|
|
5
|
+
const fixed_end_forces_1 = require("../../frame/elements/fixed-end-forces");
|
|
6
|
+
const member_diagram_1 = require("../../frame/post/member-diagram");
|
|
7
|
+
const member_assembly_1 = require("../../frame/solver/member-assembly");
|
|
8
|
+
const shell_forces_1 = require("../../shell/post/shell-forces");
|
|
5
9
|
const math_1 = require("../../../utils/math");
|
|
6
10
|
const matrix_1 = require("../../../utils/matrix");
|
|
7
|
-
const fixed_end_forces_1 = require("../elements/fixed-end-forces");
|
|
8
|
-
const global_assembly_1 = require("../solver/global-assembly");
|
|
9
|
-
const member_diagram_1 = require("./member-diagram");
|
|
10
|
-
const shell_forces_1 = require("./shell-forces");
|
|
11
11
|
const FORCE_DECIMALS = 4;
|
|
12
12
|
const DISPLACEMENT_DECIMALS = 5;
|
|
13
13
|
const ROTATION_DECIMALS = 8;
|
|
@@ -37,7 +37,7 @@ const releaseDeformation = (d) => ({
|
|
|
37
37
|
*/
|
|
38
38
|
const memberEnd = (system, state, m) => {
|
|
39
39
|
const member = system.members[m];
|
|
40
|
-
const node = (0, matrix_1.matVec)(member.T, (0,
|
|
40
|
+
const node = (0, matrix_1.matVec)(member.T, (0, member_assembly_1.memberDofs)(member).map((d) => state.U[d]));
|
|
41
41
|
const own = member.hasReleases
|
|
42
42
|
? member.memberEndDisplacements(node, (0, fixed_end_forces_1.fixedEndForces)(state.memberLoads[m], member.length))
|
|
43
43
|
: node;
|
|
@@ -73,7 +73,7 @@ const equilibrium = (system, state) => {
|
|
|
73
73
|
};
|
|
74
74
|
/**
|
|
75
75
|
* The presented diagram of model member `g` (an index into `system.memberGroups`) in a raw
|
|
76
|
-
* state, stitched from its pieces when
|
|
76
|
+
* state, stitched from its pieces when nodes inside it split it.
|
|
77
77
|
*
|
|
78
78
|
* @param stations - Evenly spaced stations
|
|
79
79
|
* @param withStations - false keeps only the extremes (empty `stations`)
|
|
@@ -128,7 +128,7 @@ const presentState = (system, state, meta, diagram = {}) => {
|
|
|
128
128
|
my: roundForce(R[6 * n + 4], 1e-6),
|
|
129
129
|
mz: roundForce(R[6 * n + 5], 1e-6),
|
|
130
130
|
})),
|
|
131
|
-
// a member split
|
|
131
|
+
// a member split at nodes inside it: its start is its first piece's, its end its last's
|
|
132
132
|
memberEndForces: system.memberGroups.map(({ id, pieces }) => ({
|
|
133
133
|
memberId: id,
|
|
134
134
|
start: endForce(state.memberForces[pieces[0]].slice(0, 6)),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"present-state.js","sourceRoot":"","sources":["../../../../src/fea/analysis/post/present-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type MemberGroup, type SystemMember } from "../../frame/solver/system-member";
|
|
2
|
+
import { type AutoRestraint } from "../../shared/solver/auto-restraint";
|
|
3
|
+
import { type BoundaryConditions } from "../../shared/solver/boundary-conditions";
|
|
4
|
+
import type { FeaId, FeaNode } from "../../shared/types/model.type";
|
|
5
|
+
import { type SystemShell } from "../../shell/solver/system-shell";
|
|
6
|
+
import { type SkylineMatrix } from "../../../utils/skyline";
|
|
7
|
+
import type { FeaModel } from "../types/model.type";
|
|
8
|
+
/** The load-independent part of an analysis: geometry, stiffness and its factorisation. */
|
|
9
|
+
export interface AnalysisSystem {
|
|
10
|
+
nodes: FeaNode[];
|
|
11
|
+
nodeIndex: Map<FeaId, number>;
|
|
12
|
+
/** Index into `memberGroups` of each model member. */
|
|
13
|
+
memberIndex: Map<FeaId, number>;
|
|
14
|
+
/** Model members, in model order. */
|
|
15
|
+
memberGroups: MemberGroup[];
|
|
16
|
+
/** The pieces that are assembled: one per member unless nodes inside it split it. */
|
|
17
|
+
members: SystemMember[];
|
|
18
|
+
shellIndex: Map<FeaId, number>;
|
|
19
|
+
/** Element indices of each shell area. */
|
|
20
|
+
shellsByArea: Map<FeaId, number[]>;
|
|
21
|
+
shells: SystemShell[];
|
|
22
|
+
dofCount: number;
|
|
23
|
+
boundary: BoundaryConditions;
|
|
24
|
+
/** Equation number of each global DOF in the factorised system, −1 for a fixed DOF. */
|
|
25
|
+
equation: Int32Array;
|
|
26
|
+
/** Global DOF of each equation. */
|
|
27
|
+
free: number[];
|
|
28
|
+
/** Joint rotations held because nothing resists them (see `findAutoRestraints`). */
|
|
29
|
+
autoRestraints: AutoRestraint[];
|
|
30
|
+
/** Skyline Cholesky factor of the free stiffness including springs; null when nothing is free. */
|
|
31
|
+
factor: SkylineMatrix | null;
|
|
32
|
+
/** Stored entries of the factor (a measure of bandwidth, memory and work). */
|
|
33
|
+
profileSize: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Builds the member and shell matrices of a model that passed `validateModel`, assembles
|
|
37
|
+
* the free stiffness in skyline storage with nodes in reverse Cuthill–McKee order, and
|
|
38
|
+
* factorises it once for all load cases. Joint rotations that nothing resists (e.g. at truss
|
|
39
|
+
* joints) are held by a spring along each null direction, which carries no force.
|
|
40
|
+
*
|
|
41
|
+
* @throws {FeaError} 328 if a node connected only to shells has a translation that
|
|
42
|
+
* nothing resists (a membrane's out-of-plane or a plate's in-plane direction), with `nodeId`,
|
|
43
|
+
* `shellId` and `dof`; 304 if the structure is a mechanism; `details` names a node and a DOF
|
|
44
|
+
* involved in it
|
|
45
|
+
*/
|
|
46
|
+
export declare const prepareAnalysisSystem: (model: FeaModel) => AnalysisSystem;
|
|
@@ -1,33 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.prepareAnalysisSystem = void 0;
|
|
4
4
|
const frame_constant_1 = require("../../../core/constants/frame.constant");
|
|
5
|
-
const
|
|
5
|
+
const fea_error_1 = require("../../../core/errors/fea.error");
|
|
6
|
+
const member_assembly_1 = require("../../frame/solver/member-assembly");
|
|
7
|
+
const system_member_1 = require("../../frame/solver/system-member");
|
|
8
|
+
const auto_restraint_1 = require("../../shared/solver/auto-restraint");
|
|
9
|
+
const boundary_conditions_1 = require("../../shared/solver/boundary-conditions");
|
|
10
|
+
const global_assembly_1 = require("../../shared/solver/global-assembly");
|
|
11
|
+
const issues_1 = require("../../shared/validation/issues");
|
|
12
|
+
const system_shell_1 = require("../../shell/solver/system-shell");
|
|
6
13
|
const skyline_1 = require("../../../utils/skyline");
|
|
7
|
-
const beam_3d_stiffness_1 = require("../elements/beam-3d-stiffness");
|
|
8
|
-
const end_releases_1 = require("../elements/end-releases");
|
|
9
|
-
const flat_shell_1 = require("../elements/shell/flat-shell");
|
|
10
|
-
const quad_geometry_1 = require("../elements/shell/quad-geometry");
|
|
11
|
-
const static_condensation_1 = require("../elements/static-condensation");
|
|
12
|
-
const coordinate_transform_1 = require("../transformation/coordinate-transform");
|
|
13
|
-
const validate_model_1 = require("../validation/validate-model");
|
|
14
|
-
const auto_restraint_1 = require("./auto-restraint");
|
|
15
|
-
const boundary_conditions_1 = require("./boundary-conditions");
|
|
16
|
-
const global_assembly_1 = require("./global-assembly");
|
|
17
14
|
const DOF_NAMES = ["ux", "uy", "uz", "rx", "ry", "rz"];
|
|
18
15
|
/**
|
|
19
|
-
* Builds the member and shell matrices of a model that passed `
|
|
16
|
+
* Builds the member and shell matrices of a model that passed `validateModel`, assembles
|
|
20
17
|
* the free stiffness in skyline storage with nodes in reverse Cuthill–McKee order, and
|
|
21
18
|
* factorises it once for all load cases. Joint rotations that nothing resists (e.g. at truss
|
|
22
19
|
* joints) are held by a spring along each null direction, which carries no force.
|
|
23
20
|
*
|
|
24
|
-
* @throws {
|
|
21
|
+
* @throws {FeaError} 328 if a node connected only to shells has a translation that
|
|
25
22
|
* nothing resists (a membrane's out-of-plane or a plate's in-plane direction), with `nodeId`,
|
|
26
23
|
* `shellId` and `dof`; 304 if the structure is a mechanism; `details` names a node and a DOF
|
|
27
24
|
* involved in it
|
|
28
25
|
*/
|
|
29
|
-
const
|
|
30
|
-
const { nodes, members, restraints } = model;
|
|
26
|
+
const prepareAnalysisSystem = (model) => {
|
|
27
|
+
const { nodes, members = [], restraints } = model;
|
|
31
28
|
// shell elements: after `expandModel` they carry their area's id
|
|
32
29
|
const shells = (model.shells ?? []);
|
|
33
30
|
const nodeIndex = new Map(nodes.map((n, i) => [n.id, i]));
|
|
@@ -35,78 +32,8 @@ const prepareFrameSystem = (model) => {
|
|
|
35
32
|
const shellIndex = new Map(shells.map((sh, i) => [sh.id, i]));
|
|
36
33
|
const dofCount = 6 * nodes.length;
|
|
37
34
|
const boundary = (0, boundary_conditions_1.buildBoundaryConditions)(restraints, nodeIndex, dofCount);
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
return [n.x, n.y, n.z];
|
|
41
|
-
};
|
|
42
|
-
const systemMembers = [];
|
|
43
|
-
const memberGroups = members.map((member) => {
|
|
44
|
-
// pieces between the member's ends and the mesh nodes inside it (see `expandModel`)
|
|
45
|
-
const chain = [member.startNodeId, ...(member.through ?? []), member.endNodeId];
|
|
46
|
-
const whole = (0, coordinate_transform_1.memberAxes)(point(member.startNodeId), point(member.endNodeId), member.angle ?? 0);
|
|
47
|
-
const { E, G, A, I22, I33, J } = member.section;
|
|
48
|
-
const pieces = [];
|
|
49
|
-
let offset = 0;
|
|
50
|
-
for (let k = 0; k + 1 < chain.length; k++) {
|
|
51
|
-
const { length, lambda } = chain.length === 2
|
|
52
|
-
? whole
|
|
53
|
-
: (0, coordinate_transform_1.memberAxes)(point(chain[k]), point(chain[k + 1]), member.angle ?? 0);
|
|
54
|
-
// releases only at the member's own ends
|
|
55
|
-
const releases = (0, end_releases_1.memberEndReleases)({
|
|
56
|
-
start: k === 0 ? member.releases?.start : undefined,
|
|
57
|
-
end: k === chain.length - 2 ? member.releases?.end : undefined,
|
|
58
|
-
});
|
|
59
|
-
const condensed = (0, static_condensation_1.condenseMember)((0, beam_3d_stiffness_1.beam3dLocalStiffnessRightHanded)(E, G, A, I22, I33, J, length), releases);
|
|
60
|
-
pieces.push(systemMembers.length);
|
|
61
|
-
systemMembers.push({
|
|
62
|
-
id: member.id,
|
|
63
|
-
offset,
|
|
64
|
-
section: member.section,
|
|
65
|
-
startIndex: nodeIndex.get(chain[k]),
|
|
66
|
-
endIndex: nodeIndex.get(chain[k + 1]),
|
|
67
|
-
T: (0, coordinate_transform_1.transformationMatrix)(lambda),
|
|
68
|
-
k: condensed.k,
|
|
69
|
-
hasReleases: releases.length > 0,
|
|
70
|
-
condenseFixedEndForces: condensed.condenseFixedEndForces,
|
|
71
|
-
memberEndDisplacements: condensed.memberEndDisplacements,
|
|
72
|
-
length,
|
|
73
|
-
lambda,
|
|
74
|
-
});
|
|
75
|
-
offset += length;
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
id: member.id,
|
|
79
|
-
pieces,
|
|
80
|
-
section: member.section,
|
|
81
|
-
length: whole.length,
|
|
82
|
-
lambda: whole.lambda,
|
|
83
|
-
};
|
|
84
|
-
});
|
|
85
|
-
const systemShells = shells.map((shell) => {
|
|
86
|
-
const nodeIndices = shell.nodeIds.map((id) => nodeIndex.get(id));
|
|
87
|
-
const points = nodeIndices.map((n) => [nodes[n].x, nodes[n].y, nodes[n].z]);
|
|
88
|
-
const { thickness, E, nu } = shell.section;
|
|
89
|
-
const m = shell.modifiers ?? {};
|
|
90
|
-
const type = shell.type ?? "shell";
|
|
91
|
-
const element = (0, flat_shell_1.flatShellElement)(points, {
|
|
92
|
-
E,
|
|
93
|
-
nu,
|
|
94
|
-
t: thickness,
|
|
95
|
-
type,
|
|
96
|
-
membraneModifiers: [m.f11 ?? 1, m.f22 ?? 1, m.f12 ?? 1],
|
|
97
|
-
bendingModifiers: [m.m11 ?? 1, m.m22 ?? 1, m.m12 ?? 1],
|
|
98
|
-
}, shell.angle ?? 0);
|
|
99
|
-
return {
|
|
100
|
-
id: shell.id,
|
|
101
|
-
areaId: shell.areaId ?? shell.id,
|
|
102
|
-
nodeIndices,
|
|
103
|
-
type,
|
|
104
|
-
section: shell.section,
|
|
105
|
-
modifiers: m,
|
|
106
|
-
element,
|
|
107
|
-
cornerAreas: (0, quad_geometry_1.cornerAreas)(element.axes.corners),
|
|
108
|
-
};
|
|
109
|
-
});
|
|
35
|
+
const { pieces: systemMembers, groups: memberGroups } = (0, system_member_1.prepareSystemMembers)(members, nodes, nodeIndex);
|
|
36
|
+
const systemShells = (0, system_shell_1.prepareSystemShells)(shells, nodes, nodeIndex);
|
|
110
37
|
const shellsByArea = new Map();
|
|
111
38
|
systemShells.forEach((sh, s) => {
|
|
112
39
|
const list = shellsByArea.get(sh.areaId);
|
|
@@ -118,7 +45,7 @@ const prepareFrameSystem = (model) => {
|
|
|
118
45
|
// Everything that adds stiffness, as elements over 6 DOFs per node; members have 2 nodes
|
|
119
46
|
const memberElements = systemMembers.map((m) => ({
|
|
120
47
|
nodes: [m.startIndex, m.endIndex],
|
|
121
|
-
kGlobal: (0,
|
|
48
|
+
kGlobal: (0, member_assembly_1.memberGlobalStiffness)(m),
|
|
122
49
|
}));
|
|
123
50
|
const shellElements = systemShells.map((sh) => ({
|
|
124
51
|
nodes: sh.nodeIndices,
|
|
@@ -131,9 +58,9 @@ const prepareFrameSystem = (model) => {
|
|
|
131
58
|
const unresisted = (0, auto_restraint_1.findUnresistedTranslations)([...shellOnlyNodes].sort((a, b) => a - b), // issues in model order
|
|
132
59
|
shellElements, boundary);
|
|
133
60
|
if (unresisted.length > 0) {
|
|
134
|
-
(0,
|
|
61
|
+
(0, issues_1.throwIssues)(unresisted.map(({ node, axis }) => {
|
|
135
62
|
const lead = axis.reduce((best, c, i) => (Math.abs(c) > Math.abs(axis[best]) ? i : best), 0);
|
|
136
|
-
return (0,
|
|
63
|
+
return (0, issues_1.modelIssue)(fea_error_1.FeaErrors.SHELL_DOF_UNSUPPORTED, {
|
|
137
64
|
nodeId: nodes[node].id,
|
|
138
65
|
shellId: systemShells.find((sh) => sh.nodeIndices.includes(node))?.id,
|
|
139
66
|
dof: DOF_NAMES[lead],
|
|
@@ -220,8 +147,8 @@ const prepareFrameSystem = (model) => {
|
|
|
220
147
|
const result = (0, skyline_1.skylineFactor)(K, frame_constant_1.SINGULARITY_TOLERANCE);
|
|
221
148
|
if (!result.ok) {
|
|
222
149
|
const dof = free[result.failedPivot];
|
|
223
|
-
(0,
|
|
224
|
-
(0,
|
|
150
|
+
(0, issues_1.throwIssues)([
|
|
151
|
+
(0, issues_1.modelIssue)(fea_error_1.FeaErrors.STRUCTURE_UNSTABLE, {
|
|
225
152
|
nodeId: nodes[Math.floor(dof / 6)].id,
|
|
226
153
|
dof: DOF_NAMES[dof % 6],
|
|
227
154
|
}),
|
|
@@ -247,5 +174,5 @@ const prepareFrameSystem = (model) => {
|
|
|
247
174
|
profileSize: factor ? (0, skyline_1.skylineSize)(factor) : 0,
|
|
248
175
|
};
|
|
249
176
|
};
|
|
250
|
-
exports.
|
|
251
|
-
//# sourceMappingURL=
|
|
177
|
+
exports.prepareAnalysisSystem = prepareAnalysisSystem;
|
|
178
|
+
//# 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,20 +1,22 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
|
|
1
|
+
import type { MemberDiagram } from "../../frame/types/results.type";
|
|
2
|
+
import type { FeaId } from "../../shared/types/model.type";
|
|
3
|
+
import type { FeaModel } from "../types/model.type";
|
|
4
|
+
import type { FeaResult } from "../types/results.type";
|
|
5
|
+
export interface AnalyzeOptions {
|
|
4
6
|
/** Number of evenly spaced stations per member diagram (default 21). */
|
|
5
7
|
stations?: number;
|
|
6
8
|
/**
|
|
7
9
|
* `"full"` (default) returns every member diagram with its `stations`; `"extremes"` keeps
|
|
8
10
|
* each diagram's `extremes` (so the envelope and `memberDemandEnvelope` still work) but leaves
|
|
9
11
|
* `stations` empty, which makes large results far smaller. Full diagrams are then available on
|
|
10
|
-
* demand from `
|
|
12
|
+
* demand from `createAnalysis(...).memberDiagram`.
|
|
11
13
|
*/
|
|
12
14
|
diagrams?: "full" | "extremes";
|
|
13
15
|
}
|
|
14
16
|
/** An analysed model whose member diagrams can be computed on demand. */
|
|
15
|
-
export interface
|
|
16
|
-
/** The same result `
|
|
17
|
-
result:
|
|
17
|
+
export interface Analysis {
|
|
18
|
+
/** The same result `analyze` returns. */
|
|
19
|
+
result: FeaResult;
|
|
18
20
|
/**
|
|
19
21
|
* The full diagram (stations and extremes) of one member for one load case or combination,
|
|
20
22
|
* computed from the stored solution without re-analysing.
|
|
@@ -24,27 +26,28 @@ export interface FrameAnalysis {
|
|
|
24
26
|
* @param stations - Evenly spaced stations (default: the analysis option, else 21)
|
|
25
27
|
* @throws {Error} if either id is not in the model
|
|
26
28
|
*/
|
|
27
|
-
memberDiagram: (resultId: string, memberId:
|
|
29
|
+
memberDiagram: (resultId: string, memberId: FeaId, stations?: number) => MemberDiagram;
|
|
28
30
|
}
|
|
29
31
|
/**
|
|
30
|
-
* Analyses a
|
|
32
|
+
* Analyses a model like `analyze` and keeps the solution, so that full member diagrams
|
|
31
33
|
* can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
|
|
32
34
|
* draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
|
|
33
35
|
*
|
|
34
|
-
* @param model - Nodes, members, restraints, load cases, loads tagged with their load
|
|
35
|
-
* null areas, and combinations
|
|
36
|
+
* @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
|
|
37
|
+
* case, null areas, and combinations
|
|
36
38
|
* @param options - Diagram station count and detail
|
|
37
39
|
* @returns `{ result, memberDiagram }`
|
|
38
|
-
* @throws {
|
|
40
|
+
* @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
|
|
39
41
|
* every problem in `issues`), 328 for a translation nothing resists at a node connected only
|
|
40
42
|
* to shells, 304 for an unstable structure
|
|
41
43
|
*/
|
|
42
|
-
export declare const
|
|
44
|
+
export declare const createAnalysis: (model: FeaModel, options?: AnalyzeOptions) => Analysis;
|
|
43
45
|
/**
|
|
44
|
-
* Analyses a 3D frame by the direct stiffness method
|
|
45
|
-
* for every load case, then forms every load combination
|
|
46
|
+
* Analyses a 3D structure of frame members, shell areas or both by the direct stiffness method
|
|
47
|
+
* (linear elastic, small displacements) for every load case, then forms every load combination
|
|
48
|
+
* by superposition.
|
|
46
49
|
*
|
|
47
|
-
* The model is validated first (`
|
|
50
|
+
* The model is validated first (`validateModel`). The stiffness matrix is assembled once
|
|
48
51
|
* in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
|
|
49
52
|
* load case is a separate solve. A combination is the factored sum of its load cases (nested
|
|
50
53
|
* combinations are expanded), and its member diagrams are rebuilt from the combined end forces
|
|
@@ -55,6 +58,12 @@ export declare const createFrameAnalysis: (model: FrameModel, options?: AnalyzeF
|
|
|
55
58
|
* and rad. Global axes X, Y, Z are right-handed with Z up; members use ETABS-style local axes
|
|
56
59
|
* 1, 2, 3 (see `memberAxes`). Member end forces and diagrams use right-hand rotations.
|
|
57
60
|
*
|
|
61
|
+
* A member is connected to every model node lying on it between its ends, as if it were split
|
|
62
|
+
* there, unless it sets `connectIntermediateNodes: false`; it is still reported as one member.
|
|
63
|
+
* The connections are listed in `calculationDetails.intermediateNodes`; a node close to a
|
|
64
|
+
* member but not on it is not connected, and is listed in `calculationDetails.nearMissNodes`
|
|
65
|
+
* with a warning. `memberConnectivity` makes the same check without analysing.
|
|
66
|
+
*
|
|
58
67
|
* Area loads on null areas (`areas`, `areaLoads`) are first turned into member loads on the
|
|
59
68
|
* members along each area's edges (see `distributeAreaLoads`); the areas add no stiffness.
|
|
60
69
|
* Shell areas (`shells`) are four-node flat shell elements with their own stiffness; area loads
|
|
@@ -62,13 +71,13 @@ export declare const createFrameAnalysis: (model: FrameModel, options?: AnalyzeF
|
|
|
62
71
|
*
|
|
63
72
|
* Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
|
|
64
73
|
*
|
|
65
|
-
* @param model - Nodes, members, restraints, load cases, loads tagged with their load
|
|
66
|
-
* null areas, and combinations
|
|
74
|
+
* @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
|
|
75
|
+
* case, null areas, and combinations
|
|
67
76
|
* @param options - Diagram station count and detail
|
|
68
77
|
* @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
|
|
69
78
|
* `calculationDetails`, `units` and `warnings`
|
|
70
|
-
* @throws {
|
|
79
|
+
* @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
|
|
71
80
|
* every problem in `issues`), 328 for a translation nothing resists at a node connected only
|
|
72
81
|
* to shells, 304 for an unstable structure
|
|
73
82
|
*/
|
|
74
|
-
export declare const
|
|
83
|
+
export declare const analyze: (model: FeaModel, options?: AnalyzeOptions) => FeaResult;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.analyze = exports.createAnalysis = void 0;
|
|
4
|
+
const area_member_loads_1 = require("../../frame/area/area-member-loads");
|
|
5
|
+
const issues_1 = require("../../shared/validation/issues");
|
|
4
6
|
const math_1 = require("../../../utils/math");
|
|
5
|
-
const distribute_area_loads_1 = require("../area/distribute-area-loads");
|
|
6
7
|
const envelope_1 = require("../post/envelope");
|
|
7
8
|
const present_state_1 = require("../post/present-state");
|
|
8
|
-
const validate_model_1 = require("../validation/validate-model");
|
|
9
9
|
const expand_model_1 = require("../mesh/expand-model");
|
|
10
|
+
const validate_model_1 = require("../validation/validate-model");
|
|
10
11
|
const combinations_1 = require("./combinations");
|
|
11
|
-
const
|
|
12
|
+
const analysis_system_1 = require("./analysis-system");
|
|
12
13
|
const load_case_solver_1 = require("./load-case-solver");
|
|
13
14
|
const ROTATION_DOFS = ["rx", "ry", "rz"];
|
|
14
15
|
/** The presented form of the joint rotations held by the solver. */
|
|
@@ -34,28 +35,28 @@ const groupByCase = (loads = []) => {
|
|
|
34
35
|
return groups;
|
|
35
36
|
};
|
|
36
37
|
/**
|
|
37
|
-
* Analyses a
|
|
38
|
+
* Analyses a model like `analyze` and keeps the solution, so that full member diagrams
|
|
38
39
|
* can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
|
|
39
40
|
* draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
|
|
40
41
|
*
|
|
41
|
-
* @param model - Nodes, members, restraints, load cases, loads tagged with their load
|
|
42
|
-
* null areas, and combinations
|
|
42
|
+
* @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
|
|
43
|
+
* case, null areas, and combinations
|
|
43
44
|
* @param options - Diagram station count and detail
|
|
44
45
|
* @returns `{ result, memberDiagram }`
|
|
45
|
-
* @throws {
|
|
46
|
+
* @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
|
|
46
47
|
* every problem in `issues`), 328 for a translation nothing resists at a node connected only
|
|
47
48
|
* to shells, 304 for an unstable structure
|
|
48
49
|
*/
|
|
49
|
-
const
|
|
50
|
-
const issues = (0, validate_model_1.
|
|
50
|
+
const createAnalysis = (model, options = {}) => {
|
|
51
|
+
const issues = (0, validate_model_1.validateModel)(model);
|
|
51
52
|
if (issues.length > 0)
|
|
52
|
-
(0,
|
|
53
|
+
(0, issues_1.throwIssues)(issues);
|
|
53
54
|
const expanded = (0, expand_model_1.expandModel)(model);
|
|
54
|
-
const system = (0,
|
|
55
|
+
const system = (0, analysis_system_1.prepareAnalysisSystem)(expanded.model);
|
|
55
56
|
const combinations = model.combinations ?? [];
|
|
56
57
|
const resolved = (0, combinations_1.resolveCombinations)(combinations, new Set(model.loadCases.map((c) => c.id)));
|
|
57
58
|
const withStations = (options.diagrams ?? "full") === "full";
|
|
58
|
-
const fromAreas = (0,
|
|
59
|
+
const fromAreas = (0, area_member_loads_1.areaMemberLoads)(model);
|
|
59
60
|
const states = new Map();
|
|
60
61
|
const cases = {};
|
|
61
62
|
const nodalByCase = groupByCase(model.nodalLoads);
|
|
@@ -107,6 +108,8 @@ const createFrameAnalysis = (model, options = {}) => {
|
|
|
107
108
|
loadCaseCount: model.loadCases.length,
|
|
108
109
|
combinationCount: combinations.length,
|
|
109
110
|
autoRestrainedDofs: autoRestrainedDofs(system),
|
|
111
|
+
intermediateNodes: expanded.connectivity.intermediateNodes,
|
|
112
|
+
nearMissNodes: expanded.connectivity.nearMissNodes,
|
|
110
113
|
},
|
|
111
114
|
units: {
|
|
112
115
|
force: "kN",
|
|
@@ -132,12 +135,13 @@ const createFrameAnalysis = (model, options = {}) => {
|
|
|
132
135
|
},
|
|
133
136
|
};
|
|
134
137
|
};
|
|
135
|
-
exports.
|
|
138
|
+
exports.createAnalysis = createAnalysis;
|
|
136
139
|
/**
|
|
137
|
-
* Analyses a 3D frame by the direct stiffness method
|
|
138
|
-
* for every load case, then forms every load combination
|
|
140
|
+
* Analyses a 3D structure of frame members, shell areas or both by the direct stiffness method
|
|
141
|
+
* (linear elastic, small displacements) for every load case, then forms every load combination
|
|
142
|
+
* by superposition.
|
|
139
143
|
*
|
|
140
|
-
* The model is validated first (`
|
|
144
|
+
* The model is validated first (`validateModel`). The stiffness matrix is assembled once
|
|
141
145
|
* in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
|
|
142
146
|
* load case is a separate solve. A combination is the factored sum of its load cases (nested
|
|
143
147
|
* combinations are expanded), and its member diagrams are rebuilt from the combined end forces
|
|
@@ -148,6 +152,12 @@ exports.createFrameAnalysis = createFrameAnalysis;
|
|
|
148
152
|
* and rad. Global axes X, Y, Z are right-handed with Z up; members use ETABS-style local axes
|
|
149
153
|
* 1, 2, 3 (see `memberAxes`). Member end forces and diagrams use right-hand rotations.
|
|
150
154
|
*
|
|
155
|
+
* A member is connected to every model node lying on it between its ends, as if it were split
|
|
156
|
+
* there, unless it sets `connectIntermediateNodes: false`; it is still reported as one member.
|
|
157
|
+
* The connections are listed in `calculationDetails.intermediateNodes`; a node close to a
|
|
158
|
+
* member but not on it is not connected, and is listed in `calculationDetails.nearMissNodes`
|
|
159
|
+
* with a warning. `memberConnectivity` makes the same check without analysing.
|
|
160
|
+
*
|
|
151
161
|
* Area loads on null areas (`areas`, `areaLoads`) are first turned into member loads on the
|
|
152
162
|
* members along each area's edges (see `distributeAreaLoads`); the areas add no stiffness.
|
|
153
163
|
* Shell areas (`shells`) are four-node flat shell elements with their own stiffness; area loads
|
|
@@ -155,15 +165,15 @@ exports.createFrameAnalysis = createFrameAnalysis;
|
|
|
155
165
|
*
|
|
156
166
|
* Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
|
|
157
167
|
*
|
|
158
|
-
* @param model - Nodes, members, restraints, load cases, loads tagged with their load
|
|
159
|
-
* null areas, and combinations
|
|
168
|
+
* @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
|
|
169
|
+
* case, null areas, and combinations
|
|
160
170
|
* @param options - Diagram station count and detail
|
|
161
171
|
* @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
|
|
162
172
|
* `calculationDetails`, `units` and `warnings`
|
|
163
|
-
* @throws {
|
|
173
|
+
* @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
|
|
164
174
|
* every problem in `issues`), 328 for a translation nothing resists at a node connected only
|
|
165
175
|
* to shells, 304 for an unstable structure
|
|
166
176
|
*/
|
|
167
|
-
const
|
|
168
|
-
exports.
|
|
169
|
-
//# sourceMappingURL=analyze
|
|
177
|
+
const analyze = (model, options = {}) => (0, exports.createAnalysis)(model, options).result;
|
|
178
|
+
exports.analyze = analyze;
|
|
179
|
+
//# 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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"}
|
|
@@ -5,7 +5,7 @@ import type { LoadCombination } from "../types/model.type";
|
|
|
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 declare const resolveCombinations: (combinations: LoadCombination[], caseIds: Set<string>) => Map<string, Map<string, number>>;
|
|
@@ -1,42 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resolveCombinations = void 0;
|
|
4
|
-
const
|
|
4
|
+
const fea_error_1 = require("../../../core/errors/fea.error");
|
|
5
5
|
/**
|
|
6
6
|
* Expands every combination into net factors on load cases, following nested combinations.
|
|
7
7
|
*
|
|
8
8
|
* @param combinations - Model combinations
|
|
9
9
|
* @param caseIds - Ids of the model's load cases
|
|
10
10
|
* @returns For each combination id, the net factor on each load case it uses
|
|
11
|
-
* @throws {
|
|
11
|
+
* @throws {FeaError} 309 for an unknown or missing reference, 310 for a loop,
|
|
12
12
|
* 311 for a non-finite factor or an empty combination
|
|
13
13
|
*/
|
|
14
14
|
const resolveCombinations = (combinations, caseIds) => {
|
|
15
15
|
const byId = new Map(combinations.map((c) => [c.id, c]));
|
|
16
16
|
for (const combination of combinations) {
|
|
17
17
|
if (!Array.isArray(combination.terms) || combination.terms.length === 0) {
|
|
18
|
-
throw new
|
|
18
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.INVALID_LOAD_FACTOR, {
|
|
19
19
|
combinationId: combination.id,
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
for (const term of combination.terms) {
|
|
23
23
|
if (!Number.isFinite(term.factor))
|
|
24
|
-
throw new
|
|
24
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.INVALID_LOAD_FACTOR, {
|
|
25
25
|
combinationId: combination.id,
|
|
26
26
|
});
|
|
27
27
|
const isCase = "case" in term && term.case !== undefined;
|
|
28
28
|
const isCombination = "combination" in term && term.combination !== undefined;
|
|
29
29
|
if (isCase === isCombination)
|
|
30
|
-
throw new
|
|
30
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, {
|
|
31
31
|
combinationId: combination.id,
|
|
32
32
|
});
|
|
33
33
|
if (isCase && !caseIds.has(term.case)) {
|
|
34
|
-
throw new
|
|
34
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, {
|
|
35
35
|
combinationId: combination.id,
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
if (isCombination && !byId.has(term.combination)) {
|
|
39
|
-
throw new
|
|
39
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, {
|
|
40
40
|
combinationId: combination.id,
|
|
41
41
|
});
|
|
42
42
|
}
|
|
@@ -49,7 +49,7 @@ const resolveCombinations = (combinations, caseIds) => {
|
|
|
49
49
|
if (done)
|
|
50
50
|
return done;
|
|
51
51
|
if (visiting.has(id)) {
|
|
52
|
-
throw new
|
|
52
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.CIRCULAR_COMBINATION, { combinationId: id });
|
|
53
53
|
}
|
|
54
54
|
visiting.add(id);
|
|
55
55
|
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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"}
|