@theerapat-s28/ts-structural-eng-tools 3.0.0 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. package/CHANGELOG.md +85 -1
  2. package/README.md +312 -134
  3. package/dist/core/errors/fea.error.d.ts +47 -0
  4. package/dist/{esm/core/errors/frame-analysis.error.js → core/errors/fea.error.js} +14 -5
  5. package/dist/core/errors/fea.error.js.map +1 -0
  6. package/dist/core/index.d.ts +4 -2
  7. package/dist/core/index.js +8 -4
  8. package/dist/core/index.js.map +1 -1
  9. package/dist/{core/errors/frame-analysis.error.js → esm/core/errors/fea.error.js} +10 -9
  10. package/dist/esm/core/errors/fea.error.js.map +1 -0
  11. package/dist/esm/core/index.js +3 -1
  12. package/dist/esm/core/index.js.map +1 -1
  13. package/dist/esm/fea/analysis/index.js +6 -0
  14. package/dist/esm/fea/analysis/index.js.map +1 -0
  15. package/dist/esm/fea/{frame → analysis}/mesh/expand-model.js +12 -6
  16. package/dist/esm/fea/analysis/mesh/expand-model.js.map +1 -0
  17. package/dist/esm/fea/{frame → analysis}/post/demand-envelope.js +4 -4
  18. package/dist/esm/fea/analysis/post/demand-envelope.js.map +1 -0
  19. package/dist/esm/fea/analysis/post/envelope.js.map +1 -0
  20. package/dist/esm/fea/{frame → analysis}/post/present-state.js +4 -4
  21. package/dist/esm/fea/analysis/post/present-state.js.map +1 -0
  22. package/dist/esm/fea/{frame/solver/frame-system.js → analysis/solver/analysis-system.js} +17 -90
  23. package/dist/esm/fea/analysis/solver/analysis-system.js.map +1 -0
  24. package/dist/esm/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +20 -18
  25. package/dist/esm/fea/analysis/solver/analyze.js.map +1 -0
  26. package/dist/esm/fea/{frame → analysis}/solver/combinations.js +8 -8
  27. package/dist/esm/fea/analysis/solver/combinations.js.map +1 -0
  28. package/dist/esm/fea/analysis/solver/distribute-area-loads.js +25 -0
  29. package/dist/esm/fea/analysis/solver/distribute-area-loads.js.map +1 -0
  30. package/dist/esm/fea/analysis/solver/load-case-solver.js +103 -0
  31. package/dist/esm/fea/analysis/solver/load-case-solver.js.map +1 -0
  32. package/dist/esm/fea/analysis/types/model.type.js +2 -0
  33. package/dist/esm/fea/analysis/types/model.type.js.map +1 -0
  34. package/dist/esm/fea/analysis/types/results.type.js +2 -0
  35. package/dist/esm/fea/analysis/types/results.type.js.map +1 -0
  36. package/dist/esm/fea/analysis/validation/validate-model.js +263 -0
  37. package/dist/esm/fea/analysis/validation/validate-model.js.map +1 -0
  38. package/dist/esm/fea/deprecated.js +9 -0
  39. package/dist/esm/fea/deprecated.js.map +1 -0
  40. package/dist/esm/fea/frame/area/{distribute-area-loads.js → area-member-loads.js} +7 -28
  41. package/dist/esm/fea/frame/area/area-member-loads.js.map +1 -0
  42. package/dist/esm/fea/frame/area/edge-members.js.map +1 -1
  43. package/dist/esm/fea/frame/elements/end-releases.js +2 -6
  44. package/dist/esm/fea/frame/elements/end-releases.js.map +1 -1
  45. package/dist/esm/fea/frame/elements/fixed-end-forces.js +5 -5
  46. package/dist/esm/fea/frame/elements/fixed-end-forces.js.map +1 -1
  47. package/dist/esm/fea/frame/elements/static-condensation.js +3 -3
  48. package/dist/esm/fea/frame/elements/static-condensation.js.map +1 -1
  49. package/dist/esm/fea/frame/index.js +1 -4
  50. package/dist/esm/fea/frame/index.js.map +1 -1
  51. package/dist/esm/fea/frame/post/member-diagram.js.map +1 -1
  52. package/dist/esm/fea/frame/solver/{global-assembly.js → member-assembly.js} +2 -10
  53. package/dist/esm/fea/frame/solver/member-assembly.js.map +1 -0
  54. package/dist/esm/fea/frame/solver/member-loads.js +141 -0
  55. package/dist/esm/fea/frame/solver/member-loads.js.map +1 -0
  56. package/dist/esm/fea/frame/solver/system-member.js +66 -0
  57. package/dist/esm/fea/frame/solver/system-member.js.map +1 -0
  58. package/dist/esm/fea/frame/transformation/coordinate-transform.js +3 -3
  59. package/dist/esm/fea/frame/transformation/coordinate-transform.js.map +1 -1
  60. package/dist/esm/fea/frame/validation/validate-members.js +160 -0
  61. package/dist/esm/fea/frame/validation/validate-members.js.map +1 -0
  62. package/dist/esm/fea/frame/validation/validate-null-areas.js +88 -0
  63. package/dist/esm/fea/frame/validation/validate-null-areas.js.map +1 -0
  64. package/dist/esm/fea/index.js +4 -1
  65. package/dist/esm/fea/index.js.map +1 -1
  66. package/dist/esm/fea/shared/index.js +2 -0
  67. package/dist/esm/fea/shared/index.js.map +1 -0
  68. package/dist/esm/fea/shared/solver/auto-restraint.js.map +1 -0
  69. package/dist/esm/fea/{frame → shared}/solver/boundary-conditions.js +5 -1
  70. package/dist/esm/fea/shared/solver/boundary-conditions.js.map +1 -0
  71. package/dist/esm/fea/shared/solver/global-assembly.js +10 -0
  72. package/dist/esm/fea/shared/solver/global-assembly.js.map +1 -0
  73. package/dist/esm/fea/shared/types/model.type.js +2 -0
  74. package/dist/esm/fea/shared/types/model.type.js.map +1 -0
  75. package/dist/esm/fea/shared/validation/issues.js +32 -0
  76. package/dist/esm/fea/shared/validation/issues.js.map +1 -0
  77. package/dist/esm/fea/{frame/elements/shell → shell/elements}/dkq-plate.js +1 -1
  78. package/dist/esm/fea/shell/elements/dkq-plate.js.map +1 -0
  79. package/dist/esm/fea/{frame/elements/shell → shell/elements}/flat-shell.js +1 -1
  80. package/dist/esm/fea/shell/elements/flat-shell.js.map +1 -0
  81. package/dist/esm/fea/{frame/elements/shell → shell/elements}/membrane-quad.js +2 -2
  82. package/dist/esm/fea/shell/elements/membrane-quad.js.map +1 -0
  83. package/dist/esm/fea/shell/elements/quad-geometry.js.map +1 -0
  84. package/dist/esm/fea/shell/elements/rigidity.js.map +1 -0
  85. package/dist/esm/fea/{frame/elements/shell → shell/elements}/shell-axes.js +1 -1
  86. package/dist/esm/fea/shell/elements/shell-axes.js.map +1 -0
  87. package/dist/esm/fea/shell/index.js +2 -0
  88. package/dist/esm/fea/shell/index.js.map +1 -0
  89. package/dist/esm/fea/{frame → shell}/mesh/mesh-shells.js +1 -1
  90. package/dist/esm/fea/shell/mesh/mesh-shells.js.map +1 -0
  91. package/dist/esm/fea/{frame → shell}/post/shell-forces.js +4 -4
  92. package/dist/esm/fea/{frame → shell}/post/shell-forces.js.map +1 -1
  93. package/dist/esm/fea/shell/solver/shell-loads.js +53 -0
  94. package/dist/esm/fea/shell/solver/shell-loads.js.map +1 -0
  95. package/dist/esm/fea/shell/solver/system-shell.js +37 -0
  96. package/dist/esm/fea/shell/solver/system-shell.js.map +1 -0
  97. package/dist/esm/fea/shell/types/model.type.js +2 -0
  98. package/dist/esm/fea/shell/types/model.type.js.map +1 -0
  99. package/dist/esm/fea/shell/types/results.type.js +2 -0
  100. package/dist/esm/fea/shell/types/results.type.js.map +1 -0
  101. package/dist/esm/fea/shell/validation/validate-shells.js +98 -0
  102. package/dist/esm/fea/shell/validation/validate-shells.js.map +1 -0
  103. package/dist/esm/index.js +5 -3
  104. package/dist/esm/index.js.map +1 -1
  105. package/dist/fea/analysis/index.d.ts +8 -0
  106. package/dist/fea/analysis/index.js +14 -0
  107. package/dist/fea/analysis/index.js.map +1 -0
  108. package/dist/fea/{frame → analysis}/mesh/expand-model.d.ts +9 -7
  109. package/dist/fea/{frame → analysis}/mesh/expand-model.js +12 -6
  110. package/dist/fea/analysis/mesh/expand-model.js.map +1 -0
  111. package/dist/fea/{frame → analysis}/post/demand-envelope.d.ts +5 -5
  112. package/dist/fea/{frame → analysis}/post/demand-envelope.js +4 -4
  113. package/dist/fea/analysis/post/demand-envelope.js.map +1 -0
  114. package/dist/fea/{frame → analysis}/post/envelope.d.ts +2 -2
  115. package/dist/fea/analysis/post/envelope.js.map +1 -0
  116. package/dist/fea/{frame → analysis}/post/present-state.d.ts +6 -5
  117. package/dist/fea/{frame → analysis}/post/present-state.js +5 -5
  118. package/dist/fea/analysis/post/present-state.js.map +1 -0
  119. package/dist/fea/analysis/solver/analysis-system.d.ts +46 -0
  120. package/dist/fea/{frame/solver/frame-system.js → analysis/solver/analysis-system.js} +22 -95
  121. package/dist/fea/analysis/solver/analysis-system.js.map +1 -0
  122. package/dist/fea/{frame/solver/analyze-frame.d.ts → analysis/solver/analyze.d.ts} +23 -20
  123. package/dist/fea/{frame/solver/analyze-frame.js → analysis/solver/analyze.js} +25 -23
  124. package/dist/fea/analysis/solver/analyze.js.map +1 -0
  125. package/dist/fea/{frame → analysis}/solver/combinations.d.ts +1 -1
  126. package/dist/fea/{frame → analysis}/solver/combinations.js +8 -8
  127. package/dist/fea/analysis/solver/combinations.js.map +1 -0
  128. package/dist/fea/{frame/area → analysis/solver}/distribute-area-loads.d.ts +6 -15
  129. package/dist/fea/analysis/solver/distribute-area-loads.js +29 -0
  130. package/dist/fea/analysis/solver/distribute-area-loads.js.map +1 -0
  131. package/dist/fea/{frame → analysis}/solver/load-case-solver.d.ts +9 -13
  132. package/dist/fea/analysis/solver/load-case-solver.js +108 -0
  133. package/dist/fea/analysis/solver/load-case-solver.js.map +1 -0
  134. package/dist/fea/analysis/types/model.type.d.ts +80 -0
  135. package/dist/fea/analysis/types/model.type.js +3 -0
  136. package/dist/fea/analysis/types/model.type.js.map +1 -0
  137. package/dist/fea/analysis/types/results.type.d.ts +113 -0
  138. package/dist/fea/analysis/types/results.type.js +3 -0
  139. package/dist/fea/analysis/types/results.type.js.map +1 -0
  140. package/dist/fea/analysis/validation/validate-model.d.ts +12 -0
  141. package/dist/fea/analysis/validation/validate-model.js +267 -0
  142. package/dist/fea/analysis/validation/validate-model.js.map +1 -0
  143. package/dist/fea/deprecated.d.ts +27 -0
  144. package/dist/fea/deprecated.js +12 -0
  145. package/dist/fea/deprecated.js.map +1 -0
  146. package/dist/fea/frame/area/area-member-loads.d.ts +19 -0
  147. package/dist/fea/frame/area/{distribute-area-loads.js → area-member-loads.js} +8 -30
  148. package/dist/fea/frame/area/area-member-loads.js.map +1 -0
  149. package/dist/fea/frame/area/edge-members.d.ts +5 -4
  150. package/dist/fea/frame/area/edge-members.js.map +1 -1
  151. package/dist/fea/frame/elements/end-releases.d.ts +1 -6
  152. package/dist/fea/frame/elements/end-releases.js +4 -8
  153. package/dist/fea/frame/elements/end-releases.js.map +1 -1
  154. package/dist/fea/frame/elements/fixed-end-forces.d.ts +1 -1
  155. package/dist/fea/frame/elements/fixed-end-forces.js +5 -5
  156. package/dist/fea/frame/elements/fixed-end-forces.js.map +1 -1
  157. package/dist/fea/frame/elements/static-condensation.d.ts +1 -1
  158. package/dist/fea/frame/elements/static-condensation.js +3 -3
  159. package/dist/fea/frame/elements/static-condensation.js.map +1 -1
  160. package/dist/fea/frame/index.d.ts +2 -8
  161. package/dist/fea/frame/index.js +2 -10
  162. package/dist/fea/frame/index.js.map +1 -1
  163. package/dist/fea/frame/post/member-diagram.d.ts +3 -3
  164. package/dist/fea/frame/post/member-diagram.js.map +1 -1
  165. package/dist/fea/frame/solver/{global-assembly.d.ts → member-assembly.d.ts} +0 -11
  166. package/dist/fea/frame/solver/{global-assembly.js → member-assembly.js} +4 -13
  167. package/dist/fea/frame/solver/member-assembly.js.map +1 -0
  168. package/dist/fea/frame/solver/member-loads.d.ts +21 -0
  169. package/dist/fea/frame/solver/member-loads.js +146 -0
  170. package/dist/fea/frame/solver/member-loads.js.map +1 -0
  171. package/dist/fea/frame/solver/system-member.d.ts +50 -0
  172. package/dist/fea/frame/solver/system-member.js +70 -0
  173. package/dist/fea/frame/solver/system-member.js.map +1 -0
  174. package/dist/fea/frame/transformation/coordinate-transform.d.ts +1 -1
  175. package/dist/fea/frame/transformation/coordinate-transform.js +3 -3
  176. package/dist/fea/frame/transformation/coordinate-transform.js.map +1 -1
  177. package/dist/fea/frame/types/model.type.d.ts +10 -175
  178. package/dist/fea/frame/types/results.type.d.ts +4 -159
  179. package/dist/fea/frame/validation/validate-members.d.ts +30 -0
  180. package/dist/fea/frame/validation/validate-members.js +165 -0
  181. package/dist/fea/frame/validation/validate-members.js.map +1 -0
  182. package/dist/fea/frame/validation/validate-null-areas.d.ts +38 -0
  183. package/dist/fea/frame/validation/validate-null-areas.js +93 -0
  184. package/dist/fea/frame/validation/validate-null-areas.js.map +1 -0
  185. package/dist/fea/index.d.ts +4 -0
  186. package/dist/fea/index.js +4 -1
  187. package/dist/fea/index.js.map +1 -1
  188. package/dist/fea/shared/index.d.ts +1 -0
  189. package/dist/fea/shared/index.js +3 -0
  190. package/dist/fea/shared/index.js.map +1 -0
  191. package/dist/fea/shared/solver/auto-restraint.js.map +1 -0
  192. package/dist/fea/{frame → shared}/solver/boundary-conditions.d.ts +5 -0
  193. package/dist/fea/{frame → shared}/solver/boundary-conditions.js +7 -3
  194. package/dist/fea/shared/solver/boundary-conditions.js.map +1 -0
  195. package/dist/fea/shared/solver/global-assembly.d.ts +12 -0
  196. package/dist/fea/shared/solver/global-assembly.js +14 -0
  197. package/dist/fea/shared/solver/global-assembly.js.map +1 -0
  198. package/dist/fea/shared/types/model.type.d.ts +34 -0
  199. package/dist/fea/shared/types/model.type.js +3 -0
  200. package/dist/fea/shared/types/model.type.js.map +1 -0
  201. package/dist/fea/shared/validation/issues.d.ts +9 -0
  202. package/dist/fea/shared/validation/issues.js +38 -0
  203. package/dist/fea/shared/validation/issues.js.map +1 -0
  204. package/dist/fea/{frame/elements/shell → shell/elements}/dkq-plate.d.ts +1 -1
  205. package/dist/fea/{frame/elements/shell → shell/elements}/dkq-plate.js +1 -1
  206. package/dist/fea/shell/elements/dkq-plate.js.map +1 -0
  207. package/dist/fea/{frame/elements/shell → shell/elements}/flat-shell.d.ts +1 -1
  208. package/dist/fea/{frame/elements/shell → shell/elements}/flat-shell.js +1 -1
  209. package/dist/fea/shell/elements/flat-shell.js.map +1 -0
  210. package/dist/fea/{frame/elements/shell → shell/elements}/membrane-quad.d.ts +1 -1
  211. package/dist/fea/{frame/elements/shell → shell/elements}/membrane-quad.js +2 -2
  212. package/dist/fea/shell/elements/membrane-quad.js.map +1 -0
  213. package/dist/fea/shell/elements/quad-geometry.js.map +1 -0
  214. package/dist/fea/{frame/elements/shell → shell/elements}/rigidity.d.ts +1 -1
  215. package/dist/fea/shell/elements/rigidity.js.map +1 -0
  216. package/dist/fea/{frame/elements/shell → shell/elements}/shell-axes.d.ts +1 -1
  217. package/dist/fea/{frame/elements/shell → shell/elements}/shell-axes.js +1 -1
  218. package/dist/fea/shell/elements/shell-axes.js.map +1 -0
  219. package/dist/fea/shell/index.d.ts +2 -0
  220. package/dist/fea/shell/index.js +3 -0
  221. package/dist/fea/shell/index.js.map +1 -0
  222. package/dist/fea/{frame → shell}/mesh/mesh-shells.d.ts +7 -6
  223. package/dist/fea/{frame → shell}/mesh/mesh-shells.js +1 -1
  224. package/dist/fea/shell/mesh/mesh-shells.js.map +1 -0
  225. package/dist/fea/{frame → shell}/post/shell-forces.d.ts +1 -1
  226. package/dist/fea/{frame → shell}/post/shell-forces.js +4 -4
  227. package/dist/fea/{frame → shell}/post/shell-forces.js.map +1 -1
  228. package/dist/fea/shell/solver/shell-loads.d.ts +17 -0
  229. package/dist/fea/shell/solver/shell-loads.js +57 -0
  230. package/dist/fea/shell/solver/shell-loads.js.map +1 -0
  231. package/dist/fea/shell/solver/system-shell.d.ts +29 -0
  232. package/dist/fea/shell/solver/system-shell.js +41 -0
  233. package/dist/fea/shell/solver/system-shell.js.map +1 -0
  234. package/dist/fea/shell/types/model.type.d.ts +57 -0
  235. package/dist/fea/shell/types/model.type.js +3 -0
  236. package/dist/fea/shell/types/model.type.js.map +1 -0
  237. package/dist/fea/shell/types/results.type.d.ts +47 -0
  238. package/dist/fea/shell/types/results.type.js +3 -0
  239. package/dist/fea/shell/types/results.type.js.map +1 -0
  240. package/dist/fea/shell/validation/validate-shells.d.ts +21 -0
  241. package/dist/fea/shell/validation/validate-shells.js +103 -0
  242. package/dist/fea/shell/validation/validate-shells.js.map +1 -0
  243. package/dist/index.d.ts +6 -4
  244. package/dist/index.js +13 -6
  245. package/dist/index.js.map +1 -1
  246. package/package.json +1 -1
  247. package/dist/core/errors/frame-analysis.error.d.ts +0 -37
  248. package/dist/core/errors/frame-analysis.error.js.map +0 -1
  249. package/dist/esm/core/errors/frame-analysis.error.js.map +0 -1
  250. package/dist/esm/fea/frame/area/distribute-area-loads.js.map +0 -1
  251. package/dist/esm/fea/frame/elements/shell/dkq-plate.js.map +0 -1
  252. package/dist/esm/fea/frame/elements/shell/flat-shell.js.map +0 -1
  253. package/dist/esm/fea/frame/elements/shell/membrane-quad.js.map +0 -1
  254. package/dist/esm/fea/frame/elements/shell/quad-geometry.js.map +0 -1
  255. package/dist/esm/fea/frame/elements/shell/rigidity.js.map +0 -1
  256. package/dist/esm/fea/frame/elements/shell/shell-axes.js.map +0 -1
  257. package/dist/esm/fea/frame/mesh/expand-model.js.map +0 -1
  258. package/dist/esm/fea/frame/mesh/mesh-shells.js.map +0 -1
  259. package/dist/esm/fea/frame/post/demand-envelope.js.map +0 -1
  260. package/dist/esm/fea/frame/post/envelope.js.map +0 -1
  261. package/dist/esm/fea/frame/post/present-state.js.map +0 -1
  262. package/dist/esm/fea/frame/solver/analyze-frame.js.map +0 -1
  263. package/dist/esm/fea/frame/solver/auto-restraint.js.map +0 -1
  264. package/dist/esm/fea/frame/solver/boundary-conditions.js.map +0 -1
  265. package/dist/esm/fea/frame/solver/combinations.js.map +0 -1
  266. package/dist/esm/fea/frame/solver/frame-system.js.map +0 -1
  267. package/dist/esm/fea/frame/solver/global-assembly.js.map +0 -1
  268. package/dist/esm/fea/frame/solver/load-case-solver.js +0 -255
  269. package/dist/esm/fea/frame/solver/load-case-solver.js.map +0 -1
  270. package/dist/esm/fea/frame/validation/validate-model.js +0 -529
  271. package/dist/esm/fea/frame/validation/validate-model.js.map +0 -1
  272. package/dist/fea/frame/area/distribute-area-loads.js.map +0 -1
  273. package/dist/fea/frame/elements/shell/dkq-plate.js.map +0 -1
  274. package/dist/fea/frame/elements/shell/flat-shell.js.map +0 -1
  275. package/dist/fea/frame/elements/shell/membrane-quad.js.map +0 -1
  276. package/dist/fea/frame/elements/shell/quad-geometry.js.map +0 -1
  277. package/dist/fea/frame/elements/shell/rigidity.js.map +0 -1
  278. package/dist/fea/frame/elements/shell/shell-axes.js.map +0 -1
  279. package/dist/fea/frame/mesh/expand-model.js.map +0 -1
  280. package/dist/fea/frame/mesh/mesh-shells.js.map +0 -1
  281. package/dist/fea/frame/post/demand-envelope.js.map +0 -1
  282. package/dist/fea/frame/post/envelope.js.map +0 -1
  283. package/dist/fea/frame/post/present-state.js.map +0 -1
  284. package/dist/fea/frame/solver/analyze-frame.js.map +0 -1
  285. package/dist/fea/frame/solver/auto-restraint.js.map +0 -1
  286. package/dist/fea/frame/solver/boundary-conditions.js.map +0 -1
  287. package/dist/fea/frame/solver/combinations.js.map +0 -1
  288. package/dist/fea/frame/solver/frame-system.d.ts +0 -89
  289. package/dist/fea/frame/solver/frame-system.js.map +0 -1
  290. package/dist/fea/frame/solver/global-assembly.js.map +0 -1
  291. package/dist/fea/frame/solver/load-case-solver.js +0 -260
  292. package/dist/fea/frame/solver/load-case-solver.js.map +0 -1
  293. package/dist/fea/frame/validation/validate-model.d.ts +0 -19
  294. package/dist/fea/frame/validation/validate-model.js +0 -535
  295. package/dist/fea/frame/validation/validate-model.js.map +0 -1
  296. /package/dist/esm/fea/{frame → analysis}/post/envelope.js +0 -0
  297. /package/dist/esm/fea/{frame → shared}/solver/auto-restraint.js +0 -0
  298. /package/dist/esm/fea/{frame/elements/shell → shell/elements}/quad-geometry.js +0 -0
  299. /package/dist/esm/fea/{frame/elements/shell → shell/elements}/rigidity.js +0 -0
  300. /package/dist/fea/{frame → analysis}/post/envelope.js +0 -0
  301. /package/dist/fea/{frame → shared}/solver/auto-restraint.d.ts +0 -0
  302. /package/dist/fea/{frame → shared}/solver/auto-restraint.js +0 -0
  303. /package/dist/fea/{frame/elements/shell → shell/elements}/quad-geometry.d.ts +0 -0
  304. /package/dist/fea/{frame/elements/shell → shell/elements}/quad-geometry.js +0 -0
  305. /package/dist/fea/{frame/elements/shell → shell/elements}/rigidity.js +0 -0
@@ -1,33 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepareFrameSystem = void 0;
3
+ exports.prepareAnalysisSystem = 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
+ const member_assembly_1 = require("../../frame/solver/member-assembly");
7
+ const system_member_1 = require("../../frame/solver/system-member");
8
+ const auto_restraint_1 = require("../../shared/solver/auto-restraint");
9
+ const boundary_conditions_1 = require("../../shared/solver/boundary-conditions");
10
+ const global_assembly_1 = require("../../shared/solver/global-assembly");
11
+ const issues_1 = require("../../shared/validation/issues");
12
+ const system_shell_1 = require("../../shell/solver/system-shell");
6
13
  const skyline_1 = require("../../../utils/skyline");
7
- const beam_3d_stiffness_1 = require("../elements/beam-3d-stiffness");
8
- const end_releases_1 = require("../elements/end-releases");
9
- const flat_shell_1 = require("../elements/shell/flat-shell");
10
- const quad_geometry_1 = require("../elements/shell/quad-geometry");
11
- const static_condensation_1 = require("../elements/static-condensation");
12
- const coordinate_transform_1 = require("../transformation/coordinate-transform");
13
- const validate_model_1 = require("../validation/validate-model");
14
- const auto_restraint_1 = require("./auto-restraint");
15
- const boundary_conditions_1 = require("./boundary-conditions");
16
- const global_assembly_1 = require("./global-assembly");
17
14
  const DOF_NAMES = ["ux", "uy", "uz", "rx", "ry", "rz"];
18
15
  /**
19
- * Builds the member and shell matrices of a model that passed `validateFrameModel`, assembles
16
+ * Builds the member and shell matrices of a model that passed `validateModel`, assembles
20
17
  * the free stiffness in skyline storage with nodes in reverse Cuthill–McKee order, and
21
18
  * factorises it once for all load cases. Joint rotations that nothing resists (e.g. at truss
22
19
  * joints) are held by a spring along each null direction, which carries no force.
23
20
  *
24
- * @throws {FrameAnalysisError} 328 if a node connected only to shells has a translation that
21
+ * @throws {FeaError} 328 if a node connected only to shells has a translation that
25
22
  * nothing resists (a membrane's out-of-plane or a plate's in-plane direction), with `nodeId`,
26
23
  * `shellId` and `dof`; 304 if the structure is a mechanism; `details` names a node and a DOF
27
24
  * involved in it
28
25
  */
29
- const prepareFrameSystem = (model) => {
30
- const { nodes, members, restraints } = model;
26
+ const prepareAnalysisSystem = (model) => {
27
+ const { nodes, members = [], restraints } = model;
31
28
  // shell elements: after `expandModel` they carry their area's id
32
29
  const shells = (model.shells ?? []);
33
30
  const nodeIndex = new Map(nodes.map((n, i) => [n.id, i]));
@@ -35,78 +32,8 @@ const prepareFrameSystem = (model) => {
35
32
  const shellIndex = new Map(shells.map((sh, i) => [sh.id, i]));
36
33
  const dofCount = 6 * nodes.length;
37
34
  const boundary = (0, boundary_conditions_1.buildBoundaryConditions)(restraints, nodeIndex, dofCount);
38
- const point = (id) => {
39
- const n = nodes[nodeIndex.get(id)];
40
- return [n.x, n.y, n.z];
41
- };
42
- const systemMembers = [];
43
- const memberGroups = members.map((member) => {
44
- // pieces between the member's ends and the mesh nodes inside it (see `expandModel`)
45
- const chain = [member.startNodeId, ...(member.through ?? []), member.endNodeId];
46
- const whole = (0, coordinate_transform_1.memberAxes)(point(member.startNodeId), point(member.endNodeId), member.angle ?? 0);
47
- const { E, G, A, I22, I33, J } = member.section;
48
- const pieces = [];
49
- let offset = 0;
50
- for (let k = 0; k + 1 < chain.length; k++) {
51
- const { length, lambda } = chain.length === 2
52
- ? whole
53
- : (0, coordinate_transform_1.memberAxes)(point(chain[k]), point(chain[k + 1]), member.angle ?? 0);
54
- // releases only at the member's own ends
55
- const releases = (0, end_releases_1.memberEndReleases)({
56
- start: k === 0 ? member.releases?.start : undefined,
57
- end: k === chain.length - 2 ? member.releases?.end : undefined,
58
- });
59
- const condensed = (0, static_condensation_1.condenseMember)((0, beam_3d_stiffness_1.beam3dLocalStiffnessRightHanded)(E, G, A, I22, I33, J, length), releases);
60
- pieces.push(systemMembers.length);
61
- systemMembers.push({
62
- id: member.id,
63
- offset,
64
- section: member.section,
65
- startIndex: nodeIndex.get(chain[k]),
66
- endIndex: nodeIndex.get(chain[k + 1]),
67
- T: (0, coordinate_transform_1.transformationMatrix)(lambda),
68
- k: condensed.k,
69
- hasReleases: releases.length > 0,
70
- condenseFixedEndForces: condensed.condenseFixedEndForces,
71
- memberEndDisplacements: condensed.memberEndDisplacements,
72
- length,
73
- lambda,
74
- });
75
- offset += length;
76
- }
77
- return {
78
- id: member.id,
79
- pieces,
80
- section: member.section,
81
- length: whole.length,
82
- lambda: whole.lambda,
83
- };
84
- });
85
- const systemShells = shells.map((shell) => {
86
- const nodeIndices = shell.nodeIds.map((id) => nodeIndex.get(id));
87
- const points = nodeIndices.map((n) => [nodes[n].x, nodes[n].y, nodes[n].z]);
88
- const { thickness, E, nu } = shell.section;
89
- const m = shell.modifiers ?? {};
90
- const type = shell.type ?? "shell";
91
- const element = (0, flat_shell_1.flatShellElement)(points, {
92
- E,
93
- nu,
94
- t: thickness,
95
- type,
96
- membraneModifiers: [m.f11 ?? 1, m.f22 ?? 1, m.f12 ?? 1],
97
- bendingModifiers: [m.m11 ?? 1, m.m22 ?? 1, m.m12 ?? 1],
98
- }, shell.angle ?? 0);
99
- return {
100
- id: shell.id,
101
- areaId: shell.areaId ?? shell.id,
102
- nodeIndices,
103
- type,
104
- section: shell.section,
105
- modifiers: m,
106
- element,
107
- cornerAreas: (0, quad_geometry_1.cornerAreas)(element.axes.corners),
108
- };
109
- });
35
+ const { pieces: systemMembers, groups: memberGroups } = (0, system_member_1.prepareSystemMembers)(members, nodes, nodeIndex);
36
+ const systemShells = (0, system_shell_1.prepareSystemShells)(shells, nodes, nodeIndex);
110
37
  const shellsByArea = new Map();
111
38
  systemShells.forEach((sh, s) => {
112
39
  const list = shellsByArea.get(sh.areaId);
@@ -118,7 +45,7 @@ const prepareFrameSystem = (model) => {
118
45
  // Everything that adds stiffness, as elements over 6 DOFs per node; members have 2 nodes
119
46
  const memberElements = systemMembers.map((m) => ({
120
47
  nodes: [m.startIndex, m.endIndex],
121
- kGlobal: (0, global_assembly_1.memberGlobalStiffness)(m),
48
+ kGlobal: (0, member_assembly_1.memberGlobalStiffness)(m),
122
49
  }));
123
50
  const shellElements = systemShells.map((sh) => ({
124
51
  nodes: sh.nodeIndices,
@@ -131,9 +58,9 @@ const prepareFrameSystem = (model) => {
131
58
  const unresisted = (0, auto_restraint_1.findUnresistedTranslations)([...shellOnlyNodes].sort((a, b) => a - b), // issues in model order
132
59
  shellElements, boundary);
133
60
  if (unresisted.length > 0) {
134
- (0, validate_model_1.throwIssues)(unresisted.map(({ node, axis }) => {
61
+ (0, issues_1.throwIssues)(unresisted.map(({ node, axis }) => {
135
62
  const lead = axis.reduce((best, c, i) => (Math.abs(c) > Math.abs(axis[best]) ? i : best), 0);
136
- return (0, validate_model_1.frameIssue)(frame_analysis_error_1.FrameErrors.SHELL_DOF_UNSUPPORTED, {
63
+ return (0, issues_1.modelIssue)(fea_error_1.FeaErrors.SHELL_DOF_UNSUPPORTED, {
137
64
  nodeId: nodes[node].id,
138
65
  shellId: systemShells.find((sh) => sh.nodeIndices.includes(node))?.id,
139
66
  dof: DOF_NAMES[lead],
@@ -220,8 +147,8 @@ const prepareFrameSystem = (model) => {
220
147
  const result = (0, skyline_1.skylineFactor)(K, frame_constant_1.SINGULARITY_TOLERANCE);
221
148
  if (!result.ok) {
222
149
  const dof = free[result.failedPivot];
223
- (0, validate_model_1.throwIssues)([
224
- (0, validate_model_1.frameIssue)(frame_analysis_error_1.FrameErrors.STRUCTURE_UNSTABLE, {
150
+ (0, issues_1.throwIssues)([
151
+ (0, issues_1.modelIssue)(fea_error_1.FeaErrors.STRUCTURE_UNSTABLE, {
225
152
  nodeId: nodes[Math.floor(dof / 6)].id,
226
153
  dof: DOF_NAMES[dof % 6],
227
154
  }),
@@ -247,5 +174,5 @@ const prepareFrameSystem = (model) => {
247
174
  profileSize: factor ? (0, skyline_1.skylineSize)(factor) : 0,
248
175
  };
249
176
  };
250
- exports.prepareFrameSystem = prepareFrameSystem;
251
- //# sourceMappingURL=frame-system.js.map
177
+ exports.prepareAnalysisSystem = prepareAnalysisSystem;
178
+ //# sourceMappingURL=analysis-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analysis-system.js","sourceRoot":"","sources":["../../../../src/fea/analysis/solver/analysis-system.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,22 @@
1
- import type { FrameId, FrameModel } from "../types/model.type";
2
- import type { FrameResult, MemberDiagram } from "../types/results.type";
3
- export interface AnalyzeFrameOptions {
1
+ import type { MemberDiagram } from "../../frame/types/results.type";
2
+ import type { FeaId } from "../../shared/types/model.type";
3
+ import type { FeaModel } from "../types/model.type";
4
+ import type { FeaResult } from "../types/results.type";
5
+ export interface AnalyzeOptions {
4
6
  /** Number of evenly spaced stations per member diagram (default 21). */
5
7
  stations?: number;
6
8
  /**
7
9
  * `"full"` (default) returns every member diagram with its `stations`; `"extremes"` keeps
8
10
  * each diagram's `extremes` (so the envelope and `memberDemandEnvelope` still work) but leaves
9
11
  * `stations` empty, which makes large results far smaller. Full diagrams are then available on
10
- * demand from `createFrameAnalysis(...).memberDiagram`.
12
+ * demand from `createAnalysis(...).memberDiagram`.
11
13
  */
12
14
  diagrams?: "full" | "extremes";
13
15
  }
14
16
  /** An analysed model whose member diagrams can be computed on demand. */
15
- export interface FrameAnalysis {
16
- /** The same result `analyzeFrame` returns. */
17
- result: FrameResult;
17
+ export interface Analysis {
18
+ /** The same result `analyze` returns. */
19
+ result: FeaResult;
18
20
  /**
19
21
  * The full diagram (stations and extremes) of one member for one load case or combination,
20
22
  * computed from the stored solution without re-analysing.
@@ -24,27 +26,28 @@ export interface FrameAnalysis {
24
26
  * @param stations - Evenly spaced stations (default: the analysis option, else 21)
25
27
  * @throws {Error} if either id is not in the model
26
28
  */
27
- memberDiagram: (resultId: string, memberId: FrameId, stations?: number) => MemberDiagram;
29
+ memberDiagram: (resultId: string, memberId: FeaId, stations?: number) => MemberDiagram;
28
30
  }
29
31
  /**
30
- * Analyses a 3D frame like `analyzeFrame` and keeps the solution, so that full member diagrams
32
+ * Analyses a model like `analyze` and keeps the solution, so that full member diagrams
31
33
  * can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
32
34
  * draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
33
35
  *
34
- * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
35
- * null areas, and combinations
36
+ * @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
37
+ * case, null areas, and combinations
36
38
  * @param options - Diagram station count and detail
37
39
  * @returns `{ result, memberDiagram }`
38
- * @throws {FrameAnalysisError} 301–317, 326 and 327 for an invalid model (with `details` and
40
+ * @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
39
41
  * every problem in `issues`), 328 for a translation nothing resists at a node connected only
40
42
  * to shells, 304 for an unstable structure
41
43
  */
42
- export declare const createFrameAnalysis: (model: FrameModel, options?: AnalyzeFrameOptions) => FrameAnalysis;
44
+ export declare const createAnalysis: (model: FeaModel, options?: AnalyzeOptions) => Analysis;
43
45
  /**
44
- * Analyses a 3D frame by the direct stiffness method (linear elastic, small displacements)
45
- * for every load case, then forms every load combination by superposition.
46
+ * Analyses a 3D structure of frame members, shell areas or both by the direct stiffness method
47
+ * (linear elastic, small displacements) for every load case, then forms every load combination
48
+ * by superposition.
46
49
  *
47
- * The model is validated first (`validateFrameModel`). The stiffness matrix is assembled once
50
+ * The model is validated first (`validateModel`). The stiffness matrix is assembled once
48
51
  * in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
49
52
  * load case is a separate solve. A combination is the factored sum of its load cases (nested
50
53
  * combinations are expanded), and its member diagrams are rebuilt from the combined end forces
@@ -62,13 +65,13 @@ export declare const createFrameAnalysis: (model: FrameModel, options?: AnalyzeF
62
65
  *
63
66
  * Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
64
67
  *
65
- * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
66
- * null areas, and combinations
68
+ * @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
69
+ * case, null areas, and combinations
67
70
  * @param options - Diagram station count and detail
68
71
  * @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
69
72
  * `calculationDetails`, `units` and `warnings`
70
- * @throws {FrameAnalysisError} 301–317, 326 and 327 for an invalid model (with `details` and
73
+ * @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
71
74
  * every problem in `issues`), 328 for a translation nothing resists at a node connected only
72
75
  * to shells, 304 for an unstable structure
73
76
  */
74
- export declare const analyzeFrame: (model: FrameModel, options?: AnalyzeFrameOptions) => FrameResult;
77
+ export declare const analyze: (model: FeaModel, options?: AnalyzeOptions) => FeaResult;
@@ -1,14 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyzeFrame = exports.createFrameAnalysis = void 0;
3
+ exports.analyze = exports.createAnalysis = void 0;
4
+ const area_member_loads_1 = require("../../frame/area/area-member-loads");
5
+ const issues_1 = require("../../shared/validation/issues");
4
6
  const math_1 = require("../../../utils/math");
5
- const distribute_area_loads_1 = require("../area/distribute-area-loads");
6
7
  const envelope_1 = require("../post/envelope");
7
8
  const present_state_1 = require("../post/present-state");
8
- const validate_model_1 = require("../validation/validate-model");
9
9
  const expand_model_1 = require("../mesh/expand-model");
10
+ const validate_model_1 = require("../validation/validate-model");
10
11
  const combinations_1 = require("./combinations");
11
- const frame_system_1 = require("./frame-system");
12
+ const analysis_system_1 = require("./analysis-system");
12
13
  const load_case_solver_1 = require("./load-case-solver");
13
14
  const ROTATION_DOFS = ["rx", "ry", "rz"];
14
15
  /** The presented form of the joint rotations held by the solver. */
@@ -34,28 +35,28 @@ const groupByCase = (loads = []) => {
34
35
  return groups;
35
36
  };
36
37
  /**
37
- * Analyses a 3D frame like `analyzeFrame` and keeps the solution, so that full member diagrams
38
+ * Analyses a model like `analyze` and keeps the solution, so that full member diagrams
38
39
  * can be requested later one member at a time — e.g. analyse with `diagrams: "extremes"` and
39
40
  * draw a member's diagram when the user selects it. Run it in a Web Worker for large models.
40
41
  *
41
- * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
42
- * null areas, and combinations
42
+ * @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
43
+ * case, null areas, and combinations
43
44
  * @param options - Diagram station count and detail
44
45
  * @returns `{ result, memberDiagram }`
45
- * @throws {FrameAnalysisError} 301–317, 326 and 327 for an invalid model (with `details` and
46
+ * @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
46
47
  * every problem in `issues`), 328 for a translation nothing resists at a node connected only
47
48
  * to shells, 304 for an unstable structure
48
49
  */
49
- const createFrameAnalysis = (model, options = {}) => {
50
- const issues = (0, validate_model_1.validateFrameModel)(model);
50
+ const createAnalysis = (model, options = {}) => {
51
+ const issues = (0, validate_model_1.validateModel)(model);
51
52
  if (issues.length > 0)
52
- (0, validate_model_1.throwIssues)(issues);
53
+ (0, issues_1.throwIssues)(issues);
53
54
  const expanded = (0, expand_model_1.expandModel)(model);
54
- const system = (0, frame_system_1.prepareFrameSystem)(expanded.model);
55
+ const system = (0, analysis_system_1.prepareAnalysisSystem)(expanded.model);
55
56
  const combinations = model.combinations ?? [];
56
57
  const resolved = (0, combinations_1.resolveCombinations)(combinations, new Set(model.loadCases.map((c) => c.id)));
57
58
  const withStations = (options.diagrams ?? "full") === "full";
58
- const fromAreas = (0, distribute_area_loads_1.areaMemberLoads)(model);
59
+ const fromAreas = (0, area_member_loads_1.areaMemberLoads)(model);
59
60
  const states = new Map();
60
61
  const cases = {};
61
62
  const nodalByCase = groupByCase(model.nodalLoads);
@@ -132,12 +133,13 @@ const createFrameAnalysis = (model, options = {}) => {
132
133
  },
133
134
  };
134
135
  };
135
- exports.createFrameAnalysis = createFrameAnalysis;
136
+ exports.createAnalysis = createAnalysis;
136
137
  /**
137
- * Analyses a 3D frame by the direct stiffness method (linear elastic, small displacements)
138
- * for every load case, then forms every load combination by superposition.
138
+ * Analyses a 3D structure of frame members, shell areas or both by the direct stiffness method
139
+ * (linear elastic, small displacements) for every load case, then forms every load combination
140
+ * by superposition.
139
141
  *
140
- * The model is validated first (`validateFrameModel`). The stiffness matrix is assembled once
142
+ * The model is validated first (`validateModel`). The stiffness matrix is assembled once
141
143
  * in skyline storage with the nodes in reverse Cuthill–McKee order and factorised once; each
142
144
  * load case is a separate solve. A combination is the factored sum of its load cases (nested
143
145
  * combinations are expanded), and its member diagrams are rebuilt from the combined end forces
@@ -155,15 +157,15 @@ exports.createFrameAnalysis = createFrameAnalysis;
155
157
  *
156
158
  * Model and result are plain data (JSON-serialisable), so the analysis can run in a Web Worker.
157
159
  *
158
- * @param model - Nodes, members, restraints, load cases, loads tagged with their load case,
159
- * null areas, and combinations
160
+ * @param model - Nodes, members, shells, restraints, load cases, loads tagged with their load
161
+ * case, null areas, and combinations
160
162
  * @param options - Diagram station count and detail
161
163
  * @returns `cases` and `combinations` keyed by id, `envelope` over the combinations,
162
164
  * `calculationDetails`, `units` and `warnings`
163
- * @throws {FrameAnalysisError} 301–317, 326 and 327 for an invalid model (with `details` and
165
+ * @throws {FeaError} 301–317, 326 and 327 for an invalid model (with `details` and
164
166
  * every problem in `issues`), 328 for a translation nothing resists at a node connected only
165
167
  * to shells, 304 for an unstable structure
166
168
  */
167
- const analyzeFrame = (model, options = {}) => (0, exports.createFrameAnalysis)(model, options).result;
168
- exports.analyzeFrame = analyzeFrame;
169
- //# sourceMappingURL=analyze-frame.js.map
169
+ const analyze = (model, options = {}) => (0, exports.createAnalysis)(model, options).result;
170
+ exports.analyze = analyze;
171
+ //# sourceMappingURL=analyze.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../../../../src/fea/analysis/solver/analyze.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ import type { LoadCombination } from "../types/model.type";
5
5
  * @param combinations - Model combinations
6
6
  * @param caseIds - Ids of the model's load cases
7
7
  * @returns For each combination id, the net factor on each load case it uses
8
- * @throws {FrameAnalysisError} 309 for an unknown or missing reference, 310 for a loop,
8
+ * @throws {FeaError} 309 for an unknown or missing reference, 310 for a loop,
9
9
  * 311 for a non-finite factor or an empty combination
10
10
  */
11
11
  export declare const resolveCombinations: (combinations: LoadCombination[], caseIds: Set<string>) => Map<string, Map<string, number>>;
@@ -1,42 +1,42 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.resolveCombinations = void 0;
4
- const frame_analysis_error_1 = require("../../../core/errors/frame-analysis.error");
4
+ const fea_error_1 = require("../../../core/errors/fea.error");
5
5
  /**
6
6
  * Expands every combination into net factors on load cases, following nested combinations.
7
7
  *
8
8
  * @param combinations - Model combinations
9
9
  * @param caseIds - Ids of the model's load cases
10
10
  * @returns For each combination id, the net factor on each load case it uses
11
- * @throws {FrameAnalysisError} 309 for an unknown or missing reference, 310 for a loop,
11
+ * @throws {FeaError} 309 for an unknown or missing reference, 310 for a loop,
12
12
  * 311 for a non-finite factor or an empty combination
13
13
  */
14
14
  const resolveCombinations = (combinations, caseIds) => {
15
15
  const byId = new Map(combinations.map((c) => [c.id, c]));
16
16
  for (const combination of combinations) {
17
17
  if (!Array.isArray(combination.terms) || combination.terms.length === 0) {
18
- throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.INVALID_LOAD_FACTOR, {
18
+ throw new fea_error_1.FeaError(fea_error_1.FeaErrors.INVALID_LOAD_FACTOR, {
19
19
  combinationId: combination.id,
20
20
  });
21
21
  }
22
22
  for (const term of combination.terms) {
23
23
  if (!Number.isFinite(term.factor))
24
- throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.INVALID_LOAD_FACTOR, {
24
+ throw new fea_error_1.FeaError(fea_error_1.FeaErrors.INVALID_LOAD_FACTOR, {
25
25
  combinationId: combination.id,
26
26
  });
27
27
  const isCase = "case" in term && term.case !== undefined;
28
28
  const isCombination = "combination" in term && term.combination !== undefined;
29
29
  if (isCase === isCombination)
30
- throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.UNKNOWN_LOAD_CASE, {
30
+ throw new fea_error_1.FeaError(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, {
31
31
  combinationId: combination.id,
32
32
  });
33
33
  if (isCase && !caseIds.has(term.case)) {
34
- throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.UNKNOWN_LOAD_CASE, {
34
+ throw new fea_error_1.FeaError(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, {
35
35
  combinationId: combination.id,
36
36
  });
37
37
  }
38
38
  if (isCombination && !byId.has(term.combination)) {
39
- throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.UNKNOWN_LOAD_CASE, {
39
+ throw new fea_error_1.FeaError(fea_error_1.FeaErrors.UNKNOWN_LOAD_CASE, {
40
40
  combinationId: combination.id,
41
41
  });
42
42
  }
@@ -49,7 +49,7 @@ const resolveCombinations = (combinations, caseIds) => {
49
49
  if (done)
50
50
  return done;
51
51
  if (visiting.has(id)) {
52
- throw new frame_analysis_error_1.FrameAnalysisError(frame_analysis_error_1.FrameErrors.CIRCULAR_COMBINATION, { combinationId: id });
52
+ throw new fea_error_1.FeaError(fea_error_1.FeaErrors.CIRCULAR_COMBINATION, { combinationId: id });
53
53
  }
54
54
  visiting.add(id);
55
55
  const factors = new Map();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combinations.js","sourceRoot":"","sources":["../../../../src/fea/analysis/solver/combinations.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,9 @@
1
1
  import type { Warnings } from "../../../core/types/output-message.type";
2
- import type { FrameModel, MemberLoad } from "../types/model.type";
3
- /**
4
- * Turns the area loads of a model into member loads, assuming the model is valid (as
5
- * `validateFrameModel` checks): each area's edge profiles are built once, then scaled for each
6
- * of its loads and split into global X, Y and Z trapezoidal loads (plus torques for a cantilever).
7
- * Everything is linear in `q`, so load-case superposition still holds.
8
- */
9
- export declare const areaMemberLoads: (model: FrameModel) => {
10
- memberLoads: MemberLoad[];
11
- warnings: Warnings;
12
- };
2
+ import type { MemberLoad } from "../../frame/types/model.type";
3
+ import type { FeaModel } from "../types/model.type";
13
4
  /**
14
5
  * The member loads that a model's null areas send to the members along their edges — what
15
- * `analyzeFrame` adds to `memberLoads` — so they can be checked or previewed.
6
+ * `analyze` adds to `memberLoads` — so they can be checked or previewed.
16
7
  *
17
8
  * Two-way areas send each point to the nearest edge (corner-bisector split); one-way areas
18
9
  * split strips parallel to their unsupported edges half to each end; cantilever areas send
@@ -21,11 +12,11 @@ export declare const areaMemberLoads: (model: FrameModel) => {
21
12
  * `projected` load is first converted, `q · |n · direction|`) and come out as trapezoidal loads
22
13
  * per member length in global X, Y and Z (and torques), each tagged with its load case.
23
14
  *
24
- * @param model - The frame model, validated first
15
+ * @param model - The model, validated first
25
16
  * @returns `memberLoads` and `warnings` (a one-way support edge parallel to the span)
26
- * @throws {FrameAnalysisError} 301–317 for an invalid model, with every problem in `issues`
17
+ * @throws {FeaError} 301–317 for an invalid model, with every problem in `issues`
27
18
  */
28
- export declare const distributeAreaLoads: (model: FrameModel) => {
19
+ export declare const distributeAreaLoads: (model: FeaModel) => {
29
20
  memberLoads: MemberLoad[];
30
21
  warnings: Warnings;
31
22
  };
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.distributeAreaLoads = void 0;
4
+ const area_member_loads_1 = require("../../frame/area/area-member-loads");
5
+ const issues_1 = require("../../shared/validation/issues");
6
+ const validate_model_1 = require("../validation/validate-model");
7
+ /**
8
+ * The member loads that a model's null areas send to the members along their edges — what
9
+ * `analyze` adds to `memberLoads` — so they can be checked or previewed.
10
+ *
11
+ * Two-way areas send each point to the nearest edge (corner-bisector split); one-way areas
12
+ * split strips parallel to their unsupported edges half to each end; cantilever areas send
13
+ * `q · c` and a torque `q · c² / 2` per unit length to their support edge (c = depth). Edges
14
+ * split by intermediate nodes are cut at those nodes. Loads are per unit true area (a
15
+ * `projected` load is first converted, `q · |n · direction|`) and come out as trapezoidal loads
16
+ * per member length in global X, Y and Z (and torques), each tagged with its load case.
17
+ *
18
+ * @param model - The model, validated first
19
+ * @returns `memberLoads` and `warnings` (a one-way support edge parallel to the span)
20
+ * @throws {FeaError} 301–317 for an invalid model, with every problem in `issues`
21
+ */
22
+ const distributeAreaLoads = (model) => {
23
+ const issues = (0, validate_model_1.validateModel)(model);
24
+ if (issues.length > 0)
25
+ (0, issues_1.throwIssues)(issues);
26
+ return (0, area_member_loads_1.areaMemberLoads)(model);
27
+ };
28
+ exports.distributeAreaLoads = distributeAreaLoads;
29
+ //# sourceMappingURL=distribute-area-loads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distribute-area-loads.js","sourceRoot":"","sources":["../../../../src/fea/analysis/solver/distribute-area-loads.ts"],"names":[],"mappings":";;;AACA,6EAAwE;AAExE,8DAAgE;AAGhE,iEAA6D;AAE7D;;;;;;;;;;;;;;GAcG;AACI,MAAM,mBAAmB,GAAG,CACjC,KAAe,EACoC,EAAE;IACrD,MAAM,MAAM,GAAG,IAAA,8BAAa,EAAC,KAAK,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,IAAA,oBAAW,EAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,IAAA,mCAAe,EAAC,KAAK,CAAC,CAAC;AAChC,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B"}
@@ -1,6 +1,8 @@
1
- import { type LocalMemberLoad } from "../elements/fixed-end-forces";
2
- import type { AreaLoad, LoadCase, MemberLoad, NodalLoad } from "../types/model.type";
3
- import type { FrameSystem } from "./frame-system";
1
+ import { type LocalMemberLoad } from "../../frame/elements/fixed-end-forces";
2
+ import type { MemberLoad } from "../../frame/types/model.type";
3
+ import type { AreaLoad } from "../../shared/types/model.type";
4
+ import type { LoadCase, NodalLoad } from "../types/model.type";
5
+ import type { AnalysisSystem } from "./analysis-system";
4
6
  /**
5
7
  * Unrounded result of one load case or combination, in N and mm. Every field is linear in the
6
8
  * loads, so combinations are formed by factoring and adding states.
@@ -16,24 +18,18 @@ export interface RawState {
16
18
  /**
17
19
  * Solves one load case against the prepared, factorised system.
18
20
  *
19
- * Self-weight is `selfWeight · unitWeight · A` per unit member length along global −Z.
21
+ * Members take their loads and self-weight as fixed-end forces (see `memberPieceLoads`); shells
22
+ * take their area loads and self-weight as forces at their corners (see `addShellLoads`).
20
23
  *
21
24
  * @param loadCase - The load case (id and self-weight multiplier)
22
- * @param loads - The nodal and member loads tagged with this load case
23
- *
24
- * Shell areas take `selfWeight · unitWeight · thickness · modifiers.weight` per unit area along
25
- * −Z and their `AreaLoad`s as forces at their corners, each corner the share `∫ Nᵢ dA` of the
26
- * element's area on its mean plane (no corner moments, so a warped element's offsets do not load
27
- * the rotations auto-restraint holds).
28
- *
29
25
  * @param loads - The nodal and member loads tagged with this load case, and its area loads on
30
26
  * shell areas
31
27
  *
32
- * @throws {FrameAnalysisError} 304 if a load has a moment about a joint rotation that nothing
28
+ * @throws {FeaError} 304 if a load has a moment about a joint rotation that nothing
33
29
  * resists (an auto-restrained axis), 308 for a load outside its member, 313 if self-weight is
34
30
  * requested for a member without `unitWeight`
35
31
  */
36
- export declare const solveLoadCase: (system: FrameSystem, loadCase: LoadCase, loads: {
32
+ export declare const solveLoadCase: (system: AnalysisSystem, loadCase: LoadCase, loads: {
37
33
  nodalLoads: NodalLoad[];
38
34
  memberLoads: MemberLoad[];
39
35
  shellLoads?: AreaLoad[];