Developpez.com - Rubrique Python

Le Club des Développeurs et IT Pro

Apprendre la programmation scientifique des éléments finis avec Python

Un tutoriel de Steven Masfaraud

Le 2017-09-17 23:37:11, par Malick, Community Manager
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.
  Discussion forum
4 commentaires
  • lg_53
    Membre émérite
    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 :
    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 :
    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 ?
  • marco056
    Membre chevronné
    Merci.
    Je trouve cela bien compliqué.
    Pour ma part, je traite cela plus légèrement, peut-être moins rigoureusement aussi...
  • emilie77
    Membre éprouvé
    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?
  • k_crochet_x
    Candidat au Club
    Envoyé par Malick
    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?