pnm 1.0.3
peclet.pnm — pore-network extraction from SDF geometry (Kokkos)
Loading...
Searching...
No Matches
pore_extraction.hpp File Reference

peclet.pnm — portable (Kokkos) single-rank pore-network extraction from an SDF. More...

#include <algorithm>
#include <array>
#include <cstdint>
#include <Kokkos_Core.hpp>
#include <utility>
#include <vector>
#include "pore_kernels.hpp"

Go to the source code of this file.

Classes

struct  pnm::NetworkFlow
 
struct  pnm::PoreNetwork
 The full pore network from one extraction: pores, the per-voxel segmentation (flat), and the label-adjacency connections. More...
 

Namespaces

namespace  pnm
 

Functions

std::vector< Pore > pnm::extractPoresView (const Kokkos::View< float *, Mem > &sdf, std::array< int, 3 > resolution, std::array< float, 3 > origin, std::array< float, 3 > spacing)
 
std::vector< Pore > pnm::extract_pores_k (const std::vector< float > &sdf_h, std::array< int, 3 > resolution, std::array< float, 3 > origin, std::array< float, 3 > spacing)
 
Kokkos::View< int *, Mem > pnm::segmentVolumeView (const Kokkos::View< float *, Mem > &sdf, std::array< int, 3 > resolution, std::array< float, 3 > spacing, Kokkos::View< int *, Mem > *rootsOut=nullptr)
 
std::vector< int > pnm::segment_volume_k (const std::vector< float > &sdf_h, std::array< int, 3 > resolution, std::array< float, 3 > spacing)
 
std::vector< std::pair< int, int > > pnm::extractTopologyView (const Kokkos::View< int *, Mem > &seg, std::array< int, 3 > resolution)
 
std::vector< std::pair< int, int > > pnm::extract_topology_k (const int *seg_h, std::size_t n, std::array< int, 3 > resolution)
 
std::vector< std::pair< int, int > > pnm::extract_topology_k (const std::vector< int > &seg_h, std::array< int, 3 > resolution)
 
NetworkFlow pnm::extract_network_flow_k (const std::vector< float > &sdf_h, std::array< int, 3 > resolution, std::array< float, 3 > origin, std::array< float, 3 > spacing, const std::vector< double > &u_h, const std::vector< double > &v_h, const std::vector< double > &w_h, const std::vector< double > &p_h, const std::vector< double > &ox_h, const std::vector< double > &oy_h, const std::vector< double > &oz_h, std::array< double, 3 > grad_p)
 
PoreNetwork pnm::extract_pore_network_k (const std::vector< float > &sdf_h, std::array< int, 3 > resolution, std::array< float, 3 > origin, std::array< float, 3 > spacing)
 

Detailed Description

peclet.pnm — portable (Kokkos) single-rank pore-network extraction from an SDF.

Pore detection (local maxima of the SDF + weighted centroid), marker-controlled watershed segmentation of the solid (init markers -> union-find CCL -> flood fill), gradient-path pore basins, boundary-pair throat topology, and the network-flow extraction from a peclet.flow MAC field. The stage kernels live in pore_kernels.hpp (shared with the distributed pipeline, instantiated here on the trivial GridGeo geometry — the field is the whole periodic grid); this file is the single-rank orchestration: device-resident buffers, the fixpoint loops, the device renumbering and the host topology sort/unique. The distributed pipeline (pore_extraction_mpi.hpp) runs the SAME kernels on the core block decomposition, bit-exact.

Definition in file pore_extraction.hpp.