1#ifndef __MODELS_TRAITS_HPP__
2#define __MODELS_TRAITS_HPP__
4#include <Kokkos_Core_fwd.hpp>
5#include <Kokkos_Random.hpp>
6#include <Kokkos_ScatterView.hpp>
7#include <common/common.hpp>
8#include <common/traits.hpp>
10#include <mc/alias.hpp>
11#include <mc/macros.hpp>
12#include <mc/prng/prng.hpp>
17template <std::
size_t N1, std::
size_t N2>
18constexpr std::array<std::string_view, N1 + N2>
19concat_arrays(
const std::array<std::string_view, N1>& arr1,
20 const std::array<std::string_view, N2>& arr2)
22 std::array<std::string_view, N1 + N2> result;
23 std::copy(arr1.begin(), arr1.end(), result.begin());
24 std::copy(arr2.begin(), arr2.end(), result.begin() + N1);
30 const std::size_t size,
33 const typename T::SelfParticle& arr,
34 const T::Config& config) {
35 { model.init(random_pool, idx, arr, config) } -> std::same_as<void>;
37 { model.get_config(size) } -> std::same_as<typename T::Config>;
44 const typename T::SelfParticle& arr) {
45 { model.init(random_pool, idx, arr) } -> std::same_as<void>;
47using NonConfigType = std::nullopt_t;
54template <
typename T,
typename ViewType>
60 const T::SelfParticle& arr,
61 const T::SelfParticle& buffer_arr,
66 const T::Config& config) {
69 } -> std::convertible_to<std::size_t>;
71 typename T::FloatType;
73 typename T::SelfParticle;
85 (std::is_same_v<typename T::Config, NonConfigType> &&
96 } -> std::same_as<double>;
99 T::update(random_pool, d_t, idx, arr, c)
100 } -> std::convertible_to<MC::Status>;
107 { T::get_bounds() } -> std::same_as<MC::ContribIndexBounds>;
110 T::division(random_pool, idx, idx2, arr, buffer_arr)
111 } -> std::same_as<void>;
145template <std::
size_t n,
typename T>
147 { T::names() } -> std::convertible_to<std::array<std::string_view, n>>;
153 { T::names() } -> std::convertible_to<std::array<std::string_view, T::n_var>>;
159 { T::names() } -> std::convertible_to<std::vector<std::string_view>>;
160 { T::get_number() } -> std::convertible_to<std::vector<std::size_t>>;
170template <
typename T,
typename =
void>
Concept to define a correct Model.
Definition traits.hpp:55
Definition traits.hpp:141
Concept to check if a model type has uniform_weight
Definition traits.hpp:183
SFNIAE wau to declare a model with number of internal properties not known at compile time Alows to p...
Definition traits.hpp:129
SFNIAE way to declare a model with number of internal properties known at compile time.
Definition traits.hpp:121
SFNIAE way to check whether model allow all value saving.
Definition traits.hpp:152
SFNIAE way to check whether model allow partial value saving.
Definition traits.hpp:158
Model that can export properties.
Definition traits.hpp:165
Model type.
Definition traits.hpp:135
Definition traits.hpp:138
Concept to check if a model type has uniform_weight
Definition traits.hpp:187
SFNIAE way to check whether model allow internal value saving or not.
Definition traits.hpp:146
gen_pool_type< Kokkos::DefaultExecutionSpace > pool_type
Definition alias.hpp:38
decltype(Kokkos::Experimental::create_scatter_view(kernelContribution())) ContributionView
Definition alias.hpp:87
Kokkos::Subview< KernelConcentrationType, int, decltype(Kokkos::ALL)> LocalConcentration
Definition alias.hpp:95