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.
Files changed (40) hide show
  1. {ourocode-1.6.5/ourocode.egg-info → ourocode-1.6.6}/PKG-INFO +1 -1
  2. ourocode-1.6.6/ourocode/__version__.py +1 -0
  3. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/A0_Projet.py +1 -1
  4. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC5_Element_droit.py +85 -65
  5. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC5_Feu.py +75 -67
  6. {ourocode-1.6.5 → ourocode-1.6.6/ourocode.egg-info}/PKG-INFO +1 -1
  7. {ourocode-1.6.5 → ourocode-1.6.6}/pyproject.toml +1 -1
  8. {ourocode-1.6.5 → ourocode-1.6.6}/tests/test_EC5_Element_droit.py +23 -19
  9. {ourocode-1.6.5 → ourocode-1.6.6}/tests/test_EC5_Feu.py +20 -12
  10. ourocode-1.6.5/ourocode/__version__.py +0 -1
  11. {ourocode-1.6.5 → ourocode-1.6.6}/LICENSE +0 -0
  12. {ourocode-1.6.5 → ourocode-1.6.6}/MANIFEST.in +0 -0
  13. {ourocode-1.6.5 → ourocode-1.6.6}/README.md +0 -0
  14. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/__init__.py +0 -0
  15. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/caracteristique_meca_acier.csv +0 -0
  16. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/caracteristique_meca_bois.csv +0 -0
  17. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/coeff_psy.csv +0 -0
  18. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/gammaM.csv +0 -0
  19. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/kdef.csv +0 -0
  20. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/kfi.csv +0 -0
  21. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/kmod.csv +0 -0
  22. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/limite_fleche.csv +0 -0
  23. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/qualite_acier.csv +0 -0
  24. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/C90_def.png +0 -0
  25. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/Kv_def.png +0 -0
  26. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/fleche.png +0 -0
  27. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/screenshot/sign_convention.png +0 -0
  28. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/data/section_boulon.csv +0 -0
  29. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC0_Combinaison.py +0 -0
  30. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC3_Assemblage.py +0 -0
  31. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC3_Element_droit.py +0 -0
  32. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/EC5_Assemblage.py +0 -0
  33. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/__init__.py +0 -0
  34. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/logical.py +0 -0
  35. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode/eurocode/objet.py +0 -0
  36. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/SOURCES.txt +0 -0
  37. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/dependency_links.txt +0 -0
  38. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/requires.txt +0 -0
  39. {ourocode-1.6.5 → ourocode-1.6.6}/ourocode.egg-info/top_level.txt +0 -0
  40. {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.5
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=(12, 4))
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, lo:si.mm, coeflef: float=COEF_LEF['Appuis simple'][1], pos: str=LOAD_POS, *args, **kwargs):
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
- lo (int): longueur de déversemment en mm
333
- coeflef (float): appuis simple :
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
- porte à faux :
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.lo = lo * si.mm
345
- self.coeflef = coeflef
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.l_ef = self.lo * self.coeflef
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.l_ef = self.l_ef + 2 * self.h_calcul
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.l_ef = self.l_ef - 0.5 * self.h_calcul
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
- l_ef = self.l_ef
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
- sigma_m_crit = (0.78 * b_calcul ** 2 * E_0_05) / (h_calcul * l_ef)
385
- return sigma_m_crit
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
- sigma_m_crit = self.sigma_m_crit[1]
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
- lamb_rel_m = sqrt(f_m0k / sigma_m_crit)
398
- return lamb_rel_m
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
- lamb_rel_m = self.lamb_rel_m[1]
406
-
407
- if lamb_rel_m <= 0.75:
408
- @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
409
- def val():
410
- K_crit = 1
411
- return K_crit
412
- elif 0.75 < lamb_rel_m <= 1.4:
413
- @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
414
- def val():
415
- K_crit = 1.56 - 0.75 * lamb_rel_m
416
- return K_crit
417
- else:
418
- @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
419
- def val():
420
- K_crit = 1 / (lamb_rel_m ** 2)
421
- return K_crit
422
- return val()
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, M: float, axe=['y', 'z']):
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
- M : Moment max dans la barre en kN.m
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
- if not hasattr(self, "Md"):
444
- self.Md = {'y': 0* si.kN*si.m, 'z': 0 * si.kN*si.m}
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.Md[axe] = M * si.kN*si.m
448
-
449
- if axe == 'y':
450
- I = self.inertie[0]
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
- M_d = self.Md[axe]
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
- sigma_m_d = M_d * h_calcul / (I * 2)
464
- return sigma_m_d
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[axe] = value[1]
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
- K_crit = self.K_crit[1]
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 * K_crit) # equ6.33
496
- taux_6_33z = sigma_mz_d / (f_m_d * K_h_z * K_crit) # equ6.33
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
- lo: si.mm,
504
- coeflef: float = Flexion.COEF_LEF["Appuis simple"][1],
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 Barre, provenant du module EC5_Element_droit.py.
510
+ Cette classe est hérité de la classe Feu, provenant du module EC5_Feu.py.
510
511
 
511
512
  Args:
512
- lo (int): longueur de déversemment en mm
513
- coeflef (float): appuis simple :
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
- porte à faux :
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__(lo=lo, coeflef=coeflef, pos=pos, **kwargs)
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.l_ef = self.lo * self.coeflef
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.l_ef = self.l_ef + 2 * self.h_calcul
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.l_ef = self.l_ef - 0.5 * self.h_calcul
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
- l_ef = self.l_ef
537
- E_0_05 = int(self.caract_meca.loc["E005"]) * si.MPa
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
- sigma_m_crit_fi = (0.78 * b_calcul**2 * E_0_05 * K_fi) / (h_calcul * l_ef)
543
- return sigma_m_crit_fi
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["fm0k"]) * si.MPa
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
- lamb_rel_m_fi = sqrt(f_m0k * K_fi / sigma_m_crit)
557
- return lamb_rel_m_fi
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
- lamb_rel_m_fi = self.lamb_rel_m[1]
565
-
566
- if lamb_rel_m_fi <= 0.75:
567
-
568
- @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
569
- def val():
570
- K_crit_fi = 1
571
- return K_crit_fi
572
-
573
- elif 0.75 < lamb_rel_m_fi <= 1.4:
574
-
575
- @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
576
- def val():
577
- K_crit_fi = 1.56 - 0.75 * lamb_rel_m_fi
578
- return K_crit_fi
579
-
580
- else:
581
-
582
- @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
583
- def val():
584
- K_crit_fi = 1 / (lamb_rel_m_fi**2)
585
- return K_crit_fi
586
-
587
- return val()
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
- K_crit_fi = self.K_crit[1]
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 * K_crit_fi) # equ6.33
620
- taux_6_33z = sigma_mz_d_fi / (f_m_d_fi * K_h_z * K_crit_fi) # equ6.33
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, 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, 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 Barre, provenant du module EC5_Element_droit.py.
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 Barre, provenant du module EC5_Element_droit.py.
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, 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 Barre, provenant du module EC5_Element_droit.py.
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.5
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.5"
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, lo=7000, coeflef=0.8, pos="Charge sur fibre comprimée"
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, axe="y")
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.lo == 7 * si.m
104
- assert self.flexion.coeflef == 0.8
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 == 40258064.51612905
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.7721099961494126
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 == 0
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": 3.7320951513985103,
129
- "equ6.12": 2.627652689825585,
130
- "equ6.33y": 3.7530932632673393,
131
- "equ6.33z": 0.0,
132
- "equ6.19": 3.693248628902421,
133
- "equ6.20": 2.5888061673294955,
134
- "equ6.35zyz": 15.743161072121572,
135
- "equ6.35yzz": 5.410545292606226,
136
- "equ6.35yzy": 3.8840891485379205,
137
- "equ6.35zyy": 13.755871509131088,
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": 3.8840891485379205,
172
- "equ6.24": 4.234484439675713,
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, lo=7000, coeflef=0.8, pos="Charge sur fibre tendue"
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, axe="y")
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.lo == 7 * si.m
97
- assert self.flexion.coeflef == 0.8
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 == 0
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": 5.092280445969156,
114
- "equ6.12": 3.583241979399042,
115
- "equ6.33y": 9.345977483810818,
116
- "equ6.33z": 0.0,
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": 5.330269327798991,
151
- "equ6.24": 11.420034707359275,
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