simdesign 1.0.0b0__py3-none-any.whl

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 (269) hide show
  1. simdesign/__init__.py +9 -0
  2. simdesign/rcmrf/__init__.py +214 -0
  3. simdesign/rcmrf/bcim/__init__.py +27 -0
  4. simdesign/rcmrf/bcim/data/eu_cdh.json +59 -0
  5. simdesign/rcmrf/bcim/data/eu_cdl.json +59 -0
  6. simdesign/rcmrf/bcim/data/eu_cdm.json +59 -0
  7. simdesign/rcmrf/bcim/data/eu_cdn.json +59 -0
  8. simdesign/rcmrf/bcim/data/layouts.csv +12 -0
  9. simdesign/rcmrf/bcim/data/tr_0018_dch.json +73 -0
  10. simdesign/rcmrf/bcim/data/tr_0018_dcm.json +72 -0
  11. simdesign/rcmrf/bcim/data/tr_7599.json +72 -0
  12. simdesign/rcmrf/bcim/data/tr_post18_dch.json +74 -0
  13. simdesign/rcmrf/bcim/data/tr_post18_dcm.json +73 -0
  14. simdesign/rcmrf/bcim/data/tr_pre75.json +73 -0
  15. simdesign/rcmrf/bcim/factory.py +694 -0
  16. simdesign/rcmrf/bcim/parametrization.py +291 -0
  17. simdesign/rcmrf/bcim/randomization.py +649 -0
  18. simdesign/rcmrf/bdim/__init__.py +18 -0
  19. simdesign/rcmrf/bdim/baselib/__init__.py +61 -0
  20. simdesign/rcmrf/bdim/baselib/analysis.py +806 -0
  21. simdesign/rcmrf/bdim/baselib/beam.py +1442 -0
  22. simdesign/rcmrf/bdim/baselib/building.py +2813 -0
  23. simdesign/rcmrf/bdim/baselib/column.py +1095 -0
  24. simdesign/rcmrf/bdim/baselib/infill.py +252 -0
  25. simdesign/rcmrf/bdim/baselib/joint.py +114 -0
  26. simdesign/rcmrf/bdim/baselib/loads.py +286 -0
  27. simdesign/rcmrf/bdim/baselib/materials.py +412 -0
  28. simdesign/rcmrf/bdim/baselib/quality.py +306 -0
  29. simdesign/rcmrf/bdim/baselib/rebars.py +1007 -0
  30. simdesign/rcmrf/bdim/baselib/slab.py +435 -0
  31. simdesign/rcmrf/bdim/baselib/stairs.py +184 -0
  32. simdesign/rcmrf/bdim/eu_cdh/__init__.py +35 -0
  33. simdesign/rcmrf/bdim/eu_cdh/analysis.py +33 -0
  34. simdesign/rcmrf/bdim/eu_cdh/beam.py +285 -0
  35. simdesign/rcmrf/bdim/eu_cdh/building.py +192 -0
  36. simdesign/rcmrf/bdim/eu_cdh/column.py +399 -0
  37. simdesign/rcmrf/bdim/eu_cdh/data/loads.json +102 -0
  38. simdesign/rcmrf/bdim/eu_cdh/data/materials.json +17 -0
  39. simdesign/rcmrf/bdim/eu_cdh/data/quality.json +29 -0
  40. simdesign/rcmrf/bdim/eu_cdh/data/rebars.json +9 -0
  41. simdesign/rcmrf/bdim/eu_cdh/infill.py +35 -0
  42. simdesign/rcmrf/bdim/eu_cdh/joint.py +52 -0
  43. simdesign/rcmrf/bdim/eu_cdh/loads.py +98 -0
  44. simdesign/rcmrf/bdim/eu_cdh/materials.py +176 -0
  45. simdesign/rcmrf/bdim/eu_cdh/quality.py +27 -0
  46. simdesign/rcmrf/bdim/eu_cdh/rebars.py +132 -0
  47. simdesign/rcmrf/bdim/eu_cdh/slab.py +17 -0
  48. simdesign/rcmrf/bdim/eu_cdh/stairs.py +17 -0
  49. simdesign/rcmrf/bdim/eu_cdl/__init__.py +33 -0
  50. simdesign/rcmrf/bdim/eu_cdl/analysis.py +33 -0
  51. simdesign/rcmrf/bdim/eu_cdl/beam.py +332 -0
  52. simdesign/rcmrf/bdim/eu_cdl/building.py +190 -0
  53. simdesign/rcmrf/bdim/eu_cdl/column.py +411 -0
  54. simdesign/rcmrf/bdim/eu_cdl/data/loads.json +78 -0
  55. simdesign/rcmrf/bdim/eu_cdl/data/materials.json +17 -0
  56. simdesign/rcmrf/bdim/eu_cdl/data/quality.json +29 -0
  57. simdesign/rcmrf/bdim/eu_cdl/data/rebars.json +9 -0
  58. simdesign/rcmrf/bdim/eu_cdl/infill.py +35 -0
  59. simdesign/rcmrf/bdim/eu_cdl/joint.py +52 -0
  60. simdesign/rcmrf/bdim/eu_cdl/loads.py +140 -0
  61. simdesign/rcmrf/bdim/eu_cdl/materials.py +180 -0
  62. simdesign/rcmrf/bdim/eu_cdl/quality.py +27 -0
  63. simdesign/rcmrf/bdim/eu_cdl/rebars.py +58 -0
  64. simdesign/rcmrf/bdim/eu_cdl/slab.py +17 -0
  65. simdesign/rcmrf/bdim/eu_cdl/stairs.py +17 -0
  66. simdesign/rcmrf/bdim/eu_cdm/__init__.py +42 -0
  67. simdesign/rcmrf/bdim/eu_cdm/analysis.py +33 -0
  68. simdesign/rcmrf/bdim/eu_cdm/beam.py +240 -0
  69. simdesign/rcmrf/bdim/eu_cdm/building.py +175 -0
  70. simdesign/rcmrf/bdim/eu_cdm/column.py +298 -0
  71. simdesign/rcmrf/bdim/eu_cdm/data/loads.json +63 -0
  72. simdesign/rcmrf/bdim/eu_cdm/data/materials.json +20 -0
  73. simdesign/rcmrf/bdim/eu_cdm/data/quality.json +29 -0
  74. simdesign/rcmrf/bdim/eu_cdm/data/rebars.json +9 -0
  75. simdesign/rcmrf/bdim/eu_cdm/infill.py +35 -0
  76. simdesign/rcmrf/bdim/eu_cdm/joint.py +52 -0
  77. simdesign/rcmrf/bdim/eu_cdm/loads.py +98 -0
  78. simdesign/rcmrf/bdim/eu_cdm/materials.py +176 -0
  79. simdesign/rcmrf/bdim/eu_cdm/quality.py +27 -0
  80. simdesign/rcmrf/bdim/eu_cdm/rebars.py +102 -0
  81. simdesign/rcmrf/bdim/eu_cdm/slab.py +17 -0
  82. simdesign/rcmrf/bdim/eu_cdm/stairs.py +17 -0
  83. simdesign/rcmrf/bdim/eu_cdn/__init__.py +27 -0
  84. simdesign/rcmrf/bdim/eu_cdn/analysis.py +33 -0
  85. simdesign/rcmrf/bdim/eu_cdn/beam.py +273 -0
  86. simdesign/rcmrf/bdim/eu_cdn/building.py +153 -0
  87. simdesign/rcmrf/bdim/eu_cdn/column.py +188 -0
  88. simdesign/rcmrf/bdim/eu_cdn/data/loads.json +23 -0
  89. simdesign/rcmrf/bdim/eu_cdn/data/materials.json +13 -0
  90. simdesign/rcmrf/bdim/eu_cdn/data/quality.json +29 -0
  91. simdesign/rcmrf/bdim/eu_cdn/data/rebars.json +9 -0
  92. simdesign/rcmrf/bdim/eu_cdn/infill.py +35 -0
  93. simdesign/rcmrf/bdim/eu_cdn/joint.py +52 -0
  94. simdesign/rcmrf/bdim/eu_cdn/loads.py +98 -0
  95. simdesign/rcmrf/bdim/eu_cdn/materials.py +167 -0
  96. simdesign/rcmrf/bdim/eu_cdn/quality.py +27 -0
  97. simdesign/rcmrf/bdim/eu_cdn/rebars.py +85 -0
  98. simdesign/rcmrf/bdim/eu_cdn/slab.py +17 -0
  99. simdesign/rcmrf/bdim/eu_cdn/stairs.py +17 -0
  100. simdesign/rcmrf/bdim/factory.py +148 -0
  101. simdesign/rcmrf/bdim/tr_0018_dch/__init__.py +32 -0
  102. simdesign/rcmrf/bdim/tr_0018_dch/analysis.py +33 -0
  103. simdesign/rcmrf/bdim/tr_0018_dch/beam.py +479 -0
  104. simdesign/rcmrf/bdim/tr_0018_dch/building.py +433 -0
  105. simdesign/rcmrf/bdim/tr_0018_dch/column.py +330 -0
  106. simdesign/rcmrf/bdim/tr_0018_dch/data/loads.json +124 -0
  107. simdesign/rcmrf/bdim/tr_0018_dch/data/materials.json +13 -0
  108. simdesign/rcmrf/bdim/tr_0018_dch/data/quality.json +29 -0
  109. simdesign/rcmrf/bdim/tr_0018_dch/data/rebars.json +9 -0
  110. simdesign/rcmrf/bdim/tr_0018_dch/infill.py +35 -0
  111. simdesign/rcmrf/bdim/tr_0018_dch/joint.py +52 -0
  112. simdesign/rcmrf/bdim/tr_0018_dch/loads.py +101 -0
  113. simdesign/rcmrf/bdim/tr_0018_dch/materials.py +164 -0
  114. simdesign/rcmrf/bdim/tr_0018_dch/quality.py +28 -0
  115. simdesign/rcmrf/bdim/tr_0018_dch/rebars.py +267 -0
  116. simdesign/rcmrf/bdim/tr_0018_dch/slab.py +17 -0
  117. simdesign/rcmrf/bdim/tr_0018_dch/stairs.py +17 -0
  118. simdesign/rcmrf/bdim/tr_0018_dcm/__init__.py +33 -0
  119. simdesign/rcmrf/bdim/tr_0018_dcm/analysis.py +33 -0
  120. simdesign/rcmrf/bdim/tr_0018_dcm/beam.py +461 -0
  121. simdesign/rcmrf/bdim/tr_0018_dcm/building.py +160 -0
  122. simdesign/rcmrf/bdim/tr_0018_dcm/column.py +307 -0
  123. simdesign/rcmrf/bdim/tr_0018_dcm/data/loads.json +123 -0
  124. simdesign/rcmrf/bdim/tr_0018_dcm/data/materials.json +13 -0
  125. simdesign/rcmrf/bdim/tr_0018_dcm/data/quality.json +29 -0
  126. simdesign/rcmrf/bdim/tr_0018_dcm/data/rebars.json +9 -0
  127. simdesign/rcmrf/bdim/tr_0018_dcm/infill.py +35 -0
  128. simdesign/rcmrf/bdim/tr_0018_dcm/joint.py +52 -0
  129. simdesign/rcmrf/bdim/tr_0018_dcm/loads.py +101 -0
  130. simdesign/rcmrf/bdim/tr_0018_dcm/materials.py +164 -0
  131. simdesign/rcmrf/bdim/tr_0018_dcm/quality.py +28 -0
  132. simdesign/rcmrf/bdim/tr_0018_dcm/rebars.py +267 -0
  133. simdesign/rcmrf/bdim/tr_0018_dcm/slab.py +17 -0
  134. simdesign/rcmrf/bdim/tr_0018_dcm/stairs.py +17 -0
  135. simdesign/rcmrf/bdim/tr_7599/__init__.py +36 -0
  136. simdesign/rcmrf/bdim/tr_7599/analysis.py +33 -0
  137. simdesign/rcmrf/bdim/tr_7599/beam.py +292 -0
  138. simdesign/rcmrf/bdim/tr_7599/building.py +160 -0
  139. simdesign/rcmrf/bdim/tr_7599/column.py +493 -0
  140. simdesign/rcmrf/bdim/tr_7599/data/design_tables.json +22066 -0
  141. simdesign/rcmrf/bdim/tr_7599/data/loads.json +78 -0
  142. simdesign/rcmrf/bdim/tr_7599/data/materials.json +15 -0
  143. simdesign/rcmrf/bdim/tr_7599/data/quality.json +71 -0
  144. simdesign/rcmrf/bdim/tr_7599/data/rebars.json +9 -0
  145. simdesign/rcmrf/bdim/tr_7599/infill.py +35 -0
  146. simdesign/rcmrf/bdim/tr_7599/joint.py +52 -0
  147. simdesign/rcmrf/bdim/tr_7599/loads.py +99 -0
  148. simdesign/rcmrf/bdim/tr_7599/materials.py +164 -0
  149. simdesign/rcmrf/bdim/tr_7599/quality.py +595 -0
  150. simdesign/rcmrf/bdim/tr_7599/rebars.py +250 -0
  151. simdesign/rcmrf/bdim/tr_7599/slab.py +17 -0
  152. simdesign/rcmrf/bdim/tr_7599/stairs.py +17 -0
  153. simdesign/rcmrf/bdim/tr_post18_dch/__init__.py +31 -0
  154. simdesign/rcmrf/bdim/tr_post18_dch/analysis.py +219 -0
  155. simdesign/rcmrf/bdim/tr_post18_dch/beam.py +539 -0
  156. simdesign/rcmrf/bdim/tr_post18_dch/building.py +451 -0
  157. simdesign/rcmrf/bdim/tr_post18_dch/column.py +403 -0
  158. simdesign/rcmrf/bdim/tr_post18_dch/data/loads.json +231 -0
  159. simdesign/rcmrf/bdim/tr_post18_dch/data/materials.json +13 -0
  160. simdesign/rcmrf/bdim/tr_post18_dch/data/quality.json +29 -0
  161. simdesign/rcmrf/bdim/tr_post18_dch/data/rebars.json +9 -0
  162. simdesign/rcmrf/bdim/tr_post18_dch/infill.py +35 -0
  163. simdesign/rcmrf/bdim/tr_post18_dch/joint.py +52 -0
  164. simdesign/rcmrf/bdim/tr_post18_dch/loads.py +119 -0
  165. simdesign/rcmrf/bdim/tr_post18_dch/materials.py +164 -0
  166. simdesign/rcmrf/bdim/tr_post18_dch/quality.py +28 -0
  167. simdesign/rcmrf/bdim/tr_post18_dch/rebars.py +260 -0
  168. simdesign/rcmrf/bdim/tr_post18_dch/slab.py +17 -0
  169. simdesign/rcmrf/bdim/tr_post18_dch/stairs.py +17 -0
  170. simdesign/rcmrf/bdim/tr_post18_dcm/__init__.py +31 -0
  171. simdesign/rcmrf/bdim/tr_post18_dcm/analysis.py +219 -0
  172. simdesign/rcmrf/bdim/tr_post18_dcm/beam.py +527 -0
  173. simdesign/rcmrf/bdim/tr_post18_dcm/building.py +163 -0
  174. simdesign/rcmrf/bdim/tr_post18_dcm/column.py +379 -0
  175. simdesign/rcmrf/bdim/tr_post18_dcm/data/loads.json +231 -0
  176. simdesign/rcmrf/bdim/tr_post18_dcm/data/materials.json +13 -0
  177. simdesign/rcmrf/bdim/tr_post18_dcm/data/quality.json +29 -0
  178. simdesign/rcmrf/bdim/tr_post18_dcm/data/rebars.json +9 -0
  179. simdesign/rcmrf/bdim/tr_post18_dcm/infill.py +35 -0
  180. simdesign/rcmrf/bdim/tr_post18_dcm/joint.py +52 -0
  181. simdesign/rcmrf/bdim/tr_post18_dcm/loads.py +119 -0
  182. simdesign/rcmrf/bdim/tr_post18_dcm/materials.py +164 -0
  183. simdesign/rcmrf/bdim/tr_post18_dcm/quality.py +28 -0
  184. simdesign/rcmrf/bdim/tr_post18_dcm/rebars.py +260 -0
  185. simdesign/rcmrf/bdim/tr_post18_dcm/slab.py +17 -0
  186. simdesign/rcmrf/bdim/tr_post18_dcm/stairs.py +17 -0
  187. simdesign/rcmrf/bnsm/__init__.py +17 -0
  188. simdesign/rcmrf/bnsm/baselib/__init__.py +49 -0
  189. simdesign/rcmrf/bnsm/baselib/beam.py +1175 -0
  190. simdesign/rcmrf/bnsm/baselib/building.py +2500 -0
  191. simdesign/rcmrf/bnsm/baselib/column.py +1425 -0
  192. simdesign/rcmrf/bnsm/baselib/constants.py +35 -0
  193. simdesign/rcmrf/bnsm/baselib/floor.py +144 -0
  194. simdesign/rcmrf/bnsm/baselib/foundation.py +105 -0
  195. simdesign/rcmrf/bnsm/baselib/infill.py +329 -0
  196. simdesign/rcmrf/bnsm/baselib/joint.py +759 -0
  197. simdesign/rcmrf/bnsm/baselib/node.py +99 -0
  198. simdesign/rcmrf/bnsm/cp01/__init__.py +68 -0
  199. simdesign/rcmrf/bnsm/cp01/beam.py +104 -0
  200. simdesign/rcmrf/bnsm/cp01/building.py +95 -0
  201. simdesign/rcmrf/bnsm/cp01/column.py +509 -0
  202. simdesign/rcmrf/bnsm/cp01/floor.py +17 -0
  203. simdesign/rcmrf/bnsm/cp01/foundation.py +17 -0
  204. simdesign/rcmrf/bnsm/cp01/infill.py +60 -0
  205. simdesign/rcmrf/bnsm/cp01/joint.py +34 -0
  206. simdesign/rcmrf/bnsm/cp02/__init__.py +54 -0
  207. simdesign/rcmrf/bnsm/cp02/beam.py +197 -0
  208. simdesign/rcmrf/bnsm/cp02/building.py +286 -0
  209. simdesign/rcmrf/bnsm/cp02/column.py +177 -0
  210. simdesign/rcmrf/bnsm/cp02/floor.py +17 -0
  211. simdesign/rcmrf/bnsm/cp02/foundation.py +17 -0
  212. simdesign/rcmrf/bnsm/cp02/infill.py +17 -0
  213. simdesign/rcmrf/bnsm/cp02/joint.py +34 -0
  214. simdesign/rcmrf/bnsm/cp03/__init__.py +63 -0
  215. simdesign/rcmrf/bnsm/cp03/beam.py +352 -0
  216. simdesign/rcmrf/bnsm/cp03/building.py +505 -0
  217. simdesign/rcmrf/bnsm/cp03/column.py +389 -0
  218. simdesign/rcmrf/bnsm/cp03/floor.py +17 -0
  219. simdesign/rcmrf/bnsm/cp03/foundation.py +17 -0
  220. simdesign/rcmrf/bnsm/cp03/infill.py +17 -0
  221. simdesign/rcmrf/bnsm/cp03/joint.py +488 -0
  222. simdesign/rcmrf/bnsm/dp01/__init__.py +54 -0
  223. simdesign/rcmrf/bnsm/dp01/beam.py +17 -0
  224. simdesign/rcmrf/bnsm/dp01/building.py +95 -0
  225. simdesign/rcmrf/bnsm/dp01/column.py +17 -0
  226. simdesign/rcmrf/bnsm/dp01/floor.py +17 -0
  227. simdesign/rcmrf/bnsm/dp01/foundation.py +17 -0
  228. simdesign/rcmrf/bnsm/dp01/infill.py +17 -0
  229. simdesign/rcmrf/bnsm/dp01/joint.py +34 -0
  230. simdesign/rcmrf/bnsm/dp02/__init__.py +56 -0
  231. simdesign/rcmrf/bnsm/dp02/beam.py +466 -0
  232. simdesign/rcmrf/bnsm/dp02/building.py +95 -0
  233. simdesign/rcmrf/bnsm/dp02/column.py +513 -0
  234. simdesign/rcmrf/bnsm/dp02/floor.py +17 -0
  235. simdesign/rcmrf/bnsm/dp02/foundation.py +17 -0
  236. simdesign/rcmrf/bnsm/dp02/infill.py +115 -0
  237. simdesign/rcmrf/bnsm/dp02/joint.py +34 -0
  238. simdesign/rcmrf/bnsm/dp03/__init__.py +63 -0
  239. simdesign/rcmrf/bnsm/dp03/beam.py +707 -0
  240. simdesign/rcmrf/bnsm/dp03/building.py +95 -0
  241. simdesign/rcmrf/bnsm/dp03/column.py +620 -0
  242. simdesign/rcmrf/bnsm/dp03/floor.py +17 -0
  243. simdesign/rcmrf/bnsm/dp03/foundation.py +17 -0
  244. simdesign/rcmrf/bnsm/dp03/infill.py +17 -0
  245. simdesign/rcmrf/bnsm/dp03/joint.py +34 -0
  246. simdesign/rcmrf/bnsm/dp04/__init__.py +59 -0
  247. simdesign/rcmrf/bnsm/dp04/beam.py +17 -0
  248. simdesign/rcmrf/bnsm/dp04/building.py +95 -0
  249. simdesign/rcmrf/bnsm/dp04/column.py +29 -0
  250. simdesign/rcmrf/bnsm/dp04/floor.py +17 -0
  251. simdesign/rcmrf/bnsm/dp04/foundation.py +17 -0
  252. simdesign/rcmrf/bnsm/dp04/infill.py +17 -0
  253. simdesign/rcmrf/bnsm/dp04/joint.py +34 -0
  254. simdesign/rcmrf/bnsm/factory.py +113 -0
  255. simdesign/rcmrf/geometry/__init__.py +24 -0
  256. simdesign/rcmrf/geometry/base.py +2173 -0
  257. simdesign/rcmrf/geometry/custom.py +145 -0
  258. simdesign/rcmrf/geometry/standard.py +664 -0
  259. simdesign/utils/__init__.py +2 -0
  260. simdesign/utils/mesh.py +686 -0
  261. simdesign/utils/misc.py +357 -0
  262. simdesign/utils/plotter.py +855 -0
  263. simdesign/utils/rcsection.py +1076 -0
  264. simdesign/utils/stats.py +326 -0
  265. simdesign/utils/units.py +33 -0
  266. simdesign-1.0.0b0.dist-info/LICENSE +661 -0
  267. simdesign-1.0.0b0.dist-info/METADATA +151 -0
  268. simdesign-1.0.0b0.dist-info/RECORD +269 -0
  269. simdesign-1.0.0b0.dist-info/WHEEL +4 -0
simdesign/__init__.py ADDED
@@ -0,0 +1,9 @@
1
+ """SimDesign — a framework for the simulated design of buildings.
2
+
3
+ Exposes the ``rcmrf`` subpackage, which orchestrates the BCIM → BDIM → BNSM
4
+ pipeline for Reinforced Concrete Moment Resisting Frames.
5
+ """
6
+
7
+ from . import rcmrf
8
+
9
+ __all__ = ["rcmrf"]
@@ -0,0 +1,214 @@
1
+ """A modular computational framework for the generation and nonlinear
2
+ modelling of reinforced concrete (RC) moment-resisting frames (MRFs).
3
+ It orchestrates the BCIM → BDIM → BNSM pipeline, generating portfolio-level
4
+ building class and design information data (exported CSV files), alongside
5
+ OpenSees-compatible nonlinear numerical models (in Python or Tcl).
6
+ :meth:`~simdesign.rcmrf.generate` serves as the entry point for running the
7
+ pipeline.
8
+
9
+ Pipeline::
10
+
11
+ BCIM (Realisation Layer)
12
+
13
+ BDIM (Design Layer)
14
+
15
+ BNSM (Modelling Layer)
16
+
17
+ OpenSees (Analysis Layer)
18
+ """
19
+
20
+ from typing import Dict, Literal, Tuple, List
21
+ from pathlib import Path
22
+
23
+ from .bcim import BCIM
24
+ from .bdim import BDIM, TaxonomyData
25
+ from .bdim.factory import BuildingBase as BuildingDesign
26
+ from .bnsm import BNSM
27
+ from .bnsm.factory import BuildingBase as BuildingModel
28
+ from .geometry import StandardGeometry, CustomGeometry
29
+
30
+ from ..utils.misc import make_dir
31
+
32
+
33
+ __all__ = ["BCIM", "BDIM", "BNSM",
34
+ "TaxonomyData", "StandardGeometry", "CustomGeometry"]
35
+
36
+
37
+ def generate(
38
+ inputs: Dict[Literal['bcim', 'bnsm'], Dict], outdir: str | Path = None
39
+ ) -> Tuple[BCIM, List[BuildingDesign | None], List[BuildingModel | None]]:
40
+ """Generates BCIM, BDIM and BNSM data by following complete workflow
41
+ in Built Data Environment (BED) SimDesign framework for RC-MRF systems.
42
+
43
+ Parameters
44
+ ----------
45
+ inputs : Dict[Literal['bcim', 'bnsm'], Dict]
46
+ Contains input parameters required for data generation.
47
+ These will replace the defaults obtained for the specified
48
+ `design_class`.
49
+ outdir : str | Path, optional
50
+ Path to the user-defined output directory.
51
+ If None, set to `Path.cwd() / 'Outputs'`. by default None.
52
+
53
+ Returns
54
+ -------
55
+ bcim : BCIM
56
+ Building Class Information Model.
57
+ bdim : List[BuildingDesign | None]
58
+ List of Building Design Information Models (None if design failed).
59
+ bnsm : List[BuildingModel | None]
60
+ List of Building Nonlinear Structural Models (None if design failed).
61
+
62
+ Raises
63
+ ------
64
+ KeyError
65
+ `inputs['bcim']['design_class']` is not specified.
66
+
67
+ Examples
68
+ --------
69
+ Example dictionary to pass as ``inputs``:
70
+
71
+ .. code-block:: python
72
+
73
+ inputs = {
74
+ "bcim": {
75
+ "design_class": "eu_cdh",
76
+ "beta": 0.1,
77
+ "sample_size": 150,
78
+ "num_storeys": 5,
79
+ # Distribution parameters
80
+ "typical_storey_height": {
81
+ "cv": 0.07,
82
+ "mu": 2.90,
83
+ "lower_bound": 2.3,
84
+ "upper_bound": 3.8,
85
+ },
86
+ "staircase_bay_width": {
87
+ "lower_bound": 2.8,
88
+ "upper_bound": 3.2,
89
+ },
90
+ "standard_bay_width": {
91
+ "corr_coeff_xy": -0.92,
92
+ "lower_bound_x": 3.5,
93
+ "upper_bound_x": 7.5,
94
+ "theta_x": 4.5,
95
+ "sigma_x": 0.35,
96
+ "lower_bound_y": 3.5,
97
+ "upper_bound_y": 7.5,
98
+ "theta_y": 4.5,
99
+ "sigma_y": 0.35,
100
+ },
101
+ "steel": {
102
+ "tag": ["S400", "S500"],
103
+ "probability": [0.10, 0.90],
104
+ },
105
+ "concrete": {
106
+ "tag": ["C20/25", "C25/30", "C30/37", "C35/45"],
107
+ "probability": [0.30, 0.45, 0.20, 0.05],
108
+ },
109
+ "ground_storey_height": {
110
+ "maximum": 4.20,
111
+ "factor": [1.0, 1.1, 1.2, 1.3, 1.4],
112
+ "probability": [0.55, 0.10, 0.20, 0.10, 0.05],
113
+ },
114
+ "construction_quality": {"probability": [0.6, 0.3, 0.1]},
115
+ "slab_typology": {
116
+ "ss1_prob_given_ss1_or_hs": 0.50,
117
+ "ss2_prob_given_ss2_or_hs": 0.65,
118
+ "upper_lim_for_min_ss_span_length": 6.0,
119
+ "upper_lim_for_max_ss2_span_ratio": 2.0,
120
+ "staircase_slab_depth": 0.15,
121
+ "floor_slab_thickness": 0.15,
122
+ },
123
+ "wb_prob_given_hs": 0.50,
124
+ "square_column_prob": 0.50,
125
+ "layout": "all",
126
+ "seed": 1993,
127
+ },
128
+ "bnsm": {
129
+ "model": "CP03",
130
+ "load_factors": {"G": 1.0, "Q": 0.3},
131
+ "mass_factors": {"G": 1.0, "Q": 0.3},
132
+ "scheme": "EQL",
133
+ "max_drift": 0.05,
134
+ "dincr": 0.001,
135
+ "opensees": "py",
136
+ },
137
+ }
138
+ """
139
+
140
+ # Get bcim generation settings
141
+ bcim_inputs = inputs.get('bcim')
142
+ if not bcim_inputs or not bcim_inputs.get('design_class'):
143
+ raise KeyError('design_class in bcim is not specified!')
144
+
145
+ # Get bnsm settings
146
+ bnsm_inputs = inputs.get('bnsm')
147
+ lang = 'py'
148
+ if bnsm_inputs is None:
149
+ bnsm_inputs = {}
150
+ elif bnsm_inputs.get('opensees'):
151
+ lang = bnsm_inputs.pop('opensees')
152
+
153
+ # Create output directory
154
+ if outdir is None:
155
+ outdir = Path.cwd() / 'Outputs'
156
+ else:
157
+ outdir = Path(outdir)
158
+ bcim_path = outdir / "BCIM.csv"
159
+ bdim_path = outdir / 'BDIM'
160
+ bnsm_path = outdir / 'BNSM'
161
+ make_dir(outdir)
162
+ make_dir(bdim_path)
163
+ make_dir(bnsm_path)
164
+
165
+ # Initialize BCIM
166
+ bcim = BCIM()
167
+ # Generate a building portfolio
168
+ bcim.generate(**bcim_inputs)
169
+ # BDIM database
170
+ bdim = []
171
+ # BNSM database
172
+ bnsm = []
173
+ # Loop through each building in portfolio
174
+ for i, taxonomy in enumerate(bcim.taxonomy):
175
+ print("----------------------------------------------------")
176
+ print(f"Designing {taxonomy.design_class} building",
177
+ f"{i + 1}/{len(bcim.taxonomy)} for beta={taxonomy.beta}g")
178
+ # Initialize BDIM
179
+ bdim_ = BDIM(taxonomy)
180
+ # To ensure the reproducibility of BDIM set the seed
181
+ bdim_.set_seed_for_quality_adjustments(bcim.inputs.seed)
182
+ # Make simumlated design
183
+ bdim_.run_iterative_design_algorithm()
184
+ # Update BCIM in case some properties changed during design
185
+ if bdim_.ok: # If the design is ok, continue with the model
186
+ bcim.column_section[i] = bdim_.column_section
187
+ bcim.beam_type[i] = bdim_.beam_type
188
+ bcim.concrete_grade[i] = bdim_.concrete_grade
189
+ bcim.steel_grade[i] = bdim_.steel_grade
190
+ # Export to csv
191
+ bdim_.to_csv(bdim_path / f'Building_{i + 1}')
192
+ # Initialize BNSM
193
+ kwargs = bnsm_inputs.copy()
194
+ kwargs['design'] = bdim_
195
+ bnsm_ = BNSM(**kwargs)
196
+ if lang == 'py':
197
+ # Export numerical models for OpenSeesPy
198
+ bnsm_.to_py(bnsm_path / f'Building_{i + 1}')
199
+ elif lang == 'tcl':
200
+ # Export numerical models for OpenSeesTcl
201
+ bnsm_.to_tcl(bnsm_path / f'Building_{i + 1}')
202
+ # Plot the model and save
203
+ bnsm_.plot_model(directory=bnsm_path / f'Building_{i + 1}',
204
+ show=False)
205
+ # Add to the BDIM and BNSM databases
206
+ bdim.append(bdim_)
207
+ bnsm.append(bnsm_)
208
+ else:
209
+ bdim.append(None)
210
+ bnsm.append(None)
211
+ # Save bcim information
212
+ bcim.to_csv(bcim_path)
213
+
214
+ return bcim, bdim, bnsm
@@ -0,0 +1,27 @@
1
+ """
2
+ Building Class Information Model (BCIM) package.
3
+
4
+ This package generates the information dataset representing the general
5
+ characteristics of a building portfolio. It constitutes the first step of
6
+ the BED framework pipeline (BCIM → BDIM → BNSM), producing realisations
7
+ by sampling secondary building attributes from class-specific probability
8
+ distributions and decision trees, conditioned on primary attributes (e.g.,
9
+ design class, number of storeys, lateral load factor).
10
+
11
+ Sampled attributes include geometry variables (storey heights, bay widths,
12
+ floor layout), taxonomy (slab type, beam type, column section, material
13
+ grades, construction quality), and masonry infill configuration. The main
14
+ entry point is the :class:`~simdesign.rcmrf.bcim.factory.BCIM` class.
15
+
16
+ Example
17
+ -------
18
+ >>> from bcim import BCIM
19
+ >>> model = BCIM()
20
+ >>> model.generate(design_class="eu_cdh", beta=0.1
21
+ num_storeys=4, sample_size=150)
22
+ >>> model.to_csv("path/to/output.csv")
23
+ """
24
+
25
+ from .factory import BCIM
26
+
27
+ __all__ = ["BCIM"]
@@ -0,0 +1,59 @@
1
+ {
2
+ "typical_storey_height":
3
+ {
4
+ "cv": 0.07,
5
+ "mu": 2.90,
6
+ "lower_bound": 2.3,
7
+ "upper_bound": 3.8
8
+ },
9
+ "staircase_bay_width":
10
+ {
11
+ "lower_bound": 2.8,
12
+ "upper_bound": 3.2
13
+ },
14
+ "standard_bay_width":
15
+ {
16
+ "corr_coeff_xy": -0.92,
17
+ "lower_bound_x": 3.5,
18
+ "upper_bound_x": 7.5,
19
+ "theta_x": 4.5,
20
+ "sigma_x": 0.35,
21
+ "lower_bound_y": 3.5,
22
+ "upper_bound_y": 7.5,
23
+ "theta_y": 4.5,
24
+ "sigma_y": 0.35
25
+ },
26
+ "steel":
27
+ {
28
+ "grade": ["S400", "S500"],
29
+ "probability": [0.10, 0.90]
30
+ },
31
+ "concrete":
32
+ {
33
+ "grade": ["C20/25", "C25/30", "C30/37", "C35/45"],
34
+ "probability": [0.30, 0.45, 0.20, 0.05]
35
+ },
36
+ "ground_storey_height":
37
+ {
38
+ "maximum": 4.20,
39
+ "factor": [1.0, 1.1, 1.2, 1.3, 1.4],
40
+ "probability": [0.55, 0.10, 0.20, 0.10, 0.05]
41
+ },
42
+ "construction_quality":
43
+ {
44
+ "probability": [0.6, 0.3, 0.1]
45
+ },
46
+ "slab_typology":
47
+ {
48
+ "ss1_prob_given_ss1_or_hs": 0.50,
49
+ "ss2_prob_given_ss2_or_hs": 0.65
50
+ },
51
+ "wb_prob_given_hs": 0.50,
52
+ "square_column_prob": 0.50,
53
+ "layout": "all",
54
+ "beta": 0.1,
55
+ "num_storeys": 5,
56
+ "design_class": "eu_cdh",
57
+ "seed": 1993,
58
+ "sample_size": 150
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "typical_storey_height":
3
+ {
4
+ "cv": 0.07,
5
+ "mu": 2.90,
6
+ "lower_bound": 2.3,
7
+ "upper_bound": 3.8
8
+ },
9
+ "staircase_bay_width":
10
+ {
11
+ "lower_bound": 2.8,
12
+ "upper_bound": 3.2
13
+ },
14
+ "standard_bay_width":
15
+ {
16
+ "corr_coeff_xy": -0.92,
17
+ "lower_bound_x": 3.5,
18
+ "upper_bound_x": 7.5,
19
+ "theta_x": 4.5,
20
+ "sigma_x": 0.35,
21
+ "lower_bound_y": 3.5,
22
+ "upper_bound_y": 6.0,
23
+ "theta_y": 4.5,
24
+ "sigma_y": 0.35
25
+ },
26
+ "steel":
27
+ {
28
+ "grade": ["A24", "A40", "A50"],
29
+ "probability": [0.20, 0.70, 0.10]
30
+ },
31
+ "concrete":
32
+ {
33
+ "grade": ["B180", "B225", "B300"],
34
+ "probability": [0.40, 0.40, 0.20]
35
+ },
36
+ "ground_storey_height":
37
+ {
38
+ "maximum": 4.20,
39
+ "factor": [1.0, 1.1, 1.2, 1.3, 1.4],
40
+ "probability": [0.55, 0.10, 0.20, 0.10, 0.05]
41
+ },
42
+ "construction_quality":
43
+ {
44
+ "probability": [0.6, 0.3, 0.1]
45
+ },
46
+ "slab_typology":
47
+ {
48
+ "ss1_prob_given_ss1_or_hs": 0.50,
49
+ "ss2_prob_given_ss2_or_hs": 0.65
50
+ },
51
+ "wb_prob_given_hs": 0.50,
52
+ "square_column_prob": 0.50,
53
+ "layout": "all",
54
+ "beta": 0.1,
55
+ "num_storeys": 5,
56
+ "design_class": "eu_cdl",
57
+ "seed": 1993,
58
+ "sample_size": 150
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "typical_storey_height":
3
+ {
4
+ "cv": 0.07,
5
+ "mu": 2.90,
6
+ "lower_bound": 2.3,
7
+ "upper_bound": 3.8
8
+ },
9
+ "staircase_bay_width":
10
+ {
11
+ "lower_bound": 2.8,
12
+ "upper_bound": 3.2
13
+ },
14
+ "standard_bay_width":
15
+ {
16
+ "corr_coeff_xy": -0.92,
17
+ "lower_bound_x": 3.5,
18
+ "upper_bound_x": 7.5,
19
+ "theta_x": 4.5,
20
+ "sigma_x": 0.35,
21
+ "lower_bound_y": 3.5,
22
+ "upper_bound_y": 7.5,
23
+ "theta_y": 4.5,
24
+ "sigma_y": 0.35
25
+ },
26
+ "steel":
27
+ {
28
+ "grade": ["A400", "A500"],
29
+ "probability": [0.50, 0.50]
30
+ },
31
+ "concrete":
32
+ {
33
+ "grade": ["B20", "B25", "B30"],
34
+ "probability": [0.30, 0.30, 0.40]
35
+ },
36
+ "ground_storey_height":
37
+ {
38
+ "maximum": 4.20,
39
+ "factor": [1.0, 1.1, 1.2, 1.3, 1.4],
40
+ "probability": [0.55, 0.10, 0.20, 0.10, 0.05]
41
+ },
42
+ "construction_quality":
43
+ {
44
+ "probability": [0.6, 0.3, 0.1]
45
+ },
46
+ "slab_typology":
47
+ {
48
+ "ss1_prob_given_ss1_or_hs": 0.50,
49
+ "ss2_prob_given_ss2_or_hs": 0.65
50
+ },
51
+ "wb_prob_given_hs": 0.50,
52
+ "square_column_prob": 0.50,
53
+ "layout": "all",
54
+ "beta": 0.1,
55
+ "num_storeys": 5,
56
+ "design_class": "eu_cdm",
57
+ "seed": 1993,
58
+ "sample_size": 150
59
+ }
@@ -0,0 +1,59 @@
1
+ {
2
+ "typical_storey_height":
3
+ {
4
+ "cv": 0.07,
5
+ "mu": 2.90,
6
+ "lower_bound": 2.3,
7
+ "upper_bound": 3.8
8
+ },
9
+ "staircase_bay_width":
10
+ {
11
+ "lower_bound": 2.8,
12
+ "upper_bound": 3.2
13
+ },
14
+ "standard_bay_width":
15
+ {
16
+ "corr_coeff_xy": -0.92,
17
+ "lower_bound_x": 3.5,
18
+ "upper_bound_x": 7.5,
19
+ "theta_x": 4.5,
20
+ "sigma_x": 0.35,
21
+ "lower_bound_y": 3.5,
22
+ "upper_bound_y": 6.0,
23
+ "theta_y": 4.5,
24
+ "sigma_y": 0.35
25
+ },
26
+ "steel":
27
+ {
28
+ "grade": ["A24", "A40"],
29
+ "probability": [0.60, 0.40]
30
+ },
31
+ "concrete":
32
+ {
33
+ "grade": ["B160", "B180", "B225"],
34
+ "probability": [0.40, 0.40, 0.20]
35
+ },
36
+ "ground_storey_height":
37
+ {
38
+ "maximum": 4.20,
39
+ "factor": [1.0, 1.1, 1.2, 1.3, 1.4],
40
+ "probability": [0.55, 0.10, 0.20, 0.10, 0.05]
41
+ },
42
+ "construction_quality":
43
+ {
44
+ "probability": [0.6, 0.3, 0.1]
45
+ },
46
+ "slab_typology":
47
+ {
48
+ "ss1_prob_given_ss1_or_hs": 0.50,
49
+ "ss2_prob_given_ss2_or_hs": 0.65
50
+ },
51
+ "wb_prob_given_hs": 0.50,
52
+ "square_column_prob": 0.50,
53
+ "layout": "all",
54
+ "beta": 0.1,
55
+ "num_storeys": 5,
56
+ "design_class": "eu_cdn",
57
+ "seed": 1993,
58
+ "sample_size": 150
59
+ }
@@ -0,0 +1,12 @@
1
+ tag,num_bays_x,num_bays_y,stairs_grid_x,stairs_grid_y
2
+ B01,3,2,1,0
3
+ B02,5,2,2,0
4
+ B03,7,2,3,0
5
+ B04,3,3,1,0
6
+ B04b,3,3,1,1
7
+ B05,5,3,2,0
8
+ B06,7,3,3,0
9
+ B07,3,3,0,0
10
+ B08,3,4,0,0
11
+ B09,3,5,0,0
12
+ B10,3,6,0,0
@@ -0,0 +1,73 @@
1
+ {
2
+ "typical_storey_height":
3
+ {
4
+ "cv": 0.08,
5
+ "mu": 2.84,
6
+ "lower_bound": 2.5,
7
+ "upper_bound": 3.3
8
+ },
9
+ "staircase_bay_width":
10
+ {
11
+ "lower_bound": 2.8,
12
+ "upper_bound": 3.2
13
+ },
14
+ "standard_bay_width":
15
+ {
16
+ "corr_coeff_xy": -0.92,
17
+ "lower_bound_x": 3.5,
18
+ "upper_bound_x": 7.5,
19
+ "theta_x": 4.5,
20
+ "sigma_x": 0.35,
21
+ "lower_bound_y": 3.5,
22
+ "upper_bound_y": 7.5,
23
+ "theta_y": 4.5,
24
+ "sigma_y": 0.35
25
+ },
26
+ "steel":
27
+ {
28
+ "grade": ["S420"],
29
+ "probability": [1.0]
30
+ },
31
+ "concrete":
32
+ {
33
+ "grade": ["C20", "C25", "C30", "C35"],
34
+ "probability": [0.40, 0.40, 0.15, 0.05]
35
+ },
36
+ "ground_storey_height":
37
+ {
38
+ "maximum": 4.20,
39
+ "factor": [1.0, 1.1, 1.2, 1.3],
40
+ "probability": [0.88, 0.05, 0.05, 0.02]
41
+ },
42
+ "construction_quality":
43
+ {
44
+ "probability": [0.60, 0.30, 0.10]
45
+ },
46
+ "slab_typology":
47
+ {
48
+ "ss1_prob_given_ss1_or_hs": 1.0,
49
+ "ss2_prob_given_ss2_or_hs": 1.0,
50
+ "max_ss_short_span": 7.5
51
+ },
52
+ "infill_configuration":
53
+ {
54
+ "configuration": [1, 2],
55
+ "probability": [1.0, 0.0]
56
+ },
57
+ "exterior_infill_type":
58
+ {
59
+ "probability": [1.0, 0.0, 0.0]
60
+ },
61
+ "interior_infill_type":
62
+ {
63
+ "probability": [1.0, 0.0, 0.0]
64
+ },
65
+ "wb_prob_given_hs": 1.0,
66
+ "square_column_prob": 0.05,
67
+ "layout": "all",
68
+ "beta": 0.086,
69
+ "num_storeys": 4,
70
+ "design_class": "tr_0018_dch",
71
+ "seed": 1994,
72
+ "sample_size": 150
73
+ }
@@ -0,0 +1,72 @@
1
+ {
2
+ "typical_storey_height":
3
+ {
4
+ "cv": 0.08,
5
+ "mu": 2.84,
6
+ "lower_bound": 2.5,
7
+ "upper_bound": 3.3
8
+ },
9
+ "staircase_bay_width":
10
+ {
11
+ "lower_bound": 2.8,
12
+ "upper_bound": 3.2
13
+ },
14
+ "standard_bay_width":
15
+ {
16
+ "corr_coeff_xy": -0.92,
17
+ "lower_bound_x": 3.5,
18
+ "upper_bound_x": 7.5,
19
+ "theta_x": 4.5,
20
+ "sigma_x": 0.35,
21
+ "lower_bound_y": 3.5,
22
+ "upper_bound_y": 7.5,
23
+ "theta_y": 4.5,
24
+ "sigma_y": 0.35
25
+ },
26
+ "steel":
27
+ {
28
+ "grade": ["S420"],
29
+ "probability": [1.0]
30
+ },
31
+ "concrete":
32
+ {
33
+ "grade": ["C20", "C25", "C30", "C35"],
34
+ "probability": [0.40, 0.40, 0.15, 0.05]
35
+ },
36
+ "ground_storey_height":
37
+ {
38
+ "maximum": 4.20,
39
+ "factor": [1.0, 1.1, 1.2, 1.3],
40
+ "probability": [0.70, 0.20, 0.08, 0.02]
41
+ },
42
+ "construction_quality":
43
+ {
44
+ "probability": [0.60, 0.30, 0.10]
45
+ },
46
+ "slab_typology":
47
+ {
48
+ "ss1_prob_given_ss1_or_hs": 0.6,
49
+ "ss2_prob_given_ss2_or_hs": 0.8
50
+ },
51
+ "infill_configuration":
52
+ {
53
+ "configuration": [1, 2],
54
+ "probability": [1.0, 0.0]
55
+ },
56
+ "exterior_infill_type":
57
+ {
58
+ "probability": [1.0, 0.0, 0.0]
59
+ },
60
+ "interior_infill_type":
61
+ {
62
+ "probability": [1.0, 0.0, 0.0]
63
+ },
64
+ "wb_prob_given_hs": 1.0,
65
+ "square_column_prob": 0.05,
66
+ "layout": "all",
67
+ "beta": 0.086,
68
+ "num_storeys": 4,
69
+ "design_class": "tr_0018_dcm",
70
+ "seed": 1994,
71
+ "sample_size": 150
72
+ }