Skip to content

PRISBteam/PCC_Processing_Design

Repository files navigation

Polytopal Cell Complex (PCC) Processing Design (CPD code)

Manual version: 0.5.0
Current manual release date: 3 November 2025

PCC Processing Design or CPD code is a software designed to deliver an entirely discrete, combinatorial representation of complex multidimensional and multiscale defect microstructures, along with detailed characterisation of their evolution during various processing routes. Additionally, it can be utilized as a highly efficient design tool for microstructure optimisation in composite materials. The key methodological feature is the use of polytopal (polygons in the 2D case or polyhedra in 3D) cell complexes (PCCs) as objects of algebraic topology, which provide a convenient discrete space for large-scale design of realistic material defect microstructures of different dimensions, such as point and line defects, interfaces, and various volumetric phases. Such PCCs can be created based on the 2D/3D tessellation of space with the convex polytopes, such as Voronoi polyhedra.

An excellent, simple introduction to the cell complexes with their various applications is given in the book of Leo Grady and Jonathan Polimeni "Discrete Calculus. Applied Analysis on Graphs for Computational Science" (2010). More rigorous mathematical introduction to the main concepts and methods of combinatorial algebraic topology is given in the book of Dmitry Kozlov "Combinatorial Algebraic Topology" (2008) . A comprehensive classical introduction to graph theory is provided in the classical book of Béla Bollobás "Modern Graph Theory" (1998).

For the effective use of the CPD code, a clear understanding of several basic concepts, such as Polytopal Cell Complexes, state vectors, and special sequences of cells, is necessary. All these concepts (and much more) are described in the Theoretical Manual included in the project repository. Even more comprehensive discussions of some particular topics with examples can be found in the following publications of the Mechanics of Solids research group from the University of Manchester (see also MATERiA publication list ):

  1. E.N. Borodin, A.G. Sheinerman, O.Yu. Bushuev, M.Yu. Gutkin, A.P. Jivkov (2024) Defect-induced fracture topologies in Al2O3 ceramic-graphene nanocomposites. Materials & Design, 239, 112783. 10.1016/j.matdes.2024.112783
  2. Siying Zhu, Elijah Borodin, Andrey P. Jivkov (2023) Topological characteristics of grain boundary networks during severe plastic deformations of copper alloys. Acta Materialia, 259, 119290. 10.1016/j.actamat.2023.119290
  3. E.N. Borodin, A.P. Jivkov, A.G. Sheinerman, M.Yu. Gutkin (2021) Optimisation of rGO-enriched nanoceramics by combinatorial analysis. Materials & Design, 212, 110191. 10.1016/j.matdes.2021.110191
  4. S. Zhu, E.N. Borodin, A.P. Jivkov (2021) Triple junctions network as the key structure for characterisation of SPD processed copper alloys. Materials & Design, 198(24), 109352. 10.1016/j.matdes.2020.109352
  5. E. N. Borodin, A. P. Jivkov (2019) Evolution of triple junctions’ network during severe plastic deformation of copper alloys – a discrete stochastic modelling. Philosophical Magazine, 100(4), 467-485. 10.1080/14786435.2019.1695071

All the necessary technical details about the CPD code internal architecture and capabilities can be read in the Technical Manual included in the project repository.

How to execute the code

This is a C++ based software project consisting of several modules, libraries, and the main.cpp file, which is considered a separate module. The code works with a pre-created PCC, represented as a set of its incidence and adjacency matrices in a sparse matrix form. It is intended to be launched as a CMake project using the CMakeLists.txt file. For successful code execution, both the C++ compiler and CMake software must be preinstalled.

The code is written and tested in C++17. It works well with CMake 3.23 , g++ compiler and CLion IDE . <-- It is partly parallelized with the OpenMP libraries for its effective execution using multiple cores simultaneously within a single CPU. --> It explicitly uses the Eigen and Spectra C++ libraries included in the project as its external libraries.

All the “user interface” allowing interaction with the code contains in a few 'config/.ini' files governing the behaviour of each of the modules. For writing tailored C++ scripts that implement project modules and libraries in loops or in an arbitrary order, the 'TASK' execution mode can be used, with user code written in 'tasks/.cpp' files. Please refer to the Technical Manual included in the project repository for more detailed guidance.

As an example, to compile the project in a command line tool, one needs to change the working directory (cd command in Linux) to the one containing the project CMakeLists.txt file and then launch CMake as:

cmake -B buildtree
cmake --build buildtree

After that, one needs to change the working directory again to the newly created \buildtree and execute the built file like

cd buildtree
 ./PCC_Processing_Design

With CLion and other IDEs, everything is even more straightforward: a new C++ project must be created (if it contains its own main.cpp file with the “Hello world!” code by default, it must be deleted or ignored) and then executed.

The computational costs of different calculation types, functions, and tasks vary significantly: for instance, spectral analysis of matrices or genetic algorithms are very time-consuming procedures, while the random walk algorithm and generation of chains of special cells are fast.

The code works equally well with 3D and 2D tessellations of space. In the 2D case, there are no 3D polyhedra (volumes), and 2D polytopes are associated with faces or 2-cells of the corresponding PCC. All the project functions work similarly in these two cases.

Where to take a PCC?

A large PCC library is published on the MATERiA project web page.

Tessellations of space provided by Neper software

A variety of polytopal tessellations of 2D and 3D domains can be generated by Neper software. It allows output with with several different the morphologies and tesselation options -morpho , such as cube, square, tocta, lamellar, etc. different from Voronoi. Please, see more examples on the Neper webpage.

PCC Generator Tool

The code Voronoi PCC Analyser in the same MATERiA software project GitHub organisation allows to create a PCC as a set on incidence and adjacency matrices directly from the *.tess file as an output of the Neper tesselation module. See all the other related information on the GitHub repository . Its latest release can be downloaded from the page of releases or installed directly by pip (by 'pip install PCCanalyser==0.1.0' terminal command) or from the PCCanalyser web page.

Applications of the CPD code

Please refer to the MATERiA project web page, and, in particular, to its Simulation Examples section for more practical examples and the applications of the CPD code.

Acknowledgements

This code has been created as a part of the EPSRC-funded projects EP/V022687/1 “Patterns recognition inside shear bands: tailoring microstructure against localisation” (PRISB) and EP/N026136/1 "Geometric Mechanics of Solids: a new analysis of modern engineering materials" (GEMS).

License

Distributed under the standard MIT License. Please see the 'LICENSE.txt' file in the code repository for more information.

Contacts

Feel free to e-mail to Dr Elijah Borodin (Lecturer in Mechanics of Solids at the University of Manchester, School of Engineering) with any code-related queries.

About

The C++ code generates discrete structures and analyses their evolution process on the elements of a Polytopal Cell Complex (PCC) represented algebraically as a set of incidence and adjacency matrices

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages