มีแพ็คเกจ FEM“ น้ำหนักเบา” หรือไม่?


9

โดยทั่วไปแล้ว FEM ดูเหมือนจะเป็นปัญหาที่ "แก้ไข" ได้ค่อนข้างมาก มีเฟรมเวิร์กที่ทรงพลังมากมายเช่น Trilinos, PETSc, FEniCS, Libmesh หรือ MOOSE

สิ่งหนึ่งที่พวกเขามีเหมือนกัน: พวกเขาเป็น "น้ำหนักมาก" ก่อนอื่นการติดตั้งปกติจะเจ็บปวดสุด ๆ ประการที่สองอินเทอร์เฟซ / API หนาและหนา - คุณต้องแปลความคิดทั้งหมดของคุณให้เป็นความคิดของห้องสมุดที่เกี่ยวข้อง นั่นหมายความว่าการทำงานร่วมกันและการขยายสำหรับข้อกำหนดพิเศษหรือรหัสที่มีอยู่เป็นเรื่องยาก

โครงการอื่น ๆ เช่น (ตัวอย่างแบบสุ่ม) Boost, LibIGL, Aztec (ตัวแก้ปัญหาเชิงเส้น), Eigen หรือ CGAL แสดงให้เห็นว่าเป็นไปได้อย่างแน่นอนที่จะเขียนไลบรารีที่ทรงพลังที่รวมเข้ากับโค้ด C ++ หรือ Python ได้อย่างราบรื่นโดยไม่ต้องติดตั้ง ของกรอบหนักสุด

มีแพ็คเกจที่เบามากสำหรับ FEM หรือไม่? ฉันไม่ได้มองหาวิธีแก้ปัญหาที่ง่ายและเป็นระบบอัตโนมัติ - ฉันกำลังมองหาห้องสมุดที่มีฟังก์ชั่นที่ทรงพลังในขณะที่รักษาอินเตอร์เฟสแบบลีนความสามารถในการทำงานร่วมกันกับโครงสร้างข้อมูลทั่วไป (เช่น C ++ STL) และการติดตั้งน้ำหนักเบา


1
คุณกำลังถามเกี่ยวกับไลบรารี FEM หรือแอปพลิเคชัน FEM หรือไม่
nicoguaro

2
"เสนอฟังก์ชั่นที่ทรงพลังในขณะที่ยังคงอินเทอร์เฟซแบบลีน" ไม่ใช่ความขัดแย้งนี้ ฉันใช้ Fenics และ deal.ii และไม่ยากที่จะติดตั้งหรือแม้กระทั่งใช้ Fenics มาพร้อมกับไบนารีที่คุณสามารถติดตั้งได้อย่างง่ายดาย deal.II มีตัวเลือกการติดตั้งมากมายเช่นผ่าน Linuxbrew, Homebrew, Candi และอื่น ๆ ฉันขอแนะนำให้เลือกหนึ่งและเรียนรู้ได้ดี มันจะได้ผลดีเมื่อคุณข้ามเส้นโค้งการเรียนรู้เริ่มต้น ฉันใช้ Fenics สำหรับปัญหาเล็ก ๆ ทดสอบความคิดบางอย่างและสำหรับการสอนด้วย สำหรับปัญหาที่ใหญ่กว่าการคำนวณแบบขนานฉันชอบดีลมาก ทั้งคู่มีเอกสารที่ดี
cfdlab

1
@PraveenChandrashekar: ฟังก์ชั่นที่มีประสิทธิภาพและส่วนต่อประสานแบบลีนนั้นไม่ขัดแย้งกันอย่างแน่นอน ตัวอย่างเช่นดู libigl, boost หรือ Numpy ใช่ Fenics ดูเหมือนจะใช้งานง่าย แต่มันจะยุ่งยากในการรวมตัวอย่างเช่นในแอปพลิเคชันที่มีอยู่ ลองนึกภาพว่าคุณมีเกมเล็ก ๆ ที่คุณต้องรวมรหัส FEM แบบเรียลไทม์ (เช่นเป็นตัวอย่าง)
Michael

2
ฉันเห็นด้วยกับ @PraveenChandrashekar แต่นอกเหนือจากนั้นฉันเชื่อว่าคำถามที่ถูกโพสต์ไม่สามารถตอบได้ อย่างน้อยที่สุดคุณจะต้องให้ตัวอย่างของ PDE ที่คุณต้องการแก้ไขด้วย FEM และฟังก์ชั่นที่คุณต้องการให้ห้องสมุด "น้ำหนักเบา" จัดทำขึ้นเพื่อช่วยคุณทำเช่นนั้น
Bill Greene

1
สิ่งที่อยู่ในใจของฉันคือSfePyฉันดาวน์โหลดมันและมันคือ 7 MB ฉันตรวจสอบHermesด้วยและมันคือ 10 MB ฉันไม่ได้ลองเลย (แต่ฉันได้ลอง Agros 2D) มีตัวเลือกเพิ่มเติมที่นี่: en.wikipedia.org/wiki/List_of_finite_element_software_packages
nicoguaro

คำตอบ:


10

ฉันได้พัฒนาไลบรารี่ไฟไนต์ไลต์ใน Python 2.7 ที่ควบคุมพลังของอาร์เรย์ NumPy และเมทริกซ์กระจัดกระจาย SciPy ความคิดทั่วไปคือการที่ได้รับตาข่ายและองค์ประกอบที่ จำกัด คุณมีการติดต่อแบบหนึ่งต่อหนึ่งมากขึ้นระหว่างรูปแบบ bilinear และเมทริกซ์ (กระจัดกระจาย) ผู้ใช้สามารถใช้เมทริกซ์ที่ได้ตามที่เขาเห็นว่าเหมาะสม

ให้ฉันนำเสนอตัวอย่างบัญญัติซึ่งเราแก้สมการปัวซองในหน่วยสี่เหลี่ยมด้วยการโหลดหน่วย

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

ความคิดเห็นอื่น ๆ:

  • เป้าหมายของฉันคือการเขียนการทดสอบการบรรจบกันอย่างเข้มงวดเช่นการตรวจสอบว่าอัตราการลู่เข้าทางทฤษฎีในบรรทัดฐานนั้นได้รับมา การทดสอบจะดำเนินการโดยอัตโนมัติในการเปลี่ยนแปลงแต่ละครั้ง
  • การใช้องค์ประกอบใหม่นั้นค่อนข้างง่าย

คุณสามารถค้นหาโครงการใน GitHub

งูหลาม 3 รุ่นของรหัสที่สามารถพบได้ที่นี่


4

ฉันคิดว่าคุณมีความสับสน PETSc ไม่ได้อยู่ในลีกเดียวกันกับ Fenics, Libmesh, Moose ฯลฯ ในความเป็นจริงแพ็คเกจทั้งหมด (เฮฟวี่เวท) เหล่านี้ใช้ PETSc สำหรับพีชคณิตเชิงเส้น

IMHO PETSc มีน้ำหนักเบาเท่าที่คุณจะได้รับ มันต้องการคอมไพเลอร์ C / Fortran และ Python (ใช้สำหรับการกำหนดค่าเท่านั้น) และคุณสามารถสร้างไลบรารี่ภายในไม่ถึง 5 นาทีบนแล็ปท็อปของคุณ นอกจากนี้ส่วนที่ซับซ้อนที่สุดของรหัส FE คือการประกอบแบบขนานและแก้ปัญหาและ PETSc ดูแลทั้งสองอย่าง ส่วนที่เหลือ (เช่นการคำนวณระดับองค์ประกอบ) ค่อนข้างตรงไปตรงมา

Trillinos, OTOH เป็นมากกว่ากรอบพีชคณิตเชิงเส้นเช่น Aztec (ตัวแก้เชิงเส้น) ที่คุณพูดถึงเป็นส่วนหนึ่งของมัน ในบางวิธี Aztec ใน Trillinos สามารถเปรียบเทียบกับ PETSc


1
คุณหมายถึงอะไรโดย "การชุมนุมคู่ขนาน" ในกรณีนั้น? แค่การสื่อสารขององค์ประกอบเมทริกซ์ / เวกเตอร์หรือมากกว่านั้น? ฉันอ่านคู่มือกึ่ง thorougly แต่ฉันไม่พบมากเกี่ยวกับการชุมนุม (นอกเหนือจากการสื่อสารในการแก้ปัญหาเชิงเส้น) (คู่มือ: mcs.anl.gov/petsc/petsc-current/docs/manual.pdf )
Michael

4

ฉันสามารถขอแนะนำnutils

nutilsตอบสนองความต้องการ "น้ำหนักเบา" อย่างน้อยของคุณ

  • มันเป็นงูหลามบริสุทธิ์และง่ายต่อการติดตั้งเนื่องจากมันขึ้นอยู่กับไลบรารี Python มาตรฐานเท่านั้นคือnumpy , scipyและmatplotlib
  • และดังนั้นจึงเหมาะสำหรับการทำงานร่วมกัน อย่างน้อยนักพัฒนาอ้างว่า

"ออบเจ็กต์ที่เปิดเผยเป็นภาษาไพ ธ อนดั้งเดิมหรืออนุญาตให้ทำการแปลงได้อย่างง่ายดายเพื่อใช้ประโยชน์จากเครื่องมือของบุคคลที่สาม"


นี่เป็นโครงการที่น่าสนใจมาก! ฉันไม่ทราบและดูเหมือนว่าเป้าหมายจะค่อนข้างคล้ายกับของฉัน พวกเขาก็มีวิดีโอสาธิตที่ดีบางอย่าง ...
KNL
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.