Aller au contenu

A0_Projet — Projet de calcul

Module de définition du projet de calcul (données générales).

projet

Objet

Bases: SerializationMixin, DataLoaderMixin, MathUtilsMixin, SyntheseMixin

Classe de base du package ourocode.

Cette classe fournit les fonctionnalités essentielles pour : - La sérialisation/désérialisation des objets avec gestion des unités physiques (via SerializationMixin) - L'accès aux données normatives CSV/JSON (via DataLoaderMixin) - Les opérations mathématiques et de conversion d'unités (via MathUtilsMixin) - La synthèse des taux de travail (via SyntheseMixin)

Toutes les classes du package ourocode héritent de cette classe.

objet property

objet

Retourne l'objet lui même.

set_value

set_value(value: float | int | str = None, unit: str = MathUtilsMixin._SET_VALUE_UNITS)

Retourne une valeur typee avec une unite physique optionnelle.

Equivalent inverse de get_value : permet a l'utilisateur de saisir une valeur numerique brute et de l'encapsuler dans un objet Physical (forallpeople) avec l'unite choisie parmi la liste definie dans _PHYSICAL_UNITS (m, mm, cm, km, m2, N, kN, daN, N.m, kN/m, Pa, MPa, etc.).

Parameters:

Name Type Description Default
value float | int | str

la valeur numerique a encapsuler. Les chaines numeriques ("5", "5,3") sont converties.

None
unit str

unite cible. La valeur speciale "Aucune" (par defaut) retourne la valeur brute sans conversion.

_SET_VALUE_UNITS

Returns:

Type Description
  • Physical si une unite valide est specifiee (ex: 5 * si.m)
  • valeur brute (int/float/str) si unit == "Aucune" ou unite inconnue
Exemple

obj.set_value(5, unit="m") 5.000 m obj.set_value("5,3", unit="kN") 5.300 kN obj.set_value(42, unit="Aucune") 42

get_value

get_value(value: dict | list | str, index: int = None, key: str = None, get_keys: bool = ('False', 'True'))

Extrait et retourne une valeur depuis une structure de données complexe.

Cette méthode utilitaire permet de naviguer dans les dictionnaires, listes, ou chaînes JSON pour extraire des valeurs spécifiques.

Parameters:

Name Type Description Default
value dict | list | str

La structure de données source.

required
index int

Index à extraire dans une liste Python. Note : sous Python, le premier élément est à l'index 0.

None
key str

Clé à extraire d'un dictionnaire Python, ou clé JSON à extraire d'une chaîne.

None
get_keys bool

Si True, retourne la liste des clés d'un dictionnaire au lieu d'une valeur.

('False', 'True')

Returns:

Type Description

La valeur extraite selon les critères spécifiés.

Exemple

obj.get_value({"a": 1, "b": 2}, key="a") 1 obj.get_value([10, 20, 30], index=1) 20 obj.get_value({"x": 1, "y": 2}, get_keys=True) ["x", "y"]

Projet

Projet(ingenieur: str = None, num_project: str = None, name: str = None, adresse: str = None, code_INSEE: int = None, pays: str = PAYS, alt: m = 0, **kwargs)

Bases: Objet

Classe définissant les informations générales d'un projet de structure.

Cette classe est la racine de la hiérarchie des objets ourocode. Elle contient les informations administratives et géographiques du projet, nécessaires pour l'application des annexes nationales françaises des Eurocodes.

Initialise un projet avec ses informations générales.

Cette classe définit le contexte du projet, indispensable pour l'application correcte des annexes nationales françaises des Eurocodes. Tous les objets de calcul (éléments de structure, charges, etc.) héritent indirectement de cette classe.

Parameters:

Name Type Description Default
ingenieur str

Nom de l'ingénieur responsable. Defaults to None.

None
num_project str

Numéro de référence du projet. Defaults to None.

None
name str

Nom ou désignation du projet. Defaults to None.

None
adresse str

Adresse géographique du chantier. Defaults to None.

None
code_INSEE int

Code INSEE à 5 chiffres du département ou de la commune pour les données climatiques. Defaults to None.

None
pays str

Pays où se situe le projet. Defaults to "France". Attention : ce package intègre uniquement les annexes nationales françaises des Eurocodes.

PAYS
alt m

Altitude du projet en mètres, utilisée pour le calcul de la neige et du vent. Defaults to 0.

0
**kwargs

Arguments supplémentaires ajoutés dynamiquement.

{}

batiment

Projet

Projet(ingenieur: str = None, num_project: str = None, name: str = None, adresse: str = None, code_INSEE: int = None, pays: str = PAYS, alt: m = 0, **kwargs)

Bases: Objet

Classe définissant les informations générales d'un projet de structure.

Cette classe est la racine de la hiérarchie des objets ourocode. Elle contient les informations administratives et géographiques du projet, nécessaires pour l'application des annexes nationales françaises des Eurocodes.

Initialise un projet avec ses informations générales.

Cette classe définit le contexte du projet, indispensable pour l'application correcte des annexes nationales françaises des Eurocodes. Tous les objets de calcul (éléments de structure, charges, etc.) héritent indirectement de cette classe.

Parameters:

Name Type Description Default
ingenieur str

Nom de l'ingénieur responsable. Defaults to None.

None
num_project str

Numéro de référence du projet. Defaults to None.

None
name str

Nom ou désignation du projet. Defaults to None.

None
adresse str

Adresse géographique du chantier. Defaults to None.

None
code_INSEE int

Code INSEE à 5 chiffres du département ou de la commune pour les données climatiques. Defaults to None.

None
pays str

Pays où se situe le projet. Defaults to "France". Attention : ce package intègre uniquement les annexes nationales françaises des Eurocodes.

PAYS
alt m

Altitude du projet en mètres, utilisée pour le calcul de la neige et du vent. Defaults to 0.

0
**kwargs

Arguments supplémentaires ajoutés dynamiquement.

{}

Batiment

Batiment(h_bat: m, d_bat: m, b_bat: m, alpha_toit: float, alpha_toit2: float = 0, *args, **kwargs)

Bases: Projet

Classe définissant la géométrie d'un bâtiment pour les calculs de structure.

Cette classe décrit les dimensions principales du bâtiment et les caractéristiques de sa toiture, nécessaires pour le calcul des charges climatiques (neige, vent) et sismiques.

Attributs de classe

ETAGE (tuple): Liste des niveaux courants (RDC à Toiture).

Initialise les dimensions du bâtiment.

Parameters:

Name Type Description Default
h_bat m

Hauteur totale du bâtiment en mètres, mesurée depuis le soubassement rigide ou les fondations (référence sismique).

required
d_bat m

Largeur du bâtiment en mètres (dimension perpendiculaire au vent dominant pour le calcul du vent).

required
b_bat m

Longueur du bâtiment en mètres.

required
alpha_toit float

Pente du premier versant de toiture en degrés. 0° pour un toit plat, valeur positive pour un versant.

required
alpha_toit2 float

Pente du second versant pour les toits à deux pans (0° si toit à un seul versant ou plat). Defaults to 0.

0
*args

Arguments positionnels transmis à la classe parent Projet.

()
**kwargs

Arguments nommés transmis à la classe parent Projet (ingenieur, code_INSEE, alt, etc.).

{}

model_generator

Projet

Projet(ingenieur: str = None, num_project: str = None, name: str = None, adresse: str = None, code_INSEE: int = None, pays: str = PAYS, alt: m = 0, **kwargs)

Bases: Objet

Classe définissant les informations générales d'un projet de structure.

Cette classe est la racine de la hiérarchie des objets ourocode. Elle contient les informations administratives et géographiques du projet, nécessaires pour l'application des annexes nationales françaises des Eurocodes.

Initialise un projet avec ses informations générales.

Cette classe définit le contexte du projet, indispensable pour l'application correcte des annexes nationales françaises des Eurocodes. Tous les objets de calcul (éléments de structure, charges, etc.) héritent indirectement de cette classe.

Parameters:

Name Type Description Default
ingenieur str

Nom de l'ingénieur responsable. Defaults to None.

None
num_project str

Numéro de référence du projet. Defaults to None.

None
name str

Nom ou désignation du projet. Defaults to None.

None
adresse str

Adresse géographique du chantier. Defaults to None.

None
code_INSEE int

Code INSEE à 5 chiffres du département ou de la commune pour les données climatiques. Defaults to None.

None
pays str

Pays où se situe le projet. Defaults to "France". Attention : ce package intègre uniquement les annexes nationales françaises des Eurocodes.

PAYS
alt m

Altitude du projet en mètres, utilisée pour le calcul de la neige et du vent. Defaults to 0.

0
**kwargs

Arguments supplémentaires ajoutés dynamiquement.

{}

Model_generator

Model_generator(*args, **kwargs)

Bases: Projet

Générateur de modèles de calcul par éléments finis (MEF).

Cette classe permet de construire un modèle de structure complet pour le calcul par éléments finis avec Pynite. Elle gère la définition des nœuds, barres, sections, matériaux, appuis et chargements.

Le flux de travail typique est
  1. Définir les sections avec add_section
  2. Définir les matériaux avec add_material_by_class ou add_material_by_mechanical_properties
  3. Créer les nœuds avec add_node
  4. Créer les barres avec add_member
  5. Définir les appuis avec add_support ou add_support_spring
  6. Appliquer les charges avec create_dist_load et create_point_load
  7. Lancer les combinaisons via la classe Combinaison
  8. Analyser les résultats avec Model_result

Initialise un générateur de modèle MEF vide.

Parameters:

Name Type Description Default
*args

Arguments positionnels transmis à Projet.

()
**kwargs

Arguments nommés transmis à Projet.

{}

get_all_data

get_all_data() -> dict

Retourne l'ensemble des données du modèle MEF.

Returns:

Name Type Description
dict dict

Dictionnaire contenant toutes les données structurées : - "nodes": dictionnaire des nœuds - "sections": dictionnaire des sections - "materials": dictionnaire des matériaux - "members": dictionnaire des barres - "supports": dictionnaire des appuis (classiques et ressorts) - "loads": dictionnaire des chargements

export_data

export_data()

Exporte les données du modèle au format JSON via boîte de dialogue.

Ouvre une boîte de dialogue Qt pour choisir l'emplacement du fichier JSON. Le fichier contient l'intégralité des données du modèle (nœuds, barres, matériaux, sections, appuis et charges).

Note

L'export est utile pour sauvegarder un modèle ou le transférer vers une autre application.

show_sign_convention

show_sign_convention()

Affiche l'image de la convention de signe pour les efforts sur barre.

Ouvre une fenêtre affichant le schéma de la convention de signes utilisée par Pynite pour les efforts internes (efforts normaux, tranchants, moments fléchissants) et les déplacements.

Note

La convention de signe suit le repère local de chaque barre.

add_node

add_node(X: mm, Y: mm, Z: mm, comment: str = None) -> str

Ajoute un nœud au modèle MEF.

Crée un nœud dans le système de coordonnées globales (X, Y, Z). L'identifiant est généré automatiquement sous la forme "N1", "N2", etc.

Parameters:

Name Type Description Default
X mm

Coordonnée X dans le repère global, en millimètres.

required
Y mm

Coordonnée Y dans le repère global, en millimètres.

required
Z mm

Coordonnée Z dans le repère global, en millimètres.

required
comment str

Commentaire descriptif pour le nœud.

None

Returns:

Name Type Description
str str

Identifiant unique du nœud créé (ex: "N1").

Exemple

model = Model_generator() n1 = model.add_node(0, 0, 0, comment="Appui gauche") n2 = model.add_node(5000, 0, 0, comment="Appui droit")

get_node

get_node(node_id: str) -> dict

Retourne les coordonnées et informations d'un nœud.

Parameters:

Name Type Description Default
node_id str

Identifiant du nœud à récupérer (ex: "N1").

required

Returns:

Name Type Description
dict dict

Dictionnaire contenant : - "X", "Y", "Z": coordonnées avec unités (si.mm) - "Commentaire": texte descriptif (ou None)

Raises:

Type Description
KeyError

Si le nœud n'existe pas.

get_all_nodes

get_all_nodes() -> dict

Retourne l'ensemble des nœuds du modèle.

Returns:

Name Type Description
dict dict

Dictionnaire de tous les nœuds avec leurs coordonnées, indexé par les identifiants de nœuds.

add_member

add_member(node1: str, node2: str, material: str, section: str, poids_propre: bool = ('True', 'False'), rotation: float = 0, tension_only: bool = ('False', 'True'), compression_only: bool = ('False', 'True'), name: str = None, comment: str = None)

Ajoute une barre (poutre ou colonne) au modèle MEF.

Crée une barre entre deux nœuds existants, avec un matériau et une section prédéfinis. La longueur est calculée automatiquement d'après les coordonnées.

Parameters:

Name Type Description Default
node1 str

Identifiant du nœud de départ (ex: "N1").

required
node2 str

Identifiant du nœud d'arrivée (ex: "N2").

required
material str

Identifiant du matériau (créé via add_material_by_class).

required
section str

Identifiant de la section (créé via add_section).

required
poids_propre bool

Si True, génère automatiquement une charge répartie correspondant au poids propre de la barre. Defaults to True.

('True', 'False')
rotation float

Angle de rotation de la section en degrés autour de l'axe longitudinal. Defaults to 0.

0
tension_only bool

Si True, la barre travaille uniquement en traction (ex: tirant). Defaults to False.

('False', 'True')
compression_only bool

Si True, la barre travaille uniquement en compression (ex: étai). Defaults to False.

('False', 'True')
name str

Nom personnalisé de la barre (doit être unique). Si None, un identifiant automatique "M1", "M2"... est généré.

None
comment str

Commentaire descriptif pour la barre.

None

Returns:

Name Type Description
str

Identifiant unique de la barre créée.

Raises:

Type Description
KeyError

Si les nœuds, le matériau ou la section n'existent pas.

Note

Les arguments tension_only et compression_only sont mutuellement exclusifs.

get_member

get_member(member_id: str) -> dict

Retourne les informations d'une barre par son identifiant.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre à récupérer (ex: "M1").

required

Returns:

Name Type Description
dict dict

Dictionnaire contenant les propriétés de la barre : - "Noeuds": liste [node1_id, node2_id] - "Longueur": longueur calculée en mm - "Section": identifiant de la section - "Matériaux": identifiant du matériau - "Rotation": angle de rotation en degrés - "Relaxation": dictionnaire des relâchements

Raises:

Type Description
KeyError

Si la barre n'existe pas.

get_member_length

get_member_length(member_id: str) -> si.mm

Retourne la longueur d'une barre par son identifiant.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre (ex: "M1").

required

Returns:

Type Description
mm

si.mm: Longueur de la barre avec unité.

get_all_members

get_all_members() -> dict

Retourne l'ensemble des barres du modèle.

Returns:

Name Type Description
dict dict

Dictionnaire de toutes les barres, indexé par leurs identifiants.

add_material_by_class

add_material_by_class(classe: str = CLASSE_WOOD) -> str

Ajoute un matériau bois au modèle par sa classe de résistance.

Charge les caractéristiques mécaniques depuis les données normatives (caracteristique_meca_bois.csv) et crée le matériau avec : - Module de Young E (E0mean) - Module de cisaillement G (Gmoy) - Coefficient de Poisson nu (calculé) - Masse volumique rho (rhomean)

Parameters:

Name Type Description Default
classe str

Classe de résistance du bois selon l'EC5. Valeurs courantes : "C14", "C16", "C18", "C20", "C24", "C27", "C30", "D30", "D35", "D40", "D50", "D60", "D70", "GL20h", "GL24h", "GL28h", "GL32h", etc.

CLASSE_WOOD

Returns:

Name Type Description
str str

Identifiant du matériau créé (égal à la classe fournie).

Raises:

Type Description
KeyError

Si la classe n'existe pas dans la base de données.

Note

Si le matériau existe déjà, la méthode retourne simplement son identifiant sans recréer les propriétés.

add_material_by_mechanical_properties

add_material_by_mechanical_properties(name: str, E: MPa, G: MPa, nu: float, rho: float)

Ajoute un matériau défini manuellement par ses propriétés mécaniques.

Permet de créer un matériau personnalisé en spécifiant directement les caractéristiques mécaniques, utile pour les matériaux non standard ou les matériaux autres que le bois.

Parameters:

Name Type Description Default
name str

Nom unique du matériau.

required
E MPa

Module de Young (module d'élasticité longitudinal). Important : fournir E0mean, pas E0mean,fin (le facteur de fluage sera appliqué automatiquement si nécessaire par ailleurs).

required
G MPa

Module de cisaillement (module d'élasticité transversal).

required
nu float

Coefficient de Poisson (rapport des déformations transversale et longitudinale).

required
rho float

Masse volumique en kg/m³.

required

Returns:

Name Type Description
str

Identifiant du matériau créé (égal au nom fourni).

Note

Pour le bois, il est recommandé d'utiliser add_material_by_class qui garantit la cohérence avec les valeurs normatives.

get_material

get_material(material_id: str) -> dict

Retourne les propriétés d'un matériau par son identifiant.

Parameters:

Name Type Description Default
material_id str

Identifiant du matériau (ex: "C24").

required

Returns:

Name Type Description
dict dict

Dictionnaire contenant : - "classe": type de matériau (nom de classe ou "Manuel") - "E": Module de Young avec unité (si.MPa) - "G": Module de cisaillement avec unité (si.MPa) - "nu": Coefficient de Poisson - "rho": Masse volumique avec unité (si.kg/si.m**3)

get_all_materials

get_all_materials() -> dict

Retourne l'ensemble des matériaux du modèle.

Returns:

Name Type Description
dict dict

Dictionnaire de tous les matériaux, indexé par leurs identifiants.

inertie

inertie(b: mm, h: mm, section: str = LIST_SECTION)

Retourne le moment quadratique d'une section rectangulaire en mm4 avec pour argument : b ou d : Largeur ou diamètre de la poutre en mm h : Hauteur de la poutre en mm

add_section

add_section(b: mm, h: mm, J: mm ** 4, section: str = LIST_SECTION)

Ajoute une section transversale au modèle.

Crée une section rectangulaire ou circulaire avec calcul automatique de l'aire et des moments quadratiques d'inertie.

Parameters:

Name Type Description Default
b mm

Largeur de la section (ou diamètre pour section circulaire) en millimètres.

required
h mm

Hauteur de la section en millimètres. Ignoré pour les sections circulaires.

required
J mm ** 4

Module de torsion (constante de torsion) en mm⁴. Pour une section rectangulaire pleine : J ≈ k * b * h³ où k ≈ 0.33 Pour une section circulaire pleine : J = π * d⁴ / 32

required
section str

Type de section. Valeurs acceptées : - "Rectangulaire" : section rectangulaire pleine - "Circulaire" : section circulaire pleine (b = diamètre)

LIST_SECTION

Returns:

Name Type Description
str

Identifiant unique de la section créé : - "R{b}X{h}" pour une section rectangulaire (ex: "R100X200") - "C{b}" pour une section circulaire (ex: "C300")

Raises:

Type Description
ValueError

Si le type de section n'est pas reconnu.

Note

L'identifiant est généré automatiquement à partir des dimensions.

add_section_by_property

add_section_by_property(name: str, aire: mm ** 2, Iy: mm ** 4, Iz: mm ** 4, J: mm ** 4)

Ajoute une section personnalisée définie par ses propriétés mécaniques.

Permet de créer une section sans géométrie prédéfinie (IPE, HEA, etc.) en spécifiant directement l'aire et les moments d'inertie.

Parameters:

Name Type Description Default
name str

Nom unique de la section (ex: "IPE200", "HEA140").

required
aire mm ** 2

Aire de la section en mm².

required
Iy mm ** 4

Moment quadratique d'inertie autour de l'axe Y (faible inertie pour une section rectangulaire dans le logiciel). Note : Pour les sections rectangulaires, Iy = h × b³ / 12.

required
Iz mm ** 4

Moment quadratique d'inertie autour de l'axe Z (forte inertie pour une section rectangulaire dans le logiciel). Note : Pour les sections rectangulaires, Iz = b × h³ / 12.

required
J mm ** 4

Module de torsion (constante de torsion) en mm⁴.

required

Returns:

Name Type Description
dict

Dictionnaire des propriétés de la section créée.

get_section

get_section(section_id: str) -> dict

Retourne les propriétés d'une section par son identifiant.

Parameters:

Name Type Description Default
section_id str

Identifiant de la section (ex: "R100X200", "C300", "IPE200").

required

Returns:

Name Type Description
dict dict

Dictionnaire contenant les propriétés de la section : - "Section": type de section ("Rectangulaire", "Circulaire", "Manuel") - "b", "h": dimensions pour les sections prédéfinies - "Aire": aire avec unité (si.mm2) - "Iy", "Iz": inerties avec unités (si.mm4) - "J": module de torsion avec unité (si.mm**4)

get_all_sections

get_all_sections() -> dict

Retourne l'ensemble des sections du modèle.

Returns:

Name Type Description
dict dict

Dictionnaire de toutes les sections, indexé par leurs identifiants.

add_release

add_release(member_id: str, position: str = ('start', 'end'), u: bool = ('False', 'True'), v: bool = ('False', 'True'), w: bool = ('False', 'True'), teta_x: bool = ('False', 'True'), teta_y: bool = ('False', 'True'), teta_z: bool = ('False', 'True'))

Ajoute un relâchement (libération de degrés de liberté) sur une barre.

Définit des conditions de dégagement aux extrémités d'une barre pour créer des rotules, des articulations ou des glissements partiels. La matrice de rigidité locale est modifiée en conséquence dans Pynite.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre à relâcher (ex: "M1").

required
position str

Position du relâchement sur la barre. "start" = nœud de départ (i), "end" = nœud d'arrivée (j). Defaults to "start".

('start', 'end')
u bool

Relâchement de la translation selon l'axe x local (longitudinal). Defaults to False.

('False', 'True')
v bool

Relâchement de la translation selon l'axe y local. Defaults to False.

('False', 'True')
w bool

Relâchement de la translation selon l'axe z local. Defaults to False.

('False', 'True')
teta_x bool

Relâchement de la rotation selon l'axe x local (torsion). Par défaut toujours bloquée pour éviter les modes rigides. Defaults to False.

('False', 'True')
teta_y bool

Relâchement de la rotation selon l'axe y local (moment fléchissant My). Defaults to False.

('False', 'True')
teta_z bool

Relâchement de la rotation selon l'axe z local (moment fléchissant Mz). Defaults to False.

('False', 'True')

Returns:

Name Type Description
dict

Configuration du relâchement créé pour la position spécifiée.

Note

Un relâchement complet de la rotation (teta_y=True, teta_z=True) crée une articulation parfaite. Toutes les translations relâchées créent un glisseur.

add_support

add_support(node_id: str, DX: bool = ('True', 'False'), DY: bool = ('True', 'False'), DZ: bool = ('True', 'False'), RX: bool = ('True', 'False'), RY: bool = ('True', 'False'), RZ: bool = ('True', 'False'), l_appuis: int = 0)

Ajoute un appui classique (encastrement, rotule, glisseur) sur un nœud.

Définit les conditions de déplacement (translation et rotation) bloquées ou libres en chaque nœud selon le repère global (X, Y, Z).

Parameters:

Name Type Description Default
node_id str

Identifiant du nœud d'appui (ex: "N1").

required
DX bool

Bloque la translation selon l'axe X global. True = bloqué, False = libre. Defaults to True.

('True', 'False')
DY bool

Bloque la translation selon l'axe Y global. Defaults to True.

('True', 'False')
DZ bool

Bloque la translation selon l'axe Z global. Defaults to True.

('True', 'False')
RX bool

Bloque la rotation selon l'axe X global (torsion). Defaults to True.

('True', 'False')
RY bool

Bloque la rotation selon l'axe Y global. Defaults to True.

('True', 'False')
RZ bool

Bloque la rotation selon l'axe Z global. Defaults to True.

('True', 'False')
l_appuis int

Longueur d'appui sur la poutre en mm, utilisée pour la vérification à la compression perpendiculaire. Defaults to 0.

0

Returns:

Name Type Description
dict

Configuration de l'appui créé avec son identifiant généré.

add_support_spring

add_support_spring(node_id: str, dof: str = ('DX', 'DY', 'DZ', 'RX', 'RY', 'RZ'), stiffness: kN / m = 0, limit_direction: str = ('Aucune limitation', 'Tension uniquement', 'Compression uniquement'))

Ajoute un appui élastique (ressort) sur un nœud dans une direction donnée.

Modélise un appui avec raideur finie (sol élastique, appui flexible, suspension) ou un tirant/compression unidirectionnel.

Parameters:

Name Type Description Default
node_id str

Identifiant du nœud d'appui (ex: "N1").

required
dof str

Degré de liberté sur lequel appliquer la raideur. "DX", "DY", "DZ" pour les translations, "RX", "RY", "RZ" pour les rotations. Defaults to "DX".

('DX', 'DY', 'DZ', 'RX', 'RY', 'RZ')
stiffness kN / m

Raideur de l'appui. - Pour DX/DY/DZ : kN/m (translation) - Pour RX/RY/RZ : kN·m/rad (rotation) Defaults to 0.

0
limit_direction str

Limite le comportement du ressort à un seul sens de sollicitation. - "Aucune limitation" : ressort bidirectionnel - "Tension uniquement" : ne travaille qu'en traction (ex: tirant) - "Compression uniquement" : ne travaille qu'en compression (ex: étai) Defaults to "Aucune limitation".

('Aucune limitation', 'Tension uniquement', 'Compression uniquement')

Returns:

Name Type Description
dict

Configuration de l'appui ressort créé.

create_supports_by_list

create_supports_by_list(list_supports: list)

Ajoute les support d'une liste pré-définit.

Parameters:

Name Type Description Default
list_supports list

liste de support.

required

del_support

del_support(support_id: str)

Supprime un appui classique par son identifiant.

Parameters:

Name Type Description Default
support_id str

Identifiant de l'appui à supprimer (ex: "S1").

required

Returns:

Name Type Description
str

Message de confirmation avec les détails de l'appui supprimé.

get_all_supports

get_all_supports() -> dict

Retourne l'ensemble des appuis du modèle.

Returns:

Name Type Description
dict dict

Dictionnaire contenant les appuis classiques et ressorts : - "classic": dictionnaire des appuis classiques - "spring": dictionnaire des appuis ressorts

create_dist_load

create_dist_load(member_id: str, name: str, start_load: float, end_load: float, start_pos: str = None, end_pos: str = None, action: str = ACTION, direction: str = ('Fx', 'Fy', 'Fz', 'FX', 'FY', 'FZ'), comment: str = None)

Ajoute une charge répartie linéairement sur une barre.

Crée une charge distribuée (poids propre, neige, vent, etc.) appliquée sur une portion ou la totalité d'une barre. La charge peut être uniforme (start_load = end_load) ou trapézoïdale.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre à charger (ex: "M1").

required
name str

Nom descriptif de la charge (ex: "Neige", "PP poutre").

required
start_load float

Intensité de charge au point de départ en kN/m. Valeur positive selon le sens de l'axe choisi.

required
end_load float

Intensité de charge au point d'arrivée en kN/m. Pour une charge uniforme, end_load = start_load.

required
start_pos str

Position de début de la charge. Formats acceptés : "start" (début), "middle" (milieu), "XX%" (pourcentage), ou valeur numérique en mm. Defaults to "start" (toute la barre).

None
end_pos str

Position de fin de charge. Mêmes formats. Defaults to "end" (toute la barre).

None
action str

Type d'action selon DICO_COMBI_ACTION. Ex: "Permanente G", "Neige normale Sn", "Vent pression W+".

ACTION
direction str

Direction et sens de l'effort dans le repère local. Forces : "Fx", "Fy", "Fz" (local) ou "FX", "FY", "FZ" (global). Defaults to "Fy" (vertical vers le bas en local).

('Fx', 'Fy', 'Fz', 'FX', 'FY', 'FZ')
comment str

Commentaire descriptif sur la charge.

None

Returns:

Name Type Description
dict

Configuration de la charge créée avec son identifiant généré.

Note

La convention de signe suit Pynite : Fy négatif = charge vers le bas pour une barre horizontale.

create_point_load

create_point_load(member_id: str, name: str, load: int, pos: str = None, action: str = ACTION, direction: str = ('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz', 'FX', 'FY', 'FZ', 'MX', 'MY', 'MZ'), comment: str = None)

Ajoute une charge ponctuelle (force ou moment) sur une barre.

Crée une force concentrée ou un moment concentré appliqué à une position précise sur une barre (charge en trémie, point d'application d'une poutre, moment d'encastrement équivalent, etc.).

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre à charger (ex: "M1").

required
name str

Nom descriptif de la charge (ex: "Charge ponctuelle P1").

required
load float

Valeur de l'effort. - Force : en kN si direction commence par "F" - Moment : en kN·m si direction commence par "M"

required
pos str

Position de la charge sur la barre. Formats acceptés : "start" (début), "end" (fin), "middle" (milieu), "XX%" (pourcentage), ou valeur numérique en mm. Defaults to "middle".

None
action str

Type d'action selon DICO_COMBI_ACTION. Ex: "Permanente G", "Exploitation Q".

ACTION
direction str

Direction et type d'effort. Forces : "Fx", "Fy", "Fz" (local) ou "FX", "FY", "FZ" (global). Moments : "Mx", "My", "Mz" (local) ou "MX", "MY", "MZ" (global). Defaults to "Fy".

('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz', 'FX', 'FY', 'FZ', 'MX', 'MY', 'MZ')
comment str

Commentaire descriptif sur la charge.

None

Returns:

Name Type Description
dict

Configuration de la charge ponctuelle créée.

create_load_by_list

create_load_by_list(list_loads: list, type_load: str = ('Distribuée', 'Autre'))

Ajoute plusieurs charges en batch depuis une liste.

Permet de créer rapidement plusieurs charges similaires à partir d'une liste de paramètres, utile pour les modèles répétitifs ou les imports.

Parameters:

Name Type Description Default
list_loads list

Liste de tuples contenant les arguments de charge. Chaque tuple doit correspondre aux arguments de create_dist_load ou create_point_load selon le type_load. Ex: [("M1", "PP", -0.5, -0.5, "start", "end", "Permanente G", "FY"), ...]

required
type_load str

Type de charges dans la liste. "Distribuée" : utilise create_dist_load pour chaque élément. "Autre" : utilise create_point_load pour chaque élément. Defaults to "Distribuée".

('Distribuée', 'Autre')

Returns:

Name Type Description
None

Les charges sont ajoutées directement au modèle.

Exemple

charges = [ ... ("M1", "Neige", -1.5, -1.5, "start", "end", "Neige normale Sn", "FY"), ... ("M2", "Neige", -1.5, -1.5, "start", "end", "Neige normale Sn", "FY"), ... ] model.create_load_by_list(charges, "Distribuée")

del_load

del_load(load_id: str)

Supprime une charge par son identifiant.

Parameters:

Name Type Description Default
load_id str

Identifiant de la charge à supprimer (ex: "L1").

required

Returns:

Name Type Description
dict

Dictionnaire de la charge supprimée.

get_all_loads

get_all_loads() -> dict

Retourne l'ensemble des charges définies dans le modèle.

Returns:

Name Type Description
dict dict

Dictionnaire de toutes les charges, indexé par leurs identifiants ("L1", "L2", etc.). Chaque entrée contient les propriétés complètes de la charge (type, intensité, position, barre concernée).

get_member_loads

get_member_loads(member_id: str) -> list

Retourne les charges appliquées sur une barre spécifique.

Filtre l'ensemble des charges du modèle pour ne retourner que celles appliquées sur la barre identifiée.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre (ex: "M1").

required

Returns:

Name Type Description
list list

Liste des dictionnaires de charges appliquées à cette barre.

Exemple

model.get_member_loads("M1") [{'N° barre': 'M1', 'Nom': 'PP', 'Action': 'Permanente G', ...}, ...]

detect_continuous_members

detect_continuous_members(angle_tol_deg: float = 1.0) -> list[list[str]]

Détecte automatiquement les chaînes de barres FEM formant une barre continue.

Deux barres FEM sont considérées comme continues au travers d'un noeud partagé si :

  1. Elles utilisent le même matériau et la même section.
  2. Aucune des deux n'a de relâchement en rotation (teta_y ou teta_z) à l'extrémité partagée — une rotule rompt la continuité en flexion.
  3. Elles sont colinéaires au noeud partagé à angle_tol_deg près : les deux vecteurs sortants du noeud partagé sont quasi-opposés (cos(angle) ≈ -1).

Le degré du noeud n'est pas contraint : un noeud T ou Y (contrefiche fixée en milieu d'arbalétrier par ex.) ne rompt pas la continuité de l'arbalétrier tant que les barres de l'arbalétrier sont colinéaires et sans relâchement. La présence d'un appui intermédiaire ne rompt pas non plus la continuité.

Parameters:

Name Type Description Default
angle_tol_deg float

Tolérance angulaire en degrés pour la colinéarité. Valeurs typiques : 0.5° (strict) à 5° (tolérant sur CAO imprécise). Defaults to 1.0.

1.0

Returns:

Type Description
list[list[str]]

list[list[str]]: Liste de chaînes ordonnées de member_id. Chaque chaîne est orientée d'une extrémité libre vers l'autre. Une barre isolée (non continue) est retournée comme une chaîne d'un seul élément.

Exemple

chains = model.detect_continuous_members()

[["M1"], ["M2", "M3", "M4"], ["M5"]]
M2→M3→M4 forment une solive continue sur 4 appuis par exemple.
Note

La méthode ne modifie pas le modèle. Pour créer effectivement les barres structurales à partir du résultat, utilisez group_members ou auto_group_continuous_members.

group_members

group_members(name: str, member_ids: list[str], role: str = None, design_params: dict = None, comment: str = None) -> str

Crée une barre structurale (regroupement de barres FEM continues).

Regroupe une ou plusieurs barres FEM en un unique élément structurel, destiné à être vérifié comme un tout selon un Eurocode (EC2, EC3, EC5, etc.). La continuité n'est pas vérifiée ici : utilisez detect_continuous_members en amont si vous voulez une vérification automatique.

Parameters:

Name Type Description Default
name str

Nom unique de la barre structurale (ex: "Solive_S1").

required
member_ids list[str]

Liste ordonnée des identifiants de barres FEM constituant la barre structurale (ex: ["M12", "M13", "M14"]). Pour une barre simple non continue : [member_id].

required
role str

Rôle structurel (ex: "Solive", "Panne", "Poteau", "Arbalétrier", "Moise", "Poutre", "Voile"). Utilisé par les modules de vérification.

None
design_params dict

Paramètres de design spécifiques à l'Eurocode utilisé. Le contenu dépend du matériau (EC2=béton, EC3=acier, EC5=bois). Exemple EC5: {"classe_bois": "C24", "cs": 1, "Hi": 12, "Hf": 12, "effet_systeme": False, "type_element_fleche": "Solives"}. Exemple EC3: {"classe_acier": "S355", "classe_section": 1}.

None
lo_rel_y float

Longueur de flambement/déversement autour de l'axe y, en mm. Si None, à déterminer automatiquement au moment de la vérification.

required
lo_rel_z float

Longueur de flambement/déversement autour de l'axe z, en mm.

required
comment str

Commentaire descriptif.

None

Returns:

Name Type Description
str str

Nom de la barre structurale créée (= name).

Raises:

Type Description
ValueError

Si une barre FEM listée n'existe pas, si member_ids est vide, ou si name existe déjà.

Exemple

chains = model.detect_continuous_members()

supposons chains[0] == ["M1", "M2", "M3"]

model.group_members("Solive_S1", chains[0], ... role="Solive", ... design_params={"classe_bois": "C24",})

auto_group_continuous_members

auto_group_continuous_members(angle_tol_deg: float = 1.0, role: str = None, name_prefix: str = 'SM', only_continuous: bool = ('False', 'True'), design_params: dict = None) -> list[str]

Détecte et regroupe automatiquement toutes les barres continues du modèle.

Combine detect_continuous_members et group_members : chaque chaîne détectée devient une barre structurale nommée {name_prefix}{i}.

Parameters:

Name Type Description Default
angle_tol_deg float

Tolérance angulaire pour la détection. Defaults to 1.0.

1.0
role str

Rôle appliqué à toutes les barres créées.

None
name_prefix str

Préfixe pour les noms auto-générés. Defaults to "SM".

'SM'
only_continuous bool

Si True, ignore les chaînes d'une seule barre FEM (barres isolées non continues). Defaults to False.

('False', 'True')
design_params dict

Paramètres de design spécifiques à l'Eurocode. Transmis à group_members pour chaque barre créée.

None

Returns:

Type Description
list[str]

list[str]: Noms des barres structurales créées, dans l'ordre de détection.

Exemple

names = model.auto_group_continuous_members( ... role="Solive", design_params={"classe_bois": "C24", "cs": 1})

["SM1", "SM2", ...]

get_structural_member

get_structural_member(name: str) -> dict

Retourne les données d'une barre structurale par son nom.

Parameters:

Name Type Description Default
name str

Nom de la barre structurale (ex: "Solive_S1").

required

Returns:

Name Type Description
dict dict

Dictionnaire contenant :

  • "Barres FEM" : liste ordonnée des member_id FEM
  • "Rôle" : rôle structurel
  • "Longueur totale" : longueur cumulée avec unité (si.mm)
  • "Design" : paramètres de design spécifiques à l'Eurocode
  • "Commentaire" : texte libre

Raises:

Type Description
KeyError

Si le nom n'existe pas.

get_all_structural_members

get_all_structural_members() -> dict

Retourne toutes les barres structurales du modèle.

Returns:

Name Type Description
dict dict

Dictionnaire {name: données} de toutes les barres structurales.

del_structural_member

del_structural_member(name: str) -> dict

Supprime une barre structurale par son nom.

Parameters:

Name Type Description Default
name str

Nom de la barre structurale à supprimer.

required

Returns:

Name Type Description
dict dict

Données de la barre structurale supprimée.

Raises:

Type Description
KeyError

Si le nom n'existe pas.

debug_node_compression

debug_node_compression(structural_member_name: str, axis: str = 'y') -> None

Affiche les informations de debug pour le calcul du type d'appui en compression.

Affiche les conditions d'appui et de relâchement aux nœuds d'extrémité de la barre structurale, ainsi que le résultat final du type d'appui.

Parameters:

Name Type Description Default
structural_member_name str

Nom de la barre structurale à analyser.

required
axis str

Axe de flambement ("y" ou "z"). Defaults to "y".

'y'

get_type_appuis_for_compression

get_type_appuis_for_compression(structural_member_name: str, axis: str = 'y') -> str

Détermine le type d'appui pour le calcul de flambement en compression.

Analyse les conditions d'appui aux extrémités d'une barre structurale (membre continu ou simple) pour déterminer le coefficient β de longueur efficace selon l'EC5.

Parameters:

Name Type Description Default
structural_member_name str

Nom de la barre structurale à analyser (ex: "Poteau_P1", "SM1").

required
axis str

Axe de flambement à considérer ("y" ou "z"). Defaults to "y".

'y'

Returns:

Name Type Description
str str

Type d'appui selon Compression.COEF_LF : - "Encastré 1 côté" : β = 2.0 (console) - "Rotule - Rotule" : β = 1.0 (articulé-articulé) - "Encastré - Rotule" : β = 0.7 - "Encastré - Encastré" : β = 0.5 - "Encastré - Rouleau" : β = 1.0 (encastré-glissière)

Raises:

Type Description
KeyError

Si la barre structurale n'existe pas.

Note

La méthode analyse : 1. Les appuis classiques (DX, DY, DZ, RX, RY, RZ) aux nœuds d'extrémité 2. Les relâchements (releases) en rotation aux extrémités des barres FEM 3. La continuité du membre (barre continue ou simple)

Pour un axe donné (y ou z), une rotation bloquée sur cet axe correspond à un encastrement, une rotation libre à une rotule.

generate_model

generate_model()

Génère et assemble le modèle MEF complet dans Pynite.

Cette méthode interne (appelée automatiquement par Combinaison) : 1. Crée l'objet FEModel3D de Pynite 2. Ajoute tous les nœuds, matériaux, sections 3. Ajoute toutes les barres avec leurs relâchements 4. Ajoute tous les appuis (classiques et ressorts) 5. Ajoute tous les chargements

Note

Cette méthode est généralement appelée automatiquement par la classe Combinaison. Elle n'a pas besoin d'être invoquée manuellement dans un flux de travail standard.

Wood_beam_model

Wood_beam_model(longueur: mm, b: mm, h: mm, section: str = Model_generator.LIST_SECTION, classe: str = Model_generator.CLASSE_WOOD, poids_propre: bool = ('True', 'False'), nbr_appuis: int = 2, l_appuis: float = 0, devers: float = 0, inclinaison: float = 0, *args, **kwargs)

Bases: Model_generator

Générateur de modèle MEF simplifié pour poutres bois continues.

Cette classe spécialisée crée automatiquement un modèle de poutre sur appuis multiples avec les hypothèses suivantes : - Barre isostatique - Distance entre appuis égale (pas de porte-à-faux) - Possibilité d'inclinaison et de dévers

Elle est particulièrement adaptée pour : - Poutres, pannes, chevrons - Poteaux verticaux (inclinaison = 90°) - Pannes à dévers (dévers ≠ 0)

Flux de travail
  1. Créer le modèle avec Wood_beam_model
  2. Ajouter les charges avec create_dist_load / create_point_load
  3. Passer à la classe Combinaison pour les combinaisons
  4. Analyser les résultats avec Model_result
Note

Cette classe surcharge certaines méthodes de Model_generator pour gérer automatiquement le poids propre des barres multiples.

Initialise un modèle de poutre bois simplifié.

Crée automatiquement les nœuds, barres et appuis répartis uniformément sur la longueur totale. Génère autant de barres que de travées (nbr_appuis - 1).

Parameters:

Name Type Description Default
longueur mm

Longueur totale de la barre en millimètres.

required
b mm

Épaisseur de la section en millimètres (largeur).

required
h mm

Hauteur de la section en millimètres.

required
section str

Type de section transversale. "Rectangulaire" ou "Circulaire". Defaults to "Rectangulaire".

LIST_SECTION
classe str

Classe de résistance du bois selon l'EC5. Ex: "C24", "GL28h". Defaults to "C24".

CLASSE_WOOD
poids_propre bool

Générer automatiquement le poids propre de chaque barre comme charge répartie. Defaults to True.

('True', 'False')
nbr_appuis int

Nombre d'appuis rotulés (≥ 2). 2 = poutre simple sur deux appuis, 3 = poutre continue sur 3 appuis. Defaults to 2.

2
l_appuis float

Longueur d'appui en mm pour la vérification à la compression perpendiculaire. Defaults to 0.

0
devers float

Angle de dévers en degrés (rotation autour de l'axe longitudinal X). Utilisé pour les pannes inclinées transversalement. Defaults to 0.

0
inclinaison float

Angle d'inclinaison en degrés (rotation autour de l'axe Z). 0° = poutre horizontale, 90° = poteau vertical. Utile pour les chevrons ou poteaux inclinés. Defaults to 0.

0

create_dist_load

create_dist_load(name: str, start_load: float, end_load: float, start_pos: str = None, end_pos: str = None, action: str = Model_generator.ACTION, direction: str = ('Fx', 'Fy', 'Fz', 'FX', 'FY', 'FZ'), comment: str = None)

Ajoute une charge distribuée sur la barre

Parameters:

Name Type Description Default
name str

nom de la charge.

required
start_load int

effort de départ en kN/m.

required
end_load int

effort de fin en kN/m.

required
start_pos str

position de début de la charge sur la barre en mm. En complément il est possible de mettre "start", "middle" ou un pourcentage pour définir la position de la charge.

None
end_pos str

position de début de la charge sur la barre en mm. En complément il est possible de mettre "end", "middle" ou un pourcentage pour définir la position de la charge.

None
action str

type d'action de l'effort.

ACTION
direction str

sens de l'effort sur la barre.

('Fx', 'Fy', 'Fz', 'FX', 'FY', 'FZ')
comment str

commentaire sur la charge.

None

create_point_load

create_point_load(name: str, load: float, pos: str = None, action: str = Model_generator.ACTION, direction: str = ('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz', 'FX', 'FY', 'FZ', 'MX', 'MY', 'MZ'), comment: str = None)

Ajoute une charge nodale sur la barre

Parameters:

Name Type Description Default
name str

nom de la charge.

required
load int

effort de départ en kN ou kN.m.

required
pos str

position de la charge sur la barre en mm. En complément il est possible de mettre "start", "middle", "end" ou un pourcentage pour définir la position de la charge.

None
action str

type d'action de l'effort.

ACTION
direction str

sens de l'effort sur la barre.

('Fx', 'Fy', 'Fz', 'Mx', 'My', 'Mz', 'FX', 'FY', 'FZ', 'MX', 'MY', 'MZ')
comment str

commentaire sur la charge.

None

model_result

Projet

Projet(ingenieur: str = None, num_project: str = None, name: str = None, adresse: str = None, code_INSEE: int = None, pays: str = PAYS, alt: m = 0, **kwargs)

Bases: Objet

Classe définissant les informations générales d'un projet de structure.

Cette classe est la racine de la hiérarchie des objets ourocode. Elle contient les informations administratives et géographiques du projet, nécessaires pour l'application des annexes nationales françaises des Eurocodes.

Initialise un projet avec ses informations générales.

Cette classe définit le contexte du projet, indispensable pour l'application correcte des annexes nationales françaises des Eurocodes. Tous les objets de calcul (éléments de structure, charges, etc.) héritent indirectement de cette classe.

Parameters:

Name Type Description Default
ingenieur str

Nom de l'ingénieur responsable. Defaults to None.

None
num_project str

Numéro de référence du projet. Defaults to None.

None
name str

Nom ou désignation du projet. Defaults to None.

None
adresse str

Adresse géographique du chantier. Defaults to None.

None
code_INSEE int

Code INSEE à 5 chiffres du département ou de la commune pour les données climatiques. Defaults to None.

None
pays str

Pays où se situe le projet. Defaults to "France". Attention : ce package intègre uniquement les annexes nationales françaises des Eurocodes.

PAYS
alt m

Altitude du projet en mètres, utilisée pour le calcul de la neige et du vent. Defaults to 0.

0
**kwargs

Arguments supplémentaires ajoutés dynamiquement.

{}

Model_result

Model_result(model_generator: object, analyze_type: str = ANALYZE_TYPE, check_stability: bool = ('False', 'True'), *args, **kwargs)

Bases: Projet

Classe d'analyse et d'extraction des résultats MEF.

Cette classe permet de lancer l'analyse aux éléments finis et de récupérer les résultats (efforts, déformées, réactions) du modèle généré par Model_generator et résolu par Combinaison.

Elle hérite de Projet pour maintenir le contexte du projet. L'analyse est lancée automatiquement lors de l'instanciation.

Flux de travail
  1. Créer un modèle avec Model_generator
  2. Définir les combinaisons avec Combinaison
  3. Instancier Model_result pour analyser et extraire les résultats
  4. Utiliser les méthodes get_ ou show_ pour visualiser

Types d'analyse disponibles: - "Général": Analyse complète (linéaire + P-Delta si nécessaire) - "Linéaire": Analyse linéaire élastique uniquement - "Second ordre": Analyse P-Delta (effets du second ordre)

Initialise l'analyseur de résultats MEF.

Lance automatiquement l'analyse du modèle après initialisation. Vérifie que tous les nœuds sont connectés avant de résoudre.

Parameters:

Name Type Description Default
model_generator Model_generator

Instance du modèle généré contenant les nœuds, barres, matériaux et chargements.

required
analyze_type str

Type d'analyse à réaliser. "Général", "Linéaire" ou "Second ordre". Defaults to "Général".

ANALYZE_TYPE
check_stability bool

Active la vérification de stabilité du modèle. Ralentit le calcul, utile pour le débogage. Defaults to False.

('False', 'True')
*args

Arguments transmis à la classe parent Projet.

()
**kwargs

Arguments nommés transmis à Projet.

{}

Raises:

Type Description
ValueError

Si des nœuds orphelins (non connectés) sont détectés.

get_member_length

get_member_length(member_id: str) -> float

Retourne la longueur d'une barre par son identifiant.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre (ex: "M1").

required

Returns:

Name Type Description
float float

Longueur de la barre en millimètres avec unité (si.mm).

get_internal_force

get_internal_force(member_id: str, combination: str, type: str = ('Nx', 'Vy', 'Vz', 'Mx', 'My', 'Mz'), n_points: int = 20) -> np.array

Retourne les efforts internes le long d'une barre pour une combinaison donnée.

Extrait les valeurs d'efforts (effort normal, cisaillement, moment) répartis le long de la barre avec un nombre de points défini.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre (ex: "M1").

required
combination str

Nom de la combinaison de charges à analyser (ex: "ELU_STR", "ELS_QP").

required
type str

Type d'effort interne à récupérer. "Nx" = effort normal, "Vy"/"Vz" = effort tranchant, "Mx" = moment de torsion, "My"/"Mz" = moment fléchissant. Defaults to "Nx".

('Nx', 'Vy', 'Vz', 'Mx', 'My', 'Mz')
n_points int

Nombre de points de discrétisation le long de la barre. Plus ce nombre est élevé, plus la courbe est lisse. Defaults to 20.

20

Returns:

Name Type Description
tuple array

(positions, valeurs) où : - positions (array): Abscisses le long de la barre en mm - valeurs (array): Valeurs de l'effort correspondant

Note

Les valeurs sont retournées dans les unités de base de Pynite (N ou N·mm).

get_min_max_internal_force

get_min_max_internal_force(member_id: str | list, combination: str | list) -> dict

Retourne les valeurs minimales et maximales des efforts internes.

Analyse tous les types d'efforts (Nx, Vy, Vz, Mx, My, Mz) et retourne les valeurs extrêmes avec la combinaison correspondante. Supporte les barres continues (liste de barres) et les tags de combinaisons.

Parameters:

Name Type Description Default
member_id str | list

Identifiant de la barre ou liste de barres pour une barre continue (ex: "M1" ou ["M1", "M2", "M3"]).

required
combination str | list

Nom de la combinaison ou liste de tags de combinaisons (ex: "ELU_STR" ou ["ELU_STR", "ELU_ACC"]). Si des tags sont fournis, le max/min est cherché parmi toutes les combinaisons correspondantes.

required

Returns:

Name Type Description
dict dict

Dictionnaire structuré par type d'effort : { "Nx": {"Min": (valeur, combinaison), "Max": (valeur, combinaison)}, "Vy": {"Min": (...), "Max": (...)}, ... } Les valeurs incluent les unités (N pour efforts, N·mm pour moments).

Raises:

Type Description
ValueError

Si une barre de la liste n'existe pas dans le modèle.

get_absolute_internal_force

get_absolute_internal_force(member_id: str | list, combination: str | list, type: str = ('Nx', 'Vy', 'Vz', 'Mx', 'My', 'Mz'), get_combo_name: bool = ('False', 'True'))

Retourne la valeur absolue maximale d'un type d'effort spécifique.

Détermine automatiquement si le maximum absolu est la valeur minimale (la plus négative) ou maximale (la plus positive) et retourne sa valeur absolue. Utile pour les vérifications de dimensionnement.

Parameters:

Name Type Description Default
member_id str | list

Identifiant de la barre ou liste de barres.

required
combination str | list

Nom de la combinaison ou tags de combinaisons.

required
type str

Type d'effort à analyser ("Nx", "Vy", "Vz", "Mx", "My", "Mz"). Defaults to "Nx".

('Nx', 'Vy', 'Vz', 'Mx', 'My', 'Mz')
get_combo_name bool

Si True, retourne également le nom de la combinaison associée. Defaults to False.

('False', 'True')

Returns:

Type Description

float | dict: Valeur absolue de l'effort maximal. Si get_combo_name=True, retourne un dict :

show_internal_force_of_member

show_internal_force_of_member(member_id: str | list, combination: str, type: str = ('Nx', 'Vy', 'Vz', 'Mx', 'My', 'Mz'), n_points: int = 20, screenshot: bool = ('False', 'True'), filepath: str = None)

Affiche le diagramme des efforts internes d'une barre.

Génère un graphique matplotlib montrant la distribution de l'effort interne choisi le long de la barre (ou des barres continues). Les valeurs sont automatiquement converties en kN ou kN·m.

Parameters:

Name Type Description Default
member_id str | list

Identifiant de la barre ou liste de barres pour une barre continue.

required
combination str

Nom de la combinaison à afficher (ex: "ELU_STR").

required
type str

Type d'effort à diagrammer. - "Nx": Effort normal (orange) - "Vy", "Vz": Effort tranchant (bleu) - "Mx", "My", "Mz": Moments (rouge) Defaults to "Nx".

('Nx', 'Vy', 'Vz', 'Mx', 'My', 'Mz')
n_points int

Nombre de points pour le tracé. Defaults to 20.

20
screenshot bool

Si True, sauvegarde l'image sans afficher la fenêtre interactive. Defaults to False.

('False', 'True')
filepath str

Chemin de sauvegarde si screenshot=True. Ouvre une boîte de dialogue si None.

None

Returns:

Name Type Description
str

Chemin du fichier sauvegardé si screenshot=True.

None

Affiche le graphique interactif si screenshot=False.

Note

Les barres sont concaténées pour former un diagramme continu dans le cas d'une barre continue (ex: ["M1", "M2", "M3"]).

get_deflection

get_deflection(member_id: str, combination: str, direction: str = ('dx', 'dy', 'dz'), n_points: int = 20) -> np.array

Retourne les déplacements/déformées le long d'une barre.

Extrait les valeurs de déplacement aux nœuds intermédiaires de la barre pour une direction donnée et une combinaison spécifique.

Parameters:

Name Type Description Default
member_id str

Identifiant de la barre (ex: "M1").

required
combination str

Nom de la combinaison à analyser (ex: "ELS_QP", "W_inst_Q").

required
direction str

Direction du déplacement. "dx" = selon l'axe longitudinal (allongement/raccourcissement) "dy" = flèche dans le plan vertical local "dz" = flèche dans le plan horizontal local Defaults to "dy" (flèche verticale usuelle).

('dx', 'dy', 'dz')
n_points int

Nombre de points de discrétisation. Defaults to 20.

20

Returns:

Name Type Description
tuple array

(positions, déplacements) où : - positions (array): Abscisses le long de la barre en mm - déplacements (array): Valeurs de déplacement en mm

Note

Les déplacements sont relatifs aux conditions d'appui (la ligne élastique est calculée par rapport à la position déformée des appuis).

get_min_max_deflection

get_min_max_deflection(member_id: str | list, combination: str | list) -> dict

Retourne les déplacements minimaux et maximaux d'une barre.

Analyse les trois directions de déplacement (dx, dy, dz) et retourne les valeurs extrêmes avec la combinaison correspondante. Supporte les barres continues et les tags de combinaisons ELS.

Parameters:

Name Type Description Default
member_id str | list

Identifiant de la barre ou liste de barres pour une barre continue.

required
combination str | list

Nom de la combinaison ou tags ELS (ex: "ELS_QP", ["W_inst_Q", "W_net_fin"]).

required

Returns:

Name Type Description
dict dict

Dictionnaire structuré par direction : { "dx": {"Min": (valeur, combinaison), "Max": (valeur, combinaison)}, "dy": {"Min": (...), "Max": (...)}, "dz": {"Min": (...), "Max": (...)} } Les valeurs incluent l'unité (si.mm).

Note

Les valeurs "Min" peuvent être négatives (déplacement dans le sens opposé à l'axe). La flèche maximale est généralement la valeur absolue la plus grande en valeur absolue dans la direction verticale (dy).

get_absolute_max_deflection

get_absolute_max_deflection(member_id: str | list, combination: str | list, direction: str = ('dx', 'dy', 'dz'), get_combo_name: bool = ('False', 'True'))

Retourne la valeur absolue maximale de déplacement pour une direction donnée.

Détermine automatiquement si le maximum absolu est la valeur minimale ou maximale et retourne sa valeur absolue. Méthode standard pour récupérer la flèche maximale à vérifier.

Parameters:

Name Type Description Default
member_id str | list

Identifiant de la barre ou liste de barres.

required
combination str | list

Nom de la combinaison ou tags de combinaisons. (ex: "ELS_QP", ["W_inst_Q", "W_net_fin"]).

required
direction str

Direction à analyser ("dx", "dy", "dz"). Defaults to "dy" (flèche verticale).

('dx', 'dy', 'dz')
get_combo_name bool

Si True, retourne également le nom de la combinaison associée. Defaults to False.

('False', 'True')

Returns:

Type Description

float | dict: Valeur absolue du déplacement maximal en mm. Si get_combo_name=True, retourne un dict :

show_deflection_of_member

show_deflection_of_member(member_id: str | list, combination: str, direction: str = ('dx', 'dy', 'dz'), n_points: int = 20, screenshot: bool = ('False', 'True'), filepath: str = None)

Affiche le diagramme de déformée (flèche) d'une barre.

Génère un graphique matplotlib montrant la ligne élastique de la barre pour la direction et combinaison spécifiées. Utile pour visualiser la déformée et identifier les zones de flèche maximale.

Parameters:

Name Type Description Default
member_id str | list

Identifiant de la barre ou liste de barres pour une barre continue.

required
combination str

Nom de la combinaison à afficher (ex: "W_inst_Q").

required
direction str

Direction de la déformée à afficher. "dx" = allongement, "dy" = flèche verticale, "dz" = flèche horizontale. Defaults to "dy".

('dx', 'dy', 'dz')
n_points int

Nombre de points pour le tracé. Defaults to 20.

20
screenshot bool

Si True, sauvegarde l'image. Defaults to False.

('False', 'True')
filepath str

Chemin de sauvegarde si screenshot=True.

None

Returns:

Name Type Description
str

Chemin du fichier sauvegardé si screenshot=True.

None

Affiche le graphique interactif si screenshot=False.

Note

La déformée est tracée en vert avec remplissage pour visualiser l'amplitude des déplacements.

show_model

show_model(combination: str, annotation_size: int = 70, show_loads: bool = ('True', 'False'), diagrams: str = ('Aucun', 'Fx', 'Fy', 'Fz', 'My', 'Mz', 'Tx', 'Flèche'), scale: int = 1000, screenshot: bool = ('False', 'True'), filepath: str = None)

Affiche une visualisation 3D interactive du modèle MEF.

Rendu 3D complet du modèle avec possibilité d'afficher les charges, les efforts internes colorés, ou la déformée. Utilise le renderer Pynite avec interaction utilisateur.

Parameters:

Name Type Description Default
combination str

Nom de la combinaison à afficher.

required
annotation_size int

Taille des annotations de nœuds. Defaults to 70.

70
show_loads bool

Affiche les charges appliquées. Defaults to True.

('True', 'False')
diagrams str

Type de diagramme à superposer. - "Aucun": Modèle fil de fer seul - "Fx", "Fy", "Fz", "My", "Mz", "Tx": Diagramme d'efforts coloré - "Flèche": Déformée amplifiée Defaults to "Aucun".

('Aucun', 'Fx', 'Fy', 'Fz', 'My', 'Mz', 'Tx', 'Flèche')
scale int

Facteur d'échelle pour les diagrammes et la déformée. Defaults to 1000.

1000
screenshot bool

Si True, capture l'image sans interaction. Defaults to False.

('False', 'True')
filepath str

Chemin de sauvegarde. Ouvre une boîte de dialogue si None et screenshot=True.

None

Returns:

Name Type Description
str

Chemin du fichier sauvegardé si screenshot=True.

None

Affiche la fenêtre interactive si screenshot=False.

Note

En mode interactif (screenshot=False), utilisez la souris pour tourner le modèle (clic gauche), zoomer (molette), paner (clic droit). Appuyez sur Q pour fermer.

get_global_displacement_of_node

get_global_displacement_of_node(node_id: str, combination: str) -> dict

Retourne les déplacements/rotations globaux d'un nœud.

Extrait les valeurs de déplacement et rotation dans le repère global (X, Y, Z) pour un nœud spécifique et une combinaison donnée.

Parameters:

Name Type Description Default
node_id str

Identifiant du nœud (ex: "N1").

required
combination str

Nom de la combinaison à analyser.

required

Returns:

Name Type Description
dict dict

Déplacements et rotations du nœud : { "DX", "DY", "DZ": translations en mm (si.mm) "RX", "RY", "RZ": rotations en radians (sans unité) }

Note

Les déplacements sont relatifs à la position initiale du nœud. Les rotations positives suivent la convention de la main droite.

get_supports_reactions

get_supports_reactions(combination: str) -> dict

Retourne les réactions d'appui pour tous les appuis du modèle.

Parcourt tous les appuis définis dans le modèle et récupère les forces et moments de réaction pour la combinaison spécifiée.

Parameters:

Name Type Description Default
combination str

Nom de la combinaison à analyser (ex: "ELU_STR").

required

Returns:

Name Type Description
dict dict

Dictionnaire indexé par identifiant d'appui : { "S1": {"FX": ..., "FY": ..., "FZ": ..., "MX": ..., ...}, "S2": {...}, ... } Forces en N, moments en N·mm.

Note

Un appui rotulé retournera des moments nuls (MX=MY=MZ=0). Un glisseur retournera une force nulle dans la direction libre.