FES is a modular finite element framework designed around weighted residual methods, with emphasis on portability and clear separation of geometry, physics, and project flow.
- Finite element and method of moments (MoM) wave-equation workflows.
- Mesh processing via Triangle and TetGen.
- Linear algebra and eigenvalue backend built on OpenBLAS, ARPACK-NG, and MUMPS.
- Model-driven runs using
.polyand.vtpproject inputs.
configure: bootstrap script for dependency build + core build.core/: main C++ source tree and CMake project.dep/: downloaded third-party sources, build tree, and installed artifacts (created byconfigure --dependencies).mdl/: sample input models (.poly) for quick runs.Makefile: convenience build targets for the core project.
You need a Unix-like environment (Linux or macOS) with:
gitcmakemake- C/C++/Fortran toolchain (
gcc,g++,gfortran)
The configure script can install compiler/build-tool packages when requested.
From repository root:
chmod +x configure
./configure --compiler --dependenciesUse --compiler when you want the script to install system packages:
- macOS: Homebrew (
brew install ...) - Arch Linux: pacman (
sudo pacman -S ...) - Debian/Ubuntu-like Linux: apt (
sudo apt install ...)
If your system toolchain is already installed, but you still want this script to clone/build third-party dependencies:
./configure --dependenciesIf you only want to verify runtime/link dependencies for the built binary:
./configure --librariesIf both your system toolchain and third-party dependencies are already prepared, run without either optional installation/build step:
./configureCurrent options:
Usage: ./configure [--compiler] [--dependencies] [--libraries]
--compiler Install compiler and build tool packages
--dependencies Clone and build third-party dependencies
--libraries Run library/dependency link checks (ldd/otool)
What configure does:
- Optionally installs compiler/build tooling (
--compiler). - Optionally clones third-party dependencies into
dep/src/(--dependencies). - Optionally generates local
CMakeLists.txtfiles for Triangle and TetGen (--dependencies). - Optionally builds and installs dependencies under
dep/(--dependencies). - Builds and installs FES in
core/. - Optionally runs dependency-link checks (
lddon Linux,otool -Lon macOS) with--libraries. - Executes the built
fesbinary.
Recommended full bootstrap command on a fresh machine:
./configure --compiler --dependencies --librariesAfter building, you can run the FES executable with a model file:
./core/build/bin/fes mdl/BilatFilter.polyThe executable accepts .poly or .vtp project files as input.
You can also use the provided Makefile for convenience:
make build # Build the project
make test # Run test on BilatFilter.poly- Dependency install prefix:
dep/ - Dependency build directories:
dep/build/* - Core build directory:
core/build/ - FES executable:
core/build/bin/fes
Example run with a bundled model:
core/build/bin/fes mdl/WR90.polyExecutable usage:
fes /path/to/project_name.ext (ext := vtp, poly)
The script clones missing dependency repositories and attempts fast-forward updates
for repositories that already exist under dep/src/.
Use cleanup when you want a full, fresh dependency rebuild.
Typical cleanup before a full rebuild:
rm -rf dep/src/OpenBLAS dep/src/arpack-ng dep/src/mumps-superbuild dep/src/triangle dep/src/tetgen
rm -rf dep/build core/build
./configure --dependenciesTo also refresh system package installation and run linker checks on fresh setup:
./configure --compiler --dependencies --libraries- Permission denied on
configure:
chmod +x configure-
sudoprompts or package manager errors: Run with proper privileges or install required packages manually, then run./configurewithout--compiler. -
Missing third-party libraries during core build: Re-run with
--dependenciesto clone/build/install dependencies underdep/. -
Build failures in dependencies: Inspect CMake output in
dep/build/*and verify your compiler toolchain and Fortran support. -
Runtime linker diagnostics: Run
./configure --librariesto print linked libraries (ldd/otool -L) after build and identify missing system libraries.
- Core uses CMake and C++17.
- Non-macOS link behavior is controlled in
core/CMakeLists.txt. - VTK-related integration hooks exist in CMake but may be disabled depending on branch state.
- Laurent Ntibarikure, Contributions to the Art of Finite Element Analysis in Electromagnetics, FLORE, February 2014.
- Zhizhang Chen and Michel Ney, The Method of Weighted Residuals: A General Approach to Deriving Time- and Frequency-Domain Numerical Methods, IEEE Antennas and Propagation Magazine, Vol. 51, No. 1, February 2009.