0% ont trouvé ce document utile (0 vote)
46 vues2 pages

Assemblage de la matrice de rigidité

Ce document décrit la méthode des éléments finis pour résoudre un problème de structure. Il définit les paramètres du système, assemble la matrice de rigidité globale, applique les conditions aux limites, résout pour les déplacements et calcule les forces de réaction.

Transféré par

achour belkacem
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
46 vues2 pages

Assemblage de la matrice de rigidité

Ce document décrit la méthode des éléments finis pour résoudre un problème de structure. Il définit les paramètres du système, assemble la matrice de rigidité globale, applique les conditions aux limites, résout pour les déplacements et calcule les forces de réaction.

Transféré par

achour belkacem
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats TXT, PDF, TXT ou lisez en ligne sur Scribd

import numpy as np

from [Link] import solve

# Définir les paramètres du système


nb_noeuds = 4
nb_elements = 3
nb_ddl = 2 * nb_noeuds # Chaque nœud a 2 degrés de liberté (x et y)

# Coordonnées nodales (x, y)


coordonnees = [Link]([
[0, 0],
[4, 0],
[4, 3],
[8, 0]
])

# Connectivité des éléments et matrice de rigidité


elements = [Link]([
[0, 1],
[1, 2],
[1, 3]
])

# Propriétés du matériau et aire de la section transversale


E = 200e9 # Module de Young (Pa)
A = 0.01 # Aire de la section transversale (m^2)

# Assembler la matrice de rigidité globale


K_globale = [Link]((nb_ddl, nb_ddl))
for element in elements:
noeud_i, noeud_j = element
x_i, y_i = coordonnees[noeud_i]
x_j, y_j = coordonnees[noeud_j]

longueur = [Link]((x_j - x_i)**2 + (y_j - y_i)**2)


cos_theta = (x_j - x_i) / longueur
sin_theta = (y_j - y_i) / longueur

k_local = (E * A / longueur) * [Link]([


[cos_theta**2, cos_theta * sin_theta, -cos_theta**2, -cos_theta *
sin_theta],
[cos_theta * sin_theta, sin_theta**2, -cos_theta * sin_theta, -
sin_theta**2],
[-cos_theta**2, -cos_theta * sin_theta, cos_theta**2, cos_theta *
sin_theta],
[-cos_theta * sin_theta, -sin_theta**2, cos_theta * sin_theta,
sin_theta**2]
])

ddl_i = [2 * noeud_i, 2 * noeud_i + 1]


ddl_j = [2 * noeud_j, 2 * noeud_j + 1]

K_globale[np.ix_(ddl_i, ddl_i)] += k_local[:2, :2]


K_globale[np.ix_(ddl_i, ddl_j)] += k_local[:2, 2:]
K_globale[np.ix_(ddl_j, ddl_i)] += k_local[2:, :2]
K_globale[np.ix_(ddl_j, ddl_j)] += k_local[2:, 2:]

# Appliquer les conditions aux limites (contraintes de déplacement)


ddl_connus = [0, 1, 6] # Exemple de déplacements connus
K_reduite = [Link]([Link](K_globale, ddl_connus, axis=0), ddl_connus, axis=1)

# Vecteur de charges (forces)


F_charge = [Link](nb_ddl)
F_charge[7] = -10000 # Appliquer une force vers le bas au nœud 3

# Résoudre pour les déplacements


deplacements = [Link](nb_ddl)
ddl_inconnus = [2, 3, 4, 5, 8, 9]
deplacements[ddl_inconnus] = solve(K_reduite, F_charge[ddl_inconnus])

# Calculer les forces de réaction


F_reactions = [Link](K_globale[ddl_connus, :], deplacements)

print("Déplacements:")
print(deplacements)
print("Forces de réaction:")
print(F_reactions)

Vous aimerez peut-être aussi