0% ont trouvé ce document utile (0 vote)
7 vues1 page

Code Python

Ce code Python calcule les déplacements d'une barre 1D sous un déplacement imposé au milieu en utilisant la méthode des éléments finis. Il définit la matrice de rigidité élémentaire, assemble la matrice globale et résout le système en tenant compte des conditions aux limites. Le programme principal exécute le calcul pour différents nombres d'éléments et affiche les déplacements nodaux correspondants.

Transféré par

Oussema Faidi
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues1 page

Code Python

Ce code Python calcule les déplacements d'une barre 1D sous un déplacement imposé au milieu en utilisant la méthode des éléments finis. Il définit la matrice de rigidité élémentaire, assemble la matrice globale et résout le système en tenant compte des conditions aux limites. Le programme principal exécute le calcul pour différents nombres d'éléments et affiche les déplacements nodaux correspondants.

Transféré par

Oussema Faidi
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 PDF, TXT ou lisez en ligne sur Scribd

Code Python - Calcul EF Barre 1D

import numpy as np

# Données du problème
E = 2 * 10**6
H = 0.004
L = 8
B = 0.01
A = B * H
U_impose = 5000 # Déplacement imposé au milieu

# Matrice de rigidité élémentaire


def element_stiffness(E, A, Le):
return (E * A) / Le * [Link]([[1, -1],
[-1, 1]])

# Assemblage de la matrice globale


def assemble_global_stiffness(N):
Le = L / N
k = element_stiffness(E, A, Le)
size = N + 1
K_global = [Link]((size, size))

for i in range(N):
K_global[i:i+2, i:i+2] += k

return K_global

# Résolution avec déplacement imposé


def solve_system(N):
K = assemble_global_stiffness(N)
size = N + 1

F_global = [Link](size)

# Conditions aux limites


fixed_dofs = [0, size-1, N//2] # extrémités + milieu
u = [Link](size)
u[N//2] = U_impose

free_dofs = [i for i in range(size) if i not in fixed_dofs]

# Réduction du système
K_ff = K[np.ix_(free_dofs, free_dofs)]
K_fc = K[np.ix_(free_dofs, fixed_dofs)]
F_f = F_global[free_dofs] - K_fc @ u[fixed_dofs]

# Résolution
u[free_dofs] = [Link](K_ff, F_f)

return u

# Programme principal
for N in [2, 4, 8, 16]:
U = solve_system(N)
print(f"\nNombre d'éléments = {N}")
print("Déplacements nodaux (m) :")
print(U)

Vous aimerez peut-être aussi