math-fem
Multigrid FEM solver for the Helmholtz equation.
Installation
Add to your Cargo.toml:
[]
= { = "../math-fem" }
Features
- 2D and 3D meshes: Triangles, quadrilaterals, tetrahedra, hexahedra
- Lagrange elements: P1, P2, P3 polynomial basis functions
- Boundary conditions: Dirichlet, Neumann, Robin, PML
- Multigrid solver: V-cycle, W-cycle with geometric coarsening
- Adaptive refinement: h-refinement with residual-based error estimation
Usage
use ;
// Create a 2D mesh
let mesh = unit_square_triangles;
// Create a 3D mesh
let mesh_3d = unit_cube_tetrahedra;
Modules
mesh
Mesh generators for common domains:
use *;
// 2D meshes
let rect = rectangular_mesh_triangles;
let quads = rectangular_mesh_quads;
let circle = circular_mesh_triangles;
let annulus = annular_mesh_triangles;
// 3D meshes
let box_tet = box_mesh_tetrahedra;
let box_hex = box_mesh_hexahedra;
// Convenience functions
let square = unit_square_triangles;
let cube = unit_cube_tetrahedra;
basis
Lagrange polynomial basis functions:
- P1, P2, P3 for simplices (triangles, tetrahedra)
- Q1, Q2 for quads/hexes
boundary
Boundary condition handling:
use BoundaryConditions;
use Complex64;
let mut bcs = new;
// Dirichlet: u = g on boundary
bcs.add_dirichlet;
// Neumann: du/dn = h on boundary
bcs.add_neumann;
// Robin: du/dn + alpha*u = g on boundary
bcs.add_robin;
assembly
Matrix assembly for FEM:
- Stiffness matrix assembly
- Mass matrix assembly
- Helmholtz matrix (K - k²M)
quadrature
Gaussian quadrature rules for numerical integration.
multigrid
Geometric multigrid solver:
- V-cycle, W-cycle, F-cycle methods
- Gauss-Seidel smoothing
- Linear interpolation transfer operators
Element Types
| Element | Dimension | Nodes (P1) | Nodes (P2) |
|---|---|---|---|
| Triangle | 2D | 3 | 6 |
| Quadrilateral | 2D | 4 | 9 |
| Tetrahedron | 3D | 4 | 10 |
| Hexahedron | 3D | 8 | 27 |
Feature Flags
native(default) - Enables rayon parallelism and native BLASparallel- Enables rayon for parallel assembly
Dependencies
math-solvers- Sparse linear algebra solversndarray- N-dimensional arraysnum-complex- Complex number supportrayon(optional) - Parallel processing