Analyse Structurelle par
Éléments Finis
Département : Génie Mécanique
Filière : Génie des Systèmes Mécaniques
Réalisé par :
• Farida Dib
Encadré par :
Mr. JALAL Salah Eddine
2024/2025
Résumé Exécutif
Ce rapport présente une analyse complète d'une structure en treillis soumise à des
charges inclinées. L'analyse a été réalisée par la méthode des éléments finis (MEF) pour
déterminer les déplacements, contraintes et réactions aux appuis. La structure étudiée
est un treillis de 31 nœuds et 74 éléments barres, encastré à sa base et soumis à des
forces de 1800 N inclinées à 15° par rapport à la verticale.
1. Description du Problème
1.1 Géométrie de la Structure
La structure analysée est un treillis plan composé de :
• 31 nœuds répartis sur une hauteur de 28 mètres
• 74 éléments barres en acier
• Appuis aux nœuds 1 et 2 (base de la structure)
• Chargement appliqué aux nœuds 13, 14, 23 et 24
1.2 Propriétés Matériau
• Module d'Young (E) : 210 GPa (acier)
• Coefficient de Poisson (ν) : 0,3
• Section transversale (A) : 28 cm²
1.3 Conditions de Chargement
• Force appliquée : 1800 N par nœud chargé
• Angle d'inclinaison : 15° par rapport à la verticale
• Composantes :
o Force horizontale : Fx = -466,8 N
o Force verticale : Fy = -1738,4 N
2. Méthodologie
2.1 Méthode des Éléments Finis
L'analyse utilise la méthode des éléments finis avec des éléments barres 2D. Chaque
élément est caractérisé par :
• Deux nœuds de connexion
• Comportement axial uniquement (traction/compression)
• Matrice de rigidité élémentaire 4×4
2024/2025
2.2 Assemblage du Système
Le système global est assemblé selon la procédure standard :
1. Calcul des matrices de rigidité élémentaires
2. Assemblage de la matrice de rigidité globale K
3. Application des conditions aux limites
4. Résolution du système Kd = f
2.3 Calcul des Contraintes
Les contraintes sont calculées pour chaque élément selon :
• Déformation axiale : ε = Δl/L
• Contrainte axiale : σ = E × ε
3. Implémentation MATLAB
clc; clear; close all;
%% === Données du problème ===
E = 210e9; % Module d'Young (Pa)
v = 0.3; % Coefficient de Poisson
A = 28e-4; % Section (m²)
F = 1.8e3; % Force (N)
theta_deg = 15; % angle en degrés
%% === Données de géométrie (coordonnées des nœuds) ===
% Coordonnées exactes selon le problème
nodes = [
0, 0; % 1 - base gauche
5, 0; % 2 - base droite
0, 5; %3
5, 5; %4
0, 9; %5
5, 9; %6
1, 9; %7
2024/2025
4, 9; %8
4, 9; %8
1, 15; %9
4, 15; % 10
-2, 16.5; % 11
7, 16.5; % 12
-5, 18; % 13
10, 18; % 14
-2, 18; % 15
7, 18; % 16
1, 18; % 17
4, 18; % 18
1, 21; % 19
4, 21; % 20
-2, 22.5; % 21
7, 22.5; % 22
-5, 24; % 23 - nœud de charge
10, 24; % 24 - nœud de charge
-2, 24; % 25 - nœud de charge
7, 24; % 26 - nœud de charge
1, 24; % 27
4, 24; % 28
1, 26; % 29
4, 26; % 30
2.5, 28 % 31 - sommet
];
nnp = size(nodes,1); % nb de nœuds
2024/2025
ndof = 2; % 2 ddl par nœud (x et y)
nnp = size(nodes,1); % nb de nœuds
ndof = 2; % 2 ddl par nœud (x et y)
neq = nnp * ndof;
%% === Connectivité des barres (IEN) ===
% Définition exacte des éléments selon votre spécification
IEN = [
% Barres verticales principales
1, 3; 2, 4; 3, 5; 4, 6; 5, 7; 6, 8;
7, 9; 8, 10; 9, 17; 10, 18; 11, 15; 12, 16;
17, 19; 18, 20; 19, 27; 20, 28; 21, 25; 22, 26;
27, 29; 28, 30;
% Barres horizontales
1, 2; 3, 4; 5, 6; 7, 8; 9, 10; 13, 15;
15, 17; 18, 16; 16, 14; 19, 20; 23, 25;
25, 27; 27, 28; 28, 26; 26, 24; 29, 30;
% Diagonales
1, 4; 2, 3; 3, 6; 4, 5; 5, 8; 6, 7; 7, 10; 8, 9;
10, 17; 9, 18; 20, 27; 19, 28; 28, 29; 27, 30;
% Barres de contreventement
10, 12; 12, 14; 9, 11; 11, 13; 20, 22; 22, 24;
19, 21; 21, 23; 29, 31; 30, 31;
% Éléments supplémentaires pour la stabilité
21, 27; 22, 28; 11, 17; 12, 18
];
nel = size(IEN,1); % nb d'éléments
fprintf("Nombre de nœuds : %d\n", nnp);
fprintf("Nombre d'éléments : %d\n", nel);
2024/2025
%% === Initialisations ===
K = zeros(neq); % Matrice de rigidité globale
f = zeros(neq,1); % Vecteur de forces
d = zeros(neq,1); % Déplacement nodal
%% === Application des charges ===
% Les charges sont appliquées aux nœuds 23, 24, 25, 26 selon l'énoncé
angle = deg2rad(theta_deg);
F_x = -F * sin(angle); % Composante horizontale
F_y = -F * cos(angle); % Composante verticale
noeuds_charges = [23, 24, 25, 26];
for n = noeuds_charges
f(2*n-1) = f(2*n-1) + F_x; % Force en X
f(2*n) = f(2*n) + F_y; % Force en Y
end
fprintf("Forces appliquées:\n");
fprintf("Fx = %.2f N, Fy = %.2f N\n", F_x, F_y);
%% === Conditions aux limites (encastrement à la base) ===
% Nœuds 1 et 2 sont encastrés (tous les déplacements bloqués)
prescDof = [1, 2, 3, 4]; % ddl des nœuds 1 et 2
activeDof = setdiff(1:neq, prescDof);
%% === Assemblage de la matrice de rigidité ===
fprintf("Assemblage en cours...\n");
for e = 1:nel
% Nœuds de l'élément
ni = IEN(e,1);
nj = IEN(e,2);
% Coordonnées
2024/2025
% Coordonnées
xi = nodes(ni,1); yi = nodes(ni,2);
xj = nodes(nj,1); yj = nodes(nj,2);
% Longueur et cosinus directeurs
L = sqrt((xj - xi)^2 + (yj - yi)^2);
if L < 1e-10
warning('Élément %d a une longueur nulle', e);
continue;
end
cx = (xj - xi)/L;
cy = (yj - yi)/L;
% Matrice de rigidité élémentaire
k_local = (E*A/L) * [
cx^2, cx*cy, -cx^2, -cx*cy;
cx*cy, cy^2, -cx*cy, -cy^2;
-cx^2, -cx*cy, cx^2, cx*cy;
-cx*cy, -cy^2, cx*cy, cy^2
];
% DDL de l'élément
dof = [2*ni-1, 2*ni, 2*nj-1, 2*nj];
% Assemblage
K(dof,dof) = K(dof,dof) + k_local;
end
%% === Résolution du système ===
fprintf("Résolution du système...\n");
% Vérification du conditionnement
cond_K = cond(K(activeDof,activeDof));
% Vérification du conditionnement
cond_K = cond(K(activeDof,activeDof));
fprintf("Conditionnement de K : %.2e\n", cond_K);
if cond_K > 1e12
warning('Matrice mal conditionnée - possible singularité');
end
% Résolution
d(activeDof) = K(activeDof,activeDof) \ f(activeDof);
%% === Calcul des réactions ===
R = K * d - f;
%% === Affichage des résultats ===
fprintf("\n=== RÉSULTATS ===\n");
% Déplacements maximaux
max_disp_x = max(abs(d(1:2:end))) * 1000; % en mm
max_disp_y = max(abs(d(2:2:end))) * 1000; % en mm
fprintf("Déplacement maximal en X : %.3f mm\n", max_disp_x);
fprintf("Déplacement maximal en Y : %.3f mm\n", max_disp_y);
% Réactions aux appuis
fprintf("\nRéactions aux appuis (en N):\n");
fprintf("Nœud 1 - Rx: %.1f N, Ry: %.1f N\n", R(1), R(2));
fprintf("Nœud 2 - Rx: %.1f N, Ry: %.1f N\n", R(3), R(4));
%% === Calcul des contraintes et déformations ===
fprintf("\n=== CONTRAINTES ET DÉFORMATIONS ===\n");
max_stress = 0;
max_strain = 0;
critical_element = 0;
for e = 1:nel
for e = 1:nel
ni = IEN(e,1);
nj = IEN(e,2);
xi = nodes(ni,1); yi = nodes(ni,2);
xj = nodes(nj,1); yj = nodes(nj,2);
L = sqrt((xj - xi)^2 + (yj - yi)^2);
if L < 1e-10
continue;
end
cx = (xj - xi)/L;
cy = (yj - yi)/L;
dof = [2*ni-1, 2*ni, 2*nj-1, 2*nj];
u = d(dof);
% Déformation axiale
delta = [-cx, -cy, cx, cy] * u;
strain = delta / L;
stress = E * strain;
if abs(stress) > abs(max_stress)
max_stress = stress;
max_strain = strain;
critical_element = e;
end
if e <= 10 || mod(e,10) == 0 % Afficher quelques éléments
fprintf('Élément %d : ε = %.3e, σ = %.2f MPa\n', e, strain, stress/1e6);
end
end
fprintf("\nÉlément critique : %d\n", critical_element);
fprintf("\nÉlément critique : %d\n", critical_element);
fprintf("Contrainte maximale : %.2f MPa\n", max_stress/1e6);
fprintf("Déformation maximale : %.3e\n", max_strain);
%% === Vérification de la loi de Hooke ===
sigma_test = E * max_strain;
fprintf("Vérification σ = E×ε : %.2f MPa\n", sigma_test/1e6);
%% === Graphique de la structure ===
figure('Position', [100, 100, 1000, 800]);
% Facteur d'échelle pour la déformation
scale = 500; % Amplification pour visualiser les déformations
% Structure non déformée
subplot(1,2,1);
hold on; axis equal; grid on;
title('Structure initiale');
xlabel('x (m)'); ylabel('y (m)');
for e = 1:nel
ni = IEN(e,1);
nj = IEN(e,2);
xi = nodes(ni,:);
xj = nodes(nj,:);
plot([xi(1), xj(1)], [xi(2), xj(2)], 'b-', 'LineWidth', 1.5);
end
% Numérotation des nœuds
for i = 1:nnp
plot(nodes(i,1), nodes(i,2), 'ro', 'MarkerSize', 4, 'MarkerFaceColor', 'r');
text(nodes(i,1)+0.2, nodes(i,2)+0.2, num2str(i), 'FontSize', 8);
end
% Marquer les appuis
plot(nodes(1,1), nodes(1,2), 's', 'MarkerSize', 10, 'MarkerFaceColor', 'g');
plot(nodes(2,1), nodes(2,2), 's', 'MarkerSize', 10, 'MarkerFaceColor', 'g');
% Structure déformée
subplot(1,2,2);
hold on; axis equal; grid on;
title(sprintf('Structure déformée (échelle ×%d)', scale));
xlabel('x (m)'); ylabel('y (m)');
% Structure initiale en bleu
for e = 1:nel
ni = IEN(e,1);
nj = IEN(e,2);
xi = nodes(ni,:);
xj = nodes(nj,:);
plot([xi(1), xj(1)], [xi(2), xj(2)], 'b-', 'LineWidth', 1, 'Color', [0.7, 0.7, 0.9]);
end
% Structure déformée en rouge
for e = 1:nel
ni = IEN(e,1);
nj = IEN(e,2);
di = d(2*ni-1:2*ni)';
dj = d(2*nj-1:2*nj)';
xi_def = nodes(ni,:) + scale * di;
xj_def = nodes(nj,:) + scale * dj;
plot([xi_def(1), xj_def(1)], [xi_def(2), xj_def(2)], 'r-', 'LineWidth', 1.5);
end
legend('Structure initiale', 'Structure déformée', 'Location', 'best');
legend('Structure initiale', 'Structure déformée', 'Location', 'best');
% Ajuster les axes
xlim_range = [min(nodes(:,1))-2, max(nodes(:,1))+2];
ylim_range = [min(nodes(:,2))-1, max(nodes(:,2))+2];
subplot(1,2,1);
xlim(xlim_range); ylim(ylim_range);
subplot(1,2,2);
xlim(xlim_range); ylim(ylim_range);
fprintf("\n=== ANALYSE TERMINÉE ===\n");
fprintf("Graphique affiché avec succès.\n");
4.1 Déplacements Structurels
L'analyse révèle les déplacements maximaux suivants :
• Déplacement horizontal maximal : Calculé automatiquement par le code
• Déplacement vertical maximal : Calculé automatiquement par le code
4.2 Réactions aux Appuis
Les réactions aux appuis encastrés (nœuds 1 et 2) sont calculées par équilibre :
• Nœud 1 : Composantes Rx et Ry
• Nœud 2 : Composantes Rx et Ry
4.3 Contraintes et Déformations
L'analyse des contraintes permet d'identifier :
• Élément critique : Élément subissant la contrainte maximale
• Contrainte maximale : Valeur et localisation
• Déformation maximale : Valeur correspondante
4.4 Vérification de Cohérence
La loi de Hooke (σ = E × ε) est vérifiée pour valider les calculs.
5. Analyse et Discussion
2024/2025 12