ourocode 1.6.0__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 (53) hide show
  1. ourocode/__init__.py +0 -0
  2. ourocode/__version__.py +1 -0
  3. ourocode/data/caracteristique_meca_acier.csv +33 -0
  4. ourocode/data/caracteristique_meca_bois.csv +59 -0
  5. ourocode/data/carte_action_region.csv +36722 -0
  6. ourocode/data/coeff_psy.csv +13 -0
  7. ourocode/data/exploitation.csv +17 -0
  8. ourocode/data/gammaM.csv +14 -0
  9. ourocode/data/kdef.csv +11 -0
  10. ourocode/data/kfi.csv +10 -0
  11. ourocode/data/kmod.csv +16 -0
  12. ourocode/data/limite_fleche.csv +9 -0
  13. ourocode/data/qualite_acier.csv +18 -0
  14. ourocode/data/screenshot/C90_def.png +0 -0
  15. ourocode/data/screenshot/Kv_def.png +0 -0
  16. ourocode/data/screenshot/fleche.png +0 -0
  17. ourocode/data/screenshot/sign_convention.png +0 -0
  18. ourocode/data/section_boulon.csv +12 -0
  19. ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +22 -0
  20. ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
  21. ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +31 -0
  22. ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
  23. ourocode/data/vent/vent_Cpe_mur_verticaux.csv +11 -0
  24. ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
  25. ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
  26. ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +13 -0
  27. ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +13 -0
  28. ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +13 -0
  29. ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
  30. ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +21 -0
  31. ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +21 -0
  32. ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +21 -0
  33. ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
  34. ourocode/data/vent/vent_Ffr.png +0 -0
  35. ourocode/eurocode/A0_Projet.py +1408 -0
  36. ourocode/eurocode/EC0_Combinaison.py +1763 -0
  37. ourocode/eurocode/EC1_Exploitation.py +103 -0
  38. ourocode/eurocode/EC1_Neige.py +385 -0
  39. ourocode/eurocode/EC1_Vent.py +1388 -0
  40. ourocode/eurocode/EC3_Assemblage.py +466 -0
  41. ourocode/eurocode/EC3_Element_droit.py +302 -0
  42. ourocode/eurocode/EC5_Assemblage.py +1760 -0
  43. ourocode/eurocode/EC5_Element_droit.py +1740 -0
  44. ourocode/eurocode/EC5_Feu.py +922 -0
  45. ourocode/eurocode/EC8_Sismique.py +2 -0
  46. ourocode/eurocode/__init__.py +0 -0
  47. ourocode/eurocode/logical.py +83 -0
  48. ourocode/eurocode/objet.py +263 -0
  49. ourocode-1.6.0.dist-info/METADATA +331 -0
  50. ourocode-1.6.0.dist-info/RECORD +53 -0
  51. ourocode-1.6.0.dist-info/WHEEL +5 -0
  52. ourocode-1.6.0.dist-info/licenses/LICENSE +201 -0
  53. ourocode-1.6.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,466 @@
1
+ # coding in UTF-8
2
+
3
+ ############# Le but de ce fichier est de regrouper toute les fonctions d'assemblage par organe métalique dans l'EN-1993 #############
4
+ from math import *
5
+ import pandas as pd
6
+
7
+ import forallpeople as si
8
+ si.environment("structural")
9
+ from handcalcs.decorator import handcalc
10
+
11
+ from ourocode.eurocode.EC3_Element_droit import Element
12
+
13
+ #======================================================= Tige =========================================================
14
+
15
+ class Tige(Element):
16
+ QUALITE_ACIER = tuple(str(key) for key in Element._data_from_csv(Element, "qualite_acier.csv").index)
17
+
18
+ def __init__(self, d:si.mm, d0:si.mm, qualite: str=QUALITE_ACIER, verif_filetage: bool=("False", "True"), filetage_EN1090: bool=("True", "False"), *args, **kwargs):
19
+ """Configure un objet Tige permettant les vérification suivant l'EN 1993-1-8. Cette classe est hérité de la classe Element du fichier EC3_Element_droit.py.
20
+
21
+ Args:
22
+ d (int): le diamètre de la tige en mm
23
+ d0 (int): le diamètre de percage en mm
24
+ qualite (float): classe d'acier de la tige (ex: 4.8)
25
+ verif_filetage (bool, optional): définit si le filetage du boulon doit être vérifier, si c'est le cas alors True. Defaults to False.
26
+ filetage_EN1090 (bool, optional): définit si le filetage est conforme à l'EN 1090, soit matricé. Si filetage usiné alors False. Defaults to True.
27
+ """
28
+ super().__init__(*args, **kwargs)
29
+ self.d = d * si.mm
30
+ self.d0 = d0 * si.mm
31
+ self.qualite = qualite
32
+ self.verif_filetage = verif_filetage
33
+
34
+ if filetage_EN1090:
35
+ self.filetage_EN1090 = 1
36
+ else:
37
+ self.filetage_EN1090 = 0.85
38
+
39
+ self.fyb = self.__qualite_acier.loc["fyb"] * si.MPa
40
+ self.fub = self.__qualite_acier.loc["fub"] * si.MPa
41
+
42
+ if type(self.__section_boulon) is pd.core.series.Series:
43
+ self.As = self.__section_boulon.loc["As"] * si.mm**2
44
+ self.An = self.__section_boulon.loc["An"] * si.mm**2
45
+ else:
46
+ self.As = 0 * si.mm**2
47
+ self.An = pi * (self.d.value*10**3/2)**2 * si.mm**2
48
+
49
+
50
+ @property
51
+ def __qualite_acier(self):
52
+ df = self._data_from_csv("qualite_acier.csv")
53
+ df = df.loc[self.qualite]
54
+ return df
55
+
56
+
57
+ @property
58
+ def __section_boulon(self):
59
+ try:
60
+ df = self._data_from_csv("section_boulon.csv")
61
+ df = df.loc[self.d.value*10**3]
62
+ return df
63
+ except KeyError:
64
+ print("Le diamètre ne peut pas être celui d'un boulon, vérifier As = 0, An = aire de d")
65
+
66
+
67
+
68
+ def pince_metal_boulon(self, trous_oblongs: bool=("False", "True"), corrosion: bool=("False", "True")):
69
+ """ Retourne les pinces du métal minimum dans un assemblage constitué de tige (EN 1993-1-8 §3.5) avec:
70
+ trous_oblongs : si les trous oblongs True sinon False
71
+ corrosion : assemblage exposé à la corrosion = True sinon False
72
+ en_10025_5 : structure réalisées en acier conformes à l'EN 10025-5, True si vrai sinon False
73
+
74
+ NE PRENDS PAS EN COMPTE P1,0 ou P1,i ou P2 diminué quand les boulons sont en quinconce (voir §3.5 -5)
75
+ """
76
+
77
+ en_10025_5 = False
78
+
79
+ if self._Element__classe_acier.loc["norme"] == "EN 10025-5":
80
+ en_10025_5 = True
81
+
82
+
83
+ pince = {}
84
+
85
+ e1 = {"e1_min": round(1.2 * self.d0.value*10**3, 1)}
86
+ e2 = {"e2_min": e1["e1_min"]}
87
+ e3 = round(1.5 * self.d0.value*10**3, 1)
88
+ e4 = e3
89
+ p1 = {"p1_min": round(2.2 * self.d0.value*10**3 , 1)}
90
+ p2 = {"p2_min": round(2.4 * self.d0.value*10**3, 1)}
91
+
92
+
93
+ if not en_10025_5:
94
+ p1["p1_max"] = round(min(14 * self.t.value*10**3, 200))
95
+ p2["p2_max"] = p1["p1_max"]
96
+
97
+ if corrosion:
98
+ e1["e1_max_corro"] = round(4 * self.t.value*10**3 + 40)
99
+ e2["e2_max_corro"] = e1["e1_max_corro"]
100
+
101
+ else:
102
+ e1["e1_max"] = round(max(8 * self.t.value*10**3, 125))
103
+ e2["e2_max"] = e1["e1_max"]
104
+ p1["p1_max"] = round(min(14 * self.t.value*10**3, 175))
105
+ p2["p2_max"] = p1["p1_max"]
106
+
107
+
108
+ if trous_oblongs :
109
+ pince["e3"] = e3
110
+ pince["e4"] = e4
111
+ else:
112
+ pince["e1"] = e1
113
+ pince["e2"] = e2
114
+
115
+ pince["p1"] = p1
116
+ pince["p2"] = p2
117
+
118
+ return pince
119
+
120
+
121
+ @property
122
+ def FvRd(self) -> float:
123
+ """Retourne la résistance en cisaillement de la partie fileté et lisse d'une tige par plan en N
124
+ """
125
+ quali_1 = [4.6,5.6,8.8]
126
+ if self.qualite in quali_1:
127
+ fvrd_filete = 0.6 * self.fub * self.As / self.GAMMA_M["gamma_M2"]
128
+ else:
129
+ fvrd_filete = 0.5 * self.fub * self.As / self.GAMMA_M["gamma_M2"]
130
+
131
+ fvrd_lisse = 0.6 * self.fub * self.An / self.GAMMA_M["gamma_M2"]
132
+ return {"filetage": fvrd_filete * self.filetage_EN1090, "lisse": fvrd_lisse * self.filetage_EN1090}
133
+
134
+
135
+ @property
136
+ def FtRd(self) -> float:
137
+ """Retourne la résistance en traction de la tige en N
138
+ """
139
+ f_ub = self.fub
140
+ A_s = self.As
141
+ gamma_M2 = self.GAMMA_M["gamma_M2"]
142
+ coef_filetage_EN1090 = self.filetage_EN1090
143
+ @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
144
+ def val():
145
+ F_t_Rd = 0.9 * f_ub * A_s / gamma_M2 * coef_filetage_EN1090
146
+ return F_t_Rd
147
+ return val()
148
+
149
+
150
+ #Combinaison des efforts
151
+ def taux_FvEd_FtEd(self, FvEd: float=0, FtEd: float=0):
152
+ """Retourne les taux de travail en cisaillement, en traction et combiné d'une tige
153
+
154
+ Args:
155
+ FvEd (int): effort à reprendre en cisaillment en kN
156
+ FtEd (int): effort de traction à reprendre en kN
157
+
158
+ Returns:
159
+ dict: dictionnaire des taux de travail slon tab. 3.4 de l'EN 1993-1-8
160
+ """
161
+ self.FvEd = FvEd * si.kN
162
+ self.FtEd = FtEd * si.kN
163
+ self.taux_bl = {}
164
+
165
+ self.taux_bl["taux_t_d"] = self.FtEd / self.FtRd[1]
166
+
167
+ self.taux_bl["taux_v_d_lisse"] = self.FvEd / self.FvRd["lisse"]
168
+
169
+ if self.verif_filetage:
170
+ self.taux_bl["taux_v_d_filetage"] = self.FvEd / self.FvRd["filetage"]
171
+ if FvEd and FtEd:
172
+ self.taux_bl["taux_v_t_d"] = self.FvEd / min(self.FvRd["lisse"], self.FvRd["filetage"]) + self.FtEd / (1.4 * self.FtRd[1])
173
+ else:
174
+ self.taux_bl["taux_v_t_d"] = self.FvEd / self.FvRd["lisse"] + self.FtEd / (1.4 * self.FtRd[1])
175
+
176
+ return self.taux_bl
177
+
178
+
179
+ def Bp_Rd(self, d_ecrou: int, d_head_bl: int, *args):
180
+ """Retourne la résistance au poinçonnement de la plaque en N
181
+
182
+ Args:
183
+ d_ecrou (int): diamètre extérieur de l'écrou en mm
184
+ d_head_bl (int): diamètre de la tête de boulon en mm
185
+ tp, i (int, args): épaisseur des plaques dans l'assemblage, sinon récupère le t de la classe Element
186
+
187
+ Returns:
188
+ float: résistance de calcul en N
189
+ """
190
+ d_ecrou = d_ecrou * si.mm
191
+ d_head_bl = d_head_bl * si.mm
192
+ dm = (d_ecrou + d_head_bl) / 2
193
+ tp = min(self.t.value*10**3, *args) * si.mm
194
+ return (0.6 * pi * dm * tp * self.fu) / __class__.GAMMA_M["gamma_M2"]
195
+
196
+
197
+ def Fb_Rd(self, e1: float ,e2: float , p1: float, p2: float):
198
+ """Retourne la pression diamétrale en N.
199
+ ATTENTION: ne prends pas en compte les réductions de résistance lié au critère de l'assemblage (voir §3.6.1-10 et tab 3.4)
200
+ - jeux non normalisés -> 0.8 * Fb,Rd
201
+ - Trous oblongs avec axe perpendiculaire à la direction de la charge -> 0.6 * Fb,Rd
202
+ - Assemblage à une seule rangée de boulon en simple cisaillement -> rondelles + limitation de Fb,Rd <= 1.5*fu*d*t/gamma_M2
203
+
204
+ Args:
205
+ e1 (float): pince e1 en mm
206
+ e2 (float): pince e2 en mm
207
+ p1 (float): pince p1 en mm
208
+ p2 (float): pince p2 en mm
209
+
210
+ Returns:
211
+ float: résistance de calcul en N
212
+ """
213
+ e_1 = e1 * si.mm
214
+ e_2 = e2 * si.mm
215
+ p_1 = p1 * si.mm
216
+ p_2 = p2 * si.mm
217
+ f_u = self.fu
218
+ f_u_b = self.fub
219
+ d_0 = self.d0
220
+ d = self.d
221
+ t = self.t
222
+ gamma_M_2 = __class__.GAMMA_M["gamma_M2"]
223
+
224
+ @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
225
+ def val():
226
+ alpha_b = min(e_1 / (3 * d_0), (p_1 / (3 * d_0)) - 0.25, f_u_b / f_u, 1)
227
+ k_1 = min(2.8 * e_2 / d_0 - 1.7, 1.4 * p_2 / d_0 - 1.7, 2.5)
228
+
229
+ F_b_Rd = k_1 * alpha_b * f_u_b * d * t / gamma_M_2
230
+ return F_b_Rd
231
+ return val()
232
+
233
+
234
+ def Veff_Rd(self, Lnt: float, Lvt: float, effort: str=("Centré", "Excentré")):
235
+ """Retourne la résistance en cisaillement bloc de l'assemblage selon §3.10.2.
236
+
237
+ Args:
238
+ Lnt (float, optional): longueur nette soumise à la traction déduction faite des trous de boulons en mm.
239
+ Lvt (float, optional): longueur nette soumise au cisaillement déduction faite des trous de boulons en mm.
240
+ effort (str, optional): définit si l'effort est centré ou excentré par rapport au cisaillement de bloc. Defaults to ("Centré", "Excentré").
241
+
242
+ Returns:
243
+ float: résistance de calcul en N
244
+ """
245
+ A_nt = Lnt * si.mm * self.t
246
+ A_vt = Lvt * si.mm * self.t
247
+ f_y = self.fy
248
+ f_u = self.fu
249
+ k_ex = 1
250
+ gamma_M_2 = __class__.GAMMA_M["gamma_M2"]
251
+
252
+ if effort == "Excentré":
253
+ k_ex = 0.5
254
+
255
+ @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
256
+ def val():
257
+ V_eff_nt_Rd = (A_nt * f_u) / gamma_M_2
258
+ V_eff_nv_Rd = 1/sqrt(3) * (A_vt * f_y) / gamma_M_2
259
+ V_eff_Rd = k_ex * V_eff_nt_Rd + V_eff_nv_Rd
260
+ return V_eff_Rd
261
+ return val()
262
+
263
+
264
+ def taux_Veff_d(self, N_Ed: float=0, N_Veff_Rd: float=0, V_Ed: float=0, V_Veff_Rd: float=0):
265
+ """Retourne le taux de travail du cisaillement bloc avec un effort combiné ou non selon l'EN 1993 §3.10.2 et le CNC2M-N0175-REC §2.1(10).
266
+
267
+ Args:
268
+ N_Ed (float, optional): effort normal en kN. Defaults to 0.
269
+ V_Ed (float, optional): effort de cisaillement en kN. Defaults to 0.
270
+ V_Veff_Rd (float, optional): résistance de l'effort de traction en rupture bloc en kN, si pas d'effort ne rien mettre. Defaults to 0.
271
+ V_Veff_Rd (float, optional): résistance de l'effort de cisaillement en kN ,si pas d'effort ne rien mettre. Defaults to 0.
272
+
273
+ """
274
+ N_Ed = N_Ed * si.kN
275
+ N_Veff_Rd = N_Veff_Rd * si.kN
276
+ V_Ed = V_Ed * si.kN
277
+ V_Veff_Rd = V_Veff_Rd * si.kN
278
+
279
+ # selon CNC2M §2.1(10)
280
+ if N_Ed.value and V_Ed.value:
281
+ @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\[", right="\]")
282
+ def val():
283
+ taux = N_Ed / N_Veff_Rd + V_Ed / V_Veff_Rd
284
+ return taux
285
+ return val()
286
+ elif N_Ed.value:
287
+ taux = N_Ed / N_Veff_Rd
288
+ else:
289
+ taux = V_Ed / V_Veff_Rd
290
+ return taux
291
+
292
+
293
+
294
+ class Soudure(Element):
295
+ def __init__(self, t2: si.mm, gorge: si.mm, l: si.mm, retour_soudure: bool=("False", "True"), alpha: float=90, *args, **kwargs):
296
+ """Configure un objet soudure permettant les vérification suivant l'EN 1993-1-8. Cette classe est hérité de la classe Element du fichier EC3_Element_droit.py.
297
+
298
+ Args:
299
+ t2 (float): épaisseur de la pièce 2 sur laquelle on soude en mm
300
+ gorge (int): dimension de la gorge "a" en mm
301
+ l (int): longueur de soudure "brute" sans cratère en mm
302
+ retour_soudure (bool, optional): détermine si un retour de la soudure est fait si oui alors True. Defaults to False.
303
+ alpha (int | float, optional): angle en degré de la de la pièce 2 sur la pièce 1. Defaults to 90.
304
+ """
305
+
306
+ super().__init__(*args, **kwargs)
307
+ self.t2 = t2 * si.mm
308
+ self.gorge = gorge * si.mm
309
+ self.l = l * si.mm
310
+ self.retour_soudure = retour_soudure
311
+ self.alpha = alpha
312
+
313
+ self.verif_soudure()
314
+
315
+
316
+ @property
317
+ def beta_w(self):
318
+ return float(self._Element__classe_acier.loc["betaW"])
319
+
320
+
321
+ @property
322
+ def lef(self):
323
+ if not self.retour_soudure:
324
+ return self.l - 2 * self.gorge
325
+ else:
326
+ return self.l
327
+
328
+
329
+ def verif_soudure(self):
330
+ """Vérifie que la soudure répond aux critères de l'EC3
331
+
332
+ Returns:
333
+ bool: si la soudure est correctement définie, alors True sinon False
334
+ """
335
+ if 60 <= self.alpha <= 120:
336
+ # selon CNC2M-N0175-REC §3.3
337
+ tmin = min(self.t, self.t2)
338
+ tmax = max(self.t, self.t2)
339
+ amin = max(3*si.mm, (sqrt(tmax)-0.5)*si.mm)
340
+ amax = 0.7 * tmin
341
+
342
+ if amin <= self.gorge <= amax:
343
+ if self.l > max(30*si.mm, 6*self.gorge):
344
+ return True
345
+ else:
346
+ print(f"La longueur du cordon de soudure est trop petite, elle doit être supérieur à {min(30*si.mm, 6*self.gorge)}")
347
+ return False
348
+ else:
349
+ print(f"La gorge doit être au minimum de {amin} et au maximum de {amax}")
350
+ return False
351
+ else:
352
+ print("L'angle entre les deux pièces à souder doit être compris entre 60° et 120°")
353
+ return False
354
+
355
+
356
+ def beta_Lw1(self, Lj: int) -> float:
357
+ """Calcul le facteur beta_Lw,1 qui dimminue la résistance pour des cordons de soudure des assemblages par recouvrement (à plat)
358
+
359
+ Args:
360
+ Lj (int): Longueur de recouvrement des plats en mm
361
+ """
362
+ Lj = Lj * si.mm
363
+ return min((1.2 - 0.2 * Lj) / (150 * self.gorge), 1)
364
+
365
+
366
+ def cordon_frontal(self, N_Ed: float):
367
+ """Calcul un cordon de soudure frontale et retourne le taux de travail.
368
+
369
+ Args:
370
+ N_Ed (float): Effort de traction en kN.
371
+ """
372
+ N_Ed = N_Ed * si.kN
373
+ return (self.beta_w * self.GAMMA_M["gamma_M2"] * (N_Ed * sqrt(2)) / self.fu) / (self.gorge * self.lef)
374
+
375
+
376
+ def cordon_laterale(self, V_Ed: float):
377
+ """Calcul un cordon de soudure latérale et retourne le taux de travail.
378
+
379
+ Args:
380
+ V_Ed (float): Effort de cisaillement du cordon en kN.
381
+ """
382
+ V_Ed = V_Ed * si.kN
383
+ return (self.beta_w * self.GAMMA_M["gamma_M2"] * (V_Ed * sqrt(3)) / self.fu) / (self.gorge * self.lef)
384
+
385
+
386
+ def cordon_oblique(self, alpha_cordon: float, N_Ed: float):
387
+ """Calcul un cordon de soudure oblique et retourne le taux de travail.
388
+
389
+ Args:
390
+ N_Ed (float): Effort de traction en kN.
391
+ """
392
+ self.alpha_cordon = alpha_cordon
393
+ N_Ed = N_Ed * si.kN
394
+ return (self.beta_w * self.GAMMA_M["gamma_M2"] * (N_Ed * sqrt(3 - sin(radians(self.alpha_cordon))**2)) / self.fu) / (self.gorge * self.lef)
395
+
396
+
397
+ def cordon_pieces_obliques(self, N_Ed: float):
398
+ """Calcul un cordon de soudure sur des pièces à positionnement obliques et retourne le taux de travail.
399
+
400
+ Args:
401
+ N_Ed (float): Effort de traction en kN.
402
+ """
403
+ N_Ed = N_Ed * si.kN
404
+ if self.alpha < 90:
405
+ return (self.beta_w * self.GAMMA_M["gamma_M2"] * (N_Ed * sqrt(2 - sin(radians(self.alpha)))) / self.fu) / (self.gorge * self.lef)
406
+ elif self.alpha > 90:
407
+ return (self.beta_w * self.GAMMA_M["gamma_M2"] * (N_Ed * sqrt(2 + sin(radians(self.alpha)))) / self.fu) / (self.gorge * self.lef)
408
+
409
+
410
+ def critere_generale(self, FvEd: float, FaxEd: float):
411
+ """Calcul le critère générale de Von Mises d'une soudure et retourne le taux.
412
+
413
+ Args:
414
+ FvEd (int | float): Effort de cisaillement sur la en kN
415
+ FaxEd (int | float): Effort de traction sur la soudure en kN
416
+
417
+ Returns:
418
+ (float) : Taux de travail de la soudure
419
+ """
420
+ Fv_Ed = FvEd * si.kN
421
+ Fax_Ed = FaxEd * si.kN
422
+ self.tau_para = Fv_Ed / (self.gorge * self.lef)
423
+ self.sigma_perpend = (Fax_Ed * cos(radians(self.alpha/2)))/ (self.gorge * self.lef)
424
+ self.tau_perpend = (Fax_Ed * cos(radians(self.alpha/2)))/ (self.gorge * self.lef)
425
+ self.sigma_e = sqrt(self.sigma_perpend**2 + 3 * (self.tau_perpend**2 + self.tau_para**2))
426
+
427
+ self.sigma_Rd = self.fu / (self.beta_w * self.GAMMA_M["gamma_M2"])
428
+ self.sigma_perpend_Rd = (0.9 * self.fu) / self.GAMMA_M["gamma_M2"]
429
+ return max(self.sigma_e / self.sigma_Rd, self.sigma_perpend / self.sigma_perpend_Rd)
430
+
431
+
432
+
433
+ def soudure_discontinue(self, b: int, b1: int, t1: int, corrosion: bool=("False", "True")):
434
+ """_summary_
435
+
436
+ Args:
437
+ b (int): voir EC3 1-8
438
+ b1 (int): hauteur en mm de la pièce 2 soudé sur la pièce 1
439
+ t (int): définit dans la classe Element
440
+ t2 (int): épaisseur en mm de la piece 2 soudé sur pièce 1
441
+ corrosion (bool, optional): _description_. Defaults to False.
442
+
443
+ Returns:
444
+ _type_: _description_
445
+ """
446
+ if corrosion:
447
+ print("Il n'est pas possible d'avoir une soudure discontinue en ambiance corrosive")
448
+ return False
449
+ b = b * si.mm
450
+ lwe = max(0.75 * b, 0.75 * b1*si.mm)
451
+ l1 = min(16 * self.t, 16 * self.t2, 200)
452
+ l2 = min(12 * self.t, 12 * self.t2, 0.25 * b, 200)
453
+ return {"Lwe": lwe, "L1": l1, "L2": l2}
454
+
455
+
456
+
457
+
458
+ if __name__ == "__main__":
459
+ ele = Element(classe_acier="S235", t=6, h=200, classe_transv=1)
460
+ soudure = Soudure._from_parent_class(ele, t2=6, gorge=4, l=140, retour_soudure=True, alpha=90)
461
+ bl = Tige._from_parent_class(ele, d=12,d0=14,qualite="A2-50",verif_filetage=True, filetage_EN1090=True)
462
+ print(soudure.critere_generale(0, 100135))
463
+ N_rd = bl.Veff_Rd(300, 300, "Centré")
464
+ V_Rd = bl.Veff_Rd(300, 300, "Centré")
465
+ taux = bl.taux_Veff_d(12, N_rd[1], 25, V_Rd[1])
466
+ print(taux)