__ __ __ ____ ____
/\ \/\ \ /\ \__ /\ _`\ /\ _`\ /'\_/`\
\ \ \ \ \ __ _ __\ \ ,_\ __ __ _\ \ \L\_\ \ \L\_\/\ \
\ \ \ \ \ /'__`\/\`'__\ \ \/ /'__`\/\ \/'\\ \ _\/\ \ _\L\ \ \__\ \
\ \ \_/ \/\ __/\ \ \/ \ \ \_/\ __/\/> </ \ \ \/ \ \ \L\ \ \ \_/\ \
\ `\___/\ \____\\ \_\ \ \__\ \____\/\_/\_\ \ \_\ \ \____/\ \_\\ \_\
`\/__/ \/____/ \/_/ \/__/\/____/\//\/_/ \/_/ \/___/ \/_/ \/_/
🚧 Under construction — Architecture design phase, core modules not yet implemented. Infrastructure (error handling, memory manager, benchmarking) is complete.
Vertex-centered Finite Element Method library — work in progress.
VertexFEM is a high-performance C++20 library for vertex-centered finite element methods, targeting both CPU and GPU architectures with MPI-based distributed parallelism.
Status: Early development (v0.1.0). Core APIs are unstable and substantial modules are still being implemented. Not ready for production use.
- Vertex-centered FEM formulation — unknowns reside at mesh vertices, enabling natural coupling with vertex-based discretizations
- Multi-backend GPU support — CUDA, HIP, and SYCL via unified
__host__ __device__abstractions - Distributed memory — MPI parallelism with optional solvers: PETSc, SLEPc, MUMPS, SuperLU_DIST
- Dual precision — compile-time selection of
floatordoubleviaVFEM_USE_DOUBLE/VFEM_USE_SINGLE - Flexible memory management — host, device, managed, and pinned allocations with Umpire integration
- Modular design — mesh, finite element spaces, assembly, linear algebra, solvers, and I/O as independent modules
- Compiler: GCC 11+ or Clang 14+ with C++20 support
- Build system: CMake ≥ 3.14
- Optional dependencies:
- MPI (for distributed parallelism)
- CUDA / HIP / SYCL (for GPU offload)
- PETSc / SLEPc / MUMPS / SuperLU_DIST (for advanced solvers)
- Umpire (for memory pool management)
git clone https://github.com/VertexFEM/VertexFEM.git
cd VertexFEM
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build| Option | Default | Description |
|---|---|---|
VFEM_USE_DOUBLE |
ON |
Use double precision; disable for single precision |
VERTEXFEM_BUILD_TESTS |
ON |
Build the test / benchmark harness |
VertexFEM/
├── config/ # Compile-time configuration & platform detection
├── include/ # Public headers
│ ├── asm/ # Assembly routines
│ ├── base/ # Memory management & error handling
│ ├── fem/ # Finite element spaces
│ ├── io/ # Mesh I/O
│ ├── linalg/ # Linear algebra
│ ├── mesh/ # Mesh data structures
│ ├── solver/ # Linear & nonlinear solvers
│ └── utils/ # Utilities & benchmarking
├── src/ # Implementation files (mirrors include/)
├── test/ # Tests & microbenchmarks
├── data/ # Sample mesh files
└── 3party/ # Third-party dependencies
See the CTest guide for build and test commands.
This project is licensed under the Academic Free License v3.0. See LICENSE for details.