ourocode 1.7.1__tar.gz → 1.7.3__tar.gz
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.
- {ourocode-1.7.1/ourocode.egg-info → ourocode-1.7.3}/PKG-INFO +1 -1
- ourocode-1.7.3/ourocode/__version__.py +1 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC1_Vent.py +91 -42
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC5_Assemblage.py +38 -37
- ourocode-1.7.3/ourocode/eurocode/EC5_CVT.py +819 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC5_Element_droit.py +14 -4
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC8_Sismique.py +73 -25
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/objet.py +86 -12
- {ourocode-1.7.1 → ourocode-1.7.3/ourocode.egg-info}/PKG-INFO +1 -1
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode.egg-info/SOURCES.txt +1 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/pyproject.toml +1 -1
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_EC5_Assemblage.py +2 -2
- ourocode-1.7.3/tests/test_EC5_CVT.py +524 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_EC5_Element_droit.py +3 -0
- ourocode-1.7.1/ourocode/__version__.py +0 -1
- ourocode-1.7.1/tests/test_EC5_CVT.py +0 -309
- {ourocode-1.7.1 → ourocode-1.7.3}/LICENSE +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/MANIFEST.in +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/README.md +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/__init__.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/caracteristique_meca_acier.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/caracteristique_meca_bois.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/caracteristique_meca_panel.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/carte_action_region.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/coeff_psy.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/exploitation.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/gammaM.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/kdef.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/kfi.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/kmod.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/limite_fleche.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/qualite_acier.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/screenshot/C90_def.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/screenshot/Kv_def.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/screenshot/sign_convention.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/section_boulon.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/sismique/categorie_importance.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/sismique/categorie_importance_ns.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/sismique/classe_sol.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/sismique/spectre_eleastique_h_type1.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/sismique/spectre_eleastique_h_type2.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_mur_verticaux.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/data/vent/vent_Ffr.png +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/A0_Projet.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC0_Combinaison.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC1_Neige.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC3_Assemblage.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC3_Element_droit.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/EC5_Feu.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode/eurocode/__init__.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode.egg-info/dependency_links.txt +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode.egg-info/requires.txt +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/ourocode.egg-info/top_level.txt +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/setup.cfg +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_A0_Projet.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_EC0_Combinaison.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_EC1_Neige.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_EC5_Feu.py +0 -0
- {ourocode-1.7.1 → ourocode-1.7.3}/tests/test_EC8_Sismique.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ourocode
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.3
|
|
4
4
|
Summary: Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée.
|
|
5
5
|
Author-email: Anthony PARISOT <contact@ourea-structure.fr>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.7.3"
|
|
@@ -11,6 +11,8 @@ from copy import copy
|
|
|
11
11
|
import pandas as pd
|
|
12
12
|
import forallpeople as si
|
|
13
13
|
from handcalcs.decorator import handcalc
|
|
14
|
+
from PySide6.QtWidgets import QApplication, QInputDialog
|
|
15
|
+
from PySide6.QtCore import Qt
|
|
14
16
|
|
|
15
17
|
# sys.path.append(os.path.join(os.getcwd(), "ourocode"))
|
|
16
18
|
# from eurocode.A0_Projet import Batiment
|
|
@@ -71,20 +73,87 @@ class Vent(Batiment):
|
|
|
71
73
|
alt (int): altitude du batiment étudié en m.
|
|
72
74
|
cat_terrain (str): Catégorie de terrain du projet.
|
|
73
75
|
cat_oro (str): Catégorie orographique. Default to "Aucun".
|
|
76
|
+
cas 1 : orographie constituée d'obstacles de hauteurs et de formes variées. Ce type d'orographie est le plus
|
|
77
|
+
fréquemment rencontré.
|
|
78
|
+
cas 2 : Non traité dans ce logiciel ! Orographie constituée d'obstacles bien individualisés. Une falaise ou une colline isolée appartiennent à
|
|
79
|
+
cette catégorie d'orographie, plus rarement rencontrée.
|
|
74
80
|
"""
|
|
75
81
|
super().__init__(**kwargs)
|
|
76
82
|
self.terrain = terrain
|
|
77
83
|
self.oro = oro
|
|
84
|
+
if oro == "Cas 1":
|
|
85
|
+
self._calc_delta_AC()
|
|
86
|
+
elif oro == "Cas 2":
|
|
87
|
+
raise ValueError("Cas 2 non traité dans ce logiciel !")
|
|
78
88
|
self.z = z * si.m
|
|
79
89
|
self.CsCd = CsCd
|
|
80
90
|
|
|
81
91
|
@property
|
|
82
92
|
def cat_terrain(self):
|
|
83
|
-
return
|
|
93
|
+
return self.CAT_TERRAIN[self.terrain]
|
|
84
94
|
|
|
85
95
|
@property
|
|
86
96
|
def cat_oro(self):
|
|
87
|
-
return
|
|
97
|
+
return self.CAT_ORO[self.oro]
|
|
98
|
+
|
|
99
|
+
def _calc_delta_AC(self):
|
|
100
|
+
"""
|
|
101
|
+
Calcule le delta AC en fonction des altitudes des obstacles environnants.
|
|
102
|
+
"""
|
|
103
|
+
if not hasattr(self, "dict_alti_oro"):
|
|
104
|
+
self.dict_alti_oro = {
|
|
105
|
+
"An1": "",
|
|
106
|
+
"An2": "",
|
|
107
|
+
"Ae1": "",
|
|
108
|
+
"Ae2": "",
|
|
109
|
+
"As1": "",
|
|
110
|
+
"As2": "",
|
|
111
|
+
"Ao1": "",
|
|
112
|
+
"Ao2": "",
|
|
113
|
+
}
|
|
114
|
+
# Demande des altitudes via des boîtes de dialogue QInputDialog (PySide6), autonome si aucune QApplication n'existe
|
|
115
|
+
app = QApplication.instance()
|
|
116
|
+
owns_app = False
|
|
117
|
+
if app is None:
|
|
118
|
+
app = QApplication(sys.argv)
|
|
119
|
+
owns_app = True
|
|
120
|
+
try:
|
|
121
|
+
for cle, value in self.dict_alti_oro.items():
|
|
122
|
+
if cle.endswith("1"):
|
|
123
|
+
dist_msg = "à une distance de 500m"
|
|
124
|
+
else:
|
|
125
|
+
dist_msg = "à une distance de 1000m"
|
|
126
|
+
val, ok = QInputDialog.getInt(
|
|
127
|
+
None,
|
|
128
|
+
"Altitude orographique",
|
|
129
|
+
f"Altitude {cle} en m {dist_msg}:",
|
|
130
|
+
0,
|
|
131
|
+
-300,
|
|
132
|
+
3000,
|
|
133
|
+
1,
|
|
134
|
+
flags=Qt.WindowSystemMenuHint | Qt.WindowTitleHint,
|
|
135
|
+
)
|
|
136
|
+
if not ok:
|
|
137
|
+
raise RuntimeError("Saisie des altitudes annulée par l'utilisateur.")
|
|
138
|
+
self.dict_alti_oro[cle] = int(val) * si.m
|
|
139
|
+
finally:
|
|
140
|
+
if owns_app:
|
|
141
|
+
app.quit()
|
|
142
|
+
|
|
143
|
+
Am = (
|
|
144
|
+
2 * self.alt
|
|
145
|
+
+ self.dict_alti_oro["An1"]
|
|
146
|
+
+ self.dict_alti_oro["An2"]
|
|
147
|
+
+ self.dict_alti_oro["Ae1"]
|
|
148
|
+
+ self.dict_alti_oro["Ae2"]
|
|
149
|
+
+ self.dict_alti_oro["As1"]
|
|
150
|
+
+ self.dict_alti_oro["As2"]
|
|
151
|
+
+ self.dict_alti_oro["Ao1"]
|
|
152
|
+
+ self.dict_alti_oro["Ao2"]
|
|
153
|
+
) / 10
|
|
154
|
+
|
|
155
|
+
self.delta_AC = self.alt - Am
|
|
156
|
+
return self.delta_AC
|
|
88
157
|
|
|
89
158
|
@property
|
|
90
159
|
def zone_vent(self):
|
|
@@ -178,45 +247,28 @@ class Vent(Batiment):
|
|
|
178
247
|
|
|
179
248
|
match self.cat_oro:
|
|
180
249
|
case "1":
|
|
181
|
-
|
|
182
|
-
"An1": "",
|
|
183
|
-
"An2": "",
|
|
184
|
-
"Ae1": "",
|
|
185
|
-
"Ae2": "",
|
|
186
|
-
"As1": "",
|
|
187
|
-
"As2": "",
|
|
188
|
-
"Ao1": "",
|
|
189
|
-
"Ao2": "",
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
for cle, value in dict_alti.items():
|
|
193
|
-
dict_alti[cle] = int(input("Altitude {0} en m: ".format(cle)))
|
|
194
|
-
|
|
195
|
-
Am = (
|
|
196
|
-
2 * self.alt
|
|
197
|
-
+ dict_alti["An1"]
|
|
198
|
-
+ dict_alti["An2"]
|
|
199
|
-
+ dict_alti["Ae1"]
|
|
200
|
-
+ dict_alti["Ae2"]
|
|
201
|
-
+ dict_alti["As1"]
|
|
202
|
-
+ dict_alti["As2"]
|
|
203
|
-
+ dict_alti["Ao1"]
|
|
204
|
-
+ dict_alti["Ao2"]
|
|
205
|
-
) / 10
|
|
206
|
-
|
|
207
|
-
delta_AC = self.alt - Am
|
|
208
|
-
|
|
250
|
+
Delta_A_C = self.delta_AC.value
|
|
209
251
|
if self.z.value >= 10:
|
|
210
|
-
|
|
252
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
253
|
+
def val():
|
|
254
|
+
C0_z = 1 + 0.004 * Delta_A_C * mt.exp(z - 10)
|
|
255
|
+
res = max(C0_z, 1)
|
|
256
|
+
return res
|
|
211
257
|
else:
|
|
212
|
-
|
|
258
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
259
|
+
def val():
|
|
260
|
+
C0_z = 1 + 0.004 * Delta_A_C * mt.exp(0)
|
|
261
|
+
res = max(C0_z, 1)
|
|
262
|
+
return res
|
|
213
263
|
|
|
214
264
|
case "2":
|
|
215
|
-
|
|
265
|
+
raise ValueError("Erreur la catégorie orographique 2 n'est pas encore implémentée")
|
|
216
266
|
case _:
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
267
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
268
|
+
def val():
|
|
269
|
+
C0_z = 1
|
|
270
|
+
return C0_z
|
|
271
|
+
return val()
|
|
220
272
|
|
|
221
273
|
@property
|
|
222
274
|
# @handcalc(override="params", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
@@ -228,7 +280,7 @@ class Vent(Batiment):
|
|
|
228
280
|
float: vitesse moyenne du vent en m/s
|
|
229
281
|
"""
|
|
230
282
|
C_r_z = self._Cr_z
|
|
231
|
-
C_o_z = self.Co_z
|
|
283
|
+
C_o_z = self.Co_z[1]
|
|
232
284
|
V_b = self.Vb[1]
|
|
233
285
|
|
|
234
286
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
@@ -246,7 +298,7 @@ class Vent(Batiment):
|
|
|
246
298
|
"""
|
|
247
299
|
match self.cat_oro:
|
|
248
300
|
case "1":
|
|
249
|
-
return self.Co_z * (
|
|
301
|
+
return self.Co_z[1] * (
|
|
250
302
|
1 - 2 * 10**-4 * (mt.log10(self.cat_terrain["Z0"]) + 3) ** 6
|
|
251
303
|
) # 4.19NA
|
|
252
304
|
case _:
|
|
@@ -276,10 +328,7 @@ class Vent(Batiment):
|
|
|
276
328
|
):
|
|
277
329
|
return self._sigma_v / self.Vm_z[1] # 4.7
|
|
278
330
|
else:
|
|
279
|
-
|
|
280
|
-
"""Erreur la hauteur max du bâtiment ne peut dépasser 200m,
|
|
281
|
-
impossible de calculer l'intensité de turbulence Iv"""
|
|
282
|
-
)
|
|
331
|
+
raise ValueError("Erreur la hauteur max du bâtiment ne peut dépasser 200m, impossible de calculer l'intensité de turbulence Iv")
|
|
283
332
|
|
|
284
333
|
@property
|
|
285
334
|
def Qb(self):
|
|
@@ -252,14 +252,14 @@ class Assemblage(Projet):
|
|
|
252
252
|
beta = f_h2k / f_h1k
|
|
253
253
|
a = f_h1k * t_1 * diam # N
|
|
254
254
|
b = f_h2k * t_2 * diam # N
|
|
255
|
-
|
|
256
|
-
c =
|
|
257
|
-
|
|
258
|
-
d =
|
|
259
|
-
|
|
260
|
-
e =
|
|
261
|
-
|
|
262
|
-
f =
|
|
255
|
+
c_johansen = a/(1 + beta) * (sqrt(beta + 2 * beta**2 * (1 + t_2 / t_1 + (t_2 / t_1)**2) + beta**3 * (t_2 / t_1)**2) - beta * (1 + t_2 / t_1)) # N
|
|
256
|
+
c = c_johansen + min(effet_corde, c_johansen*coef_limit_Johansen) # N
|
|
257
|
+
d_johansen = 1.05 * a / (2 + beta) * (sqrt(2 * beta * (1 + beta) + (4 * beta * (2 + beta) * M_y_Rk)/(f_h1k * t_1**2 * diam)) - beta) # N
|
|
258
|
+
d = d_johansen + min(effet_corde, d_johansen*coef_limit_Johansen) # N
|
|
259
|
+
e_johansen = 1.05 * (f_h1k * t_2 * diam) / (1 + 2 * beta) * (sqrt(2 * beta**2 * (1 + beta) + (4 * beta * (1 + 2 * beta) * M_y_Rk)/(f_h1k * t_2**2 * diam)) - beta) # N
|
|
260
|
+
e = e_johansen + min(effet_corde, e_johansen*coef_limit_Johansen) # N
|
|
261
|
+
f_johansen = 1.15 * sqrt((2 * beta)/(1 + beta)) * sqrt(2 * M_y_Rk * f_h1k * diam) # N
|
|
262
|
+
f = f_johansen + min(effet_corde, f_johansen*coef_limit_Johansen) # N
|
|
263
263
|
return a, b, c, d, e, f
|
|
264
264
|
|
|
265
265
|
calcul = val()
|
|
@@ -287,10 +287,10 @@ class Assemblage(Projet):
|
|
|
287
287
|
beta = f_h2k / f_h1k
|
|
288
288
|
g = f_h1k * t_1 * diam # N
|
|
289
289
|
h = 0.5 * f_h2k * t_2 * diam # N
|
|
290
|
-
|
|
291
|
-
j =
|
|
292
|
-
|
|
293
|
-
k =
|
|
290
|
+
j_johansen = 1.05 * g / (2 + beta) * (sqrt(2 * beta * (1 + beta) + (4 * beta * (2 + beta) * M_y_Rk)/ (f_h1k * t_1**2 * diam)) - beta) # N
|
|
291
|
+
j = j_johansen + min(effet_corde, j_johansen*coef_limit_Johansen) # N
|
|
292
|
+
k_johansen = 1.15 * sqrt((2 * beta)/(1 + beta)) * sqrt(2 * M_y_Rk * f_h1k * diam) # N
|
|
293
|
+
k = k_johansen + min(effet_corde, k_johansen*coef_limit_Johansen) # N
|
|
294
294
|
return g, h, j, k
|
|
295
295
|
|
|
296
296
|
calcul = val()
|
|
@@ -355,16 +355,16 @@ class Assemblage(Projet):
|
|
|
355
355
|
def val():
|
|
356
356
|
effet_corde = F_ax_Rk/4 # N
|
|
357
357
|
a = 0.4 * f_h2k * t_2 * diam # N
|
|
358
|
-
|
|
359
|
-
b =
|
|
358
|
+
b_johansen = 1.15 * sqrt(2 * M_y_Rk * f_h2k * diam) # N
|
|
359
|
+
b = b_johansen + min(effet_corde, b_johansen*coef_limit_Johansen) # N
|
|
360
360
|
return a, b
|
|
361
361
|
else:
|
|
362
362
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
363
363
|
def val():
|
|
364
364
|
effet_corde = F_ax_Rk/4 # N
|
|
365
365
|
a = 0.4 * f_h1k * t_1 * diam # N
|
|
366
|
-
|
|
367
|
-
b =
|
|
366
|
+
b_johansen = 1.15 * sqrt(2 * M_y_Rk * f_h1k * diam) # N
|
|
367
|
+
b = b_johansen + min(effet_corde, b_johansen*coef_limit_Johansen) # N
|
|
368
368
|
return a, b
|
|
369
369
|
|
|
370
370
|
calcul = val()
|
|
@@ -387,20 +387,20 @@ class Assemblage(Projet):
|
|
|
387
387
|
def val():
|
|
388
388
|
effet_corde = F_ax_Rk/4 # N
|
|
389
389
|
c = f_h2k * t_2 * diam # N
|
|
390
|
-
|
|
391
|
-
d =
|
|
392
|
-
|
|
393
|
-
e =
|
|
390
|
+
d_johansen = c * (sqrt(2 + (4 * M_y_Rk) / (f_h2k * diam * t_2 ** 2)) - 1) # N
|
|
391
|
+
d = d_johansen + min(effet_corde, d_johansen*coef_limit_Johansen) # N
|
|
392
|
+
e_johansen = 2.3 * sqrt(M_y_Rk * f_h2k * diam) # N
|
|
393
|
+
e = e_johansen + min(effet_corde, e_johansen*coef_limit_Johansen) # N
|
|
394
394
|
return c, d, e
|
|
395
395
|
else:
|
|
396
396
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
397
397
|
def val():
|
|
398
398
|
effet_corde = F_ax_Rk/4 # N
|
|
399
399
|
c = f_h1k * t_1 * diam # N
|
|
400
|
-
|
|
401
|
-
d =
|
|
402
|
-
|
|
403
|
-
e =
|
|
400
|
+
d_johansen = c * (sqrt(2 + (4 * M_y_Rk) / (f_h1k * diam * t_1 ** 2)) - 1) # N
|
|
401
|
+
d = d_johansen + min(effet_corde, d_johansen*coef_limit_Johansen) # N
|
|
402
|
+
e_johansen = 2.3 * sqrt(M_y_Rk * f_h1k * diam) # N
|
|
403
|
+
e = e_johansen + min(effet_corde, e_johansen*coef_limit_Johansen) # N
|
|
404
404
|
return c, d, e
|
|
405
405
|
|
|
406
406
|
calcul = val()
|
|
@@ -423,10 +423,10 @@ class Assemblage(Projet):
|
|
|
423
423
|
def val():
|
|
424
424
|
effet_corde = F_ax_Rk/4 # N
|
|
425
425
|
f = f_h1k * t_1 * diam # N
|
|
426
|
-
|
|
427
|
-
g =
|
|
428
|
-
|
|
429
|
-
h =
|
|
426
|
+
g_johansen = f * (sqrt(2 + (4 * M_y_Rk) / (f_h1k * diam * t_1 ** 2)) - 1) # N
|
|
427
|
+
g = g_johansen + min(effet_corde, g_johansen*coef_limit_Johansen) # N
|
|
428
|
+
h_johansen = 2.3 * sqrt(M_y_Rk * f_h1k * diam) # N
|
|
429
|
+
h = h_johansen + min(effet_corde, h_johansen*coef_limit_Johansen) # N
|
|
430
430
|
return f, g, h
|
|
431
431
|
|
|
432
432
|
calcul = val()
|
|
@@ -449,8 +449,8 @@ class Assemblage(Projet):
|
|
|
449
449
|
def val():
|
|
450
450
|
effet_corde = F_ax_Rk/4 # N
|
|
451
451
|
j = 0.5 * f_h2k * t_2 * diam # N
|
|
452
|
-
|
|
453
|
-
k =
|
|
452
|
+
k_johansen = 1.15 * sqrt(2 * M_y_Rk * f_h2k * diam) # N
|
|
453
|
+
k = k_johansen + min(effet_corde, k_johansen*coef_limit_Johansen) # N
|
|
454
454
|
return j, k
|
|
455
455
|
|
|
456
456
|
calcul = val()
|
|
@@ -472,8 +472,8 @@ class Assemblage(Projet):
|
|
|
472
472
|
def val():
|
|
473
473
|
effet_corde = F_ax_Rk/4 # N
|
|
474
474
|
l = 0.5 * f_h2k * t_2 * diam # N
|
|
475
|
-
|
|
476
|
-
m =
|
|
475
|
+
m_johansen = 2.3 * sqrt(M_y_Rk * f_h2k * diam) # N
|
|
476
|
+
m = m_johansen + min(effet_corde, m_johansen*coef_limit_Johansen) # N
|
|
477
477
|
return l, m
|
|
478
478
|
|
|
479
479
|
calcul = val()
|
|
@@ -731,6 +731,7 @@ class Pointe(Assemblage):
|
|
|
731
731
|
self.l = l * si.mm #longueur sous tête
|
|
732
732
|
self.qualite = qualite
|
|
733
733
|
self.n = n
|
|
734
|
+
self._nef = n
|
|
734
735
|
self.fu = self.__qualite_acier.loc["fub"] *si.MPa
|
|
735
736
|
self.alpha = [alpha1, alpha2]
|
|
736
737
|
self.percage = percage
|
|
@@ -851,7 +852,7 @@ class Pointe(Assemblage):
|
|
|
851
852
|
float: portance locale en MPa
|
|
852
853
|
"""
|
|
853
854
|
d = self.d.value * 10**3
|
|
854
|
-
b_calcul = beam.b_calcul
|
|
855
|
+
b_calcul = beam.b_calcul.value * 10**3
|
|
855
856
|
rho_k = beam.rho_k
|
|
856
857
|
if self.dh >= 2*self.d or self.type_organe == "Agrafe":
|
|
857
858
|
if beam.type_bois == "CP":
|
|
@@ -871,7 +872,7 @@ class Pointe(Assemblage):
|
|
|
871
872
|
return fhk * si.MPa
|
|
872
873
|
return val()
|
|
873
874
|
else:
|
|
874
|
-
raise ValueError(f"La tête de la pointe doit être au moins égale à {2*d} mm")
|
|
875
|
+
raise ValueError(f"La tête de la pointe doit être au moins égale à {2*d} mm selon l'EN 1995-1-1 §8.3.1.3 (3).")
|
|
875
876
|
|
|
876
877
|
|
|
877
878
|
def _fhik(self) -> tuple:
|
|
@@ -919,7 +920,7 @@ class Pointe(Assemblage):
|
|
|
919
920
|
if self.type_organe == "Autres pointes":
|
|
920
921
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
921
922
|
def val():
|
|
922
|
-
f_ax_k =
|
|
923
|
+
f_ax_k = 20 * 10**-6 * rho_k_ax**2 * si.MPa
|
|
923
924
|
F_ax_a_Rk = f_ax_k * d * t_pen
|
|
924
925
|
f_head_k = 70 * 10**-6 * rho_k_head**2 * si.MPa
|
|
925
926
|
F_head_Rk = f_head_k * d_h**2
|
|
@@ -928,7 +929,7 @@ class Pointe(Assemblage):
|
|
|
928
929
|
else:
|
|
929
930
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
930
931
|
def val():
|
|
931
|
-
f_ax_k =
|
|
932
|
+
f_ax_k = 20 * 10**-6 * rho_k_ax**2 * si.MPa
|
|
932
933
|
F_ax_a_Rk = f_ax_k * d * t_pen
|
|
933
934
|
f_head_k = 70 * 10**-6 * rho_k_head**2 * si.MPa
|
|
934
935
|
F_head_Rk = f_ax_k * d * t + f_head_k * d_h**2
|
|
@@ -1078,7 +1079,7 @@ class Pointe(Assemblage):
|
|
|
1078
1079
|
a3c = round(10 * self.d, 1)
|
|
1079
1080
|
a4c = a2
|
|
1080
1081
|
|
|
1081
|
-
elif rho_k > 420 and rho_k <= 500:
|
|
1082
|
+
elif (rho_k > 420 and rho_k <= 500) or self._type_beam[i] in self.TYPE_BOIS_ASSEMBLAGE[1:]:
|
|
1082
1083
|
a1 = round((7 + 8 * mt.cos(mt.radians(alpha))) * self.d, 1)
|
|
1083
1084
|
a2 = round(7 * self.d, 1)
|
|
1084
1085
|
a3t = round((15 + 5 * mt.cos(mt.radians(alpha))) * self.d, 1)
|