Etrafta “hafif” FEM paketleri var mı?


9

Temel olarak, FEM hemen hemen "çözülmüş" bir sorun gibi görünüyor. Trilinos, PETSc, FEniCS, Libmesh veya MOOSE gibi çok sayıda güçlü çerçeve var.

Ortak noktalarından biri: Son derece “ağır”. İlk olarak, kurulum normalde süper ağrılıdır. İkincisi, arayüzleri / API'ları kalın ve ağırdır - tüm fikrinizi ilgili kütüphanenin düşüncesine çevirmeniz gerekir. Bu, özel gereksinimler veya mevcut kod için birlikte çalışabilirlik ve genişletilebilirliğin zor olduğu anlamına da gelir.

Boost, LibIGL, Aztek (doğrusal çözücü), Eigen veya CGAL gibi diğer projeler, C ++ veya Python koduna sorunsuz bir şekilde entegre olan güçlü kütüphanelerin kurulum gerektirmeden yazmanın kesinlikle mümkün olduğunu göstermektedir. süper ağır bir çerçeve.

FEM için gerçekten hafif bir paket var mı? Kolay, otomajik çözücü aramıyorum - Yalın bir arayüz, ortak veri yapıları ile birlikte çalışabilirlik (örneğin C ++ STL) ve hafif kurulum (yalnızca başlık) korurken güçlü işlevler sunan bir kütüphane arıyorum.


1
FEM kütüphaneleri veya FEM uygulamaları hakkında soru soruyor musunuz?
nicoguaro

2
"Yalın bir arayüzü korurken güçlü fonksiyonlar sunuyor", bu biraz çelişkili değil. Fenics ve deal.ii kullanıyorum ve kurulumu ya da kullanımı zor değil. Fenics, kolayca yükleyebileceğiniz ikili dosyalar ile birlikte gelir. deal.II Linuxbrew, Homebrew, Candi, vb.Gibi birçok kurulum seçeneğine sahiptir. Birini seçip iyi öğrenmenizi tavsiye ederim. İlk öğrenme eğrisini geçtikten sonra iyi sonuç verir. Fenics'i küçük problemler için kullanıyorum, bazı fikirleri hızlı bir şekilde test ediyor ve ayrıca bazı öğretiler için de kullanıyorum. Daha büyük problemler için paralel hesaplama için anlaşmayı tercih ediyorum. Her ikisinin de belgeleri iyi.
cfdlab

1
@PraveenChandrashekar: Güçlü fonksiyonlar ve yalın arayüz kesinlikle çelişkili DEĞİLDİR. Örneğin libigl, boost veya Numpy'ye bir göz atın. Evet, Fenics'in kullanımı kolay görünüyor, ancak örneğin mevcut bir uygulamaya entegre etmek hantal olacaktır. Gerçek zamanlı bir FEM kodunu entegre etmeniz gereken küçük bir oyununuz olduğunu düşünün (örnek olarak).
Michael

2
@PraveenChandrashekar ile hemfikirim ama bunun ötesinde, sorulan soruya cevapsız olduğuna inanıyorum. En azından, FEM ile çözmek istediğiniz bir PDE örneği ve bunu yapmanıza yardımcı olmak için "hafif" bir kitaplık sağlamak istediğiniz işlevselliği sağlamanız gerekir.
Bill Greene

1
Aklıma gelen basit olanı SfePy , indiriyorum ve 7 MB. Ayrıca Hermes'i kontrol ettim ve 10 MB, yine de denemedim (ama Agros 2D'yi denedim). Burada daha fazla seçenek var: en.wikipedia.org/wiki/List_of_finite_element_software_packages
nicoguaro

Yanıtlar:


10

NumPy dizilerinin ve SciPy seyrek matrislerinin gücünü kullanan Python 2.7'de hafif bir sonlu eleman kütüphanesi geliştiriyorum. Genel fikir, bir kafes ve sonlu bir eleman verildiğinde, bilinear form ile (seyrek) bir matris arasında az çok bire bir yazışmanız olduğu yönündedir. Kullanıcı daha sonra uygun matrisi uygun gördüğü gibi kullanabilir.

Poisson denklemini birim yüklemeyle birim karede çözdüğümüz kanonik bir örnek sunayım.

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

Diğer yorumlar:

  • Amacım, örneğin ilgili normlarda teorik yakınsama hızlarının elde edildiğini kontrol ederek titiz yakınsama birimi testleri yazmaktır. Testler her değişiklikte otomatik olarak yapılır.
  • Yeni unsurların uygulanması oldukça kolaydır.

Projeyi GitHub'da bulabilirsiniz .

Kodun Python 3 sürümünü burada bulabilirsiniz .


4

Sanırım biraz karışıklık var. PETSc, Fenics, Libmesh, Moose vb. İle aynı ligde değildir. Aslında, tüm bu (ağır siklet) paketler doğrusal cebir için PETSc kullanır.

IMHO PETSc alabildiğiniz kadar hafiftir. Sadece C / Fortran derleyicileri ve Python (sadece yapılandırma için kullanılır) gerektirir ve kütüphaneyi dizüstü bilgisayarınızda 5 dakikadan daha kısa bir sürede oluşturabilirsiniz. Ayrıca, bir FE kodunun en karmaşık kısmı paralel montaj ve çözmedir ve PETSc her ikisini de halleder. Gerisi (örn., Eleman seviyesi hesaplamaları) oldukça basittir.

Trillinos, OTOH, lineer bir cebir çerçevesinden çok daha fazlasıdır, örneğin, bahsettiğiniz Aztek (doğrusal çözücü). Trillinos'daki Aztek bazı yönlerden PETSc ile karşılaştırılabilir.


1
Bu durumda "paralel montaj" ile tam olarak ne demek istiyorsun? Sadece matris / vektör elemanlarının iletişimi mi yoksa dahası var mı? Manuel yarı-thorougly okudum, ancak montaj hakkında çok fazla bir şey bulamadım (doğrusal çözücüde iletişim dışında) (Manuel: mcs.anl.gov/petsc/petsc-current/docs/manual.pdf )
Michael

4

Fındık tavsiye edebilirim .

somunlar "hafif" gereksinimlerinizi en az birkaçını karşılar.

  • saf python ve kurulumu kolaydır, çünkü sadece standart Python kitaplıklarına numpy , scipy ve matplotlib bağlıdır
  • ve bu nedenle, birlikte çalışma için çok uygundur. En azından geliştiriciler

"Açıkta kalan nesneler yerel python türündedir veya üçüncü taraf araçlarından yararlanmak için kolay dönüşüm sağlar."


Bu çok ilginç bir proje! Farkında değildim ve hedefler benimkine oldukça benziyor. Kesinlikle bazı güzel demo videolar var ...
knl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.