Básicamente, FEM parece ser un problema que está prácticamente "resuelto". Existen numerosos marcos potentes, como Trilinos, PETSc, FEniCS, Libmesh o MOOSE.
Una cosa que tienen en común: son extremadamente "pesados". Primero, la instalación normalmente es muy dolorosa. En segundo lugar, su interfaz / API es gruesa y pesada: debe traducir toda su idea al pensamiento de la biblioteca respectiva. Eso también significa que la interoperabilidad y la capacidad de ampliación para requisitos especiales o código existente es difícil.
Otros proyectos como (ejemplos aleatorios) Boost, LibIGL, Aztec (solucionador lineal), Eigen o CGAL demuestran que es absolutamente posible escribir bibliotecas potentes que se integran perfectamente en código C ++ o Python, con una interfaz muy sencilla y limpia, sin necesidad de instalación de un marco super pesado.
¿Existe un paquete realmente ligero para FEM? No estoy buscando el solucionador automático y fácil: estoy buscando una biblioteca que ofrezca funciones potentes al tiempo que mantiene una interfaz sencilla, interoperabilidad con estructuras de datos comunes (C ++ STL, por ejemplo) e instalación ligera (encabezado solo, por ejemplo).
Respuestas:
He estado desarrollando una biblioteca ligera de elementos finitos en Python 2.7 aprovechando el poder de las matrices NumPy y las matrices dispersas SciPy. La idea general es que, dada una malla y un elemento finito, tiene una correspondencia más o menos uno a uno entre la forma bilineal y una matriz (escasa). El usuario puede usar la matriz resultante como lo considere conveniente.
Permítanme presentar un ejemplo canónico donde resolvemos la ecuación de Poisson en una unidad cuadrada con una unidad de carga.
Otros comentarios:
Puedes encontrar el proyecto en GitHub .
La versión de Python 3 del código se puede encontrar aquí .
fuente
Creo que tienes algo de confusión. PETSc no está en la misma liga que Fenics, Libmesh, Moose, etc. De hecho, todos estos paquetes (de peso pesado) usan PETSc para álgebra lineal.
En mi humilde opinión PETSc es lo más ligero que puedes conseguir. Solo requiere compiladores C / Fortran y Python (se usa solo para la configuración) y puede construir la biblioteca en menos de 5 minutos en su computadora portátil. Además, la parte más complicada de un código FE es el ensamblaje paralelo y la resolución, y PETSc se encarga de ambos. El resto (p. Ej., Cálculos a nivel de elemento) es bastante sencillo.
Trillinos, OTOH es mucho más que un marco de álgebra lineal, por ejemplo, Aztec (solucionador lineal) que usted menciona es parte de él. De alguna manera, Aztec en Trillinos se puede comparar con PETSc.
fuente
Puedo recomendar nutils .
nutils cumple al menos algunos de sus requisitos de "peso ligero".
fuente