ourocode 2.1.4__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.
- {ourocode-2.1.4/ourocode.egg-info → ourocode-2.1.6}/PKG-INFO +1 -1
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/model_result.py +5 -4
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec1/neige.py +41 -1
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/cvt.py +20 -6
- {ourocode-2.1.4 → ourocode-2.1.6/ourocode.egg-info}/PKG-INFO +1 -1
- {ourocode-2.1.4 → ourocode-2.1.6}/pyproject.toml +1 -1
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC1_Neige.py +28 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/LICENSE +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/MANIFEST.in +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/README.md +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/__version__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_acier.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_beton.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_bois.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/caracteristique_meca_panel.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/carte_action_region.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/coeff_psy.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/exploitation.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/gammaM.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/kdef.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/kfi.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/kmod.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/limite_fleche.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/profil_acier.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/qualite_acier.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/screenshot/C90_def.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/screenshot/CNC2M_4.3.3_tab15.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/screenshot/CNC2M_4.3.3_tab16.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/screenshot/EN1993-1-8_fig6_11.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/screenshot/Kv_def.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/screenshot/sign_convention.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/section_boulon.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/sismique/categorie_importance.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/sismique/categorie_importance_ns.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/sismique/classe_sol.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/sismique/spectre_eleastique_h_type1.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/sismique/spectre_eleastique_h_type2.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_mur_verticaux.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Ffr.png +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/_renderer.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/batiment.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/combinaison.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/model_generator.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/objet.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/core/projet.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec1/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec1/exploitation.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec1/vent.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/platine.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/soudure.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/assemblage/tige.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/cisaillement.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/compression.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/flexion.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/plat.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/profil.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/element_droit/traction.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec3/feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/agrafe.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/assemblage.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/boulon.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/broche.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/embrevement.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/pointe.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/assemblage/tirefond.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/blc.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/barre.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/cisaillement.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/compression.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/flexion.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/traction.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/element_droit/verification_EC5.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/cisaillement_feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/compression_feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/flexion_feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec5/feu/traction_feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec8/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/ec8/sismique.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/mixins/__init__.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/mixins/data_loader.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/mixins/math_utils.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/mixins/serialization.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode/eurocode/mixins/synthese.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode.egg-info/SOURCES.txt +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode.egg-info/dependency_links.txt +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode.egg-info/requires.txt +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/ourocode.egg-info/top_level.txt +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/setup.cfg +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_A0_Projet.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC0_Combinaison.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC1_Exploitation.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC3_Assemblage.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC3_Element_droit.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC3_Feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC3_Platine.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_Assemblage.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_BLC.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_CVT.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_Element_droit.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_Embrevement.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_Feu.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC5_Verification.py +0 -0
- {ourocode-2.1.4 → ourocode-2.1.6}/tests/test_EC8_Sismique.py +0 -0
- {ourocode-2.1.4 → 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.
|
|
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
|
|
@@ -834,9 +834,10 @@ class Model_result(Projet):
|
|
|
834
834
|
Un glisseur retournera une force nulle dans la direction libre.
|
|
835
835
|
"""
|
|
836
836
|
reaction = {}
|
|
837
|
-
|
|
838
|
-
for
|
|
839
|
-
|
|
840
|
-
|
|
837
|
+
all_supports = self._model_generator.get_all_supports()
|
|
838
|
+
for support_type, supports in all_supports.items():
|
|
839
|
+
for support_id, support in supports.items():
|
|
840
|
+
node_id = support["Noeud"]
|
|
841
|
+
reaction[support_id] = self._get_node_reaction(node_id, combination)
|
|
841
842
|
return reaction
|
|
842
843
|
|
|
@@ -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__":
|
|
@@ -379,11 +379,11 @@ class MOB(Batiment):
|
|
|
379
379
|
if couturage_ext_rive:
|
|
380
380
|
wall['Couturage ext. rive'] = couturage_ext_rive * si.mm
|
|
381
381
|
wall['Couturage ext. intermédiaire'] = couturage_ext_inter * si.mm
|
|
382
|
-
if Ff_Rk_ext is None:
|
|
382
|
+
if Ff_Rk_ext is None or Ff_Rk_ext == 0 * si.N:
|
|
383
383
|
wall['Ff,Rk ext'] = self._data_connecteurs['Extérieur']['Ff,Rk']
|
|
384
384
|
else:
|
|
385
385
|
wall['Ff,Rk ext'] = Ff_Rk_ext * si.N
|
|
386
|
-
if Kser_ext is None:
|
|
386
|
+
if Kser_ext is None or Kser_ext == 0 * si.N/si.mm:
|
|
387
387
|
wall['Kser ext'] = self._data_connecteurs['Extérieur']['Kser']
|
|
388
388
|
else:
|
|
389
389
|
wall['Kser ext'] = Kser_ext * si.N / si.mm
|
|
@@ -391,11 +391,11 @@ class MOB(Batiment):
|
|
|
391
391
|
if couturage_int_rive:
|
|
392
392
|
wall['Couturage int. rive'] = couturage_int_rive * si.mm
|
|
393
393
|
wall['Couturage int. intermédiaire'] = couturage_int_inter * si.mm
|
|
394
|
-
if Ff_Rk_int is None:
|
|
394
|
+
if Ff_Rk_int is None or Ff_Rk_int == 0 * si.N:
|
|
395
395
|
wall['Ff,Rk int'] = self._data_connecteurs['Intérieur']['Ff,Rk']
|
|
396
396
|
else:
|
|
397
397
|
wall['Ff,Rk int'] = Ff_Rk_int * si.N
|
|
398
|
-
if Kser_int is None:
|
|
398
|
+
if Kser_int is None or Kser_int == 0 * si.N/si.mm:
|
|
399
399
|
wall['Kser int'] = self._data_connecteurs['Intérieur']['Kser']
|
|
400
400
|
else:
|
|
401
401
|
wall['Kser int'] = Kser_int * si.N / si.mm
|
|
@@ -529,6 +529,10 @@ class MOB(Batiment):
|
|
|
529
529
|
k_ser_r (float): raideur du panneau.
|
|
530
530
|
k_ser_i (float): raideur du panneau.
|
|
531
531
|
"""
|
|
532
|
+
if b == 0 * si.mm or h == 0 * si.mm:
|
|
533
|
+
raise ValueError("Dimensions de panneau invalides: b et h doivent être non nulles.")
|
|
534
|
+
if k_ser_r == 0 * si.N / si.mm**2:
|
|
535
|
+
raise ValueError("Raideur linéique de rive nulle (k_ser_r): vérifier Kser et les couturages de rive.")
|
|
532
536
|
K_p = (2 / (k_ser_r * (b + h/3) + k_ser_i * h/6) + 2*h**2 / (k_ser_r * b**2 * (h + b/3)))**-1
|
|
533
537
|
return K_p
|
|
534
538
|
|
|
@@ -556,11 +560,11 @@ class MOB(Batiment):
|
|
|
556
560
|
for sys_name, sys_wall in sys.items():
|
|
557
561
|
h_sys = sys_wall['Hauteur du système de mur']
|
|
558
562
|
for wall_name, wall in sys_wall['Murs'].items():
|
|
559
|
-
if wall.get('Kser ext', None):
|
|
563
|
+
if wall.get('Kser ext', None) is not None:
|
|
560
564
|
kser_ext = wall['Kser ext']
|
|
561
565
|
couturage_ext_rive = wall['Couturage ext. rive']
|
|
562
566
|
couturage_ext_inter = wall['Couturage ext. intermédiaire']
|
|
563
|
-
if wall.get('Kser int', None):
|
|
567
|
+
if wall.get('Kser int', None) is not None:
|
|
564
568
|
kser_int = wall['Kser int']
|
|
565
569
|
couturage_int_rive = wall['Couturage int. rive']
|
|
566
570
|
couturage_int_inter = wall['Couturage int. intermédiaire']
|
|
@@ -867,6 +871,16 @@ class MOB(Batiment):
|
|
|
867
871
|
long_wall = self.data_walls[wall_name]['Longueur']
|
|
868
872
|
nb_anc_lb = floor(long_wall / e_anc_lb)
|
|
869
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
|
+
)
|
|
870
884
|
Ft_Rd_wood = (Ft_Rk_wood * K_mod_montant / Assemblage.GAMMA_M_ASS)
|
|
871
885
|
Fv_Rd_anc_lb = (Fv_Rk_anc_lb * K_mod_lb / Assemblage.GAMMA_M_ASS) * nb_anc_lb
|
|
872
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.
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv
RENAMED
|
File without changes
|
{ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv
RENAMED
|
File without changes
|
{ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv
RENAMED
|
File without changes
|
|
File without changes
|
{ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv
RENAMED
|
File without changes
|
{ourocode-2.1.4 → ourocode-2.1.6}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|