structuralcodes 0.3.0__py3-none-any.whl → 0.4.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/mc2010/__init__.py +22 -0
- structuralcodes/codes/mc2010/_interface_concrete_steel_rebar.py +348 -0
- structuralcodes/core/base.py +0 -21
- structuralcodes/geometry/_circular.py +25 -5
- structuralcodes/geometry/_geometry.py +6 -1
- structuralcodes/geometry/_rectangular.py +23 -5
- structuralcodes/materials/concrete/_concrete.py +1 -62
- structuralcodes/materials/concrete/_concreteEC2_2004.py +270 -224
- structuralcodes/materials/concrete/_concreteEC2_2023.py +246 -188
- structuralcodes/materials/concrete/_concreteMC2010.py +280 -235
- structuralcodes/materials/constitutive_laws/__init__.py +16 -15
- structuralcodes/materials/constitutive_laws/_bilinearcompression.py +10 -9
- structuralcodes/materials/reinforcement/_reinforcement.py +0 -71
- structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py +36 -1
- structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py +33 -0
- structuralcodes/materials/reinforcement/_reinforcementMC2010.py +37 -1
- structuralcodes/sections/_generic.py +23 -7
- {structuralcodes-0.3.0.dist-info → structuralcodes-0.4.0.dist-info}/METADATA +3 -2
- {structuralcodes-0.3.0.dist-info → structuralcodes-0.4.0.dist-info}/RECORD +22 -20
- {structuralcodes-0.3.0.dist-info → structuralcodes-0.4.0.dist-info}/WHEEL +1 -1
- structuralcodes-0.4.0.dist-info/licenses/LICENSE +201 -0
|
@@ -61,24 +61,25 @@ def create_constitutive_law(
|
|
|
61
61
|
|
|
62
62
|
If the consitutive law selected is not available for the specific
|
|
63
63
|
material, an exception will be raised.
|
|
64
|
+
|
|
65
|
+
Raises:
|
|
66
|
+
ValueError: If the constitutive law is not available for the material.
|
|
67
|
+
ValueError: If the constitutive law name is unknown.
|
|
64
68
|
"""
|
|
65
|
-
law = None
|
|
66
69
|
const_law = CONSTITUTIVE_LAWS.get(constitutive_law_name.lower())
|
|
67
70
|
if const_law is not None:
|
|
68
71
|
method_name = f'__{constitutive_law_name}__'
|
|
69
72
|
# check if the material object has the special method needed
|
|
70
|
-
if hasattr(material, method_name)
|
|
73
|
+
if hasattr(material, method_name) and callable(
|
|
74
|
+
getattr(material, method_name)
|
|
75
|
+
):
|
|
71
76
|
method = getattr(material, method_name)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
)
|
|
82
|
-
else:
|
|
83
|
-
raise ValueError(f'Unknown constitutive law: {constitutive_law_name}')
|
|
84
|
-
return law
|
|
77
|
+
# get the kwargs from the special dunder method
|
|
78
|
+
kwargs = method()
|
|
79
|
+
# create and return the constitutive law
|
|
80
|
+
return const_law(**kwargs)
|
|
81
|
+
raise ValueError(
|
|
82
|
+
f'Constitutive law {constitutive_law_name} not available for'
|
|
83
|
+
f' material {material.__class__.__name__}'
|
|
84
|
+
)
|
|
85
|
+
raise ValueError(f'Unknown constitutive law: {constitutive_law_name}')
|
|
@@ -51,10 +51,10 @@ class BilinearCompression(ConstitutiveLaw):
|
|
|
51
51
|
# Compute stress
|
|
52
52
|
# If it is a scalar
|
|
53
53
|
if np.isscalar(eps):
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
if eps > 0 or eps < self._eps_cu:
|
|
55
|
+
return 0
|
|
56
|
+
return max(self._E * eps, self._fc)
|
|
57
|
+
|
|
58
58
|
# If it is an array
|
|
59
59
|
sig = self._E * eps
|
|
60
60
|
sig[sig < self._fc] = self._fc
|
|
@@ -69,13 +69,14 @@ class BilinearCompression(ConstitutiveLaw):
|
|
|
69
69
|
eps = eps if np.isscalar(eps) else np.atleast_1d(eps)
|
|
70
70
|
# If it is a scalar
|
|
71
71
|
if np.isscalar(eps):
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
if self._eps_c < eps <= 0:
|
|
73
|
+
return self._E
|
|
74
|
+
return 0
|
|
75
|
+
|
|
76
76
|
# If it is an array
|
|
77
77
|
tangent = np.ones_like(eps) * self._E
|
|
78
|
-
tangent[eps
|
|
78
|
+
tangent[eps >= 0] = 0
|
|
79
|
+
tangent[eps < self._eps_c] = 0
|
|
79
80
|
|
|
80
81
|
return tangent
|
|
81
82
|
|
|
@@ -4,10 +4,6 @@ import abc
|
|
|
4
4
|
import typing as t
|
|
5
5
|
|
|
6
6
|
from structuralcodes.core.base import ConstitutiveLaw, Material
|
|
7
|
-
from structuralcodes.materials.constitutive_laws import (
|
|
8
|
-
ElasticPlastic,
|
|
9
|
-
create_constitutive_law,
|
|
10
|
-
)
|
|
11
7
|
|
|
12
8
|
|
|
13
9
|
class Reinforcement(Material):
|
|
@@ -39,45 +35,21 @@ class Reinforcement(Material):
|
|
|
39
35
|
self._epsuk = abs(epsuk)
|
|
40
36
|
self._gamma_s = gamma_s
|
|
41
37
|
|
|
42
|
-
# Calculate the plastic hardening modulus
|
|
43
|
-
if self.epsuk - self.fyk / self.Es > 0.0 and self.ftk - self.fyk > 0:
|
|
44
|
-
Eh = (self.ftk - self.fyk) / (self.epsuk - self.fyk / self.Es)
|
|
45
|
-
else:
|
|
46
|
-
Eh = 0.0
|
|
47
|
-
self._constitutive_law = ElasticPlastic(
|
|
48
|
-
E=self.Es, fy=self.fyd(), Eh=Eh, eps_su=self.epsud()
|
|
49
|
-
)
|
|
50
|
-
|
|
51
38
|
@property
|
|
52
39
|
def fyk(self) -> float:
|
|
53
40
|
"""Returns fyk in MPa."""
|
|
54
41
|
return self._fyk
|
|
55
42
|
|
|
56
|
-
@fyk.setter
|
|
57
|
-
def fyk(self, fyk: float) -> None:
|
|
58
|
-
"""Setter for fyk (in MPa)."""
|
|
59
|
-
self._fyk = abs(fyk)
|
|
60
|
-
|
|
61
43
|
@property
|
|
62
44
|
def Es(self) -> float:
|
|
63
45
|
"""Returns Es in MPa."""
|
|
64
46
|
return self._Es
|
|
65
47
|
|
|
66
|
-
@Es.setter
|
|
67
|
-
def Es(self, Es: float) -> None:
|
|
68
|
-
"""Setter for Es (in MPa)."""
|
|
69
|
-
self._Es = abs(Es)
|
|
70
|
-
|
|
71
48
|
@property
|
|
72
49
|
def ftk(self) -> float:
|
|
73
50
|
"""Returns ftk in MPa."""
|
|
74
51
|
return self._ftk
|
|
75
52
|
|
|
76
|
-
@ftk.setter
|
|
77
|
-
def ftk(self, ftk: float) -> None:
|
|
78
|
-
"""Setter for ftk (in MPa)."""
|
|
79
|
-
self._ftk = abs(ftk)
|
|
80
|
-
|
|
81
53
|
@property
|
|
82
54
|
def epsuk(self) -> float:
|
|
83
55
|
"""Returns epsuk."""
|
|
@@ -98,49 +70,6 @@ class Reinforcement(Material):
|
|
|
98
70
|
"""Returns the constitutive law object."""
|
|
99
71
|
return self._constitutive_law
|
|
100
72
|
|
|
101
|
-
@constitutive_law.setter
|
|
102
|
-
def constitutive_law(
|
|
103
|
-
self,
|
|
104
|
-
constitutive_law: t.Union[
|
|
105
|
-
ConstitutiveLaw,
|
|
106
|
-
t.Literal[
|
|
107
|
-
'elastic',
|
|
108
|
-
'elasticperfecltyplastic',
|
|
109
|
-
'elasticplastic',
|
|
110
|
-
],
|
|
111
|
-
],
|
|
112
|
-
) -> None:
|
|
113
|
-
"""Setter for constitutive law.
|
|
114
|
-
|
|
115
|
-
Arguments:
|
|
116
|
-
consitutive_law (ConstitutiveLaw | str): a valid ConstitutiveLaw
|
|
117
|
-
object for reinforcement or a string defining a valid
|
|
118
|
-
constitutive law type for reinforcement. (valid options:
|
|
119
|
-
'elastic', 'elasticperfectlyplastic', 'elasticplastic').
|
|
120
|
-
"""
|
|
121
|
-
if constitutive_law is None:
|
|
122
|
-
raise ValueError(
|
|
123
|
-
'At least a constitutive law or a string defining the '
|
|
124
|
-
'constitutive law must be provided.'
|
|
125
|
-
)
|
|
126
|
-
if isinstance(constitutive_law, str):
|
|
127
|
-
constitutive_law = create_constitutive_law(
|
|
128
|
-
constitutive_law_name=constitutive_law, material=self
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
if isinstance(constitutive_law, ConstitutiveLaw):
|
|
132
|
-
if 'rebars' in constitutive_law.__materials__:
|
|
133
|
-
self._constitutive_law = constitutive_law
|
|
134
|
-
else:
|
|
135
|
-
raise ValueError(
|
|
136
|
-
'The constitutive law selected is not suitable '
|
|
137
|
-
'for being used with a Reinforcement material.'
|
|
138
|
-
)
|
|
139
|
-
else:
|
|
140
|
-
raise ValueError(
|
|
141
|
-
f'The constitutive law {constitutive_law} could not be created'
|
|
142
|
-
)
|
|
143
|
-
|
|
144
73
|
@property
|
|
145
74
|
@abc.abstractmethod
|
|
146
75
|
def gamma_s(self) -> float:
|
|
@@ -4,6 +4,7 @@ import typing as t
|
|
|
4
4
|
|
|
5
5
|
from structuralcodes.codes import ec2_2004
|
|
6
6
|
|
|
7
|
+
from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
|
|
7
8
|
from ._reinforcement import Reinforcement
|
|
8
9
|
|
|
9
10
|
|
|
@@ -20,6 +21,16 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
|
|
|
20
21
|
gamma_eps: t.Optional[float] = None,
|
|
21
22
|
name: t.Optional[str] = None,
|
|
22
23
|
density: float = 7850.0,
|
|
24
|
+
constitutive_law: t.Optional[
|
|
25
|
+
t.Union[
|
|
26
|
+
t.Literal[
|
|
27
|
+
'elastic',
|
|
28
|
+
'elasticperfectlyplastic',
|
|
29
|
+
'elasticplastic',
|
|
30
|
+
],
|
|
31
|
+
ConstitutiveLaw,
|
|
32
|
+
]
|
|
33
|
+
] = 'elasticplastic',
|
|
23
34
|
):
|
|
24
35
|
"""Initializes a new instance of Reinforcement for EC2 2004.
|
|
25
36
|
|
|
@@ -33,13 +44,25 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
|
|
|
33
44
|
Default value is 1.15.
|
|
34
45
|
|
|
35
46
|
Keyword Arguments:
|
|
47
|
+
gamma_eps (float): The partial factor for ultimate strain. Default
|
|
48
|
+
value is 0.9.
|
|
36
49
|
name (str): A descriptive name for the reinforcement.
|
|
37
50
|
density (float): Density of material in kg/m3 (default: 7850).
|
|
51
|
+
constitutive_law (ConstitutiveLaw | str): A valid ConstitutiveLaw
|
|
52
|
+
object for reinforcement or a string defining a valid
|
|
53
|
+
constitutive law type for reinforcement. (valid options for
|
|
54
|
+
string: 'elastic', 'elasticplastic', or
|
|
55
|
+
'elasticperfectlyplastic').
|
|
56
|
+
|
|
57
|
+
Raises:
|
|
58
|
+
ValueError: If the constitutive law name is not available for the
|
|
59
|
+
material.
|
|
60
|
+
ValueError: If the provided constitutive law is not valid for
|
|
61
|
+
reinforcement.
|
|
38
62
|
"""
|
|
39
63
|
if name is None:
|
|
40
64
|
name = f'Reinforcement{round(fyk):d}'
|
|
41
65
|
|
|
42
|
-
self._gamma_eps = gamma_eps
|
|
43
66
|
super().__init__(
|
|
44
67
|
fyk=fyk,
|
|
45
68
|
Es=Es,
|
|
@@ -49,6 +72,18 @@ class ReinforcementEC2_2004(Reinforcement): # noqa: N801
|
|
|
49
72
|
epsuk=epsuk,
|
|
50
73
|
gamma_s=gamma_s,
|
|
51
74
|
)
|
|
75
|
+
self._gamma_eps = gamma_eps
|
|
76
|
+
self._constitutive_law = (
|
|
77
|
+
constitutive_law
|
|
78
|
+
if isinstance(constitutive_law, ConstitutiveLaw)
|
|
79
|
+
else create_constitutive_law(
|
|
80
|
+
constitutive_law_name=constitutive_law, material=self
|
|
81
|
+
)
|
|
82
|
+
)
|
|
83
|
+
if 'steel' not in self._constitutive_law.__materials__:
|
|
84
|
+
raise ValueError(
|
|
85
|
+
'The provided constitutive law is not valid for reinforcement.'
|
|
86
|
+
)
|
|
52
87
|
|
|
53
88
|
def fyd(self) -> float:
|
|
54
89
|
"""The design yield strength."""
|
|
@@ -4,6 +4,7 @@ import typing as t
|
|
|
4
4
|
|
|
5
5
|
from structuralcodes.codes import ec2_2023
|
|
6
6
|
|
|
7
|
+
from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
|
|
7
8
|
from ._reinforcement import Reinforcement
|
|
8
9
|
|
|
9
10
|
|
|
@@ -19,6 +20,16 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
|
|
|
19
20
|
gamma_s: t.Optional[float] = None,
|
|
20
21
|
name: t.Optional[str] = None,
|
|
21
22
|
density: float = 7850.0,
|
|
23
|
+
constitutive_law: t.Optional[
|
|
24
|
+
t.Union[
|
|
25
|
+
t.Literal[
|
|
26
|
+
'elastic',
|
|
27
|
+
'elasticperfectlyplastic',
|
|
28
|
+
'elasticplastic',
|
|
29
|
+
],
|
|
30
|
+
ConstitutiveLaw,
|
|
31
|
+
]
|
|
32
|
+
] = 'elasticplastic',
|
|
22
33
|
):
|
|
23
34
|
"""Initializes a new instance of Reinforcement for EC2 2023.
|
|
24
35
|
|
|
@@ -34,6 +45,17 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
|
|
|
34
45
|
Keyword Args:
|
|
35
46
|
name (str): A descriptive name for the reinforcement.
|
|
36
47
|
density (float): Density of material in kg/m3 (default: 7850).
|
|
48
|
+
constitutive_law (ConstitutiveLaw | str): A valid ConstitutiveLaw
|
|
49
|
+
object for reinforcement or a string defining a valid
|
|
50
|
+
constitutive law type for reinforcement. (valid options for
|
|
51
|
+
string: 'elastic', 'elasticplastic', or
|
|
52
|
+
'elasticperfectlyplastic').
|
|
53
|
+
|
|
54
|
+
Raises:
|
|
55
|
+
ValueError: If the constitutive law name is not available for the
|
|
56
|
+
material.
|
|
57
|
+
ValueError: If the provided constitutive law is not valid for
|
|
58
|
+
reinforcement.
|
|
37
59
|
"""
|
|
38
60
|
if name is None:
|
|
39
61
|
name = f'Reinforcement{round(fyk):d}'
|
|
@@ -46,6 +68,17 @@ class ReinforcementEC2_2023(Reinforcement): # noqa: N801
|
|
|
46
68
|
epsuk=epsuk,
|
|
47
69
|
gamma_s=gamma_s,
|
|
48
70
|
)
|
|
71
|
+
self._constitutive_law = (
|
|
72
|
+
constitutive_law
|
|
73
|
+
if isinstance(constitutive_law, ConstitutiveLaw)
|
|
74
|
+
else create_constitutive_law(
|
|
75
|
+
constitutive_law_name=constitutive_law, material=self
|
|
76
|
+
)
|
|
77
|
+
)
|
|
78
|
+
if 'steel' not in self._constitutive_law.__materials__:
|
|
79
|
+
raise ValueError(
|
|
80
|
+
'The provided constitutive law is not valid for reinforcement.'
|
|
81
|
+
)
|
|
49
82
|
|
|
50
83
|
def fyd(self) -> float:
|
|
51
84
|
"""The design yield strength."""
|
|
@@ -4,6 +4,7 @@ import typing as t
|
|
|
4
4
|
|
|
5
5
|
from structuralcodes.codes import mc2010
|
|
6
6
|
|
|
7
|
+
from ..constitutive_laws import ConstitutiveLaw, create_constitutive_law
|
|
7
8
|
from ._reinforcement import Reinforcement
|
|
8
9
|
|
|
9
10
|
|
|
@@ -20,6 +21,16 @@ class ReinforcementMC2010(Reinforcement):
|
|
|
20
21
|
gamma_eps: t.Optional[float] = None,
|
|
21
22
|
name: t.Optional[str] = None,
|
|
22
23
|
density: float = 7850.0,
|
|
24
|
+
constitutive_law: t.Optional[
|
|
25
|
+
t.Union[
|
|
26
|
+
t.Literal[
|
|
27
|
+
'elastic',
|
|
28
|
+
'elasticperfectlyplastic',
|
|
29
|
+
'elasticplastic',
|
|
30
|
+
],
|
|
31
|
+
ConstitutiveLaw,
|
|
32
|
+
]
|
|
33
|
+
] = 'elasticplastic',
|
|
23
34
|
):
|
|
24
35
|
"""Initializes a new instance of Reinforcement for MC2010.
|
|
25
36
|
|
|
@@ -33,12 +44,25 @@ class ReinforcementMC2010(Reinforcement):
|
|
|
33
44
|
Default value is 1.15.
|
|
34
45
|
|
|
35
46
|
Keyword Args:
|
|
47
|
+
gamma_eps (float): The partial factor for ultimate strain. Default
|
|
48
|
+
value is 0.9.
|
|
36
49
|
name (str): A descriptive name for the reinforcement.
|
|
37
50
|
density (float): Density of material in kg/m3 (default: 7850).
|
|
51
|
+
constitutive_law (ConstitutiveLaw | str): A valid ConstitutiveLaw
|
|
52
|
+
object for reinforcement or a string defining a valid
|
|
53
|
+
constitutive law type for reinforcement. (valid options for
|
|
54
|
+
string: 'elastic', 'elasticplastic', or
|
|
55
|
+
'elasticperfectlyplastic').
|
|
56
|
+
|
|
57
|
+
Raises:
|
|
58
|
+
ValueError: If the constitutive law name is not available for the
|
|
59
|
+
material.
|
|
60
|
+
ValueError: If the provided constitutive law is not valid for
|
|
61
|
+
reinforcement.
|
|
38
62
|
"""
|
|
39
63
|
if name is None:
|
|
40
64
|
name = f'Reinforcement{round(fyk):d}'
|
|
41
|
-
|
|
65
|
+
|
|
42
66
|
super().__init__(
|
|
43
67
|
fyk=fyk,
|
|
44
68
|
Es=Es,
|
|
@@ -48,6 +72,18 @@ class ReinforcementMC2010(Reinforcement):
|
|
|
48
72
|
epsuk=epsuk,
|
|
49
73
|
gamma_s=gamma_s,
|
|
50
74
|
)
|
|
75
|
+
self._gamma_eps = gamma_eps
|
|
76
|
+
self._constitutive_law = (
|
|
77
|
+
constitutive_law
|
|
78
|
+
if isinstance(constitutive_law, ConstitutiveLaw)
|
|
79
|
+
else create_constitutive_law(
|
|
80
|
+
constitutive_law_name=constitutive_law, material=self
|
|
81
|
+
)
|
|
82
|
+
)
|
|
83
|
+
if 'steel' not in self._constitutive_law.__materials__:
|
|
84
|
+
raise ValueError(
|
|
85
|
+
'The provided constitutive law is not valid for reinforcement.'
|
|
86
|
+
)
|
|
51
87
|
|
|
52
88
|
def fyd(self) -> float:
|
|
53
89
|
"""The design yield strength."""
|
|
@@ -439,12 +439,18 @@ class GenericSectionCalculator(SectionCalculator):
|
|
|
439
439
|
apply the bisection algorithm.
|
|
440
440
|
"""
|
|
441
441
|
ITMAX = 20
|
|
442
|
+
MAXRESTATTEMPTS = 20
|
|
442
443
|
sign = -1 if dn_a > 0 else 1
|
|
443
444
|
found = False
|
|
444
445
|
it = 0
|
|
446
|
+
restarts = 0
|
|
445
447
|
delta = 1e-3
|
|
446
|
-
|
|
447
|
-
|
|
448
|
+
# Use a growth factor for an exponential finding
|
|
449
|
+
r = 2.0
|
|
450
|
+
diverging = False
|
|
451
|
+
diverging_steps = 0
|
|
452
|
+
while not found and it < ITMAX and restarts < MAXRESTATTEMPTS:
|
|
453
|
+
eps_0_b = eps_0_a + sign * delta * r ** (it)
|
|
448
454
|
(
|
|
449
455
|
n_int,
|
|
450
456
|
_,
|
|
@@ -457,10 +463,20 @@ class GenericSectionCalculator(SectionCalculator):
|
|
|
457
463
|
if dn_a * dn_b < 0:
|
|
458
464
|
found = True
|
|
459
465
|
elif abs(dn_b) > abs(dn_a):
|
|
460
|
-
# we are driving
|
|
466
|
+
# we are driving away from the solution, probably due
|
|
461
467
|
# to failure of a material
|
|
462
|
-
|
|
463
|
-
|
|
468
|
+
diverging = True
|
|
469
|
+
if diverging:
|
|
470
|
+
# Count for how many steps we are diverging
|
|
471
|
+
diverging_steps += 1
|
|
472
|
+
# If we are consistently diverging for more than 10 steps,
|
|
473
|
+
# Restart the process with a small delta
|
|
474
|
+
if diverging_steps > 10:
|
|
475
|
+
delta /= 2
|
|
476
|
+
it = 0
|
|
477
|
+
restarts += 1
|
|
478
|
+
diverging = False
|
|
479
|
+
diverging_steps = 0
|
|
464
480
|
it += 1
|
|
465
481
|
if it >= ITMAX and not found:
|
|
466
482
|
s = f'Last iteration reached a unbalance of: \
|
|
@@ -631,7 +647,7 @@ class GenericSectionCalculator(SectionCalculator):
|
|
|
631
647
|
matrix then `integrate='modulus'`.
|
|
632
648
|
|
|
633
649
|
Examples:
|
|
634
|
-
result = self.integrate_strain_profile(strain,integrate='
|
|
650
|
+
result = self.integrate_strain_profile(strain,integrate='modulus')
|
|
635
651
|
# `result` will be the tangent stiffness matrix (a 3x3 numpy array)
|
|
636
652
|
|
|
637
653
|
result = self.integrate_strain_profile(strain)
|
|
@@ -1342,7 +1358,7 @@ class GenericSectionCalculator(SectionCalculator):
|
|
|
1342
1358
|
n (float): Axial load.
|
|
1343
1359
|
my (float): Bending moment around y-axis.
|
|
1344
1360
|
mz (float): Bending moment around z-axis.
|
|
1345
|
-
initial (bool): If True the modified newton with initial
|
|
1361
|
+
initial (bool): If True the modified newton with initial tangent is
|
|
1346
1362
|
used (default = False).
|
|
1347
1363
|
max_iter (int): the maximum number of iterations in the iterative
|
|
1348
1364
|
process (default = 10).
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: structuralcodes
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.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
|
|
7
7
|
Description-Content-Type: text/markdown
|
|
8
8
|
Classifier: Programming Language :: Python :: 3
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
|
+
License-File: LICENSE
|
|
10
11
|
Requires-Dist: numpy>=1.20.0
|
|
11
12
|
Requires-Dist: scipy>=1.6.0
|
|
12
13
|
Requires-Dist: shapely>=2.0.2
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
structuralcodes/__init__.py,sha256=
|
|
1
|
+
structuralcodes/__init__.py,sha256=cNO1h58v3gIPEMsX1HiSV14kJbKoDDCaW7Tzdh9ZU9Y,390
|
|
2
2
|
structuralcodes/codes/__init__.py,sha256=g5xMAJ3jEZHFd0cypvZY6lMCi7XeVEntsO8zHzI2mWc,2803
|
|
3
3
|
structuralcodes/codes/ec2_2004/__init__.py,sha256=DljXFNrCGE1lZIOsgyZgJ7Xo-xUidJomDrDKyfOHcH8,2431
|
|
4
4
|
structuralcodes/codes/ec2_2004/_concrete_creep_and_shrinkage.py,sha256=Vbxxc3g0WZz2qFWDlfrVvC-uxMO2YJpfclnHxRPMuYQ,15301
|
|
@@ -10,32 +10,33 @@ structuralcodes/codes/ec2_2023/__init__.py,sha256=UohRxikCUqPAUpHj4uSWHw5drICjZm
|
|
|
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=xuty6-sQAnxGH8NCzvyj_bf-RUg8bTaH0HYWsqOycsk,3165
|
|
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
17
|
structuralcodes/codes/mc2010/_concrete_punching.py,sha256=ZG2P7WXIRcFh5sGlmHP20BsJbz0o44cFO51FCru2kXw,17431
|
|
18
18
|
structuralcodes/codes/mc2010/_concrete_shear.py,sha256=HZhhpzQd-09NPrHpSK5fnPA1epVCQH8JfdSi6bpgiFg,21883
|
|
19
19
|
structuralcodes/codes/mc2010/_concrete_torsion.py,sha256=QBFnCYTOnP6FjN0MgX9iBrXN1yuELxQVP2TeDXDB7PM,4523
|
|
20
|
+
structuralcodes/codes/mc2010/_interface_concrete_steel_rebar.py,sha256=bkZN4FYA430Nor3b25Z3ujWL2xbRhdYO5tgqPnUXCnk,9966
|
|
20
21
|
structuralcodes/codes/mc2010/_reinforcement_material_properties.py,sha256=FELmgMcCrHlajGwQNRRHb8nqKnMCsLso1OyjonsTAdk,2842
|
|
21
22
|
structuralcodes/codes/mc2020/__init__.py,sha256=5hrAfBtAeG69N_lroFpG10_ZKB1SuNlKBnuHug2DI3E,174
|
|
22
23
|
structuralcodes/core/__init__.py,sha256=spnvZIm_w3jX_lV-v3bloDjgHh8lrH6UHpA1Nv1zeAI,55
|
|
23
24
|
structuralcodes/core/_section_results.py,sha256=MzUGThcxmZvyp0UBwxEiUAx2qz49UTlIo7MqoPEy3xk,7968
|
|
24
|
-
structuralcodes/core/base.py,sha256=
|
|
25
|
+
structuralcodes/core/base.py,sha256=UyJKocFs_RAhDveIFb69p1ClfA7KfjfTZuqLCx4Bnj4,8661
|
|
25
26
|
structuralcodes/geometry/__init__.py,sha256=STc2chf49NkWlnpcfB8n4mYWmR633VsKtbfyG8ylQ7s,771
|
|
26
|
-
structuralcodes/geometry/_circular.py,sha256=
|
|
27
|
-
structuralcodes/geometry/_geometry.py,sha256=
|
|
28
|
-
structuralcodes/geometry/_rectangular.py,sha256=
|
|
27
|
+
structuralcodes/geometry/_circular.py,sha256=vYk5mBY0bh_qqX_RrXn_NTE2iwPBvC-Uku3_AJEIZgQ,3557
|
|
28
|
+
structuralcodes/geometry/_geometry.py,sha256=HE2pJaUdjgeFWp7WNA9Rm1Bt7QI6_Bjn-ePt6aO7AcY,31544
|
|
29
|
+
structuralcodes/geometry/_rectangular.py,sha256=PLKgz998qDjcn76JjVW08fexN0jAke0K6yNeaOynqOQ,3458
|
|
29
30
|
structuralcodes/geometry/_reinforcement.py,sha256=2l4I2tm5YEy9Oeqlzt1GulljSW0k5_4_iG6quvhlSRk,9097
|
|
30
31
|
structuralcodes/geometry/_steel_sections.py,sha256=UdJmhhnK8r5gEfBzvWsMFHGs5gmuoOhFoduBanlRMQg,60225
|
|
31
32
|
structuralcodes/materials/__init__.py,sha256=r5E5vsXVKB-BGZXTnEbsrYJbH6rr6Xlc_b4LlcUPIbc,173
|
|
32
33
|
structuralcodes/materials/concrete/__init__.py,sha256=GRD5WcbYrnE4iN-L7qVkhVTi7w_PUP7pnbGueOaVeFs,2576
|
|
33
|
-
structuralcodes/materials/concrete/_concrete.py,sha256=
|
|
34
|
-
structuralcodes/materials/concrete/_concreteEC2_2004.py,sha256=
|
|
35
|
-
structuralcodes/materials/concrete/_concreteEC2_2023.py,sha256=
|
|
36
|
-
structuralcodes/materials/concrete/_concreteMC2010.py,sha256=
|
|
37
|
-
structuralcodes/materials/constitutive_laws/__init__.py,sha256=
|
|
38
|
-
structuralcodes/materials/constitutive_laws/_bilinearcompression.py,sha256=
|
|
34
|
+
structuralcodes/materials/concrete/_concrete.py,sha256=VmdxxSoqKEPADwcQ-LhL1adukZkgigh2zCfp3QqkTAs,1480
|
|
35
|
+
structuralcodes/materials/concrete/_concreteEC2_2004.py,sha256=waNTw-iiytWHGPML1swW2EQDcb10FOQNMsm2y5ykQPk,18713
|
|
36
|
+
structuralcodes/materials/concrete/_concreteEC2_2023.py,sha256=5IMw2uSrZcrf984c5iYf-SWbXGCje9MZ-5A-AwH8Owo,17851
|
|
37
|
+
structuralcodes/materials/concrete/_concreteMC2010.py,sha256=_TdyCkPuzaFUrfv9bB3zaenSu56ygLZo-KQZMIT8qjQ,18967
|
|
38
|
+
structuralcodes/materials/constitutive_laws/__init__.py,sha256=IGpwrTvbfUGJ11lYugY3k4mmaYJUFPqAOw680aUkTxo,3063
|
|
39
|
+
structuralcodes/materials/constitutive_laws/_bilinearcompression.py,sha256=wap9cPSj4baeAZ4dqSfajWb5wdidkpkcT2pgb2QHrBk,6083
|
|
39
40
|
structuralcodes/materials/constitutive_laws/_elastic.py,sha256=xxSneoCW41AQy0vj3_x-sTuvE_SsS1kutaG_NbqAWbk,4306
|
|
40
41
|
structuralcodes/materials/constitutive_laws/_elasticplastic.py,sha256=VXA4wgkfL8NdGnZa7AQX_TL-JCpEBjMVumIwQhhloFY,8118
|
|
41
42
|
structuralcodes/materials/constitutive_laws/_parabolarectangle.py,sha256=9GeY0HuFE5l9L61OoKi-M5MgQemJpcKccysN0SQ0oXM,8609
|
|
@@ -43,12 +44,12 @@ structuralcodes/materials/constitutive_laws/_popovics.py,sha256=dpXFQ9KHE245C9dg
|
|
|
43
44
|
structuralcodes/materials/constitutive_laws/_sargin.py,sha256=WJGw0EtqkPh-d3N6vTPRIfhE1Ypyc16JpGcoi-0U1A8,3495
|
|
44
45
|
structuralcodes/materials/constitutive_laws/_userdefined.py,sha256=vr01SyZTQvDimJLJN3-shvhIevvt9_qRtiy8OjodKQQ,9925
|
|
45
46
|
structuralcodes/materials/reinforcement/__init__.py,sha256=-UA04GSNN6_xLKqnH_5taiOmgxYwD_wtT6Nw8UbfkJY,2757
|
|
46
|
-
structuralcodes/materials/reinforcement/_reinforcement.py,sha256=
|
|
47
|
-
structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=
|
|
48
|
-
structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=
|
|
49
|
-
structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=
|
|
47
|
+
structuralcodes/materials/reinforcement/_reinforcement.py,sha256=AzVaUe0ULD01dkD1V2-gpzXbKpnXKssmjFkohSHKIZI,2610
|
|
48
|
+
structuralcodes/materials/reinforcement/_reinforcementEC2_2004.py,sha256=nx1OTJmqBD6yEtsVk8BlLkrGQgC0UUNIZbR7rxQhPAA,4744
|
|
49
|
+
structuralcodes/materials/reinforcement/_reinforcementEC2_2023.py,sha256=XSBJ8hC7ZbPNxXQVdngH16X8v8pBY_vWjsdMVdhJHBA,4257
|
|
50
|
+
structuralcodes/materials/reinforcement/_reinforcementMC2010.py,sha256=LPvKm1K59zHxQ_KUBGdqEVOWYGHxqUJDFHj5PeYXniM,4419
|
|
50
51
|
structuralcodes/sections/__init__.py,sha256=gUGqiv8zyhiMmxEFme8E9nC2b3aJKs3ieBYz6X2GVFY,545
|
|
51
|
-
structuralcodes/sections/_generic.py,sha256=
|
|
52
|
+
structuralcodes/sections/_generic.py,sha256=BCMRraICt9-3FY8UXDNLnW31yTM0bPLbw76TB_5XdJA,56415
|
|
52
53
|
structuralcodes/sections/_rc_utils.py,sha256=KZGVyQNSsbol7Dcyx7StoN1ybzrXMeKlyIFdXAauJW0,4229
|
|
53
54
|
structuralcodes/sections/section_integrators/__init__.py,sha256=PK4ixV0XrfHXN-itIrB1r90npoWo3aIJqMcenqcaees,399
|
|
54
55
|
structuralcodes/sections/section_integrators/_factory.py,sha256=MHp14hfWU-oXTiIutCKLJEC47LirYsHgEAAmHVtnFMY,1242
|
|
@@ -56,6 +57,7 @@ structuralcodes/sections/section_integrators/_fiber_integrator.py,sha256=7On87ES
|
|
|
56
57
|
structuralcodes/sections/section_integrators/_marin_integration.py,sha256=SZgya6d_Tequ3jez7UEBlYioZepW2IDKaAxn_6WrMbU,1563
|
|
57
58
|
structuralcodes/sections/section_integrators/_marin_integrator.py,sha256=wdgscIWTIRfkPPafI77Lk4-FmtQLDNw2kanMkhNkfTc,15392
|
|
58
59
|
structuralcodes/sections/section_integrators/_section_integrator.py,sha256=aPYuUpqeQLYauVi3_uJoEtXPSuXn79Aau3GTlISn-sI,2355
|
|
59
|
-
structuralcodes-0.
|
|
60
|
-
structuralcodes-0.
|
|
61
|
-
structuralcodes-0.
|
|
60
|
+
structuralcodes-0.4.0.dist-info/licenses/LICENSE,sha256=3pqb3JVOTHCoMlvB4xxKrBlj0KsM_5Tyg5nsaCLJcSY,11372
|
|
61
|
+
structuralcodes-0.4.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
62
|
+
structuralcodes-0.4.0.dist-info/METADATA,sha256=SQl0Zk0FbcEyC3bLfcsesntyvDGQBDf5y6oXFhddfrA,2466
|
|
63
|
+
structuralcodes-0.4.0.dist-info/RECORD,,
|