Block-Structured AMR Software Framework
Loading...
Searching...
No Matches
AMReX_EB2_IF_Translation.H
Go to the documentation of this file.
1#ifndef AMREX_EB2_IF_TRANSLATION_H_
2#define AMREX_EB2_IF_TRANSLATION_H_
3#include <AMReX_Config.H>
4
5#include <AMReX_EB2_IF_Base.H>
6#include <AMReX_Array.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 TranslationIF (F a_f, const RealArray& a_offset)
28 : m_f(std::move(a_f)),
29 m_offset(makeXDim3(a_offset))
30 {}
31
33 [[nodiscard]] AMREX_FORCE_INLINE Real operator() (const RealArray& p) const noexcept
34 {
35 return m_f({AMREX_D_DECL(p[0]-m_offset.x,
36 p[1]-m_offset.y,
37 p[2]-m_offset.z)});
38 }
39
41 template <class U=F, std::enable_if_t<IsGPUable<U>::value,int> = 0>
44 {
46 y-m_offset.y,
47 z-m_offset.z));
48 }
49
50protected:
51
54};
55
56template <class F>
57struct IsGPUable<TranslationIF<F>, std::enable_if_t<IsGPUable<F>::value>>
58 : std::true_type {};
59
60template <class F>
63{
64 return TranslationIF<std::decay_t<F>>(std::forward<F>(f),offset);
65}
66
67}
68
69#endif
#define AMREX_FORCE_INLINE
Definition AMReX_Extension.H:119
#define AMREX_GPU_HOST_DEVICE
Definition AMReX_GpuQualifiers.H:20
Array4< int const > offset
Definition AMReX_HypreMLABecLap.cpp:1139
#define AMREX_D_DECL(a, b, c)
Definition AMReX_SPACE.H:171
Translate an implicit surface by subtracting an offset vector.
Definition AMReX_EB2_IF_Translation.H:23
F m_f
Definition AMReX_EB2_IF_Translation.H:52
Real operator()(const RealArray &p) const noexcept
Evaluate the translated function on an array of coordinates.
Definition AMReX_EB2_IF_Translation.H:33
XDim3 m_offset
Definition AMReX_EB2_IF_Translation.H:53
TranslationIF(F a_f, const RealArray &a_offset)
Construct a translated implicit function.
Definition AMReX_EB2_IF_Translation.H:27
amrex_real Real
Floating Point Type for Fields.
Definition AMReX_REAL.H:79
Definition AMReX_FabArrayBase.H:33
constexpr TranslationIF< std::decay_t< F > > translate(F &&f, const RealArray &offset)
Definition AMReX_EB2_IF_Translation.H:62
XDim3 makeXDim3(const Array< Real, 3 > &a) noexcept
Definition AMReX_Array.H:1092
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
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