IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Apprendre la programmation scientifique des éléments finis avec Python
Un tutoriel de Steven Masfaraud

Le , par Malick

21PARTAGES

10  0 
Chers membres du club,

J'ai le plaisir de vous présenter ce tutoriel de Steven Masfaraud :

Apprendre Python scientifique pour les éléments finis
Ce cours présente les outils de Python utilisables pour les éléments finis (matrices, vecteurs) pour aboutir à un code élément fini pour une poutre en traction. Sont présentées également des méthodes pour visualiser et vérifier les résultats produits.
Bonne lecture

Retrouvez les meilleurs cours et tutoriels pour apprendre Python.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de lg_53
Membre émérite https://www.developpez.com
Le 18/09/2017 à 9:41
Merci pour cet update, qui du coup m'a fait découvrir qu'il existait un tuto pour les éléments finis.
J'aimerais commenter plusieurs points.

1)
Le problème est que pour Python, la division d'un entier donne un entier (division euclidienne). Pour le forcer à considérer i comme un réel, on lui convertit explicitement i en réel en appelant float(i).
Ceci dit, depuis l'arrivée de Python 3, il y a quand même eu quelques évolutions...

2) A ce même endroit, pourquoi faire remplir le tableau valeur par valeur comme ça :
Code : Sélectionner tout
1
2
3
4
5
# Maillage
# Generation de la table coor
coor = np.zeros((ne+1,1)) # Initialisation
for i in range(ne+1):
    coor[i,0]=(float(i)/(ne))*L
alors qu'on a np.linspace ou bien np.arange, qui sont beaucoup plus performant ?

3)
Code : Sélectionner tout
1
2
3
4
# Prise en compte des CL
Kii = np.delete(K,0,0)
Kii = np.delete(Kii,0,1)
Fi = np.delete(F,0,0)
Pourquoi faire des delete ? Pourquoi ce double stockage ? Dans un cas général, cela va être une très grosse matrice. Il semble donc raisonnable d'en éviter la copie.
Peut-être est-ce pour réduire la taille du système vu que l'on connait la donnée au bord (ce que je présume), on l'enlève du système et on la rajoute après résolution du système. Mais ca reste moins rentable avec ces copies et ces réallocations que cela engendre. Et de plus si on a un autre type de condition limite, avec cette technique, on est coincé.
Pourquoi ne pas directement construire une matrice qui ait, d'emblée, la même taille que le maillage, quitte à en updater la première et la dernière ligne si la condition limite l'exige et à ne travailler qu'avec cette matrice ?
2  0 
Avatar de marco056
Membre chevronné https://www.developpez.com
Le 18/09/2017 à 7:36
Merci.
Je trouve cela bien compliqué.
Pour ma part, je traite cela plus légèrement, peut-être moins rigoureusement aussi...
0  0 
Avatar de emilie77
Membre éprouvé https://www.developpez.com
Le 19/09/2017 à 8:07
Merci beaucoup,
j'ai trouvé très utile ce tutoriel. Est-ce qu'il serait possibile de l'etendre pour le calcul d'une structure 2d?
0  0 
Avatar de k_crochet_x
Candidat au Club https://www.developpez.com
Le 14/08/2019 à 12:34
Citation Envoyé par Malick Voir le message
Chers membres du club,

J'ai le plaisir de vous présenter ce tutoriel de Steven Masfaraud :



Bonne lecture

Retrouvez les meilleurs cours et tutoriels pour apprendre Python.
Bonjour , je viens d'executer le programme et il ne marche que pour un ne=1 et lorsque je l'augmente , ma matrice devient singulière .Je suis débutant en éléments finis , quelqu'un pourrait m'apporter une explication svp?
0  0