ourocode 2.1.2__py3-none-any.whl → 2.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ourocode might be problematic. Click here for more details.

Files changed (43) hide show
  1. ourocode/data/profil_acier.csv +21 -0
  2. ourocode/eurocode/core/objet.py +3 -3
  3. ourocode/eurocode/ec1/exploitation.py +1 -1
  4. ourocode/eurocode/ec1/neige.py +1 -1
  5. ourocode/eurocode/ec1/vent.py +14 -29
  6. ourocode/eurocode/ec3/assemblage/platine.py +1 -1
  7. ourocode/eurocode/ec3/assemblage/soudure.py +1 -1
  8. ourocode/eurocode/ec3/assemblage/tige.py +1 -1
  9. ourocode/eurocode/ec3/element_droit/__init__.py +2 -1
  10. ourocode/eurocode/ec3/element_droit/cisaillement.py +1 -1
  11. ourocode/eurocode/ec3/element_droit/compression.py +20 -12
  12. ourocode/eurocode/ec3/element_droit/flexion.py +1 -1
  13. ourocode/eurocode/ec3/element_droit/plat.py +1 -1
  14. ourocode/eurocode/ec3/element_droit/profil.py +125 -0
  15. ourocode/eurocode/ec3/element_droit/traction.py +1 -1
  16. ourocode/eurocode/ec3/feu.py +1 -1
  17. ourocode/eurocode/ec5/assemblage/agrafe.py +1 -1
  18. ourocode/eurocode/ec5/assemblage/assemblage.py +1 -1
  19. ourocode/eurocode/ec5/assemblage/boulon.py +1 -1
  20. ourocode/eurocode/ec5/assemblage/broche.py +1 -1
  21. ourocode/eurocode/ec5/assemblage/embrevement.py +1 -1
  22. ourocode/eurocode/ec5/assemblage/pointe.py +1 -1
  23. ourocode/eurocode/ec5/assemblage/tirefond.py +1 -1
  24. ourocode/eurocode/ec5/cvt.py +1 -1
  25. ourocode/eurocode/ec5/element_droit/barre.py +1 -1
  26. ourocode/eurocode/ec5/element_droit/cisaillement.py +1 -1
  27. ourocode/eurocode/ec5/element_droit/compression.py +1 -1
  28. ourocode/eurocode/ec5/element_droit/flexion.py +1 -1
  29. ourocode/eurocode/ec5/element_droit/traction.py +1 -1
  30. ourocode/eurocode/ec5/element_droit/verification_EC5.py +174 -47
  31. ourocode/eurocode/ec5/feu/cisaillement_feu.py +1 -1
  32. ourocode/eurocode/ec5/feu/compression_feu.py +4 -3
  33. ourocode/eurocode/ec5/feu/feu.py +5 -10
  34. ourocode/eurocode/ec5/feu/flexion_feu.py +1 -1
  35. ourocode/eurocode/ec5/feu/traction_feu.py +1 -1
  36. ourocode/eurocode/ec8/sismique.py +1 -1
  37. ourocode/eurocode/mixins/math_utils.py +38 -0
  38. {ourocode-2.1.2.dist-info → ourocode-2.1.3.dist-info}/METADATA +1 -1
  39. {ourocode-2.1.2.dist-info → ourocode-2.1.3.dist-info}/RECORD +43 -41
  40. /ourocode/eurocode/core/{renderer.py → _renderer.py} +0 -0
  41. {ourocode-2.1.2.dist-info → ourocode-2.1.3.dist-info}/WHEEL +0 -0
  42. {ourocode-2.1.2.dist-info → ourocode-2.1.3.dist-info}/licenses/LICENSE +0 -0
  43. {ourocode-2.1.2.dist-info → ourocode-2.1.3.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,21 @@
1
+ type;designation;h;b;tw;tf;r1;A;Av;Avz;Iy;Iz;Wely;Welz;Wply;Wplz;iy;iz;masse
2
+ A refaire complètement !
3
+ HEA;HEA 100;96;100;5.0;8.0;12;21.24;12.0;12.0;349;133.5;69.8;26.7;80.1;41.3;4.06;2.51
4
+ HEA;HEA 120;120;120;5.0;8.0;12;25.34;14.0;14.0;606;229.3;101.1;38.2;116.5;59.9;4.90;3.01
5
+ HEA;HEA 140;140;140;5.5;8.5;12;31.42;16.8;16.8;1033;389.2;147.6;55.6;172.5;89.3;5.74;3.52
6
+ HEA;HEA 160;160;160;6.0;9.0;15;38.77;20.2;20.2;1670;623.9;208.7;78.0;249.3;130.7;6.57;4.02
7
+ HEA;HEA 180;180;180;6.5;9.5;15;45.25;23.8;23.8;2510;924.6;278.9;102.7;329.8;171.7;7.45;4.52
8
+ HEA;HEA 200;200;200;7.0;10.0;18;53.83;27.6;27.6;3692;1335.6;369.2;133.6;431.6;222.8;8.28;4.98
9
+ HEA;HEA 220;220;220;7.5;10.5;18;63.53;31.6;31.6;5409;1955.4;492.6;177.8;571.8;294.4;9.23;5.55
10
+ HEA;HEA 240;240;240;7.5;11.0;21;73.85;36.0;36.0;7762;2768.7;646.8;230.7;773.2;391.2;10.27;6.13
11
+ HEA;HEA 260;260;260;8.0;11.5;21;84.37;40.6;40.6;10455;3667.6;804.3;282.1;959.1;507.6;11.11;6.60
12
+ HEA;HEA 280;280;280;8.5;12.0;24;97.30;46.2;46.2;13670;4762.8;976.4;339.9;1165.8;626.5;11.86;7.00
13
+ HEA;HEA 300;300;300;9.0;12.0;24;111.78;51.6;51.6;18262;6310.4;1217.5;420.7;1431.8;836.2;12.78;7.52
14
+ HEA;HEA 320;320;320;10.0;13.5;27;131.13;59.0;59.0;24529;8172.7;1533.0;510.8;1798.8;1072.3;13.70;7.89
15
+ HEA;HEA 340;340;340;10.0;14.5;27;142.94;65.4;65.4;31533;10474.3;1855.0;616.1;2158.9;1308.9;14.85;8.56
16
+ HEA;HEA 360;360;360;12.5;16.5;27;171.18;75.6;75.6;43191;14178.6;2399.5;787.7;2849.2;1674.9;15.88;9.10
17
+ HEA;HEA 400;400;400;13.5;18.0;27;198.58;86.2;86.2;63222;20580.3;3161.1;1029.0;3765.8;2191.2;17.85;10.19
18
+ HEA;HEA 450;450;450;14.0;20.0;27;237.66;100.2;100.2;93819;29798.3;4170.0;1324.4;4880.9;2816.3;19.88;11.19
19
+ HEA;HEA 500;500;500;16.0;23.0;27;298.31;123.4;123.4;131932;42385.5;5277.3;1695.4;6208.0;3616.8;21.04;11.93
20
+ HEA;HEA 550;550;550;16.5;24.5;27;354.41;143.8;143.8;178830;56837.2;6502.9;2066.8;7648.2;4388.9;22.44;12.67
21
+ HEA;HEA 600;600;600;18.0;28.0;27;428.31;170.4;170.4;238620;78762.8;7954.0;2625.4;9370.9;5318.6;23.63;13.57
@@ -115,7 +115,7 @@ class Objet(SerializationMixin, DataLoaderMixin, MathUtilsMixin, SyntheseMixin):
115
115
 
116
116
  return numeric * self._PHYSICAL_UNITS[unit]
117
117
 
118
- def get_value(self, value: dict|list|str, index: int=None, key: str=None, get_keys: bool=("False", "True"),):
118
+ def get_value(self, value: dict|list|str, index: int|None=None, key: str=None, get_keys: bool=("False", "True"),):
119
119
  """Extrait et retourne une valeur depuis une structure de données complexe.
120
120
 
121
121
  Cette méthode utilitaire permet de naviguer dans les dictionnaires,
@@ -141,9 +141,9 @@ class Objet(SerializationMixin, DataLoaderMixin, MathUtilsMixin, SyntheseMixin):
141
141
  >>> obj.get_value({"x": 1, "y": 2}, get_keys=True)
142
142
  ["x", "y"]
143
143
  """
144
- if index and isinstance(value, list):
144
+ if index is not None and isinstance(value, list):
145
145
  value = value[index]
146
- elif index and isinstance(value, str):
146
+ elif index is not None and isinstance(value, str):
147
147
  value = list(value)[index]
148
148
  elif get_keys and isinstance(value, dict):
149
149
  value = list(value.keys())
@@ -1,7 +1,7 @@
1
1
  from math import *
2
2
 
3
3
  import forallpeople as si
4
- from ourocode.eurocode.core.renderer import handcalc
4
+ from ourocode.eurocode.core._renderer import handcalc
5
5
 
6
6
  from ourocode.eurocode.core.projet import Projet
7
7
 
@@ -5,7 +5,7 @@ import pandas as pd
5
5
  import warnings
6
6
 
7
7
  import forallpeople as si
8
- from ourocode.eurocode.core.renderer import handcalc
8
+ from ourocode.eurocode.core._renderer import handcalc
9
9
 
10
10
  from ourocode.eurocode.core.batiment import Batiment
11
11
 
@@ -9,7 +9,8 @@ from copy import copy
9
9
 
10
10
  import pandas as pd
11
11
  import forallpeople as si
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
+ from ourocode.eurocode.mixins.math_utils import MathUtilsMixin
13
14
 
14
15
  # sys.path.append(os.path.join(os.getcwd(), "ourocode"))
15
16
  # from eurocode.A0_Projet import Batiment
@@ -18,22 +19,6 @@ from ourocode.eurocode.core.batiment import Batiment
18
19
  si.environment("structural")
19
20
 
20
21
 
21
- def interpolation_lineaire(x, xa, xb, ya, yb):
22
- """Fait une interpolation linéaire pour trouver un résultat y entre deux valeur xa et xb"""
23
- y = ya + (x - xa) * ((yb - ya) / (xb - xa))
24
- return y
25
-
26
-
27
- def interpolation_logarithmique(x, xa, xb, ya, yb):
28
- """Fait une interpolation linéaire pour trouver un résultat y entre deux valeur xa et xb"""
29
- y = (
30
- (x > xb) * yb
31
- + (x < xa) * ya
32
- + (x <= xb) * (x >= 1) * (ya - (ya - yb) * mt.log10(x))
33
- )
34
- return y
35
-
36
-
37
22
  class Vent(Batiment):
38
23
  RHO_AIR = 1.225 * si.kg / si.m**3
39
24
  CPI = [0.2, -0.3]
@@ -581,7 +566,7 @@ class Murs_verticaux(Vent):
581
566
  if borne_inf:
582
567
  for i in range(self._df.shape[0]):
583
568
  list_CPE_line.append(
584
- interpolation_lineaire(
569
+ MathUtilsMixin.interpolation_lineaire(
585
570
  h_d,
586
571
  borne_inf,
587
572
  borne_sup,
@@ -598,7 +583,7 @@ class Murs_verticaux(Vent):
598
583
  self._df.loc[self._df.shape[0]] = [
599
584
  self._df.iloc[i, 0],
600
585
  "CPE " + str(round(self.load_area, 2)),
601
- interpolation_logarithmique(
586
+ MathUtilsMixin.interpolation_logarithmique(
602
587
  self.load_area,
603
588
  1,
604
589
  10,
@@ -734,7 +719,7 @@ class Toiture_terrasse_acrotere(Vent):
734
719
  row = [round(self._hp_h, 3), cpe]
735
720
  for j in range(2, num_columns):
736
721
  row.append(
737
- interpolation_lineaire(
722
+ MathUtilsMixin.interpolation_lineaire(
738
723
  self._hp_h,
739
724
  minimum,
740
725
  maximum,
@@ -750,7 +735,7 @@ class Toiture_terrasse_acrotere(Vent):
750
735
  row = [df.iloc[i, 0], "CPE " + str(round(self.load_area, 2))]
751
736
  for j in range(2, num_columns):
752
737
  row.append(
753
- interpolation_logarithmique(
738
+ MathUtilsMixin.interpolation_logarithmique(
754
739
  self.load_area, 1, 10, df.iloc[i + 1, j], df.iloc[i, j]
755
740
  )
756
741
  )
@@ -941,7 +926,7 @@ class Toiture_1_pant(Vent):
941
926
  row.append(df_max.iloc[i, j])
942
927
  else:
943
928
  row.append(
944
- interpolation_lineaire(
929
+ MathUtilsMixin.interpolation_lineaire(
945
930
  self.alpha_toit,
946
931
  minimum,
947
932
  maximum,
@@ -957,7 +942,7 @@ class Toiture_1_pant(Vent):
957
942
  row = [df.iloc[i, 0], "CPE " + str(round(self.load_area, 2))]
958
943
  for j in range(2, num_columns):
959
944
  row.append(
960
- interpolation_logarithmique(
945
+ MathUtilsMixin.interpolation_logarithmique(
961
946
  self.load_area, 1, 10, df.iloc[i + 1, j], df.iloc[i, j]
962
947
  )
963
948
  )
@@ -1166,7 +1151,7 @@ class Toiture_2_pants(Vent):
1166
1151
  row.append(df_max.iloc[i, j])
1167
1152
  else:
1168
1153
  row.append(
1169
- interpolation_lineaire(
1154
+ MathUtilsMixin.interpolation_lineaire(
1170
1155
  self.alpha_toit,
1171
1156
  minimum,
1172
1157
  maximum,
@@ -1182,7 +1167,7 @@ class Toiture_2_pants(Vent):
1182
1167
  row = [df.iloc[i, 0], "CPE " + str(round(self.load_area, 2))]
1183
1168
  for j in range(2, num_columns):
1184
1169
  row.append(
1185
- interpolation_logarithmique(
1170
+ MathUtilsMixin.interpolation_logarithmique(
1186
1171
  self.load_area, 1, 10, df.iloc[i + 1, j], df.iloc[i, j]
1187
1172
  )
1188
1173
  )
@@ -1304,7 +1289,7 @@ class Toiture_isolee_1_pant(Vent):
1304
1289
  row = [self._df.iloc[i, 0], self.phi]
1305
1290
  for j in range(2, 6):
1306
1291
  row.append(
1307
- interpolation_lineaire(
1292
+ MathUtilsMixin.interpolation_lineaire(
1308
1293
  self.phi,
1309
1294
  0,
1310
1295
  1,
@@ -1346,7 +1331,7 @@ class Toiture_isolee_1_pant(Vent):
1346
1331
  row.append(df_max.iloc[i, j])
1347
1332
  else:
1348
1333
  row.append(
1349
- interpolation_lineaire(
1334
+ MathUtilsMixin.interpolation_lineaire(
1350
1335
  self.alpha_toit,
1351
1336
  minimum,
1352
1337
  maximum,
@@ -1480,7 +1465,7 @@ class Toiture_isolee_2_pants(Vent):
1480
1465
  row = [self._df.iloc[i, 0], self.phi]
1481
1466
  for j in range(2, 7):
1482
1467
  row.append(
1483
- interpolation_lineaire(
1468
+ MathUtilsMixin.interpolation_lineaire(
1484
1469
  self.phi,
1485
1470
  0,
1486
1471
  1,
@@ -1522,7 +1507,7 @@ class Toiture_isolee_2_pants(Vent):
1522
1507
  row.append(df_max.iloc[i, j])
1523
1508
  else:
1524
1509
  row.append(
1525
- interpolation_lineaire(
1510
+ MathUtilsMixin.interpolation_lineaire(
1526
1511
  self.alpha_toit,
1527
1512
  minimum,
1528
1513
  maximum,
@@ -6,7 +6,7 @@ import pandas as pd
6
6
 
7
7
  import forallpeople as si
8
8
  si.environment("structural")
9
- from ourocode.eurocode.core.renderer import handcalc
9
+ from ourocode.eurocode.core._renderer import handcalc
10
10
 
11
11
  from ourocode.eurocode.ec3.assemblage.tige import Tige
12
12
  from ourocode.eurocode.ec3.element_droit.plat import Plat
@@ -9,7 +9,7 @@ import matplotlib.pyplot as plt
9
9
  from matplotlib.patches import Rectangle, Circle
10
10
  import forallpeople as si
11
11
  si.environment("structural")
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
13
 
14
14
  from ourocode.eurocode.ec3.element_droit.plat import Plat
15
15
 
@@ -7,7 +7,7 @@ import pandas as pd
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec3.element_droit.plat import Plat
13
13
 
@@ -1,7 +1,8 @@
1
1
  from ourocode.eurocode.ec3.element_droit.plat import Plat
2
+ from ourocode.eurocode.ec3.element_droit.profil import Profil
2
3
  from ourocode.eurocode.ec3.element_droit.traction import Traction
3
4
  from ourocode.eurocode.ec3.element_droit.compression import Compression
4
5
  from ourocode.eurocode.ec3.element_droit.cisaillement import Cisaillement
5
6
  from ourocode.eurocode.ec3.element_droit.flexion import Flexion
6
7
 
7
- __all__ = ["Plat", "Traction", "Compression", "Cisaillement", "Flexion"]
8
+ __all__ = ["Plat", "Profil", "Traction", "Compression", "Cisaillement", "Flexion"]
@@ -5,7 +5,7 @@ from math import sqrt
5
5
 
6
6
  import forallpeople as si
7
7
  si.environment("structural")
8
- from ourocode.eurocode.core.renderer import handcalc
8
+ from ourocode.eurocode.core._renderer import handcalc
9
9
 
10
10
  from ourocode.eurocode.ec3.element_droit.plat import Plat
11
11
 
@@ -5,7 +5,7 @@ from math import sqrt
5
5
 
6
6
  import forallpeople as si
7
7
  si.environment("structural")
8
- from ourocode.eurocode.core.renderer import handcalc
8
+ from ourocode.eurocode.core._renderer import handcalc
9
9
 
10
10
  from ourocode.eurocode.ec3.element_droit.plat import Plat
11
11
 
@@ -17,7 +17,7 @@ class Compression(Plat):
17
17
  "Encastré - Rotule" : 0.7,
18
18
  "Encastré - Encastré" : 0.5,
19
19
  "Encastré - Rouleau" : 1}
20
- def __init__(self, A: si.mm**2, Iy:si.mm**4, Iz:si.mm**4, lo_y: si.mm=0, lo_z: si.mm=0, courbe_flamb: dict="{'y':'c', 'z':'c'}", type_appuis: str=COEF_LF, *args, **kwargs):
20
+ def __init__(self, A: si.mm**2, Iy:si.mm**4, Iz:si.mm**4, lo_y: si.mm=0, lo_z: si.mm=0, courbe_flamb: dict="{'y':'c', 'z':'c'}", type_appuis_y: str=COEF_LF, type_appuis_z: str=COEF_LF, *args, **kwargs):
21
21
  """
22
22
  Classe intégrant les formules de compression et d'instabilité au flambement à l'EC3.
23
23
  Cette classe est hérité de la classe Plat du module EC3_Element_droit.py.
@@ -28,12 +28,18 @@ class Compression(Plat):
28
28
  Iz (float): Moment quadratique suivant l'axe de rotation z en mm4
29
29
  lo_y (float): Longueur de flambement suivant l'axe de rotation y en mm. Defaults to 0.
30
30
  lo_z (float): Longueur de flambement suivant l'axe de rotation z en mm. Defaults to 0.
31
- type_appuis (str): Permet de déterminé la forme du flambement en fonction des types d'appui:
32
- Encastré 1 côté : 2
33
- Rotule - Rotule : 1
34
- Encastré - Rotule : 0.7
35
- Encastré - Encastré : 0.5
36
- Encastré - Rouleau : 1
31
+ type_appuis_y (str): Conditions d'appui pour le flambement selon l'axe de rotation y.
32
+ Détermine β_y dans lf_y = β_y · lo_y.
33
+ Valeurs possibles (voir COEF_LF):
34
+ - "Encastré 1 côté" : β = 2.0 (console)
35
+ - "Rotule - Rotule" : β = 1.0 (articulé-articulé)
36
+ - "Encastré - Rotule" : β = 0.7
37
+ - "Encastré - Encastré" : β = 0.5
38
+ - "Encastré - Rouleau" : β = 1.0 (encastré-glissière)
39
+ Defaults to "Rotule - Rotule".
40
+ type_appuis_z (str, optional): Conditions d'appui pour le flambement
41
+ selon l'axe de rotation z.
42
+
37
43
  """
38
44
  super().__init__(*args, **kwargs)
39
45
  self.A = A * si.mm**2
@@ -41,8 +47,10 @@ class Compression(Plat):
41
47
  self.Iz = Iz * si.mm**4
42
48
  self.lo ={'y': lo_y*si.mm, 'z': lo_z*si.mm}
43
49
  self.courbe_flamb = courbe_flamb
44
- self.type_appuis = type_appuis
45
- self.coef_lef = self.COEF_LF[type_appuis]
50
+ self.type_appuis_y = type_appuis_y
51
+ self.type_appuis_z = type_appuis_z
52
+ self.coef_lef_y = self.COEF_LF[type_appuis_y]
53
+ self.coef_lef_z = self.COEF_LF[type_appuis_z]
46
54
 
47
55
 
48
56
 
@@ -76,8 +84,8 @@ class Compression(Plat):
76
84
  dict: {"y": λ_y, "z": λ_z} (élancements sans unité).
77
85
  """
78
86
  lamb = {'y':0, 'z':0}
79
- lamb['y'] = (self.lo['y'].value * 10**3 * self.coef_lef) / mt.sqrt(self.Iy / (self.A))
80
- lamb['z'] = (self.lo['z'].value * 10**3 * self.coef_lef) / mt.sqrt(self.Iz / (self.A))
87
+ lamb['y'] = (self.lo['y'].value * 10**3 * self.coef_lef_y) / mt.sqrt(self.Iy / (self.A))
88
+ lamb['z'] = (self.lo['z'].value * 10**3 * self.coef_lef_z) / mt.sqrt(self.Iz / (self.A))
81
89
  return lamb
82
90
 
83
91
  @property
@@ -5,7 +5,7 @@ from math import sqrt
5
5
 
6
6
  import forallpeople as si
7
7
  si.environment("structural")
8
- from ourocode.eurocode.core.renderer import handcalc
8
+ from ourocode.eurocode.core._renderer import handcalc
9
9
 
10
10
  from ourocode.eurocode.ec3.element_droit.plat import Plat
11
11
  from ourocode.eurocode.ec3.element_droit.cisaillement import Cisaillement
@@ -6,7 +6,7 @@ import pandas as pd
6
6
 
7
7
  import forallpeople as si
8
8
  si.environment("structural")
9
- from ourocode.eurocode.core.renderer import handcalc
9
+ from ourocode.eurocode.core._renderer import handcalc
10
10
 
11
11
  from ourocode.eurocode.core.projet import Projet
12
12
 
@@ -0,0 +1,125 @@
1
+ # coding in UTF-8
2
+ # by Anthony PARISOT
3
+ import pandas as pd
4
+
5
+ import forallpeople as si
6
+ si.environment("structural")
7
+
8
+ from ourocode.eurocode.ec3.element_droit.plat import Plat
9
+
10
+
11
+ class _Profil(Plat):
12
+ """Classe pour les profilés laminés acier selon EN 1993-1-1.
13
+
14
+ Permet de générer des poutres en I ou H (IPE, HEA, HEB, UPN, etc.)
15
+ à partir de désignations normalisées selon EN 10365.
16
+
17
+ Les caractéristiques géométriques sont chargées depuis le CSV
18
+ `profil_acier.csv` et les propriétés mécaniques (fy, fu) sont
19
+ déterminées selon la classe d'acier et l'épaisseur maximale.
20
+
21
+ Hérite de Plat pour être compatible avec les classes de vérification
22
+ (Compression, Traction, Flexion, Cisaillement) via _from_parent_class.
23
+ """
24
+ # Chargement des données de profils
25
+ _PROFIL_DATA = Plat._data_from_csv(Plat, "profil_acier.csv", index_col=None)
26
+ TYPES_PROFIL = tuple(_PROFIL_DATA["type"].unique())
27
+ DESIGNATIONS = tuple(_PROFIL_DATA["designation"])
28
+
29
+ def __init__(self, designation: str, classe_acier: str = "S235",
30
+ classe_transv: int = 1, **kwargs):
31
+ """Initialise un profilé laminé acier.
32
+
33
+ Args:
34
+ designation (str): Désignation du profil (ex: "IPE 300", "HEA 200", "HEB 260")
35
+ classe_acier (str, optional): Classe d'acier selon EN 1993-1-1 Tableau 3.1
36
+ (ex: "S235", "S275", "S355"). Defaults to "S235".
37
+ classe_transv (int, optional): Classe transversale de la section (1, 2 ou 3)
38
+ selon EN 1993-1-1 §5.5. Defaults to 1.
39
+ **kwargs: Arguments transmis à la classe parent Plat.
40
+
41
+ Raises:
42
+ ValueError: Si designation n'est pas dans DESIGNATIONS.
43
+ """
44
+ # Validation de la désignation avant appel du parent
45
+ if designation not in self.DESIGNATIONS:
46
+ raise ValueError(
47
+ f"Désignation '{designation}' invalide. Valeurs acceptées : {self.DESIGNATIONS}"
48
+ )
49
+
50
+ self.designation = designation
51
+
52
+ # Chargement des données géométriques depuis le CSV
53
+ self._load_profil_data()
54
+
55
+ # Appel du parent Plat avec t=tw (épaisseur âme)
56
+ # h et b ne sont pas passés car ils seraient écrasés par Plat
57
+ super().__init__(t=self.tw.value*10**3, h=self.h.value*10**3, b=self.b.value*10**3,
58
+ classe_acier=classe_acier, classe_transv=classe_transv,
59
+ **kwargs)
60
+
61
+ # Restauration des valeurs de h et b après l'appel du parent
62
+ self.h = self._h_backup
63
+ self.b = self._b_backup
64
+
65
+ # Surcharge de fy et fu selon l'épaisseur maximale (max(tw, tf))
66
+ self.__fy_fu()
67
+
68
+ def _load_profil_data(self):
69
+ """Charge les caractéristiques géométriques du profil depuis le CSV."""
70
+ df = self._PROFIL_DATA
71
+ profil = df[df["designation"] == self.designation].iloc[0]
72
+
73
+ # Dimensions géométriques
74
+ self.h = profil["h"] * si.mm
75
+ self.b = profil["b"] * si.mm
76
+ self.tw = profil["tw"] * si.mm # épaisseur âme
77
+ self.tf = profil["tf"] * si.mm # épaisseur semelle
78
+ self.r = profil["r"] * si.mm # rayon congé
79
+
80
+ # Sauvegarde pour restauration après appel super().__init__
81
+ self._h_backup = self.h
82
+ self._b_backup = self.b
83
+
84
+ # Caractéristiques de section
85
+ self.A = profil["A"] * si.mm**2
86
+ self.Av = profil["Av"] * si.mm**2
87
+ self.Avz = profil["Avz"] * si.mm**2 if pd.notna(profil["Avz"]) else None
88
+
89
+ # Moments quadratiques
90
+ self.Iy = profil["Iy"] * si.mm**4
91
+ self.Iz = profil["Iz"] * si.mm**4
92
+
93
+ # Modules de flexion
94
+ self.Wely = profil["Wely"] * si.mm**3
95
+ self.Welz = profil["Welz"] * si.mm**3
96
+ self.Wply = profil["Wply"] * si.mm**3
97
+ self.Wplz = profil["Wplz"] * si.mm**3
98
+
99
+ # Rayons de giration
100
+ self.iy = profil["iy"] * si.mm
101
+ self.iz = profil["iz"] * si.mm
102
+
103
+ # Masse linéique
104
+ self.masse = profil["masse"] * si.kg / si.m
105
+
106
+ def __fy_fu(self):
107
+ """Définit fy et fu en fonction de la classe d'acier et de l'épaisseur maximale.
108
+
109
+ Surcharge la méthode de Plat pour utiliser max(tw, tf) au lieu de t uniquement,
110
+ car les profilés ont deux épaisseurs différentes (âme et semelle).
111
+ """
112
+ t_max = max(self.tw, self.tf)
113
+
114
+ if t_max <= 40 * si.mm:
115
+ self.fy = self._Plat__classe_acier.loc["t<= 40 fy"] * si.MPa
116
+ self.fu = self._Plat__classe_acier.loc["t<= 40 fu"] * si.MPa
117
+ elif 40 * si.mm < t_max <= 80 * si.mm:
118
+ self.fy = self._Plat__classe_acier.loc["40<t<= 80 fy"] * si.MPa
119
+ self.fu = self._Plat__classe_acier.loc["40<t<= 80 fu"] * si.MPa
120
+
121
+ @property
122
+ def type_profil(self):
123
+ """Retourne le type de profil (IPE, HEA, HEB, etc.)."""
124
+ df = self._PROFIL_DATA
125
+ return df[df["designation"] == self.designation].iloc[0]["type"]
@@ -5,7 +5,7 @@ from math import sqrt
5
5
 
6
6
  import forallpeople as si
7
7
  si.environment("structural")
8
- from ourocode.eurocode.core.renderer import handcalc
8
+ from ourocode.eurocode.core._renderer import handcalc
9
9
 
10
10
  from ourocode.eurocode.ec3.element_droit.plat import Plat
11
11
 
@@ -6,7 +6,7 @@ from matplotlib import pyplot as plt
6
6
 
7
7
  import forallpeople as si
8
8
  si.environment("structural")
9
- from ourocode.eurocode.core.renderer import handcalc
9
+ from ourocode.eurocode.core._renderer import handcalc
10
10
 
11
11
  # sys.path.append(os.path.join(os.getcwd(), "ourocode"))
12
12
  # from eurocode.EC3_Element_droit import Plat
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec5.assemblage.pointe import Pointe
13
13
 
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.core.projet import Projet
13
13
  from ourocode.eurocode.ec5.element_droit.barre import Barre
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec5.assemblage.assemblage import Assemblage
13
13
 
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec5.assemblage.boulon import Boulon
13
13
 
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec5.assemblage.assemblage import Assemblage
13
13
  from ourocode.eurocode.ec5.element_droit.barre import Barre
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec5.assemblage.assemblage import Assemblage, interpolationLineaire
13
13
 
@@ -7,7 +7,7 @@ from math import sin, cos, radians, sqrt, pi
7
7
 
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.ec5.assemblage.pointe import Pointe
13
13
  from ourocode.eurocode.ec5.assemblage.boulon import Boulon
@@ -7,7 +7,7 @@ import numpy as np
7
7
  import forallpeople as si
8
8
 
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
 
12
12
  from ourocode.eurocode.core.batiment import Batiment
13
13
  from ourocode.eurocode.ec5.assemblage import Assemblage
@@ -11,7 +11,7 @@ import pandas as pd
11
11
 
12
12
  import forallpeople as si
13
13
  si.environment("structural")
14
- from ourocode.eurocode.core.renderer import handcalc
14
+ from ourocode.eurocode.core._renderer import handcalc
15
15
 
16
16
  from ourocode.eurocode.core.projet import Projet
17
17
 
@@ -10,7 +10,7 @@ import numpy as np
10
10
 
11
11
  import forallpeople as si
12
12
  si.environment("structural")
13
- from ourocode.eurocode.core.renderer import handcalc
13
+ from ourocode.eurocode.core._renderer import handcalc
14
14
 
15
15
  from ourocode.eurocode.ec5.element_droit.barre import Barre
16
16
 
@@ -10,7 +10,7 @@ import numpy as np
10
10
 
11
11
  import forallpeople as si
12
12
  si.environment("structural")
13
- from ourocode.eurocode.core.renderer import handcalc
13
+ from ourocode.eurocode.core._renderer import handcalc
14
14
 
15
15
  from ourocode.eurocode.ec5.element_droit.barre import Barre
16
16
 
@@ -10,7 +10,7 @@ import numpy as np
10
10
 
11
11
  import forallpeople as si
12
12
  si.environment("structural")
13
- from ourocode.eurocode.core.renderer import handcalc
13
+ from ourocode.eurocode.core._renderer import handcalc
14
14
 
15
15
  from ourocode.eurocode.ec5.element_droit.barre import Barre
16
16
  from ourocode.eurocode.ec5.element_droit.compression import Compression
@@ -10,7 +10,7 @@ import numpy as np
10
10
 
11
11
  import forallpeople as si
12
12
  si.environment("structural")
13
- from ourocode.eurocode.core.renderer import handcalc
13
+ from ourocode.eurocode.core._renderer import handcalc
14
14
 
15
15
  from ourocode.eurocode.ec5.element_droit.barre import Barre
16
16
 
@@ -63,6 +63,12 @@ from ourocode.eurocode.ec5.element_droit import (
63
63
  Compression,
64
64
  Cisaillement,
65
65
  )
66
+ from ourocode.eurocode.ec5.feu import (
67
+ Flexion_feu,
68
+ Traction_feu,
69
+ Compression_feu,
70
+ Cisaillement_feu,
71
+ )
66
72
 
67
73
 
68
74
  # ---------------------------------------------------------------------------
@@ -137,6 +143,7 @@ class Verification_EC5(Projet):
137
143
  type_bat: str = Barre.TYPE_BAT,
138
144
  type_ele: str = Barre.TYPE_ELE,
139
145
  pos_charge: str = Flexion.LOAD_POS,
146
+ t_expo: int = 30,
140
147
  **kwargs,
141
148
  ):
142
149
  """Initialise une vérification EC5.
@@ -164,6 +171,8 @@ class Verification_EC5(Projet):
164
171
  de la barre structurale. Defaults to ``Barre.TYPE_ELE``.
165
172
  pos_charge (str, optional): Position de la charge verticale par rapport
166
173
  à la section (``Flexion.LOAD_POS``). Defaults to ``Flexion.LOAD_POS``.
174
+ t_expo (int, optional): Durée d'exposition au feu en minutes pour la
175
+ vérification incendie (aucune protection des faces). Defaults to 30.
167
176
  **kwargs: Transmis à :class:`~ourocode.eurocode.core.projet.Projet`
168
177
  (``ingenieur``, ``name``, ``code_INSEE``, ``alt``…).
169
178
 
@@ -188,6 +197,7 @@ class Verification_EC5(Projet):
188
197
  self.Hf = Hf
189
198
  self.effet_systeme = effet_systeme
190
199
  self.classe_service = int(classe_service)
200
+ self.t_expo = t_expo
191
201
 
192
202
  # Cache des objets EC5 par (structural_member_name, combo_name)
193
203
  # Peuplé automatiquement lors de chaque appel à verify()
@@ -210,6 +220,7 @@ class Verification_EC5(Projet):
210
220
  coeflef_z: float = None,
211
221
  type_appuis_y: str = None,
212
222
  type_appuis_z: str = None,
223
+ t_expo: int = None,
213
224
  ) -> dict:
214
225
  """Vérifie une barre structurale en bouclant sur toutes les combos ELU.
215
226
 
@@ -251,6 +262,9 @@ class Verification_EC5(Projet):
251
262
  (fallback ``"Rotule - Rotule"`` si absente).
252
263
  type_appuis_z (str, optional): Surcharge du type d'appui de flambement
253
264
  selon z. Même logique que ``type_appuis_y``.
265
+ t_expo (int, optional): Surcharge de la durée d'exposition au feu en minutes
266
+ pour la vérification incendie (aucune protection des faces).
267
+ Si ``None`` (défaut), la valeur de l'initialisation est utilisée.
254
268
 
255
269
  Returns:
256
270
  dict: ``{"name", "taux", "dataframe"}`` où :
@@ -268,6 +282,9 @@ class Verification_EC5(Projet):
268
282
  """
269
283
  self._check_state()
270
284
 
285
+ # Surcharge t_expo si fourni
286
+ t_expo = t_expo if t_expo is not None else self.t_expo
287
+
271
288
  w_inst_tag = self.DEFAULT_W_INST_TAG
272
289
  w_net_fin_tag = self.DEFAULT_W_NET_FIN_TAG
273
290
  sm = self._model_generator.get_structural_member(name)
@@ -295,6 +312,10 @@ class Verification_EC5(Projet):
295
312
  "Cisaillement": {"taux": 0.0, "combinaison": None},
296
313
  "Traction": {"taux": 0.0, "combinaison": None},
297
314
  "Compression": {"taux": 0.0, "combinaison": None},
315
+ "Flexion_feu": {"taux": 0.0, "combinaison": None},
316
+ "Cisaillement_feu": {"taux": 0.0, "combinaison": None},
317
+ "Traction_feu": {"taux": 0.0, "combinaison": None},
318
+ "Compression_feu": {"taux": 0.0, "combinaison": None},
298
319
  }
299
320
 
300
321
  # --- Boucle sur les combinaisons ELU
@@ -310,6 +331,7 @@ class Verification_EC5(Projet):
310
331
  pos_charge=pos_charge,
311
332
  type_appuis_y=type_appuis_y,
312
333
  type_appuis_z=type_appuis_z,
334
+ t_expo=t_expo,
313
335
  return_objects=True,
314
336
  )
315
337
  # Stockage dans le cache pour get_combo_objects()
@@ -443,6 +465,7 @@ class Verification_EC5(Projet):
443
465
  pos_charge: str,
444
466
  type_appuis_y: str,
445
467
  type_appuis_z: str,
468
+ t_expo: int = 30,
446
469
  return_objects: bool = False,
447
470
  ) -> dict:
448
471
  """Retourne les taux ELU (Flexion, Cisaillement, Traction ou Compression)
@@ -475,12 +498,20 @@ class Verification_EC5(Projet):
475
498
  "Cisaillement": None,
476
499
  "Traction": None,
477
500
  "Compression": None,
501
+ "Flexion_feu": None,
502
+ "Cisaillement_feu": None,
503
+ "Traction_feu": None,
504
+ "Compression_feu": None,
478
505
  }
479
506
  objects: dict[str, object] = {
480
507
  "Flexion": None,
481
508
  "Cisaillement": None,
482
509
  "Traction": None,
483
510
  "Compression": None,
511
+ "Flexion_feu": None,
512
+ "Cisaillement_feu": None,
513
+ "Traction_feu": None,
514
+ "Compression_feu": None,
484
515
  }
485
516
 
486
517
  barre = Barre(**barre_kwargs)
@@ -490,53 +521,149 @@ class Verification_EC5(Projet):
490
521
  compression_obj = None
491
522
  N_pos = efforts["Nx"]["Max"][0].value # N, > 0 si compresion
492
523
  N_neg = efforts["Nx"]["Min"][0].value # N, < 0 si traction
493
- if N_pos > 1e-9 and N_pos >= abs(N_neg):
494
- compression_obj = Compression._from_parent_class(
495
- barre,
496
- lo_y=lo_flamb_y, lo_z=lo_flamb_z,
497
- type_appuis_y=type_appuis_y, type_appuis_z=type_appuis_z,
498
- )
499
- compression_obj.f_c_0_d(loadtype=load_time, typecombi=typecombi)
500
- compression_obj.sigma_c_0_d(Fc0d=abs(N_pos / 10**3))
501
- compression_obj.taux_c_0_d()
502
- taux_combo["Compression"] = max(compression_obj.taux_c_0_rd.values())
503
- objects["Compression"] = compression_obj
504
- elif abs(N_neg) > 1e-9:
505
- traction_obj = Traction._from_parent_class(barre)
506
- traction_obj.f_t_0_d(loadtype=load_time, typecombi=typecombi)
507
- traction_obj.sigma_t_0_d(Ft0d=N_neg / 10**3)
508
- traction_obj.taux_t_0_d()
509
- taux_combo["Traction"] = max(traction_obj.taux_t_0_rd.values())
510
- objects["Traction"] = traction_obj
511
-
512
- # --- Flexion (incluant l'interaction)
513
- flexion_obj = None
514
- if Mz_abs > 1e-9 or My_abs > 1e-9:
515
- flexion_obj = Flexion._from_parent_class(
516
- barre,
517
- lo_rel_y=lo_y, lo_rel_z=lo_z,
518
- coeflef_y=coeflef_y, coeflef_z=coeflef_z,
519
- pos=pos_charge,
520
- )
521
- flexion_obj.f_m_d(loadtype=load_time, typecombi=typecombi)
522
- flexion_obj.sigma_m_d(
523
- My=My_abs / 10**3, Mz=Mz_abs / 10**3,
524
- )
525
- flexion_obj.taux_m_d(
526
- compression=compression_obj, traction=traction_obj,
527
- )
528
- taux_combo["Flexion"] = max(flexion_obj.taux_m_rd.values())
529
- objects["Flexion"] = flexion_obj
530
-
531
- # --- Cisaillement
532
- cisaillement_obj = None
533
- if Vy_abs > 1e-9:
534
- cisaillement_obj = Cisaillement._from_parent_class(barre)
535
- cisaillement_obj.f_v_d(loadtype=load_time, typecombi=typecombi)
536
- cisaillement_obj.tau_d(Vd=Vy_abs / 10**3)
537
- cisaillement_obj.taux_tau_d()
538
- taux_combo["Cisaillement"] = max(cisaillement_obj.taux_tau_rd.values())
539
- objects["Cisaillement"] = cisaillement_obj
524
+
525
+ if "FIRE" not in combo_name:
526
+ if N_pos > 1e-9 and N_pos >= abs(N_neg):
527
+ compression_obj = Compression._from_parent_class(
528
+ barre,
529
+ lo_y=lo_flamb_y, lo_z=lo_flamb_z,
530
+ type_appuis_y=type_appuis_y, type_appuis_z=type_appuis_z,
531
+ )
532
+ compression_obj.f_c_0_d(loadtype=load_time, typecombi=typecombi)
533
+ compression_obj.sigma_c_0_d(Fc0d=abs(N_pos / 10**3))
534
+ compression_obj.taux_c_0_d()
535
+ taux_combo["Compression"] = max(compression_obj.taux_c_0_rd.values())
536
+ objects["Compression"] = compression_obj
537
+ elif abs(N_neg) > 1e-9:
538
+ traction_obj = Traction._from_parent_class(barre)
539
+ traction_obj.f_t_0_d(loadtype=load_time, typecombi=typecombi)
540
+ traction_obj.sigma_t_0_d(Ft0d=N_neg / 10**3)
541
+ traction_obj.taux_t_0_d()
542
+ taux_combo["Traction"] = max(traction_obj.taux_t_0_rd.values())
543
+ objects["Traction"] = traction_obj
544
+
545
+ # --- Flexion (incluant l'interaction)
546
+ flexion_obj = None
547
+ if Mz_abs > 1e-9 or My_abs > 1e-9:
548
+ flexion_obj = Flexion._from_parent_class(
549
+ barre,
550
+ lo_rel_y=lo_y, lo_rel_z=lo_z,
551
+ coeflef_y=coeflef_y, coeflef_z=coeflef_z,
552
+ pos=pos_charge,
553
+ )
554
+ flexion_obj.f_m_d(loadtype=load_time, typecombi=typecombi)
555
+ flexion_obj.sigma_m_d(
556
+ My=My_abs / 10**3, Mz=Mz_abs / 10**3,
557
+ )
558
+ if compression_obj is not None:
559
+ sigma_c_0_rd = compression_obj.sigma_c_0_rd
560
+ sigma_m_rd_y = flexion_obj.sigma_m_rd["y"]
561
+ sigma_m_rd_z = flexion_obj.sigma_m_rd["z"]
562
+ max_sigma_m_rd = max(sigma_m_rd_y, sigma_m_rd_z)
563
+
564
+ if sigma_c_0_rd > max_sigma_m_rd:
565
+ flexion_obj.taux_m_d(traction=traction_obj)
566
+ compression_obj.taux_c_0_d(flexion=flexion_obj)
567
+ taux_combo["Compression"] = max(compression_obj.taux_c_0_rd.values())
568
+ objects["Compression"] = compression_obj
569
+ else:
570
+ flexion_obj.taux_m_d(
571
+ compression=compression_obj, traction=traction_obj,
572
+ )
573
+ else:
574
+ flexion_obj.taux_m_d(traction=traction_obj)
575
+ taux_combo["Flexion"] = max(flexion_obj.taux_m_rd.values())
576
+ objects["Flexion"] = flexion_obj
577
+
578
+ # --- Cisaillement
579
+ cisaillement_obj = None
580
+ if Vy_abs > 1e-9:
581
+ cisaillement_obj = Cisaillement._from_parent_class(barre)
582
+ cisaillement_obj.f_v_d(loadtype=load_time, typecombi=typecombi)
583
+ cisaillement_obj.tau_d(Vd=Vy_abs / 10**3)
584
+ cisaillement_obj.taux_tau_d()
585
+ taux_combo["Cisaillement"] = max(cisaillement_obj.taux_tau_rd.values())
586
+ objects["Cisaillement"] = cisaillement_obj
587
+
588
+ # --- Vérification feu (uniquement pour combinaisons FIRE)
589
+ if "FIRE" in combo_name or "ELU_STR_ACC G" == combo_name:
590
+ feu_kwargs = {
591
+ "t_expo": t_expo,
592
+ "haut": "Aucune protection",
593
+ "bas": "Aucune protection",
594
+ "gauche": "Aucune protection",
595
+ "droite": "Aucune protection",
596
+ **barre_kwargs,
597
+ }
598
+
599
+ # Compression feu
600
+ compression_feu_obj = None
601
+ if N_pos > 1e-9 and N_pos >= abs(N_neg):
602
+ compression_feu_obj = Compression_feu._from_parent_class(
603
+ barre,
604
+ lo_y=lo_flamb_y, lo_z=lo_flamb_z,
605
+ type_appuis_y=type_appuis_y, type_appuis_z=type_appuis_z,
606
+ **feu_kwargs,
607
+ )
608
+ sigma_c0d = compression_feu_obj.sigma_c_0_d(Fc0d=abs(N_pos / 10**3))
609
+ compression_feu_obj.f_c_0_d()
610
+ compression_feu_obj.taux_c_0_d()
611
+ taux_combo["Compression_feu"] = max(compression_feu_obj.taux_c_0_rd.values())
612
+ objects["Compression_feu"] = compression_feu_obj
613
+
614
+ # Traction feu
615
+ traction_feu_obj = None
616
+ if abs(N_neg) > 1e-9:
617
+ traction_feu_obj = Traction_feu._from_parent_class(barre, **feu_kwargs)
618
+ traction_feu_obj.sigma_t_0_d(Ft0d=N_neg / 10**3)
619
+ traction_feu_obj.f_t_0_d()
620
+ traction_feu_obj.taux_t_0_d()
621
+ taux_combo["Traction_feu"] = max(traction_feu_obj.taux_t_0_rd.values())
622
+ objects["Traction_feu"] = traction_feu_obj
623
+
624
+ # Flexion feu
625
+ flexion_feu_obj = None
626
+ if Mz_abs > 1e-9 or My_abs > 1e-9:
627
+ flexion_feu_obj = Flexion_feu._from_parent_class(
628
+ barre,
629
+ lo_rel_y=lo_y, lo_rel_z=lo_z,
630
+ coeflef_y=coeflef_y, coeflef_z=coeflef_z,
631
+ pos=pos_charge,
632
+ **feu_kwargs,
633
+ )
634
+ flexion_feu_obj.sigma_m_d(
635
+ My=My_abs / 10**3, Mz=Mz_abs / 10**3,
636
+ )
637
+ flexion_feu_obj.f_m_d()
638
+ if compression_feu_obj is not None:
639
+ sigma_c_0_rd = compression_feu_obj.sigma_c_0_rd.value
640
+ sigma_m_rd_y = flexion_feu_obj.sigma_m_rd["y"]
641
+ sigma_m_rd_z = flexion_feu_obj.sigma_m_rd["z"]
642
+ max_sigma_m_rd = max(sigma_m_rd_y, sigma_m_rd_z)
643
+
644
+ if sigma_c_0_rd > max_sigma_m_rd:
645
+ flexion_feu_obj.taux_m_d(traction=traction_feu_obj)
646
+ compression_feu_obj.taux_c_0_d(flexion=flexion_feu_obj)
647
+ taux_combo["Compression_feu"] = max(compression_feu_obj.taux_c_0_rd.values())
648
+ objects["Compression_feu"] = compression_feu_obj
649
+ else:
650
+ flexion_feu_obj.taux_m_d(
651
+ compression=compression_feu_obj, traction=traction_feu_obj,
652
+ )
653
+ else:
654
+ flexion_feu_obj.taux_m_d(traction=traction_feu_obj)
655
+ taux_combo["Flexion_feu"] = max(flexion_feu_obj.taux_m_rd.values())
656
+ objects["Flexion_feu"] = flexion_feu_obj
657
+
658
+ # Cisaillement feu
659
+ cisaillement_feu_obj = None
660
+ if Vy_abs > 1e-9:
661
+ cisaillement_feu_obj = Cisaillement_feu._from_parent_class(barre, **feu_kwargs)
662
+ cisaillement_feu_obj.tau_d(Vd=Vy_abs / 10**3)
663
+ cisaillement_feu_obj.f_v_d()
664
+ cisaillement_feu_obj.taux_tau_d()
665
+ taux_combo["Cisaillement_feu"] = max(cisaillement_feu_obj.taux_tau_rd.values())
666
+ objects["Cisaillement_feu"] = cisaillement_feu_obj
540
667
 
541
668
  if return_objects:
542
669
  return taux_combo, objects
@@ -9,7 +9,7 @@ import pandas as pd
9
9
 
10
10
  import forallpeople as si
11
11
  si.environment("structural")
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
13
 
14
14
  from ourocode.eurocode.ec5.feu.feu import Feu
15
15
  from ourocode.eurocode.ec5.element_droit.cisaillement import Cisaillement
@@ -9,7 +9,7 @@ import pandas as pd
9
9
 
10
10
  import forallpeople as si
11
11
  si.environment("structural")
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
13
 
14
14
  from ourocode.eurocode.ec5.feu.feu import Feu
15
15
  from ourocode.eurocode.ec5.element_droit.compression import Compression
@@ -17,7 +17,8 @@ from ourocode.eurocode.ec5.element_droit.compression import Compression
17
17
 
18
18
 
19
19
  class Compression_feu(Feu, Compression):
20
- def __init__(self, lo_y: si.mm, lo_z: si.mm, type_appuis: str = Compression.COEF_LF, **kwargs):
20
+ def __init__(self, lo_y: si.mm, lo_z: si.mm,
21
+ type_appuis_y: str = Compression.COEF_LF, type_appuis_z: str = Compression.COEF_LF, **kwargs):
21
22
  """Classe permettant le calcul de la Compression d'un élément bois selon l'EN 1995.
22
23
  Cette classe est hérité de la classe Feu, provenant du module EC5_Feu.py.
23
24
 
@@ -31,7 +32,7 @@ class Compression_feu(Feu, Compression):
31
32
  - Encastré - Encastré : 0.5
32
33
  - Encastré - Rouleau : 1
33
34
  """
34
- super().__init__(lo_y=lo_y, lo_z=lo_z, type_appuis=type_appuis, **kwargs)
35
+ super().__init__(lo_y=lo_y, lo_z=lo_z, type_appuis_y=type_appuis_y, type_appuis_z=type_appuis_z, **kwargs)
35
36
 
36
37
  @property
37
38
  def lamb_rel_Axe(self) -> tuple:
@@ -9,16 +9,11 @@ import pandas as pd
9
9
 
10
10
  import forallpeople as si
11
11
  si.environment("structural")
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
+ from ourocode.eurocode.mixins.math_utils import MathUtilsMixin
13
14
 
14
15
  from ourocode.eurocode.ec5.element_droit.barre import Barre
15
16
 
16
- def interpolation_lineaire(x, xa, xb, ya, yb):
17
- """Fait une interpolation linéaire pour trouver un résultat y entre deux valeur xa et xb"""
18
- y = ya + (x - xa) * ((yb - ya) / (xb - xa))
19
- return y
20
-
21
-
22
17
  # ================================ GLOBAL ==================================
23
18
 
24
19
 
@@ -114,8 +109,8 @@ class Feu(Barre):
114
109
  beta_n = 0.7
115
110
  elif self.classe[0:1] == "D":
116
111
  if rho_k >= 290 and rho_k < 450:
117
- beta_0 = interpolation_lineaire(rho_k, 290, 450, 0.65, 0.5)
118
- beta_n = interpolation_lineaire(rho_k, 290, 450, 0.7, 0.55)
112
+ beta_0 = MathUtilsMixin.interpolation_lineaire(rho_k, 290, 450, 0.65, 0.5)
113
+ beta_n = MathUtilsMixin.interpolation_lineaire(rho_k, 290, 450, 0.7, 0.55)
119
114
  elif rho_k >= 450:
120
115
  beta_0 = 0.5
121
116
  beta_n = 0.55
@@ -297,7 +292,7 @@ class Feu(Barre):
297
292
  k2 = 1 - 0.018 * hp # 3.7
298
293
  elif self.protection[orientation] == "Fibre de roche":
299
294
  if 45 > hp >= 20:
300
- k2 = interpolation_lineaire(hp, 20, 45, 1, 0.6)
295
+ k2 = MathUtilsMixin.interpolation_lineaire(hp, 20, 45, 1, 0.6)
301
296
  elif hp >= 45:
302
297
  k2 = 0.6
303
298
  return k2
@@ -9,7 +9,7 @@ import pandas as pd
9
9
 
10
10
  import forallpeople as si
11
11
  si.environment("structural")
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
13
 
14
14
  from ourocode.eurocode.ec5.feu.feu import Feu
15
15
  from ourocode.eurocode.ec5.element_droit.flexion import Flexion
@@ -9,7 +9,7 @@ import pandas as pd
9
9
 
10
10
  import forallpeople as si
11
11
  si.environment("structural")
12
- from ourocode.eurocode.core.renderer import handcalc
12
+ from ourocode.eurocode.core._renderer import handcalc
13
13
 
14
14
  from ourocode.eurocode.ec5.feu.feu import Feu
15
15
  from ourocode.eurocode.ec5.element_droit.traction import Traction
@@ -7,7 +7,7 @@ import numpy as np
7
7
  import pandas as pd
8
8
  import forallpeople as si
9
9
  si.environment("structural")
10
- from ourocode.eurocode.core.renderer import handcalc
10
+ from ourocode.eurocode.core._renderer import handcalc
11
11
  from ourocode.eurocode.core.batiment import Batiment
12
12
 
13
13
  class Sismique(Batiment):
@@ -358,3 +358,41 @@ class MathUtilsMixin:
358
358
  """
359
359
  dictionnary = objet.__dict__
360
360
  return cls._reset_physical_dictionnary(objet, dictionnary)
361
+
362
+ @staticmethod
363
+ def interpolation_lineaire(x, xa, xb, ya, yb):
364
+ """Fait une interpolation linéaire pour trouver un résultat y entre deux valeurs xa et xb.
365
+
366
+ Args:
367
+ x: Valeur pour laquelle on cherche l'interpolation.
368
+ xa: Première borne inférieure.
369
+ xb: Première borne supérieure.
370
+ ya: Valeur correspondante à xa.
371
+ yb: Valeur correspondante à xb.
372
+
373
+ Returns:
374
+ float: Valeur interpolée y.
375
+ """
376
+ y = ya + (x - xa) * ((yb - ya) / (xb - xa))
377
+ return y
378
+
379
+ @staticmethod
380
+ def interpolation_logarithmique(x, xa, xb, ya, yb):
381
+ """Fait une interpolation logarithmique pour trouver un résultat y entre deux valeurs xa et xb.
382
+
383
+ Args:
384
+ x: Valeur pour laquelle on cherche l'interpolation.
385
+ xa: Première borne inférieure.
386
+ xb: Première borne supérieure.
387
+ ya: Valeur correspondante à xa.
388
+ yb: Valeur correspondante à xb.
389
+
390
+ Returns:
391
+ float: Valeur interpolée y.
392
+ """
393
+ y = (
394
+ (x > xb) * yb
395
+ + (x < xa) * ya
396
+ + (x <= xb) * (x >= 1) * (ya - (ya - yb) * mt.log10(x))
397
+ )
398
+ return y
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ourocode
3
- Version: 2.1.2
3
+ Version: 2.1.3
4
4
  Summary: Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée.
5
5
  Author-email: Anthony PARISOT <contact@ourea-structure.fr>
6
6
  License-Expression: Apache-2.0
@@ -12,6 +12,7 @@ ourocode/data/kdef.csv,sha256=Y54WFni8JEYW09MvPpPgFkMkVBkqpuFPYfgRaVifmM8,161
12
12
  ourocode/data/kfi.csv,sha256=8ybchjxYD8AbUZjMTVyb7urWR9TJFxFDMB4KDhZkHlY,216
13
13
  ourocode/data/kmod.csv,sha256=NBsawjtYZ1j9ryEWQ5B1SvRgsuROUk_2Y4N_C9QqMrM,489
14
14
  ourocode/data/limite_fleche.csv,sha256=sVxZBQi94CH3oMQNca0g2vtWrJ7u-dB3u3MKawH68jQ,588
15
+ ourocode/data/profil_acier.csv,sha256=ZSLArSzud3Z40C_YxDaDQezxuPUchZ75RCsZLVDbPss,1962
15
16
  ourocode/data/qualite_acier.csv,sha256=fgVIKwUcgJ7GtNXVXweCsJ-PIigxd1zO7nR1aHZiNfs,242
16
17
  ourocode/data/section_boulon.csv,sha256=ooNtV4Gu924vIQFc9sf2V4O0mraCCVN6nqXEDA_AIzc,134
17
18
  ourocode/data/screenshot/C90_def.png,sha256=VsGja6DxDEDIzZpPjXsh5uJ3xhDOk9eFtQYfzlbmBDg,37313
@@ -43,62 +44,63 @@ ourocode/data/vent/vent_Cpe_toiture_terrasse.png,sha256=3QItO8rDVY2WRXPR5BRQlFGo
43
44
  ourocode/data/vent/vent_Ffr.png,sha256=KblWEKGMtlkRbK8kqIF8A4hTj0JldNoR99VD6hgG00g,40343
44
45
  ourocode/eurocode/__init__.py,sha256=WFOe81sFWSQE6ycXQrC8cs_jTau0ldmCq1SWQ57jJKI,2281
45
46
  ourocode/eurocode/core/__init__.py,sha256=_R1uZQNj4KxaSdFPV-mI-mGcRSmqBWTIbx9VH4cODUs,496
47
+ ourocode/eurocode/core/_renderer.py,sha256=CMN6LyusrCej9VLQvL-jUUinNksxXf0Sx5jzMjsgBAI,22805
46
48
  ourocode/eurocode/core/batiment.py,sha256=VIWN2Uny6KeRQnI-N6OfgXb-zmf4kBXjhRNB34idFpY,2029
47
49
  ourocode/eurocode/core/combinaison.py,sha256=Yqp32Icnl9z8z8YBXxE2BrCAVBngwh8--W2XSohaFvI,108281
48
50
  ourocode/eurocode/core/model_generator.py,sha256=Bdf9VieufWUyEc3cMtpr_b4CImYCvXMpuMJBRcCl-MA,98273
49
51
  ourocode/eurocode/core/model_result.py,sha256=YqfgFK0E5kvmeoJRGDZe0bK0S5LH4GSSLq9RR1ju74Y,35382
50
- ourocode/eurocode/core/objet.py,sha256=iRUWaK4De_5piBA7lTRRHjxt5-c56BYUxwB1vNlJgTw,8784
52
+ ourocode/eurocode/core/objet.py,sha256=xHNmWs_yxAv-WmhyZr6sHZyTxYV2cSDvUJHrW5eUlXg,8813
51
53
  ourocode/eurocode/core/projet.py,sha256=_ns8GNoA7N7DZ31pzW-CFv445cLdIpRF9k9ovWVb0Kg,3017
52
- ourocode/eurocode/core/renderer.py,sha256=CMN6LyusrCej9VLQvL-jUUinNksxXf0Sx5jzMjsgBAI,22805
53
54
  ourocode/eurocode/ec1/__init__.py,sha256=H4S7aoPZsKYHf8Xyhngr7jqLOnrNIGGKRbqJdoZFGcY,195
54
- ourocode/eurocode/ec1/exploitation.py,sha256=xbI0vIfWPSWTmY88uPIv3q8DILClzFMoB0UIGoc6MQ8,3933
55
- ourocode/eurocode/ec1/neige.py,sha256=VnOdDEhAWe2ISRs456-TW-whzz1yYMxkPJQ42WaWHSU,16737
56
- ourocode/eurocode/ec1/vent.py,sha256=u-65c-kl7Yq2W3r8TFYXDrBDIpKxkeObdGBmwoEVShc,62236
55
+ ourocode/eurocode/ec1/exploitation.py,sha256=SDKC1Mykq4u1_uc185bwm2HwOzf782ndv8JJPD2WIZI,3934
56
+ ourocode/eurocode/ec1/neige.py,sha256=eQFXF0U9v8hbSBoysKvJ3z98T9DwOiQRHRuWcUj-dgE,16738
57
+ ourocode/eurocode/ec1/vent.py,sha256=PaTy0Sty7B1KYlCDfwJhaJLqzdMgP_Exa-oY2I74R3I,61981
57
58
  ourocode/eurocode/ec3/__init__.py,sha256=Jp9AAx6NyxmEH8N2nMV93KajRf5E-dUHfkcCuiW4Q0M,595
58
- ourocode/eurocode/ec3/feu.py,sha256=yW1kj9yEa7EE9lJKkqVlgcBcOQN5n_gsSrwcprKRGHg,16510
59
+ ourocode/eurocode/ec3/feu.py,sha256=_TKPmshGdt1TSBS3hU_2Y_QZ2lnxdY_MdGuozqP2O3A,16511
59
60
  ourocode/eurocode/ec3/assemblage/__init__.py,sha256=7wfQdJRjoXnCETfYUcchtbcuWabpdRyLHhNyMmXUeag,576
60
- ourocode/eurocode/ec3/assemblage/platine.py,sha256=sTGOGM1UINjT_qIghvYEVUi0lfsgbjC0lTkW83kaZsE,32017
61
- ourocode/eurocode/ec3/assemblage/soudure.py,sha256=UDOG7eDSkFawTOPy6Cg6w6eWwSjOE4UGoQOldUO6zr4,27908
62
- ourocode/eurocode/ec3/assemblage/tige.py,sha256=HtBwi8lR3FuA2syUp-7KmFnrtyDP29I8MIHE5UuIFrw,35105
63
- ourocode/eurocode/ec3/element_droit/__init__.py,sha256=0c2Creogy6wV--AvbC2_FF-dXdSVeV5RWByx2SfXbzY,408
64
- ourocode/eurocode/ec3/element_droit/cisaillement.py,sha256=HH0OMZIynXzTuxJTYl98prIyot42FxN_qNXdJzIgGo8,1379
65
- ourocode/eurocode/ec3/element_droit/compression.py,sha256=KHGN2ujxACrHZIFa4_ezf_V2KeIJk5bw_zRdCb6GK-4,5497
66
- ourocode/eurocode/ec3/element_droit/flexion.py,sha256=xUlLTpVpxMCM6nh2arJTjIAAnyj42Jyol3jotG1J8Ak,3603
67
- ourocode/eurocode/ec3/element_droit/plat.py,sha256=6vmAbZ7-HL9ov025BBwRet9YPL1kLlZZtwcyYG7AjTE,4006
68
- ourocode/eurocode/ec3/element_droit/traction.py,sha256=HCIOmEUCISufSAz9sHXJ9Ahkb3Q6uhZ2Sg___kj_QZ4,3695
61
+ ourocode/eurocode/ec3/assemblage/platine.py,sha256=ILEFLtHQT_iOau3oz2aK26I3K0qBp5YapcsM7ivjtz4,32018
62
+ ourocode/eurocode/ec3/assemblage/soudure.py,sha256=lzTObmeXPgiCrnG7Dz6nqKrsNwu-tArZCLJTUlqTKpI,27909
63
+ ourocode/eurocode/ec3/assemblage/tige.py,sha256=-0diFNcpe4glPxPip7Gqoq3dm6NQ_DUmHTJf5o9NJ-c,35106
64
+ ourocode/eurocode/ec3/element_droit/__init__.py,sha256=RZny1D8bBxBo6WKebNzPCH2lvML2AGV9D3f5zlRLOrI,480
65
+ ourocode/eurocode/ec3/element_droit/cisaillement.py,sha256=Vv23xQngCpJ_1glM4C-XM9PcDhda18EF1JfCeVks5Ts,1380
66
+ ourocode/eurocode/ec3/element_droit/compression.py,sha256=DzsgYJ00BomqzPxex0EF2MVQkau2WrmGPmFsyz9JU3k,6026
67
+ ourocode/eurocode/ec3/element_droit/flexion.py,sha256=X7z_lkbLQlBtnWhX9qd0RYH2mS78Dg-nYr4hGQKLN8E,3604
68
+ ourocode/eurocode/ec3/element_droit/plat.py,sha256=C0xAhXOhzkFBFrd6muHisa5GbnKQ-CLpuHZDs_mY9RI,4007
69
+ ourocode/eurocode/ec3/element_droit/profil.py,sha256=TC63XgsNB9muG366RfY9xNq2Qp3OvczubwkXcCy9mPc,5146
70
+ ourocode/eurocode/ec3/element_droit/traction.py,sha256=c79-Q14ZeeX-WXY2s_5hPINXuVX_MU1r3Kkw1DXBGyw,3696
69
71
  ourocode/eurocode/ec5/__init__.py,sha256=phTxfy6YgsaSQUN0x1clmxwlsB1H51Ae1aUPli9inFI,1039
70
72
  ourocode/eurocode/ec5/blc.py,sha256=_uwKRPEnN_NbrduguEN5wDG7-FjriQbtxF01gBOG-v4,2071
71
- ourocode/eurocode/ec5/cvt.py,sha256=qHd88-tXQYkcA68Wn8mquzV0y3w_mBsDl1D7PwQX3nY,44640
73
+ ourocode/eurocode/ec5/cvt.py,sha256=fsu2q_3sS12uDYOWuYvw3JxlA6A_8OX2eKvcGyg8Po8,44641
72
74
  ourocode/eurocode/ec5/assemblage/__init__.py,sha256=Pw_sgVZLcw9kmvf_p34cYPDEcia-oz1gWxyoH20R8Jk,617
73
- ourocode/eurocode/ec5/assemblage/agrafe.py,sha256=zoDYu07hZ9q0WSgAANNRsduewcW9mJRaBgpqNdyWizA,4824
74
- ourocode/eurocode/ec5/assemblage/assemblage.py,sha256=8XkoOmL0rRBG-Y7Qkop1lBmPrBFbSwXVk4u1yr6GOjk,43219
75
- ourocode/eurocode/ec5/assemblage/boulon.py,sha256=izD3yONAxZoQWU1iypSzTEl4Aqf-DzFsqnMopVs4L_c,14536
76
- ourocode/eurocode/ec5/assemblage/broche.py,sha256=2qrAv4XKAEgT2Hp9UY2rCdSjcZy1Qb2RXtWfqq6c2wo,2869
77
- ourocode/eurocode/ec5/assemblage/embrevement.py,sha256=GlrAAfBBT0GqOGQfzKwbxgQUKP9BMqpEWQBqDr7JTyM,8917
78
- ourocode/eurocode/ec5/assemblage/pointe.py,sha256=PcVMNPeHYcSmJlvxfu50-jUn5_bZ48cxuLybW7Eodo0,19125
79
- ourocode/eurocode/ec5/assemblage/tirefond.py,sha256=06RJ26qwP9ns9_vBAIgz-yp3GczS43zKJSPZ5gop-IY,17061
75
+ ourocode/eurocode/ec5/assemblage/agrafe.py,sha256=HLpRlVnSgB0UCZPbhCoMUTSpYKyN4o5MeJU_aNv3K-Q,4825
76
+ ourocode/eurocode/ec5/assemblage/assemblage.py,sha256=pQnA8-sQLvno70Yb8NnHA6ecRnHxj9kKdbBWmiLZThg,43220
77
+ ourocode/eurocode/ec5/assemblage/boulon.py,sha256=R483UHqFqAOHPN94zAi95InbKMsYKMzP0ilL_BvcKM8,14537
78
+ ourocode/eurocode/ec5/assemblage/broche.py,sha256=9m6j5y2jXpqjDJH5PhntuQkfYg3z-RtNLdFol9MmMfg,2870
79
+ ourocode/eurocode/ec5/assemblage/embrevement.py,sha256=D5DGnPOL9GrIAYbgrhiEfhtUKPKdqBTh8tkzAQGtuwk,8918
80
+ ourocode/eurocode/ec5/assemblage/pointe.py,sha256=Wh_1i06x178RjodpJKs_HbmWtJjKfq-EnZ-N4tTFyzY,19126
81
+ ourocode/eurocode/ec5/assemblage/tirefond.py,sha256=4FalXiji3pmMA3c9fZht7n560VAToWZJ0ebZlaJOtzU,17062
80
82
  ourocode/eurocode/ec5/element_droit/__init__.py,sha256=B1FQOQULg0ltNp4_4_V28-IWDcGxdEMii0EmoBWVUNs,640
81
- ourocode/eurocode/ec5/element_droit/barre.py,sha256=OgZiWL8LOBCEgrob_OG4kXpXJgHrGbEoJeJXNepoVMY,18652
82
- ourocode/eurocode/ec5/element_droit/cisaillement.py,sha256=crSdWckrn4TCNFGPA_-gvkWYN3Co-ZVswpAAQ0TvCQE,34743
83
- ourocode/eurocode/ec5/element_droit/compression.py,sha256=JLeMulj3r59970kGElZat0Z5-Vz0YxUge2IyR619aLY,24376
84
- ourocode/eurocode/ec5/element_droit/flexion.py,sha256=GGCEXwB8PrH9mX1mtD8-IgHSAwT5vEAZrep3_4nHeOg,17454
85
- ourocode/eurocode/ec5/element_droit/traction.py,sha256=QuY_HDjuaFBRhs7gxg1VB_s0GvO0fJFEASQgddFrOPE,4915
86
- ourocode/eurocode/ec5/element_droit/verification_EC5.py,sha256=UfybP8l5Yo-wfbiwvC8X50SjSCJUQla914NrXSgiEgQ,33948
83
+ ourocode/eurocode/ec5/element_droit/barre.py,sha256=M6jQeqJeA0WPpnFeOSgwBNCzThXSKDVdbYZyD9LAhCA,18653
84
+ ourocode/eurocode/ec5/element_droit/cisaillement.py,sha256=EEcvVT7Vxn0J7ytttf2J4Qxd-LGvjko9Mf1IIxulvVY,34744
85
+ ourocode/eurocode/ec5/element_droit/compression.py,sha256=tpNtnW8vWtC-Nfi0thRZm-hTJaqGBycE4_s9MmEU_7c,24377
86
+ ourocode/eurocode/ec5/element_droit/flexion.py,sha256=cqMCXjW3mqzzSTq24Uc0PYSeGLweckujjiAclbv5cjw,17455
87
+ ourocode/eurocode/ec5/element_droit/traction.py,sha256=_jEX3LlaIjLhd6oX4iB0zfgCCY8XtGyjgiyeHOqQAVQ,4916
88
+ ourocode/eurocode/ec5/element_droit/verification_EC5.py,sha256=L0Ip3-fXAqRNhiSNFLnFKglAptRdMtJq9Ea5TTpUEdM,40168
87
89
  ourocode/eurocode/ec5/feu/__init__.py,sha256=1qd-TZA7OJoMpIozri-X5cdJTNAno26XUSfA2SEzCz8,403
88
- ourocode/eurocode/ec5/feu/cisaillement_feu.py,sha256=ryqXdcdn1Z-1aCiPUcfgCp3cbXn5rL5NFVf_XzCgR1M,2395
89
- ourocode/eurocode/ec5/feu/compression_feu.py,sha256=bUB7WEOgQ5S5WcqWsEayGXN0_q4_daKNtx-V9icmC1E,6254
90
- ourocode/eurocode/ec5/feu/feu.py,sha256=YDBTKvYxYVKiY35pYN9tIi-PzFwwkfq2kDc-54MkcDs,19739
91
- ourocode/eurocode/ec5/feu/flexion_feu.py,sha256=8FtQtOArqKbp9CiapxFS_zWHHz3ZarNSze7-BVwabSw,10613
92
- ourocode/eurocode/ec5/feu/traction_feu.py,sha256=MwdFW8kGo80suymsYM3QQsq_lyzF9AIg0UScHuJhfAk,1655
90
+ ourocode/eurocode/ec5/feu/cisaillement_feu.py,sha256=-GDL1Cn79tHwPx3HY_0Z5of8VaCqBEb5QpaC-ul86UY,2396
91
+ ourocode/eurocode/ec5/feu/compression_feu.py,sha256=9NCuFhIpJ4p4D5XEsocupnAmSWLBgcpiQh-YpkCHVJ8,6349
92
+ ourocode/eurocode/ec5/feu/feu.py,sha256=M-nNpL4HpCoPzoEAYhS0dH6ZWx03NVuTHL6JW-io5WQ,19640
93
+ ourocode/eurocode/ec5/feu/flexion_feu.py,sha256=NmnGbmXqiKyUj0gyUNSztiNMBySheULdBf0XkWMXdcA,10614
94
+ ourocode/eurocode/ec5/feu/traction_feu.py,sha256=zo6neNkKyU10iTqtKNEMyHmKPpfnAVSAJxOizTb87Z8,1656
93
95
  ourocode/eurocode/ec8/__init__.py,sha256=7UPrYnqomaYSVaeK5T6fQU3hEBjX_elCX3aGeJOiNXU,76
94
- ourocode/eurocode/ec8/sismique.py,sha256=87JIFK2Wfmf2X8RTmG0Mt1JWq4Md-6CqXEswA3t3i_I,42836
96
+ ourocode/eurocode/ec8/sismique.py,sha256=SkqOG4yGQ3CokRZKR1X6TSRWvrIugDI9GUEW2XuPQbM,42837
95
97
  ourocode/eurocode/mixins/__init__.py,sha256=JnwZuL09LNNnYXJCcrit5H_2hAXhF2V8Hfbrj6Wg4-8,365
96
98
  ourocode/eurocode/mixins/data_loader.py,sha256=gG_6rCDGz3bCqCpXoZo9RoXV6SXcvbKlwuejlPvAqtQ,3172
97
- ourocode/eurocode/mixins/math_utils.py,sha256=lFFJ_wQZXqOJBTfbK1la7YrN7aql7i8Eo2jsMEh5ULA,14585
99
+ ourocode/eurocode/mixins/math_utils.py,sha256=6TdmrJ03OSHVzKVzePz3xu0lP6qqLavrUsgg6yozEZI,15828
98
100
  ourocode/eurocode/mixins/serialization.py,sha256=GVkNQ-A9KmSU5Y-Id_3bSSTwNI5WcBm7xxV1MSoQus0,10056
99
101
  ourocode/eurocode/mixins/synthese.py,sha256=iN-oE66HJAd78BAZwmyp8QXiB3eodFjol5HbC13eqx0,5080
100
- ourocode-2.1.2.dist-info/licenses/LICENSE,sha256=QN2UCBzRO2vI4TqqvK4PSUPAqmZ2XSVVxy4C-uom98I,11348
101
- ourocode-2.1.2.dist-info/METADATA,sha256=3It3G1e4nZSdL_OeLVzZ7IHB4_ov4km6TnRSa9bKD0U,6135
102
- ourocode-2.1.2.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
103
- ourocode-2.1.2.dist-info/top_level.txt,sha256=3P2RAcSHkR1_kepJUmxFbEMjeyWOKI-Wf5TeOx4bjqA,9
104
- ourocode-2.1.2.dist-info/RECORD,,
102
+ ourocode-2.1.3.dist-info/licenses/LICENSE,sha256=QN2UCBzRO2vI4TqqvK4PSUPAqmZ2XSVVxy4C-uom98I,11348
103
+ ourocode-2.1.3.dist-info/METADATA,sha256=P2wGt-68n_lJkG2z6uK1ZADZ7TuynTPkRk3Ouvufqz0,6135
104
+ ourocode-2.1.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
105
+ ourocode-2.1.3.dist-info/top_level.txt,sha256=3P2RAcSHkR1_kepJUmxFbEMjeyWOKI-Wf5TeOx4bjqA,9
106
+ ourocode-2.1.3.dist-info/RECORD,,
File without changes