structuralcodes 0.1.1__py3-none-any.whl → 0.3.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 +43 -11
- structuralcodes/codes/ec2_2004/_concrete_creep_and_shrinkage.py +529 -0
- structuralcodes/codes/mc2010/_concrete_creep_and_shrinkage.py +105 -73
- structuralcodes/core/_section_results.py +5 -19
- structuralcodes/core/base.py +42 -15
- structuralcodes/geometry/__init__.py +10 -1
- structuralcodes/geometry/_circular.py +81 -0
- structuralcodes/geometry/_geometry.py +4 -2
- structuralcodes/geometry/_rectangular.py +83 -0
- structuralcodes/geometry/_reinforcement.py +132 -5
- structuralcodes/materials/constitutive_laws/__init__.py +84 -0
- structuralcodes/materials/constitutive_laws/_bilinearcompression.py +183 -0
- structuralcodes/materials/constitutive_laws/_elastic.py +133 -0
- structuralcodes/materials/constitutive_laws/_elasticplastic.py +227 -0
- structuralcodes/materials/constitutive_laws/_parabolarectangle.py +255 -0
- structuralcodes/materials/constitutive_laws/_popovics.py +133 -0
- structuralcodes/materials/constitutive_laws/_sargin.py +115 -0
- structuralcodes/materials/constitutive_laws/_userdefined.py +262 -0
- structuralcodes/sections/__init__.py +2 -0
- structuralcodes/sections/_generic.py +174 -27
- structuralcodes/sections/_rc_utils.py +114 -0
- structuralcodes/sections/section_integrators/_fiber_integrator.py +204 -110
- structuralcodes/sections/section_integrators/_marin_integrator.py +273 -102
- structuralcodes/sections/section_integrators/_section_integrator.py +28 -4
- {structuralcodes-0.1.1.dist-info → structuralcodes-0.3.0.dist-info}/METADATA +2 -2
- {structuralcodes-0.1.1.dist-info → structuralcodes-0.3.0.dist-info}/RECORD +28 -18
- {structuralcodes-0.1.1.dist-info → structuralcodes-0.3.0.dist-info}/WHEEL +1 -1
- structuralcodes/codes/ec2_2004/annex_b_shrink_and_creep.py +0 -257
- structuralcodes/materials/constitutive_laws.py +0 -981
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
"""Calculation routine for shrinkage and creep from EUROCODE 1992-1-1:2004
|
|
2
|
-
Annex B.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import math
|
|
6
|
-
import typing as t
|
|
7
|
-
|
|
8
|
-
import numpy as np
|
|
9
|
-
|
|
10
|
-
ALPHA_CEMENT_DICT = {'R': 1, 'N': 0, 'S': -1}
|
|
11
|
-
ALPHA_DS_DICT = {
|
|
12
|
-
'R': {'alpha_ds1': 6, 'alpha_ds2': 0.11},
|
|
13
|
-
'N': {'alpha_ds1': 4, 'alpha_ds2': 0.12},
|
|
14
|
-
'S': {'alpha_ds1': 3, 'alpha_ds2': 0.13},
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def phi(
|
|
19
|
-
h_0: float,
|
|
20
|
-
f_cm: float,
|
|
21
|
-
RH: int = 50,
|
|
22
|
-
cement_class: t.Literal['R', 'N', 'S'] = 'R',
|
|
23
|
-
t0: int = 7,
|
|
24
|
-
t: int = 18263,
|
|
25
|
-
) -> float:
|
|
26
|
-
"""Calculates the creep number.
|
|
27
|
-
|
|
28
|
-
EN 1992-1-1:2004, Eq. (B.1).
|
|
29
|
-
|
|
30
|
-
Args:
|
|
31
|
-
h_0 (float): The product of 2 times the cross-sectional area divided by
|
|
32
|
-
the exposed circumference according to (B.6).
|
|
33
|
-
f_cm (float): The mean concrete strength,
|
|
34
|
-
RH (int): The relative humidity in percent, defaults to 50%.
|
|
35
|
-
|
|
36
|
-
Keyword Args:
|
|
37
|
-
cement_class (str): The cement class, defaults to 'R'. Possible values:
|
|
38
|
-
'R', 'N', 'S',
|
|
39
|
-
t0: The age of the concrete at the time (in days) of loading.
|
|
40
|
-
t: The age of the concrete at the time (in days) of evaluation (50
|
|
41
|
-
years default).
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
float: The creep value for the load, phi(t, t0).
|
|
45
|
-
|
|
46
|
-
Raises:
|
|
47
|
-
ValueError: checks if the cement class equals R, N or S.
|
|
48
|
-
"""
|
|
49
|
-
# The cement class will decide the value of alpha_cement, ds1 and ds2.
|
|
50
|
-
# The values are given in (B.9) and (B.12)
|
|
51
|
-
|
|
52
|
-
_cement_class = cement_class.upper().strip()
|
|
53
|
-
alpha_cement = ALPHA_CEMENT_DICT.get(_cement_class)
|
|
54
|
-
if alpha_cement is None:
|
|
55
|
-
raise ValueError(f'cement_class={cement_class}, expected R, N or S')
|
|
56
|
-
|
|
57
|
-
_beta_H = beta_H(h_0, f_cm, RH)
|
|
58
|
-
_phi_RH = phi_RH(h_0, f_cm, RH)
|
|
59
|
-
_beta_fcm = beta_fcm(f_cm)
|
|
60
|
-
_t0_adj = t0_adj(t0, alpha_cement)
|
|
61
|
-
beta_t0 = 1 / (0.1 + _t0_adj**0.20) # (B.5)
|
|
62
|
-
_beta_c = beta_c(t0, t, _beta_H)
|
|
63
|
-
|
|
64
|
-
phi_0 = _phi_RH * _beta_fcm * beta_t0 # (B.2)
|
|
65
|
-
return phi_0 * _beta_c
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
def beta_c(t0: float, t: float, beta_H: float) -> float:
|
|
69
|
-
"""Calculates the factor beta_c.
|
|
70
|
-
|
|
71
|
-
EN 1992-1-1:2004, Eq. (B.7).
|
|
72
|
-
|
|
73
|
-
Args:
|
|
74
|
-
t0 (float): The concrete age in days a the time of loading.
|
|
75
|
-
t (float): The concrete age at the evaluated time.
|
|
76
|
-
beta_H: Parameter defined in (B.8).
|
|
77
|
-
|
|
78
|
-
Returns:
|
|
79
|
-
float: Parameter defined by Equation (B.7), beta_c.
|
|
80
|
-
"""
|
|
81
|
-
return ((t - t0) / (beta_H + t - t0)) ** 0.3
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
def t0_adj(t0: float, alpha_cement: float) -> float:
|
|
85
|
-
"""Calculates the adjusted age of the concrete.
|
|
86
|
-
|
|
87
|
-
EN 1992-1-1:2004, Eq. (B.9).
|
|
88
|
-
|
|
89
|
-
Args:
|
|
90
|
-
t0 (float): The concrete age in days at the time of loading.
|
|
91
|
-
alpha_cement (float): Exponent derived from the sement type.
|
|
92
|
-
|
|
93
|
-
Returns:
|
|
94
|
-
float: The adjusted age of the concrete.
|
|
95
|
-
"""
|
|
96
|
-
return max(t0 * (9 / (2 + t0**1.2) + 1) ** alpha_cement, 0.5)
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
def beta_fcm(f_cm: float) -> float:
|
|
100
|
-
"""Calculates beta_f_cm.
|
|
101
|
-
|
|
102
|
-
EN 1992-1-1:2004, Eq. (B.4).
|
|
103
|
-
|
|
104
|
-
Args:
|
|
105
|
-
f_cm (float): The mean concrete strength.
|
|
106
|
-
|
|
107
|
-
Returns:
|
|
108
|
-
float: The factor defined in Equation (B.4).
|
|
109
|
-
"""
|
|
110
|
-
return 16.8 / f_cm**0.5
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def phi_RH(h_0: float, f_cm: float, RH: int) -> float:
|
|
114
|
-
"""Calculates phi_RH.
|
|
115
|
-
|
|
116
|
-
EN 1992-1-1:2004, Eq. (B.3).
|
|
117
|
-
|
|
118
|
-
Args:
|
|
119
|
-
h_0 (float): The effective cross sectional thickness, Equation (B.6).
|
|
120
|
-
f_cm (float): The mean concrete strength.
|
|
121
|
-
RH (int): The relative humidity in percent.
|
|
122
|
-
|
|
123
|
-
Returns:
|
|
124
|
-
float: The calculation parameter (B.3).
|
|
125
|
-
"""
|
|
126
|
-
# (B.8c) Alpha 1 to 2 is a constant where the only variable is f_cm
|
|
127
|
-
alpha_1, alpha_2 = (
|
|
128
|
-
(35 / f_cm) ** 0.7,
|
|
129
|
-
(35 / f_cm) ** 0.2,
|
|
130
|
-
)
|
|
131
|
-
|
|
132
|
-
if f_cm <= 35:
|
|
133
|
-
return 1 + (1 - RH / 100) / (0.1 * h_0 ** (1 / 3))
|
|
134
|
-
return (1 + (1 - RH / 100) / (0.1 * h_0 ** (1 / 3)) * alpha_1) * alpha_2
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def beta_H(h_0: float, f_cm: float, RH: int) -> float:
|
|
138
|
-
"""Calculates beta_H.
|
|
139
|
-
|
|
140
|
-
EN 1992-1-1:2004, Eq. (B.8a and b).
|
|
141
|
-
|
|
142
|
-
Args:
|
|
143
|
-
h_0 (float): The effective cross sectional thickness, Equation (B.6).
|
|
144
|
-
f_cm (float): The mean concrete strength.
|
|
145
|
-
RH (int): The relative humidity in percent.
|
|
146
|
-
|
|
147
|
-
Returns:
|
|
148
|
-
float: The calculation parameter defined in (B.8).
|
|
149
|
-
"""
|
|
150
|
-
# (B.8c) Alpha 3 is a constant where f_cm is the only variable
|
|
151
|
-
alpha_3 = (35 / f_cm) ** 0.5
|
|
152
|
-
|
|
153
|
-
if f_cm <= 35:
|
|
154
|
-
# (B.8a) and (B.3a) applies
|
|
155
|
-
return min(1.5 * (1 + (0.012 * RH) ** 18) * h_0 + 250, 1500)
|
|
156
|
-
# (B.8b) and (B.3b) applies
|
|
157
|
-
return min(
|
|
158
|
-
1.5 * (1 + (0.012 * RH) ** 18) * h_0 + 250 * alpha_3,
|
|
159
|
-
1500 * alpha_3,
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
def eps_cs(
|
|
164
|
-
h_0: float,
|
|
165
|
-
f_cm: float,
|
|
166
|
-
cement_class: t.Literal['R', 'N', 'S'] = 'R',
|
|
167
|
-
RH: int = 50,
|
|
168
|
-
t_S: int = 28,
|
|
169
|
-
t: int = 18263,
|
|
170
|
-
) -> float:
|
|
171
|
-
"""Calculates the shrinkage strain.
|
|
172
|
-
|
|
173
|
-
EN 1992-1-1:2004, Eq. (3.8).
|
|
174
|
-
|
|
175
|
-
Args:
|
|
176
|
-
h_0 (float): The effective cross sectional thickness, Equation (B.6).
|
|
177
|
-
f_cm (float): The mean concrete strength.
|
|
178
|
-
cement_class (str): The cement class, defaults to 'R'. Possible values:
|
|
179
|
-
'R', 'N', 'S'.
|
|
180
|
-
|
|
181
|
-
Keyword Args:
|
|
182
|
-
RH (int): The relative humidity in percent, defaults to 50.
|
|
183
|
-
t_S (int): the number of days when shrinkage begins, default: 28 days.
|
|
184
|
-
t (int): the concrete age at the time (in days) of evaluation, default:
|
|
185
|
-
50 years.
|
|
186
|
-
|
|
187
|
-
Returns:
|
|
188
|
-
float: The shrinkage. Given as absolute, not in percent or ppm.
|
|
189
|
-
|
|
190
|
-
Raises:
|
|
191
|
-
ValueError: Checks if the cement class equals R, N or S.
|
|
192
|
-
"""
|
|
193
|
-
_cement_class = cement_class.upper().strip()
|
|
194
|
-
beta_ds = (t - t_S) / (t - t_S + 0.04 * h_0 ** (3 / 2)) # (3.10)
|
|
195
|
-
beta_as = 1 - math.exp(-0.2 * t**0.5) # (3.13)
|
|
196
|
-
|
|
197
|
-
# k_h is defined in Table 3.3 under (3.9)
|
|
198
|
-
if h_0 >= 500:
|
|
199
|
-
k_h = 0.70
|
|
200
|
-
elif h_0 <= 100:
|
|
201
|
-
k_h = 1.0
|
|
202
|
-
else:
|
|
203
|
-
k_h = np.interp(h_0, [100, 200, 300, 500], [1.0, 0.85, 0.75, 0.7])
|
|
204
|
-
|
|
205
|
-
eps_ca_infinite = 2.5 * (f_cm - 18) * 1e-6 # (3.12)
|
|
206
|
-
eps_ca = beta_as * eps_ca_infinite # (3.11)
|
|
207
|
-
eps_cd = beta_ds * k_h * eps_cd_0(_cement_class, f_cm, RH) # (3.9)
|
|
208
|
-
return eps_cd + eps_ca # (3.8)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
def beta_RH(RH: int, RH_0: int = 100) -> float:
|
|
212
|
-
"""Calculates beta_RH.
|
|
213
|
-
|
|
214
|
-
EN 1992-1-1:2004, Eq. (B.12).
|
|
215
|
-
|
|
216
|
-
Args:
|
|
217
|
-
RH (int): The relative humidity in percent.
|
|
218
|
-
|
|
219
|
-
Keyword Args:
|
|
220
|
-
RH_0 (int): The reference relative humidity, default: 100%.
|
|
221
|
-
|
|
222
|
-
Returns:
|
|
223
|
-
float: Calculation parameter from Equation (B.12).
|
|
224
|
-
"""
|
|
225
|
-
return 1.55 * (1 - (RH / RH_0) ** 3)
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
def eps_cd_0(cement_class: str, f_cm: float, RH: int) -> float:
|
|
229
|
-
"""Calculates eps_cd_0.
|
|
230
|
-
|
|
231
|
-
EN 1992-1-1:2004, Eq. (B.11).
|
|
232
|
-
|
|
233
|
-
Args:
|
|
234
|
-
cement_class (str): The cement class, defaults to 'R'. Possible values:
|
|
235
|
-
'R', 'N', 'S'.
|
|
236
|
-
f_cm (float): The mean concrete strength.
|
|
237
|
-
RH (int): The relative humidity in percent.
|
|
238
|
-
|
|
239
|
-
Returns:
|
|
240
|
-
float: The nominal value for shrinkage.
|
|
241
|
-
|
|
242
|
-
Raises:
|
|
243
|
-
ValueError: Checks if the cement class equals R, N or S.
|
|
244
|
-
"""
|
|
245
|
-
_cement_class = cement_class.upper().strip()
|
|
246
|
-
alpha = ALPHA_DS_DICT.get(_cement_class)
|
|
247
|
-
if alpha is None:
|
|
248
|
-
raise ValueError(f'cement_class={cement_class}, expected R, N or S')
|
|
249
|
-
alpha_ds1 = alpha['alpha_ds1']
|
|
250
|
-
alpha_ds2 = alpha['alpha_ds2']
|
|
251
|
-
|
|
252
|
-
return (
|
|
253
|
-
0.85
|
|
254
|
-
* ((220 + 110 * alpha_ds1) * math.exp(-alpha_ds2 * f_cm / 10))
|
|
255
|
-
* 1e-6
|
|
256
|
-
* beta_RH(RH)
|
|
257
|
-
) # (B.11)
|