PeriPy

[![Build Status](https://travis-ci.com/alan-turing-institute/PeriPy.svg?branch=master)](https://travis-ci.com/alan-turing-institute/PeriPy) [![codecov](https://codecov.io/gh/alan-turing-institute/PeriPy/branch/master/graph/badge.svg)](https://codecov.io/gh/alan-turing-institute/PeriPy)

PeriPy, a collaboration between Exeter, Cambridge & the Alan Turing Institute, is a lightweight, open-source and high-performance python package for solving bond-based peridynamics (BBPD) problems in solid mechanics. It is implemented in [Python](https://www.python.org/) and the performance critical parts are implemented in [Cython](https://cython.org/) and [PyOpenCL](https://documen.tician.de/pyopencl/).

PeriPy allows users to write their code in pure Python. Simulations are then executed seamlessly using high performance OpenCL code.

Features

  • Easy to use. Get started with the latest documentation at [peripy.readthedocs.org](https://peripy.readthedocs.org)
  • 2-10x faster than exisiting OpenCL solvers
  • ‘Outer-loop’ applications including uncertainty quantification, optimisation and feature recognition are made possible
  • Support for both regular and irregular mesh files. See [meshio](https://github.com/nschloe/meshio) for the full list of mesh formats
  • Support for composite and interface material models
  • Support for arbritrary n-linear ‘microelastic’ damage models
  • Simulates force or displacement controlled boundary conditions and initial conditions
  • Arbritrary subsets of particles are easily measured for their displacements, damages etc.
  • Output files can be viewed in [Paraview](https://www.paraview.org/)
  • Various ‘partial volume correction’ algorithms, ‘surface correction’ algorithms and ‘micromodulus functions’ are included. The code is easily extended to define your own
  • Velocity-Verlet, Euler and Euler-Cromer integrators are included and the code is easily extended to define your own higher order and/or adaptive integrators

Get started (preferred)

### Building and Installation ###

  • The package requires Python 3.7+
  • Install pyopencl, a build dependency, by following these instructions https://documen.tician.de/pyopencl/misc.html
  • To install pyopencl, note that pyopencl may need to be installed from (base) environment
  • If using pyopencl on Windows with a CPU (rather than a GPU), first, ensure the C++ build tools for Visual Studio are installed (e.g., see https://youtu.be/KUTVnxCeC50)
  • Make sure the OpenCL device driver is installed for your device: ` python import pyopencl pyopencl.get_platforms() ` The error pyopencl._cl.LogicError: clGetPlatformIDs failed: PLATFORM_NOT_FOUND_KHR means that the OpenCL device driver is not correctly installed.
  • Install cython, a build dependency, pip install cython
  • Install PeriPy pip install peripy

### Running examples ###

  • Run the first example by typing peripy run example1 on the command line
  • You can show the example code by typing peripy run example1 –cat
  • Type peripy run –list for a list of examples
  • For usage, type peripy run –help

### Running the tests ###

The tests for this project use [pytest](https://pytest.org/en/latest/). To run the tests yourself,

  • Install pytest using pip pip install pytest
  • Type peripy test on the command line
  • For coverage install pytest-cov and type peripy coverage on the command line

Get started from the GitHub repository (for developers)

### Building and Installation ###

  • The package requires Python 3.7+
  • Install pyopencl, a build dependency, by following these instructions https://documen.tician.de/pyopencl/misc.html
  • To install pyopencl, note that pyopencl may need to be installed from (base) environment
  • If using pyopencl on Windows with a CPU (rather than a GPU), first, ensure the C++ build tools for Visual Studio are installed (e.g., see https://youtu.be/KUTVnxCeC50)
  • Make sure the OpenCL device driver is installed for your device ` python import pyopencl pyopencl.get_platforms() ` The error pyopencl._cl.LogicError: clGetPlatformIDs failed: PLATFORM_NOT_FOUND_KHR means that the OpenCL device driver is not correctly installed.
  • Install cython, a build dependency, pip install cython
  • Clone the repository git clone git@github.com:alan-turing-institute/peripy.git
  • Install using pip pip install -e . from the root directory of the repository

### Running examples ###

  • You can find examples of how to use the package under:peripy/examples/. Run the first example by typing python peripy/examples/example1/example.py

### Running the tests ###

The tests for this project use [pytest](https://pytest.org/en/latest/). To run the tests yourself,

  • If you haven’t already, install using pip pip install -e . from the root directory of the repository
  • Install pytest using pip pip install pytest
  • Run pytest from the root directory of the repository
  • For coverage install pytest-cov and run pytest –cov=./peripy