Quick Links
Git repo
Mailing list
Sphinx docs
Bugzilla

Five-ODE system model describing car motion -- all reachable states.

Four-ODE system with chaotic solution.

Mathematical pendulum.

Radial Schroedinger equation.
Hermes1D
is an experimental C++ library for the solution of ordinary differential equations (ODE) and one-dimensional partial differential equations (PDE) with higher-order finite element methods (hp-FEM). In contrast to traditional time-stepping ODE solvers, Hermes1D constructs the solution using a variational principle. It starts from a weak formulation of the ODE/PDE problem and allows the equations to be defined in a very general implicit (vector-valued) form F(y, y', t) = 0. The approximation is a continuous, piecewise-polynomial function defined in the entire interval (0, T). In contrast to time-stepping schemes, the finite element approach makes it possible to prescribe boundary conditions either at the beginning or at the end of the time interval (combinations are possible for systems). The hp-FEM discretization leads to a system of nonlinear algebraic equations that is solved via the Newton's method or JFNK. Sphinx documentation is still in progress. Hermes1D comes with a free interactive online lab powered by UNR HPC cluster. The library is distributed under the BSD license.Download
(1) Clone the git repository: git clone http://hpfem.org/git/hermes1d.git.(2) Download the source code via http.
(3) You can browse the git repo online at http://hpfem.org/git/gitweb.cgi/hermes1d.git.
Installation
To install, clone the git repository as shown above and change dir to hermes1d/. Prerequisites for Hermes1D are cmake, g++, gfortran, libsuitesparse-dev. Type "cmake ." and "make". More detailed installation instructions can be found in the README file. If you encounter any problems, let us know through the Hermes1D mailing list.Documentation, Support, and User Community
The code itself as well as the Sphinx documentation are still very much in progress. Use the Hermes1D mailing list to find answers to your questions or problems. You can also use IRC channel irc.freenode.net, room #hermes1d to chat about development in real-time.How to Contribute
If you are interested in Hermes1D, join the mailing list. The following list contains bugs, open issues and simple project ideas. If you decide to pick up one of them and help us, we'll be looking forward to hearing from you!Short-Term Development Plans
Hermes1D is still fairly new. You can help us a lot by downloading and testing it. Several self-explanatory examples are in the directory examples/. Feel free to play with the existing ones, add new ones, and report bugs. Here is the plan for immediate next steps (not necessarily in this order):- Improve fast trial refinements. Right now, H1D always refines an element for enrichment purposes. Instead, just extend the basis on the finite element by adding new bubble functions. This means that the FE space will be extended hierarchically, there will be no need to transfer solution to the new mesh, and also the solution on the new mesh will be faster.
- Implement Discontinuous Galerkin (DG) discretization as an alternative to continuous finite elements. Hopefully this will help improve the solution of first-order problems.
- In JFNK improve the handling of the parameter jfnk_epsilon (the small positive constant in the JFNK finite difference). It turns out that this constant can influence the behavior of JFNK significantly. Also, add preconditioning to the CG method that the JFNK currently uses, and allow additional iterative methods.
- Implement eigensolvers (SLEPc, ARPACK, Anasazi, ...)
- Write Python wrappers
- Make Hermes1D run in the FEMhub online lab.
- Write documentation. Link to Sphinx documentation should be available soon.
- Improve handling of integration orders. When registering a weak form, the user should be able to define the integration order as a function of the poly degree 'p'.
- Implement adaptive quadrature as an option.
- Import equation data into weak forms via the user_data parameter, not as global variables.

