@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes-along-members.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/nodes-along-members.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { SectionProperties } from "../../../core/types/section-properties.type";
|
|
2
|
+
import type { FeaId, FeaNode } from "../../shared/types/model.type";
|
|
3
|
+
import type { Matrix } from "../../../utils/matrix";
|
|
4
|
+
import { type CondensedMember } from "../elements/static-condensation";
|
|
5
|
+
import type { Member } from "../types/model.type";
|
|
6
|
+
import type { AssemblyMember } from "./member-assembly";
|
|
7
|
+
/**
|
|
8
|
+
* A member, or a piece of one, with everything that does not depend on the loads. A member is
|
|
9
|
+
* cut into pieces where nodes lie inside it (model nodes on it, generated shell-mesh nodes);
|
|
10
|
+
* otherwise it is one piece.
|
|
11
|
+
*/
|
|
12
|
+
export interface SystemMember extends AssemblyMember {
|
|
13
|
+
id: FeaId;
|
|
14
|
+
/** Distance of the piece's start from the member's start (mm); 0 for a whole member. */
|
|
15
|
+
offset: number;
|
|
16
|
+
section: SectionProperties;
|
|
17
|
+
length: number;
|
|
18
|
+
lambda: Matrix;
|
|
19
|
+
/** True when any end DOF is released or tied by a spring. */
|
|
20
|
+
hasReleases: boolean;
|
|
21
|
+
/** Condenses a member's fixed-end forces for its end releases. */
|
|
22
|
+
condenseFixedEndForces: CondensedMember["condenseFixedEndForces"];
|
|
23
|
+
/** The member's own end displacements from its end nodes' (differ across releases). */
|
|
24
|
+
memberEndDisplacements: CondensedMember["memberEndDisplacements"];
|
|
25
|
+
}
|
|
26
|
+
/** A model member and the pieces it is analysed as (one unless nodes lie inside it). */
|
|
27
|
+
export interface MemberGroup {
|
|
28
|
+
id: FeaId;
|
|
29
|
+
/** Indices of its pieces among all pieces, from the member's start to its end. */
|
|
30
|
+
pieces: number[];
|
|
31
|
+
section: SectionProperties;
|
|
32
|
+
length: number;
|
|
33
|
+
lambda: Matrix;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Builds the pieces of every member of a model that passed `validateModel`: local axes,
|
|
37
|
+
* transformation and local stiffness condensed for the end releases, which apply only at the
|
|
38
|
+
* member's own ends. A member is one piece unless nodes lie inside it.
|
|
39
|
+
*
|
|
40
|
+
* @param members - Members, in model order; after `expandModel` each lists the model and
|
|
41
|
+
* generated nodes it passes through, in order from its start
|
|
42
|
+
* @param nodes - The analysed nodes, generated mesh nodes included
|
|
43
|
+
* @param nodeIndex - Map from node id to index into `nodes`
|
|
44
|
+
* @returns `pieces` to assemble, and one `group` per member indexing its pieces
|
|
45
|
+
*/
|
|
46
|
+
export declare const prepareSystemMembers: (members: (Member & {
|
|
47
|
+
through?: FeaId[];
|
|
48
|
+
})[], nodes: FeaNode[], nodeIndex: Map<FeaId, number>) => {
|
|
49
|
+
pieces: SystemMember[];
|
|
50
|
+
groups: MemberGroup[];
|
|
51
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareSystemMembers = void 0;
|
|
4
|
+
const beam_3d_stiffness_1 = require("../elements/beam-3d-stiffness");
|
|
5
|
+
const end_releases_1 = require("../elements/end-releases");
|
|
6
|
+
const static_condensation_1 = require("../elements/static-condensation");
|
|
7
|
+
const coordinate_transform_1 = require("../transformation/coordinate-transform");
|
|
8
|
+
/**
|
|
9
|
+
* Builds the pieces of every member of a model that passed `validateModel`: local axes,
|
|
10
|
+
* transformation and local stiffness condensed for the end releases, which apply only at the
|
|
11
|
+
* member's own ends. A member is one piece unless nodes lie inside it.
|
|
12
|
+
*
|
|
13
|
+
* @param members - Members, in model order; after `expandModel` each lists the model and
|
|
14
|
+
* generated nodes it passes through, in order from its start
|
|
15
|
+
* @param nodes - The analysed nodes, generated mesh nodes included
|
|
16
|
+
* @param nodeIndex - Map from node id to index into `nodes`
|
|
17
|
+
* @returns `pieces` to assemble, and one `group` per member indexing its pieces
|
|
18
|
+
*/
|
|
19
|
+
const prepareSystemMembers = (members, nodes, nodeIndex) => {
|
|
20
|
+
const point = (id) => {
|
|
21
|
+
const n = nodes[nodeIndex.get(id)];
|
|
22
|
+
return [n.x, n.y, n.z];
|
|
23
|
+
};
|
|
24
|
+
const systemMembers = [];
|
|
25
|
+
const memberGroups = members.map((member) => {
|
|
26
|
+
// pieces between the member's ends and the nodes inside it (see `expandModel`)
|
|
27
|
+
const chain = [member.startNodeId, ...(member.through ?? []), member.endNodeId];
|
|
28
|
+
const whole = (0, coordinate_transform_1.memberAxes)(point(member.startNodeId), point(member.endNodeId), member.angle ?? 0);
|
|
29
|
+
const { E, G, A, I22, I33, J } = member.section;
|
|
30
|
+
const pieces = [];
|
|
31
|
+
let offset = 0;
|
|
32
|
+
for (let k = 0; k + 1 < chain.length; k++) {
|
|
33
|
+
const { length, lambda } = chain.length === 2
|
|
34
|
+
? whole
|
|
35
|
+
: (0, coordinate_transform_1.memberAxes)(point(chain[k]), point(chain[k + 1]), member.angle ?? 0);
|
|
36
|
+
// releases only at the member's own ends
|
|
37
|
+
const releases = (0, end_releases_1.memberEndReleases)({
|
|
38
|
+
start: k === 0 ? member.releases?.start : undefined,
|
|
39
|
+
end: k === chain.length - 2 ? member.releases?.end : undefined,
|
|
40
|
+
});
|
|
41
|
+
const condensed = (0, static_condensation_1.condenseMember)((0, beam_3d_stiffness_1.beam3dLocalStiffnessRightHanded)(E, G, A, I22, I33, J, length), releases);
|
|
42
|
+
pieces.push(systemMembers.length);
|
|
43
|
+
systemMembers.push({
|
|
44
|
+
id: member.id,
|
|
45
|
+
offset,
|
|
46
|
+
section: member.section,
|
|
47
|
+
startIndex: nodeIndex.get(chain[k]),
|
|
48
|
+
endIndex: nodeIndex.get(chain[k + 1]),
|
|
49
|
+
T: (0, coordinate_transform_1.transformationMatrix)(lambda),
|
|
50
|
+
k: condensed.k,
|
|
51
|
+
hasReleases: releases.length > 0,
|
|
52
|
+
condenseFixedEndForces: condensed.condenseFixedEndForces,
|
|
53
|
+
memberEndDisplacements: condensed.memberEndDisplacements,
|
|
54
|
+
length,
|
|
55
|
+
lambda,
|
|
56
|
+
});
|
|
57
|
+
offset += length;
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
id: member.id,
|
|
61
|
+
pieces,
|
|
62
|
+
section: member.section,
|
|
63
|
+
length: whole.length,
|
|
64
|
+
lambda: whole.lambda,
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
return { pieces: systemMembers, groups: memberGroups };
|
|
68
|
+
};
|
|
69
|
+
exports.prepareSystemMembers = prepareSystemMembers;
|
|
70
|
+
//# sourceMappingURL=system-member.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system-member.js","sourceRoot":"","sources":["../../../../src/fea/frame/solver/system-member.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import { type Matrix } from "../../../utils/matrix";
|
|
|
11
11
|
* @param end - End node coordinates in mm
|
|
12
12
|
* @param angle - Member angle in rad (default 0)
|
|
13
13
|
* @returns `{ length, lambda }` with `lambda` rows = local 1, 2, 3 in global components
|
|
14
|
-
* @throws {
|
|
14
|
+
* @throws {FeaError} 301 if the nodes coincide
|
|
15
15
|
*/
|
|
16
16
|
export declare const memberAxes: (start: [number, number, number], end: [number, number, number], angle?: number) => {
|
|
17
17
|
length: number;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.transformationMatrix = exports.memberAxes = 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
6
|
const matrix_1 = require("../../../utils/matrix");
|
|
7
7
|
const cross = (a, b) => [
|
|
8
8
|
a[1] * b[2] - a[2] * b[1],
|
|
@@ -23,13 +23,13 @@ const scale = (a, s) => [a[0] * s, a[1] * s, a[2] * s];
|
|
|
23
23
|
* @param end - End node coordinates in mm
|
|
24
24
|
* @param angle - Member angle in rad (default 0)
|
|
25
25
|
* @returns `{ length, lambda }` with `lambda` rows = local 1, 2, 3 in global components
|
|
26
|
-
* @throws {
|
|
26
|
+
* @throws {FeaError} 301 if the nodes coincide
|
|
27
27
|
*/
|
|
28
28
|
const memberAxes = (start, end, angle = 0) => {
|
|
29
29
|
const d = [end[0] - start[0], end[1] - start[1], end[2] - start[2]];
|
|
30
30
|
const length = norm(d);
|
|
31
31
|
if (!(length > 0))
|
|
32
|
-
throw new
|
|
32
|
+
throw new fea_error_1.FeaError(fea_error_1.FeaErrors.ZERO_LENGTH_MEMBER);
|
|
33
33
|
const e1 = scale(d, 1 / length);
|
|
34
34
|
let e2;
|
|
35
35
|
let e3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinate-transform.js","sourceRoot":"","sources":["../../../../src/fea/frame/transformation/coordinate-transform.ts"],"names":[],"mappings":";;;AAAA,uEAA+E;AAC/E,
|
|
1
|
+
{"version":3,"file":"coordinate-transform.js","sourceRoot":"","sources":["../../../../src/fea/frame/transformation/coordinate-transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,5 @@
|
|
|
1
1
|
import type { SectionProperties } from "../../../core/types/section-properties.type";
|
|
2
|
-
|
|
3
|
-
export interface FrameNode {
|
|
4
|
-
id: FrameId;
|
|
5
|
-
x: number;
|
|
6
|
-
y: number;
|
|
7
|
-
z: number;
|
|
8
|
-
}
|
|
9
|
-
/** A restrained DOF: `true` is fixed, a number is a spring stiffness, omitted/`false` is free. */
|
|
10
|
-
export type DofRestraint = boolean | number;
|
|
11
|
-
/**
|
|
12
|
-
* Fixed DOFs along a straight line: every node on the segment between two nodes, including the
|
|
13
|
-
* nodes the engine generates when it meshes shell areas, e.g. a wall base fixed along its
|
|
14
|
-
* length. `true` fixes the DOF; there are no line springs. Combined with point restraints at
|
|
15
|
-
* the same node, a fixed DOF stays fixed.
|
|
16
|
-
*/
|
|
17
|
-
export interface LineRestraint {
|
|
18
|
-
nodeIds: [FrameId, FrameId];
|
|
19
|
-
ux?: boolean;
|
|
20
|
-
uy?: boolean;
|
|
21
|
-
uz?: boolean;
|
|
22
|
-
rx?: boolean;
|
|
23
|
-
ry?: boolean;
|
|
24
|
-
rz?: boolean;
|
|
25
|
-
}
|
|
26
|
-
export interface Restraint {
|
|
27
|
-
nodeId: FrameId;
|
|
28
|
-
ux?: DofRestraint;
|
|
29
|
-
uy?: DofRestraint;
|
|
30
|
-
uz?: DofRestraint;
|
|
31
|
-
rx?: DofRestraint;
|
|
32
|
-
ry?: DofRestraint;
|
|
33
|
-
rz?: DofRestraint;
|
|
34
|
-
}
|
|
2
|
+
import type { FeaId } from "../../shared/types/model.type";
|
|
35
3
|
/**
|
|
36
4
|
* How a member end DOF is tied to its node: `true` (or 0) is a full release that carries no
|
|
37
5
|
* force, a positive number is a spring stiffness in series with the member end (partial
|
|
@@ -48,25 +16,21 @@ export interface MemberEndRelease {
|
|
|
48
16
|
r3?: DofRelease;
|
|
49
17
|
}
|
|
50
18
|
export interface Member {
|
|
51
|
-
id:
|
|
52
|
-
startNodeId:
|
|
53
|
-
endNodeId:
|
|
19
|
+
id: FeaId;
|
|
20
|
+
startNodeId: FeaId;
|
|
21
|
+
endNodeId: FeaId;
|
|
54
22
|
section: SectionProperties;
|
|
55
23
|
angle?: number;
|
|
56
24
|
releases?: {
|
|
57
25
|
start?: MemberEndRelease;
|
|
58
26
|
end?: MemberEndRelease;
|
|
59
27
|
};
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
fz?: number;
|
|
67
|
-
mx?: number;
|
|
68
|
-
my?: number;
|
|
69
|
-
mz?: number;
|
|
28
|
+
/**
|
|
29
|
+
* Connect the member to every model node lying on it between its ends (a beam framing in,
|
|
30
|
+
* a column landing mid-span), as if it were split there; it stays one member in the results.
|
|
31
|
+
* Default true. Each connection is listed in `calculationDetails.intermediateNodes`.
|
|
32
|
+
*/
|
|
33
|
+
connectIntermediateNodes?: boolean;
|
|
70
34
|
}
|
|
71
35
|
/** Load direction: local member axes "1", "2", "3" or global axes "X", "Y", "Z". */
|
|
72
36
|
export type LoadDirection = "1" | "2" | "3" | "X" | "Y" | "Z";
|
|
@@ -79,7 +43,7 @@ export type LoadDirection = "1" | "2" | "3" | "X" | "Y" | "Z";
|
|
|
79
43
|
export interface UniformMemberLoad {
|
|
80
44
|
loadCase: string;
|
|
81
45
|
type: "udl";
|
|
82
|
-
memberId:
|
|
46
|
+
memberId: FeaId;
|
|
83
47
|
direction: LoadDirection;
|
|
84
48
|
w: number;
|
|
85
49
|
start?: number;
|
|
@@ -89,7 +53,7 @@ export interface UniformMemberLoad {
|
|
|
89
53
|
export interface PointMemberLoad {
|
|
90
54
|
loadCase: string;
|
|
91
55
|
type: "point";
|
|
92
|
-
memberId:
|
|
56
|
+
memberId: FeaId;
|
|
93
57
|
direction: LoadDirection;
|
|
94
58
|
P: number;
|
|
95
59
|
a: number;
|
|
@@ -102,7 +66,7 @@ export interface PointMemberLoad {
|
|
|
102
66
|
export interface TrapezoidalMemberLoad {
|
|
103
67
|
loadCase: string;
|
|
104
68
|
type: "trapezoidal";
|
|
105
|
-
memberId:
|
|
69
|
+
memberId: FeaId;
|
|
106
70
|
direction: LoadDirection;
|
|
107
71
|
w1: number;
|
|
108
72
|
w2: number;
|
|
@@ -117,7 +81,7 @@ export interface TrapezoidalMemberLoad {
|
|
|
117
81
|
export interface TorqueMemberLoad {
|
|
118
82
|
loadCase: string;
|
|
119
83
|
type: "torque";
|
|
120
|
-
memberId:
|
|
84
|
+
memberId: FeaId;
|
|
121
85
|
t: number;
|
|
122
86
|
start?: number;
|
|
123
87
|
end?: number;
|
|
@@ -137,132 +101,9 @@ export type AreaDistribution = "twoWay" | "oneWay" | "cantilever";
|
|
|
137
101
|
* nodes, so nodes listed counter-clockwise seen from above give local 3 = +Z.
|
|
138
102
|
*/
|
|
139
103
|
export interface NullArea {
|
|
140
|
-
id:
|
|
141
|
-
nodeIds:
|
|
104
|
+
id: FeaId;
|
|
105
|
+
nodeIds: FeaId[];
|
|
142
106
|
distribution: AreaDistribution;
|
|
143
107
|
/** Edge indices that carry the load: one-way supports, or the one cantilever support. */
|
|
144
108
|
supportEdges?: number[];
|
|
145
109
|
}
|
|
146
|
-
/**
|
|
147
|
-
* How a shell area carries load: in its plane and in bending (`"shell"`), in its plane only
|
|
148
|
-
* (`"membrane"`: u1, u2 and the rotation about local 3), or in bending only (`"plate"`: u3 and
|
|
149
|
-
* the rotations about local 1 and 2).
|
|
150
|
-
*/
|
|
151
|
-
export type ShellType = "shell" | "membrane" | "plate";
|
|
152
|
-
/** Material and thickness of a shell area. */
|
|
153
|
-
export interface ShellSection {
|
|
154
|
-
thickness: number;
|
|
155
|
-
E: number;
|
|
156
|
-
nu: number;
|
|
157
|
-
unitWeight?: number;
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Stiffness modifiers of a shell area along its local axes 1 and 2 (default 1 each), e.g. for
|
|
161
|
-
* cracked walls and slabs: f11, f22, f12 scale the membrane rigidity and m11, m22, m12 the
|
|
162
|
-
* bending rigidity (each matrix becomes S·D·S, S = diag(√f11, √f22, √f12)); weight scales the
|
|
163
|
-
* self-weight only.
|
|
164
|
-
*/
|
|
165
|
-
export interface ShellModifiers {
|
|
166
|
-
f11?: number;
|
|
167
|
-
f22?: number;
|
|
168
|
-
f12?: number;
|
|
169
|
-
m11?: number;
|
|
170
|
-
m22?: number;
|
|
171
|
-
m12?: number;
|
|
172
|
-
weight?: number;
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* How the engine meshes a shell area: `maxSize` (mm) is the largest element side wanted;
|
|
176
|
-
* `divisions` the least number of elements along edges 0–1 and 1–2 (from `nodeIds[0]` to
|
|
177
|
-
* `nodeIds[1]` and from `nodeIds[1]` to `nodeIds[2]`). Counts may grow so that areas sharing an
|
|
178
|
-
* edge, or meeting it at a node, share their mesh nodes.
|
|
179
|
-
*/
|
|
180
|
-
export interface ShellMesh {
|
|
181
|
-
maxSize?: number;
|
|
182
|
-
divisions?: [number, number];
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* A four-node flat shell area: a drilling-rotation membrane and a thin (DKQ) plate, built on
|
|
186
|
-
* the mean plane of its corners. Without `mesh` it is one element, unless a neighbour's mesh or
|
|
187
|
-
* a node lying on its edge forces divisions. Local axis 3 is the normal by the
|
|
188
|
-
* right-hand rule around `nodeIds`; local 2 is +Z projected onto the plane (upward on a wall)
|
|
189
|
-
* and local 1 = 2 × 3 is horizontal, except on a horizontal shell, where local 1 = +X.
|
|
190
|
-
* `angle` rotates local 1 and 2 about local 3. Its id shares one namespace with null areas, so
|
|
191
|
-
* `AreaLoad` can load it.
|
|
192
|
-
*/
|
|
193
|
-
export interface ShellArea {
|
|
194
|
-
id: FrameId;
|
|
195
|
-
nodeIds: FrameId[];
|
|
196
|
-
type?: ShellType;
|
|
197
|
-
section: ShellSection;
|
|
198
|
-
angle?: number;
|
|
199
|
-
modifiers?: ShellModifiers;
|
|
200
|
-
mesh?: ShellMesh;
|
|
201
|
-
}
|
|
202
|
-
/** Area load direction: the area's local normal "3" or a global axis. */
|
|
203
|
-
export type AreaLoadDirection = "3" | "X" | "Y" | "Z";
|
|
204
|
-
/**
|
|
205
|
-
* Uniform load on a null area or a shell area. `q` is per unit true area, or with
|
|
206
|
-
* `projected: true` (global directions only) per unit area projected onto the plane normal to
|
|
207
|
-
* `direction`, e.g. per plan area on a ramp; it is then applied as `q · |n · direction|` on
|
|
208
|
-
* the true area. A null area sends it to the members along its edges; a shell area takes it
|
|
209
|
-
* as forces at its corners, each corner the share `∫ Nᵢ dA` of its area.
|
|
210
|
-
*/
|
|
211
|
-
export interface AreaLoad {
|
|
212
|
-
loadCase: string;
|
|
213
|
-
areaId: FrameId;
|
|
214
|
-
direction: AreaLoadDirection;
|
|
215
|
-
q: number;
|
|
216
|
-
projected?: boolean;
|
|
217
|
-
}
|
|
218
|
-
/** Descriptive category of a load case; it labels the case and does not change the analysis. */
|
|
219
|
-
export type LoadCaseType = "dead" | "superDead" | "live" | "roofLive" | "snow" | "wind" | "seismic" | "other";
|
|
220
|
-
/**
|
|
221
|
-
* One independently analysed set of loads, e.g. dead, superimposed dead or live. The loads
|
|
222
|
-
* themselves are listed in `FrameModel.nodalLoads` and `FrameModel.memberLoads`, each tagged
|
|
223
|
-
* with its `loadCase`.
|
|
224
|
-
*/
|
|
225
|
-
export interface LoadCase {
|
|
226
|
-
id: string;
|
|
227
|
-
name?: string;
|
|
228
|
-
type?: LoadCaseType;
|
|
229
|
-
/**
|
|
230
|
-
* Self-weight multiplier (1 = full self-weight). Applies `selfWeight · unitWeight · A` per unit
|
|
231
|
-
* length of every member and `selfWeight · unitWeight · thickness` (times `modifiers.weight`)
|
|
232
|
-
* per unit area of every shell, along global −Z. Default 0.
|
|
233
|
-
*/
|
|
234
|
-
selfWeight?: number;
|
|
235
|
-
}
|
|
236
|
-
/** One term of a load combination: a factor times a load case or another combination. */
|
|
237
|
-
export type CombinationTerm = {
|
|
238
|
-
case: string;
|
|
239
|
-
factor: number;
|
|
240
|
-
} | {
|
|
241
|
-
combination: string;
|
|
242
|
-
factor: number;
|
|
243
|
-
};
|
|
244
|
-
/** A linear combination (sum of factored terms) of load cases and other combinations. */
|
|
245
|
-
export interface LoadCombination {
|
|
246
|
-
id: string;
|
|
247
|
-
name?: string;
|
|
248
|
-
terms: CombinationTerm[];
|
|
249
|
-
}
|
|
250
|
-
export interface FrameModel {
|
|
251
|
-
nodes: FrameNode[];
|
|
252
|
-
members: Member[];
|
|
253
|
-
restraints: Restraint[];
|
|
254
|
-
/** Fixed DOFs of every node along straight lines, generated mesh nodes included. */
|
|
255
|
-
lineRestraints?: LineRestraint[];
|
|
256
|
-
loadCases: LoadCase[];
|
|
257
|
-
/** Nodal loads of every load case, each tagged with its `loadCase`. */
|
|
258
|
-
nodalLoads?: NodalLoad[];
|
|
259
|
-
/** Member loads of every load case, each tagged with its `loadCase`. */
|
|
260
|
-
memberLoads?: MemberLoad[];
|
|
261
|
-
/** Null areas that distribute `areaLoads` to the members along their edges. */
|
|
262
|
-
areas?: NullArea[];
|
|
263
|
-
/** Shell areas: four-node flat shell elements with membrane and/or plate stiffness. */
|
|
264
|
-
shells?: ShellArea[];
|
|
265
|
-
/** Area loads of every load case, each tagged with its `loadCase`. */
|
|
266
|
-
areaLoads?: AreaLoad[];
|
|
267
|
-
combinations?: LoadCombination[];
|
|
268
|
-
}
|
|
@@ -1,23 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { FrameId, FrameNode, LoadCaseType } from "./model.type";
|
|
3
|
-
export interface NodalDisplacement {
|
|
4
|
-
nodeId: FrameId;
|
|
5
|
-
ux: number;
|
|
6
|
-
uy: number;
|
|
7
|
-
uz: number;
|
|
8
|
-
rx: number;
|
|
9
|
-
ry: number;
|
|
10
|
-
rz: number;
|
|
11
|
-
}
|
|
12
|
-
export interface NodalReaction {
|
|
13
|
-
nodeId: FrameId;
|
|
14
|
-
fx: number;
|
|
15
|
-
fy: number;
|
|
16
|
-
fz: number;
|
|
17
|
-
mx: number;
|
|
18
|
-
my: number;
|
|
19
|
-
mz: number;
|
|
20
|
-
}
|
|
1
|
+
import type { FeaId } from "../../shared/types/model.type";
|
|
21
2
|
/** Force the node exerts on one member end, in local axes 1, 2, 3 (right-hand rotations). */
|
|
22
3
|
export interface MemberEndForce {
|
|
23
4
|
f1: number;
|
|
@@ -28,7 +9,7 @@ export interface MemberEndForce {
|
|
|
28
9
|
m3: number;
|
|
29
10
|
}
|
|
30
11
|
export interface MemberEndForces {
|
|
31
|
-
memberId:
|
|
12
|
+
memberId: FeaId;
|
|
32
13
|
start: MemberEndForce;
|
|
33
14
|
end: MemberEndForce;
|
|
34
15
|
}
|
|
@@ -46,18 +27,10 @@ export interface ReleaseDeformation {
|
|
|
46
27
|
r3: number;
|
|
47
28
|
}
|
|
48
29
|
export interface MemberReleaseDeformations {
|
|
49
|
-
memberId:
|
|
30
|
+
memberId: FeaId;
|
|
50
31
|
start: ReleaseDeformation;
|
|
51
32
|
end: ReleaseDeformation;
|
|
52
33
|
}
|
|
53
|
-
/** A rotation direction at a node held by `analyzeFrame` because no member resists it. */
|
|
54
|
-
export interface AutoRestrainedDof {
|
|
55
|
-
nodeId: FrameId;
|
|
56
|
-
/** Unit vector of the held rotation axis, global X, Y, Z. */
|
|
57
|
-
axis: [number, number, number];
|
|
58
|
-
/** The global rotation DOF when `axis` is a global axis. */
|
|
59
|
-
dof?: "rx" | "ry" | "rz";
|
|
60
|
-
}
|
|
61
34
|
/**
|
|
62
35
|
* Internal forces and displacements at a distance `x` from the member start. Forces act on
|
|
63
36
|
* the positive (+1) face of the cut; N is positive in tension. Displacements are the member's
|
|
@@ -86,7 +59,7 @@ export interface ExtremeValue {
|
|
|
86
59
|
x: number;
|
|
87
60
|
}
|
|
88
61
|
export interface MemberDiagram {
|
|
89
|
-
memberId:
|
|
62
|
+
memberId: FeaId;
|
|
90
63
|
length: number;
|
|
91
64
|
stations: MemberStation[];
|
|
92
65
|
extremes: Record<StationComponent, {
|
|
@@ -95,130 +68,22 @@ export interface MemberDiagram {
|
|
|
95
68
|
}>;
|
|
96
69
|
}
|
|
97
70
|
/**
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
* stresses along local 1 (2), positive when it puts the −3 face in tension (sagging with local
|
|
101
|
-
* 3 up), as M3 of a member; V13 = −(∂M11/∂x₁ + ∂M12/∂x₂), as V2 = −dM3/dx. Top is the +3 face.
|
|
71
|
+
* A model node lying on a member between its ends, which `analyze` connected to the member
|
|
72
|
+
* (see `Member.connectIntermediateNodes`).
|
|
102
73
|
*/
|
|
103
|
-
export interface
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
F12: number;
|
|
108
|
-
M11: number;
|
|
109
|
-
M22: number;
|
|
110
|
-
M12: number;
|
|
111
|
-
V13: number;
|
|
112
|
-
V23: number;
|
|
113
|
-
S11Top: number;
|
|
114
|
-
S22Top: number;
|
|
115
|
-
S12Top: number;
|
|
116
|
-
S11Bot: number;
|
|
117
|
-
S22Bot: number;
|
|
118
|
-
S12Bot: number;
|
|
74
|
+
export interface MemberIntermediateNode {
|
|
75
|
+
memberId: FeaId;
|
|
76
|
+
nodeId: FeaId;
|
|
77
|
+
x: number;
|
|
119
78
|
}
|
|
120
|
-
/** A force or stress component of `ShellCornerForces`. */
|
|
121
|
-
export type ShellForceComponent = Exclude<keyof ShellCornerForces, "nodeId">;
|
|
122
79
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
80
|
+
* A model node close to a member but not on it, so not connected to it: within
|
|
81
|
+
* `NODE_NEAR_MEMBER_RATIO` of the member's length (at most `NODE_NEAR_MEMBER_MAX_DISTANCE`) of
|
|
82
|
+
* its axis, between its ends. Probably meant to be on the member.
|
|
126
83
|
*/
|
|
127
|
-
export interface
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
corners: ShellCornerForces[];
|
|
131
|
-
}
|
|
132
|
-
/** The shell elements analysed, and the nodes the engine generated to mesh them. */
|
|
133
|
-
export interface FrameMesh {
|
|
134
|
-
/** Generated nodes, in global coordinates (mm); empty when no area was subdivided. */
|
|
135
|
-
nodes: FrameNode[];
|
|
136
|
-
/** Every shell element, in model order of their areas, with its four corner nodes. */
|
|
137
|
-
shells: {
|
|
138
|
-
id: FrameId;
|
|
139
|
-
areaId: FrameId;
|
|
140
|
-
nodeIds: FrameId[];
|
|
141
|
-
}[];
|
|
142
|
-
}
|
|
143
|
-
/** Max or min of a result across combinations, with the combination that produces it. */
|
|
144
|
-
export interface GoverningValue {
|
|
145
|
-
value: number;
|
|
146
|
-
combinationId: string;
|
|
147
|
-
}
|
|
148
|
-
export interface GoverningExtremeValue extends GoverningValue {
|
|
84
|
+
export interface MemberNearMissNode {
|
|
85
|
+
memberId: FeaId;
|
|
86
|
+
nodeId: FeaId;
|
|
149
87
|
x: number;
|
|
150
|
-
|
|
151
|
-
export type Bound<T> = {
|
|
152
|
-
max: T;
|
|
153
|
-
min: T;
|
|
154
|
-
};
|
|
155
|
-
/** Results of one load case or one load combination. */
|
|
156
|
-
export interface FrameCaseResult {
|
|
157
|
-
id: string;
|
|
158
|
-
kind: "case" | "combination";
|
|
159
|
-
name?: string;
|
|
160
|
-
type?: LoadCaseType;
|
|
161
|
-
nodalDisplacements: NodalDisplacement[];
|
|
162
|
-
reactions: NodalReaction[];
|
|
163
|
-
memberEndForces: MemberEndForces[];
|
|
164
|
-
/** One entry per member with any released or spring end DOF, in model order. */
|
|
165
|
-
releaseDeformations: MemberReleaseDeformations[];
|
|
166
|
-
memberDiagrams: MemberDiagram[];
|
|
167
|
-
/** One entry per shell area, in model order. */
|
|
168
|
-
shellForces: ShellElementForces[];
|
|
169
|
-
equilibriumResidual: {
|
|
170
|
-
force: number;
|
|
171
|
-
moment: number;
|
|
172
|
-
};
|
|
173
|
-
warnings: Warnings;
|
|
174
|
-
}
|
|
175
|
-
/** Max/min of every result across a set of combinations, with the governing combination. */
|
|
176
|
-
export interface FrameEnvelope {
|
|
177
|
-
combinationIds: string[];
|
|
178
|
-
nodalDisplacements: ({
|
|
179
|
-
nodeId: FrameId;
|
|
180
|
-
} & Record<"ux" | "uy" | "uz" | "rx" | "ry" | "rz", Bound<GoverningValue>>)[];
|
|
181
|
-
reactions: ({
|
|
182
|
-
nodeId: FrameId;
|
|
183
|
-
} & Record<"fx" | "fy" | "fz" | "mx" | "my" | "mz", Bound<GoverningValue>>)[];
|
|
184
|
-
members: {
|
|
185
|
-
memberId: FrameId;
|
|
186
|
-
extremes: Record<StationComponent, Bound<GoverningExtremeValue>>;
|
|
187
|
-
}[];
|
|
188
|
-
shells: {
|
|
189
|
-
shellId: FrameId;
|
|
190
|
-
corners: ({
|
|
191
|
-
nodeId: FrameId;
|
|
192
|
-
} & Record<ShellForceComponent, Bound<GoverningValue>>)[];
|
|
193
|
-
}[];
|
|
194
|
-
}
|
|
195
|
-
export interface FrameResult {
|
|
196
|
-
cases: Record<string, FrameCaseResult>;
|
|
197
|
-
combinations: Record<string, FrameCaseResult>;
|
|
198
|
-
/** Envelope over all combinations; absent when the model has none. */
|
|
199
|
-
envelope?: FrameEnvelope;
|
|
200
|
-
/** The shell mesh; absent when the model has no shells. */
|
|
201
|
-
mesh?: FrameMesh;
|
|
202
|
-
calculationDetails: {
|
|
203
|
-
nodeCount: number;
|
|
204
|
-
memberCount: number;
|
|
205
|
-
shellCount: number;
|
|
206
|
-
dofCount: number;
|
|
207
|
-
freeDofCount: number;
|
|
208
|
-
profileSize: number;
|
|
209
|
-
loadCaseCount: number;
|
|
210
|
-
combinationCount: number;
|
|
211
|
-
/** Joint rotations held because every member there releases them (e.g. truss joints). */
|
|
212
|
-
autoRestrainedDofs: AutoRestrainedDof[];
|
|
213
|
-
};
|
|
214
|
-
units: {
|
|
215
|
-
force: "kN";
|
|
216
|
-
moment: "kN·m";
|
|
217
|
-
length: "mm";
|
|
218
|
-
rotation: "rad";
|
|
219
|
-
forcePerLength: "kN/m";
|
|
220
|
-
momentPerLength: "kN·m/m";
|
|
221
|
-
stress: "MPa";
|
|
222
|
-
};
|
|
223
|
-
warnings: Warnings;
|
|
88
|
+
distance: number;
|
|
224
89
|
}
|