Reliable mesh adaptation
Omega_h is a C++11 library that implements tetrahedron and triangle mesh adaptativity, with a focus on scalable HPC performance using (optionally) MPI, OpenMP, or CUDA. It is intended to provided adaptive functionality to existing simulation codes. Mesh adaptivity allows one to minimize both discretization error and number of degrees of freedom live during the simulation, as well as enabling moving object and evolving geometry simulations. Omega_h will do this for you in a way that is fast, memory-efficient, and portable across many different architectures.
For a bare minimum setup with no parallelism, you just need CMake, a C++11 compiler, and preferably ZLib installed.
git clone git@github.com:ibaned/omega_h.git
cd omega_h
cmake . -DCMAKE_INSTALL_PREFIX=/your/choice
make install
This should install Omega_h under the given prefix in a way you can access from your own CMake files using these CMake commands:
find_package(Omega_h)
target_link_libraries(myprogram Omega_h::omega_h)
Omega_h provides at least the following:
- Adaptation of tetrahedral and triangle meshes in parallel
- Anisotropic metric field support
- Given good input element quality, the output element quality is also guaranteed.
- Scalable MPI parallelism
- On-node OpenMP or CUDA parallelism using Kokkos
- Fully deterministic execution
- Given the same mesh, global numbering, and size field, results will be independent of parallel partitioning and ordering.
Below we document some key CMake configuration options:
Default: OFF
Whether to enable MPI parallelism.
We recommend using MPICH or another MPI 3.0 implementation,
but we also support MPI version 2.1.
If this is ON
, set CMAKE_CXX_COMPILER
to your MPI compiler wrapper.
Default: OFF
Whether to use the Kokkos and Teuchos Trilinos packages.
If this is ON
, set Trilinos_PREFIX
to your Trilinos installation.
Kokkos provides on-node parallelism, and Omeg_h will use the same
default execution space that Kokkos was built with.
Teuchos provides parameter lists and file I/O for them,
which are usable through Omega_h_teuchos.hpp
.
Default: OFF
Omega_h can include all other sources in a single omega_h.cpp
for a (up to 4X)
faster compile time from scratch, especially if compiling in serial
or if using the CUDA compiler which has a high per-file overhead.
Please open a Github issue to ask a question, report a bug, request features, etc. If you'd like to contribute, please fork the repository and use a feature branch. Pull requests are welcome.
This library is released under the FreeBSD license.