Skip to content

Commit 4cbb20f

Browse files
committed
Fill-in section on level sets and free surfaces.
- Added parallel Hopf-Lax reference
1 parent da39f18 commit 4cbb20f

2 files changed

Lines changed: 21 additions & 8 deletions

File tree

paper/paper.bib

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ @article{copa:2021
99
doi = {10.1177/10943420211022829}
1010
}
1111

12-
@article{Slattery2022,
12+
@article{Slattery2022,
1313
doi = {10.21105/joss.04115},
1414
url = {https://doi.org/10.21105/joss.04115},
1515
year = {2022},
@@ -19,7 +19,7 @@ @article{Slattery2022
1919
pages = {4115},
2020
author = {Stuart Slattery and Samuel Temple Reeve and Christoph Junghans and Damien Lebrun-Grandié and Robert Bird and Guangye Chen and Shane Fogerty and Yuxing Qiu and Stephan Schulz and Aaron Scheinberg and Austin Isner and Kwitae Chong and Stan Moore and Timothy Germann and James Belak and Susan Mniszewski},
2121
title = {Cabana: A Performance Portable Library for Particle-Based Simulations},
22-
journal = {Journal of Open Source Software} }
22+
journal = {Journal of Open Source Software} }
2323

2424
@article{kokkos:2022,
2525
title = {Kokkos 3: {Programming} {Model} {Extensions} for the {Exascale} {Era}},
@@ -98,8 +98,8 @@ @inproceedings{ippl
9898

9999
@ARTICLE{vpic,
100100
author={Bird, Robert and Tan, Nigel and Luedtke, Scott V. and Harrell, Stephen Lien and Taufer, Michela and Albright, Brian},
101-
journal={IEEE Transactions on Parallel and Distributed Systems},
102-
title={VPIC 2.0: Next Generation Particle-in-Cell Simulations},
101+
journal={IEEE Transactions on Parallel and Distributed Systems},
102+
title={VPIC 2.0: Next Generation Particle-in-Cell Simulations},
103103
year={2022},
104104
volume={33},
105105
number={4},
@@ -140,3 +140,16 @@ @inproceedings{ipic
140140
year={2024},
141141
organization={Wiley Online Library}
142142
}
143+
144+
@article{Royston:2018,
145+
author = {Michael Royston and Andre Pradhana and Byungjoon Lee and Yat Tin Chow and Wotao Yin and Joseph Teran and Stanley Osher},
146+
doi = {https://doi.org/10.1016/j.jcp.2018.01.035},
147+
issn = {0021-9991},
148+
journal = {Journal of Computational Physics},
149+
keywords = {Level set methods, Eikonal equation, Hamilton Jacobi, Hopf--Lax},
150+
pages = {7-17},
151+
title = {Parallel redistancing using the {Hopf--Lax} formula},
152+
url = {https://www.sciencedirect.com/science/article/pii/S0021999118300457},
153+
volume = {365},
154+
year = {2018}
155+
}

paper/paper.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ The order of the dependency templates (if there are any dependencies) is defined
7070
`Picasso` provides two modes for initializing particles on a background grid: `InitUniform` and `InitRandom`. In addition to requiring parameters (particles per dimension for `InitUniform` or particles per cell for `InitRandom`), a user-defined predicate functor must also be provided that returns true or false based on certain criteria of the candidate particle, such as position. The design for a custom user-hook during the creation phase allows for flexible and arbitrary particle initialization.
7171

7272
### Batched Linear Algebra
73-
Matrix-vector and matrix-matrix operations are nearly ubiquitous in particle-to-grid and grid-to-particle mappings, function space projections, and other common operations wherein support for writing concise vectorial expressions is benefitial for both code readability, as well as exposing algorithmic parallelism. The `Picasso` library also implements kernel-level dense linear algebra operations in a corresponding `LinearAlgebra` namespace using a combination of expression templates for lazy evaluation and data structures to hold intermediates for eager evaluations when necessary. The general concept in the `Picasso` implementation for lazy vs. eager evaluations disencumbers the algorithm author from considering additional performance factors such as overhead incurred from excessive copies or total operation counts in otherwise unoptimized code. Using built-in operator overloading with support for expression templates, users can build complex nested tensorial expressions that are a mixture of both eager and lazy evaluations. For example, if `A` and `B` are NxN and `x` is length N:
73+
Matrix-vector and matrix-matrix operations are nearly ubiquitous in particle-to-grid and grid-to-particle mappings, function space projections, and other common operations wherein support for writing concise vectorial expressions is benefitial for both code readability, as well as exposing algorithmic parallelism. The `Picasso` library also implements kernel-level dense linear algebra operations in a corresponding `LinearAlgebra` namespace using a combination of expression templates for lazy evaluation and data structures to hold intermediates for eager evaluations when necessary. The general concept in the `Picasso` implementation for lazy vs. eager evaluations alleviates the consideration of additional performance factors such as overhead incurred from excessive copies or total operation counts in otherwise unoptimized code. Using built-in operator overloading with support for expression templates, users can build complex nested tensorial expressions that are a mixture of both eager and lazy evaluations. For example, if `A` and `B` are NxN and `x` is length N:
7474
```cpp
7575
auto C = 0.5 * (A + ~A) * B + (x * ~x);
7676
```
@@ -79,10 +79,10 @@ where the returned `C` is an NxN matrix, `~` is the transpose operator, and the
7979
`Picasso` provides an interface for various supported linear algebra types defined in `FieldTypes`: `Scalar`, `Vector`, `Matrix`, as well as specialized support for higher-rank `Tensor3`, `Tensor4`, and `Quaternion` types. Field tags need only derive from these types in order to make use of `Picasso` linear algebra features. Although all basic operations on vectors and matrices are implemented, several specialized operations are also available, including matrix determinant, inverse, exponential, LU, and SVD decompositions, higher-order tensor contractions, and quaternion-matrix conjugation.
8080

8181
## Interpolation
82+
The core facility of the `Picasso` library lies in
8283

83-
84-
## Free surfaces
85-
84+
## Level Sets and Boundaries
85+
The `Picasso::LevelSet` and `Picasso::ParticleLevelSet` are fast parallel implementations of grid-based signed distance fields (SDF), which are relevant to level-set based approaches in interface reconstruction and boundary tracking. In particular, the `ParticleLevelSet` class relies on functionality from [ArborX::BVH](https://github.com/arborx/ArborX) (bounding volume hiererarchy) for nearest point queries to compute a level set signed distance estimate, $\phi_i^{0}$, on the mesh using analytic spherical particle level sets $\phi_p$ as proxy. A parallel Hopf-Lax redistancing algorithm is also implemented that properly reinitializes the level set estimate $\phi$ into a final SDF ($|\nabla\phi_i|=1$). Additionally, the `Picasso::MarchingCubes` namespace provides methods and data structures for triangulating the resulting SDF. The computed mesh facets may be serialized to disk in STL format or used for further processing, for instance in convex hull initialization or embedded free surface tracking algorithms.
8686

8787
## Examples and performance testing
8888

0 commit comments

Comments
 (0)