Czy są jakieś „lekkie” pakiety MES?

9

Zasadniczo FEM wydaje się problemem, który jest w zasadzie „rozwiązany”. Istnieje wiele potężnych frameworków, takich jak Trilinos, PETSc, FEniCS, Libmesh lub MOOSE.

Łączy je jedno: są wyjątkowo „ciężkie”. Po pierwsze, instalacja zwykle jest bardzo bolesna. Po drugie, ich interfejs / API jest gruby i ciężki - musisz przełożyć cały swój pomysł na myślenie o odpowiedniej bibliotece. Oznacza to również, że interoperacyjność i możliwość rozszerzenia specjalnych wymagań lub istniejącego kodu jest trudna.

Inne projekty, takie jak (losowe przykłady) Boost, LibIGL, Aztec (solver liniowy), Eigen lub CGAL pokazują, że absolutnie możliwe jest pisanie potężnych bibliotek, które bezproblemowo integrują się z kodem C ++ lub Python, z bardzo wąskim i czystym interfejsem, bez potrzeby instalacji super ciężkich ram.

Czy istnieje naprawdę lekki pakiet dla MES? Nie szukam łatwego, automagicznego rozwiązania - szukam biblioteki, która oferuje potężne funkcje przy jednoczesnym zachowaniu wąskiego interfejsu, interoperacyjności z typowymi strukturami danych (na przykład C ++ STL) i lekkiej instalacji (na przykład tylko nagłówek).

Michał
źródło
1
Czy pytasz o biblioteki FEM lub aplikacje FEM?
nicoguaro
2
„oferuje potężne funkcje przy zachowaniu uproszczonego interfejsu”, nie jest to wcale sprzeczne. Używam Fenics i deal.ii i nie jest to trudne do zainstalowania, a nawet do użycia. Fenics zawiera pliki binarne, które można łatwo zainstalować. deal.II ma wiele opcji instalacji, takich jak Linuxbrew, Homebrew, Candi itp. Polecam wybrać jedną i dobrze się jej nauczyć. Opłaci się dobrze, gdy przekroczysz początkową krzywą uczenia się. Używam Fenics do małych problemów, szybko testuję jakiś pomysł, a także do nauki. W przypadku większych problemów, obliczeń równoległych, wolę deal.II. Oba mają dobrą dokumentację.
cfdlab
1
@PraveenChandrashekar: Potężne funkcje i uproszczony interfejs absolutnie NIE są ze sobą sprzeczne. Spójrz na przykład na libigl, boost lub Numpy. Tak, Fenics wydaje się łatwy w użyciu, ale na przykład integracja z istniejącą aplikacją byłaby uciążliwa. Wyobraź sobie, że masz małą grę, w której musisz zintegrować kod FEM w czasie rzeczywistym (jako przykład).
Michael
2
Zgadzam się z @PraveenChandrashekar, ale poza tym uważam, że postawione pytanie jest niemożliwe do odpowiedzi. Jako minimum musisz podać przykład PDE, który chcesz rozwiązać za pomocą FEM, oraz jaką funkcjonalność chcesz mieć „lekką” bibliotekę, aby ci to pomóc.
Bill Greene
1
Prosty, który przychodzi mi na myśl, to SfePy , pobieram go i ma 7 MB. Sprawdziłem również Hermesa i ma on 10 MB, ale nie próbowałem tego (ale próbowałem Agros 2D). Tutaj jest więcej opcji: en.wikipedia.org/wiki/List_of_finite_element_software_packages
nicoguaro

Odpowiedzi:

10

Opracowałem lekką bibliotekę elementów skończonych w Pythonie 2.7, wykorzystując moc tablic NumPy i rzadkich macierzy SciPy. Ogólna idea jest taka, że ​​biorąc pod uwagę siatkę i element skończony, masz mniej lub bardziej bezpośrednią zgodność między formą dwuliniową a (rzadką) macierzą. Użytkownik może następnie użyć wynikowej macierzy według własnego uznania.

Pozwól mi przedstawić kanoniczny przykład, w którym rozwiązujemy równanie Poissona w kwadracie jednostkowym z ładunkiem jednostkowym.

from spfem.mesh import MeshTri
from spfem.asm import AssemblerElement
from spfem.element import ElementTriP1
from spfem.utils import direct

# Create a triangular mesh. By default, the unit square is meshed.
m=MeshTri()

# Refine the mesh six times by splitting each triangle into four
# subtriangles repeatedly.
m.refine(6)

# Combine the mesh and a type of finite element to create
# an assembler. By default, an affine mapping is used.
a=AssemblerElement(m,ElementTriP1())

# Assemble the bilinear and linear forms. The former outputs
# a SciPy csr_matrix and the latter outputs linear NumPy array.
A=a.iasm(lambda du,dv: du[0]*dv[0]+du[1]*dv[1])
b=a.iasm(lambda v: 1.0*v)

# Solve the linear system in interior nodes using
# a direct solution method provided by SciPy.
x=direct(A,b,I=m.interior_nodes())

# Visualize the solution using Matplotlib.
m.plot3(x)
m.show()

Inne komentarze:

  • Moim celem jest napisanie rygorystycznych testów jednostkowych zbieżności, sprawdzających np., Czy uzyskano teoretyczne współczynniki zbieżności w odpowiednich normach. Testy są uruchamiane automatycznie przy każdej zmianie.
  • Wdrożenie nowych elementów jest dość łatwe.

Możesz znaleźć projekt w GitHub .

Wersja kodu Python 3 można znaleźć tutaj .

knl
źródło
4

Myślę, że masz trochę zamieszania. PETSc nie należy do tej samej ligi co Fenics, Libmesh, Moose itp. W rzeczywistości wszystkie te (ciężkie) pakiety używają PETSc do algebry liniowej.

IMHO PETSc jest tak lekki, jak tylko możesz. Wymaga tylko kompilatorów C / Fortran i Pythona (używanych tylko do konfiguracji), a bibliotekę można zbudować na laptopie w niecałe 5 minut. Ponadto, najbardziej skomplikowaną częścią kodu FE jest montaż równoległy i rozwiązywanie, a PETSc zajmuje się obydwoma. Reszta (np. Obliczenia na poziomie elementu) jest raczej prosta.

Trillinos, OTOH to znacznie więcej niż szkielet algebry liniowej, np. Aztec (solver liniowy), o którym wspominasz, jest jego częścią. W pewnym sensie Azteków w Trillinos można porównać do PETSc.

stali
źródło
1
Co dokładnie rozumiesz przez „równoległy montaż” w tym przypadku? Tylko komunikacja elementów macierzy / wektorów, czy jest coś więcej? Przeczytałem instrukcję częściowo ostrożnie, ale nie znalazłem wiele na temat zestawu (oprócz komunikacji w solverie liniowym) (Podręcznik: mcs.anl.gov/petsc/petsc-current/docs/manual.pdf )
Michael
4

Mogę polecić orzechy .

nutils spełnia co najmniej kilka wymagań dotyczących „lekkości”.

  • jest czystym Pythonem i łatwym w instalacji, ponieważ zależy tylko od standardowych bibliotek Pythona numpy , scipy i matplotlib
  • i dlatego dobrze nadaje się do współpracy. Twierdzą tak przynajmniej programiści

„Odsłonięte obiekty są rodzimego typu python lub umożliwiają łatwą konwersję w celu wykorzystania narzędzi innych firm”.

Jan
źródło
To bardzo interesujący projekt! Nie zdawałem sobie z tego sprawy, a cele wydają się dość podobne do moich. Na pewno mają jakieś fajne filmy demo ...
knl