SimiLie
Loading...
Searching...
No Matches
evaluators.hpp
1// SPDX-FileCopyrightText: 2026 Baptiste Legouix
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4#pragma once
5
6#include <similie/misc/clamp_to_domain.hpp>
7#include <similie/misc/domain_contains.hpp>
8
9#include <Kokkos_Core.hpp>
10
11namespace sil {
12
13namespace exterior {
14
15namespace detail {
16
17struct IdentityStencilEvaluator
18{
19 KOKKOS_FUNCTION double operator()(auto, auto) const
20 {
21 return 0.0;
22 }
23
24 KOKKOS_FUNCTION double value(auto sampler, auto sampled_elem, auto cochain_elem) const
25 {
26 return sampler(sampled_elem, cochain_elem);
27 }
28};
29
30template <class TensorType>
31struct ClampedTensorEvaluator
32{
33 TensorType tensor;
34
35 KOKKOS_FUNCTION double operator()(auto sampled_elem, auto cochain_elem) const
36 {
37 auto const clamped_elem = misc::clamp_to_domain(tensor.non_indices_domain(), sampled_elem);
38 return tensor.mem(clamped_elem, cochain_elem);
39 }
40
41 KOKKOS_FUNCTION double value(auto sampler, auto sampled_elem, auto cochain_elem) const
42 {
43 auto const clamped_elem = misc::clamp_to_domain(tensor.non_indices_domain(), sampled_elem);
44 return sampler(clamped_elem, cochain_elem);
45 }
46};
47
48template <class TensorType>
49struct ZeroOutsideTensorEvaluator
50{
51 TensorType tensor;
52
53 KOKKOS_FUNCTION double operator()(auto sampled_elem, auto cochain_elem) const
54 {
55 if (!misc::domain_contains(tensor.non_indices_domain(), sampled_elem)) {
56 return 0.0;
57 }
58 return tensor.mem(sampled_elem, cochain_elem);
59 }
60
61 KOKKOS_FUNCTION double value(auto sampler, auto sampled_elem, auto cochain_elem) const
62 {
63 if (!misc::domain_contains(tensor.non_indices_domain(), sampled_elem)) {
64 return 0.0;
65 }
66 return sampler(sampled_elem, cochain_elem);
67 }
68};
69
70} // namespace detail
71
72} // namespace exterior
73
74} // namespace sil
KOKKOS_FUNCTION Elem clamp_to_domain(BatchDomain const &batch_domain, Elem const &elem)
KOKKOS_FUNCTION bool domain_contains(ddc::DiscreteDomain< DDim... > dom, ddc::DiscreteElement< ODDim... > elem)
The top-level namespace of SimiLie.
Definition csr.hpp:15