ourocode 2.1.5__tar.gz → 2.1.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 (129) hide show
  1. {ourocode-2.1.5/ourocode.egg-info → ourocode-2.1.6}/PKG-INFO +1 -1
  2. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec1/neige.py +41 -1
  3. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/cvt.py +10 -0
  4. {ourocode-2.1.5 → ourocode-2.1.6/ourocode.egg-info}/PKG-INFO +1 -1
  5. {ourocode-2.1.5 → ourocode-2.1.6}/pyproject.toml +1 -1
  6. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC1_Neige.py +28 -0
  7. {ourocode-2.1.5 → ourocode-2.1.6}/LICENSE +0 -0
  8. {ourocode-2.1.5 → ourocode-2.1.6}/MANIFEST.in +0 -0
  9. {ourocode-2.1.5 → ourocode-2.1.6}/README.md +0 -0
  10. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/__init__.py +0 -0
  11. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/__version__.py +0 -0
  12. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_acier.csv +0 -0
  13. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_beton.csv +0 -0
  14. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_bois.csv +0 -0
  15. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_panel.csv +0 -0
  16. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/carte_action_region.csv +0 -0
  17. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/coeff_psy.csv +0 -0
  18. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/exploitation.csv +0 -0
  19. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/gammaM.csv +0 -0
  20. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/kdef.csv +0 -0
  21. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/kfi.csv +0 -0
  22. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/kmod.csv +0 -0
  23. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/limite_fleche.csv +0 -0
  24. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/profil_acier.csv +0 -0
  25. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/qualite_acier.csv +0 -0
  26. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/screenshot/C90_def.png +0 -0
  27. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/screenshot/CNC2M_4.3.3_tab15.png +0 -0
  28. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/screenshot/CNC2M_4.3.3_tab16.png +0 -0
  29. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/screenshot/EN1993-1-8_fig6_11.png +0 -0
  30. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/screenshot/Kv_def.png +0 -0
  31. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/screenshot/sign_convention.png +0 -0
  32. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/section_boulon.csv +0 -0
  33. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/sismique/categorie_importance.csv +0 -0
  34. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/sismique/categorie_importance_ns.csv +0 -0
  35. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/sismique/classe_sol.csv +0 -0
  36. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/sismique/spectre_eleastique_h_type1.csv +0 -0
  37. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/sismique/spectre_eleastique_h_type2.csv +0 -0
  38. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +0 -0
  39. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
  40. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +0 -0
  41. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
  42. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_mur_verticaux.csv +0 -0
  43. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
  44. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
  45. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +0 -0
  46. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +0 -0
  47. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +0 -0
  48. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
  49. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +0 -0
  50. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +0 -0
  51. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +0 -0
  52. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
  53. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/data/vent/vent_Ffr.png +0 -0
  54. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/__init__.py +0 -0
  55. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/__init__.py +0 -0
  56. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/_renderer.py +0 -0
  57. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/batiment.py +0 -0
  58. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/combinaison.py +0 -0
  59. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/model_generator.py +0 -0
  60. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/model_result.py +0 -0
  61. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/objet.py +0 -0
  62. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/core/projet.py +0 -0
  63. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec1/__init__.py +0 -0
  64. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec1/exploitation.py +0 -0
  65. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec1/vent.py +0 -0
  66. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/__init__.py +0 -0
  67. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/__init__.py +0 -0
  68. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/platine.py +0 -0
  69. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/soudure.py +0 -0
  70. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/tige.py +0 -0
  71. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/__init__.py +0 -0
  72. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/cisaillement.py +0 -0
  73. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/compression.py +0 -0
  74. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/flexion.py +0 -0
  75. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/plat.py +0 -0
  76. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/profil.py +0 -0
  77. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/traction.py +0 -0
  78. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec3/feu.py +0 -0
  79. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/__init__.py +0 -0
  80. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/__init__.py +0 -0
  81. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/agrafe.py +0 -0
  82. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/assemblage.py +0 -0
  83. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/boulon.py +0 -0
  84. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/broche.py +0 -0
  85. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/embrevement.py +0 -0
  86. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/pointe.py +0 -0
  87. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/tirefond.py +0 -0
  88. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/blc.py +0 -0
  89. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/__init__.py +0 -0
  90. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/barre.py +0 -0
  91. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/cisaillement.py +0 -0
  92. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/compression.py +0 -0
  93. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/flexion.py +0 -0
  94. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/traction.py +0 -0
  95. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/verification_EC5.py +0 -0
  96. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/__init__.py +0 -0
  97. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/cisaillement_feu.py +0 -0
  98. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/compression_feu.py +0 -0
  99. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/feu.py +0 -0
  100. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/flexion_feu.py +0 -0
  101. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/traction_feu.py +0 -0
  102. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec8/__init__.py +0 -0
  103. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/ec8/sismique.py +0 -0
  104. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/mixins/__init__.py +0 -0
  105. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/mixins/data_loader.py +0 -0
  106. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/mixins/math_utils.py +0 -0
  107. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/mixins/serialization.py +0 -0
  108. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode/eurocode/mixins/synthese.py +0 -0
  109. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode.egg-info/SOURCES.txt +0 -0
  110. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode.egg-info/dependency_links.txt +0 -0
  111. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode.egg-info/requires.txt +0 -0
  112. {ourocode-2.1.5 → ourocode-2.1.6}/ourocode.egg-info/top_level.txt +0 -0
  113. {ourocode-2.1.5 → ourocode-2.1.6}/setup.cfg +0 -0
  114. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_A0_Projet.py +0 -0
  115. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC0_Combinaison.py +0 -0
  116. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC1_Exploitation.py +0 -0
  117. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC3_Assemblage.py +0 -0
  118. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC3_Element_droit.py +0 -0
  119. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC3_Feu.py +0 -0
  120. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC3_Platine.py +0 -0
  121. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_Assemblage.py +0 -0
  122. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_BLC.py +0 -0
  123. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_CVT.py +0 -0
  124. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_Element_droit.py +0 -0
  125. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_Embrevement.py +0 -0
  126. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_Feu.py +0 -0
  127. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC5_Verification.py +0 -0
  128. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_EC8_Sismique.py +0 -0
  129. {ourocode-2.1.5 → ourocode-2.1.6}/tests/test_model_generator.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ourocode
3
- Version: 2.1.5
3
+ Version: 2.1.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
@@ -455,7 +455,7 @@ class Neige(Batiment):
455
455
  """Retourne la charge de neige en kN/m sur un obstacle ou une barre à neige
456
456
 
457
457
  Args:
458
- Sn (float): la charge de neige en kN/m²
458
+ Sn (float): la charge de neige normale au sol en kN/m²
459
459
  entraxe (int): entraxe horizontal entre deux obstacle à la neige en m
460
460
  alpha (float): angle du versant considéré.
461
461
 
@@ -470,6 +470,46 @@ class Neige(Batiment):
470
470
  return F_s
471
471
  return val()
472
472
 
473
+ def poussee_hydrostatique(self, h: si.m):
474
+ """Retourne la poussée horizontale de neige "hydrostatique" selon l'EN 1991-1-3 §6.2.
475
+
476
+ Modélise l'action horizontale due à une accumulation de neige contre un obstacle
477
+ vertical (parapet, écran, mur...) par une charge triangulaire :
478
+ pression nulle au sommet de la couche de neige et maximale à la base.
479
+
480
+ Formules :
481
+
482
+ - hauteur de neige : h_n = S_n / γ
483
+ - pression maximale à la base : q_h = γ × h_n
484
+ - résultante horizontale par mètre linéaire : F_hl = 0.5 × q_h × h
485
+ - hauteur équivalente d'application de la résultante: h_eq = 1/3 * h_n
486
+
487
+ Args:
488
+ h (float): Hauteur de la paroi verticale en m.
489
+
490
+ Returns:
491
+ tuple: (latex_string, dict) avec :
492
+ - "q_h" : pression horizontale maximale à la base en kN/m².
493
+ - "F_hl" : résultante horizontale par unité de largeur en kN/m.
494
+ - "h_neige" : hauteur de neige en m.
495
+ """
496
+ h = h * si.m
497
+ gamma = 2 * si.kN/si.m**3
498
+ Sk_alt = self.Sk_alt[1]
499
+ C_e = self.C_e
500
+ C_t = self.C_t
501
+
502
+ @handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY, left="\\[", right="\\]")
503
+ def val():
504
+ mu_i = min(max(gamma * h / Sk_alt, 0.8), 2)
505
+ S_n = Sk_alt * mu_i * C_e * C_t
506
+ h_neige = S_n / gamma # hauteur de neige
507
+ h_eq = h_neige * 1/3 # hauteur équivalente d'application de la résultante
508
+ q_h = gamma * h_neige # pression maximale à la base
509
+ F_hl = 0.5 * q_h * h_neige # résultante horizontale par mètre linéaire
510
+ return q_h, F_hl, h_neige, h_eq
511
+ latex, (q_h, F_hl, h_neige, h_eq) = val()
512
+ return latex, {"q_h": q_h, "F_hl": F_hl, "h_neige": h_neige, "h_equivalent": h_eq}
473
513
 
474
514
 
475
515
  if __name__ == "__main__":
@@ -871,6 +871,16 @@ class MOB(Batiment):
871
871
  long_wall = self.data_walls[wall_name]['Longueur']
872
872
  nb_anc_lb = floor(long_wall / e_anc_lb)
873
873
  nb_anc_li = floor(long_wall / e_anc_li)
874
+ if nb_anc_lb == 0:
875
+ raise ValueError(
876
+ f"Mur '{wall_name}' (L={long_wall}) : e_anc_lb={e_anc_lb} est supérieur "
877
+ f"à la longueur du mur — aucun ancrage lisse basse possible (nb_anc_lb=0)."
878
+ )
879
+ if nb_anc_li == 0:
880
+ raise ValueError(
881
+ f"Mur '{wall_name}' (L={long_wall}) : e_anc_li={e_anc_li} est supérieur "
882
+ f"à la longueur du mur — aucun ancrage lisse d'implantation possible (nb_anc_li=0)."
883
+ )
874
884
  Ft_Rd_wood = (Ft_Rk_wood * K_mod_montant / Assemblage.GAMMA_M_ASS)
875
885
  Fv_Rd_anc_lb = (Fv_Rk_anc_lb * K_mod_lb / Assemblage.GAMMA_M_ASS) * nb_anc_lb
876
886
  Fv_Rd_anc_li = (Fv_Rk_anc_li * K_mod_li / Assemblage.GAMMA_M_ASS) * nb_anc_li
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ourocode
3
- Version: 2.1.5
3
+ Version: 2.1.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 = "2.1.5"
11
+ version = "2.1.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"}]
@@ -166,3 +166,31 @@ def test_fs():
166
166
  # F_s = S_n * entraxe * sin(alpha)
167
167
  expected = 1.0 * si.kN/si.m**2 * 1.5 * si.m * math.sin(math.radians(30))
168
168
  assert pytest.approx(out[1].value, rel=1e-6) == expected.value
169
+
170
+
171
+ def test_poussee_hydrostatique():
172
+ n = Neige(
173
+ exposition="Normal",
174
+ type_toit="1 versant",
175
+ blocage=False,
176
+ h_bat=5, d_bat=10, b_bat=10,
177
+ alpha_toit=10,
178
+ code_INSEE=1001,
179
+ alt=100,
180
+ )
181
+ h = 1 * si.m
182
+ latex, res = n.poussee_hydrostatique(h=h)
183
+ gamma = 2 * si.kN/si.m**3
184
+ Sk_alt = n.Sk_alt[1]
185
+ mu_i = min(max(gamma * h / Sk_alt, 0.8), 2)
186
+ S_n = Sk_alt * mu_i * n.C_e * n.C_t
187
+ h_neige_expected = S_n / gamma
188
+ q_expected = gamma * h_neige_expected
189
+ F_expected = 0.5 * q_expected * h_neige_expected
190
+ h_equivalent_expected = h_neige_expected / 3
191
+
192
+ assert set(res.keys()) == {"q_h", "F_hl", "h_neige", "h_equivalent"}
193
+ assert pytest.approx(res["h_neige"].value, rel=1e-6) == h_neige_expected.value
194
+ assert pytest.approx(res["h_equivalent"].value, rel=1e-6) == h_equivalent_expected.value
195
+ assert pytest.approx(res["q_h"].value, rel=1e-6) == q_expected.value
196
+ assert pytest.approx(res["F_hl"].value, rel=1e-6) == F_expected.value
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes