Fondamentalement, FEM semble être un problème à peu près «résolu». Il existe de nombreux frameworks puissants, comme Trilinos, PETSc, FEniCS, Libmesh ou MOOSE.
Une chose qu'ils ont en commun: ils sont extrêmement "lourds". Tout d'abord, l'installation est normalement super douloureuse. Deuxièmement, leur interface / API est épaisse et lourde - vous devez traduire toute votre idée dans la réflexion de la bibliothèque respective. Cela signifie également que l'interopérabilité et l'extensibilité pour les exigences spéciales ou le code existant est difficile.
D'autres projets comme (exemples aléatoires) Boost, LibIGL, Aztec (solveur linéaire), Eigen ou CGAL démontrent qu'il est absolument possible d'écrire des bibliothèques puissantes qui s'intègrent de manière transparente dans du code C ++ ou Python, avec une interface très allégée et propre, sans avoir besoin d'installation d'un cadre super lourd.
Existe-t-il un package vraiment léger pour FEM? Je ne recherche pas le solveur simple et automagique - je recherche une bibliothèque qui offre des fonctions puissantes tout en maintenant une interface allégée, l'interopérabilité avec des infrastructures de données communes (C ++ STL par exemple) et une installation légère (en-tête uniquement par exemple).
Réponses:
J'ai développé une bibliothèque d'éléments finis légère en Python 2.7 exploitant la puissance des tableaux NumPy et des matrices clairsemées SciPy. L'idée générale est que, étant donné un maillage et un élément fini, vous avez plus ou moins une correspondance biunivoque entre la forme bilinéaire et une matrice (clairsemée). L'utilisateur peut ensuite utiliser la matrice résultante à sa guise.
Permettez-moi de présenter un exemple canonique où nous résolvons l'équation de Poisson dans un carré unitaire avec un chargement unitaire.
Autres commentaires:
Vous pouvez trouver le projet dans GitHub .
La version Python 3 du code peut être trouvée ici .
la source
Je pense que vous avez une certaine confusion. PETSc n'est pas dans la même ligue que Fenics, Libmesh, Moose, etc. En fait, tous ces packages (lourds) utilisent PETSc pour l'algèbre linéaire.
IMHO PETSc est aussi léger que possible. Il ne nécessite que des compilateurs C / Fortran et Python (utilisé uniquement pour la configuration) et vous pouvez créer la bibliothèque en moins de 5 minutes sur votre ordinateur portable. De plus, la partie la plus compliquée d'un code FE est l'assemblage et la résolution parallèles et PETSc s'occupe des deux. Le reste (par exemple, les calculs au niveau des éléments) est assez simple.
Trillinos, OTOH est bien plus qu'un cadre d'algèbre linéaire, par exemple Aztec (solveur linéaire) dont vous parlez en fait partie. À certains égards, Aztec à Trillinos peut être comparé à PETSc.
la source
Je peux recommander des nutils .
nutils répond au moins à quelques-unes de vos exigences "légères".
la source