Nutils is a Free and Open Source Python programming library for Finite Element Method computations, developed by Evalf Computing and distributed under the permissive MIT license. Key features are a readable, math centric syntax, an object oriented design, strict separation of topology and geometry, and high level function manipulations with support for automatic differentiation.
Nutils provides the tools required to construct a typical simulation workflow in just a few lines of Python code, while at the same time leaving full flexibility to build novel workflows or interact with third party tools. With native support for Isogeometric Analysis (IGA), the Finite Cell method (FCM), multi-physics, mixed methods, and hierarchical refinement, Nutils is at the forefront of numerical discretization science. Efficient under-the-hood vectorization and built-in parallellisation provide for an effortless transition from academic research projects to full scale, real world applications.
Nutils is platform independent and is known to work on Linux, Windows and OS X.
A working installation of Python 3.5 or higher is required. Many different installers exist and there are no known issues with any of them. When in doubt about which to use, a safe option is to go with the official installer.
With Python installed, the recommended way to install Nutils is to clone the repository, followed by an editable installation using pip (included in the standard installer):
$ git clone https://github.com/nutils/nutils.git
$ python3 -m pip install --user --editable nutils
This will install Nutils locally along with all dependencies. Afterward a
simple git pull
in the project directory will suffice to update Nutils with
no reinstallation required.
Alternatively it is possible to install Nutils directly:
$ python3 -m pip install --user nutils
This will download the latest stable version from the Python Package Index and install it along with dependencies. However, since this installation leaves no access to examples or unit tests, in the following is is assumed that the former approach was used.
A good first step after installing Nutils is to confirm that all unit tests are passing. With the current working directory at the root of the repository:
$ python3 -m unittest -b
Note that this might take a long time. After that, try to run any of the scripts in the examples directory, such as the Laplace problem:
$ python3 examples/laplace.py
Log messages should appear in the terminal during operation. Simulateneously, a
html file log.html
and any produced figures are written to
public_html/laplace.py/yyyy/mm/dd/hh-mm-ss
in the home directory. In case a
webserver is running and configured for user directories this automatically
makes simulations remotely accessible. For convenience, public_html/log.html
always redirects to the most recent simulation.
For the numerical background of all examples as well as line by line documentation see the overview of examples. Documentation of individual functions can be found in the API reference.
Most simulations will have components in common with the example scripts, so a mix-and-match approach is a good way to start building your own script. For questions that are not answered by the API reference there is the nutils-users support channel at #nutils-users:matrix.org. Note that you will need to create an account at any Matrix server in order to join this channel.
If you are using Nutils in academic research, please consider citing Nutils.