Tamaas --- A blazingly fast rough contact library ================================================= 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. ## Dependencies 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`). ## Compiling 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: scons 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. ## Tests To run tests, execute `pytest build-` if you have compiled Tamaas with tests activated (`scons build_tests=True use_googletest=True`). ## Examples 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