@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.
Files changed (324) hide show
  1. package/CHANGELOG.md +48 -1
  2. package/README.md +293 -131
  3. package/dist/core/constants/frame.constant.d.ts +8 -0
  4. package/dist/core/constants/frame.constant.js +9 -1
  5. package/dist/core/constants/frame.constant.js.map +1 -1
  6. package/dist/core/errors/fea.error.d.ts +47 -0
  7. package/dist/{esm/core/errors/frame-analysis.error.js → core/errors/fea.error.js} +14 -5
  8. package/dist/core/errors/fea.error.js.map +1 -0
  9. package/dist/core/index.d.ts +5 -3
  10. package/dist/core/index.js +10 -4
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/esm/core/constants/frame.constant.js +8 -0
  13. package/dist/esm/core/constants/frame.constant.js.map +1 -1
  14. package/dist/{core/errors/frame-analysis.error.js → esm/core/errors/fea.error.js} +10 -9
  15. package/dist/esm/core/errors/fea.error.js.map +1 -0
  16. package/dist/esm/core/index.js +4 -2
  17. package/dist/esm/core/index.js.map +1 -1
  18. package/dist/esm/fea/analysis/index.js +7 -0
  19. package/dist/esm/fea/analysis/index.js.map +1 -0
  20. package/dist/esm/fea/{frame → analysis}/mesh/expand-model.js +30 -41
  21. package/dist/esm/fea/analysis/mesh/expand-model.js.map +1 -0
  22. package/dist/esm/fea/analysis/mesh/member-connectivity.js +66 -0
  23. package/dist/esm/fea/analysis/mesh/member-connectivity.js.map +1 -0
  24. package/dist/esm/fea/{frame → analysis}/post/demand-envelope.js +4 -4
  25. package/dist/esm/fea/analysis/post/demand-envelope.js.map +1 -0
  26. package/dist/esm/fea/analysis/post/envelope.js.map +1 -0
  27. package/dist/esm/fea/{frame → analysis}/post/present-state.js +6 -6
  28. package/dist/esm/fea/analysis/post/present-state.js.map +1 -0
  29. package/dist/esm/fea/{frame/solver/frame-system.js → analysis/solver/analysis-system.js} +17 -90
  30. package/dist/esm/fea/analysis/solver/analysis-system.js.map +1 -0
  31. package/dist/esm/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +28 -18
  32. package/dist/esm/fea/analysis/solver/analyze.js.map +1 -0
  33. package/dist/esm/fea/{frame → analysis}/solver/combinations.js +8 -8
  34. package/dist/esm/fea/analysis/solver/combinations.js.map +1 -0
  35. package/dist/esm/fea/analysis/solver/distribute-area-loads.js +25 -0
  36. package/dist/esm/fea/analysis/solver/distribute-area-loads.js.map +1 -0
  37. package/dist/esm/fea/analysis/solver/load-case-solver.js +103 -0
  38. package/dist/esm/fea/analysis/solver/load-case-solver.js.map +1 -0
  39. package/dist/esm/fea/analysis/types/model.type.js +2 -0
  40. package/dist/esm/fea/analysis/types/model.type.js.map +1 -0
  41. package/dist/esm/fea/analysis/types/results.type.js +2 -0
  42. package/dist/esm/fea/analysis/types/results.type.js.map +1 -0
  43. package/dist/esm/fea/analysis/validation/validate-model.js +263 -0
  44. package/dist/esm/fea/analysis/validation/validate-model.js.map +1 -0
  45. package/dist/esm/fea/deprecated.js +9 -0
  46. package/dist/esm/fea/deprecated.js.map +1 -0
  47. package/dist/esm/fea/frame/area/{distribute-area-loads.js → area-member-loads.js} +7 -28
  48. package/dist/esm/fea/frame/area/area-member-loads.js.map +1 -0
  49. package/dist/esm/fea/frame/area/edge-members.js.map +1 -1
  50. package/dist/esm/fea/frame/elements/end-releases.js +2 -6
  51. package/dist/esm/fea/frame/elements/end-releases.js.map +1 -1
  52. package/dist/esm/fea/frame/elements/fixed-end-forces.js +5 -5
  53. package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -1
  54. package/dist/esm/fea/frame/elements/static-condensation.js +3 -3
  55. package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -1
  56. package/dist/esm/fea/frame/index.js +1 -4
  57. package/dist/esm/fea/frame/index.js.map +1 -1
  58. package/dist/esm/fea/frame/post/member-diagram.js +4 -4
  59. package/dist/esm/fea/frame/post/member-diagram.js.map +1 -1
  60. package/dist/esm/fea/frame/solver/{global-assembly.js → member-assembly.js} +2 -10
  61. package/dist/esm/fea/frame/solver/member-assembly.js.map +1 -0
  62. package/dist/esm/fea/frame/solver/member-loads.js +141 -0
  63. package/dist/esm/fea/frame/solver/member-loads.js.map +1 -0
  64. package/dist/esm/fea/frame/solver/nodes-along-members.js +73 -0
  65. package/dist/esm/fea/frame/solver/nodes-along-members.js.map +1 -0
  66. package/dist/esm/fea/frame/solver/system-member.js +66 -0
  67. package/dist/esm/fea/frame/solver/system-member.js.map +1 -0
  68. package/dist/esm/fea/frame/transformation/coordinate-transform.js +3 -3
  69. package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -1
  70. package/dist/esm/fea/frame/validation/validate-members.js +164 -0
  71. package/dist/esm/fea/frame/validation/validate-members.js.map +1 -0
  72. package/dist/esm/fea/frame/validation/validate-null-areas.js +88 -0
  73. package/dist/esm/fea/frame/validation/validate-null-areas.js.map +1 -0
  74. package/dist/esm/fea/index.js +4 -1
  75. package/dist/esm/fea/index.js.map +1 -1
  76. package/dist/esm/fea/shared/index.js +2 -0
  77. package/dist/esm/fea/shared/index.js.map +1 -0
  78. package/dist/esm/fea/shared/solver/auto-restraint.js.map +1 -0
  79. package/dist/esm/fea/{frame → shared}/solver/boundary-conditions.js +5 -1
  80. package/dist/esm/fea/shared/solver/boundary-conditions.js.map +1 -0
  81. package/dist/esm/fea/shared/solver/global-assembly.js +10 -0
  82. package/dist/esm/fea/shared/solver/global-assembly.js.map +1 -0
  83. package/dist/esm/fea/shared/types/model.type.js +2 -0
  84. package/dist/esm/fea/shared/types/model.type.js.map +1 -0
  85. package/dist/esm/fea/shared/validation/issues.js +32 -0
  86. package/dist/esm/fea/shared/validation/issues.js.map +1 -0
  87. package/dist/esm/fea/{frame/elements/shell → shell/elements}/dkq-plate.js +1 -1
  88. package/dist/esm/fea/shell/elements/dkq-plate.js.map +1 -0
  89. package/dist/esm/fea/{frame/elements/shell → shell/elements}/flat-shell.js +1 -1
  90. package/dist/esm/fea/shell/elements/flat-shell.js.map +1 -0
  91. package/dist/esm/fea/{frame/elements/shell → shell/elements}/membrane-quad.js +2 -2
  92. package/dist/esm/fea/shell/elements/membrane-quad.js.map +1 -0
  93. package/dist/esm/fea/shell/elements/quad-geometry.js.map +1 -0
  94. package/dist/esm/fea/shell/elements/rigidity.js.map +1 -0
  95. package/dist/esm/fea/{frame/elements/shell → shell/elements}/shell-axes.js +1 -1
  96. package/dist/esm/fea/shell/elements/shell-axes.js.map +1 -0
  97. package/dist/esm/fea/shell/index.js +2 -0
  98. package/dist/esm/fea/shell/index.js.map +1 -0
  99. package/dist/esm/fea/{frame → shell}/mesh/mesh-shells.js +1 -1
  100. package/dist/esm/fea/shell/mesh/mesh-shells.js.map +1 -0
  101. package/dist/esm/fea/{frame → shell}/post/shell-forces.js +4 -4
  102. package/dist/esm/fea/{frame → shell}/post/shell-forces.js.map +1 -1
  103. package/dist/esm/fea/shell/solver/shell-loads.js +53 -0
  104. package/dist/esm/fea/shell/solver/shell-loads.js.map +1 -0
  105. package/dist/esm/fea/shell/solver/system-shell.js +37 -0
  106. package/dist/esm/fea/shell/solver/system-shell.js.map +1 -0
  107. package/dist/esm/fea/shell/types/model.type.js +2 -0
  108. package/dist/esm/fea/shell/types/model.type.js.map +1 -0
  109. package/dist/esm/fea/shell/types/results.type.js +2 -0
  110. package/dist/esm/fea/shell/types/results.type.js.map +1 -0
  111. package/dist/esm/fea/shell/validation/validate-shells.js +98 -0
  112. package/dist/esm/fea/shell/validation/validate-shells.js.map +1 -0
  113. package/dist/esm/index.js +5 -3
  114. package/dist/esm/index.js.map +1 -1
  115. package/dist/fea/analysis/index.d.ts +10 -0
  116. package/dist/fea/analysis/index.js +16 -0
  117. package/dist/fea/analysis/index.js.map +1 -0
  118. package/dist/fea/analysis/mesh/expand-model.d.ts +34 -0
  119. package/dist/fea/{frame → analysis}/mesh/expand-model.js +30 -41
  120. package/dist/fea/analysis/mesh/expand-model.js.map +1 -0
  121. package/dist/fea/analysis/mesh/member-connectivity.d.ts +43 -0
  122. package/dist/fea/analysis/mesh/member-connectivity.js +71 -0
  123. package/dist/fea/analysis/mesh/member-connectivity.js.map +1 -0
  124. package/dist/fea/{frame → analysis}/post/demand-envelope.d.ts +5 -5
  125. package/dist/fea/{frame → analysis}/post/demand-envelope.js +4 -4
  126. package/dist/fea/analysis/post/demand-envelope.js.map +1 -0
  127. package/dist/fea/{frame → analysis}/post/envelope.d.ts +2 -2
  128. package/dist/fea/analysis/post/envelope.js.map +1 -0
  129. package/dist/fea/analysis/post/present-state.d.ts +21 -0
  130. package/dist/fea/{frame → analysis}/post/present-state.js +7 -7
  131. package/dist/fea/analysis/post/present-state.js.map +1 -0
  132. package/dist/fea/analysis/solver/analysis-system.d.ts +46 -0
  133. package/dist/fea/{frame/solver/frame-system.js → analysis/solver/analysis-system.js} +22 -95
  134. package/dist/fea/analysis/solver/analysis-system.js.map +1 -0
  135. package/dist/fea/{frame/solver/analyze-frame.d.ts → analysis/solver/analyze.d.ts} +29 -20
  136. package/dist/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +33 -23
  137. package/dist/fea/analysis/solver/analyze.js.map +1 -0
  138. package/dist/fea/{frame → analysis}/solver/combinations.d.ts +1 -1
  139. package/dist/fea/{frame → analysis}/solver/combinations.js +8 -8
  140. package/dist/fea/analysis/solver/combinations.js.map +1 -0
  141. package/dist/fea/{frame/area → analysis/solver}/distribute-area-loads.d.ts +6 -15
  142. package/dist/fea/analysis/solver/distribute-area-loads.js +29 -0
  143. package/dist/fea/analysis/solver/distribute-area-loads.js.map +1 -0
  144. package/dist/fea/{frame → analysis}/solver/load-case-solver.d.ts +9 -13
  145. package/dist/fea/analysis/solver/load-case-solver.js +108 -0
  146. package/dist/fea/analysis/solver/load-case-solver.js.map +1 -0
  147. package/dist/fea/analysis/types/model.type.d.ts +80 -0
  148. package/dist/fea/analysis/types/model.type.js +3 -0
  149. package/dist/fea/analysis/types/model.type.js.map +1 -0
  150. package/dist/fea/analysis/types/results.type.d.ts +123 -0
  151. package/dist/fea/analysis/types/results.type.js +3 -0
  152. package/dist/fea/analysis/types/results.type.js.map +1 -0
  153. package/dist/fea/analysis/validation/validate-model.d.ts +12 -0
  154. package/dist/fea/analysis/validation/validate-model.js +267 -0
  155. package/dist/fea/analysis/validation/validate-model.js.map +1 -0
  156. package/dist/fea/deprecated.d.ts +27 -0
  157. package/dist/fea/deprecated.js +12 -0
  158. package/dist/fea/deprecated.js.map +1 -0
  159. package/dist/fea/frame/area/area-member-loads.d.ts +19 -0
  160. package/dist/fea/frame/area/{distribute-area-loads.js → area-member-loads.js} +8 -30
  161. package/dist/fea/frame/area/area-member-loads.js.map +1 -0
  162. package/dist/fea/frame/area/edge-members.d.ts +5 -4
  163. package/dist/fea/frame/area/edge-members.js.map +1 -1
  164. package/dist/fea/frame/elements/end-releases.d.ts +1 -6
  165. package/dist/fea/frame/elements/end-releases.js +4 -8
  166. package/dist/fea/frame/elements/end-releases.js.map +1 -1
  167. package/dist/fea/frame/elements/fixed-end-forces.d.ts +1 -1
  168. package/dist/fea/frame/elements/fixed-end-forces.js +5 -5
  169. package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -1
  170. package/dist/fea/frame/elements/static-condensation.d.ts +1 -1
  171. package/dist/fea/frame/elements/static-condensation.js +3 -3
  172. package/dist/fea/frame/elements/static-condensation.js.map +1 -1
  173. package/dist/fea/frame/index.d.ts +2 -8
  174. package/dist/fea/frame/index.js +2 -10
  175. package/dist/fea/frame/index.js.map +1 -1
  176. package/dist/fea/frame/post/member-diagram.d.ts +8 -8
  177. package/dist/fea/frame/post/member-diagram.js +4 -4
  178. package/dist/fea/frame/post/member-diagram.js.map +1 -1
  179. package/dist/fea/frame/solver/{global-assembly.d.ts → member-assembly.d.ts} +0 -11
  180. package/dist/fea/frame/solver/{global-assembly.js → member-assembly.js} +4 -13
  181. package/dist/fea/frame/solver/member-assembly.js.map +1 -0
  182. package/dist/fea/frame/solver/member-loads.d.ts +21 -0
  183. package/dist/fea/frame/solver/member-loads.js +146 -0
  184. package/dist/fea/frame/solver/member-loads.js.map +1 -0
  185. package/dist/fea/frame/solver/nodes-along-members.d.ts +31 -0
  186. package/dist/fea/frame/solver/nodes-along-members.js +77 -0
  187. package/dist/fea/frame/solver/nodes-along-members.js.map +1 -0
  188. package/dist/fea/frame/solver/system-member.d.ts +51 -0
  189. package/dist/fea/frame/solver/system-member.js +70 -0
  190. package/dist/fea/frame/solver/system-member.js.map +1 -0
  191. package/dist/fea/frame/transformation/coordinate-transform.d.ts +1 -1
  192. package/dist/fea/frame/transformation/coordinate-transform.js +3 -3
  193. package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -1
  194. package/dist/fea/frame/types/model.type.d.ts +16 -175
  195. package/dist/fea/frame/types/results.type.d.ts +17 -152
  196. package/dist/fea/frame/validation/validate-members.d.ts +30 -0
  197. package/dist/fea/frame/validation/validate-members.js +169 -0
  198. package/dist/fea/frame/validation/validate-members.js.map +1 -0
  199. package/dist/fea/frame/validation/validate-null-areas.d.ts +38 -0
  200. package/dist/fea/frame/validation/validate-null-areas.js +93 -0
  201. package/dist/fea/frame/validation/validate-null-areas.js.map +1 -0
  202. package/dist/fea/index.d.ts +4 -0
  203. package/dist/fea/index.js +4 -1
  204. package/dist/fea/index.js.map +1 -1
  205. package/dist/fea/shared/index.d.ts +1 -0
  206. package/dist/fea/shared/index.js +3 -0
  207. package/dist/fea/shared/index.js.map +1 -0
  208. package/dist/fea/shared/solver/auto-restraint.js.map +1 -0
  209. package/dist/fea/{frame → shared}/solver/boundary-conditions.d.ts +5 -0
  210. package/dist/fea/{frame → shared}/solver/boundary-conditions.js +7 -3
  211. package/dist/fea/shared/solver/boundary-conditions.js.map +1 -0
  212. package/dist/fea/shared/solver/global-assembly.d.ts +12 -0
  213. package/dist/fea/shared/solver/global-assembly.js +14 -0
  214. package/dist/fea/shared/solver/global-assembly.js.map +1 -0
  215. package/dist/fea/shared/types/model.type.d.ts +34 -0
  216. package/dist/fea/shared/types/model.type.js +3 -0
  217. package/dist/fea/shared/types/model.type.js.map +1 -0
  218. package/dist/fea/shared/validation/issues.d.ts +9 -0
  219. package/dist/fea/shared/validation/issues.js +38 -0
  220. package/dist/fea/shared/validation/issues.js.map +1 -0
  221. package/dist/fea/{frame/elements/shell → shell/elements}/dkq-plate.d.ts +1 -1
  222. package/dist/fea/{frame/elements/shell → shell/elements}/dkq-plate.js +1 -1
  223. package/dist/fea/shell/elements/dkq-plate.js.map +1 -0
  224. package/dist/fea/{frame/elements/shell → shell/elements}/flat-shell.d.ts +1 -1
  225. package/dist/fea/{frame/elements/shell → shell/elements}/flat-shell.js +1 -1
  226. package/dist/fea/shell/elements/flat-shell.js.map +1 -0
  227. package/dist/fea/{frame/elements/shell → shell/elements}/membrane-quad.d.ts +1 -1
  228. package/dist/fea/{frame/elements/shell → shell/elements}/membrane-quad.js +2 -2
  229. package/dist/fea/shell/elements/membrane-quad.js.map +1 -0
  230. package/dist/fea/shell/elements/quad-geometry.js.map +1 -0
  231. package/dist/fea/{frame/elements/shell → shell/elements}/rigidity.d.ts +1 -1
  232. package/dist/fea/shell/elements/rigidity.js.map +1 -0
  233. package/dist/fea/{frame/elements/shell → shell/elements}/shell-axes.d.ts +1 -1
  234. package/dist/fea/{frame/elements/shell → shell/elements}/shell-axes.js +1 -1
  235. package/dist/fea/shell/elements/shell-axes.js.map +1 -0
  236. package/dist/fea/shell/index.d.ts +2 -0
  237. package/dist/fea/shell/index.js +3 -0
  238. package/dist/fea/shell/index.js.map +1 -0
  239. package/dist/fea/{frame → shell}/mesh/mesh-shells.d.ts +7 -6
  240. package/dist/fea/{frame → shell}/mesh/mesh-shells.js +1 -1
  241. package/dist/fea/shell/mesh/mesh-shells.js.map +1 -0
  242. package/dist/fea/{frame → shell}/post/shell-forces.d.ts +1 -1
  243. package/dist/fea/{frame → shell}/post/shell-forces.js +4 -4
  244. package/dist/fea/{frame → shell}/post/shell-forces.js.map +1 -1
  245. package/dist/fea/shell/solver/shell-loads.d.ts +17 -0
  246. package/dist/fea/shell/solver/shell-loads.js +57 -0
  247. package/dist/fea/shell/solver/shell-loads.js.map +1 -0
  248. package/dist/fea/shell/solver/system-shell.d.ts +29 -0
  249. package/dist/fea/shell/solver/system-shell.js +41 -0
  250. package/dist/fea/shell/solver/system-shell.js.map +1 -0
  251. package/dist/fea/shell/types/model.type.d.ts +57 -0
  252. package/dist/fea/shell/types/model.type.js +3 -0
  253. package/dist/fea/shell/types/model.type.js.map +1 -0
  254. package/dist/fea/shell/types/results.type.d.ts +47 -0
  255. package/dist/fea/shell/types/results.type.js +3 -0
  256. package/dist/fea/shell/types/results.type.js.map +1 -0
  257. package/dist/fea/shell/validation/validate-shells.d.ts +21 -0
  258. package/dist/fea/shell/validation/validate-shells.js +103 -0
  259. package/dist/fea/shell/validation/validate-shells.js.map +1 -0
  260. package/dist/index.d.ts +6 -4
  261. package/dist/index.js +16 -6
  262. package/dist/index.js.map +1 -1
  263. package/package.json +2 -2
  264. package/dist/core/errors/frame-analysis.error.d.ts +0 -37
  265. package/dist/core/errors/frame-analysis.error.js.map +0 -1
  266. package/dist/esm/core/errors/frame-analysis.error.js.map +0 -1
  267. package/dist/esm/fea/frame/area/distribute-area-loads.js.map +0 -1
  268. package/dist/esm/fea/frame/elements/shell/dkq-plate.js.map +0 -1
  269. package/dist/esm/fea/frame/elements/shell/flat-shell.js.map +0 -1
  270. package/dist/esm/fea/frame/elements/shell/membrane-quad.js.map +0 -1
  271. package/dist/esm/fea/frame/elements/shell/quad-geometry.js.map +0 -1
  272. package/dist/esm/fea/frame/elements/shell/rigidity.js.map +0 -1
  273. package/dist/esm/fea/frame/elements/shell/shell-axes.js.map +0 -1
  274. package/dist/esm/fea/frame/mesh/expand-model.js.map +0 -1
  275. package/dist/esm/fea/frame/mesh/mesh-shells.js.map +0 -1
  276. package/dist/esm/fea/frame/post/demand-envelope.js.map +0 -1
  277. package/dist/esm/fea/frame/post/envelope.js.map +0 -1
  278. package/dist/esm/fea/frame/post/present-state.js.map +0 -1
  279. package/dist/esm/fea/frame/solver/analyze-frame.js.map +0 -1
  280. package/dist/esm/fea/frame/solver/auto-restraint.js.map +0 -1
  281. package/dist/esm/fea/frame/solver/boundary-conditions.js.map +0 -1
  282. package/dist/esm/fea/frame/solver/combinations.js.map +0 -1
  283. package/dist/esm/fea/frame/solver/frame-system.js.map +0 -1
  284. package/dist/esm/fea/frame/solver/global-assembly.js.map +0 -1
  285. package/dist/esm/fea/frame/solver/load-case-solver.js +0 -255
  286. package/dist/esm/fea/frame/solver/load-case-solver.js.map +0 -1
  287. package/dist/esm/fea/frame/validation/validate-model.js +0 -529
  288. package/dist/esm/fea/frame/validation/validate-model.js.map +0 -1
  289. package/dist/fea/frame/area/distribute-area-loads.js.map +0 -1
  290. package/dist/fea/frame/elements/shell/dkq-plate.js.map +0 -1
  291. package/dist/fea/frame/elements/shell/flat-shell.js.map +0 -1
  292. package/dist/fea/frame/elements/shell/membrane-quad.js.map +0 -1
  293. package/dist/fea/frame/elements/shell/quad-geometry.js.map +0 -1
  294. package/dist/fea/frame/elements/shell/rigidity.js.map +0 -1
  295. package/dist/fea/frame/elements/shell/shell-axes.js.map +0 -1
  296. package/dist/fea/frame/mesh/expand-model.d.ts +0 -29
  297. package/dist/fea/frame/mesh/expand-model.js.map +0 -1
  298. package/dist/fea/frame/mesh/mesh-shells.js.map +0 -1
  299. package/dist/fea/frame/post/demand-envelope.js.map +0 -1
  300. package/dist/fea/frame/post/envelope.js.map +0 -1
  301. package/dist/fea/frame/post/present-state.d.ts +0 -20
  302. package/dist/fea/frame/post/present-state.js.map +0 -1
  303. package/dist/fea/frame/solver/analyze-frame.js.map +0 -1
  304. package/dist/fea/frame/solver/auto-restraint.js.map +0 -1
  305. package/dist/fea/frame/solver/boundary-conditions.js.map +0 -1
  306. package/dist/fea/frame/solver/combinations.js.map +0 -1
  307. package/dist/fea/frame/solver/frame-system.d.ts +0 -89
  308. package/dist/fea/frame/solver/frame-system.js.map +0 -1
  309. package/dist/fea/frame/solver/global-assembly.js.map +0 -1
  310. package/dist/fea/frame/solver/load-case-solver.js +0 -260
  311. package/dist/fea/frame/solver/load-case-solver.js.map +0 -1
  312. package/dist/fea/frame/validation/validate-model.d.ts +0 -19
  313. package/dist/fea/frame/validation/validate-model.js +0 -535
  314. package/dist/fea/frame/validation/validate-model.js.map +0 -1
  315. /package/dist/esm/fea/{frame → analysis}/post/envelope.js +0 -0
  316. /package/dist/esm/fea/{frame → shared}/solver/auto-restraint.js +0 -0
  317. /package/dist/esm/fea/{frame/elements/shell → shell/elements}/quad-geometry.js +0 -0
  318. /package/dist/esm/fea/{frame/elements/shell → shell/elements}/rigidity.js +0 -0
  319. /package/dist/fea/{frame → analysis}/post/envelope.js +0 -0
  320. /package/dist/fea/{frame → shared}/solver/auto-restraint.d.ts +0 -0
  321. /package/dist/fea/{frame → shared}/solver/auto-restraint.js +0 -0
  322. /package/dist/fea/{frame/elements/shell → shell/elements}/quad-geometry.d.ts +0 -0
  323. /package/dist/fea/{frame/elements/shell → shell/elements}/quad-geometry.js +0 -0
  324. /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 {FrameAnalysisError} 301 if the nodes coincide
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 frame_analysis_error_1 = require("../../../core/errors/frame-analysis.error");
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 {FrameAnalysisError} 301 if the nodes coincide
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 frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.ZERO_LENGTH_MEMBER);
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":"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"}
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
- export type FrameId = string | number;
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: FrameId;
52
- startNodeId: FrameId;
53
- endNodeId: FrameId;
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
- export interface NodalLoad {
62
- loadCase: string;
63
- nodeId: FrameId;
64
- fx?: number;
65
- fy?: number;
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: FrameId;
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: FrameId;
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: FrameId;
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: FrameId;
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: FrameId;
141
- nodeIds: FrameId[];
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 { Warnings } from "../../../core/types/output-message.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: FrameId;
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: FrameId;
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: FrameId;
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
- * Forces per unit width and face stresses at one corner of a shell element, in the shell's
99
- * local axes 1, 2, 3. Membrane forces are positive in tension. M11 (M22) is the moment that
100
- * stresses along local 1 (2), positive when it puts the −3 face in tension (sagging with local
101
- * 3 up), as M3 of a member; V13 = −(∂M11/∂x₁ + ∂M12/∂x₂), as V2 = −dM3/dx. Top is the +3 face.
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 ShellCornerForces {
104
- nodeId: FrameId;
105
- F11: number;
106
- F22: number;
107
- F12: number;
108
- M11: number;
109
- M22: number;
110
- M12: number;
111
- V13: number;
112
- V23: number;
113
- S11Top: number;
114
- S22Top: number;
115
- S12Top: number;
116
- S11Bot: number;
117
- S22Bot: number;
118
- S12Bot: number;
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
- * Forces of one shell element at its four corners, in its node order. `shellId` is the shell
124
- * area's id when the area is one element, and `"<areaId>:<i>,<j>"` for the elements the engine
125
- * generated when it meshed the area (see `FrameResult.mesh`).
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 ShellElementForces {
128
- shellId: FrameId;
129
- areaId: FrameId;
130
- corners: ShellCornerForces[];
131
- }
132
- /** The shell elements analysed, and the nodes the engine generated to mesh them. */
133
- export interface FrameMesh {
134
- /** Generated nodes, in global coordinates (mm); empty when no area was subdivided. */
135
- nodes: FrameNode[];
136
- /** Every shell element, in model order of their areas, with its four corner nodes. */
137
- shells: {
138
- id: FrameId;
139
- areaId: FrameId;
140
- nodeIds: FrameId[];
141
- }[];
142
- }
143
- /** Max or min of a result across combinations, with the combination that produces it. */
144
- export interface GoverningValue {
145
- value: number;
146
- combinationId: string;
147
- }
148
- export interface GoverningExtremeValue extends GoverningValue {
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
  }