ourocode 1.6.5__tar.gz → 1.6.6__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.6.5/ourocode.egg-info → ourocode-1.6.6}/PKG-INFO +1 -1
- ourocode-1.6.6/ourocode/__version__.py +1 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/A0_Projet.py +1 -1
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC5_Element_droit.py +85 -65
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC5_Feu.py +75 -67
- {ourocode-1.6.5 → ourocode-1.6.6/ourocode.egg-info}/PKG-INFO +1 -1
- {ourocode-1.6.5 → ourocode-1.6.6}/pyproject.toml +1 -1
- {ourocode-1.6.5 → ourocode-1.6.6}/tests/test_EC5_Element_droit.py +23 -19
- {ourocode-1.6.5 → ourocode-1.6.6}/tests/test_EC5_Feu.py +20 -12
- ourocode-1.6.5/ourocode/__version__.py +0 -1
- {ourocode-1.6.5 → ourocode-1.6.6}/LICENSE +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/MANIFEST.in +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/README.md +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/__init__.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/caracteristique_meca_acier.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/caracteristique_meca_bois.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/coeff_psy.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/gammaM.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/kdef.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/kfi.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/kmod.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/limite_fleche.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/qualite_acier.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/C90_def.png +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/Kv_def.png +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/fleche.png +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/sign_convention.png +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/section_boulon.csv +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC0_Combinaison.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC3_Assemblage.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC3_Element_droit.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC5_Assemblage.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/__init__.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/logical.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/objet.py +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/SOURCES.txt +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/dependency_links.txt +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/requires.txt +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/top_level.txt +0 -0
- {ourocode-1.6.5 → ourocode-1.6.6}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ourocode
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.6
|
|
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.6.6"
|
|
@@ -990,7 +990,7 @@ class Model_result(Projet):
|
|
|
990
990
|
):
|
|
991
991
|
"""Retourne un diagramme"""
|
|
992
992
|
plt.clf() # Effacer le graphique précédent
|
|
993
|
-
plt.figure(self.name, figsize=(
|
|
993
|
+
plt.figure(self.name, figsize=(11, 4))
|
|
994
994
|
plt.gcf().subplots_adjust(
|
|
995
995
|
left=0.1, bottom=0.25, right=0.9, top=0.75, wspace=0, hspace=0.95
|
|
996
996
|
)
|
|
@@ -324,34 +324,41 @@ class Flexion(Barre):
|
|
|
324
324
|
"Charge sur fibre tendue"
|
|
325
325
|
)
|
|
326
326
|
|
|
327
|
-
def __init__(self,
|
|
327
|
+
def __init__(self,
|
|
328
|
+
lo_rel_y:si.mm,
|
|
329
|
+
lo_rel_z:si.mm,
|
|
330
|
+
coeflef_y: float=0.9,
|
|
331
|
+
coeflef_z: float=0.9,
|
|
332
|
+
pos: str=LOAD_POS,
|
|
333
|
+
*args, **kwargs):
|
|
328
334
|
"""Classe permettant le calcul de la flexion d'une poutre bois selon l'EN 1995 §6.1.6, §6.2.3, §6.2.4 et §6.3.3.
|
|
329
335
|
Cette classe est hérité de la classe Barre, provenant du module EC5_Element_droit.py.
|
|
330
336
|
|
|
331
337
|
Args:
|
|
332
|
-
|
|
333
|
-
|
|
338
|
+
lo_rel_y/z (int): longueur de déversemment autour de l'axe défini en mm
|
|
339
|
+
coeflef_y/z (float): appuis simple :
|
|
334
340
|
Moment constant : 1
|
|
335
341
|
Charge répartie constante : 0.9
|
|
336
342
|
Charge concentrée au milieu de la portée : 0.8
|
|
337
|
-
|
|
343
|
+
porte à faux :
|
|
338
344
|
Charge répartie constante : 0.5
|
|
339
345
|
Charge concentrée agissant à l'extrémité libre : 0.8.
|
|
340
|
-
|
|
341
346
|
pos (str): positionnement de la charge sur la hauteur de poutre
|
|
342
347
|
"""
|
|
343
348
|
super().__init__(*args, **kwargs)
|
|
344
|
-
self.
|
|
345
|
-
self.
|
|
349
|
+
self.lo_rel_y = lo_rel_y* si.mm
|
|
350
|
+
self.lo_rel_z = lo_rel_z* si.mm
|
|
351
|
+
self.lo_rel = {"y": lo_rel_y, "z": lo_rel_z}
|
|
352
|
+
self.coeflef_y = coeflef_y
|
|
353
|
+
self.coeflef_z = coeflef_z
|
|
354
|
+
self.coeflef = {"y": coeflef_y, "z": coeflef_z}
|
|
346
355
|
self.pos = pos
|
|
347
356
|
|
|
348
|
-
|
|
349
357
|
@property
|
|
350
358
|
def K_h(self):
|
|
351
359
|
""" Retourne le coef. Kh qui peut augmenter la resistance caractéristique fm,k et ft,k """
|
|
352
360
|
return self._K_h()
|
|
353
361
|
|
|
354
|
-
|
|
355
362
|
@property
|
|
356
363
|
def K_m(self):
|
|
357
364
|
""" Retourne le coef. Km qui reduit les contrainte d'une poutre scié en flexion """
|
|
@@ -363,64 +370,82 @@ class Flexion(Barre):
|
|
|
363
370
|
else:
|
|
364
371
|
km = 1
|
|
365
372
|
return km
|
|
366
|
-
|
|
367
373
|
|
|
368
374
|
@property
|
|
369
375
|
def sigma_m_crit(self):
|
|
370
376
|
""" Retourne sigma m,crit pour la prise en compte du déversement d'une poutre """
|
|
371
|
-
self.
|
|
377
|
+
self.l_ef_y = self.lo_rel_y * self.coeflef['y']
|
|
378
|
+
self.l_ef_z = self.lo_rel_z * self.coeflef['z']
|
|
372
379
|
if self.pos == "Charge sur fibre comprimée":
|
|
373
|
-
self.
|
|
380
|
+
self.l_ef_y = self.l_ef_y + 2 * self.h_calcul
|
|
381
|
+
self.l_ef_z = self.l_ef_z + 2 * self.h_calcul
|
|
374
382
|
elif self.pos == "Charge sur fibre tendue":
|
|
375
|
-
self.
|
|
376
|
-
|
|
383
|
+
self.l_ef_y = self.l_ef_y - 0.5 * self.h_calcul
|
|
384
|
+
self.l_ef_z = self.l_ef_z - 0.5 * self.h_calcul
|
|
385
|
+
|
|
386
|
+
self.l_ef = {"y": self.l_ef_y, "z": self.l_ef_z}
|
|
377
387
|
b_calcul = self.b_calcul
|
|
378
388
|
h_calcul = self.h_calcul
|
|
379
|
-
|
|
389
|
+
l_ef_y = self.l_ef['y']
|
|
390
|
+
l_ef_z = self.l_ef['z']
|
|
380
391
|
E_0_05 = int(self.caract_meca.loc['E005']) * si.MPa
|
|
381
392
|
|
|
382
393
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
383
394
|
def val():
|
|
384
|
-
|
|
385
|
-
|
|
395
|
+
sigma_m_crit_y = (0.78 * b_calcul ** 2 * E_0_05) / (h_calcul * l_ef_y)
|
|
396
|
+
sigma_m_crit_z = (0.78 * h_calcul ** 2 * E_0_05) / (b_calcul * l_ef_z)
|
|
397
|
+
return {"y": sigma_m_crit_y, "z": sigma_m_crit_z}
|
|
386
398
|
return val()
|
|
387
|
-
|
|
388
399
|
|
|
389
400
|
@property
|
|
390
401
|
def lamb_rel_m(self):
|
|
391
402
|
""" Retourne l'élancement relatif de la section avec pour argument """
|
|
392
403
|
f_m0k = float(self.caract_meca.loc['fm0k']) *si.MPa
|
|
393
|
-
|
|
404
|
+
sigma_m_crit_y = self.sigma_m_crit[1]['y']
|
|
405
|
+
sigma_m_crit_z = self.sigma_m_crit[1]['z']
|
|
394
406
|
|
|
395
407
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
396
408
|
def val():
|
|
397
|
-
|
|
398
|
-
|
|
409
|
+
lamb_rel_m_y = sqrt(f_m0k / sigma_m_crit_y)
|
|
410
|
+
lamb_rel_m_z = sqrt(f_m0k / sigma_m_crit_z)
|
|
411
|
+
return {"y": lamb_rel_m_y, "z": lamb_rel_m_z}
|
|
399
412
|
return val()
|
|
400
|
-
|
|
401
413
|
|
|
402
414
|
@property
|
|
403
415
|
def K_crit(self):
|
|
404
416
|
""" Retourne K,crit le coef. de minoration de la résistance en flexion au déversement"""
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
417
|
+
lamb_rel_m_y = self.lamb_rel_m[1]['y']
|
|
418
|
+
lamb_rel_m_z = self.lamb_rel_m[1]['z']
|
|
419
|
+
result = [None, {"y": None, "z": None}]
|
|
420
|
+
|
|
421
|
+
for axe in ["y", "z"]:
|
|
422
|
+
lamb_rel_m = lamb_rel_m_y if axe == "y" else lamb_rel_m_z
|
|
423
|
+
if lamb_rel_m <= 0.75:
|
|
424
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
425
|
+
def val():
|
|
426
|
+
K_crit = 1
|
|
427
|
+
axe
|
|
428
|
+
return K_crit
|
|
429
|
+
elif 0.75 < lamb_rel_m <= 1.4:
|
|
430
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
431
|
+
def val():
|
|
432
|
+
K_crit = 1.56 - 0.75 * lamb_rel_m
|
|
433
|
+
axe
|
|
434
|
+
return K_crit
|
|
435
|
+
else:
|
|
436
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
437
|
+
def val():
|
|
438
|
+
K_crit = 1 / (lamb_rel_m ** 2)
|
|
439
|
+
axe
|
|
440
|
+
return K_crit
|
|
441
|
+
kcrit_axe = val()
|
|
442
|
+
if result[0]:
|
|
443
|
+
result[0] = result[0] + kcrit_axe[0]
|
|
444
|
+
else:
|
|
445
|
+
result[0] = kcrit_axe[0]
|
|
446
|
+
result[1][axe] = kcrit_axe[1]
|
|
447
|
+
result = (result[0], result[1])
|
|
448
|
+
return result
|
|
424
449
|
|
|
425
450
|
def f_m_d(self, loadtype=Barre.LOAD_TIME, typecombi=Barre.TYPE_ACTION):
|
|
426
451
|
"""Retourne la résistance f,m,d de l'élément en MPa
|
|
@@ -435,35 +460,29 @@ class Flexion(Barre):
|
|
|
435
460
|
return self._f_type_d("fm0k", loadtype, typecombi)
|
|
436
461
|
|
|
437
462
|
|
|
438
|
-
def sigma_m_d(self,
|
|
463
|
+
def sigma_m_d(self, My: float, Mz: float):
|
|
439
464
|
""" Retourne la contrainte sigma,m,d suivant sont axes de flexion avec :
|
|
440
|
-
|
|
441
|
-
axe : Axe d'inertie quadratique à considérer
|
|
465
|
+
My/z : Moment autour de l'axe y et/ou z dans la barre en kN.m
|
|
442
466
|
"""
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
self.sigma_m_rd = {'y': 0 * si.MPa, 'z': 0 * si.MPa}
|
|
467
|
+
self.Md = {'y': My* si.kN*si.m, 'z': Mz * si.kN*si.m}
|
|
468
|
+
self.sigma_m_rd = {'y': 0 * si.MPa, 'z': 0 * si.MPa}
|
|
446
469
|
|
|
447
|
-
self.
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
h_calcul = self.h_calcul
|
|
452
|
-
elif axe == 'z':
|
|
453
|
-
I = self.inertie[1]
|
|
454
|
-
h_calcul = self.b_calcul
|
|
455
|
-
#prend en compte une section circulaire si aucun des deux axes
|
|
456
|
-
else:
|
|
457
|
-
I = self.inertie
|
|
470
|
+
Iy = self.inertie[0]
|
|
471
|
+
h_calcul = self.h_calcul
|
|
472
|
+
Iz = self.inertie[1]
|
|
473
|
+
b_calcul = self.b_calcul
|
|
458
474
|
|
|
459
|
-
|
|
475
|
+
M_y = self.Md['y']
|
|
476
|
+
M_z = self.Md['z']
|
|
460
477
|
|
|
461
478
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
462
479
|
def val():
|
|
463
|
-
|
|
464
|
-
|
|
480
|
+
sigma_my_d = M_y * h_calcul / (Iy * 2)
|
|
481
|
+
sigma_mz_d = M_z * b_calcul / (Iz * 2)
|
|
482
|
+
return {"y": sigma_my_d, "z": sigma_mz_d}
|
|
465
483
|
value = val()
|
|
466
|
-
self.sigma_m_rd[
|
|
484
|
+
self.sigma_m_rd["y"] = value[1]["y"]
|
|
485
|
+
self.sigma_m_rd["z"] = value[1]["z"]
|
|
467
486
|
return value
|
|
468
487
|
|
|
469
488
|
|
|
@@ -486,14 +505,15 @@ class Flexion(Barre):
|
|
|
486
505
|
K_h_y = self.K_h['y']
|
|
487
506
|
K_h_z = self.K_h['z']
|
|
488
507
|
K_m = self.K_m
|
|
489
|
-
|
|
508
|
+
K_crit_y = self.K_crit[1]["y"]
|
|
509
|
+
K_crit_z = self.K_crit[1]["z"]
|
|
490
510
|
|
|
491
511
|
@handcalc(override="short", precision=3, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
492
512
|
def base():
|
|
493
513
|
taux_6_11 = sigma_my_d / (f_m_d * K_h_y) + K_m * sigma_mz_d / (f_m_d * K_h_z) # equ6.11
|
|
494
514
|
taux_6_12 = K_m * sigma_my_d / (f_m_d * K_h_y) + sigma_mz_d / (f_m_d * K_h_z) # equ6.12
|
|
495
|
-
taux_6_33y = sigma_my_d / (f_m_d * K_h_y *
|
|
496
|
-
taux_6_33z = sigma_mz_d / (f_m_d * K_h_z *
|
|
515
|
+
taux_6_33y = sigma_my_d / (f_m_d * K_h_y * K_crit_y) # equ6.33
|
|
516
|
+
taux_6_33z = sigma_mz_d / (f_m_d * K_h_z * K_crit_z) # equ6.33
|
|
497
517
|
return taux_6_11, taux_6_12, taux_6_33y, taux_6_33z
|
|
498
518
|
|
|
499
519
|
base_val = base()
|
|
@@ -500,91 +500,105 @@ class Feu(Barre):
|
|
|
500
500
|
class Flexion_feu(Feu, Flexion):
|
|
501
501
|
def __init__(
|
|
502
502
|
self,
|
|
503
|
-
|
|
504
|
-
|
|
503
|
+
lo_rel_y:si.mm, lo_rel_z:si.mm,
|
|
504
|
+
coeflef_y: float=0.9,
|
|
505
|
+
coeflef_z: float=0.9,
|
|
505
506
|
pos: str = Flexion.LOAD_POS,
|
|
506
507
|
**kwargs,
|
|
507
508
|
):
|
|
508
509
|
"""Classe permettant le calcul de la flexion d'une poutre bois selon l'EN 1995 §6.1.6, §6.2.3, §6.2.4 et §6.3.3.
|
|
509
|
-
Cette classe est hérité de la classe
|
|
510
|
+
Cette classe est hérité de la classe Feu, provenant du module EC5_Feu.py.
|
|
510
511
|
|
|
511
512
|
Args:
|
|
512
|
-
|
|
513
|
-
|
|
513
|
+
lo_rel_y/z (int): longueur de déversemment autour de l'axe défini en mm
|
|
514
|
+
coeflef_y/z (float): appuis simple :
|
|
514
515
|
Moment constant : 1
|
|
515
516
|
Charge répartie constante : 0.9
|
|
516
517
|
Charge concentrée au milieu de la portée : 0.8
|
|
517
|
-
|
|
518
|
+
porte à faux :
|
|
518
519
|
Charge répartie constante : 0.5
|
|
519
520
|
Charge concentrée agissant à l'extrémité libre : 0.8.
|
|
520
|
-
|
|
521
521
|
pos (str): positionnement de la charge sur la hauteur de poutre
|
|
522
522
|
"""
|
|
523
|
-
super().__init__(
|
|
523
|
+
super().__init__(lo_rel_y=lo_rel_y, lo_rel_z=lo_rel_z, coeflef_y=coeflef_y, coeflef_z=coeflef_z, pos=pos, **kwargs)
|
|
524
524
|
|
|
525
525
|
@property
|
|
526
526
|
def sigma_m_crit(self):
|
|
527
|
-
"""Retourne sigma m,crit pour la prise en compte du déversement d'une poutre"""
|
|
528
|
-
self.
|
|
527
|
+
""" Retourne sigma m,crit pour la prise en compte du déversement d'une poutre """
|
|
528
|
+
self.l_ef_y = self.lo_rel_y * self.coeflef['y']
|
|
529
|
+
self.l_ef_z = self.lo_rel_z * self.coeflef['z']
|
|
529
530
|
if self.pos == "Charge sur fibre comprimée":
|
|
530
|
-
self.
|
|
531
|
+
self.l_ef_y = self.l_ef_y + 2 * self.h_calcul
|
|
532
|
+
self.l_ef_z = self.l_ef_z + 2 * self.h_calcul
|
|
531
533
|
elif self.pos == "Charge sur fibre tendue":
|
|
532
|
-
self.
|
|
533
|
-
|
|
534
|
+
self.l_ef_y = self.l_ef_y - 0.5 * self.h_calcul
|
|
535
|
+
self.l_ef_z = self.l_ef_z - 0.5 * self.h_calcul
|
|
536
|
+
|
|
537
|
+
self.l_ef = {"y": self.l_ef_y, "z": self.l_ef_z}
|
|
534
538
|
b_calcul = self.b_calcul
|
|
535
539
|
h_calcul = self.h_calcul
|
|
536
|
-
|
|
537
|
-
|
|
540
|
+
l_ef_y = self.l_ef['y']
|
|
541
|
+
l_ef_z = self.l_ef['z']
|
|
542
|
+
E_0_05 = int(self.caract_meca.loc['E005']) * si.MPa
|
|
538
543
|
K_fi = self.K_fi
|
|
539
|
-
|
|
544
|
+
|
|
540
545
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
541
546
|
def val():
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
547
|
+
sigma_m_crit_y_fi = (0.78 * b_calcul ** 2 * E_0_05 * K_fi) / (h_calcul * l_ef_y)
|
|
548
|
+
sigma_m_crit_z_fi = (0.78 * h_calcul ** 2 * E_0_05 * K_fi) / (b_calcul * l_ef_z)
|
|
549
|
+
return {"y": sigma_m_crit_y_fi, "z": sigma_m_crit_z_fi}
|
|
545
550
|
return val()
|
|
546
551
|
|
|
547
552
|
@property
|
|
548
553
|
def lamb_rel_m(self):
|
|
549
|
-
"""Retourne l'élancement relatif de la section avec pour argument"""
|
|
550
|
-
f_m0k = float(self.caract_meca.loc[
|
|
554
|
+
""" Retourne l'élancement relatif de la section avec pour argument """
|
|
555
|
+
f_m0k = float(self.caract_meca.loc['fm0k']) *si.MPa
|
|
556
|
+
sigma_m_crit_y_fi = self.sigma_m_crit[1]['y']
|
|
557
|
+
sigma_m_crit_z_fi = self.sigma_m_crit[1]['z']
|
|
551
558
|
K_fi = self.K_fi
|
|
552
|
-
sigma_m_crit = self.sigma_m_crit[1]
|
|
553
559
|
|
|
554
560
|
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
555
561
|
def val():
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
562
|
+
lamb_rel_m_y_fi = sqrt(f_m0k * K_fi / sigma_m_crit_y_fi)
|
|
563
|
+
lamb_rel_m_z_fi = sqrt(f_m0k * K_fi / sigma_m_crit_z_fi)
|
|
564
|
+
return {"y": lamb_rel_m_y_fi, "z": lamb_rel_m_z_fi}
|
|
559
565
|
return val()
|
|
560
566
|
|
|
561
567
|
@property
|
|
562
568
|
def K_crit(self):
|
|
563
|
-
"""Retourne K,crit le coef. de minoration de la résistance en flexion au déversement"""
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
569
|
+
""" Retourne K,crit le coef. de minoration de la résistance en flexion au déversement"""
|
|
570
|
+
lamb_rel_m_y = self.lamb_rel_m[1]['y']
|
|
571
|
+
lamb_rel_m_z = self.lamb_rel_m[1]['z']
|
|
572
|
+
result = [None, {"y": None, "z": None}]
|
|
573
|
+
|
|
574
|
+
for axe in ["y", "z"]:
|
|
575
|
+
lamb_rel_m_fi = lamb_rel_m_y if axe == "y" else lamb_rel_m_z
|
|
576
|
+
if lamb_rel_m_fi <= 0.75:
|
|
577
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
578
|
+
def val():
|
|
579
|
+
K_crit_fi = 1
|
|
580
|
+
axe
|
|
581
|
+
return K_crit_fi
|
|
582
|
+
elif 0.75 < lamb_rel_m_fi <= 1.4:
|
|
583
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
584
|
+
def val():
|
|
585
|
+
K_crit_fi = 1.56 - 0.75 * lamb_rel_m_fi
|
|
586
|
+
axe
|
|
587
|
+
return K_crit_fi
|
|
588
|
+
else:
|
|
589
|
+
@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
590
|
+
def val():
|
|
591
|
+
K_crit_fi = 1 / (lamb_rel_m_fi ** 2)
|
|
592
|
+
axe
|
|
593
|
+
return K_crit_fi
|
|
594
|
+
kcrit_axe = val()
|
|
595
|
+
if result[0]:
|
|
596
|
+
result[0] = result[0] + kcrit_axe[0]
|
|
597
|
+
else:
|
|
598
|
+
result[0] = kcrit_axe[0]
|
|
599
|
+
result[1][axe] = kcrit_axe[1]
|
|
600
|
+
result = (result[0], result[1])
|
|
601
|
+
return result
|
|
588
602
|
|
|
589
603
|
def f_m_d(self):
|
|
590
604
|
"""Retourne la résistance f,m,d au feu de l'élément en MPa
|
|
@@ -610,14 +624,15 @@ class Flexion_feu(Feu, Flexion):
|
|
|
610
624
|
K_h_y = self.K_h["y"]
|
|
611
625
|
K_h_z = self.K_h["z"]
|
|
612
626
|
K_m = self.K_m
|
|
613
|
-
|
|
627
|
+
K_crit_y_fi = self.K_crit[1]["y"]
|
|
628
|
+
K_crit_z_fi = self.K_crit[1]["z"]
|
|
614
629
|
|
|
615
630
|
@handcalc(override="short", precision=3, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
616
631
|
def base():
|
|
617
632
|
taux_6_11 = sigma_my_d_fi / (f_m_d_fi * K_h_y) + K_m * sigma_mz_d_fi / (f_m_d_fi * K_h_z) # equ6.11
|
|
618
633
|
taux_6_12 = K_m * sigma_my_d_fi / (f_m_d_fi * K_h_y) + sigma_mz_d_fi / (f_m_d_fi * K_h_z) # equ6.12
|
|
619
|
-
taux_6_33y = sigma_my_d_fi / (f_m_d_fi * K_h_y *
|
|
620
|
-
taux_6_33z = sigma_mz_d_fi / (f_m_d_fi * K_h_z *
|
|
634
|
+
taux_6_33y = sigma_my_d_fi / (f_m_d_fi * K_h_y * K_crit_y_fi) # equ6.33
|
|
635
|
+
taux_6_33z = sigma_mz_d_fi / (f_m_d_fi * K_h_z * K_crit_z_fi) # equ6.33
|
|
621
636
|
return taux_6_11, taux_6_12, taux_6_33y, taux_6_33z
|
|
622
637
|
|
|
623
638
|
base_val = base()
|
|
@@ -627,7 +642,7 @@ class Flexion_feu(Feu, Flexion):
|
|
|
627
642
|
self.taux_m_rd["equ6.33y"] = base_val[1][2]
|
|
628
643
|
self.taux_m_rd["equ6.33z"] = base_val[1][3]
|
|
629
644
|
|
|
630
|
-
if compression and isinstance(compression,
|
|
645
|
+
if compression and isinstance(compression, Compression_feu):
|
|
631
646
|
sigma_c_0_d = compression.sigma_c_0_rd
|
|
632
647
|
f_c_0_d = compression.f_type_rd
|
|
633
648
|
K_c_y = compression.kc_Axe[1]["y"]
|
|
@@ -646,14 +661,7 @@ class Flexion_feu(Feu, Flexion):
|
|
|
646
661
|
taux_6_35yzz = (taux_6_33y + (sigma_mz_d_fi / (f_m_d_fi * K_h_z)) ** 2 + taux_6_24) # equ6.35 interprétation
|
|
647
662
|
taux_6_35yzy = (taux_6_33z**2 + (sigma_my_d_fi / (f_m_d_fi * K_h_y)) + taux_6_23) # equ6.35
|
|
648
663
|
taux_6_35zyy = (taux_6_33z + (sigma_my_d_fi / (f_m_d_fi * K_h_y)) ** 2 + taux_6_23) # equ6.35 interprétation
|
|
649
|
-
return (
|
|
650
|
-
taux_6_19,
|
|
651
|
-
taux_6_20,
|
|
652
|
-
taux_6_35zyz,
|
|
653
|
-
taux_6_35yzz,
|
|
654
|
-
taux_6_35yzy,
|
|
655
|
-
taux_6_35zyy,
|
|
656
|
-
)
|
|
664
|
+
return (taux_6_19, taux_6_20, taux_6_35zyz, taux_6_35yzz, taux_6_35yzy, taux_6_35zyy)
|
|
657
665
|
|
|
658
666
|
compression_val = comp(
|
|
659
667
|
self.taux_m_rd["equ6.11"],
|
|
@@ -670,7 +678,7 @@ class Flexion_feu(Feu, Flexion):
|
|
|
670
678
|
self.taux_m_rd["equ6.35yzy"] = compression_val[1][4]
|
|
671
679
|
self.taux_m_rd["equ6.35zyy"] = compression_val[1][5]
|
|
672
680
|
|
|
673
|
-
if traction and isinstance(traction,
|
|
681
|
+
if traction and isinstance(traction, Traction_feu):
|
|
674
682
|
taux_6_1 = traction.taux_t_0_rd["equ6.1"]
|
|
675
683
|
|
|
676
684
|
@handcalc(override="short", precision=3, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
|
|
@@ -693,7 +701,7 @@ class Flexion_feu(Feu, Flexion):
|
|
|
693
701
|
class Traction_feu(Feu, Traction):
|
|
694
702
|
def __init__(self, **kwargs):
|
|
695
703
|
"""Classe permettant le calcul de la Traction d'un élément bois selon l'EN 1995.
|
|
696
|
-
Cette classe est hérité de la classe
|
|
704
|
+
Cette classe est hérité de la classe Feu, provenant du module EC5_Feu.py.
|
|
697
705
|
"""
|
|
698
706
|
super().__init__(**kwargs)
|
|
699
707
|
|
|
@@ -732,7 +740,7 @@ class Traction_feu(Feu, Traction):
|
|
|
732
740
|
class Compression_feu(Feu, Compression):
|
|
733
741
|
def __init__(self, lo_y: si.mm, lo_z: si.mm, type_appuis: str = Compression.COEF_LF, **kwargs):
|
|
734
742
|
"""Classe permettant le calcul de la Compression d'un élément bois selon l'EN 1995.
|
|
735
|
-
Cette classe est hérité de la classe
|
|
743
|
+
Cette classe est hérité de la classe Feu, provenant du module EC5_Feu.py.
|
|
736
744
|
|
|
737
745
|
Args:
|
|
738
746
|
lo : Longueur de flambement suivant l'axe de rotation (y ou z) en mm si pas de flambement alors 0
|
|
@@ -818,7 +826,7 @@ class Compression_feu(Feu, Compression):
|
|
|
818
826
|
K_c_y_fi = self.kc_Axe[1]["y"]
|
|
819
827
|
K_c_z_fi = self.kc_Axe[1]["z"]
|
|
820
828
|
|
|
821
|
-
if flexion and isinstance(flexion,
|
|
829
|
+
if flexion and isinstance(flexion, Flexion_feu):
|
|
822
830
|
taux_6_11 = flexion.taux_m_rd["equ6.11"]
|
|
823
831
|
taux_6_12 = flexion.taux_m_rd["equ6.12"]
|
|
824
832
|
else:
|
|
@@ -859,7 +867,7 @@ class Compression_feu(Feu, Compression):
|
|
|
859
867
|
class Cisaillement_feu(Cisaillement, Feu):
|
|
860
868
|
def __init__(self, **kwargs):
|
|
861
869
|
"""Classe qui permet de calculer le cisaillement d'une poutre comme décrit à l'EN 1995 §6.1.7 et §6.5.
|
|
862
|
-
Cette classe est hérité de la classe
|
|
870
|
+
Cette classe est hérité de la classe Feu, provenant du module EC5_Feu.py.
|
|
863
871
|
"""
|
|
864
872
|
super().__init__(**kwargs)
|
|
865
873
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ourocode
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.6
|
|
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.6.
|
|
11
|
+
version = "1.6.6"
|
|
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"}]
|
|
@@ -45,9 +45,9 @@ def compression(barre, load_and_combi_data):
|
|
|
45
45
|
@pytest.fixture
|
|
46
46
|
def flexion(barre, load_and_combi_data):
|
|
47
47
|
flexion = EC5.Flexion._from_parent_class(
|
|
48
|
-
barre,
|
|
48
|
+
barre, lo_rel_y=7000, lo_rel_z=3500, coeflef_y=0.9, coeflef_z=0.8, pos="Charge sur fibre comprimée"
|
|
49
49
|
)
|
|
50
|
-
flexion.sigma_m_d(100,
|
|
50
|
+
flexion.sigma_m_d(100, 50)
|
|
51
51
|
flexion.f_m_d(**load_and_combi_data)
|
|
52
52
|
flexion.taux_m_d()
|
|
53
53
|
return flexion
|
|
@@ -100,8 +100,10 @@ class Test_Flexion(object):
|
|
|
100
100
|
self.flexion.taux_m_d(compression, traction)
|
|
101
101
|
|
|
102
102
|
def test_init(self):
|
|
103
|
-
assert self.flexion.
|
|
104
|
-
assert self.flexion.
|
|
103
|
+
assert self.flexion.lo_rel_y == 7 * si.m
|
|
104
|
+
assert self.flexion.lo_rel_z == 3.5 * si.m
|
|
105
|
+
assert self.flexion.coeflef_y == 0.9
|
|
106
|
+
assert self.flexion.coeflef_z == 0.8
|
|
105
107
|
assert self.flexion.pos == "Charge sur fibre comprimée"
|
|
106
108
|
|
|
107
109
|
def test_Kh(self):
|
|
@@ -111,30 +113,32 @@ class Test_Flexion(object):
|
|
|
111
113
|
assert self.flexion.K_m == 0.7
|
|
112
114
|
|
|
113
115
|
def test_sig_m_crit(self):
|
|
114
|
-
assert self.flexion.sigma_m_crit[1].value ==
|
|
116
|
+
assert self.flexion.sigma_m_crit[1]['y'].value == 36173913.04347827
|
|
117
|
+
assert self.flexion.sigma_m_crit[1]['z'].value == 1982117647.058823
|
|
115
118
|
|
|
116
119
|
def test_lamb_rel_m(self):
|
|
117
|
-
assert self.flexion.lamb_rel_m[1] == 0.
|
|
120
|
+
assert self.flexion.lamb_rel_m[1]['y'] == 0.8145314840210526
|
|
121
|
+
assert self.flexion.lamb_rel_m[1]['z'] == 0.1100375486289208
|
|
118
122
|
|
|
119
123
|
def test_sigma_m_d(self):
|
|
120
124
|
assert self.flexion.sigma_m_rd["y"].value == 66666666.66666668
|
|
121
|
-
assert self.flexion.sigma_m_rd["z"].value ==
|
|
125
|
+
assert self.flexion.sigma_m_rd["z"].value == 99999999.99999997
|
|
122
126
|
|
|
123
127
|
def test_f_m_d(self):
|
|
124
128
|
assert self.flexion.f_type_rd == 16.896 * si.MPa
|
|
125
129
|
|
|
126
130
|
def test_taux_m_d(self):
|
|
127
131
|
assert self.flexion.taux_m_rd == {
|
|
128
|
-
"equ6.11":
|
|
129
|
-
"equ6.12":
|
|
130
|
-
"equ6.33y": 3.
|
|
131
|
-
"equ6.33z":
|
|
132
|
-
"equ6.19":
|
|
133
|
-
"equ6.20":
|
|
134
|
-
"equ6.35zyz":
|
|
135
|
-
"equ6.35yzz":
|
|
136
|
-
"equ6.35yzy":
|
|
137
|
-
"equ6.35zyy":
|
|
132
|
+
"equ6.11": 7.498451900709802,
|
|
133
|
+
"equ6.12": 8.008162331698859,
|
|
134
|
+
"equ6.33y": 3.8789057969957397,
|
|
135
|
+
"equ6.33z": 5.3805096418732745,
|
|
136
|
+
"equ6.19": 7.4596053782137135,
|
|
137
|
+
"equ6.20": 7.9693158092027705,
|
|
138
|
+
"equ6.35zyz": 22.083871853179318,
|
|
139
|
+
"equ6.35yzz": 34.4862418326259,
|
|
140
|
+
"equ6.35yzy": 32.833973154829195,
|
|
141
|
+
"equ6.35zyy": 19.13638115100436,
|
|
138
142
|
}
|
|
139
143
|
|
|
140
144
|
|
|
@@ -168,8 +172,8 @@ class Test_Compression:
|
|
|
168
172
|
def test_taux_c_0_d(self):
|
|
169
173
|
print(self.compression.taux_c_0_rd)
|
|
170
174
|
assert self.compression.taux_c_0_rd == {
|
|
171
|
-
"equ6.23":
|
|
172
|
-
"equ6.24":
|
|
175
|
+
"equ6.23": 7.650445897849212,
|
|
176
|
+
"equ6.24": 9.614994081548987,
|
|
173
177
|
"equ6.2": 0.10850694444444445,
|
|
174
178
|
}
|
|
175
179
|
|
|
@@ -78,9 +78,9 @@ def compression(feu):
|
|
|
78
78
|
@pytest.fixture
|
|
79
79
|
def flexion(feu):
|
|
80
80
|
flexion = EC5_feu.Flexion_feu._from_parent_class(
|
|
81
|
-
feu,
|
|
81
|
+
feu, lo_rel_y=7000, lo_rel_z=3500, coeflef_y=0.9, coeflef_z=0.8, pos="Charge sur fibre tendue"
|
|
82
82
|
)
|
|
83
|
-
flexion.sigma_m_d(100,
|
|
83
|
+
flexion.sigma_m_d(100, 50)
|
|
84
84
|
flexion.f_m_d()
|
|
85
85
|
flexion.taux_m_d()
|
|
86
86
|
return flexion
|
|
@@ -90,11 +90,13 @@ class Test_Flexion(object):
|
|
|
90
90
|
@pytest.fixture(autouse=True)
|
|
91
91
|
def setup_method(self, flexion, compression, traction):
|
|
92
92
|
self.flexion = flexion
|
|
93
|
-
self.flexion.taux_m_d(traction=traction)
|
|
93
|
+
self.flexion.taux_m_d(traction=traction, compression=compression)
|
|
94
94
|
|
|
95
95
|
def test_init(self):
|
|
96
|
-
assert self.flexion.
|
|
97
|
-
assert self.flexion.
|
|
96
|
+
assert self.flexion.lo_rel_y == 7 * si.m
|
|
97
|
+
assert self.flexion.lo_rel_z == 3.5 * si.m
|
|
98
|
+
assert self.flexion.coeflef_y == 0.9
|
|
99
|
+
assert self.flexion.coeflef_z == 0.8
|
|
98
100
|
assert self.flexion.pos == "Charge sur fibre tendue"
|
|
99
101
|
|
|
100
102
|
def test_Kh(self):
|
|
@@ -102,7 +104,7 @@ class Test_Flexion(object):
|
|
|
102
104
|
|
|
103
105
|
def test_sigma_m_d(self):
|
|
104
106
|
assert self.flexion.sigma_m_rd["y"].value == 163675555.10053056
|
|
105
|
-
assert self.flexion.sigma_m_rd["z"].value ==
|
|
107
|
+
assert self.flexion.sigma_m_rd["z"].value == 437396117.6737902
|
|
106
108
|
|
|
107
109
|
def test_f_m_d(self):
|
|
108
110
|
assert self.flexion.f_type_rd == 30.360 * si.MPa
|
|
@@ -110,10 +112,16 @@ class Test_Flexion(object):
|
|
|
110
112
|
def test_taux_m_d(self):
|
|
111
113
|
# print(self.flexion.taux_m_rd)
|
|
112
114
|
assert self.flexion.taux_m_rd == {
|
|
113
|
-
"equ6.11":
|
|
114
|
-
"equ6.12":
|
|
115
|
-
"equ6.
|
|
116
|
-
"equ6.
|
|
115
|
+
"equ6.11": 14.260362922063692,
|
|
116
|
+
"equ6.12": 16.680502659534092,
|
|
117
|
+
"equ6.19": 14.215959920703218,
|
|
118
|
+
"equ6.20": 16.63609965817362,
|
|
119
|
+
"equ6.33y": 10.532177484564267,
|
|
120
|
+
"equ6.33z": 13.097260680135049,
|
|
121
|
+
"equ6.35yzy": 176.8685066512106,
|
|
122
|
+
"equ6.35yzz": 189.9693597600049,
|
|
123
|
+
"equ6.35zyy": 38.69959171479235,
|
|
124
|
+
"equ6.35zyz": 131.92296819852655,
|
|
117
125
|
}
|
|
118
126
|
|
|
119
127
|
|
|
@@ -147,8 +155,8 @@ class Test_Compression:
|
|
|
147
155
|
def test_taux_c_0_d(self):
|
|
148
156
|
# print(self.compression.taux_c_0_rd)
|
|
149
157
|
assert self.compression.taux_c_0_rd == {
|
|
150
|
-
"equ6.23":
|
|
151
|
-
"equ6.24":
|
|
158
|
+
"equ6.23": 14.498351803893526,
|
|
159
|
+
"equ6.24": 24.517295387494325,
|
|
152
160
|
"equ6.2": 0.13322620878904579,
|
|
153
161
|
}
|
|
154
162
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.6.5"
|
|
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
|