Skip to content

Commit 3f9ebeb

Browse files
committed
Update concrete_rectangular_section to resolve merge conflict with master
1 parent b6e1053 commit 3f9ebeb

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

sectionproperties/pre/library/concrete_sections.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ def concrete_rectangular_section(
1515
n_bot: int,
1616
n_circle: int,
1717
cover: float,
18+
dia_side: float = None,
19+
n_side: int = 0,
1820
area_top: float = None,
1921
area_bot: float = None,
22+
area_side: float = None,
2023
conc_mat: pre.Material = pre.DEFAULT_MATERIAL,
2124
steel_mat: pre.Material = pre.DEFAULT_MATERIAL,
2225
) -> geometry.CompoundGeometry:
@@ -33,12 +36,17 @@ def concrete_rectangular_section(
3336
:param int n_bot: Number of bottom steel reinforcing bars
3437
:param int n_circle: Number of points discretising the steel reinforcing bars
3538
: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
3641
:param float area_top: If provided, constructs top reinforcing bars based on their
3742
area rather than diameter (prevents the underestimation of steel area due to
3843
circle discretisation)
3944
:param float area_bot: If provided, constructs bottom reinforcing bars based on
4045
their area rather than diameter (prevents the underestimation of steel area due
4146
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)
4250
:param Optional[sectionproperties.pre.pre.Material] conc_mat: Material to
4351
associate with the concrete
4452
:param Optional[sectionproperties.pre.pre.Material] steel_mat: Material to
@@ -93,10 +101,18 @@ def concrete_rectangular_section(
93101
spacing_top = (b - 2 * cover - dia_top) / (n_top - 1)
94102
spacing_bot = (b - 2 * cover - dia_bot) / (n_bot - 1)
95103

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+
96110
if area_top is None:
97111
area_top = np.pi * dia_top**2 / 4
98112
if area_bot is None:
99113
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
100116

101117
# add top bars
102118
for i in range(n_top):
@@ -118,6 +134,25 @@ def concrete_rectangular_section(
118134
)
119135
geom = (geom - bar) + bar
120136

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+
121156
return geom
122157

123158

0 commit comments

Comments
 (0)