ourocode 1.7.2__tar.gz → 1.7.4__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.2/ourocode.egg-info → ourocode-1.7.4}/PKG-INFO +1 -1
- ourocode-1.7.4/ourocode/__version__.py +1 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC1_Vent.py +4 -2
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC3_Assemblage.py +57 -16
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC5_Assemblage.py +91 -52
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC5_CVT.py +15 -9
- {ourocode-1.7.2 → ourocode-1.7.4/ourocode.egg-info}/PKG-INFO +1 -1
- {ourocode-1.7.2 → ourocode-1.7.4}/pyproject.toml +1 -1
- ourocode-1.7.2/ourocode/__version__.py +0 -1
- {ourocode-1.7.2 → ourocode-1.7.4}/LICENSE +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/MANIFEST.in +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/README.md +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/__init__.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/caracteristique_meca_acier.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/caracteristique_meca_bois.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/caracteristique_meca_panel.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/carte_action_region.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/coeff_psy.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/exploitation.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/gammaM.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/kdef.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/kfi.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/kmod.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/limite_fleche.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/qualite_acier.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/screenshot/C90_def.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/screenshot/Kv_def.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/screenshot/sign_convention.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/section_boulon.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/sismique/categorie_importance.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/sismique/categorie_importance_ns.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/sismique/classe_sol.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/sismique/spectre_eleastique_h_type1.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/sismique/spectre_eleastique_h_type2.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_mur_verticaux.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Ffr.png +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/A0_Projet.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC0_Combinaison.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC1_Neige.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC3_Element_droit.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC5_Element_droit.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC5_Feu.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/EC8_Sismique.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/__init__.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode/eurocode/objet.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode.egg-info/SOURCES.txt +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode.egg-info/dependency_links.txt +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode.egg-info/requires.txt +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/ourocode.egg-info/top_level.txt +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/setup.cfg +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_A0_Projet.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_EC0_Combinaison.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_EC1_Neige.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_EC5_Assemblage.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_EC5_CVT.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_EC5_Element_droit.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/tests/test_EC5_Feu.py +0 -0
- {ourocode-1.7.2 → ourocode-1.7.4}/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.4
|
|
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.4"
|
|
@@ -252,12 +252,14 @@ class Vent(Batiment):
|
|
|
252
252
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
253
253
|
def val():
|
|
254
254
|
C0_z = 1 + 0.004 * Delta_A_C * mt.exp(z - 10)
|
|
255
|
-
|
|
255
|
+
res = max(C0_z, 1)
|
|
256
|
+
return res
|
|
256
257
|
else:
|
|
257
258
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
258
259
|
def val():
|
|
259
260
|
C0_z = 1 + 0.004 * Delta_A_C * mt.exp(0)
|
|
260
|
-
|
|
261
|
+
res = max(C0_z, 1)
|
|
262
|
+
return res
|
|
261
263
|
|
|
262
264
|
case "2":
|
|
263
265
|
raise ValueError("Erreur la catégorie orographique 2 n'est pas encore implémentée")
|
|
@@ -175,22 +175,27 @@ class Tige(Element):
|
|
|
175
175
|
return self.taux_bl
|
|
176
176
|
|
|
177
177
|
|
|
178
|
-
def Bp_Rd(self, d_ecrou: int, d_head_bl: int
|
|
178
|
+
def Bp_Rd(self, d_ecrou: int, d_head_bl: int):
|
|
179
179
|
"""Retourne la résistance au poinçonnement de la plaque en N
|
|
180
180
|
|
|
181
181
|
Args:
|
|
182
182
|
d_ecrou (int): diamètre extérieur de l'écrou en mm
|
|
183
183
|
d_head_bl (int): diamètre de la tête de boulon en mm
|
|
184
|
-
tp, i (int, args): épaisseur des plaques dans l'assemblage, sinon récupère le t de la classe Element
|
|
185
184
|
|
|
186
185
|
Returns:
|
|
187
186
|
float: résistance de calcul en N
|
|
188
187
|
"""
|
|
189
188
|
d_ecrou = d_ecrou * si.mm
|
|
190
189
|
d_head_bl = d_head_bl * si.mm
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
d_m = (d_ecrou + d_head_bl) / 2
|
|
191
|
+
t_p = self.t
|
|
192
|
+
gamma_M2 = self.GAMMA_M["gamma_M2"]
|
|
193
|
+
f_u = self.fu
|
|
194
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
|
|
195
|
+
def val():
|
|
196
|
+
B_p_Rd = (0.6 * pi * d_m * t_p * f_u) / gamma_M2
|
|
197
|
+
return B_p_Rd
|
|
198
|
+
return val()
|
|
194
199
|
|
|
195
200
|
|
|
196
201
|
def Fb_Rd(self, e1: float ,e2: float , p1: float, p2: float):
|
|
@@ -218,7 +223,7 @@ class Tige(Element):
|
|
|
218
223
|
d_0 = self.d0
|
|
219
224
|
d = self.d
|
|
220
225
|
t = self.t
|
|
221
|
-
gamma_M_2 =
|
|
226
|
+
gamma_M_2 = self.GAMMA_M["gamma_M2"]
|
|
222
227
|
|
|
223
228
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
|
|
224
229
|
def val():
|
|
@@ -246,7 +251,7 @@ class Tige(Element):
|
|
|
246
251
|
f_y = self.fy
|
|
247
252
|
f_u = self.fu
|
|
248
253
|
k_ex = 1
|
|
249
|
-
gamma_M_2 =
|
|
254
|
+
gamma_M_2 = self.GAMMA_M["gamma_M2"]
|
|
250
255
|
|
|
251
256
|
if effort == "Excentré":
|
|
252
257
|
k_ex = 0.5
|
|
@@ -369,7 +374,16 @@ class Soudure(Element):
|
|
|
369
374
|
N_Ed (float): Effort de traction en kN.
|
|
370
375
|
"""
|
|
371
376
|
N_Ed = N_Ed * si.kN
|
|
372
|
-
|
|
377
|
+
gamma_M_2 = self.GAMMA_M["gamma_M2"]
|
|
378
|
+
beta_w = self.beta_w
|
|
379
|
+
a = self.gorge
|
|
380
|
+
l_ef = self.lef
|
|
381
|
+
fu = self.fu
|
|
382
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
|
|
383
|
+
def val():
|
|
384
|
+
cordon_frontal = (beta_w * gamma_M_2 * (N_Ed * sqrt(2)) / fu) / (a * l_ef)
|
|
385
|
+
return cordon_frontal
|
|
386
|
+
return val()
|
|
373
387
|
|
|
374
388
|
|
|
375
389
|
def cordon_laterale(self, V_Ed: float):
|
|
@@ -379,7 +393,16 @@ class Soudure(Element):
|
|
|
379
393
|
V_Ed (float): Effort de cisaillement du cordon en kN.
|
|
380
394
|
"""
|
|
381
395
|
V_Ed = V_Ed * si.kN
|
|
382
|
-
|
|
396
|
+
gamma_M_2 = self.GAMMA_M["gamma_M2"]
|
|
397
|
+
beta_w = self.beta_w
|
|
398
|
+
a = self.gorge
|
|
399
|
+
l_ef = self.lef
|
|
400
|
+
fu = self.fu
|
|
401
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
|
|
402
|
+
def val():
|
|
403
|
+
cordon_laterale = (beta_w * gamma_M_2 * (V_Ed * sqrt(3)) / fu) / (a * l_ef)
|
|
404
|
+
return cordon_laterale
|
|
405
|
+
return val()
|
|
383
406
|
|
|
384
407
|
|
|
385
408
|
def cordon_oblique(self, alpha_cordon: float, N_Ed: float):
|
|
@@ -390,7 +413,16 @@ class Soudure(Element):
|
|
|
390
413
|
"""
|
|
391
414
|
self.alpha_cordon = alpha_cordon
|
|
392
415
|
N_Ed = N_Ed * si.kN
|
|
393
|
-
|
|
416
|
+
gamma_M_2 = self.GAMMA_M["gamma_M2"]
|
|
417
|
+
beta_w = self.beta_w
|
|
418
|
+
a = self.gorge
|
|
419
|
+
l_ef = self.lef
|
|
420
|
+
fu = self.fu
|
|
421
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
|
|
422
|
+
def val():
|
|
423
|
+
cordon_oblique = (beta_w * gamma_M_2 * (N_Ed * sqrt(3 - sin(radians(self.alpha_cordon))**2)) / fu) / (a * l_ef)
|
|
424
|
+
return cordon_oblique
|
|
425
|
+
return val()
|
|
394
426
|
|
|
395
427
|
|
|
396
428
|
def cordon_pieces_obliques(self, N_Ed: float):
|
|
@@ -400,10 +432,19 @@ class Soudure(Element):
|
|
|
400
432
|
N_Ed (float): Effort de traction en kN.
|
|
401
433
|
"""
|
|
402
434
|
N_Ed = N_Ed * si.kN
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
435
|
+
gamma_M_2 = self.GAMMA_M["gamma_M2"]
|
|
436
|
+
beta_w = self.beta_w
|
|
437
|
+
a = self.gorge
|
|
438
|
+
l_ef = self.lef
|
|
439
|
+
fu = self.fu
|
|
440
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
|
|
441
|
+
def val():
|
|
442
|
+
if self.alpha < 90:
|
|
443
|
+
cordon_pieces_obliques = (beta_w * gamma_M_2 * (N_Ed * sqrt(2 - sin(radians(self.alpha)))) / fu) / (a * l_ef)
|
|
444
|
+
elif self.alpha > 90:
|
|
445
|
+
cordon_pieces_obliques = (beta_w * gamma_M_2 * (N_Ed * sqrt(2 + sin(radians(self.alpha)))) / fu) / (a * l_ef)
|
|
446
|
+
return cordon_pieces_obliques
|
|
447
|
+
return val()
|
|
407
448
|
|
|
408
449
|
|
|
409
450
|
def critere_generale(self, FvEd: float, FaxEd: float):
|
|
@@ -430,7 +471,7 @@ class Soudure(Element):
|
|
|
430
471
|
|
|
431
472
|
|
|
432
473
|
def soudure_discontinue(self, b: int, b1: int, t1: int, corrosion: bool=("False", "True")):
|
|
433
|
-
"""
|
|
474
|
+
"""Détermine les dimensions des cordons de soudure discontinue
|
|
434
475
|
|
|
435
476
|
Args:
|
|
436
477
|
b (int): voir EC3 1-8
|
|
@@ -440,7 +481,7 @@ class Soudure(Element):
|
|
|
440
481
|
corrosion (bool, optional): _description_. Defaults to False.
|
|
441
482
|
|
|
442
483
|
Returns:
|
|
443
|
-
|
|
484
|
+
dict: dimensions des cordons de soudure discontinue
|
|
444
485
|
"""
|
|
445
486
|
if corrosion:
|
|
446
487
|
print("Il n'est pas possible d'avoir une soudure discontinue en ambiance corrosive")
|
|
@@ -311,9 +311,19 @@ class Assemblage(Projet):
|
|
|
311
311
|
|
|
312
312
|
return (calcul[0] + calcul2[0], calcul2[1])
|
|
313
313
|
|
|
314
|
+
def _type_plaque(self):
|
|
315
|
+
if self.t <= 0.5 * self.d:
|
|
316
|
+
self.type_plaque = "mince"
|
|
317
|
+
|
|
318
|
+
elif self.d <= self.t:
|
|
319
|
+
self.type_plaque = "epaisse"
|
|
320
|
+
|
|
321
|
+
else:
|
|
322
|
+
self.type_plaque = "intermédiaire"
|
|
323
|
+
return self.type_plaque
|
|
314
324
|
|
|
315
325
|
# 8.2.3 Assemblage bois métal
|
|
316
|
-
def _FvRk_BoisMetal(self, effet_corde: bool):
|
|
326
|
+
def _FvRk_BoisMetal(self, effet_corde: bool, test_type_plaque:bool=True):
|
|
317
327
|
"""Calcul la capacité résistante en cisaillement de la tige en N par plan de cisaillement avec
|
|
318
328
|
t1 : valeur minimale entre epaisseur de l'élément bois latéral et la profondeur de pénétration en mm
|
|
319
329
|
t2 : epaisseur de l'élément bois central en mm
|
|
@@ -338,16 +348,29 @@ class Assemblage(Projet):
|
|
|
338
348
|
self.t = self.beam_2.t
|
|
339
349
|
if self.nCis == 2:
|
|
340
350
|
self.pos_plaq = "centrale"
|
|
341
|
-
|
|
342
|
-
if self.t <= 0.5 * self.d:
|
|
343
|
-
self.type_plaque = "mince"
|
|
344
351
|
|
|
345
|
-
|
|
352
|
+
# On détecte le type de plaque
|
|
353
|
+
if test_type_plaque:
|
|
354
|
+
self._type_plaque()
|
|
355
|
+
|
|
356
|
+
# Si la plaque est intermédiaire, alors on fait une interpolation linéaire entre la valeur critique d'une plaque mince et d'une plaque epaisse
|
|
357
|
+
if self.type_plaque == "intermédiaire":
|
|
358
|
+
t = self.t
|
|
359
|
+
t_mince = 0.5 * self.d
|
|
360
|
+
t_epaisse = self.d
|
|
361
|
+
self.type_plaque = "mince"
|
|
362
|
+
FvRk_mince = self._FvRk_BoisMetal(effet_corde,test_type_plaque=False)
|
|
363
|
+
F_v_Rk_mince = FvRk_mince[1][0]
|
|
346
364
|
self.type_plaque = "epaisse"
|
|
347
|
-
|
|
348
|
-
|
|
365
|
+
FvRk_epaisse = self._FvRk_BoisMetal(effet_corde,test_type_plaque=False)
|
|
366
|
+
F_v_Rk_epaisse = FvRk_epaisse[1][0]
|
|
349
367
|
self.type_plaque = "intermédiaire"
|
|
350
|
-
|
|
368
|
+
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
369
|
+
def val():
|
|
370
|
+
F_v_Rk_inter = F_v_Rk_mince + (t - t_mince) * ((F_v_Rk_epaisse - F_v_Rk_mince)/(t_epaisse - t_mince)) # interpolation entre plaque mince et épaisse
|
|
371
|
+
return F_v_Rk_inter
|
|
372
|
+
FvRk_inter = val()
|
|
373
|
+
return (FvRk_mince[0] + FvRk_epaisse[0] + FvRk_inter[0], (FvRk_inter[1], (FvRk_mince[1][1], FvRk_epaisse[1][1])))
|
|
351
374
|
|
|
352
375
|
if self.type_plaque == "mince" and self.nCis == 1:
|
|
353
376
|
if self._type_beam[0] == "Métal":
|
|
@@ -618,46 +641,59 @@ class Assemblage(Projet):
|
|
|
618
641
|
latex = L_net_value[0]
|
|
619
642
|
L_net_v, L_net_t = L_net_value[1]
|
|
620
643
|
|
|
644
|
+
if not isinstance(mode_rupture, (list, tuple)):
|
|
645
|
+
mode_rupture = [mode_rupture]
|
|
646
|
+
|
|
647
|
+
def _Anet_v(mode: str):
|
|
648
|
+
""" détermine la surface Anet_v en fonction du mode de rupture """
|
|
649
|
+
if mode in ("C", "F", "J", "L", "K", "M"):
|
|
650
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
651
|
+
def a_net_v():
|
|
652
|
+
A_net_v = L_net_v * (t_1 * K_cr)
|
|
653
|
+
return A_net_v
|
|
654
|
+
a_net_v_result = a_net_v()
|
|
655
|
+
return a_net_v_result
|
|
656
|
+
else:
|
|
657
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
658
|
+
def a_net_v(t_ef):
|
|
659
|
+
A_net_v = L_net_v / 2 * (L_net_t + 2 * (t_ef * K_cr))
|
|
660
|
+
return A_net_v
|
|
661
|
+
|
|
662
|
+
match mode:
|
|
663
|
+
case "A":
|
|
664
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
665
|
+
def tef():
|
|
666
|
+
t_ef = 0.4*t_1 # Épaisseur efficace
|
|
667
|
+
return t_ef
|
|
668
|
+
case "B":
|
|
669
|
+
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
670
|
+
def tef():
|
|
671
|
+
t_ef = 1.4 * sqrt(M_y_Rk / (f_hk * diam)) # Épaisseur efficace
|
|
672
|
+
return t_ef
|
|
673
|
+
case "D"|"G":
|
|
674
|
+
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
675
|
+
def tef():
|
|
676
|
+
t_ef = t_1 * (sqrt(2 + (4 * M_y_Rk ) / (f_hk * diam * t_1**2)-1)) # Épaisseur efficace
|
|
677
|
+
return t_ef
|
|
678
|
+
case "E"|"H":
|
|
679
|
+
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
680
|
+
def tef():
|
|
681
|
+
t_ef = 2 * sqrt(M_y_Rk / (f_hk * diam)) # Épaisseur efficace
|
|
682
|
+
return t_ef
|
|
683
|
+
tef_result = tef()
|
|
684
|
+
a_net_v_result = a_net_v(tef_result[1])
|
|
685
|
+
a_net_v_result = (tef_result[0] + a_net_v_result[0], a_net_v_result[1])
|
|
686
|
+
return a_net_v_result
|
|
687
|
+
|
|
688
|
+
list_A_net_v = []
|
|
689
|
+
for mode in mode_rupture:
|
|
690
|
+
a_net_v = _Anet_v(mode)
|
|
691
|
+
list_A_net_v.append(a_net_v)
|
|
621
692
|
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
return A_net_v
|
|
627
|
-
a_net_v_result = a_net_v()
|
|
628
|
-
latex = latex + a_net_v_result[0]
|
|
629
|
-
A_net_v = a_net_v_result[1]
|
|
630
|
-
else:
|
|
631
|
-
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
632
|
-
def a_net_v(t_ef):
|
|
633
|
-
A_net_v = L_net_v / 2 * (L_net_t + 2 * (t_ef * K_cr))
|
|
634
|
-
return A_net_v
|
|
635
|
-
|
|
636
|
-
match mode_rupture:
|
|
637
|
-
case "A":
|
|
638
|
-
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
639
|
-
def tef():
|
|
640
|
-
t_ef = 0.4*t_1 # Épaisseur efficace
|
|
641
|
-
return t_ef
|
|
642
|
-
case "B":
|
|
643
|
-
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
644
|
-
def tef():
|
|
645
|
-
t_ef = 1.4 * sqrt(M_y_Rk / (f_hk * diam)) # Épaisseur efficace
|
|
646
|
-
return t_ef
|
|
647
|
-
case "D"|"G":
|
|
648
|
-
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
649
|
-
def tef():
|
|
650
|
-
t_ef = t_1 * (sqrt(2 + (4 * M_y_Rk ) / (f_hk * diam * t_1**2)-1)) # Épaisseur efficace
|
|
651
|
-
return t_ef
|
|
652
|
-
case "E"|"H":
|
|
653
|
-
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
654
|
-
def tef():
|
|
655
|
-
t_ef = 2 * sqrt(M_y_Rk / (f_hk * diam)) # Épaisseur efficace
|
|
656
|
-
return t_ef
|
|
657
|
-
tef_result = tef()
|
|
658
|
-
a_net_v_result = a_net_v(tef_result[1])
|
|
659
|
-
latex = latex + tef_result[0] + a_net_v_result[0]
|
|
660
|
-
A_net_v = a_net_v_result[1]
|
|
693
|
+
a_net_v_result = min(list_A_net_v, key=lambda x: x[1])
|
|
694
|
+
|
|
695
|
+
latex = latex + a_net_v_result[0]
|
|
696
|
+
A_net_v = a_net_v_result[1]
|
|
661
697
|
|
|
662
698
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
663
699
|
def f_bs_Rk():
|
|
@@ -669,7 +705,7 @@ class Assemblage(Projet):
|
|
|
669
705
|
self.F_bs_Rk = result[1]
|
|
670
706
|
return (latex + result[0], self.F_bs_Rk)
|
|
671
707
|
|
|
672
|
-
def taux_cisaillement(self, Fv_Ed: si.kN, Fax_Ed: si.kN=0, loadtype=Barre.LOAD_TIME):
|
|
708
|
+
def taux_cisaillement(self, Fv_Ed: si.kN=0, Fax_Ed: si.kN=0, loadtype=Barre.LOAD_TIME):
|
|
673
709
|
"""Détermine le taux de cisaillement ou du chargement combiné de l'assemblage
|
|
674
710
|
|
|
675
711
|
Args:
|
|
@@ -1492,8 +1528,11 @@ class Boulon(Assemblage):
|
|
|
1492
1528
|
|
|
1493
1529
|
if self._type_beam[0] == "Métal":
|
|
1494
1530
|
FtRd = Tige(self.d.value*10**3, d_int, self.qualite, True, filetage_EN1090, t=self.beam_1.t.value*10**3, h=self.beam_1.h.value*10**3, classe_acier=self.beam_1.classe_acier, classe_transv=self.beam_1.classe_transv).FtRd
|
|
1495
|
-
d_ext = min(self.beam_1.t*12, 4*self.d)
|
|
1496
1531
|
fc_90_k = float(self.beam_2.caract_meca.loc["fc90k"]) * si.MPa
|
|
1532
|
+
if self.nCis == 1:
|
|
1533
|
+
d_ext = min(self.beam_1.t*12, 4*self.d, d_ext)
|
|
1534
|
+
else:
|
|
1535
|
+
d_ext = min(self.beam_1.t*12, 4*self.d)
|
|
1497
1536
|
else:
|
|
1498
1537
|
FtRd = Tige(self.d.value*10**3, d_int, self.qualite, True, filetage_EN1090, t=0, h=0, classe_acier="S235", classe_transv=3).FtRd
|
|
1499
1538
|
fc_90_k = float(self.beam_1.caract_meca.loc["fc90k"]) * si.MPa
|
|
@@ -1569,7 +1608,7 @@ class Broche(Boulon):
|
|
|
1569
1608
|
|
|
1570
1609
|
|
|
1571
1610
|
class _Tirefond(object):
|
|
1572
|
-
def __init__(self, d:si.mm, d1:si.mm, ds:si.mm, dh:si.mm, l:si.mm, n, rho_a:float, fhead:float, ftensk:float, MyRk:float=0, alpha1: float=0, alpha2: float=0, percage: bool=("False", "True"), **kwargs):
|
|
1611
|
+
def __init__(self, d:si.mm, d1:si.mm, ds:si.mm, dh:si.mm, l:si.mm, n: int, rho_a:float, fhead:float, ftensk:float, MyRk:float=0, alpha1: float=0, alpha2: float=0, percage: bool=("False", "True"), **kwargs):
|
|
1573
1612
|
"""Défini un object tirefond
|
|
1574
1613
|
|
|
1575
1614
|
Args:
|
|
@@ -1717,7 +1756,7 @@ class _Tirefond(object):
|
|
|
1717
1756
|
else:
|
|
1718
1757
|
@handcalc(override="long", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
1719
1758
|
def val():
|
|
1720
|
-
F_head_Rk =
|
|
1759
|
+
F_head_Rk = 10**6 * si.kN #l'élément 1 est métallique donc infini pour ce calcul
|
|
1721
1760
|
return F_head_Rk
|
|
1722
1761
|
return val()
|
|
1723
1762
|
|
|
@@ -1818,7 +1857,7 @@ class Tirefond_inf_7(_Tirefond, Pointe):
|
|
|
1818
1857
|
|
|
1819
1858
|
|
|
1820
1859
|
class Tirefond_sup_6(_Tirefond, Boulon):
|
|
1821
|
-
def __init__(self, d:si.mm, d1:float, ds:float, dh:float, l:si.mm, n, rho_a:float, fhead:float, ftensk:float, MyRk:float=0, alpha1: float=0, alpha2: float=0, **kwargs):
|
|
1860
|
+
def __init__(self, d:si.mm, d1:float, ds:float, dh:float, l:si.mm, n: int, rho_a:float, fhead:float, ftensk:float, MyRk:float=0, alpha1: float=0, alpha2: float=0, **kwargs):
|
|
1822
1861
|
"""
|
|
1823
1862
|
Crée une classe Tirefond_sup_6 pour les tirefonds avec un diamètre efficace supérieur à 6mm
|
|
1824
1863
|
Cette classe hérite de la classe Assemblage du module EC5_Assemblage.py.
|
|
@@ -25,15 +25,23 @@ class MOB(Batiment):
|
|
|
25
25
|
Cette classe est hérité de la classe Batiment, provenant du module A0_Projet.py.
|
|
26
26
|
|
|
27
27
|
|
|
28
|
+
|
|
28
29
|
Un système de mur à ossature bois est composé de plusieurs murs servant aux contreventements,
|
|
29
30
|
ces murs sont intérompus par les portes et fenêtres. Ces murs sont eux même composés de plusieurs panneaux.
|
|
30
31
|
|
|
31
|
-
Il convient donc d'ajouter une classe MOB puis d'ajouter via la méthode "
|
|
32
|
-
Ensuite d'ajouter les murs internes au système de mur via la méthode "
|
|
32
|
+
Il convient donc d'ajouter une classe MOB puis d'ajouter via la méthode "add_sys_wall" chaque système de mur.
|
|
33
|
+
Ensuite d'ajouter les murs internes au système de mur via la méthode "add_wall_to_sys", puis d'ajouter ensuite les panneaux
|
|
33
34
|
à chaque murs via la méthode "add_panel_to_wall".
|
|
34
|
-
|
|
35
35
|
Une méthode plus efficace consiste à écrire dans un fichier JSON les informations pour chaque système de mur,
|
|
36
|
-
puis d'utiliser la méthode "
|
|
36
|
+
puis d'utiliser la méthode "load_walls_data" pour charger les informations.
|
|
37
|
+
|
|
38
|
+
Ensuite on peu utiliser la méthode "calculate_loads_and_deformations" pour calculer les efforts de contreventements et les déformations,
|
|
39
|
+
suivant le centre de gravité et la raideur des systèmes de mur.
|
|
40
|
+
Sinon on peux donner directement les efforts Fv_Ed_ELS et Fv_Ed_ELU par système de mur dans la méthode "add_sys_wall".
|
|
41
|
+
|
|
42
|
+
Enfin on utilise les méthodes "taux_walls" et "taux_ancrage" pour récupérer les taux de contreventements et les taux d'ancrage.
|
|
43
|
+
Attention cette classe ne calcule pas les montants bois notamment au flambement, ni la compression perpendiculaire des montants sur la lisse basse.
|
|
44
|
+
Pour réaliser ces calculs, il faut utiliser la classe Barre et les classes de vérification associées du module EC5_Element_droit.py
|
|
37
45
|
|
|
38
46
|
Args:
|
|
39
47
|
connecteurs_int (Agrafe, Pointe, optional): Objet Agrafe ou Pointe, représentant les connecteurs intérieurs du mur à ossature bois provenant du module EC5_Assemblage.py.
|
|
@@ -103,11 +111,11 @@ class MOB(Batiment):
|
|
|
103
111
|
alpha_Fw_rad = radians(alpha_Fw)
|
|
104
112
|
Ks = self.get_Kser_wall()
|
|
105
113
|
sys_walls_names = self._get_all_sys_walls_names()
|
|
114
|
+
df_sw = pd.DataFrame(index=sys_walls_names, columns=["dn_p_sw", "dn_sw", "a", "b", "c", "d", "e", "C1", "C2", "C3", "C6"])
|
|
106
115
|
if not hasattr(self, "data_sys_walls_loads"):
|
|
107
116
|
self.data_sys_walls_loads = pd.DataFrame(index=sys_walls_names, columns=["Étage", "delta,v,Ed,i ELS", "Fv,Ed,i ELU"])
|
|
108
117
|
self.data_walls_loads = pd.DataFrame(index=self.data_walls.keys(), columns=["Étage", "Fv,Ed,i ELU", "Ft,Ed,i ELU (soulèvement)"])
|
|
109
118
|
self.data_panels_loads = pd.DataFrame(index=self.data_panels.keys(), columns=["Étage", "Fv,Ed,i ELU"])
|
|
110
|
-
df_sw = pd.DataFrame(index=sys_walls_names, columns=["dn_p_sw", "dn_sw", "a", "b", "c", "d", "e", "C1", "C2", "C3", "C6"])
|
|
111
119
|
|
|
112
120
|
for etage_data, sys in self.data.items():
|
|
113
121
|
if etage_data != etage:
|
|
@@ -608,12 +616,10 @@ class MOB(Batiment):
|
|
|
608
616
|
k_wall[1] = k_wall[1] + panel['Nombre'] * self.data_Kser_panels.loc[panel_name]['Kser,p unit.']
|
|
609
617
|
k_wall[2] = k_wall[2] + panel['Nombre'] * self.data_Kser_panels.loc[panel_name]['Coeff. équivalence']
|
|
610
618
|
k_wall[3] = self.data_Kser_panels.loc[panel_name]['Kser,p,ref']
|
|
619
|
+
k_sys_wall[3] = self.data_Kser_panels.loc[panel_name]['Kser,p,ref']
|
|
611
620
|
self.data_Kser_walls.loc[wall_name] = k_wall
|
|
612
621
|
k_sys_wall[1] = k_sys_wall[1] + k_wall[1]
|
|
613
622
|
k_sys_wall[2] = k_sys_wall[2] + k_wall[2]
|
|
614
|
-
|
|
615
|
-
if self.data_Kser_panels.get(panel_name):
|
|
616
|
-
k_sys_wall[3] = self.data_Kser_panels.loc[panel_name]['Kser,p,ref']
|
|
617
623
|
self.data_Kser_sys_walls.loc[sys_name] = k_sys_wall
|
|
618
624
|
|
|
619
625
|
# Trier par index (nommés 'Système de mur' et 'Mur')
|
|
@@ -788,7 +794,7 @@ class MOB(Batiment):
|
|
|
788
794
|
Fv_Rk_anc_li = Fv_Rk_anc_li * si.kN
|
|
789
795
|
e_anc_lb = e_anc_lb * si.mm
|
|
790
796
|
e_anc_li = e_anc_li * si.mm
|
|
791
|
-
self.taux_ancr_walls = pd.DataFrame(columns=['Étage', 'Longueur mur', 'Ft,Ed', 'Ft,Rd', 'Taux
|
|
797
|
+
self.taux_ancr_walls = pd.DataFrame(columns=['Étage', 'Longueur mur', 'Ft,Ed', 'Ft,Rd', 'Taux ancr. soulèvement (%)', 'Fv,anc,Ed', 'Fv,anc,lb,Rd', 'Nbr ancr,lb', 'entraxe anc,lb', 'Taux ancr. lisse basse (%)', 'Fv,anc,li,Rd', 'Nbr ancr,li', 'entraxe anc,li', 'Taux ancr. lisse impl. (%)'])
|
|
792
798
|
|
|
793
799
|
for wall_name, wall in self.data_walls_loads.iterrows():
|
|
794
800
|
if etage and wall['Étage'] != etage:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ourocode
|
|
3
|
-
Version: 1.7.
|
|
3
|
+
Version: 1.7.4
|
|
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
|
|
@@ -8,7 +8,7 @@ include = ["ourocode*"]
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "ourocode"
|
|
11
|
-
version = "1.7.
|
|
11
|
+
version = "1.7.4"
|
|
12
12
|
description = "Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée."
|
|
13
13
|
readme = "README.md"
|
|
14
14
|
authors = [{name = "Anthony PARISOT", email = "contact@ourea-structure.fr"}]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.7.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv
RENAMED
|
File without changes
|
{ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv
RENAMED
|
File without changes
|
{ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv
RENAMED
|
File without changes
|
|
File without changes
|
{ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv
RENAMED
|
File without changes
|
{ourocode-1.7.2 → ourocode-1.7.4}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|