Tamaas is a C++/Python library that implements a number of numerical methods based on integral equations to efficiently solve contact problems with rough surfaces. The word تماس (tamaas) means "contact" in farsi.
Here is a list of dependencies for Tamaas:
- a C++ compiler with full C++14 and OpenMP support
- SCons (python build system)
- FFTW3 compiled with OpenMP support
- boost (preprocessor)
- thrust (the version shipped with CUDA, not the GitHub version; tested with 1.9.2)
- python 3+ (probably works with python 2, but it is not tested) with numpy
- pybind11 (included as submodule)
- expolit (included as submodule)
Optional dependencies are:
- scipy (for nonlinear solvers)
- uvw (for dumpers)
- googletest and pytest (for tests)
- Doxygen and Mercurial (for documentation)
Note that a Debian distribution should have the right packages for all these dependencies (they package the right version of thrust extracted from CUDA in stretch-backports non-free and buster non-free).
You should first clone the git submodules that are dependencies to tamaas (expolit, pybind11 and googletest):
git submodule update --init --recursive
The build system uses SCons. In order to compile Tamaas with the default options:
After compiling a first time, you can edit the compilation options in the file build-setup.conf, or alternatively supply the options directly in the command line:
scons option=value [...]
To get a list of all build options and their possible values, you can run scons -h. You can run scons -H to see the SCons-specific options (among them -j n executes the build with n threads and -c cleans the build). Note that the build is aware of the CXX and CXXFLAGS environment variables.
To run tests, execute pytest build-<build_type> if you have compiled Tamaas with tests activated (scons build_tests=True use_googletest=True).
Example simulations can be found in the examples/ directory. There is no guarantee that the examples in examples/legacy/ all work however.
- rough_contact.py shows a typical normal rough contact simulation
- adhesion.py shows how you can derive some classes from Tamaas in python, here to implement a custom adhesion potential
- plasticity.py computes an elastoplastic Hertz simulation and dumps the result in examples/paraview/ in VTK format
- stresses.py shows how you can compute stresses from a boundary traction distribution