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 Arabic and 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// (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 //Sphinx// (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. ## Installing Once compiled, you can install the python module with `pip` (preferably in a virtual environment): pip install -e build-release/python Check that everything is working fine with: python3 -c 'import tamaas; print(tamaas)' ## Tests To run tests, execute `pytest build-` if you have compiled Tamaas with tests activated (`scons build_tests=True use_googletest=True`). ## Documentation To build the documentation, activate the `build_doc` option. The compiled indexes for the doxygen C++ API and Sphinx documentation can be found in `doc/build/{doxygen,sphinx}/html/index.html`. ## 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 - the scripts in `pipe_tools` allow to execute elastic contact simulations without the need to code a custom script (see documentation for more details) ## Citing Please cite Tamaas as: Frérot, L., Anciaux, G., Rey, V., Pham-Ba, S., (2019). Tamaas, a high-performance library for periodic rough surface contact, doi:10.5281/zenodo.3479237. If you use the elastic-plastic contact capabilities of Tamaas, please cite: Frérot, L., Bonnet, M., Molinari, J.-F. & Anciaux, G. A Fourier-accelerated volume integral method for elastoplastic contact. Computer Methods in Applied Mechanics and Engineering 351, 951–976 (2019) doi:10.1016/j.cma.2019.04.006. If you use the adhesive contact capabilities f Tamaas, please cite: Rey, V., Anciaux, G. & Molinari, J.-F. Normal adhesive contact on rough surfaces: efficient algorithm for FFT-based BEM resolution. Comput Mech 1–13 (2017) doi:10.1007/s00466-017-1392-5. ## License Tamaas is distributed under the terms of the [GNU Affero General Public License v3.0](https://www.gnu.org/licenses/agpl.html).