@@ -14,15 +14,18 @@ def concrete_rectangular_section(
14
14
n_bot : int ,
15
15
n_circle : int ,
16
16
cover : float ,
17
+ dia_side : float = None ,
18
+ n_side : int = 0 ,
17
19
area_top : float = None ,
18
20
area_bot : float = None ,
21
+ area_side : float = None ,
19
22
conc_mat : pre .Material = pre .DEFAULT_MATERIAL ,
20
23
steel_mat : pre .Material = pre .DEFAULT_MATERIAL ,
21
24
) -> geometry .CompoundGeometry :
22
25
"""Constructs a concrete rectangular section of width *b* and depth *d*, with
23
26
*n_top* top steel bars of diameter *dia_top*, *n_bot* bottom steel bars of diameter
24
- *dia_bot*, discretised with *n_circle* points with equal side and top/bottom
25
- *cover* to the steel.
27
+ *dia_bot*, *n_side* left & right side steel bars of diameter *dia_side* discretised
28
+ with *n_circle* points with equal side and top/bottom *cover* to the steel.
26
29
27
30
:param float b: Concrete section width
28
31
:param float d: Concrete section depth
@@ -32,18 +35,23 @@ def concrete_rectangular_section(
32
35
:param int n_bot: Number of bottom steel reinforcing bars
33
36
:param int n_circle: Number of points discretising the steel reinforcing bars
34
37
:param float cover: Side and bottom cover to the steel reinforcing bars
38
+ :param float dia_side: If provided, diameter of the side steel reinforcing bars
39
+ :param int n_side: If provided, number of side bars either side of the section
35
40
:param float area_top: If provided, constructs top reinforcing bars based on their
36
41
area rather than diameter (prevents the underestimation of steel area due to
37
42
circle discretisation)
38
43
:param float area_bot: If provided, constructs bottom reinforcing bars based on
39
44
their area rather than diameter (prevents the underestimation of steel area due
40
45
to circle discretisation)
46
+ :param float area_side: If provided, constructs side reinforcing bars based on
47
+ their area rather than diameter (prevents the underestimation of steel area due
48
+ to circle discretisation)
41
49
:param Optional[sectionproperties.pre.pre.Material] conc_mat: Material to
42
50
associate with the concrete
43
51
:param Optional[sectionproperties.pre.pre.Material] steel_mat: Material to
44
52
associate with the steel
45
53
46
- :raises ValueErorr : If the number of bars is not greater than or equal to 2 in an
54
+ :raises ValueError : If the number of bars is not greater than or equal to 2 in an
47
55
active layer
48
56
49
57
The following example creates a 600D x 300W concrete beam with 3N20 bottom steel
@@ -86,12 +94,18 @@ def concrete_rectangular_section(
86
94
# create rectangular concrete geometry
87
95
geom = primitive_sections .rectangular_section (b = b , d = d , material = conc_mat )
88
96
89
- # calculate reinforcing bar dimensions
97
+ # calculate reinforcing bar dimensions for top and bottom layers
90
98
x_i_top = cover + dia_top / 2
91
99
x_i_bot = cover + dia_bot / 2
92
100
spacing_top = (b - 2 * cover - dia_top ) / (n_top - 1 )
93
101
spacing_bot = (b - 2 * cover - dia_bot ) / (n_bot - 1 )
94
102
103
+ # calculate reinforcing bar dimensions for side layers if specified
104
+ if n_side != 0 :
105
+ x_i_side_left = cover + dia_side / 2
106
+ x_i_side_right = b - x_i_side_left
107
+ spacing_side = (d - 2 * cover - dia_top / 2 - dia_bot / 2 ) / (n_side + 1 )
108
+
95
109
# add top bars
96
110
for i in range (n_top ):
97
111
if area_top :
@@ -126,6 +140,31 @@ def concrete_rectangular_section(
126
140
127
141
geom = (geom - bar ) + bar
128
142
143
+ # add side bars if specified
144
+ if n_side != 0 :
145
+ for i in range (n_side ):
146
+ if area_side :
147
+ bar_left = primitive_sections .circular_section_by_area (
148
+ area = area_side , n = n_circle , material = steel_mat
149
+ )
150
+ bar_right = bar_left
151
+ else :
152
+ bar_left = primitive_sections .circular_section (
153
+ d = dia_side , n = n_circle , material = steel_mat
154
+ )
155
+ bar_right = bar_left
156
+
157
+ bar_left = bar_left .shift_section (
158
+ x_offset = x_i_side_left ,
159
+ y_offset = cover + dia_bot / 2 + spacing_side * (i + 1 ),
160
+ )
161
+ bar_right = bar_right .shift_section (
162
+ x_offset = x_i_side_right ,
163
+ y_offset = cover + dia_bot / 2 + spacing_side * (i + 1 ),
164
+ )
165
+
166
+ geom = (geom - bar_left - bar_right ) + bar_left + bar_right
167
+
129
168
return geom
130
169
131
170
0 commit comments