overlap

Exact calculation of the overlap volume and area of spheres and mesh elements

https://github.com/severinstrobl/overlap

Science Score: 67.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 7 DOI reference(s) in README
  • Academic publication links
  • Committers with academic emails
    1 of 6 committers (16.7%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (15.1%) to scientific vocabulary

Keywords

computational-geometry mesh-processing numerical-simulations

Keywords from Contributors

interactive mesh interpretability sequences generic projection optim hacking network-simulation
Last synced: 6 months ago · JSON representation ·

Repository

Exact calculation of the overlap volume and area of spheres and mesh elements

Basic Info
  • Host: GitHub
  • Owner: severinstrobl
  • License: mit
  • Language: C++
  • Default Branch: main
  • Homepage:
  • Size: 396 KB
Statistics
  • Stars: 31
  • Watchers: 5
  • Forks: 15
  • Open Issues: 7
  • Releases: 2
Topics
computational-geometry mesh-processing numerical-simulations
Created about 10 years ago · Last pushed 6 months ago
Metadata Files
Readme License Citation

README.md

Exact calculation of the overlap volume and area of spheres and mesh elements

Build Status codecov pre-commit License: MIT DOI

Calculating the intersection or overlapping volume of a sphere and one of the typically used mesh elements such as a tetrahedron or hexahedron is surprisingly challenging. This header-only library implements a numerically robust method to determine this volume.

The mathematical expressions and algorithms used in this code are described in S. Strobl et al.: Exact calculation of the overlap volume of spheres and mesh elements, Journal of Computational Physics, 2016. So if you use the code in projects resulting in any publications, please cite this paper.

Employing the concepts and routines used for the calculation of the overlap volume, the intersection or overlap area of a sphere and the facets of a mesh element can also be calculated with this library.

Usage

Supported primitives

The overlap calculation directly supports these element types:

  • tetrahedra (4 nodes/vertices, data type Tetrahedron)
  • pentahedra/wedges/triangular prisms (6 nodes/vertices, data type Wedge)
  • hexahedra (8 nodes/vertices, data type Hexahedron)

The elements must be convex and have to be specified as a list of three-dimensional nodes/vertices, while the sphere (data type Sphere) requires a center point and the radius.

Node ordering

The element types of the overlap library follow the node numbering conventions of the CFD General Notation System (CGNS) project. Please refer to the CGNS documentation for the order of the nodes of hexahedral, tetrahedral, and pentahedral/wedge-shaped elements of linear order, respectively. Also the ordering of the faces uses the conventions of CGNS. This should make interfacing this library with existing codes rather easy, often even without the need to reorder nodes.

Dependencies

The compile-time dependencies of this code are:

The software is currently continuously compiled and tested with the following compilers on both x86-64 and ARM64:

| Compiler | Versions | | ---------- | -------------------------------------------------------------- | | GNU G++ | 14.0.1, 13.2.0, 12.3.0, 11.4.0, 10.5.0, 9.5.0 | | Clang/LLVM | 18.1.3, 17.0.6, 16.0.6, 15.0.7, 14.0.0, 13.0.1, 12.0.1, 11.1.0 |

Additionally, the Intel C++ compiler starting with version 19.0 should work, albeit this configuration is not part of the CI process. All the newer LLVM-based oneAPI compilers are expected to work.

C++

The library is implemented as a header-only library written in C++17. To use it in your code, simply include the header file include/overlap/overlap.hpp and make sure the Eigen3 headers can be found by your compiler or build system. The library exposes two relevant type aliases, namely Scalar for double and Vector for Eigen::Matrix<Scalar, 3, 1, Eigen::DontAlign>, which are used in the public interface for scalar and vectorial quantities, respectively. In principle, these types can be adjusted to specific needs, yet reducing the numerical precision of the scalar floating point type will have a significant impact on the precision and stability of the calculations.

A minimal example calculating the overlap of a hexahedron with a side length of 2 centered at the origin and a sphere with radius 1 centered at a corner of the hexahedron could look something like this:

```cpp using namespace overlap;

Vector v0{-1, -1, -1}; Vector v1{ 1, -1, -1}; Vector v2{ 1, 1, -1}; Vector v3{-1, 1, -1}; Vector v4{-1, -1, 1}; Vector v5{ 1, -1, 1}; Vector v6{ 1, 1, 1}; Vector v7{-1, 1, 1};

Hexahedron hex{v0, v1, v2, v3, v4, v5, v6, v7}; Sphere s{Vector::Constant(1), 1};

const Scalar result = overlap_volume(s, hex); ```

This code snippet calculates the correct result (π/6) for this simple configuration.

To obtain the overlap area of a sphere and the facets of a tetrahedron, the function overlap_area() can be employed as such:

```cpp using namespace overlap;

Vector v0{-std::sqrt(3) / 6.0, -1.0 / 2.0, 0}; Vector v1{std::sqrt(3) / 3.0, 0, 0}; Vector v2{-std::sqrt(3) / 6.0, +1.0 / 2.0, 0}; Vector v3{0, 0, std::sqrt(6) / 3.0};

Tetrahedron tet{v0, v1, v2, v3}; Sphere s{{0, 0, 1.5}, 1.25};

const auto result = overlap_area(s, tet);

std::cout << "surface area of sphere intersecting tetrahedron: " << result[0] << std::endl;

std::cout << "overlap areas per face:" << std::endl; // The indices of the faces are NOT zero-based here! for(size_t f = 1; f < result.size() - 1; ++f) std::cout << " face #" << (f - 1) << ": " << result[f] << std::endl;

std::cout << "total surface area of tetrahedron intersecting sphere: " << result.back() << std::endl; ```

Python

The Python version of the overlap library is available via the Python Package Index (PyPI), so for most environments installation should be possible simply via pip install overlap.

In case no pre-built package or wheel is available for your system, compilation of the wrapper code is required which in turn requires the requirements listed above for the C++ version to be fulfilled.

The interface of Python version closely resembles the interface of the C++ version:

```python import numpy as np import overlap

vertices = np.array( ( (-1, -np.sqrt(1.0 / 3.0), -np.sqrt(1.0 / 6.0)), (1, -np.sqrt(1.0 / 3.0), -np.sqrt(1.0 / 6.0)), (0, np.sqrt(4.0 / 3.0), -np.sqrt(1.0 / 6.0)), (0, 0, np.sqrt(3.0 / 2.0)), ) )

tet = overlap.Tetrahedron(vertices) sphere = overlap.Sphere((0, 0, 0.5), 1) result = overlap.overlap_volume(sphere, tet) ```

Calculation of the overlap area instead of the overlap volume is possible via the function overlap_area() of the package.

License

The overlap library is distributed under the MIT license, please refer to the LICENSE file for the full license text.

This distribution uses external third-party software covered by separate license terms. For details, please consult the corresponding license terms of the respective package.

| Package | License | | -------------------------------------------------- | ------------ | | Eigen | MPL2 | | pybind11 | 3-clause BSD | | doctest | MIT | | nanobench | MIT |

Owner

  • Name: Severin Strobl
  • Login: severinstrobl
  • Kind: user
  • Location: Dresden, Germany

Citation (CITATION.cff)

# YAML 1.2
---
cff-version: 1.2.0
authors:
  - family-names: Strobl
    given-names: Severin
    orcid: "https://orcid.org/0000-0002-1636-5368"
title: "overlap - Exact calculation of the overlap volume and area of spheres and mesh elements"
message: "If you use this software, please cite the article from preferred-citation and the software itself."
repository-code: "https://github.com/severinstrobl/overlap"
license: GPLv3
date-released: "2021-02-08"
version: 0.1.0
type: software
preferred-citation:
  authors:
    - family-names: Strobl
      given-names: Severin
      orcid: "https://orcid.org/0000-0002-1636-5368"
    - family-names: Formella
      given-names: Arno
    - family-names: "Pöschel"
      given-names: Thorsten
  title: "Exact calculation of the overlap volume of spheres and mesh elements"
  journal: "Journal of Computational Physics"
  year: 2016
  doi: "10.1016/j.jcp.2016.02.00"
  url: "https://www.sciencedirect.com/science/article/pii/S0021999116000577"
  type: article
  keywords:
    - "overlap volume"
    - "local solid fraction"
    - "numerical robustness"
    - "sphere-mesh overlap"

GitHub Events

Total
  • Issues event: 5
  • Watch event: 1
  • Delete event: 58
  • Issue comment event: 230
  • Push event: 163
  • Pull request review event: 21
  • Pull request event: 114
  • Create event: 49
Last Year
  • Issues event: 5
  • Watch event: 1
  • Delete event: 58
  • Issue comment event: 230
  • Push event: 163
  • Pull request review event: 21
  • Pull request event: 114
  • Create event: 49

Committers

Last synced: over 2 years ago

All Time
  • Total Commits: 81
  • Total Committers: 6
  • Avg Commits per committer: 13.5
  • Development Distribution Score (DDS): 0.42
Past Year
  • Commits: 8
  • Committers: 3
  • Avg Commits per committer: 2.667
  • Development Distribution Score (DDS): 0.25
Top Committers
Name Email Commits
Severin Strobl g****t@s****e 47
Severin Strobl s****n@b****m 24
Severin Strobl g****b@s****e 5
dependabot[bot] 4****] 3
James Barnett j****4@t****u 1
Kale Kundert k****e@t****t 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 12
  • Total pull requests: 191
  • Average time to close issues: 10 months
  • Average time to close pull requests: 8 days
  • Total issue authors: 8
  • Total pull request authors: 5
  • Average comments per issue: 2.92
  • Average comments per pull request: 2.33
  • Merged pull requests: 168
  • Bot issues: 2
  • Bot pull requests: 60
Past Year
  • Issues: 4
  • Pull requests: 85
  • Average time to close issues: 3 days
  • Average time to close pull requests: 4 days
  • Issue authors: 3
  • Pull request authors: 3
  • Average comments per issue: 0.5
  • Average comments per pull request: 2.74
  • Merged pull requests: 70
  • Bot issues: 2
  • Bot pull requests: 39
Top Authors
Issue Authors
  • severinstrobl (4)
  • renovate[bot] (2)
  • Helveg (1)
  • wesbarnett (1)
  • iahepburn (1)
  • alisheikholeslam (1)
  • joao-aguirre (1)
  • jlallouette (1)
Pull Request Authors
  • severinstrobl (129)
  • dependabot[bot] (47)
  • renovate[bot] (13)
  • kalekundert (1)
  • wesbarnett (1)
Top Labels
Issue Labels
enhancement (4) question (1) dependencies (1) renovate (1)
Pull Request Labels
dependencies (62) github_actions (18) renovate (12) enhancement (4)

Packages

  • Total packages: 1
  • Total downloads:
    • pypi 412 last-month
  • Total dependent packages: 0
  • Total dependent repositories: 10
  • Total versions: 3
  • Total maintainers: 1
pypi.org: overlap

Exact calculation of the overlap volume and area of spheres and mesh elements

  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 10
  • Downloads: 412 Last month
Rankings
Dependent repos count: 4.6%
Downloads: 8.0%
Average: 8.9%
Dependent packages count: 10.1%
Forks count: 10.2%
Stargazers count: 11.6%
Maintainers (1)
Last synced: 6 months ago

Dependencies

setup.py pypi
  • numpy *
.github/workflows/build.yaml actions
  • actions/checkout v4 composite
.github/workflows/coverage.yaml actions
  • actions/checkout v4 composite
  • codecov/codecov-action v3 composite
.github/workflows/python.yaml actions
  • actions/checkout v4 composite
  • actions/setup-python v4 composite
.github/workflows/wheels.yaml actions
  • actions/checkout v4 composite
  • actions/github-script v6 composite
  • actions/setup-python v4 composite
  • actions/upload-artifact v3 composite
pyproject.toml pypi