structuralcodes 0.0.1__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.
Potentially problematic release.
This version of structuralcodes might be problematic. Click here for more details.
- structuralcodes/__init__.py +17 -0
- structuralcodes/codes/__init__.py +79 -0
- structuralcodes/codes/ec2_2004/__init__.py +133 -0
- structuralcodes/codes/ec2_2004/_concrete_material_properties.py +239 -0
- structuralcodes/codes/ec2_2004/_reinforcement_material_properties.py +104 -0
- structuralcodes/codes/ec2_2004/_section_7_3_crack_control.py +941 -0
- structuralcodes/codes/ec2_2004/annex_b_shrink_and_creep.py +257 -0
- structuralcodes/codes/ec2_2004/shear.py +506 -0
- structuralcodes/codes/ec2_2023/__init__.py +104 -0
- structuralcodes/codes/ec2_2023/_annexB_time_dependent.py +17 -0
- structuralcodes/codes/ec2_2023/_section5_materials.py +1160 -0
- structuralcodes/codes/ec2_2023/_section9_sls.py +325 -0
- structuralcodes/codes/mc2010/__init__.py +169 -0
- structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py +704 -0
- structuralcodes/codes/mc2010/_concrete_interface_different_casting_times.py +104 -0
- structuralcodes/codes/mc2010/_concrete_material_properties.py +463 -0
- structuralcodes/codes/mc2010/_concrete_punching.py +543 -0
- structuralcodes/codes/mc2010/_concrete_shear.py +749 -0
- structuralcodes/codes/mc2010/_concrete_torsion.py +164 -0
- structuralcodes/codes/mc2010/_reinforcement_material_properties.py +105 -0
- structuralcodes/core/__init__.py +1 -0
- structuralcodes/core/_section_results.py +211 -0
- structuralcodes/core/base.py +260 -0
- structuralcodes/geometry/__init__.py +25 -0
- structuralcodes/geometry/_geometry.py +875 -0
- structuralcodes/geometry/_steel_sections.py +2155 -0
- structuralcodes/materials/__init__.py +9 -0
- structuralcodes/materials/concrete/__init__.py +82 -0
- structuralcodes/materials/concrete/_concrete.py +114 -0
- structuralcodes/materials/concrete/_concreteEC2_2004.py +477 -0
- structuralcodes/materials/concrete/_concreteEC2_2023.py +435 -0
- structuralcodes/materials/concrete/_concreteMC2010.py +494 -0
- structuralcodes/materials/constitutive_laws.py +979 -0
- structuralcodes/materials/reinforcement/__init__.py +84 -0
- structuralcodes/materials/reinforcement/_reinforcement.py +172 -0
- structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +103 -0
- structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +93 -0
- structuralcodes/materials/reinforcement/_reinforcementMC2010.py +98 -0
- structuralcodes/sections/__init__.py +23 -0
- structuralcodes/sections/_generic.py +1249 -0
- structuralcodes/sections/_reinforcement.py +115 -0
- structuralcodes/sections/section_integrators/__init__.py +14 -0
- structuralcodes/sections/section_integrators/_factory.py +41 -0
- structuralcodes/sections/section_integrators/_fiber_integrator.py +238 -0
- structuralcodes/sections/section_integrators/_marin_integration.py +47 -0
- structuralcodes/sections/section_integrators/_marin_integrator.py +222 -0
- structuralcodes/sections/section_integrators/_section_integrator.py +49 -0
- structuralcodes-0.0.1.dist-info/METADATA +40 -0
- structuralcodes-0.0.1.dist-info/RECORD +50 -0
- structuralcodes-0.0.1.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
"""Design rules according to EN 1992-1-1 regarding shear."""
|
|
2
|
+
|
|
3
|
+
import math
|
|
4
|
+
|
|
5
|
+
# General functions
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# Part of Equation (6.2).
|
|
9
|
+
def _k(d: float) -> float:
|
|
10
|
+
"""Compute a correction factor.
|
|
11
|
+
|
|
12
|
+
Defined in EN 1992-1-1 (2005), Eq. (6.2).
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
d (float): The effective depth of the cross-section in mm.
|
|
16
|
+
|
|
17
|
+
Returns:
|
|
18
|
+
float: Correction factor to account for the cross-sectional size on the
|
|
19
|
+
shear resistance.
|
|
20
|
+
"""
|
|
21
|
+
return min(1.0 + math.sqrt(200.0 / d), 2.0)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Part of Equation (6.2).
|
|
25
|
+
def _rho_L(Asl: float, bw: float, d: float) -> float:
|
|
26
|
+
"""Compute the longitudinal reinforcement ratio.
|
|
27
|
+
|
|
28
|
+
Defined in EN 1992-1-1 (2005), Eq. (6.2).
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
Asl (float): The cross-sectional area of the tensile reinforcement,
|
|
32
|
+
anchored at least (lbd + d) beyond the considered cross-section, in
|
|
33
|
+
mm2.
|
|
34
|
+
bw (float): The smallest width of the cross-section in tension in mm.
|
|
35
|
+
d (float): The effective depth of the cross-section in mm.
|
|
36
|
+
|
|
37
|
+
Returns:
|
|
38
|
+
float: The maximum allowable reinforcement ratio of the longitudinal
|
|
39
|
+
reinforcement, unitless.
|
|
40
|
+
"""
|
|
41
|
+
return min(Asl / (bw * d), 0.02)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# Part of Equation(6.2).
|
|
45
|
+
def _sigma_cp(NEd: float, Ac: float, fcd: float) -> float:
|
|
46
|
+
"""Calculate the average prestress stress in the cross-section.
|
|
47
|
+
|
|
48
|
+
Defined in EN 1992-1-1 (2005), Eq. (6.2).
|
|
49
|
+
|
|
50
|
+
Args:
|
|
51
|
+
NEd (float): The normal force in the cross-section due to loading or
|
|
52
|
+
prestress (NEd > 0 for compression) in N.
|
|
53
|
+
Ac (float): The cross-sectional area of the concrete in mm2.
|
|
54
|
+
fcd (float): The design compressive strength in MPa.
|
|
55
|
+
|
|
56
|
+
Returns:
|
|
57
|
+
float: The maximum allowable average prestress in the cross-section in
|
|
58
|
+
MPa.
|
|
59
|
+
"""
|
|
60
|
+
return min(NEd / Ac, 0.2 * fcd)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# Part of Equation (6.4)
|
|
64
|
+
def _alpha_l(L_x, L_pt2) -> float:
|
|
65
|
+
"""Compute the relative anchorage length for prestreched prestressing
|
|
66
|
+
steel.
|
|
67
|
+
|
|
68
|
+
Defined in EN 1992-1-1 (2005), Eq. (6.4).
|
|
69
|
+
|
|
70
|
+
Args:
|
|
71
|
+
L_x (float): Distance from the considered cross-section until the
|
|
72
|
+
starting point of the transference length of the prestress steel.
|
|
73
|
+
L_pt2 (float): Maximum value of the transference length of the
|
|
74
|
+
prestress steel, according to Eq. (8.18).
|
|
75
|
+
|
|
76
|
+
Returns:
|
|
77
|
+
float: Fraction (relative anchorage length) for determining the amount
|
|
78
|
+
of prestress that may be used when determining the shear resistance
|
|
79
|
+
using Mohr's circle.
|
|
80
|
+
"""
|
|
81
|
+
return min(L_x / L_pt2, 1.0)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# Equation (6.7N)
|
|
85
|
+
def _theta(theta: float, cot_min: float = 1.0, cot_max: float = 2.5) -> None:
|
|
86
|
+
"""Check if the provided angle theta is within the bounds provided by the
|
|
87
|
+
code.
|
|
88
|
+
|
|
89
|
+
EN 1992-1-1 (2005). Eq. (6.7N)
|
|
90
|
+
|
|
91
|
+
Args:
|
|
92
|
+
theta (float): The chosen angle of the compression strut in degrees.
|
|
93
|
+
|
|
94
|
+
Keyword Args:
|
|
95
|
+
cot_min (float): The minimum value for cot(theta). Default value is
|
|
96
|
+
1.0. Different value might be provided in the National Annexes.
|
|
97
|
+
cot_max (float): The maximum value for cot(theta). Default value is
|
|
98
|
+
2.5. Different value might be provided in the National Annexes.
|
|
99
|
+
|
|
100
|
+
Raises:
|
|
101
|
+
ValueError if the chosen angle is not within the given bounds.
|
|
102
|
+
"""
|
|
103
|
+
# Use round to allow less precise angles (i.e. 21.8 degrees instead
|
|
104
|
+
# of 21.801..... degrees for cot_max = 2.5).
|
|
105
|
+
theta_ = math.radians(theta)
|
|
106
|
+
if (
|
|
107
|
+
round(1.0 / math.tan(theta_), 2) < cot_min
|
|
108
|
+
or round(1.0 / math.tan(theta_), 2) > cot_max
|
|
109
|
+
):
|
|
110
|
+
raise ValueError(
|
|
111
|
+
'Wrong value for theta is chosen. Theta has '
|
|
112
|
+
f'to be chosen such that 1/tan(theta) lies between '
|
|
113
|
+
f'{cot_min} and {cot_max}. This corresponds to an angle '
|
|
114
|
+
f'between {round(math.degrees(math.atan(1/cot_min)),2)} '
|
|
115
|
+
f'and {round(math.degrees(math.atan(1/cot_max)),2)} '
|
|
116
|
+
f'degrees, respectively. Current angle is set at {theta}'
|
|
117
|
+
' degrees.'
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
# Equation (6.11N)
|
|
122
|
+
def alpha_cw(Ned: float, Ac: float, fcd: float) -> float:
|
|
123
|
+
"""Calculate factor that affects the maximum shear resistance of the
|
|
124
|
+
concrete based on the prestress.
|
|
125
|
+
|
|
126
|
+
EN 1992-1-1 (2005). Eq. (6.11N)
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
NEd (float): The normal force in the cross-section due to loading or
|
|
130
|
+
prestress (NEd > 0 for compression) in N.
|
|
131
|
+
Ac (float): The cross-sectional area of the concrete in mm2.
|
|
132
|
+
fcd (float): The design strength of the concrete in MPa.
|
|
133
|
+
|
|
134
|
+
Returns:
|
|
135
|
+
float: Factor that affects the maximum shear resistance of the concrete
|
|
136
|
+
based on the level of prestress.
|
|
137
|
+
|
|
138
|
+
Raises:
|
|
139
|
+
ValueError: The applied prestress exceeds the concrete design strength.
|
|
140
|
+
"""
|
|
141
|
+
# No function call for sigma_cp, value is allowed to be higher than
|
|
142
|
+
# 0.2fcd.
|
|
143
|
+
sigma_cp = Ned / Ac
|
|
144
|
+
if sigma_cp <= 0.0:
|
|
145
|
+
value = 1.0
|
|
146
|
+
elif sigma_cp <= 0.25 * fcd:
|
|
147
|
+
value = 1.0 + sigma_cp / fcd
|
|
148
|
+
elif sigma_cp <= 0.5 * fcd:
|
|
149
|
+
value = 1.25
|
|
150
|
+
elif sigma_cp < fcd:
|
|
151
|
+
value = 2.5 * (1 - sigma_cp / fcd)
|
|
152
|
+
else:
|
|
153
|
+
raise ValueError(
|
|
154
|
+
f'sigma_cp/fcd={sigma_cp/fcd}. Prestress has to be smaller'
|
|
155
|
+
' than design compressive strength.'
|
|
156
|
+
)
|
|
157
|
+
return value
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
# Without shear reinforcement
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# Equation (6.2 a + b)
|
|
164
|
+
def VRdc(
|
|
165
|
+
fck: float,
|
|
166
|
+
d: float,
|
|
167
|
+
Asl: float,
|
|
168
|
+
bw: float,
|
|
169
|
+
NEd: float,
|
|
170
|
+
Ac: float,
|
|
171
|
+
fcd: float,
|
|
172
|
+
k1: float = 0.15,
|
|
173
|
+
gamma_c: float = 1.5,
|
|
174
|
+
) -> float:
|
|
175
|
+
"""Compute the design strength of the shear resistance.
|
|
176
|
+
|
|
177
|
+
EN 1992-1-1 (2005), Eq. (6.2)
|
|
178
|
+
|
|
179
|
+
Args:
|
|
180
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
181
|
+
d (float): The effective depth of the cross-section in mm.
|
|
182
|
+
Asl (float): The cross-sectional area of the tensile reinforcement,
|
|
183
|
+
anchored atleast (lbd + d) beyond the considered cross-section, in
|
|
184
|
+
mm2.
|
|
185
|
+
bw (float): The smallest width of the cross-section in tension in mm.
|
|
186
|
+
NEd (float): The normal force in the cross-section due to loading or
|
|
187
|
+
prestress (NEd > 0 for compression) in N.
|
|
188
|
+
Ac (float): The cross-sectional area of the concrete in mm2.
|
|
189
|
+
fcd (float): The design compressive strength in MPa.
|
|
190
|
+
|
|
191
|
+
Keyword Args:
|
|
192
|
+
k1 (float): Factor used to include the effect of the normal stress
|
|
193
|
+
into the shear resistance of the concrete. Default value = 0.15,
|
|
194
|
+
value might differ between National Annexes.
|
|
195
|
+
gamma_c (float): Partial factor for concrete. Default value = 1.5,
|
|
196
|
+
value might differ between National Annexes.
|
|
197
|
+
|
|
198
|
+
Returns:
|
|
199
|
+
float: The concrete shear resistance in MPa.
|
|
200
|
+
"""
|
|
201
|
+
CRdc = 0.18 / gamma_c
|
|
202
|
+
return (
|
|
203
|
+
max(
|
|
204
|
+
CRdc * _k(d) * (100 * _rho_L(Asl, bw, d) * fck) ** (1.0 / 3.0)
|
|
205
|
+
+ k1 * _sigma_cp(NEd, Ac, fcd), # VRdc
|
|
206
|
+
vmin(fck, d) + k1 * _sigma_cp(NEd, Ac, fcd), # VRdcmin
|
|
207
|
+
)
|
|
208
|
+
* bw
|
|
209
|
+
* d
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
# Equation (6.3N)
|
|
214
|
+
def vmin(fck: float, d: float) -> float:
|
|
215
|
+
"""Compute the minimum shear resistance of the concrete.
|
|
216
|
+
|
|
217
|
+
EN 1992-1-1 (2005), Eq. (6.3)
|
|
218
|
+
|
|
219
|
+
Args:
|
|
220
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
221
|
+
d (float): The effective depth of the cross-section in mm.
|
|
222
|
+
|
|
223
|
+
Returns:
|
|
224
|
+
float: The minimal shear stress resistance of the concrete in MPa.
|
|
225
|
+
"""
|
|
226
|
+
return 0.035 * _k(d) ** (3.0 / 2.0) * fck ** (1 / 2)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
# Equation (6.4)
|
|
230
|
+
def VRdc_prin_stress(
|
|
231
|
+
Iy: float,
|
|
232
|
+
bw: float,
|
|
233
|
+
S: float,
|
|
234
|
+
fctd: float,
|
|
235
|
+
NEd: float,
|
|
236
|
+
Ac: float,
|
|
237
|
+
L_x: float = None,
|
|
238
|
+
L_pt2: float = None,
|
|
239
|
+
) -> float:
|
|
240
|
+
"""Calculate the shear resistance in uncracked, prestressed elements
|
|
241
|
+
without shear reinforcement, value is determined via Mohr's circle.
|
|
242
|
+
|
|
243
|
+
The maximal value of the principle tensile stress does no necessarily lay
|
|
244
|
+
at the centre of gravity. If this is the ase the minimum value of the shear
|
|
245
|
+
resistance and corresponding stress needs to be found at the relevant
|
|
246
|
+
location.
|
|
247
|
+
|
|
248
|
+
EN 1992-1-1 (2005), Eq. (6.4).
|
|
249
|
+
|
|
250
|
+
Args:
|
|
251
|
+
Iy (float): The second moment of area of the considered cross-section
|
|
252
|
+
in mm4.
|
|
253
|
+
bw (float): The width of the cross-section at the centre of gravity.
|
|
254
|
+
S (float): The first moment of area of the considered cross-section of
|
|
255
|
+
the part above the centre of gravity, and with respect to the
|
|
256
|
+
centre of gravity in mm3.
|
|
257
|
+
fctd (float): Design value of the tensile strength of the concrete.
|
|
258
|
+
NEd (float): The normal force in the cross-section due to loading or
|
|
259
|
+
prestress (NEd > 0 for compression) in N.
|
|
260
|
+
Ac (float): The cross-sectional area of the concrete in mm2.
|
|
261
|
+
|
|
262
|
+
Keyword Args:
|
|
263
|
+
L_x (float): Distance from the considered cross-section until the
|
|
264
|
+
starting point of the transference length of the prestress steel.
|
|
265
|
+
This value should be provided when the prestressing steel is
|
|
266
|
+
prestreched. Default value is None.
|
|
267
|
+
L_pt2 (float): Maximum value of the transference length of the
|
|
268
|
+
prestress steel, according to Eq. (8.18). This value should be
|
|
269
|
+
provided when the prestressing steel is prestreched. Default value
|
|
270
|
+
is None.
|
|
271
|
+
|
|
272
|
+
Returns:
|
|
273
|
+
float: The maximum allowable shear force in N for an uncracked,
|
|
274
|
+
prestressed element without shear reinforcement, determined from
|
|
275
|
+
maximum allowable principle stress.
|
|
276
|
+
"""
|
|
277
|
+
# No function call for sigma_cp, value is allowed to be higher than
|
|
278
|
+
# 0.2fcd.
|
|
279
|
+
sigma_cp = NEd / Ac
|
|
280
|
+
alpha_L = 1.0 if L_x is None or L_pt2 is None else _alpha_l(L_x, L_pt2)
|
|
281
|
+
|
|
282
|
+
return Iy * bw / S * math.sqrt(fctd**2 + alpha_L * sigma_cp * fctd)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
# Equation (6.5)
|
|
286
|
+
def VEdmax_unreinf(
|
|
287
|
+
bw: float,
|
|
288
|
+
d: float,
|
|
289
|
+
fck: float,
|
|
290
|
+
fcd: float,
|
|
291
|
+
) -> float:
|
|
292
|
+
"""Calculate the maximum allowable shear force for cross-sections without
|
|
293
|
+
shear reinforcement.
|
|
294
|
+
|
|
295
|
+
En 1992-1-1 (2005), Eq. (6.5).
|
|
296
|
+
|
|
297
|
+
Args:
|
|
298
|
+
bw (float): The smallest width of the cross-section in tension in mm.
|
|
299
|
+
d (float): The effective depth of the cross-section in mm.
|
|
300
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
301
|
+
fcd (float): The design compressive strength in MPa.
|
|
302
|
+
|
|
303
|
+
Returns:
|
|
304
|
+
float: The maximum allowable shear force in the cross-section in N.
|
|
305
|
+
When a reduced shear force may be considered for the calculations, the
|
|
306
|
+
unreduced shear force has to comply to this value.
|
|
307
|
+
"""
|
|
308
|
+
return 0.5 * bw * d * v(fck) * fcd
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
# Equation (6.6N)
|
|
312
|
+
def v(fck: float) -> float:
|
|
313
|
+
"""Calculate a strength redcution factor for concrete cracked by shear
|
|
314
|
+
forces.
|
|
315
|
+
|
|
316
|
+
EN 1992-1-1 (2005), Eq. (6.6N)
|
|
317
|
+
|
|
318
|
+
Args:
|
|
319
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
320
|
+
|
|
321
|
+
Returns:
|
|
322
|
+
float: A concrete reduction factor to account for concrete cracked by
|
|
323
|
+
shear forces.
|
|
324
|
+
"""
|
|
325
|
+
return 0.6 * (1 - fck / 250.0)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
# Equation (6.10N)
|
|
329
|
+
def v1(fck: float) -> float:
|
|
330
|
+
"""Calculate a strength redcution factor for concrete cracked by shear
|
|
331
|
+
forces.
|
|
332
|
+
|
|
333
|
+
EN 1992-1-1 (2005), Eq. (6.10N)
|
|
334
|
+
|
|
335
|
+
Args:
|
|
336
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
float: A concrete reduction factor to account for concrete cracked by
|
|
340
|
+
shear forces.
|
|
341
|
+
"""
|
|
342
|
+
return 0.6 if fck <= 60 else max(0.9 - fck / 200.0, 0.5)
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
# With shear reinforcement
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
# Equation (6.8 & 6.13)
|
|
349
|
+
# For alpha == 90 degrees, Equation (6.13) reduces to Equation (6.8).
|
|
350
|
+
def VRds(
|
|
351
|
+
Asw: float,
|
|
352
|
+
s: float,
|
|
353
|
+
z: float,
|
|
354
|
+
theta: float,
|
|
355
|
+
fyk: float,
|
|
356
|
+
alpha: float = 90.0,
|
|
357
|
+
gamma_s: float = 1.15,
|
|
358
|
+
) -> float:
|
|
359
|
+
"""Calculate the shear resistance of vertical shear reinforcement.
|
|
360
|
+
|
|
361
|
+
EN 1992-1-1 (2005). Eq. (6.8)
|
|
362
|
+
|
|
363
|
+
Args:
|
|
364
|
+
Asw (float): the cross-sectional area of the shear reinforcement in
|
|
365
|
+
mm2.
|
|
366
|
+
s (float): The centre-to-centre distance of the shear reinforcement in
|
|
367
|
+
mm.
|
|
368
|
+
z (float): The inner lever arm of internal forces in mm.
|
|
369
|
+
theta (float): The angle of the compression strut in degrees.
|
|
370
|
+
fyk (float): The characteristic strength of the reinforcement steel in
|
|
371
|
+
MPa.
|
|
372
|
+
|
|
373
|
+
Keyword Args:
|
|
374
|
+
alpha (float): The angle of the shear reinforcement with respect to the
|
|
375
|
+
neutral axis in degrees. Default value = 90 degrees.
|
|
376
|
+
gamma_s (float): Partial factor of the reinforcement steel. Default
|
|
377
|
+
value = 1.15. Value might differ between National Annexes.
|
|
378
|
+
|
|
379
|
+
Returns:
|
|
380
|
+
float: The shear resistance of the shear reinforcement in N.
|
|
381
|
+
|
|
382
|
+
Raises:
|
|
383
|
+
ValueError: When theta < 21.8 degrees or theta > 45 degrees.
|
|
384
|
+
"""
|
|
385
|
+
fywd = fyk / gamma_s
|
|
386
|
+
_theta(theta)
|
|
387
|
+
theta = math.radians(theta)
|
|
388
|
+
alpha = math.radians(alpha)
|
|
389
|
+
return (
|
|
390
|
+
Asw
|
|
391
|
+
/ s
|
|
392
|
+
* z
|
|
393
|
+
* fywd
|
|
394
|
+
* (1 / math.tan(theta) + 1.0 / math.tan(alpha))
|
|
395
|
+
* math.sin(alpha)
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
|
|
399
|
+
# Equation (6.9 & 6.14)
|
|
400
|
+
# For alpha == 90 degrees, Equation (6.14) reduces to Equation (6.9).
|
|
401
|
+
def VRdmax(
|
|
402
|
+
bw: float,
|
|
403
|
+
z: float,
|
|
404
|
+
fck: float,
|
|
405
|
+
theta: float,
|
|
406
|
+
NEd: float,
|
|
407
|
+
Ac: float,
|
|
408
|
+
fcd: float,
|
|
409
|
+
alpha: float = 90.0,
|
|
410
|
+
limit_fyd: bool = False,
|
|
411
|
+
) -> float:
|
|
412
|
+
"""Calculate the maximum shear strength of the compression strut.
|
|
413
|
+
|
|
414
|
+
EN 1992-1-1 (2005). Eq. (6.9)
|
|
415
|
+
|
|
416
|
+
Args:
|
|
417
|
+
bw (float): The smallest width of the cross-section in tension in mm.
|
|
418
|
+
z (float): The inner lever arm of internal forces in mm.
|
|
419
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
420
|
+
theta (float): The angle of the compression strut in degrees.
|
|
421
|
+
NEd (float): The normal force in the cross-section due to loading or
|
|
422
|
+
prestress (NEd > 0 for compression) in N.
|
|
423
|
+
Ac (float): The cross-sectional area of the concrete in mm2.
|
|
424
|
+
fcd (float): The design compressive strength in MPa.
|
|
425
|
+
|
|
426
|
+
Keyword Args:
|
|
427
|
+
alpha (float): The angle of the shear reinforcement with respect to the
|
|
428
|
+
neutral axis in degrees. Default value = 90 degrees.
|
|
429
|
+
limit_fyd (bool): Flag to indicate if the design yield stress is
|
|
430
|
+
limited to 0.8 * fyk or not. This controls whether the stress
|
|
431
|
+
reduction factor of concrete is given by Eq. (6.6) (False) or
|
|
432
|
+
(6.10) (True).
|
|
433
|
+
|
|
434
|
+
Returns:
|
|
435
|
+
float: The shear strength of the shear reinforcement in N.
|
|
436
|
+
|
|
437
|
+
Raises:
|
|
438
|
+
ValueError: When theta < 21.8 degrees or theta > 45 degrees.
|
|
439
|
+
ValueError: When sigma_cp > fcd.
|
|
440
|
+
"""
|
|
441
|
+
_theta(theta)
|
|
442
|
+
theta = math.radians(theta)
|
|
443
|
+
alpha = math.radians(alpha)
|
|
444
|
+
strength_reduction = v(fck) if not limit_fyd else v1(fck)
|
|
445
|
+
return (
|
|
446
|
+
alpha_cw(NEd, Ac, fcd)
|
|
447
|
+
* bw
|
|
448
|
+
* z
|
|
449
|
+
* strength_reduction
|
|
450
|
+
* fcd
|
|
451
|
+
* (1.0 / math.tan(theta) + 1.0 / math.tan(alpha))
|
|
452
|
+
/ (1 + 1.0 / math.tan(theta) ** 2)
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
# Equation (6.12 & 6.15)
|
|
457
|
+
# For alpha == 90 degrees, Equation (6.15) reduces to Equation (6.12).
|
|
458
|
+
def Asw_max(
|
|
459
|
+
fcd: float,
|
|
460
|
+
fck: float,
|
|
461
|
+
bw: float,
|
|
462
|
+
s: float,
|
|
463
|
+
fywd: float,
|
|
464
|
+
NEd: float,
|
|
465
|
+
Ac: float,
|
|
466
|
+
alpha: float = 90.0,
|
|
467
|
+
) -> float:
|
|
468
|
+
"""Calculate the maximum cross-sectional area of the shear reinforcement,
|
|
469
|
+
based on the assumption 1/tan(theta) == 1.
|
|
470
|
+
|
|
471
|
+
EN 1992-1-1 (2005). Eq. (6.13)
|
|
472
|
+
|
|
473
|
+
Args:
|
|
474
|
+
fcd (float): The design strength of the concrete in MPa.
|
|
475
|
+
fck (float): The characteristic compressive strength in MPa.
|
|
476
|
+
bw (float): The smallest width of the cross-section in tension in mm.
|
|
477
|
+
s (float): The centre-to-centre distance of the shear reinforcement in
|
|
478
|
+
mm.
|
|
479
|
+
fwyd (float): The design strength of the shear reinforcement steel in
|
|
480
|
+
MPa.
|
|
481
|
+
NEd (float): The normal force in the cross-section due to loading or
|
|
482
|
+
prestress (NEd > 0 for compression) in N.
|
|
483
|
+
Ac (float): The cross-sectional area of the concrete in mm2.
|
|
484
|
+
|
|
485
|
+
Keyword Args:
|
|
486
|
+
alpha (float): The angle of the shear reinforcement with respect to the
|
|
487
|
+
neutral axis in degrees. Default value = 90 degrees.
|
|
488
|
+
|
|
489
|
+
Returns:
|
|
490
|
+
float: The maximum allowable cross-sectional area of the shear
|
|
491
|
+
reinforcement in mm2.
|
|
492
|
+
|
|
493
|
+
Raises:
|
|
494
|
+
ValueError: When sigma_cp > fcd.
|
|
495
|
+
"""
|
|
496
|
+
alpha = math.radians(alpha)
|
|
497
|
+
return (
|
|
498
|
+
1.0
|
|
499
|
+
/ 2.0
|
|
500
|
+
* alpha_cw(NEd, Ac, fcd)
|
|
501
|
+
* v(fck)
|
|
502
|
+
* fcd
|
|
503
|
+
* bw
|
|
504
|
+
* s
|
|
505
|
+
/ (fywd * math.sin(alpha))
|
|
506
|
+
)
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"""EUROCODE 2 1992-1-1:2023."""
|
|
2
|
+
|
|
3
|
+
import typing as t
|
|
4
|
+
|
|
5
|
+
from ._annexB_time_dependent import alpha_c
|
|
6
|
+
from ._section5_materials import (
|
|
7
|
+
A_phi_correction_exp,
|
|
8
|
+
Ecm,
|
|
9
|
+
Es,
|
|
10
|
+
alpha_c_th,
|
|
11
|
+
alpha_s_th,
|
|
12
|
+
eps_c1,
|
|
13
|
+
eps_c2,
|
|
14
|
+
eps_cs_50y,
|
|
15
|
+
eps_cu1,
|
|
16
|
+
eps_cu2,
|
|
17
|
+
eps_ud,
|
|
18
|
+
eta_cc,
|
|
19
|
+
fcd,
|
|
20
|
+
fcm,
|
|
21
|
+
fctd,
|
|
22
|
+
fctk_5,
|
|
23
|
+
fctk_95,
|
|
24
|
+
fctm,
|
|
25
|
+
fpd,
|
|
26
|
+
fyd,
|
|
27
|
+
hn,
|
|
28
|
+
k_sargin,
|
|
29
|
+
k_tc,
|
|
30
|
+
k_tt,
|
|
31
|
+
n_parabolic_rectangular,
|
|
32
|
+
p_steel_stress_params,
|
|
33
|
+
phi_50y_t0,
|
|
34
|
+
phi_correction_factor,
|
|
35
|
+
reinforcement_duct_props,
|
|
36
|
+
sigma_p,
|
|
37
|
+
sigma_s,
|
|
38
|
+
weight_c,
|
|
39
|
+
weight_s,
|
|
40
|
+
)
|
|
41
|
+
from ._section9_sls import (
|
|
42
|
+
As_min_y,
|
|
43
|
+
Ec_eff,
|
|
44
|
+
delta_simpl,
|
|
45
|
+
epssm_epscm,
|
|
46
|
+
k_1_r,
|
|
47
|
+
kfl,
|
|
48
|
+
kh,
|
|
49
|
+
srm_cal,
|
|
50
|
+
wk_cal,
|
|
51
|
+
wk_cal2,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
__all__ = [
|
|
55
|
+
'A_phi_correction_exp',
|
|
56
|
+
'alpha_c_th',
|
|
57
|
+
'alpha_s_th',
|
|
58
|
+
'Ecm',
|
|
59
|
+
'eps_c1',
|
|
60
|
+
'eps_cs_50y',
|
|
61
|
+
'eps_cu1',
|
|
62
|
+
'k_sargin',
|
|
63
|
+
'eps_c2',
|
|
64
|
+
'eps_cu2',
|
|
65
|
+
'n_parabolic_rectangular',
|
|
66
|
+
'eps_ud',
|
|
67
|
+
'Es',
|
|
68
|
+
'eta_cc',
|
|
69
|
+
'fcd',
|
|
70
|
+
'fcm',
|
|
71
|
+
'fctd',
|
|
72
|
+
'fctk_5',
|
|
73
|
+
'fctk_95',
|
|
74
|
+
'fctm',
|
|
75
|
+
'fpd',
|
|
76
|
+
'fyd',
|
|
77
|
+
'hn',
|
|
78
|
+
'k_tc',
|
|
79
|
+
'k_tt',
|
|
80
|
+
'p_steel_stress_params',
|
|
81
|
+
'phi_50y_t0',
|
|
82
|
+
'phi_correction_factor',
|
|
83
|
+
'reinforcement_duct_props',
|
|
84
|
+
'sigma_c',
|
|
85
|
+
'sigma_p',
|
|
86
|
+
'sigma_s',
|
|
87
|
+
'weight_c',
|
|
88
|
+
'weight_s',
|
|
89
|
+
'alpha_c',
|
|
90
|
+
'As_min_y',
|
|
91
|
+
'delta_simpl',
|
|
92
|
+
'Ec_eff',
|
|
93
|
+
'epssm_epscm',
|
|
94
|
+
'k_1_r',
|
|
95
|
+
'kfl',
|
|
96
|
+
'kh',
|
|
97
|
+
'srm_cal',
|
|
98
|
+
'wk_cal',
|
|
99
|
+
'wk_cal2',
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
__title__: str = 'EUROCODE 2 1992-1-1:2023'
|
|
103
|
+
__year__: str = '2023'
|
|
104
|
+
__materials__: t.Tuple[str] = ('concrete', 'reinforcement')
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Functions from Annex B of EN 1992-1-1:2022."""
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def alpha_c(fcm_28: float) -> float:
|
|
5
|
+
"""Returns the coefficient to obtain the tangent modulus of elasticity from
|
|
6
|
+
the secant modulus of elasticity.
|
|
7
|
+
|
|
8
|
+
EN 1992-1-1, Table 5.1
|
|
9
|
+
|
|
10
|
+
Args:
|
|
11
|
+
fcm_28 (float): The characteristic compressive strength at 28 days
|
|
12
|
+
in MPa.
|
|
13
|
+
|
|
14
|
+
Returns:
|
|
15
|
+
float: Coefficient alphac so that Ec=alphac*Ecm,28.
|
|
16
|
+
"""
|
|
17
|
+
return max(1 / (0.8 + 0.2 * fcm_28 / 88), 1)
|