2
2
3
3
from copy import deepcopy
4
4
from math import inf
5
- from typing import TYPE_CHECKING , List , Optional , Tuple
5
+ from multiprocessing .sharedctypes import Value
6
+ from typing import TYPE_CHECKING , List , Tuple
6
7
7
8
import numpy as np
8
9
from rich .live import Live
12
13
import concreteproperties .results as res
13
14
import concreteproperties .stress_strain_profile as ssp
14
15
import concreteproperties .utils as utils
15
- from concreteproperties .material import Concrete , Steel
16
+ from concreteproperties .material import Concrete , SteelBar
16
17
17
18
if TYPE_CHECKING :
18
19
from concreteproperties .concrete_section import ConcreteSection
@@ -60,8 +61,8 @@ def create_steel_material(
60
61
self ,
61
62
yield_strength : float ,
62
63
colour : str = "grey" ,
63
- ) -> Steel :
64
- """Returns a steel material object.
64
+ ) -> SteelBar :
65
+ """Returns a steel bar material object.
65
66
66
67
List assumptions of material properties here...
67
68
@@ -76,7 +77,7 @@ def create_steel_material(
76
77
def get_gross_properties (
77
78
self ,
78
79
** kwargs ,
79
- ) -> res .ConcreteProperties :
80
+ ) -> res .GrossProperties :
80
81
"""Returns the gross section properties of the reinforced concrete section.
81
82
82
83
:param kwargs: Keyword arguments passed to
@@ -90,7 +91,7 @@ def get_gross_properties(
90
91
def get_transformed_gross_properties (
91
92
self ,
92
93
** kwargs ,
93
- ) -> res .TransformedConcreteProperties :
94
+ ) -> res .TransformedGrossProperties :
94
95
"""Transforms gross section properties.
95
96
96
97
:param kwargs: Keyword arguments passed to
@@ -232,7 +233,13 @@ def calculate_ultimate_stress(
232
233
233
234
234
235
class AS3600 (DesignCode ):
235
- """Design code class for Australian standard AS 3600:2018."""
236
+ """Design code class for Australian standard AS 3600:2018.
237
+
238
+ Note that this design code only supports :class:`~concreteproperties.pre.Concrete`
239
+ and :class:`~concreteproperties.pre.SteelBar` material objects. Meshed
240
+ :class:`~concreteproperties.pre.Steel` material objects are **not** supported
241
+ as this falls under the composite structures design code.
242
+ """
236
243
237
244
def __init__ (
238
245
self ,
@@ -252,11 +259,22 @@ def assign_concrete_section(
252
259
253
260
self .concrete_section = concrete_section
254
261
262
+ # check to make sure there are no meshed reinforcement regions
263
+ if self .concrete_section .reinf_geometries_meshed :
264
+ raise ValueError (
265
+ "Meshed reinforcement is not supported in this design code."
266
+ )
267
+
255
268
# determine reinforcement class
256
269
self .reinforcement_class = "N"
257
270
258
- for steel_geom in self .concrete_section .steel_geometries :
259
- if steel_geom .material .stress_strain_profile .fracture_strain < 0.05 :
271
+ for steel_geom in self .concrete_section .reinf_geometries_lumped :
272
+ if (
273
+ abs (
274
+ steel_geom .material .stress_strain_profile .get_ultimate_tensile_strain ()
275
+ )
276
+ < 0.05
277
+ ):
260
278
self .reinforcement_class = "L"
261
279
262
280
# calculate squash and tensile load
@@ -343,8 +361,8 @@ def create_steel_material(
343
361
yield_strength : float = 500 ,
344
362
ductility_class : str = "N" ,
345
363
colour : str = "grey" ,
346
- ) -> Steel :
347
- r"""Returns a steel material object.
364
+ ) -> SteelBar :
365
+ r"""Returns a steel bar material object.
348
366
349
367
| **Material assumptions:**
350
368
| - *Density*: 7850 kg/m\ :sup:`3`
@@ -367,7 +385,7 @@ def create_steel_material(
367
385
else :
368
386
raise ValueError ("ductility_class must be N or L." )
369
387
370
- return Steel (
388
+ return SteelBar (
371
389
name = f"{ yield_strength :.0f} MPa Steel (AS 3600:2018)" ,
372
390
density = 7.85e-6 ,
373
391
stress_strain_profile = ssp .SteelElasticPlastic (
@@ -406,7 +424,7 @@ def squash_tensile_load(
406
424
squash_load += force_c
407
425
408
426
# loop through all steel geometries
409
- for steel_geom in self .concrete_section .steel_geometries :
427
+ for steel_geom in self .concrete_section .reinf_geometries_lumped :
410
428
# calculate area and centroid
411
429
area = steel_geom .calculate_area ()
412
430
@@ -415,7 +433,9 @@ def squash_tensile_load(
415
433
strain = 0.025
416
434
)
417
435
418
- force_t = - area * steel_geom .material .stress_strain_profile .yield_strength
436
+ force_t = (
437
+ - area * steel_geom .material .stress_strain_profile .get_yield_strength ()
438
+ )
419
439
420
440
# add to totals
421
441
squash_load += force_c
@@ -500,10 +520,10 @@ def get_n_ub(
500
520
# get compressive strain at extreme fibre
501
521
eps_cu = self .concrete_section .gross_properties .conc_ultimate_strain
502
522
503
- # 4) calculate d_n at balanced load
523
+ # calculate d_n at balanced load
504
524
d_nb = d_0 * (eps_cu ) / (eps_sy + eps_cu )
505
525
506
- # 5) calculate axial force at balanced load
526
+ # calculate axial force at balanced load
507
527
balanced_res = self .concrete_section .calculate_ultimate_section_actions (
508
528
d_n = d_nb , ultimate_results = res .UltimateBendingResults (theta = theta )
509
529
)
0 commit comments