Block-Structured AMR Software Framework
AMReX_EB_STL_utils.H
Go to the documentation of this file.
1 #ifndef AMREX_EB_STL_UTILS_H_
2 #define AMREX_EB_STL_UTILS_H_
3 
4 #include <AMReX_Config.H>
5 #include <AMReX_Geometry.H>
6 #include <AMReX_MultiFab.H>
7 #include <AMReX_Dim3.H>
8 #include <AMReX_EB2_Graph.H>
9 
10 namespace amrex
11 {
12 
13 class STLtools
14 {
15 public:
16  struct Triangle {
18  };
19 
20  static constexpr int allregular = -1;
21  static constexpr int mixedcells = 0;
22  static constexpr int allcovered = 1;
23 
24 private:
25 
29 
30  int m_num_tri=0;
31 
32  XDim3 m_ptmin; // All triangles are inside the bounding box defined by
33  XDim3 m_ptmax; // m_ptmin and m_ptmax.
34  XDim3 m_ptref; // The reference point is slightly outside the bounding box.
35  bool m_boundry_is_outside; // Is the bounding box boundary outside or inside the object?
36 
37  void read_ascii_stl_file (std::string const& fname, Real scale,
38  Array<Real,3> const& center, int reverse_normal);
39  void read_binary_stl_file (std::string const& fname, Real scale,
40  Array<Real,3> const& center, int reverse_normal);
41 
42 public:
43 
44  void prepare (); // public for cuda
45 
46  void read_stl_file (std::string const& fname, Real scale, Array<Real,3> const& center,
47  int reverse_normal);
48 
49  void fill (MultiFab& mf, IntVect const& nghost, Geometry const& geom,
50  Real outside_value = -1._rt, Real inside_value = 1._rt) const;
51 
52  [[nodiscard]] int getBoxType (Box const& box, Geometry const& geom, RunOn) const;
53 
54  static constexpr bool isGPUable () noexcept { return true; }
55 
56  void fillFab (BaseFab<Real>& levelset, const Geometry& geom, RunOn,
57  Box const& bounding_box) const;
58 
59  void getIntercept (Array<Array4<Real>,AMREX_SPACEDIM> const& inter_arr,
60  Array<Array4<EB2::Type_t const>,AMREX_SPACEDIM> const& type_arr,
61  Array4<Real const> const& lst, Geometry const& geom, RunOn,
62  Box const& bounding_box) const;
63 
64  static void updateIntercept (Array<Array4<Real>,AMREX_SPACEDIM> const& inter_arr,
65  Array<Array4<EB2::Type_t const>,AMREX_SPACEDIM> const& type_arr,
66  Array4<Real const> const& lst, Geometry const& geom) ;
67 
68 };
69 
70 }
71 #endif
Rectangular problem domain geometry.
Definition: AMReX_Geometry.H:73
A collection (stored as an array) of FArrayBox objects.
Definition: AMReX_MultiFab.H:38
Definition: AMReX_PODVector.H:246
Definition: AMReX_EB_STL_utils.H:14
int m_num_tri
Definition: AMReX_EB_STL_utils.H:30
static constexpr int allregular
Definition: AMReX_EB_STL_utils.H:20
XDim3 m_ptmax
Definition: AMReX_EB_STL_utils.H:33
void prepare()
Definition: AMReX_EB_STL_utils.cpp:240
int getBoxType(Box const &box, Geometry const &geom, RunOn) const
Definition: AMReX_EB_STL_utils.cpp:464
void fill(MultiFab &mf, IntVect const &nghost, Geometry const &geom, Real outside_value=-1._rt, Real inside_value=1._rt) const
Definition: AMReX_EB_STL_utils.cpp:419
void read_ascii_stl_file(std::string const &fname, Real scale, Array< Real, 3 > const &center, int reverse_normal)
Definition: AMReX_EB_STL_utils.cpp:169
XDim3 m_ptref
Definition: AMReX_EB_STL_utils.H:34
void read_stl_file(std::string const &fname, Real scale, Array< Real, 3 > const &center, int reverse_normal)
Definition: AMReX_EB_STL_utils.cpp:95
void read_binary_stl_file(std::string const &fname, Real scale, Array< Real, 3 > const &center, int reverse_normal)
Definition: AMReX_EB_STL_utils.cpp:120
Gpu::DeviceVector< XDim3 > m_tri_normals_d
Definition: AMReX_EB_STL_utils.H:28
static constexpr int mixedcells
Definition: AMReX_EB_STL_utils.H:21
static constexpr bool isGPUable() noexcept
Definition: AMReX_EB_STL_utils.H:54
static constexpr int allcovered
Definition: AMReX_EB_STL_utils.H:22
void getIntercept(Array< Array4< Real >, AMREX_SPACEDIM > const &inter_arr, Array< Array4< EB2::Type_t const >, AMREX_SPACEDIM > const &type_arr, Array4< Real const > const &lst, Geometry const &geom, RunOn, Box const &bounding_box) const
Definition: AMReX_EB_STL_utils.cpp:588
static void updateIntercept(Array< Array4< Real >, AMREX_SPACEDIM > const &inter_arr, Array< Array4< EB2::Type_t const >, AMREX_SPACEDIM > const &type_arr, Array4< Real const > const &lst, Geometry const &geom)
Definition: AMReX_EB_STL_utils.cpp:682
bool m_boundry_is_outside
Definition: AMReX_EB_STL_utils.H:35
Gpu::PinnedVector< Triangle > m_tri_pts_h
Definition: AMReX_EB_STL_utils.H:26
XDim3 m_ptmin
Definition: AMReX_EB_STL_utils.H:32
void fillFab(BaseFab< Real > &levelset, const Geometry &geom, RunOn, Box const &bounding_box) const
Definition: AMReX_EB_STL_utils.cpp:545
Gpu::DeviceVector< Triangle > m_tri_pts_d
Definition: AMReX_EB_STL_utils.H:27
Definition: AMReX_Amr.cpp:49
RunOn
Definition: AMReX_GpuControl.H:69
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE IntVectND< dim > scale(const IntVectND< dim > &p, int s) noexcept
Returns a IntVectND obtained by multiplying each of the components of this IntVectND by s.
Definition: AMReX_IntVect.H:1006
std::array< T, N > Array
Definition: AMReX_Array.H:23
Definition: AMReX_Array4.H:61
Definition: AMReX_EB_STL_utils.H:16
XDim3 v1
Definition: AMReX_EB_STL_utils.H:17
XDim3 v2
Definition: AMReX_EB_STL_utils.H:17
XDim3 v3
Definition: AMReX_EB_STL_utils.H:17
Definition: AMReX_Dim3.H:13