structuralcodes 0.4.0__py3-none-any.whl → 0.5.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.
- structuralcodes/__init__.py +1 -1
- structuralcodes/codes/ec2_2004/__init__.py +2 -0
- structuralcodes/codes/ec2_2004/shear.py +44 -4
- structuralcodes/codes/mc2010/__init__.py +18 -0
- structuralcodes/codes/mc2010/_concrete_punching.py +300 -388
- structuralcodes/core/base.py +1 -1
- structuralcodes/geometry/_circular.py +3 -10
- structuralcodes/geometry/_geometry.py +47 -92
- structuralcodes/geometry/_rectangular.py +3 -10
- structuralcodes/geometry/_reinforcement.py +8 -11
- structuralcodes/materials/__init__.py +2 -1
- structuralcodes/materials/basic/__init__.py +11 -0
- structuralcodes/materials/basic/_elastic.py +52 -0
- structuralcodes/materials/basic/_elasticplastic.py +75 -0
- structuralcodes/materials/basic/_generic.py +26 -0
- structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +1 -1
- structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +1 -1
- structuralcodes/materials/reinforcement/_reinforcementMC2010.py +1 -1
- structuralcodes/sections/_generic.py +53 -14
- structuralcodes/sections/_rc_utils.py +15 -5
- structuralcodes/sections/section_integrators/_fiber_integrator.py +19 -11
- structuralcodes/sections/section_integrators/_marin_integrator.py +24 -19
- {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/METADATA +1 -1
- {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/RECORD +26 -22
- {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/WHEEL +0 -0
- {structuralcodes-0.4.0.dist-info → structuralcodes-0.5.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""A generic material that could hold any type of constitutive law."""
|
|
2
|
+
|
|
3
|
+
import typing as t
|
|
4
|
+
|
|
5
|
+
from ...core.base import ConstitutiveLaw, Material
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class GenericMaterial(Material):
|
|
9
|
+
"""A material class that accepts any constitutive law."""
|
|
10
|
+
|
|
11
|
+
def __init__(
|
|
12
|
+
self,
|
|
13
|
+
density: float,
|
|
14
|
+
constitutive_law: ConstitutiveLaw,
|
|
15
|
+
name: t.Optional[str] = None,
|
|
16
|
+
):
|
|
17
|
+
"""Initialize a material with a constitutive law.
|
|
18
|
+
|
|
19
|
+
Arguments:
|
|
20
|
+
density (float): The density.
|
|
21
|
+
constitutive_law (ConstitutiveLaw): The constitutive law of the
|
|
22
|
+
material.
|
|
23
|
+
name (str, optional): The name of the material, default value None.
|
|
24
|
+
"""
|
|
25
|
+
super().__init__(density=density, name=name)
|
|
26
|
+
self._constitutive_law = constitutive_law
|
|
@@ -129,7 +129,7 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
|
|
|
129
129
|
"""Returns kwargs for ElasticPlastic constitutive law with strain
|
|
130
130
|
hardening.
|
|
131
131
|
"""
|
|
132
|
-
Eh = (self.ftd() - self.fyd()) / (self.
|
|
132
|
+
Eh = (self.ftd() - self.fyd()) / (self.epsud() - self.epsyd)
|
|
133
133
|
return {
|
|
134
134
|
'E': self.Es,
|
|
135
135
|
'fy': self.fyd(),
|
|
@@ -117,7 +117,7 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
|
|
|
117
117
|
"""Returns kwargs for ElasticPlastic constitutive law with strain
|
|
118
118
|
hardening.
|
|
119
119
|
"""
|
|
120
|
-
Eh = (self.ftd() - self.fyd()) / (self.
|
|
120
|
+
Eh = (self.ftd() - self.fyd()) / (self.epsud() - self.epsyd)
|
|
121
121
|
return {
|
|
122
122
|
'E': self.Es,
|
|
123
123
|
'fy': self.fyd(),
|
|
@@ -125,7 +125,7 @@ class ReinforcementMC2010(Reinforcement):
|
|
|
125
125
|
"""Returns kwargs for ElasticPlastic constitutive law with strain
|
|
126
126
|
hardening.
|
|
127
127
|
"""
|
|
128
|
-
Eh = (self.ftd() - self.fyd()) / (self.
|
|
128
|
+
Eh = (self.ftd() - self.fyd()) / (self.epsud() - self.epsyd)
|
|
129
129
|
return {
|
|
130
130
|
'E': self.Es,
|
|
131
131
|
'fy': self.fyd(),
|
|
@@ -19,7 +19,7 @@ from structuralcodes.geometry import (
|
|
|
19
19
|
PointGeometry,
|
|
20
20
|
SurfaceGeometry,
|
|
21
21
|
)
|
|
22
|
-
from structuralcodes.materials.
|
|
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(
|
|
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(
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
319
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
@@ -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
|
-
|
|
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),
|
|
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
|
-
|
|
143
|
-
if reinf_data.get(
|
|
144
|
-
reinf_data[
|
|
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[
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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'
|
|
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
|
|
@@ -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__(
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
'
|
|
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 =
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
|
|
94
|
-
|
|
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(
|
|
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,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: structuralcodes
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.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
6
|
Requires-Python: >=3.8
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
structuralcodes/__init__.py,sha256=
|
|
1
|
+
structuralcodes/__init__.py,sha256=Vq8UmTpStvopR5HnfnsUoEB3e53GOoojoXNv-oi6suo,390
|
|
2
2
|
structuralcodes/codes/__init__.py,sha256=g5xMAJ3jEZHFd0cypvZY6lMCi7XeVEntsO8zHzI2mWc,2803
|
|
3
|
-
structuralcodes/codes/ec2_2004/__init__.py,sha256=
|
|
3
|
+
structuralcodes/codes/ec2_2004/__init__.py,sha256=uh_3lllfMJUZMwbG11S5wuv4nFjNMDlDWPg6vejxaeA,2473
|
|
4
4
|
structuralcodes/codes/ec2_2004/_concrete_creep_and_shrinkage.py,sha256=Vbxxc3g0WZz2qFWDlfrVvC-uxMO2YJpfclnHxRPMuYQ,15301
|
|
5
5
|
structuralcodes/codes/ec2_2004/_concrete_material_properties.py,sha256=Ol51tzcVOHUvc2Vea24WQJ4FABxXc-9cB5RVu2N1pio,5964
|
|
6
6
|
structuralcodes/codes/ec2_2004/_reinforcement_material_properties.py,sha256=_ZlvdHcOswu1Ge1XjSvt4j5ue-znDceMOlA0s528IqM,2779
|
|
7
7
|
structuralcodes/codes/ec2_2004/_section_7_3_crack_control.py,sha256=a91tWQKNTxB2SpSKu0Wtm-P5GdmifRLggNlEHIQ3XMY,31981
|
|
8
|
-
structuralcodes/codes/ec2_2004/shear.py,sha256=
|
|
8
|
+
structuralcodes/codes/ec2_2004/shear.py,sha256=Y0WpKqZGvfGKgmlYX2L_qHaXWXH_M6en-TbhWxlQCMI,18254
|
|
9
9
|
structuralcodes/codes/ec2_2023/__init__.py,sha256=UohRxikCUqPAUpHj4uSWHw5drICjZm3zvJJw7clljo0,1618
|
|
10
10
|
structuralcodes/codes/ec2_2023/_annexB_time_dependent.py,sha256=ykRAHBHzqtMSErkVA-rwTHBdUq8-L7q2AOaEd2YW5wc,472
|
|
11
11
|
structuralcodes/codes/ec2_2023/_section5_materials.py,sha256=-vYowBVcebyPyuGvX3wLfxiePdM0OrBgRrYil71Vd88,32384
|
|
12
12
|
structuralcodes/codes/ec2_2023/_section9_sls.py,sha256=l1d3xcALAweU9jAAf1d91TJaGB_0p-eMzbRGuhfKydQ,11252
|
|
13
|
-
structuralcodes/codes/mc2010/__init__.py,sha256=
|
|
13
|
+
structuralcodes/codes/mc2010/__init__.py,sha256=2RmgH19YNKLf5AUZuKuP9z1NOobNEOJ8wk_ADi7IS0Y,3483
|
|
14
14
|
structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py,sha256=lQAj8n0TVhRvttVFF9YLVNzCRo3O3wIqWvBdZRu9vDk,24295
|
|
15
15
|
structuralcodes/codes/mc2010/_concrete_interface_different_casting_times.py,sha256=x_n9Z9WEPY6DFf8Og5UIERPivNh-O_3RM4ZnGBy64cs,3570
|
|
16
16
|
structuralcodes/codes/mc2010/_concrete_material_properties.py,sha256=MTz70-9iaN_s0Z8gJksCEzP0Yza4pPfZ-vOI30pzbw4,12362
|
|
17
|
-
structuralcodes/codes/mc2010/_concrete_punching.py,sha256=
|
|
17
|
+
structuralcodes/codes/mc2010/_concrete_punching.py,sha256=OOPbltvs-6z7klCZmBurtqLVBARQsKn_ov_gvSz-tUc,13924
|
|
18
18
|
structuralcodes/codes/mc2010/_concrete_shear.py,sha256=HZhhpzQd-09NPrHpSK5fnPA1epVCQH8JfdSi6bpgiFg,21883
|
|
19
19
|
structuralcodes/codes/mc2010/_concrete_torsion.py,sha256=QBFnCYTOnP6FjN0MgX9iBrXN1yuELxQVP2TeDXDB7PM,4523
|
|
20
20
|
structuralcodes/codes/mc2010/_interface_concrete_steel_rebar.py,sha256=bkZN4FYA430Nor3b25Z3ujWL2xbRhdYO5tgqPnUXCnk,9966
|
|
@@ -22,14 +22,18 @@ structuralcodes/codes/mc2010/_reinforcement_material_properties.py,sha256=FELmgM
|
|
|
22
22
|
structuralcodes/codes/mc2020/__init__.py,sha256=5hrAfBtAeG69N_lroFpG10_ZKB1SuNlKBnuHug2DI3E,174
|
|
23
23
|
structuralcodes/core/__init__.py,sha256=spnvZIm_w3jX_lV-v3bloDjgHh8lrH6UHpA1Nv1zeAI,55
|
|
24
24
|
structuralcodes/core/_section_results.py,sha256=MzUGThcxmZvyp0UBwxEiUAx2qz49UTlIo7MqoPEy3xk,7968
|
|
25
|
-
structuralcodes/core/base.py,sha256=
|
|
25
|
+
structuralcodes/core/base.py,sha256=8vpC3SmlEnhWi7_xgxpoI-seas4uV3VWrYH7Hs1ZvE0,8680
|
|
26
26
|
structuralcodes/geometry/__init__.py,sha256=STc2chf49NkWlnpcfB8n4mYWmR633VsKtbfyG8ylQ7s,771
|
|
27
|
-
structuralcodes/geometry/_circular.py,sha256=
|
|
28
|
-
structuralcodes/geometry/_geometry.py,sha256=
|
|
29
|
-
structuralcodes/geometry/_rectangular.py,sha256=
|
|
30
|
-
structuralcodes/geometry/_reinforcement.py,sha256=
|
|
27
|
+
structuralcodes/geometry/_circular.py,sha256=YzR98Tjk3zJ-k8-MoCMUGEqTLe_VBPmVLWs6TkGpjDY,3130
|
|
28
|
+
structuralcodes/geometry/_geometry.py,sha256=q1wMYxBJl0-GlEcQSnU-Zk0rNUTq8PLexTaKC-XC7q8,29334
|
|
29
|
+
structuralcodes/geometry/_rectangular.py,sha256=CfTdRiovUps-rgFdTpE7lKuuWlN65SLVUtXPjHaA2bI,3031
|
|
30
|
+
structuralcodes/geometry/_reinforcement.py,sha256=CXXKfOb-eNLVqH5hCztNrdzMzbZTreoZaWYxEJXhM1Q,8849
|
|
31
31
|
structuralcodes/geometry/_steel_sections.py,sha256=UdJmhhnK8r5gEfBzvWsMFHGs5gmuoOhFoduBanlRMQg,60225
|
|
32
|
-
structuralcodes/materials/__init__.py,sha256=
|
|
32
|
+
structuralcodes/materials/__init__.py,sha256=MF2hxtwTcZhHfXGnGfO_ZqyW9z3Dd-B6mB1cKsNztwY,193
|
|
33
|
+
structuralcodes/materials/basic/__init__.py,sha256=SrtMwyHakwJRlrFpzJIvbU0TWF8qsOyFXTfdPeIoCDQ,266
|
|
34
|
+
structuralcodes/materials/basic/_elastic.py,sha256=VdqiTl-chtUQ1scSw2d8QfTX5SxXnAt3-4n9y6wIUnQ,1485
|
|
35
|
+
structuralcodes/materials/basic/_elasticplastic.py,sha256=hSMRStV1pxHAJHVsf47rh4L1ZYsJV6mEqhzBl4vvYe0,1986
|
|
36
|
+
structuralcodes/materials/basic/_generic.py,sha256=jjmOM_nLzldwkoIn2nTFBUknNHWkJGPVMFG02TrBDDw,802
|
|
33
37
|
structuralcodes/materials/concrete/__init__.py,sha256=GRD5WcbYrnE4iN-L7qVkhVTi7w_PUP7pnbGueOaVeFs,2576
|
|
34
38
|
structuralcodes/materials/concrete/_concrete.py,sha256=VmdxxSoqKEPADwcQ-LhL1adukZkgigh2zCfp3QqkTAs,1480
|
|
35
39
|
structuralcodes/materials/concrete/_concreteEC2_2004.py,sha256=waNTw-iiytWHGPML1swW2EQDcb10FOQNMsm2y5ykQPk,18713
|
|
@@ -45,19 +49,19 @@ structuralcodes/materials/constitutive_laws/_sargin.py,sha256=WJGw0EtqkPh-d3N6vT
|
|
|
45
49
|
structuralcodes/materials/constitutive_laws/_userdefined.py,sha256=vr01SyZTQvDimJLJN3-shvhIevvt9_qRtiy8OjodKQQ,9925
|
|
46
50
|
structuralcodes/materials/reinforcement/__init__.py,sha256=-UA04GSNN6_xLKqnH_5taiOmgxYwD_wtT6Nw8UbfkJY,2757
|
|
47
51
|
structuralcodes/materials/reinforcement/_reinforcement.py,sha256=AzVaUe0ULD01dkD1V2-gpzXbKpnXKssmjFkohSHKIZI,2610
|
|
48
|
-
structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=
|
|
49
|
-
structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=
|
|
50
|
-
structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=
|
|
52
|
+
structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=V-wnFBhkalZhbEUbSMbmmWlGKr5y8ozVsCCsNy2hzW0,4746
|
|
53
|
+
structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=qP-Qeg-x7JWZxghUliToABoz_K5nIF--4_EykmUUJmQ,4259
|
|
54
|
+
structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=tlZq_x3RwMBngev0KUzFCyOYe2rW-JIpVgobXhpshdI,4421
|
|
51
55
|
structuralcodes/sections/__init__.py,sha256=gUGqiv8zyhiMmxEFme8E9nC2b3aJKs3ieBYz6X2GVFY,545
|
|
52
|
-
structuralcodes/sections/_generic.py,sha256=
|
|
53
|
-
structuralcodes/sections/_rc_utils.py,sha256=
|
|
56
|
+
structuralcodes/sections/_generic.py,sha256=JYVx-8LhT7d2MsGGBcvy4aDF2vJz4XzDy5q5fshDRzA,57798
|
|
57
|
+
structuralcodes/sections/_rc_utils.py,sha256=ri2v7j6YmxZIEBt1GHmjREA0uMbjD7z7piZEsva1tIY,4637
|
|
54
58
|
structuralcodes/sections/section_integrators/__init__.py,sha256=PK4ixV0XrfHXN-itIrB1r90npoWo3aIJqMcenqcaees,399
|
|
55
59
|
structuralcodes/sections/section_integrators/_factory.py,sha256=MHp14hfWU-oXTiIutCKLJEC47LirYsHgEAAmHVtnFMY,1242
|
|
56
|
-
structuralcodes/sections/section_integrators/_fiber_integrator.py,sha256=
|
|
60
|
+
structuralcodes/sections/section_integrators/_fiber_integrator.py,sha256=0n99oNN0fb3RDoktI4qilA5T3ccALYZ4SlxKg1a9AJA,13214
|
|
57
61
|
structuralcodes/sections/section_integrators/_marin_integration.py,sha256=SZgya6d_Tequ3jez7UEBlYioZepW2IDKaAxn_6WrMbU,1563
|
|
58
|
-
structuralcodes/sections/section_integrators/_marin_integrator.py,sha256=
|
|
62
|
+
structuralcodes/sections/section_integrators/_marin_integrator.py,sha256=MIDHow_BHa5BFs5OVPHAGM2fuFYKgfRQF8-FG2vZ9Jo,15646
|
|
59
63
|
structuralcodes/sections/section_integrators/_section_integrator.py,sha256=aPYuUpqeQLYauVi3_uJoEtXPSuXn79Aau3GTlISn-sI,2355
|
|
60
|
-
structuralcodes-0.
|
|
61
|
-
structuralcodes-0.
|
|
62
|
-
structuralcodes-0.
|
|
63
|
-
structuralcodes-0.
|
|
64
|
+
structuralcodes-0.5.0.dist-info/licenses/LICENSE,sha256=3pqb3JVOTHCoMlvB4xxKrBlj0KsM_5Tyg5nsaCLJcSY,11372
|
|
65
|
+
structuralcodes-0.5.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
66
|
+
structuralcodes-0.5.0.dist-info/METADATA,sha256=CWL0lKtMb-lw4BSsD9tfuFest8IeBImok9e-0tBlqbU,2466
|
|
67
|
+
structuralcodes-0.5.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|