Basicamente, o FEM parece ser um problema praticamente "resolvido". Existem inúmeras estruturas poderosas, como Trilinos, PETSc, FEniCS, Libmesh ou MOOSE.
Uma coisa que eles têm em comum: são extremamente "pesados". Primeiro, a instalação normalmente é super dolorosa. Segundo, a interface / API deles é espessa e pesada - você precisa traduzir toda a sua ideia no pensamento da respectiva biblioteca. Isso também significa que é difícil interoperabilidade e extensibilidade para requisitos especiais ou código existente.
Outros projetos como (exemplos aleatórios) Boost, LibIGL, Aztec (resolvedor linear), Eigen ou CGAL demonstram que é absolutamente possível escrever bibliotecas poderosas que se integram perfeitamente ao código C ++ ou Python, com uma interface muito enxuta e limpa, sem necessidade de instalação de uma estrutura super pesada.
Existe um pacote realmente leve para o FEM? Não estou procurando o solucionador automático e fácil - estou procurando uma biblioteca que ofereça funções poderosas, mantendo uma interface enxuta, interoperabilidade com estruturas de dados comuns (C ++ STL, por exemplo) e instalação leve (somente cabeçalho, por exemplo).
Respostas:
Desenvolvi uma biblioteca leve de elementos finitos no Python 2.7, aproveitando o poder das matrizes NumPy e matrizes esparsas SciPy. A idéia geral é que, dada uma malha e um elemento finito, você tem uma correspondência mais ou menos um para um entre a forma bilinear e a matriz (esparsa). O usuário pode então usar a matriz resultante como achar melhor.
Deixe-me apresentar um exemplo canônico em que resolvemos a equação de Poisson em um quadrado unitário com uma carga unitária.
Outros comentários:
Você pode encontrar o projeto no GitHub .
A versão Python 3 do código pode ser encontrada aqui .
fonte
Eu acho que você tem alguma confusão. O PETSc não faz parte da mesma liga que Fenics, Libmesh, Moose etc. De fato, todos esses pacotes (pesados) usam o PETSc para álgebra linear.
O IMHO PETSc é o mais leve possível. Requer apenas compiladores C / Fortran e Python (usados apenas para configuração) e você pode criar a biblioteca em menos de 5 minutos no seu laptop. Além disso, a parte mais complicada de um código FE é a montagem e solução paralelas e o PETSc cuida de ambos. O restante (por exemplo, cálculos no nível do elemento) é bastante direto.
Trillinos, OTOH é muito mais do que uma estrutura de álgebra linear, por exemplo, asteca (solucionador linear) que você menciona como parte dela. De certa forma, o asteca em Trillinos pode ser comparado ao PETSc.
fonte
Eu posso recomendar nozes .
Os nutils atendem a pelo menos alguns dos seus requisitos "leves".
fonte