Aller au contenu

EC8_Sismique — EN 1998-1

Spectre de réponse élastique et de calcul selon EN 1998-1 et l'Annexe Nationale Française.

sismique

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.).

{}

Sismique

Sismique(Kbx: float, Kby: float, type_constructif_x: str = CLASSE_DUCTILITE, type_constructif_y: str = CLASSE_DUCTILITE, regulier_plan: bool = ('True', 'False'), regulier_elevation: bool = ('True', 'False'), cat_importance: str = CAT_IMPORTANCE, classe_sol: str = CLASSE_SOL, type_spectre: str = TYPE_SPECTRE, **kwargs)

Bases: Batiment

Initialise le calcul sismique d'un bâtiment bois selon la méthode des forces latérales (EN 1998-1 §4.3.3.2).

Attention : tous les bâtiments ne se prêtent pas à cette méthode (voir EN 1998-1 §4.3.3.2.1). La classe vérifie automatiquement la nécessité d'une analyse sismique et la validité de la méthode des forces latérales lors de l'instanciation.

Parameters:

Name Type Description Default
Kbx float

Raideur latérale globale du bâtiment selon la direction x (sens de la longueur) en kN/m.

required
Kby float

Raideur latérale globale du bâtiment selon la direction y (sens de la largeur) en kN/m.

required
type_constructif_x str

Système constructif dissipatif dans la direction x. Doit être une clé de CLASSE_DUCTILITE. Détermine le coefficient de comportement q et la classe de ductilité (DCL, DCM, DCH) selon l'EN 1998.

CLASSE_DUCTILITE
type_constructif_y str

Système constructif dissipatif dans la direction y. Même valeurs que type_constructif_x.

CLASSE_DUCTILITE
regulier_plan bool

True si le bâtiment est régulier en plan selon EN 1998-1 §4.2.3.

('True', 'False')
regulier_elevation bool

True si le bâtiment est régulier en élévation selon EN 1998-1 §4.2.3.

('True', 'False')
cat_importance str

Catégorie d'importance du bâtiment selon EN 1998-1 §4.2.5 : - "I" : Bâtiments sans activité humaine prolongée. - "II" : Habitations individuelles, ERP cat. 4/5, logements collectifs < 28 m, bureaux/commerces non ERP ≤ 28 m (≤ 300 pers.), parcs de stationnement. - "III": ERP cat. 1-3, logements collectifs/bureaux > 28 m, bâtiments > 300 pers., établissements sanitaires, scolaires, centres énergétiques. - "IV" : Bâtiments indispensables à la sécurité civile, défense, communications, eau potable, énergie, sécurité aérienne, santé de crise, météorologie.

CAT_IMPORTANCE
classe_sol str

Classe de sol selon EN 1998-1 §3.1.2.

CLASSE_SOL
type_spectre str

Type de spectre de réponse. "Type 2" : France métropolitaine (magnitude < 6). "Type 1" : Zones à forte sismicité (magnitude ≥ 6).

TYPE_SPECTRE
**kwargs

Arguments transmis à la classe parent Batiment.

{}

Raises:

Type Description
ValueError

Si le bâtiment n'est pas soumis à une analyse sismique (zone 1, cat. I, cat. II en zone 2) ou si la méthode des forces latérales n'est pas applicable (cat. IV, irrégularité en élévation, T1 > min(4TC, 2s)).

region_sismique property

region_sismique: str

Retourne la zone d'aléa sismique du bâtiment selon l'AN français (carte par code INSEE).

Returns:

Name Type Description
str str

Zone sismique parmi "Zone 1" à "Zone 5".

cat_importance_table property

cat_importance_table: Series

Retourne les données normatives de la catégorie d'importance sélectionnée.

Returns:

Type Description
Series

pd.Series: Ligne du fichier categorie_importance.csv correspondant à cat_importance, contenant notamment le coefficient d'importance gamma_I.

classe_sol_table property

classe_sol_table: Series

Retourne les paramètres de sol de la classe sélectionnée selon EN 1998-1 §3.1.2.

Returns:

Type Description
Series

pd.Series: Ligne du fichier classe_sol.csv pour la classe_sol choisie, contenant les paramètres S, TB, TC, TD du spectre de réponse.

type_spectre_table property

type_spectre_table: Series

Retourne les paramètres du spectre élastique horizontal selon EN 1998-1 §3.2.2.

Sélectionne le fichier de spectre type 1 ou type 2 selon type_spectre, puis retourne la ligne correspondant à la classe de sol.

Returns:

Type Description
Series

pd.Series: Paramètres S, TB, TC, TD pour le couple (type_spectre, classe_sol).

type_constructif_table property

type_constructif_table: dict

Retourne le dictionnaire complet des classes de ductilité bois disponibles.

Returns:

Name Type Description
dict dict

CLASSE_DUCTILITE : clés = description du système constructif, valeurs = dict {"q": coefficient de comportement, "Classe de ductilité": "DCL"/"DCM"/"DCH"}.

a_gr property

a_gr: float

Retourne l'accélération de référence a_gR pour un sol de classe A selon l'AN français.

Returns:

Name Type Description
float float

Accélération de référence en m/s² avec unité (si.m/si.s²), issue du dictionnaire AGR pour la zone sismique du projet.

a_g property

a_g: tuple

Calcule l'accélération de calcul a_g = a_gR × gamma_I selon EN 1998-1 §3.2.1.

Returns:

Name Type Description
tuple tuple

(latex_string, valeur) où valeur est l'accélération de calcul en m/s².

gamma_I property

gamma_I: float

Retourne le coefficient d'importance gamma_I de la catégorie d'importance selon EN 1998-1 §4.2.5.

Returns:

Name Type Description
float float

Coefficient gamma_I (ex. : 0.8, 1.0, 1.2, 1.4 pour cat. I à IV).

T1 property

T1: tuple

Calcule les périodes propres de vibration T1 selon EN 1998-1 §4.3.3.2.2.

Formule : T_1 = 2 * sqrt(m_total / K_b) pour chaque direction. La masse totale est déduite des charges gravitaires ajoutées via add_gravity_load.

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": T_1_x, "y": T_1_y} avec les périodes en secondes (sans unité forallpeople).

Sd_t property

Sd_t: tuple

Retourne les ordonnées spectrales de calcul S_d(T1) selon EN 1998-1 §3.2.2.5.

Calcule S_d(T1) pour les périodes T1x et T1y dans chaque direction en appelant _spectre_elastique_calcul, avec le coefficient de comportement q propre à chaque direction.

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": Sd_x, "y": Sd_y} avec les accélérations spectrales en m/s².

Fb property

Fb: tuple

Calcule l'effort tranchant sismique à la base F_b selon EN 1998-1 §4.3.3.2.2 (éq. 4.5).

F_b = S_d(T1) × m_total × lambda, avec lambda = 0.85 si T1 ≤ 2TC et plus de 2 niveaux, 1 sinon.

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": F_b_x, "y": F_b_y} avec les efforts de base en kN (avec unité si.kN).

Fi_table property

Fi_table: DataFrame

Retourne le tableau des efforts horizontaux équivalents à chaque étage selon EN 1998-1 §4.3.3.2.3.

Valable uniquement si les déplacements horizontaux croissent linéairement avec la hauteur. Le coefficient de torsion accidentelle n'est pas inclus.

Returns:

Type Description
DataFrame

pd.DataFrame: DataFrame indexé par le nom d'étage avec les colonnes ["Fi,x", "Fi,y"] contenant les efforts en kN (avec unité si.kN).

save_gravity_load_data

save_gravity_load_data(path: str = None) -> None

Sauvegarde les données des charges gravitaires dans un fichier JSON.

Parameters:

Name Type Description Default
path str

Chemin absolu du fichier de destination (.json). Si None, une boîte de dialogue s'ouvre pour sélectionner le fichier. Defaults to None.

None

load_gravity_load_data

load_gravity_load_data(path: str = None) -> dict

Charge les données des charges gravitaires depuis un fichier JSON et reconstruit l'état interne.

Relit le fichier produit par save_gravity_load_data et appelle _set_loads pour reconstituer le dictionnaire _loads utilisé dans les calculs sismiques.

Parameters:

Name Type Description Default
path str

Chemin absolu du fichier source (.json). Si None, une boîte de dialogue s'ouvre pour sélectionner le fichier. Defaults to None.

None

Returns:

Name Type Description
dict dict

Dictionnaire gravity_loads mis à jour, structuré par étage puis par nom de charge.

add_gravity_load

add_gravity_load(name: str, load: kN / m ** 2, surface: m ** 2, etage: str = Batiment.ETAGE, z_i: float = 0, action: str = ACTION, categorie_Q: str = Batiment.CAT_TYPE, occupations: str = OCCUPATION, comment: str = '') -> dict

Ajoute une charge gravitaire à un étage pour le calcul de la masse sismique.

La charge est convertie en masse sismique selon la combinaison quasi-permanente (G + psi_2 × Q) conformément à EN 1998-1 §3.2.4. Ne pas oublier les charges permanentes de murs, menuiseries, éléments techniques et autres éléments non structuraux.

Parameters:

Name Type Description Default
name str

Identifiant unique de la charge dans l'étage considéré.

required
load float

Intensité de la charge gravitaire en kN/m².

required
surface float

Surface d'application de la charge en m².

required
etage str

Nom de l'étage auquel est appliquée la charge. Doit correspondre à une clé de ETAGE définie dans Batiment.

ETAGE
z_i float

Hauteur de l'étage i en mètres depuis les fondations ou le sommet d'un soubassement rigide. Defaults to 0.

0
action str

Type d'action de la charge selon ACTION. "Permanente G", "Exploitation Q" ou "Neige normale Sn".

ACTION
categorie_Q str

Catégorie d'exploitation selon l'EC1-1-1. Utilisée uniquement pour les charges Q (psi_2). Defaults to "Aucune".

CAT_TYPE
occupations str

Type d'occupation pour la réduction de la charge Q (coefficient phi selon EN 1998-1 §4.2.4). "Étages à occupations corrélées", "Étages à occupations indépendantes", "Toiture", ou "Autres". Defaults to "Autres".

OCCUPATION
comment str

Commentaire descriptif libre sur la charge. Defaults to "".

''

Returns:

Name Type Description
dict dict

Dictionnaire décrivant la charge ajoutée avec les clés : "Zi", "Charge gravitaire", "Surface", "Action", "Catégorie", "Occupations", "Commentaire".

show_spectre_elastique_calcul

show_spectre_elastique_calcul(direction: str = ('x', 'y'), screenshot: bool = ('False', 'True'), filepath: str = None) -> None

Affiche le spectre élastique de calcul S_d(T) selon EN 1998-1 §3.2.2.5.

Trace la courbe S_d(T) sur [0, 4 s] pour la direction choisie avec matplotlib.

Parameters:

Name Type Description Default
direction str

Direction du spectre. "x" (bleu) ou "y" (rouge). Defaults to "x".

('x', 'y')
screenshot bool

Si True, enregistre le graphique au lieu de l'afficher. Defaults to False.

('False', 'True')
filepath str

Chemin du fichier image de sortie (.png). Si None et screenshot=True, une boîte de dialogue s'ouvre. Defaults to None.

None

coeff_torsion_accidentelle

coeff_torsion_accidentelle(x: m, Le: m) -> tuple

Calcule le coefficient de torsion accidentelle delta selon EN 1998-1 §4.3.3.2.4 (éq. 4.12).

Applicable lorsque les raideurs latérales et les masses sont symétriques. Formule : delta = 1 + 1.2 × (x / Le).

Parameters:

Name Type Description Default
x float

Distance en plan de l'élément au centre de masse du bâtiment, mesurée perpendiculairement à la direction de l'action sismique, en m.

required
Le float

Distance entre les deux éléments de contreventement extrêmes, mesurée perpendiculairement à la direction de l'action sismique, en m.

required

Returns:

Name Type Description
tuple tuple

(latex_string, delta) où delta est le coefficient de torsion accidentelle (sans unité).

Fi

Fi(etage: str = Batiment.ETAGE) -> tuple

Calcule l'effort horizontal équivalent F_i à l'étage i selon EN 1998-1 §4.3.3.2.3 (éq. 4.11).

Formule : F_i = F_b × (z_i × m_i) / sum(z_j × m_j). Valable uniquement si les déplacements horizontaux croissent linéairement avec la hauteur. Le coefficient de torsion accidentelle n'est pas inclus (à appliquer séparément).

Parameters:

Name Type Description Default
etage str

Nom de l'étage considéré, tel que défini lors de add_gravity_load.

ETAGE

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": F_i_x, "y": F_i_y} avec les efforts horizontaux en kN (avec unité si.kN).

ds

ds(de: float, direction: str = ('x', 'y')) -> tuple

Calcule le déplacement de calcul d_s selon EN 1998-1 §4.3.4 (éq. 4.23).

Formule : d_s = q_d × d_e, avec q_d = q (coefficient de comportement de la direction).

Parameters:

Name Type Description Default
de float

Déplacement élastique du même point issu d'une analyse linéaire sur le spectre de calcul (EN 1998-1 §3.2.2.5), en mm.

required
direction str

Direction du déplacement. "x" ou "y". Defaults to "x".

('x', 'y')

Returns:

Name Type Description
tuple tuple

(latex_string, d_s) où d_s est le déplacement de calcul en mm (avec unité si.mm).

coeff_second_ordre

coeff_second_ordre(dr: float, V_tot: kN, etage: str = Batiment.ETAGE) -> tuple

Calcule le coefficient d'effet P-delta theta_r selon EN 1998-1 §4.3.5.2.2 (éq. 4.28).

Formule : theta_r = (P_tot × d_r) / (V_tot × h_lvl). Si theta_r ≤ 0.1 : coeff_P_delta = 1 (effets du 2nd ordre négligeables). Si 0.1 < theta_r ≤ 0.2 : coeff_P_delta = 1 / (1 - theta_r). Si theta_r > 0.2 : non couvert (restructuration requise).

Parameters:

Name Type Description Default
dr float

Déplacement relatif de calcul entre niveaux en mm (différence des déplacements latéraux entre le bas et le haut du niveau). Calculé via ds().

required
V_tot float

Effort tranchant sismique total au niveau de l'étage en kN. Inclure le coefficient de torsion accidentelle le cas échéant.

required
etage str

Nom de l'étage considéré, tel que défini lors de add_gravity_load.

ETAGE

Returns:

Name Type Description
tuple tuple

(latex_string, coeff_P_delta) où coeff_P_delta est le facteur d'amplification du 2nd ordre (sans unité).

taux_limitations_dommages

taux_limitations_dommages(dr: float, etage: str = Batiment.ETAGE, type_dommages: str = TYPE_DOMMAGES) -> tuple

Calcule le taux de limitation des dommages selon EN 1998-1 §4.4.3.2.

Vérifie que le déplacement inter-étages d_r × nu reste dans la limite normative selon le type d'éléments non structuraux (éq. 4.31, 4.32 ou 4.33). Le coefficient de réduction nu = 0.4 est fixe (sismicité modérée AN français).

Parameters:

Name Type Description Default
dr float

Déplacement relatif de calcul entre niveaux en mm. Calculé via ds().

required
etage str

Nom de l'étage considéré, tel que défini lors de add_gravity_load.

ETAGE
type_dommages str

Type d'éléments non structuraux : "Fragiles" : éléments en matériaux fragiles fixés à la structure (limite h/200, éq. 4.31). "Ductiles" : éléments non structuraux ductiles (limite h/133, éq. 4.32). "Désolidarisé/Pas de risque" : éléments sans interaction avec la structure (limite h/100, éq. 4.33).

TYPE_DOMMAGES

Returns:

Name Type Description
tuple tuple

(latex_string, taux) où taux est le taux de travail en limitation de dommages (sans unité, valeur ≤ 1 si la vérification est satisfaite).

Fa

Fa(ma: float, Ta_x: float, Ta_y: float, z: float, type_element_ns: str = CLASSE_DUCTILITE_NS, cat_importance_ns: str = CAT_IMPORTANCE_NS) -> tuple

Calcule l'effort sismique horizontal F_a sur un élément non structural selon EN 1998-1 §4.3.5.2 (éq. 4.24).

Formule : F_a = (S_a × m_a × gamma_a) / q_a, avec S_a basé sur le spectre de plancher.

Parameters:

Name Type Description Default
ma float

Masse de l'élément non structural en kg ou kg/m² en fonction du besoin.

required
Ta_x float

Période fondamentale de vibration de l'élément suivant la direction x en s.

required
Ta_y float

Période fondamentale de vibration de l'élément suivant la direction y en s.

required
z float

Hauteur de l'élément non structural au-dessus du niveau d'application de l'action sismique (base du bâtiment ou sommet du soubassement) en m.

required
type_element_ns str

Type d'élément non structural selon CLASSE_DUCTILITE_NS. Détermine le coefficient de comportement q_a.

CLASSE_DUCTILITE_NS
cat_importance_ns str

Catégorie d'importance de l'élément non structural selon CAT_IMPORTANCE_NS. Détermine le coefficient d'importance gamma_a.

CAT_IMPORTANCE_NS

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": F_a_x, "y": F_a_y} avec les efforts sismiques en kN (avec unité si.kN).

F_sismique_final_capacite

F_sismique_final_capacite(etage: str = Batiment.ETAGE, gamma_d_x: str = ('Rupture fragile', 'Rupture ductile'), gamma_d_y: str = ('Rupture fragile', 'Rupture ductile'), Omega_x: float = 1, Omega_y: float = 1, eta_torsion_x: float = 1, eta_torsion_y: float = 1, P_delta_x: float = 1, P_delta_y: float = 1) -> tuple

Calcule l'effort sismique de dimensionnement des éléments non dissipatifs par capacité.

Formule : F_s = F_i × gamma_d × Omega × eta_torsion × P_delta, avec gamma_d = 1.3 (rupture fragile) ou 1.1 (rupture ductile).

Parameters:

Name Type Description Default
etage str

Nom de l'étage considéré, tel que défini lors de add_gravity_load.

ETAGE
gamma_d_x str

Type de rupture dans la direction x : "Rupture fragile" (gamma_d = 1.3) : diaphragmes béton, embrèvements, assemblages collés, connecteurs par plaques embouties, instabilité de flambement/déversement. "Rupture ductile" (gamma_d = 1.1) : diaphragmes en panneaux bois cloués, assemblages par pointes ou tiges à faible raideur.

('Rupture fragile', 'Rupture ductile')
gamma_d_y str

Type de rupture dans la direction y. Mêmes valeurs que gamma_d_x.

('Rupture fragile', 'Rupture ductile')
Omega_x float

Facteur de sur-résistance des éléments dissipatifs dans la direction x (Rd/Ed). Defaults to 1.

1
Omega_y float

Facteur de sur-résistance dans la direction y. Defaults to 1.

1
eta_torsion_x float

Coefficient de torsion accidentelle dans la direction x, calculé via coeff_torsion_accidentelle(). Defaults to 1.

1
eta_torsion_y float

Coefficient de torsion accidentelle dans la direction y. Defaults to 1.

1
P_delta_x float

Coefficient d'effet du second ordre dans la direction x, calculé via coeff_second_ordre(). Defaults to 1.

1
P_delta_y float

Coefficient d'effet du second ordre dans la direction y. Defaults to 1.

1

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": F_s_x, "y": F_s_y} avec les efforts sismiques de dimensionnement en kN (avec unité si.kN).

F_sismique_final_dissipatif

F_sismique_final_dissipatif(etage: str = Batiment.ETAGE, eta_torsion_x: float = 1, eta_torsion_y: float = 1, P_delta_x: float = 1, P_delta_y: float = 1) -> tuple

Calcule l'effort sismique de dimensionnement des éléments dissipatifs.

Formule : F_s = F_i × eta_torsion × P_delta (sans amplification par capacité). Les éléments dissipatifs sont dimensionnés directement avec l'effort de l'analyse spectrale, sans majoration par gamma_d ni Omega.

Parameters:

Name Type Description Default
etage str

Nom de l'étage considéré, tel que défini lors de add_gravity_load.

ETAGE
eta_torsion_x float

Coefficient de torsion accidentelle dans la direction x, calculé via coeff_torsion_accidentelle(). Defaults to 1.

1
eta_torsion_y float

Coefficient de torsion accidentelle dans la direction y. Defaults to 1.

1
P_delta_x float

Coefficient d'effet du second ordre dans la direction x, calculé via coeff_second_ordre(). Defaults to 1.

1
P_delta_y float

Coefficient d'effet du second ordre dans la direction y. Defaults to 1.

1

Returns:

Name Type Description
tuple tuple

(latex_string, valeurs) où valeurs est un dict {"x": F_s_x, "y": F_s_y} avec les efforts sismiques de dimensionnement en kN (avec unité si.kN).

handcalc

handcalc(override: str = 'short', precision: int = 2, jupyter_display: bool = False, left: str = '\\[', right: str = '\\]')

Remplace handcalcs.decorator.handcalc — compatible Python 3.13+.

Usage identique à l'original :

@handcalc(override="short", precision=2, jupyter_display=self.JUPYTER_DISPLAY,
          left="\\[", right="\\]")
def val():
    x = a + b
    return x

latex_str, result = val()

Parameters:

Name Type Description Default
override str

"short" (défaut) ou "long".

'short'
precision int

Nombre de décimales pour les valeurs numériques.

2
jupyter_display bool

Si True, affiche le LaTeX dans Jupyter via IPython.display.

False
left / right

Délimiteurs LaTeX du bloc (ex. "$$", "\[").

required

Returns:

Type Description

Décorateur qui transforme la fonction en un appelable retournant

(latex_str, résultat_numérique).