26 virtual std::unique_ptr<FunctorWrapperHostBase>
build(
const void *
object)
const = 0;
29 template <
typename Object>
33 std::unique_ptr<FunctorWrapperHostBase>
build(
const void *
object)
const override final 35 return std::make_unique<FunctorWrapperHost<Object>>(object);
47 virtual std::unique_ptr<FunctionWrapperHostBase>
build(
const void *
object)
const = 0;
50 template <
typename Object>
54 std::unique_ptr<FunctionWrapperHostBase>
build(
const void *
object)
const override final 56 return std::make_unique<FunctionWrapperHost<Object>>(object);
76 template <
typename Object>
89 template <
typename Object>
103 static std::unique_ptr<FunctorWrapperHostBase>
buildFunctor(
const void *
object,
104 const std::string & name)
108 mooseError(
"Kokkos functor not registered for type '",
110 "'. Double check that you used Kokkos-specific registration macro.");
112 return it->second->build(
object);
121 static std::unique_ptr<FunctionWrapperHostBase>
buildFunction(
const void *
object,
122 const std::string & name)
126 mooseError(
"Kokkos function not registered for type '",
128 "'. Double check that you used Kokkos-specific registration macro.");
130 return it->second->build(
object);
144 std::map<std::string, std::unique_ptr<FunctorRegistryEntryBase>>
_functors;
149 std::map<std::string, std::unique_ptr<FunctionRegistryEntryBase>>
_functions;
154 #define registerKokkosFunction(app, classname) \ 155 registerMooseObject(app, classname); \ 156 static char combineNames(kokkos_functor_##classname, __COUNTER__) = \ 157 Moose::Kokkos::FunctorRegistry::addFunctor<classname>(#classname); \ 158 static char combineNames(kokkos_function_##classname, __COUNTER__) = \ 159 Moose::Kokkos::FunctorRegistry::addFunction<classname>(#classname) 161 #define registerKokkosFunctionAliased(app, classname, alias) \ 162 registerMooseObjectAliased(app, classname, alias); \ 163 static char combineNames(kokkos_functor_##classname, __COUNTER__) = \ 164 Moose::Kokkos::FunctorRegistry::addFunctor<classname>(alias); \ 165 static char combineNames(kokkos_function_##classname, __COUNTER__) = \ 166 Moose::Kokkos::FunctorRegistry::addFunction<classname>(alias) std::string name(const ElemQuality q)
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application...
static char addFunctor(const std::string &name)
Register a functor.
std::unique_ptr< FunctionWrapperHostBase > build(const void *object) const override final
Build a host wrapper for this function.
virtual ~FunctionRegistryEntryBase()
static FunctorRegistry & getRegistry()
Get the registry singleton.
FunctorRegistry & operator=(FunctorRegistry const &)=delete
std::unique_ptr< FunctorWrapperHostBase > build(const void *object) const override final
Build a host wrapper for this functor.
static char addFunction(const std::string &name)
Register a function.
FunctorRegistry()=default
std::map< std::string, std::unique_ptr< FunctionRegistryEntryBase > > _functions
Map containing the host wrapper shells of functions with the key being the registered object type nam...
virtual ~FunctorRegistryEntryBase()
virtual std::unique_ptr< FunctionWrapperHostBase > build(const void *object) const =0
Build a host wrapper for this function.
virtual std::unique_ptr< FunctorWrapperHostBase > build(const void *object) const =0
Build a host wrapper for this functor.
static std::unique_ptr< FunctorWrapperHostBase > buildFunctor(const void *object, const std::string &name)
Build and get a host wrapper of a functor.
std::map< std::string, std::unique_ptr< FunctorRegistryEntryBase > > _functors
Map containing the host wrapper shells of functors with the key being the registered object type name...
static std::unique_ptr< FunctionWrapperHostBase > buildFunction(const void *object, const std::string &name)
Build and get a host wrapper of a function.