Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_EB2_IF_Box.H
Go to the documentation of this file.
1#ifndef AMREX_EB2_IF_BOX_H_
2#define AMREX_EB2_IF_BOX_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_Array.H>
6#include <AMReX_EB2_IF_Base.H>
7
8#include <algorithm>
9#include <limits>
10
17// For all implicit functions, >0: body; =0: boundary; <0: fluid
18
19namespace amrex::EB2 {
20
22class BoxIF
23 : GPUable
24{
25public:
26
34 BoxIF (const RealArray& a_lo, const RealArray& a_hi, bool a_inside)
35 : m_lo(makeXDim3(a_lo)),
36 m_hi(makeXDim3(a_hi)),
37 m_sign( a_inside ? 1.0 : -1.0 )
38 {}
39
43 {
44 Real r = std::numeric_limits<Real>::lowest();
45 AMREX_D_TERM(r = amrex::max(r, x-m_hi.x, -(x-m_lo.x));,
46 r = amrex::max(r, y-m_hi.y, -(y-m_lo.y));,
47 r = amrex::max(r, z-m_hi.z, -(z-m_lo.z)););
48 return r*m_sign;
49 }
50
52 [[nodiscard]] AMREX_FORCE_INLINE Real operator() (const RealArray& p) const noexcept
53 {
54 return this->operator() (AMREX_D_DECL(p[0], p[1], p[2]));
55 }
56
57protected:
58
61 //
63};
64
65}
66
67#endif
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
#define AMREX_D_TERM(a, b, c)
Definition AMReX_SPACE.H:172
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Signed implicit function for an axis-aligned box.
Definition AMReX_EB2_IF_Box.H:24
XDim3 m_hi
Definition AMReX_EB2_IF_Box.H:60
XDim3 m_lo
Definition AMReX_EB2_IF_Box.H:59
Real m_sign
Definition AMReX_EB2_IF_Box.H:62
BoxIF(const RealArray &a_lo, const RealArray &a_hi, bool a_inside)
Construct a box implicit surface.
Definition AMReX_EB2_IF_Box.H:34
__host__ __device__ Real operator()(Real x, Real y, Real z) const noexcept
Evaluate the implicit at the given coordinate.
Definition AMReX_EB2_IF_Box.H:42
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_FabArrayBase.H:33
XDim3 makeXDim3(const Array< Real, 3 > &a) noexcept
Definition AMReX_Array.H:1092
__host__ __device__ constexpr const T & max(const T &a, const T &b) noexcept
Definition AMReX_Algorithm.H:44
Array< Real, 3 > RealArray
Definition AMReX_Array.H:28
Marker base that denotes an implicit function callable on device kernels.
Definition AMReX_EB2_IF_Base.H:19
Definition AMReX_Dim3.H:13
Real x
Definition AMReX_Dim3.H:13
Real z
Definition AMReX_Dim3.H:13
Real y
Definition AMReX_Dim3.H:13