Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_EB2_IF_Extrusion.H
Go to the documentation of this file.
1#ifndef AMREX_EB2_IF_EXTRUSION_H_
2#define AMREX_EB2_IF_EXTRUSION_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_Array.H>
6#include <AMReX_EB2_IF_Base.H>
7
8#include <type_traits>
9
16// For all implicit functions, >0: body; =0: boundary; <0: fluid
17
18namespace amrex::EB2 {
19
20template <class F>
23{
24public:
25
27 ExtrusionIF (F a_f, int direction)
28 : m_f(std::move(a_f)),
29 m_direction(direction)
30 {}
31
32 [[nodiscard]] AMREX_FORCE_INLINE Real operator() (const RealArray& p) const
33 {
34 RealArray x = p;
35 x[m_direction] = 0.0;
36 return m_f(x);
37 }
38
39 template <class U=F, std::enable_if_t<IsGPUable<U>::value,int> = 0>
42 {
43 switch (m_direction)
44 {
45 case 0:
46 return m_f(AMREX_D_DECL(0.0, y, z));
47 case 1:
48 return m_f(AMREX_D_DECL(x, 0.0, z));
49 default:
50 return m_f(AMREX_D_DECL(x, y, 0.0));
51 }
52 }
53
54protected:
55
58};
59
60template <class F>
61struct IsGPUable<ExtrusionIF<F>, std::enable_if_t<IsGPUable<F>::value>>
62 : std::true_type {};
63
64template <class F>
66extrude (F&&f, int direction)
67{
68 return ExtrusionIF<std::decay_t<F>>(std::forward<F>(f),direction);
69}
70
71}
72
73#endif
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Extrude a 2-D implicit function uniformly along a coordinate direction.
Definition AMReX_EB2_IF_Extrusion.H:23
Real operator()(const RealArray &p) const
Definition AMReX_EB2_IF_Extrusion.H:32
F m_f
Definition AMReX_EB2_IF_Extrusion.H:56
int m_direction
Definition AMReX_EB2_IF_Extrusion.H:57
ExtrusionIF(F a_f, int direction)
Store the child implicit function and the axis to extrude (0/1/2).
Definition AMReX_EB2_IF_Extrusion.H:27
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_FabArrayBase.H:33
constexpr ExtrusionIF< std::decay_t< F > > extrude(F &&f, int direction)
Definition AMReX_EB2_IF_Extrusion.H:66
Array< Real, 3 > RealArray
Definition AMReX_Array.H:28
Type trait that reports whether a functor derives from GPUable.
Definition AMReX_EB2_IF_Base.H:24