ourocode 1.8.1__tar.gz → 1.9.0__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-1.8.1/ourocode.egg-info → ourocode-1.9.0}/PKG-INFO +1 -1
- ourocode-1.9.0/ourocode/__version__.py +1 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/A0_Projet.py +147 -59
- {ourocode-1.8.1 → ourocode-1.9.0/ourocode.egg-info}/PKG-INFO +1 -1
- {ourocode-1.8.1 → ourocode-1.9.0}/pyproject.toml +1 -1
- ourocode-1.8.1/ourocode/__version__.py +0 -1
- {ourocode-1.8.1 → ourocode-1.9.0}/LICENSE +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/MANIFEST.in +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/README.md +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/__init__.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_acier.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_beton.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_bois.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/caracteristique_meca_panel.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/carte_action_region.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/coeff_psy.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/exploitation.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/gammaM.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/kdef.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/kfi.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/kmod.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/limite_fleche.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/qualite_acier.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/C90_def.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/CNC2M_4.3.3_tab15.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/CNC2M_4.3.3_tab16.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/EN1993-1-8_fig6_11.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/Kv_def.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/screenshot/sign_convention.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/section_boulon.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/categorie_importance.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/categorie_importance_ns.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/classe_sol.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/spectre_eleastique_h_type1.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/sismique/spectre_eleastique_h_type2.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_1_versant.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cp_toiture_isolee_2_versants.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_mur_verticaux.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_mur_verticaux.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants_90_degres.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_terrasse.csv +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_terrasse.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Ffr.png +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC0_Combinaison.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC1_Neige.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC1_Vent.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC3_Assemblage.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC3_Element_droit.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC3_Feu.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_Assemblage.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_CVT.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_Element_droit.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC5_Feu.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/EC8_Sismique.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/__init__.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode/eurocode/objet.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/SOURCES.txt +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/dependency_links.txt +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/requires.txt +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/ourocode.egg-info/top_level.txt +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/setup.cfg +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_A0_Projet.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC0_Combinaison.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC1_Neige.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC3_Assemblage.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC3_Element_droit.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_Assemblage.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_CVT.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_Element_droit.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC5_Feu.py +0 -0
- {ourocode-1.8.1 → ourocode-1.9.0}/tests/test_EC8_Sismique.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ourocode
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.9.0
|
|
4
4
|
Summary: Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée.
|
|
5
5
|
Author-email: Anthony PARISOT <contact@ourea-structure.fr>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.9.0"
|
|
@@ -141,7 +141,7 @@ class Model_generator(Projet):
|
|
|
141
141
|
"sections": {},
|
|
142
142
|
"materials": {},
|
|
143
143
|
"members": {},
|
|
144
|
-
"supports": {},
|
|
144
|
+
"supports": {"classic": {}, "spring": {}},
|
|
145
145
|
"loads": {},
|
|
146
146
|
}
|
|
147
147
|
self._model = None
|
|
@@ -692,8 +692,8 @@ class Model_generator(Projet):
|
|
|
692
692
|
RZ (bool, optional): Blocage en translation de l'axe X global, si oui alors True.
|
|
693
693
|
l_appuis (int, optional): longueur d'appuis sur la poutre en mm. Defaults to 0.
|
|
694
694
|
"""
|
|
695
|
-
support_id = "S" + str(len(self._data["supports"]) + 1)
|
|
696
|
-
self._data["supports"][support_id] = {
|
|
695
|
+
support_id = "S" + str(len(self._data["supports"]["classic"]) + 1)
|
|
696
|
+
self._data["supports"]["classic"][support_id] = {
|
|
697
697
|
"Noeud": node_id,
|
|
698
698
|
"DX": DX,
|
|
699
699
|
"DY": DY,
|
|
@@ -703,46 +703,82 @@ class Model_generator(Projet):
|
|
|
703
703
|
"RZ": RZ,
|
|
704
704
|
"Longueur d'appui": l_appuis,
|
|
705
705
|
}
|
|
706
|
-
return self._data["supports"][support_id]
|
|
706
|
+
return self._data["supports"]["classic"][support_id]
|
|
707
|
+
|
|
708
|
+
def add_support_spring(self,
|
|
709
|
+
node_id: str,
|
|
710
|
+
dof: str = ("DX", "DY", "DZ", "RX", "RY", "RZ"),
|
|
711
|
+
stiffness: si.kN/si.m = 0,
|
|
712
|
+
limit_direction: str = ("Aucune limitation", "Tension uniquement", "Compression uniquement")
|
|
713
|
+
):
|
|
714
|
+
"""Ajoute un appuis avec une raideur spécifique dans une direction donnée
|
|
715
|
+
|
|
716
|
+
Args:
|
|
717
|
+
node_id (str): Numéro du noeud sur lequel positionner l'appuis.
|
|
718
|
+
stiffness (si.kN): Raideur dans la direction donné en kN/m pour DX, DY, DZ et en N/radians pour RX, RY, RZ
|
|
719
|
+
dof (str, optional): Degrée de liberté ou appliquer la raideur. Defaults to "DX".
|
|
720
|
+
limit_direction (str, optional): Limitation du sens d'action de la raideur. Defaults to "Aucune limitation".
|
|
721
|
+
"""
|
|
722
|
+
support_id = "SSpring" + str(len(self._data["supports"]["spring"]) + 1)
|
|
723
|
+
self._data["supports"]["spring"][support_id] = {
|
|
724
|
+
"Noeud": node_id,
|
|
725
|
+
"Dof": dof,
|
|
726
|
+
"Raideur": stiffness * si.kN/si.m,
|
|
727
|
+
"Limite de direction": limit_direction,
|
|
728
|
+
}
|
|
729
|
+
return self._data["supports"]["spring"][support_id]
|
|
707
730
|
|
|
708
731
|
def create_supports_by_list(self, list_supports: list):
|
|
709
|
-
"""Ajoute les
|
|
732
|
+
"""Ajoute les support d'une liste pré-définit.
|
|
710
733
|
|
|
711
734
|
Args:
|
|
712
|
-
list_supports (list): liste de
|
|
735
|
+
list_supports (list): liste de support.
|
|
713
736
|
"""
|
|
714
737
|
for support in list_supports:
|
|
715
738
|
self.add_support(*support)
|
|
716
739
|
|
|
717
740
|
def del_support(self, support_id: str):
|
|
718
|
-
"""Supprime un appui
|
|
741
|
+
"""Supprime un appui par son id
|
|
719
742
|
|
|
720
743
|
Args:
|
|
721
744
|
support_id (int): id de l'appuis à supprimer.
|
|
722
745
|
"""
|
|
723
|
-
return f"L'appui à été supprimé: {self._data["supports"].pop(support_id)}"
|
|
746
|
+
return f"L'appui à été supprimé: {self._data["supports"]["classic"].pop(support_id)}"
|
|
724
747
|
|
|
725
|
-
def _add_support_to_model(self, support_id: str):
|
|
748
|
+
def _add_support_to_model(self, support_id: str, support_type: str):
|
|
726
749
|
"""Ajoute un appui au model MEF
|
|
727
750
|
|
|
728
751
|
Args:
|
|
729
752
|
support_id (str): id de l'appui à ajouter
|
|
753
|
+
support_type (str): type de support classic or spring
|
|
730
754
|
"""
|
|
731
|
-
support = self._data["supports"][support_id
|
|
732
|
-
|
|
733
|
-
support
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
755
|
+
support = self._data["supports"][support_type].get(support_id, None)
|
|
756
|
+
if support is None:
|
|
757
|
+
raise ValueError(f"Appui {support_id} non trouvé. Le support n'a pas été ajouter au modèle.")
|
|
758
|
+
if support_type == "classic":
|
|
759
|
+
self._model.def_support(
|
|
760
|
+
support["Noeud"],
|
|
761
|
+
support["DX"],
|
|
762
|
+
support["DY"],
|
|
763
|
+
support["DZ"],
|
|
764
|
+
support["RX"],
|
|
765
|
+
support["RY"],
|
|
766
|
+
support["RZ"],
|
|
767
|
+
)
|
|
768
|
+
else:
|
|
769
|
+
limit_val = {"Aucune limitation": None, "Tension uniquement": "+", "Compression uniquement": "-"}
|
|
770
|
+
self._model.def_support_spring(
|
|
771
|
+
support["Noeud"],
|
|
772
|
+
support["Dof"],
|
|
773
|
+
support["Raideur"].value * 10**3,
|
|
774
|
+
limit_val[support["Limite de direction"]],
|
|
775
|
+
)
|
|
741
776
|
return support_id
|
|
742
777
|
|
|
743
778
|
def _add_supports_to_model(self):
|
|
744
|
-
for
|
|
745
|
-
|
|
779
|
+
for support_type, supports in self._data["supports"].items():
|
|
780
|
+
for support_id, support in supports.items():
|
|
781
|
+
self._add_support_to_model(support_id, support_type)
|
|
746
782
|
return "Appuis ajoutés"
|
|
747
783
|
|
|
748
784
|
def get_all_supports(self) -> dict:
|
|
@@ -1035,7 +1071,10 @@ class Wood_beam_model(Model_generator):
|
|
|
1035
1071
|
d_appuis = longueur / (nbr_appuis - 1)
|
|
1036
1072
|
for i in range(nbr_appuis):
|
|
1037
1073
|
node = self.add_node(int(float(i * d_appuis * mt.cos(mt.radians(inclinaison)))), int(float(i * d_appuis * mt.sin(mt.radians(inclinaison)))), 0)
|
|
1038
|
-
|
|
1074
|
+
if not i:
|
|
1075
|
+
self.add_support(node, DX=True, DY=True, DZ=True, RX=True, RY=False, RZ=False, l_appuis=l_appuis)
|
|
1076
|
+
else:
|
|
1077
|
+
self.add_support(node, DX=False, DY=True, DZ=True, RX=True, RY=False, RZ=False, l_appuis=l_appuis)
|
|
1039
1078
|
|
|
1040
1079
|
for i in range(nbr_appuis-1):
|
|
1041
1080
|
self.add_member(f"N{i+1}", f"N{i+2}", material, section, poids_propre, rotation=devers, tension_only=False, compression_only=False)
|
|
@@ -1313,13 +1352,15 @@ class Model_result(Projet):
|
|
|
1313
1352
|
"Mz", n_points=n_points, combo_name=combination
|
|
1314
1353
|
)
|
|
1315
1354
|
|
|
1316
|
-
def get_min_max_internal_force(self, member_id: str, combination: str) ->
|
|
1355
|
+
def get_min_max_internal_force(self, member_id: str, combination: str|list) -> dict:
|
|
1317
1356
|
"""Retourne le maximum et minimum des efforts internes d'une membrure donnée.
|
|
1318
1357
|
|
|
1319
1358
|
Args:
|
|
1320
1359
|
member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
|
|
1321
|
-
|
|
1322
|
-
combination (str): Le nom de la combinaison à récupérer
|
|
1360
|
+
ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
|
|
1361
|
+
combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
|
|
1362
|
+
ex: ["ELU_STR", "ELU_ACC"] dans ce cas le résultat récupéré est
|
|
1363
|
+
le maximum/minimum de toute les combinaisons inclus dans ces tags.
|
|
1323
1364
|
"""
|
|
1324
1365
|
dict_internal_forces = {}
|
|
1325
1366
|
for type in ("Nx", "Vy", "Vz", "Mx", "My", "Mz"):
|
|
@@ -1330,75 +1371,98 @@ class Model_result(Projet):
|
|
|
1330
1371
|
member_id = [member_id]
|
|
1331
1372
|
max_value = 0
|
|
1332
1373
|
min_value = 0
|
|
1374
|
+
combi_max = None
|
|
1375
|
+
combi_min = None
|
|
1333
1376
|
for member in member_id:
|
|
1334
1377
|
if member not in self._model_generator._model.members:
|
|
1335
1378
|
raise ValueError(f"La membrure {member} n'est pas dans le model MEF")
|
|
1336
1379
|
|
|
1337
1380
|
if type == "Nx":
|
|
1338
1381
|
max = self._model_generator._model.members[member].max_axial(
|
|
1339
|
-
|
|
1382
|
+
combo_tags=combination
|
|
1340
1383
|
)
|
|
1341
1384
|
min = self._model_generator._model.members[member].min_axial(
|
|
1342
|
-
|
|
1385
|
+
combo_tags=combination
|
|
1343
1386
|
)
|
|
1344
1387
|
elif type == "Vy":
|
|
1345
1388
|
max = self._model_generator._model.members[member].max_shear(
|
|
1346
|
-
"Fy",
|
|
1389
|
+
"Fy", combo_tags=combination
|
|
1347
1390
|
)
|
|
1348
1391
|
min = self._model_generator._model.members[member].min_shear(
|
|
1349
|
-
"Fy",
|
|
1392
|
+
"Fy", combo_tags=combination
|
|
1350
1393
|
)
|
|
1351
1394
|
elif type == "Vz":
|
|
1352
1395
|
max = self._model_generator._model.members[member].max_shear(
|
|
1353
|
-
"Fz",
|
|
1396
|
+
"Fz", combo_tags=combination
|
|
1354
1397
|
)
|
|
1355
1398
|
min = self._model_generator._model.members[member].min_shear(
|
|
1356
|
-
"Fz",
|
|
1399
|
+
"Fz", combo_tags=combination
|
|
1357
1400
|
)
|
|
1358
1401
|
elif type == "Mx":
|
|
1359
1402
|
max = self._model_generator._model.members[member].max_torque(
|
|
1360
|
-
|
|
1403
|
+
combo_tags=combination
|
|
1361
1404
|
)
|
|
1362
1405
|
min = self._model_generator._model.members[member].min_torque(
|
|
1363
|
-
|
|
1406
|
+
combo_tags=combination
|
|
1364
1407
|
)
|
|
1365
1408
|
elif type == "My":
|
|
1366
1409
|
max = self._model_generator._model.members[member].max_moment(
|
|
1367
|
-
"My",
|
|
1410
|
+
"My", combo_tags=combination
|
|
1368
1411
|
)
|
|
1369
1412
|
min = self._model_generator._model.members[member].min_moment(
|
|
1370
|
-
"My",
|
|
1413
|
+
"My", combo_tags=combination
|
|
1371
1414
|
)
|
|
1372
1415
|
elif type == "Mz":
|
|
1373
1416
|
max = self._model_generator._model.members[member].max_moment(
|
|
1374
|
-
"Mz",
|
|
1417
|
+
"Mz", combo_tags=combination
|
|
1375
1418
|
)
|
|
1376
1419
|
min = self._model_generator._model.members[member].min_moment(
|
|
1377
|
-
"Mz",
|
|
1420
|
+
"Mz", combo_tags=combination
|
|
1378
1421
|
)
|
|
1379
|
-
if max
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1422
|
+
if isinstance(max, tuple):
|
|
1423
|
+
if max[0] > max_value:
|
|
1424
|
+
max_value = max[0]
|
|
1425
|
+
combi_max = max[1]
|
|
1426
|
+
if min[0] < min_value:
|
|
1427
|
+
min_value = min[0]
|
|
1428
|
+
combi_min = min[1]
|
|
1429
|
+
else:
|
|
1430
|
+
if max > max_value:
|
|
1431
|
+
max_value = max
|
|
1432
|
+
combi_max = combination
|
|
1433
|
+
if min < min_value:
|
|
1434
|
+
min_value = min
|
|
1435
|
+
combi_min = combination
|
|
1383
1436
|
|
|
1384
1437
|
if "M" in type:
|
|
1385
1438
|
si_unit = si.N * si.mm
|
|
1386
1439
|
else:
|
|
1387
1440
|
si_unit = si.N
|
|
1388
|
-
dict_internal_forces[type] = {"Min": min_value * si_unit, "Max": max_value * si_unit}
|
|
1441
|
+
dict_internal_forces[type] = {"Min": (min_value * si_unit, combi_min), "Max": (max_value * si_unit, combi_max)}
|
|
1389
1442
|
return dict_internal_forces
|
|
1390
1443
|
|
|
1391
|
-
def get_absolute_internal_force(self, member_id: str, combination: str, type: str = ("Nx", "Vy", "Vz", "Mx", "My", "Mz")):
|
|
1444
|
+
def get_absolute_internal_force(self, member_id: str, combination: str|list, type: str = ("Nx", "Vy", "Vz", "Mx", "My", "Mz"), get_combo_name: bool = ("False", "True")):
|
|
1392
1445
|
"""Retourne la valeur de d'effort absolue pour le type d'effort donné.
|
|
1393
1446
|
|
|
1394
1447
|
Args:
|
|
1395
1448
|
member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
|
|
1396
1449
|
ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
|
|
1397
|
-
combination (str): Le nom de la combinaison à récupérer
|
|
1450
|
+
combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
|
|
1451
|
+
ex: ["ELU_STR", "ELU_ACC"] dans ce cas le résultat récupéré est
|
|
1452
|
+
le maximum/minimum de toute les combinaisons inclus dans ces tags.
|
|
1398
1453
|
type (str): Le type d'effort interne à retourner. Defaults to ("Nx", "Vy", "Vz", "Mx", "My", "Mz").
|
|
1454
|
+
get_combo_name (bool): Si True, retourne également le nom de la combinaison associée à la valeur. Defaults to False.
|
|
1455
|
+
|
|
1399
1456
|
"""
|
|
1400
1457
|
ei = self.get_min_max_internal_force(member_id, combination)
|
|
1401
|
-
|
|
1458
|
+
max = "Max"
|
|
1459
|
+
if abs(ei[type]["Min"][0]) > ei[type]["Max"][0]:
|
|
1460
|
+
max = "Min"
|
|
1461
|
+
if get_combo_name:
|
|
1462
|
+
return {"Effort": abs(ei[type][max][0]), "Combinaison": ei[type][max][1]}
|
|
1463
|
+
else:
|
|
1464
|
+
return abs(ei[type][max][0])
|
|
1465
|
+
|
|
1402
1466
|
|
|
1403
1467
|
def show_internal_force_of_member(
|
|
1404
1468
|
self,
|
|
@@ -1414,7 +1478,7 @@ class Model_result(Projet):
|
|
|
1414
1478
|
Args:
|
|
1415
1479
|
member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
|
|
1416
1480
|
ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
|
|
1417
|
-
combination (str): Le nom de la combinaison à récupérer
|
|
1481
|
+
combination (str): Le nom de la combinaison à récupérer.
|
|
1418
1482
|
type (str): Le type d'effort interne à retourner. Defaults to ("Nx", "Vy", "Vz", "Mx", "My", "Mz").
|
|
1419
1483
|
n_points (int, optional): le nombre de valeur à retrouner le long de la membrure. Defaults to 20.
|
|
1420
1484
|
screenshot (bool, optional): Définit si l'on souhaite enregistrer un screenshot du graph, si oui alors True. Defaults to False
|
|
@@ -1489,13 +1553,15 @@ class Model_result(Projet):
|
|
|
1489
1553
|
direction, n_points=n_points, combo_name=combination
|
|
1490
1554
|
)
|
|
1491
1555
|
|
|
1492
|
-
def get_min_max_deflection(self, member_id: str, combination: str) -> np.array:
|
|
1556
|
+
def get_min_max_deflection(self, member_id: str, combination: str|list) -> np.array:
|
|
1493
1557
|
"""Retourne le maximum et minimum des efforts internes d'une membrure donnée.
|
|
1494
1558
|
|
|
1495
1559
|
Args:
|
|
1496
1560
|
member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
|
|
1497
1561
|
ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
|
|
1498
|
-
combination (str): Le nom de la combinaison à récupérer
|
|
1562
|
+
combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
|
|
1563
|
+
ex: ["ELS_C", "ELS_QP" "W_inst_Q", "W_net_fin"] dans ce cas le résultat récupéré est
|
|
1564
|
+
le maximum/minimum de toute les combinaisons inclus dans ces tags.
|
|
1499
1565
|
"""
|
|
1500
1566
|
dict_deflection = {}
|
|
1501
1567
|
for type in ("dx", "dy", "dz"):
|
|
@@ -1506,34 +1572,56 @@ class Model_result(Projet):
|
|
|
1506
1572
|
member_id = [member_id]
|
|
1507
1573
|
max_value = 0
|
|
1508
1574
|
min_value = 0
|
|
1575
|
+
combi_max = None
|
|
1576
|
+
combi_min = None
|
|
1509
1577
|
for member in member_id:
|
|
1510
1578
|
if member not in self._model_generator._model.members:
|
|
1511
1579
|
raise ValueError(f"La membrure {member} n'est pas dans le model MEF")
|
|
1512
1580
|
max = self._model_generator._model.members[member].max_deflection(
|
|
1513
|
-
type,
|
|
1581
|
+
type, combo_tags=combination
|
|
1514
1582
|
)
|
|
1515
1583
|
|
|
1516
1584
|
min = self._model_generator._model.members[member].min_deflection(
|
|
1517
|
-
type,
|
|
1585
|
+
type, combo_tags=combination
|
|
1518
1586
|
)
|
|
1519
|
-
if max
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1587
|
+
if isinstance(max, tuple):
|
|
1588
|
+
if max[0] > max_value:
|
|
1589
|
+
max_value = max[0]
|
|
1590
|
+
combi_max = max[1]
|
|
1591
|
+
if min[0] < min_value:
|
|
1592
|
+
min_value = min[0]
|
|
1593
|
+
combi_min = min[1]
|
|
1594
|
+
else:
|
|
1595
|
+
if max > max_value:
|
|
1596
|
+
max_value = max
|
|
1597
|
+
combi_max = combination
|
|
1598
|
+
if min < min_value:
|
|
1599
|
+
min_value = min
|
|
1600
|
+
combi_min = combination
|
|
1601
|
+
|
|
1602
|
+
dict_deflection[type] = {"Min": (min_value * si.mm, combi_min), "Max": (max_value * si.mm, combi_max)}
|
|
1524
1603
|
return dict_deflection
|
|
1525
1604
|
|
|
1526
|
-
def get_absolute_max_deflection(self, member_id: str, combination: str, direction: str = ("dx", "dy", "dz")):
|
|
1605
|
+
def get_absolute_max_deflection(self, member_id: str, combination: str|list, direction: str = ("dx", "dy", "dz"), get_combo_name: bool=("False", "True")):
|
|
1527
1606
|
"""Retourne la valeur de déplacement absolue pour la direction de la flèche donnée.
|
|
1528
1607
|
|
|
1529
1608
|
Args:
|
|
1530
1609
|
member_id (str): Le nom de la membrure à analyser. On peut rentrer plusieurs membrures en créant une liste de membrures,
|
|
1531
1610
|
ex: ["M1", "M2", "M3"] dans le cas par exemple d'une barre continue.
|
|
1532
|
-
combination (str): Le nom de la combinaison à récupérer
|
|
1611
|
+
combination (str): Le nom de la combinaison à récupérer. On peut également rentrer un ou des tags de combinaisons,
|
|
1612
|
+
ex: ["ELS_QP" "W_inst_Q", "W_net_fin"] dans ce cas le résultat récupéré est
|
|
1613
|
+
le maximum/minimum de toute les combinaisons inclus dans ces tags.
|
|
1533
1614
|
direction (str): La direction locale à retourner. Defaults to ("dx", "dy", "dz").
|
|
1615
|
+
get_combo_name (bool): Si True, retourne également le nom de la combinaison associée à la valeur. Defaults to False.
|
|
1534
1616
|
"""
|
|
1535
1617
|
deflection = self.get_min_max_deflection(member_id, combination)
|
|
1536
|
-
|
|
1618
|
+
max = "Max"
|
|
1619
|
+
if abs(deflection[direction]["Min"][0]) > deflection[direction]["Max"][0]:
|
|
1620
|
+
max = "Min"
|
|
1621
|
+
if get_combo_name:
|
|
1622
|
+
return {"Flèche": abs(deflection[direction][max][0]), "Combinaison": deflection[direction][max][1]}
|
|
1623
|
+
else:
|
|
1624
|
+
return abs(deflection[direction][max][0])
|
|
1537
1625
|
|
|
1538
1626
|
|
|
1539
1627
|
def show_deflection_of_member(
|
|
@@ -1642,7 +1730,7 @@ class Model_result(Projet):
|
|
|
1642
1730
|
)
|
|
1643
1731
|
else:
|
|
1644
1732
|
interaction = False
|
|
1645
|
-
renderer.screenshot(filepath, interact=interaction)
|
|
1733
|
+
renderer.screenshot(filepath, interact=interaction, reset_camera=True)
|
|
1646
1734
|
return filepath
|
|
1647
1735
|
else:
|
|
1648
1736
|
renderer.render_model()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ourocode
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.9.0
|
|
4
4
|
Summary: Ceci est un catalogue de fonction permettant une utilisation rapide pour la réalisation de note de calcul personnalisée.
|
|
5
5
|
Author-email: Anthony PARISOT <contact@ourea-structure.fr>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -8,7 +8,7 @@ include = ["ourocode*"]
|
|
|
8
8
|
|
|
9
9
|
[project]
|
|
10
10
|
name = "ourocode"
|
|
11
|
-
version = "1.
|
|
11
|
+
version = "1.9.0"
|
|
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"}]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.8.1"
|
|
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-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_0_degres.csv
RENAMED
|
File without changes
|
{ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_180_degres.csv
RENAMED
|
File without changes
|
{ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_1_versant_90_degres.csv
RENAMED
|
File without changes
|
|
File without changes
|
{ourocode-1.8.1 → ourocode-1.9.0}/ourocode/data/vent/vent_Cpe_toiture_2_versants_0_degres.csv
RENAMED
|
File without changes
|
{ourocode-1.8.1 → ourocode-1.9.0}/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
|