structuralcodes 0.4.0__py3-none-any.whl → 0.6.0__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.

Files changed (52) hide show
  1. structuralcodes/__init__.py +1 -1
  2. structuralcodes/codes/ec2_2004/__init__.py +2 -0
  3. structuralcodes/codes/ec2_2004/shear.py +44 -4
  4. structuralcodes/codes/mc2010/__init__.py +18 -0
  5. structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py +2 -2
  6. structuralcodes/codes/mc2010/_concrete_punching.py +300 -388
  7. structuralcodes/core/base.py +116 -5
  8. structuralcodes/geometry/__init__.py +2 -8
  9. structuralcodes/geometry/_circular.py +3 -10
  10. structuralcodes/geometry/_geometry.py +58 -114
  11. structuralcodes/geometry/_rectangular.py +3 -10
  12. structuralcodes/geometry/_reinforcement.py +9 -14
  13. structuralcodes/geometry/profiles/__init__.py +19 -0
  14. structuralcodes/geometry/profiles/_base_profile.py +305 -0
  15. structuralcodes/geometry/profiles/_common_functions.py +194 -0
  16. structuralcodes/geometry/profiles/_he.py +192 -0
  17. structuralcodes/geometry/profiles/_ipe.py +130 -0
  18. structuralcodes/geometry/profiles/_ipn.py +329 -0
  19. structuralcodes/geometry/profiles/_ub.py +264 -0
  20. structuralcodes/geometry/profiles/_ubp.py +227 -0
  21. structuralcodes/geometry/profiles/_uc.py +276 -0
  22. structuralcodes/geometry/profiles/_upn.py +315 -0
  23. structuralcodes/materials/__init__.py +2 -1
  24. structuralcodes/materials/basic/__init__.py +11 -0
  25. structuralcodes/materials/basic/_elastic.py +69 -0
  26. structuralcodes/materials/basic/_elasticplastic.py +92 -0
  27. structuralcodes/materials/basic/_generic.py +43 -0
  28. structuralcodes/materials/concrete/__init__.py +3 -0
  29. structuralcodes/materials/concrete/_concrete.py +10 -1
  30. structuralcodes/materials/concrete/_concreteEC2_2004.py +14 -0
  31. structuralcodes/materials/concrete/_concreteEC2_2023.py +14 -0
  32. structuralcodes/materials/concrete/_concreteMC2010.py +19 -0
  33. structuralcodes/materials/constitutive_laws/__init__.py +3 -0
  34. structuralcodes/materials/constitutive_laws/_elasticplastic.py +2 -2
  35. structuralcodes/materials/constitutive_laws/_initial_strain.py +130 -0
  36. structuralcodes/materials/reinforcement/__init__.py +6 -0
  37. structuralcodes/materials/reinforcement/_reinforcement.py +10 -1
  38. structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +15 -1
  39. structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +15 -1
  40. structuralcodes/materials/reinforcement/_reinforcementMC2010.py +15 -1
  41. structuralcodes/sections/_generic.py +53 -14
  42. structuralcodes/sections/_rc_utils.py +15 -5
  43. structuralcodes/sections/section_integrators/__init__.py +3 -1
  44. structuralcodes/sections/section_integrators/_fiber_integrator.py +19 -11
  45. structuralcodes/sections/section_integrators/_marin_integrator.py +25 -20
  46. {structuralcodes-0.4.0.dist-info → structuralcodes-0.6.0.dist-info}/METADATA +2 -2
  47. structuralcodes-0.6.0.dist-info/RECORD +77 -0
  48. structuralcodes/geometry/_steel_sections.py +0 -2155
  49. structuralcodes-0.4.0.dist-info/RECORD +0 -63
  50. /structuralcodes/{sections/section_integrators → core}/_marin_integration.py +0 -0
  51. {structuralcodes-0.4.0.dist-info → structuralcodes-0.6.0.dist-info}/WHEEL +0 -0
  52. {structuralcodes-0.4.0.dist-info → structuralcodes-0.6.0.dist-info}/licenses/LICENSE +0 -0
@@ -19,7 +19,7 @@ from structuralcodes.geometry import (
19
19
  PointGeometry,
20
20
  SurfaceGeometry,
21
21
  )
22
- from structuralcodes.materials.constitutive_laws import Elastic
22
+ from structuralcodes.materials.basic import ElasticMaterial
23
23
 
24
24
  from .section_integrators import SectionIntegrator, integrator_factory
25
25
 
@@ -42,6 +42,8 @@ class GenericSection(Section):
42
42
  strength, moment curvature, etc.).
43
43
  """
44
44
 
45
+ geometry: CompoundGeometry
46
+
45
47
  def __init__(
46
48
  self,
47
49
  geometry: t.Union[SurfaceGeometry, CompoundGeometry],
@@ -96,6 +98,7 @@ class GenericSectionCalculator(SectionCalculator):
96
98
  """Calculator class implementing analysis algorithms for code checks."""
97
99
 
98
100
  integrator: SectionIntegrator
101
+ section: GenericSection
99
102
 
100
103
  def __init__(
101
104
  self,
@@ -155,13 +158,17 @@ class GenericSectionCalculator(SectionCalculator):
155
158
  # Computation of surface area, reinforcement area, EA (axial rigidity)
156
159
  # and mass: Morten -> problem with units! how do we deal with it?
157
160
  for geo in self.section.geometry.geometries:
158
- gp.ea += geo.area * geo.material.get_tangent(eps=0)
161
+ gp.ea += geo.area * geo.material.constitutive_law.get_tangent(
162
+ eps=0
163
+ )
159
164
  if geo.density is not None:
160
165
  # this assumes area in mm2 and density in kg/m3
161
166
  gp.mass += geo.area * geo.density * 1e-9
162
167
 
163
168
  for geo in self.section.geometry.point_geometries:
164
- gp.ea += geo.area * geo.material.get_tangent(eps=0)
169
+ gp.ea += geo.area * geo.material.constitutive_law.get_tangent(
170
+ eps=0
171
+ )
165
172
  gp.area_reinforcement += geo.area
166
173
  if geo.density is not None:
167
174
  # this assumes area in mm2 and density in kg/m3
@@ -237,7 +244,7 @@ class GenericSectionCalculator(SectionCalculator):
237
244
 
238
245
  # Create a dummy material for integration of area moments
239
246
  # This is used for J, S etc, not for E_J E_S etc
240
- dummy_mat = Elastic(E=1)
247
+ dummy_mat = ElasticMaterial(E=1, density=1)
241
248
  # Computation of moments of area (material-independet)
242
249
  # Note: this could be un-meaningfull when many materials
243
250
  # are combined
@@ -309,15 +316,40 @@ class GenericSectionCalculator(SectionCalculator):
309
316
  chi_min = 1e10
310
317
  for g in geom.geometries + geom.point_geometries:
311
318
  for other_g in geom.geometries + geom.point_geometries:
319
+ # This is left on purpose: even if tempted we should not do
320
+ # this check:
312
321
  # if g != other_g:
313
- eps_p = g.material.get_ultimate_strain(yielding=yielding)[1]
322
+ eps_p = g.material.constitutive_law.get_ultimate_strain(
323
+ yielding=yielding
324
+ )[1]
314
325
  if isinstance(g, SurfaceGeometry):
315
326
  y_p = g.polygon.bounds[1]
316
327
  elif isinstance(g, PointGeometry):
317
328
  y_p = g._point.coords[0][1]
318
- eps_n = other_g.material.get_ultimate_strain(
319
- yielding=yielding
329
+ # Check if the section is a reinforced concrete section:
330
+ # If it is, we need to obtain the "yield" strain of concrete
331
+ # (-0.002 for default parabola-rectangle concrete)
332
+ # If the geometry is not concrete, don't get the yield strain
333
+ # If it is not a reinforced concrete section, return
334
+ # the yield strain if asked.
335
+ is_rc_section = self.section.geometry.reinforced_concrete
336
+ is_concrete_geom = (
337
+ isinstance(other_g, SurfaceGeometry) and other_g.concrete
338
+ )
339
+
340
+ use_yielding = (
341
+ yielding
342
+ if (
343
+ (is_rc_section and is_concrete_geom)
344
+ or (not is_rc_section)
345
+ )
346
+ else False
347
+ )
348
+
349
+ eps_n = other_g.material.constitutive_law.get_ultimate_strain(
350
+ yielding=use_yielding
320
351
  )[0]
352
+
321
353
  if isinstance(other_g, SurfaceGeometry):
322
354
  y_n = other_g.polygon.bounds[3]
323
355
  elif isinstance(other_g, PointGeometry):
@@ -583,14 +615,20 @@ class GenericSectionCalculator(SectionCalculator):
583
615
 
584
616
  @property
585
617
  def n_min(self) -> float:
586
- """Return minimum axial load."""
618
+ """Return minimum axial load.
619
+
620
+ In most situations, this is the capacity in compression.
621
+ """
587
622
  if self._n_min is None:
588
623
  self._n_min, self._n_max = self.calculate_limit_axial_load()
589
624
  return self._n_min
590
625
 
591
626
  @property
592
627
  def n_max(self) -> float:
593
- """Return maximum axial load."""
628
+ """Return maximum axial load.
629
+
630
+ In most situations, this is the capacity in tension.
631
+ """
594
632
  if self._n_max is None:
595
633
  self._n_min, self._n_max = self.calculate_limit_axial_load()
596
634
  return self._n_max
@@ -694,6 +732,9 @@ class GenericSectionCalculator(SectionCalculator):
694
732
  Returns:
695
733
  UltimateBendingMomentResults: The results from the calculation.
696
734
  """
735
+ # Check if the section can carry the axial load
736
+ self.check_axial_load(n=n)
737
+
697
738
  # Compute the bending strength with the bisection algorithm
698
739
  # Rotate the section of angle theta
699
740
  rotated_geom = self.section.geometry.rotate(-theta)
@@ -701,8 +742,6 @@ class GenericSectionCalculator(SectionCalculator):
701
742
  # Rotate also triangulated data!
702
743
  self._rotate_triangulated_data(-theta)
703
744
 
704
- # Check if the section can carry the axial load
705
- self.check_axial_load(n=n)
706
745
  # Find the strain distribution corresponding to failure and equilibrium
707
746
  # with external axial force
708
747
  strain = self.find_equilibrium_fixed_pivot(rotated_geom, n)
@@ -768,6 +807,9 @@ class GenericSectionCalculator(SectionCalculator):
768
807
  Returns:
769
808
  MomentCurvatureResults: The calculation results.
770
809
  """
810
+ # Check if the section can carry the axial load
811
+ self.check_axial_load(n=n)
812
+
771
813
  # Create an empty response object
772
814
  res = s_res.MomentCurvatureResults()
773
815
  res.n = n
@@ -777,9 +819,6 @@ class GenericSectionCalculator(SectionCalculator):
777
819
  # Rotate also triangulated data!
778
820
  self._rotate_triangulated_data(-theta)
779
821
 
780
- # Check if the section can carry the axial load
781
- self.check_axial_load(n=n)
782
-
783
822
  if chi is None:
784
823
  # Find ultimate curvature from the strain distribution
785
824
  # corresponding to failure and equilibrium with external axial
@@ -4,7 +4,8 @@ import typing as t
4
4
 
5
5
  import structuralcodes.core._section_results as s_res
6
6
  from structuralcodes.geometry import CompoundGeometry, SurfaceGeometry
7
- from structuralcodes.materials.constitutive_laws import Elastic, UserDefined
7
+ from structuralcodes.materials.basic import ElasticMaterial, GenericMaterial
8
+ from structuralcodes.materials.constitutive_laws import UserDefined
8
9
  from structuralcodes.sections import GenericSection
9
10
  from structuralcodes.sections.section_integrators import FiberIntegrator
10
11
 
@@ -57,13 +58,22 @@ def calculate_elastic_cracked_properties(
57
58
  rotated_geometry = section.geometry.rotate(-theta)
58
59
 
59
60
  for geo in rotated_geometry.geometries:
60
- Ec = geo.material.get_tangent(eps=0)
61
- elastic_concrete = UserDefined([-100, 0], [-100 * Ec, 0])
61
+ Ec = geo.material.constitutive_law.get_tangent(eps=0)
62
+ density = geo.material.density
63
+ elastic_concrete_law = UserDefined([-100, 0], [-100 * Ec, 0])
64
+ elastic_concrete = GenericMaterial(
65
+ density=density,
66
+ constitutive_law=elastic_concrete_law,
67
+ name='elastic concrete',
68
+ )
62
69
  geo._material = elastic_concrete
63
70
 
64
71
  for pg in rotated_geometry.point_geometries:
65
- Es = pg.material.get_tangent(eps=0)
66
- elastic_steel = Elastic(Es, 'elastic steel')
72
+ Es = pg.material.constitutive_law.get_tangent(eps=0)
73
+ density = pg.material.density
74
+ elastic_steel = ElasticMaterial(
75
+ E=Es, density=density, name='elastic steel'
76
+ )
67
77
  pg._material = elastic_steel
68
78
 
69
79
  curv = -1e-5 # Any curvature should return the same mechanical properties.
@@ -1,8 +1,10 @@
1
1
  """Classes for integrating the response of sections."""
2
2
 
3
+ from structuralcodes.core._marin_integration import marin_integration
4
+
3
5
  from ._factory import integrator_factory
4
6
  from ._fiber_integrator import FiberIntegrator
5
- from ._marin_integrator import MarinIntegrator, marin_integration
7
+ from ._marin_integrator import MarinIntegrator
6
8
  from ._section_integrator import SectionIntegrator
7
9
 
8
10
  __all__ = [
@@ -88,7 +88,7 @@ class FiberIntegrator(SectionIntegrator):
88
88
  max_area = g.area * mesh_size
89
89
  # triangulate the geometry getting back the mesh
90
90
  mesh = triangle.triangulate(tri, f'pq{30:.1f}Aa{max_area}o1')
91
- mat = g.material
91
+ constitutive_law = g.material.constitutive_law
92
92
  # Get x and y coordinates (centroid) and area for each fiber
93
93
  x = []
94
94
  y = []
@@ -128,7 +128,7 @@ class FiberIntegrator(SectionIntegrator):
128
128
 
129
129
  # return back the triangulation data
130
130
  triangulated_data.append(
131
- (np.array(x), np.array(y), np.array(area), mat)
131
+ (np.array(x), np.array(y), np.array(area), constitutive_law)
132
132
  )
133
133
  # For the reinforcement
134
134
  # Tentative proposal for managing reinforcement (PointGeometry)
@@ -139,19 +139,27 @@ class FiberIntegrator(SectionIntegrator):
139
139
  x = x[0]
140
140
  y = y[0]
141
141
  area = pg.area
142
- mat = pg.material
143
- if reinf_data.get(mat) is None:
144
- reinf_data[mat] = [
142
+ constitutive_law = pg.material.constitutive_law
143
+ if reinf_data.get(constitutive_law) is None:
144
+ reinf_data[constitutive_law] = [
145
145
  np.array(x),
146
146
  np.array(y),
147
147
  np.array(area),
148
148
  ]
149
149
  else:
150
- reinf_data[mat][0] = np.hstack((reinf_data[mat][0], x))
151
- reinf_data[mat][1] = np.hstack((reinf_data[mat][1], y))
152
- reinf_data[mat][2] = np.hstack((reinf_data[mat][2], area))
153
- for mat, value in reinf_data.items():
154
- triangulated_data.append((value[0], value[1], value[2], mat))
150
+ reinf_data[constitutive_law][0] = np.hstack(
151
+ (reinf_data[constitutive_law][0], x)
152
+ )
153
+ reinf_data[constitutive_law][1] = np.hstack(
154
+ (reinf_data[constitutive_law][1], y)
155
+ )
156
+ reinf_data[constitutive_law][2] = np.hstack(
157
+ (reinf_data[constitutive_law][2], area)
158
+ )
159
+ for constitutive_law, value in reinf_data.items():
160
+ triangulated_data.append(
161
+ (value[0], value[1], value[2], constitutive_law)
162
+ )
155
163
 
156
164
  return triangulated_data
157
165
 
@@ -199,7 +207,7 @@ class FiberIntegrator(SectionIntegrator):
199
207
 
200
208
  prepared_input = []
201
209
 
202
- triangulated_data = kwargs.get('tri', None)
210
+ triangulated_data = kwargs.get('tri')
203
211
  if triangulated_data is None:
204
212
  # No triangulation is provided, triangulate the section
205
213
  # Fiber integrator for generic section uses delaunay triangulation
@@ -10,13 +10,13 @@ from numpy.typing import ArrayLike, NDArray
10
10
  from shapely import MultiLineString, MultiPolygon, Polygon
11
11
  from shapely.geometry.polygon import orient
12
12
 
13
+ from structuralcodes.core._marin_integration import marin_integration
13
14
  from structuralcodes.geometry import (
14
15
  CompoundGeometry,
15
16
  SurfaceGeometry,
16
17
  create_line_point_angle,
17
18
  )
18
19
 
19
- from ._marin_integration import marin_integration
20
20
  from ._section_integrator import SectionIntegrator
21
21
 
22
22
 
@@ -71,29 +71,32 @@ class MarinIntegrator(SectionIntegrator):
71
71
  ) -> t.Tuple[t.List[t.Tuple], t.List[t.Tuple]]:
72
72
  """Get Marin coefficients."""
73
73
  if integrate == 'stress':
74
- if hasattr(geo.material, '__marin__'):
75
- strains, coeffs = geo.material.__marin__(strain=strain)
74
+ if hasattr(geo.material.constitutive_law, '__marin__'):
75
+ strains, coeffs = geo.material.constitutive_law.__marin__(
76
+ strain=strain
77
+ )
76
78
  else:
77
79
  raise AttributeError(
78
- f'The material object {geo.material} of geometry {geo} \
79
- does not have implement the __marin__ function. \
80
- Please implement the function or use another integrator,\
81
- like '
82
- 'Fibre'
83
- ''
80
+ 'The constitutive law object '
81
+ f'{geo.material.constitutive_law} of geometry {geo} does '
82
+ 'not have implement the __marin__ function. Please '
83
+ 'implement the function or use another integrator, like '
84
+ 'Fiber.'
84
85
  )
85
86
  elif integrate == 'modulus':
86
- if hasattr(geo.material, '__marin_tangent__'):
87
- strains, coeffs = geo.material.__marin_tangent__(strain=strain)
87
+ if hasattr(geo.material.constitutive_law, '__marin_tangent__'):
88
+ strains, coeffs = (
89
+ geo.material.constitutive_law.__marin_tangent__(
90
+ strain=strain
91
+ )
92
+ )
88
93
  else:
89
94
  raise AttributeError(
90
- f'The material object {geo.material} of geometry {geo} \
91
- does not have implement the __marin_tangent__ function\
92
- . \
93
- Please implement the function or use another integrato\
94
- r, like '
95
- 'Fibre'
96
- ''
95
+ 'The constitutive law object '
96
+ f'{geo.material.constitutive_law} of geometry {geo} does '
97
+ 'not have implement the __marin_tangent__ function. Please'
98
+ ' implement the function or use another integrator, like '
99
+ 'Fibre.'
97
100
  )
98
101
  else:
99
102
  raise ValueError(f'Unknown integrate type: {integrate}')
@@ -159,9 +162,11 @@ class MarinIntegrator(SectionIntegrator):
159
162
  x.append(xp)
160
163
  y.append(yp)
161
164
  if integrate == 'stress':
162
- IA.append(pg.material.get_stress(strain_) * A)
165
+ IA.append(pg.material.constitutive_law.get_stress(strain_) * A)
163
166
  elif integrate == 'modulus':
164
- IA.append(pg.material.get_tangent(strain_) * A)
167
+ IA.append(
168
+ pg.material.constitutive_law.get_tangent(strain_) * A
169
+ )
165
170
  input.append((1, np.array(x), np.array(y), np.array(IA)))
166
171
 
167
172
  def prepare_input(
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: structuralcodes
3
- Version: 0.4.0
3
+ Version: 0.6.0
4
4
  Summary: A Python package that contains models from structural design codes.
5
5
  Author-email: fib - International Federation for Structural Concrete <info@fib-international.org>
6
- Requires-Python: >=3.8
6
+ Requires-Python: >=3.9
7
7
  Description-Content-Type: text/markdown
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: Operating System :: OS Independent
@@ -0,0 +1,77 @@
1
+ structuralcodes/__init__.py,sha256=UiQOBo8shqGGWKp8sMarkT1ysTrX4Wa32aNCJ1E_Jl8,390
2
+ structuralcodes/codes/__init__.py,sha256=g5xMAJ3jEZHFd0cypvZY6lMCi7XeVEntsO8zHzI2mWc,2803
3
+ structuralcodes/codes/ec2_2004/__init__.py,sha256=uh_3lllfMJUZMwbG11S5wuv4nFjNMDlDWPg6vejxaeA,2473
4
+ structuralcodes/codes/ec2_2004/_concrete_creep_and_shrinkage.py,sha256=Vbxxc3g0WZz2qFWDlfrVvC-uxMO2YJpfclnHxRPMuYQ,15301
5
+ structuralcodes/codes/ec2_2004/_concrete_material_properties.py,sha256=Ol51tzcVOHUvc2Vea24WQJ4FABxXc-9cB5RVu2N1pio,5964
6
+ structuralcodes/codes/ec2_2004/_reinforcement_material_properties.py,sha256=_ZlvdHcOswu1Ge1XjSvt4j5ue-znDceMOlA0s528IqM,2779
7
+ structuralcodes/codes/ec2_2004/_section_7_3_crack_control.py,sha256=a91tWQKNTxB2SpSKu0Wtm-P5GdmifRLggNlEHIQ3XMY,31981
8
+ structuralcodes/codes/ec2_2004/shear.py,sha256=Y0WpKqZGvfGKgmlYX2L_qHaXWXH_M6en-TbhWxlQCMI,18254
9
+ structuralcodes/codes/ec2_2023/__init__.py,sha256=UohRxikCUqPAUpHj4uSWHw5drICjZm3zvJJw7clljo0,1618
10
+ structuralcodes/codes/ec2_2023/_annexB_time_dependent.py,sha256=ykRAHBHzqtMSErkVA-rwTHBdUq8-L7q2AOaEd2YW5wc,472
11
+ structuralcodes/codes/ec2_2023/_section5_materials.py,sha256=-vYowBVcebyPyuGvX3wLfxiePdM0OrBgRrYil71Vd88,32384
12
+ structuralcodes/codes/ec2_2023/_section9_sls.py,sha256=l1d3xcALAweU9jAAf1d91TJaGB_0p-eMzbRGuhfKydQ,11252
13
+ structuralcodes/codes/mc2010/__init__.py,sha256=2RmgH19YNKLf5AUZuKuP9z1NOobNEOJ8wk_ADi7IS0Y,3483
14
+ structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py,sha256=NxK4fzp44fI7EMe0UTv9tOV8Z98WI3yaWFoiN_x9hwc,24300
15
+ structuralcodes/codes/mc2010/_concrete_interface_different_casting_times.py,sha256=x_n9Z9WEPY6DFf8Og5UIERPivNh-O_3RM4ZnGBy64cs,3570
16
+ structuralcodes/codes/mc2010/_concrete_material_properties.py,sha256=MTz70-9iaN_s0Z8gJksCEzP0Yza4pPfZ-vOI30pzbw4,12362
17
+ structuralcodes/codes/mc2010/_concrete_punching.py,sha256=OOPbltvs-6z7klCZmBurtqLVBARQsKn_ov_gvSz-tUc,13924
18
+ structuralcodes/codes/mc2010/_concrete_shear.py,sha256=HZhhpzQd-09NPrHpSK5fnPA1epVCQH8JfdSi6bpgiFg,21883
19
+ structuralcodes/codes/mc2010/_concrete_torsion.py,sha256=QBFnCYTOnP6FjN0MgX9iBrXN1yuELxQVP2TeDXDB7PM,4523
20
+ structuralcodes/codes/mc2010/_interface_concrete_steel_rebar.py,sha256=bkZN4FYA430Nor3b25Z3ujWL2xbRhdYO5tgqPnUXCnk,9966
21
+ structuralcodes/codes/mc2010/_reinforcement_material_properties.py,sha256=FELmgMcCrHlajGwQNRRHb8nqKnMCsLso1OyjonsTAdk,2842
22
+ structuralcodes/codes/mc2020/__init__.py,sha256=5hrAfBtAeG69N_lroFpG10_ZKB1SuNlKBnuHug2DI3E,174
23
+ structuralcodes/core/__init__.py,sha256=spnvZIm_w3jX_lV-v3bloDjgHh8lrH6UHpA1Nv1zeAI,55
24
+ structuralcodes/core/_marin_integration.py,sha256=SZgya6d_Tequ3jez7UEBlYioZepW2IDKaAxn_6WrMbU,1563
25
+ structuralcodes/core/_section_results.py,sha256=MzUGThcxmZvyp0UBwxEiUAx2qz49UTlIo7MqoPEy3xk,7968
26
+ structuralcodes/core/base.py,sha256=19e2r0aX6Bg23vwehNBDUCGHwTxI2lA29K5IwHmG2iU,13032
27
+ structuralcodes/geometry/__init__.py,sha256=nX7ip3EDwVDDSvuu_MZ4hlWB1g8EEnP5SaXoD1rq2yM,676
28
+ structuralcodes/geometry/_circular.py,sha256=YzR98Tjk3zJ-k8-MoCMUGEqTLe_VBPmVLWs6TkGpjDY,3130
29
+ structuralcodes/geometry/_geometry.py,sha256=AODluFllUeXNMwhfHZFXkflm6MVlLiaFWaHdqLTeUqU,29021
30
+ structuralcodes/geometry/_rectangular.py,sha256=CfTdRiovUps-rgFdTpE7lKuuWlN65SLVUtXPjHaA2bI,3031
31
+ structuralcodes/geometry/_reinforcement.py,sha256=B3B2yowRwyR55eiL6J5jkRKoGYgbvBLH9KczXb50JhI,8826
32
+ structuralcodes/geometry/profiles/__init__.py,sha256=oHP5Qs7c6TecdMBVxiyuwsx48Zc7l5QPZGgE8Bd4N7M,275
33
+ structuralcodes/geometry/profiles/_base_profile.py,sha256=nyTFR6iIQGNWtUTj52LBAPj8tQkd1VJPiCNYqt7h3Sw,10373
34
+ structuralcodes/geometry/profiles/_common_functions.py,sha256=s_o47IdcvGM2mdmnhwirgUBxktzZPVHNcMZAYq6TWK4,4772
35
+ structuralcodes/geometry/profiles/_he.py,sha256=-MiacoPzntWPr-Yz1ni4jtR-I1XxswUyb8h8Tet-kl0,8569
36
+ structuralcodes/geometry/profiles/_ipe.py,sha256=5CHWlNYg8jIs4DomKFihabcYCZArQBWLqm1M2Ya3h2s,4313
37
+ structuralcodes/geometry/profiles/_ipn.py,sha256=WA3EcQuN3_f8q_RuzFgKfL6oXUbuxOEg33-xrZlyxlA,7738
38
+ structuralcodes/geometry/profiles/_ub.py,sha256=sXiOjpUPCf99iUMRjruGcrstaiQcpmYs9s6Z3niBmR8,6246
39
+ structuralcodes/geometry/profiles/_ubp.py,sha256=hHH6WI4vBZ5S9GTCJTQPfkyz04qzOeimWFi37J1yhAM,5405
40
+ structuralcodes/geometry/profiles/_uc.py,sha256=N3w6bv-Os7Jp9sRwlbEZ4Mz2yzgBu29eG5y0k3lZySg,6444
41
+ structuralcodes/geometry/profiles/_upn.py,sha256=UT8Uc8nvmunFDpD7NTtXfzTRgnb-eF9B6gMdQ1s51f8,7582
42
+ structuralcodes/materials/__init__.py,sha256=MF2hxtwTcZhHfXGnGfO_ZqyW9z3Dd-B6mB1cKsNztwY,193
43
+ structuralcodes/materials/basic/__init__.py,sha256=SrtMwyHakwJRlrFpzJIvbU0TWF8qsOyFXTfdPeIoCDQ,266
44
+ structuralcodes/materials/basic/_elastic.py,sha256=WhVgr49j4ro6imwy0XBhCTkcMuXymUidaDqB2uyQspc,2384
45
+ structuralcodes/materials/basic/_elasticplastic.py,sha256=yxN0haU05Ilpn-O5TdT9_cYjVpbpcoXf9qb8gcmCrTU,2892
46
+ structuralcodes/materials/basic/_generic.py,sha256=t2jKfriZxmARhVf8B8mJYhKEgrM1G43FmYpHCj3oHSA,1700
47
+ structuralcodes/materials/concrete/__init__.py,sha256=ab4j6C0YECmX_xxXTiEqcFnB3MrfUN0mZEfLGb1zXbo,2802
48
+ structuralcodes/materials/concrete/_concrete.py,sha256=gJOGx2l_niSV_Q5ZyzDe1C9NhOcpkG9iIsQmlYpdCBo,1811
49
+ structuralcodes/materials/concrete/_concreteEC2_2004.py,sha256=6JHGGwDZfDTZKl8eXXorF__VYPoXH_9lMkvcYx7LIbY,19545
50
+ structuralcodes/materials/concrete/_concreteEC2_2023.py,sha256=jH4J0gNgotyaDrIpRD-s8l1sosI2q0Mgz9kRxq8aReQ,18683
51
+ structuralcodes/materials/concrete/_concreteMC2010.py,sha256=6mTXpo2QkETyQgIRJh1fvX5cWToA_GbtvZa14uhypfY,20130
52
+ structuralcodes/materials/constitutive_laws/__init__.py,sha256=BXUID127WBSLy5cd82eLajtnKnmwNwNdwpLmWGdn554,3163
53
+ structuralcodes/materials/constitutive_laws/_bilinearcompression.py,sha256=wap9cPSj4baeAZ4dqSfajWb5wdidkpkcT2pgb2QHrBk,6083
54
+ structuralcodes/materials/constitutive_laws/_elastic.py,sha256=xxSneoCW41AQy0vj3_x-sTuvE_SsS1kutaG_NbqAWbk,4306
55
+ structuralcodes/materials/constitutive_laws/_elasticplastic.py,sha256=t4lOhGmwqT6vClZlWBmUtumIp8blUTS5kFiz-TeLT8o,8138
56
+ structuralcodes/materials/constitutive_laws/_initial_strain.py,sha256=6iZjkY6tg8FAXkVoBkbYI6zySCb3ptvmMzCsqXP5GXY,4480
57
+ structuralcodes/materials/constitutive_laws/_parabolarectangle.py,sha256=9GeY0HuFE5l9L61OoKi-M5MgQemJpcKccysN0SQ0oXM,8609
58
+ structuralcodes/materials/constitutive_laws/_popovics.py,sha256=dpXFQ9KHE245C9dgOLz9KXYHZiAYrRan5exgj0j_JxM,4322
59
+ structuralcodes/materials/constitutive_laws/_sargin.py,sha256=WJGw0EtqkPh-d3N6vTPRIfhE1Ypyc16JpGcoi-0U1A8,3495
60
+ structuralcodes/materials/constitutive_laws/_userdefined.py,sha256=vr01SyZTQvDimJLJN3-shvhIevvt9_qRtiy8OjodKQQ,9925
61
+ structuralcodes/materials/reinforcement/__init__.py,sha256=l2wleHRgA8DYkVePyRvzl5wXkxeZ5zThoFOwWGvZd_I,3041
62
+ structuralcodes/materials/reinforcement/_reinforcement.py,sha256=AXWPdQ_PS0-redEQjxVVz8kcWYJcZ2GtG8r7XyTIzs4,2954
63
+ structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=WybbiY49kqbchUhnJkorGgw3AIU1LTou7Ph51dPzlx4,5578
64
+ structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=egnkrkd30L2HF1lIkGVRqdt3-eKHoDe4ye497AUqOoM,5091
65
+ structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=guB9AOBMdTKRGDa_jMJFfxR6ZKA3JjGnfqGifvWdLvg,5253
66
+ structuralcodes/sections/__init__.py,sha256=gUGqiv8zyhiMmxEFme8E9nC2b3aJKs3ieBYz6X2GVFY,545
67
+ structuralcodes/sections/_generic.py,sha256=JYVx-8LhT7d2MsGGBcvy4aDF2vJz4XzDy5q5fshDRzA,57798
68
+ structuralcodes/sections/_rc_utils.py,sha256=ri2v7j6YmxZIEBt1GHmjREA0uMbjD7z7piZEsva1tIY,4637
69
+ structuralcodes/sections/section_integrators/__init__.py,sha256=rb9noIs_J7j7YomtZD7N5gQM6_-xoUO6VYbEmNbChuQ,451
70
+ structuralcodes/sections/section_integrators/_factory.py,sha256=MHp14hfWU-oXTiIutCKLJEC47LirYsHgEAAmHVtnFMY,1242
71
+ structuralcodes/sections/section_integrators/_fiber_integrator.py,sha256=0n99oNN0fb3RDoktI4qilA5T3ccALYZ4SlxKg1a9AJA,13214
72
+ structuralcodes/sections/section_integrators/_marin_integrator.py,sha256=jMO6nQnAheGju_xQ65FPVyN28yzCn4GSPFhrLQ-JS2w,15666
73
+ structuralcodes/sections/section_integrators/_section_integrator.py,sha256=aPYuUpqeQLYauVi3_uJoEtXPSuXn79Aau3GTlISn-sI,2355
74
+ structuralcodes-0.6.0.dist-info/licenses/LICENSE,sha256=3pqb3JVOTHCoMlvB4xxKrBlj0KsM_5Tyg5nsaCLJcSY,11372
75
+ structuralcodes-0.6.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
76
+ structuralcodes-0.6.0.dist-info/METADATA,sha256=eURCRubO1A0st0QoDbZyP-jBjdSeRj-0zgEoeVCMA8U,2466
77
+ structuralcodes-0.6.0.dist-info/RECORD,,