@@ -15,8 +15,11 @@ def concrete_rectangular_section(
15
15
n_bot : int ,
16
16
n_circle : int ,
17
17
cover : float ,
18
+ dia_side : float = None ,
19
+ n_side : int = 0 ,
18
20
area_top : float = None ,
19
21
area_bot : float = None ,
22
+ area_side : float = None ,
20
23
conc_mat : pre .Material = pre .DEFAULT_MATERIAL ,
21
24
steel_mat : pre .Material = pre .DEFAULT_MATERIAL ,
22
25
) -> geometry .CompoundGeometry :
@@ -33,12 +36,17 @@ def concrete_rectangular_section(
33
36
:param int n_bot: Number of bottom steel reinforcing bars
34
37
:param int n_circle: Number of points discretising the steel reinforcing bars
35
38
:param float cover: Side and bottom cover to the steel reinforcing bars
39
+ :param float dia_side: If provided, diameter of the side steel reinforcing bars
40
+ :param int n_side: If provided, number of side bars either side of the section
36
41
:param float area_top: If provided, constructs top reinforcing bars based on their
37
42
area rather than diameter (prevents the underestimation of steel area due to
38
43
circle discretisation)
39
44
:param float area_bot: If provided, constructs bottom reinforcing bars based on
40
45
their area rather than diameter (prevents the underestimation of steel area due
41
46
to circle discretisation)
47
+ :param float area_side: If provided, constructs side reinforcing bars based on
48
+ their area rather than diameter (prevents the underestimation of steel area due
49
+ to circle discretisation)
42
50
:param Optional[sectionproperties.pre.pre.Material] conc_mat: Material to
43
51
associate with the concrete
44
52
:param Optional[sectionproperties.pre.pre.Material] steel_mat: Material to
@@ -93,10 +101,18 @@ def concrete_rectangular_section(
93
101
spacing_top = (b - 2 * cover - dia_top ) / (n_top - 1 )
94
102
spacing_bot = (b - 2 * cover - dia_bot ) / (n_bot - 1 )
95
103
104
+ # calculate reinforcing bar dimensions for side layers if specified
105
+ if n_side != 0 :
106
+ x_i_side_left = cover + dia_side / 2
107
+ x_i_side_right = b - x_i_side_left
108
+ spacing_side = (d - 2 * cover - dia_top / 2 - dia_bot / 2 ) / (n_side + 1 )
109
+
96
110
if area_top is None :
97
111
area_top = np .pi * dia_top ** 2 / 4
98
112
if area_bot is None :
99
113
area_bot = np .pi * dia_bot ** 2 / 4
114
+ if area_side is None and dia_side is not None :
115
+ area_side = np .pi * dia_side ** 2 / 4
100
116
101
117
# add top bars
102
118
for i in range (n_top ):
@@ -118,6 +134,25 @@ def concrete_rectangular_section(
118
134
)
119
135
geom = (geom - bar ) + bar
120
136
137
+ # add side bars if specified
138
+ if n_side != 0 :
139
+ for i in range (n_side ):
140
+ bar_left = primitive_sections .circular_section_by_area (
141
+ area = area_side , n = n_circle , material = steel_mat
142
+ )
143
+ bar_right = bar_left
144
+
145
+ bar_left = bar_left .shift_section (
146
+ x_offset = x_i_side_left ,
147
+ y_offset = cover + dia_bot / 2 + spacing_side * (i + 1 ),
148
+ )
149
+ bar_right = bar_right .shift_section (
150
+ x_offset = x_i_side_right ,
151
+ y_offset = cover + dia_bot / 2 + spacing_side * (i + 1 ),
152
+ )
153
+
154
+ geom = (geom - bar_left - bar_right ) + bar_left + bar_right
155
+
121
156
return geom
122
157
123
158
0 commit comments