Version 1.2.0
|
Welcome to the PeriHPX repository. In this project, we implement Peridynamics model of fracture using meshfree and finite element discretizations. A brief overview of the equations is available here. PeriHPX primarily served as a code for academic research (e.g., [1,2]), however, we plan to improve it further for a large-scale usage. The plan also includes development of fully distributed solver using HPX library for asynchronous computation to its maximum potential. In [3], we discuss the structure of PeriHPX and use HPX library for multi-threading computation. For further list of publications based on this library, we refer to the publication list.
At present, the library consists of multiple material models such as
One of the main features of PeriHPX is the implementation of both explicit time discretization for dynamic problems (see FDModel) and implicit discretization for quasi-static problems (see QuasiStaticModel).
All source and header files are fairly well documented. We used doxygen to automatically generate the documentation of methods, classes, etc. For complete documentation follow this link.
We provide shell scripts to help with the installation of dependencies and the PeriHPX itself. We also provide Docker images for a quick test of the library and to run the examples. In section Installation
, we describe the dependencies, installation of dependencies, and building PeriHPX code. In section Running PeriHPX
, we discuss how to run the examples.
The following build tools are needed to compile the PeriHPX and its dependencies:
On Ubuntu you might install all dependencies using the papackage manager:
On Fedora you might install all dependencies using the package manager
We use cmake to build the code. We list the dependencies and how they are used in the code below:
.vtu
type files.yaml
input filesOn Ubuntu you might install all dependencies using the papackage manager:
Note that on Ubuntu you need to install HPX, Blaze, and Blaze_Iterative since there is no package available.
On Fedora you might install all dependencies using the package manager
Note on Fedora, you need only to install Blaze_Itertaive.
Building the above dependencies is quite a challenge. To help with this, we provide the bash scripts.
A more detailed version of the build instruction is available here.
:exclamation: We recommend using the same CMake version and the same compiler version to build the HPX and PeriHPX.
Assuming all the dependencies are installed at standard paths such as /usr/local
, we build PeriHPX as follows
In case certain libraries such as HPX, Blaze_Iterative
are installed at custom paths, one would need to provide correct paths to cmake
as follows:
To quickly run the tests and examples, you may use Docker image with the latest Successful build of the main branch.
In examples, we provide information on how to prepare a simulation setup input file using YAML.
Asume, you have build PeriHPX on your own, you can go the the build
folder and run the executable as below
with the first argument -i
the input.yaml
file is specified and the second argument --hpx:threads
the amount of CPU cores HPX is allowed to use is specified. If you do not specify any number there all coes of the CPU are used to run the simulation. Note that in the current version only shared memory parallism is provided, however, we plan to add dsitributed memory to the code in the near future.
The one-dimensional quasi-static example is computational inexpesive, therfore, we used it in the Docker example to finish the simulation soon. For scaling test, we recommend to use any of the two-dimensional examples.
In case you found a bug in the library, want to contribute, or need a feature, please create a new issue.
The current stable version is . Main development branch is the main branch..
We have adopted a code of conduct for this project.
The source code is released under the license. If you like to contribute, we only accept your pull request using the same license. Please feel free to add your name to license header of the files you added or contributed to. If possible please add a test for your new feature using CTest. We adapted the Google C++ Style Guide for this project. We use the clang-format tool to format the source code with respect to this style guide. Please run the format.sh
script before your do the pull request.
In publications, please use our paper as the main citation for PeriHPX:
For more references, we refer to PeriHPX's publication list.
PeriHPX has been funded by:
[1] Jha, P. K., & Lipton, R. (2019). Numerical convergence of finite difference approximations for state based peridynamic fracture models. Computer Methods in Applied Mechanics and Engineering, 351, 184-225. Link
[2] Jha, P. K., & Lipton, R. P. (2020). Kinetic relations and local energy balance for LEFM from a nonlocal peridynamic model. International Journal of Fracture, 226(1), 81-95. Link
[3] Diehl, P., Jha, P. K., Kaiser, H., Lipton, R., & Lévesque, M. (2020). An asynchronous and task-based implementation of peridynamics utilizing HPX—the C++ standard library for parallelism and concurrency. SN Applied Sciences, 2(12), 1-21. Link
[4] Jha, P. K., Diehl, P. (2021) NLmech: Implementation of finite difference/meshfree discretization of nonlocal fracture models. Journal of Open Source Software 6.65 (2021): 3020. Link
For more references, we refer to the PeriHPX's publication list.