Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_MarchingCubes.H
Go to the documentation of this file.
1#ifndef AMREX_MARCHING_CUBES_H_
2#define AMREX_MARCHING_CUBES_H_
3
4#include <AMReX_FArrayBox.H>
5#include <AMReX_Geometry.H>
7
8#include <map>
9#include <memory>
10#include <string>
11
18namespace amrex::MC {
19
21void Initialize ();
23void Finalize ();
24
26struct Vertex
27{
29
31 void resize (int n);
32
34 GpuArray<Real*,6> dataPtrs () { return {x.data(), y.data(), z.data(), nx.data(), ny.data(), nz.data()}; }
35};
36
39{
40 Gpu::DeviceVector<int> v1, v2, v3; // vertex index
41
43 void resize (int n);
44
46 GpuArray<int*,3> dataPtrs () { return {v1.data(), v2.data(), v3.data()}; }
47};
48
50class MCFab
51{
52public:
53 // We will store more data here in the future
56};
57
59void marching_cubes (Geometry const& geom, FArrayBox& sdf_fab, MCFab& mc_fab);
60
62void write_stl (std::string const& filename, std::map<int,std::unique_ptr<MCFab>> const& mc_fabs);
63
64}
65
66#endif
A Fortran Array of REALs.
Definition AMReX_FArrayBox.H:231
Rectangular problem domain geometry.
Definition AMReX_Geometry.H:74
Minimal container holding marching-cubes output for one FAB.
Definition AMReX_MarchingCubes.H:51
Vertex m_vertices
Definition AMReX_MarchingCubes.H:55
Triangle m_triangles
Definition AMReX_MarchingCubes.H:54
Dynamically allocated vector for trivially copyable data.
Definition AMReX_PODVector.H:308
Definition AMReX_MarchingCubes.cpp:23
void write_stl(std::string const &filename, std::map< int, std::unique_ptr< MCFab > > const &mc_fabs)
Write the collected marching-cubes output to an STL file.
Definition AMReX_MarchingCubes.cpp:924
void marching_cubes(Geometry const &geom, FArrayBox &sdf_fab, MCFab &mc_fab)
Run marching cubes on signed-distance field sdf_fab.
Definition AMReX_MarchingCubes.cpp:693
void Finalize()
Destroy any static storage allocated by Initialize().
Definition AMReX_MarchingCubes.cpp:664
void Initialize()
Initialize internal lookup tables and device buffers for marching cubes.
Definition AMReX_MarchingCubes.cpp:651
Fixed-size array that can be used on GPU.
Definition AMReX_Array.H:43
Triangle index buffer referencing Vertex entries.
Definition AMReX_MarchingCubes.H:39
GpuArray< int *, 3 > dataPtrs()
Raw device pointers for kernel launches.
Definition AMReX_MarchingCubes.H:46
Gpu::DeviceVector< int > v1
Definition AMReX_MarchingCubes.H:40
Gpu::DeviceVector< int > v3
Definition AMReX_MarchingCubes.H:40
Gpu::DeviceVector< int > v2
Definition AMReX_MarchingCubes.H:40
void resize(int n)
Resize the triangle buffer to hold n faces.
Definition AMReX_MarchingCubes.cpp:686
Vertex buffer storing coordinates and normals for extracted surfaces.
Definition AMReX_MarchingCubes.H:27
void resize(int n)
Resize the vertex buffers to hold n entries.
Definition AMReX_MarchingCubes.cpp:676
Gpu::DeviceVector< Real > ny
Definition AMReX_MarchingCubes.H:28
Gpu::DeviceVector< Real > x
Definition AMReX_MarchingCubes.H:28
Gpu::DeviceVector< Real > nx
Definition AMReX_MarchingCubes.H:28
GpuArray< Real *, 6 > dataPtrs()
Raw device pointers used when launching kernels.
Definition AMReX_MarchingCubes.H:34
Gpu::DeviceVector< Real > y
Definition AMReX_MarchingCubes.H:28
Gpu::DeviceVector< Real > z
Definition AMReX_MarchingCubes.H:28
Gpu::DeviceVector< Real > nz
Definition AMReX_MarchingCubes.H:28