Có bất kỳ gói FEM nào có trọng lượng nhẹ của xung quanh không?


9

Về cơ bản, FEM dường như là một vấn đề được "giải quyết" khá nhiều. Có rất nhiều khung công tác mạnh mẽ hiện có, như Trilinos, PETSc, FEniCS, Libmesh hoặc MOOSE.

Một điểm chung họ có: Họ cực kỳ "nặng cân". Đầu tiên, cài đặt bình thường là siêu đau đớn. Thứ hai, giao diện / API của chúng dày và nặng - bạn phải dịch toàn bộ ý tưởng của mình vào suy nghĩ của thư viện tương ứng. Điều đó cũng có nghĩa là, khả năng tương tác và khả năng mở rộng cho các yêu cầu đặc biệt hoặc mã hiện có là khó khăn.

Các dự án khác như (ví dụ ngẫu nhiên) Boost, LibIGL, Aztec (bộ giải tuyến tính), Eigen hoặc CGAL chứng minh rằng hoàn toàn có thể viết các thư viện mạnh mẽ tích hợp liền mạch vào mã C ++ hoặc Python, với giao diện rất gọn gàng và sạch sẽ, không cần cài đặt của một khung siêu nặng.

Có một gói thực sự nhẹ cho FEM? Tôi không tìm kiếm bộ giải dễ dàng, tự động - Tôi đang tìm một thư viện cung cấp các chức năng mạnh mẽ trong khi duy trì giao diện tinh gọn, khả năng tương tác với các cơ sở dữ liệu thông thường (ví dụ C ++ STL) và cài đặt nhẹ (ví dụ chỉ tiêu đề).


1
Bạn đang hỏi về thư viện FEM hoặc ứng dụng FEM?
nicoguaro

2
"Cung cấp các chức năng mạnh mẽ trong khi duy trì giao diện tinh gọn", đây không phải là điều mâu thuẫn. Tôi sử dụng Fenics và deal.ii và không khó để cài đặt hoặc thậm chí sử dụng. Fenics đi kèm với nhị phân mà bạn có thể dễ dàng cài đặt. deal.II có nhiều tùy chọn cài đặt như thông qua Linuxbrew, Homebrew, Candi, v.v. Tôi khuyên bạn nên chọn một tùy chọn và học tốt nó. Nó sẽ được đền đáp xứng đáng khi bạn vượt qua giai đoạn học tập ban đầu. Tôi sử dụng Fenics cho các vấn đề nhỏ, nhanh chóng thử nghiệm một số ý tưởng và cũng cho một số giảng dạy. Đối với các vấn đề lớn hơn, tính toán song song, tôi thích deal.II. Cả hai đều có tài liệu tốt.
cfdlab

1
@PraveenChandrashekar: Các chức năng mạnh mẽ và giao diện tinh gọn hoàn toàn KHÔNG mâu thuẫn. Có một cái nhìn vào libigl, boost hoặc Numpy chẳng hạn. Đúng, Fenics có vẻ dễ sử dụng, nhưng sẽ rất khó để tích hợp, ví dụ như trong một ứng dụng hiện có. Hãy tưởng tượng bạn có một trò chơi nhỏ trong đó bạn cần tích hợp mã FEM thời gian thực (chỉ là một ví dụ).
Michael

2
Tôi đồng ý với @PraveenChandrashekar nhưng ngoài ra, tôi tin rằng câu hỏi, như được đặt ra, là không thể trả lời được. Tối thiểu, bạn cần cung cấp một ví dụ về PDE mà bạn muốn giải quyết với FEM và chức năng mà bạn muốn một thư viện "nhẹ" cung cấp để giúp bạn làm điều đó.
Bill Greene

1
Một thứ đơn giản xuất hiện trong đầu tôi là SfePy , tôi tải xuống và nó có dung lượng 7 MB. Tôi cũng đã kiểm tra Hermes và nó là 10 MB, tôi chưa thử nó (nhưng tôi đã thử Agros 2D). Có nhiều lựa chọn hơn ở đây: en.wikipedia.org/wiki/List_of_finite_element_software_packages
nicoguaro

Câu trả lời:


10

Tôi đã phát triển một thư viện phần tử hữu hạn nhẹ trong Python 2.7 khai thác sức mạnh của mảng NumPy và ma trận thưa thớt SciPy. Ý tưởng chung là được đưa ra một lưới và một phần tử hữu hạn, bạn có ít nhiều sự tương ứng một-một giữa một dạng song tuyến và ma trận (thưa thớt). Sau đó, người dùng có thể sử dụng ma trận kết quả khi thấy phù hợp.

Hãy để tôi trình bày một ví dụ kinh điển trong đó chúng ta giải phương trình Poisson trong một hình vuông đơn vị với một đơn vị đang tải.

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()

Những bình luận khác:

  • Mục tiêu của tôi là viết các bài kiểm tra đơn vị hội tụ nghiêm ngặt, ví dụ kiểm tra tỷ lệ hội tụ lý thuyết trong các chỉ tiêu tương ứng. Các thử nghiệm được chạy tự động trên mỗi thay đổi.
  • Thực hiện các yếu tố mới là khá dễ dàng.

Bạn có thể tìm thấy dự án trong GitHub .

Phiên bản Python 3 của mã có thể được tìm thấy ở đây .


4

Tôi nghĩ rằng bạn có một số nhầm lẫn. PETSc không nằm trong cùng một giải đấu như Fenics, Libmesh, Moose, v.v. Trên thực tế, tất cả các gói (hạng nặng) này đều sử dụng PETSc cho đại số tuyến tính.

IMHO PETSc rất nhẹ như bạn có thể nhận được. Nó chỉ yêu cầu trình biên dịch C / Fortran và Python (chỉ được sử dụng cho cấu hình) và bạn có thể xây dựng thư viện dưới 5 phút trên máy tính xách tay của mình. Ngoài ra, phần phức tạp nhất của mã FE là lắp ráp và giải quyết song song và PETSc sẽ chăm sóc cả hai. Phần còn lại (ví dụ, tính toán mức phần tử) khá đơn giản.

Trillinos, OTOH không chỉ là một khung đại số tuyến tính, ví dụ, Aztec (bộ giải tuyến tính) mà bạn đề cập là một phần của nó. Trong một số cách, Aztec ở Trillinos có thể được so sánh với PETSc.


1
Chính xác thì bạn có ý gì khi "lắp ráp song song" trong trường hợp đó? Chỉ là giao tiếp của các yếu tố ma trận / vector, hoặc có nhiều hơn? Tôi đã đọc hướng dẫn bán tự động, nhưng tôi không tìm thấy nhiều về lắp ráp (ngoài giao tiếp trong bộ giải tuyến tính) (Hướng dẫn: mcs.anl.gov/petsc/petsc-cản/docs/manual.pdf )
Michael

4

Tôi có thể giới thiệu các loại hạt .

nutils đáp ứng ít nhất một vài yêu cầu "trọng lượng nhẹ" của bạn.

  • nó là trăn tinh khiết và dễ dàng để cài đặt vì nó chỉ phụ thuộc vào tiêu chuẩn Python thư viện NumPy , scipy , và matplotlib
  • và, do đó, nó rất phù hợp cho các hoạt động tương tác. Ít nhất là các nhà phát triển tuyên bố rằng

"Các đối tượng tiếp xúc là loại trăn bản địa hoặc cho phép chuyển đổi dễ dàng để tận dụng các công cụ của bên thứ ba."


Đây là một dự án rất thú vị! Tôi đã không nhận thức được nó và các mục tiêu dường như khá giống với mục tiêu của tôi. Họ chắc chắn có một số video demo tuyệt vời ...
knl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.