From 38fcb61fea718106d09fce4ce08f56df63bb4776 Mon Sep 17 00:00:00 2001 From: blegouix Date: Sun, 29 Dec 2024 13:19:37 +0000 Subject: [PATCH] Update to match 66038a1242c3813a981574440329c960b610bcac by push 118 --- annotated.html | 27 +- annotated_dup.js | 1 + character_8hpp_source.html | 4 +- classes.html | 2 +- classsil_1_1tensor_1_1TensorAccessor.html | 22 +- ..._00_0ff62584396f9b5f08cbf3c068fb7130c.html | 52 +- codifferential_8hpp_source.html | 289 +- doxygen_crawl.html | 5 +- hierarchy.html | 20 +- hierarchy.js | 3 + hodge__star_8hpp_source.html | 269 +- inherit_graph_25.map | 4 +- inherit_graph_25.md5 | 2 +- inherit_graph_25.png | Bin 3813 -> 5571 bytes inherit_graph_26.map | 2 +- inherit_graph_26.md5 | 2 +- inherit_graph_26.png | Bin 5233 -> 3813 bytes inherit_graph_27.map | 4 +- inherit_graph_27.md5 | 2 +- inherit_graph_27.png | Bin 5520 -> 5233 bytes inherit_graph_28.map | 6 +- inherit_graph_28.md5 | 2 +- inherit_graph_28.png | Bin 5440 -> 5520 bytes inherit_graph_29.map | 5 + inherit_graph_29.md5 | 1 + inherit_graph_29.png | Bin 0 -> 5440 bytes inherits.html | 15 +- laplacian_8hpp_source.html | 6 +- levi__civita__tensor_8hpp_source.html | 102 +- metric_8hpp_source.html | 12 +- namespacemembers.html | 2 +- namespacemembers_type.html | 2 +- namespacesil_1_1exterior.html | 26 +- namespacesil_1_1exterior.js | 2 +- namespacesil_1_1tensor.html | 36 +- namespacesil_1_1tensor.js | 1 + navtreeindex1.js | 116 +- navtreeindex2.js | 214 +- search/all_10.js | 53 +- search/all_11.js | 15 +- search/all_7.js | 2 +- search/classes_6.js | 3 +- search/classes_7.js | 5 +- search/typedefs_6.js | 2 +- ...tsil_1_1tensor_1_1ScalarIndex-members.html | 164 ++ structsil_1_1tensor_1_1ScalarIndex.html | 215 ++ ..._1_1tensor_1_1ScalarIndex__coll__graph.map | 5 + ..._1_1tensor_1_1ScalarIndex__coll__graph.md5 | 1 + ..._1_1tensor_1_1ScalarIndex__coll__graph.png | Bin 0 -> 18943 bytes ...1tensor_1_1ScalarIndex__inherit__graph.map | 5 + ...1tensor_1_1ScalarIndex__inherit__graph.md5 | 1 + ...1tensor_1_1ScalarIndex__inherit__graph.png | Bin 0 -> 18943 bytes ...il_1_1tensor_1_1TensorLeviCivitaIndex.html | 6 +- tensor__impl_8hpp_source.html | 2565 +++++++++-------- tensor__prod_8hpp_source.html | 4 +- young__tableau_8hpp_source.html | 2 +- 56 files changed, 2385 insertions(+), 1921 deletions(-) create mode 100644 inherit_graph_29.map create mode 100644 inherit_graph_29.md5 create mode 100644 inherit_graph_29.png create mode 100644 structsil_1_1tensor_1_1ScalarIndex-members.html create mode 100644 structsil_1_1tensor_1_1ScalarIndex.html create mode 100644 structsil_1_1tensor_1_1ScalarIndex__coll__graph.map create mode 100644 structsil_1_1tensor_1_1ScalarIndex__coll__graph.md5 create mode 100644 structsil_1_1tensor_1_1ScalarIndex__coll__graph.png create mode 100644 structsil_1_1tensor_1_1ScalarIndex__inherit__graph.map create mode 100644 structsil_1_1tensor_1_1ScalarIndex__inherit__graph.md5 create mode 100644 structsil_1_1tensor_1_1ScalarIndex__inherit__graph.png diff --git a/annotated.html b/annotated.html index 9504f2d1..804166ac 100644 --- a/annotated.html +++ b/annotated.html @@ -153,19 +153,20 @@  CMetricIndex1  CMetricIndex2  Cprime - CTensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >Tensor class - CTensorAccessor - CTensorAntisymmetricIndex - CTensorContravariantNaturalIndex - CTensorCovariantNaturalIndex - CTensorDiagonalIndex - CTensorFullIndex - CTensorIdentityIndex - CTensorLeviCivitaIndex - CTensorLorentzianSignIndex - CTensorNaturalIndex - CTensorSymmetricIndex - CTensorYoungTableauIndex + CScalarIndex + CTensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >Tensor class + CTensorAccessor + CTensorAntisymmetricIndex + CTensorContravariantNaturalIndex + CTensorCovariantNaturalIndex + CTensorDiagonalIndex + CTensorFullIndex + CTensorIdentityIndex + CTensorLeviCivitaIndex + CTensorLorentzianSignIndex + CTensorNaturalIndex + CTensorSymmetricIndex + CTensorYoungTableauIndex diff --git a/annotated_dup.js b/annotated_dup.js index ea7f7feb..8f6152d6 100644 --- a/annotated_dup.js +++ b/annotated_dup.js @@ -27,6 +27,7 @@ var annotated_dup = [ "MetricIndex1", "structsil_1_1tensor_1_1MetricIndex1.html", null ], [ "MetricIndex2", "structsil_1_1tensor_1_1MetricIndex2.html", null ], [ "prime", "structsil_1_1tensor_1_1prime.html", null ], + [ "ScalarIndex", "structsil_1_1tensor_1_1ScalarIndex.html", null ], [ "Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >", "classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html", "classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c" ], [ "TensorAccessor", "classsil_1_1tensor_1_1TensorAccessor.html", "classsil_1_1tensor_1_1TensorAccessor" ], [ "TensorAntisymmetricIndex", "structsil_1_1tensor_1_1TensorAntisymmetricIndex.html", "structsil_1_1tensor_1_1TensorAntisymmetricIndex" ], diff --git a/character_8hpp_source.html b/character_8hpp_source.html index 16b5fb42..7512187f 100644 --- a/character_8hpp_source.html +++ b/character_8hpp_source.html @@ -504,7 +504,7 @@
constexpr uncharacterize_tensor_t< TensorType > uncharacterize_tensor(TensorType tensor)
constexpr bool are_same_characters_v
relabelize_indices_of_t< TensorType, ddc::to_type_seq_t< typename TensorType::accessor_t::natural_domain_t >, uncharacterize< ddc::to_type_seq_t< typename TensorType::accessor_t::natural_domain_t > > > uncharacterize_tensor_t
-
detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
+
detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
bool constexpr are_covariant_v
bool constexpr is_contravariant_v
constexpr bool is_same_character_v
@@ -512,7 +512,7 @@
constexpr bool are_different_characters_v
detail::SwapCharacter< T >::type swap_character
detail::Lower< T >::type lower
Definition character.hpp:78
-
constexpr relabelize_indices_of_t< Tensor, OldIndices, NewIndices > relabelize_indices_of(Tensor tensor)
+
constexpr relabelize_indices_of_t< Tensor, OldIndices, NewIndices > relabelize_indices_of(Tensor tensor)
bool constexpr is_covariant_v
detail::Uncharacterize< Index >::type uncharacterize
bool constexpr are_contravariant_v
diff --git a/classes.html b/classes.html index c9e0afd9..ed5f3511 100644 --- a/classes.html +++ b/classes.html @@ -150,7 +150,7 @@
prime (sil::tensor)
S
-
Simplex (sil::exterior)
+
ScalarIndex (sil::tensor)
Simplex (sil::exterior)
T
Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > (sil::tensor)
TensorAccessor (sil::tensor)
TensorAntisymmetricIndex (sil::tensor)
TensorContravariantNaturalIndex (sil::tensor)
TensorCovariantNaturalIndex (sil::tensor)
TensorDiagonalIndex (sil::tensor)
TensorFullIndex (sil::tensor)
TensorIdentityIndex (sil::tensor)
TensorLeviCivitaIndex (sil::tensor)
TensorLorentzianSignIndex (sil::tensor)
TensorNaturalIndex (sil::tensor)
TensorSymmetricIndex (sil::tensor)
TensorYoungTableauIndex (sil::tensor)
diff --git a/classsil_1_1tensor_1_1TensorAccessor.html b/classsil_1_1tensor_1_1TensorAccessor.html index aa3ec155..0f4611f6 100644 --- a/classsil_1_1tensor_1_1TensorAccessor.html +++ b/classsil_1_1tensor_1_1TensorAccessor.html @@ -179,7 +179,7 @@

Detailed Description

template<TensorIndex... Index>
class sil::tensor::TensorAccessor< Index >
-

Definition at line 265 of file tensor_impl.hpp.

+

Definition at line 270 of file tensor_impl.hpp.

Member Typedef Documentation

◆ discrete_domain_type

@@ -195,7 +195,7 @@

-

Definition at line 270 of file tensor_impl.hpp.

+

Definition at line 275 of file tensor_impl.hpp.

@@ -213,7 +213,7 @@

-

Definition at line 272 of file tensor_impl.hpp.

+

Definition at line 277 of file tensor_impl.hpp.

@@ -236,7 +236,7 @@

typename Index::subindices_domain_t>...> -

Definition at line 274 of file tensor_impl.hpp.

+

Definition at line 279 of file tensor_impl.hpp.

@@ -266,7 +266,7 @@

-

Definition at line 327 of file tensor_impl.hpp.

+

Definition at line 332 of file tensor_impl.hpp.

@@ -296,7 +296,7 @@

-

Definition at line 345 of file tensor_impl.hpp.

+

Definition at line 350 of file tensor_impl.hpp.

@@ -325,7 +325,7 @@

-

Definition at line 351 of file tensor_impl.hpp.

+

Definition at line 356 of file tensor_impl.hpp.

@@ -354,7 +354,7 @@

-

Definition at line 359 of file tensor_impl.hpp.

+

Definition at line 364 of file tensor_impl.hpp.

@@ -385,7 +385,7 @@

-

Definition at line 368 of file tensor_impl.hpp.

+

Definition at line 373 of file tensor_impl.hpp.

@@ -416,7 +416,7 @@

-

Definition at line 376 of file tensor_impl.hpp.

+

Definition at line 381 of file tensor_impl.hpp.

@@ -447,7 +447,7 @@

-

Definition at line 387 of file tensor_impl.hpp.

+

Definition at line 392 of file tensor_impl.hpp.

diff --git a/classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html b/classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html index f4aeb66b..5d9d2906 100644 --- a/classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html +++ b/classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html @@ -231,7 +231,7 @@
template<class ElementType, class... DDim, class LayoutStridedPolicy, class MemorySpace>
class sil::tensor::Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >

Tensor class.

-

Definition at line 577 of file tensor_impl.hpp.

+

Definition at line 585 of file tensor_impl.hpp.

Member Typedef Documentation

◆ base_type

@@ -257,7 +257,7 @@

ddc::
ChunkSpan<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
-

Definition at line 582 of file tensor_impl.hpp.

+

Definition at line 590 of file tensor_impl.hpp.

@@ -275,7 +275,7 @@

-

Definition at line 587 of file tensor_impl.hpp.

+

Definition at line 595 of file tensor_impl.hpp.

@@ -293,7 +293,7 @@

-

Definition at line 588 of file tensor_impl.hpp.

+

Definition at line 596 of file tensor_impl.hpp.

@@ -311,7 +311,7 @@

-

Definition at line 589 of file tensor_impl.hpp.

+

Definition at line 597 of file tensor_impl.hpp.

@@ -333,9 +333,9 @@

ddc::DiscreteDomain<DDim>,
ddc::DiscreteDomain<>>...>>
-
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
+
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
-

Definition at line 603 of file tensor_impl.hpp.

+

Definition at line 611 of file tensor_impl.hpp.

@@ -353,7 +353,7 @@

-

Definition at line 613 of file tensor_impl.hpp.

+

Definition at line 621 of file tensor_impl.hpp.

@@ -374,7 +374,7 @@

ddc::to_type_seq_t<discrete_domain_type>,
ddc::to_type_seq_t<indices_domain_t>>>
-

Definition at line 615 of file tensor_impl.hpp.

+

Definition at line 623 of file tensor_impl.hpp.

@@ -392,7 +392,7 @@

-

Definition at line 629 of file tensor_impl.hpp.

+

Definition at line 637 of file tensor_impl.hpp.

@@ -422,7 +422,7 @@

-

Definition at line 594 of file tensor_impl.hpp.

+

Definition at line 602 of file tensor_impl.hpp.

@@ -452,7 +452,7 @@

-

Definition at line 608 of file tensor_impl.hpp.

+

Definition at line 616 of file tensor_impl.hpp.

@@ -481,7 +481,7 @@

-

Definition at line 619 of file tensor_impl.hpp.

+

Definition at line 627 of file tensor_impl.hpp.

@@ -510,7 +510,7 @@

-

Definition at line 624 of file tensor_impl.hpp.

+

Definition at line 632 of file tensor_impl.hpp.

@@ -539,7 +539,7 @@

-

Definition at line 631 of file tensor_impl.hpp.

+

Definition at line 639 of file tensor_impl.hpp.

@@ -568,7 +568,7 @@

-

Definition at line 636 of file tensor_impl.hpp.

+

Definition at line 644 of file tensor_impl.hpp.

@@ -597,7 +597,7 @@

-

Definition at line 641 of file tensor_impl.hpp.

+

Definition at line 649 of file tensor_impl.hpp.

@@ -628,7 +628,7 @@

-

Definition at line 647 of file tensor_impl.hpp.

+

Definition at line 655 of file tensor_impl.hpp.

@@ -659,7 +659,7 @@

-

Definition at line 654 of file tensor_impl.hpp.

+

Definition at line 662 of file tensor_impl.hpp.

@@ -690,7 +690,7 @@

-

Definition at line 663 of file tensor_impl.hpp.

+

Definition at line 671 of file tensor_impl.hpp.

@@ -721,7 +721,7 @@

-

Definition at line 673 of file tensor_impl.hpp.

+

Definition at line 681 of file tensor_impl.hpp.

@@ -752,7 +752,7 @@

-

Definition at line 683 of file tensor_impl.hpp.

+

Definition at line 691 of file tensor_impl.hpp.

@@ -783,7 +783,7 @@

-

Definition at line 695 of file tensor_impl.hpp.

+

Definition at line 703 of file tensor_impl.hpp.

@@ -814,7 +814,7 @@

-

Definition at line 715 of file tensor_impl.hpp.

+

Definition at line 723 of file tensor_impl.hpp.

@@ -843,7 +843,7 @@

-

Definition at line 736 of file tensor_impl.hpp.

+

Definition at line 744 of file tensor_impl.hpp.

@@ -872,7 +872,7 @@

-

Definition at line 753 of file tensor_impl.hpp.

+

Definition at line 761 of file tensor_impl.hpp.

diff --git a/codifferential_8hpp_source.html b/codifferential_8hpp_source.html index ea095e14..ad72deb7 100644 --- a/codifferential_8hpp_source.html +++ b/codifferential_8hpp_source.html @@ -184,7 +184,7 @@
54 requires(CochainTag::rank() == 1 && std::is_same_v<TagToRemoveFromCochain, CochainTag>)
55struct CodifferentialIndex<TagToRemoveFromCochain, CochainTag>
56{
- +
58};
59
60template <tensor::TensorNatIndex TagToRemoveFromCochain, tensor::TensorNatIndex Tag>
@@ -260,164 +260,181 @@
130};
131
132template <class Ids, class T>
-
133struct CodifferentialDummyIndexSeq;
+
133struct CodifferentialDummyIndexSeq_;
134
135template <std::size_t... Id, class T>
-
136struct CodifferentialDummyIndexSeq<std::index_sequence<Id...>, T>
+
136struct CodifferentialDummyIndexSeq_<std::index_sequence<Id...>, T>
137{
138 using type = ddc::detail::TypeSeq<
140};
141
-
142} // namespace detail
-
143
-
144template <
-
145 tensor::TensorIndex MetricIndex,
-
146 tensor::TensorNatIndex TagToRemoveFromCochain,
-
147 tensor::TensorIndex CochainTag,
- - -
150 class ExecSpace>
-
- -
152 ExecSpace const& exec_space,
- -
154 codifferential_tensor,
-
155 TensorType tensor,
-
156 MetricType inv_metric)
-
157{
- - -
160 using NuLowSeq = typename detail::CodifferentialDummyIndexSeq<
-
161 std::make_index_sequence<TagToRemoveFromCochain::size() - CochainTag::rank()>,
-
162 TagToRemoveFromCochain>::type;
-
163 using RhoLowSeq = ddc::type_seq_merge_t<ddc::detail::TypeSeq<TagToRemoveFromCochain>, NuLowSeq>;
-
164 using RhoUpSeq = tensor::upper<RhoLowSeq>;
-
165 using SigmaLowSeq = ddc::
-
166 type_seq_remove_t<tensor::lower<MuUpSeq>, ddc::detail::TypeSeq<TagToRemoveFromCochain>>;
-
167
- - -
170
-
171 // Hodge star
-
172 [[maybe_unused]] sil::tensor::tensor_accessor_for_domain_t<HodgeStarDomain> hodge_star_accessor;
-
173 ddc::cartesian_prod_t<typename MetricType::non_indices_domain_t, HodgeStarDomain>
-
174 hodge_star_dom(inv_metric.non_indices_domain(), hodge_star_accessor.mem_domain());
-
175 ddc::Chunk hodge_star_alloc(
-
176 hodge_star_dom,
-
177 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
178 sil::tensor::Tensor hodge_star(hodge_star_alloc);
-
179
- - -
182 MuUpSeq,
-
183 NuLowSeq>(exec_space, hodge_star, inv_metric);
-
184 exec_space.fence();
-
185
-
186 // Dual tensor
-
187 [[maybe_unused]] tensor::TensorAccessor<
- -
189 dual_tensor_accessor;
-
190 ddc::cartesian_prod_t<
-
191 typename TensorType::non_indices_domain_t,
-
192 ddc::DiscreteDomain<
- -
194 dual_tensor_dom(tensor.non_indices_domain(), dual_tensor_accessor.mem_domain());
-
195 ddc::Chunk dual_tensor_alloc(
-
196 dual_tensor_dom,
-
197 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
198 sil::tensor::Tensor dual_tensor(dual_tensor_alloc);
-
199
-
200 ddc::parallel_for_each(
-
201 exec_space,
-
202 dual_tensor.non_indices_domain(),
-
203 KOKKOS_LAMBDA(typename TensorType::non_indices_domain_t::discrete_element_type elem) {
-
204 sil::tensor::tensor_prod(dual_tensor[elem], tensor[elem], hodge_star[elem]);
-
205 });
-
206 exec_space.fence();
-
207
-
208 // Dual codifferential
-
209 [[maybe_unused]] tensor::TensorAccessor<
- -
211 dual_codifferential_accessor;
-
212 ddc::cartesian_prod_t<
-
213 typename TensorType::non_indices_domain_t,
-
214 ddc::DiscreteDomain<
- -
216 dual_codifferential_dom(
-
217 tensor.non_indices_domain(),
-
218 dual_codifferential_accessor.mem_domain());
-
219 ddc::Chunk dual_codifferential_alloc(
-
220 dual_codifferential_dom,
-
221 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
222 sil::tensor::Tensor dual_codifferential(dual_codifferential_alloc);
- -
224 TagToRemoveFromCochain,
- - -
227 NuLowSeq>>(exec_space, dual_codifferential, dual_tensor);
-
228 exec_space.fence();
-
229
-
230 // Hodge star 2
- -
232 hodge_star_accessor2;
-
233 ddc::cartesian_prod_t<typename MetricType::non_indices_domain_t, HodgeStarDomain2>
-
234 hodge_star_dom2(inv_metric.non_indices_domain(), hodge_star_accessor2.mem_domain());
-
235 ddc::Chunk hodge_star_alloc2(
-
236 hodge_star_dom2,
-
237 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
238 sil::tensor::Tensor hodge_star2(hodge_star_alloc2);
-
239
- - -
242 RhoUpSeq,
-
243 SigmaLowSeq>(exec_space, hodge_star2, inv_metric);
-
244 exec_space.fence();
-
245
-
246 // Codifferential
-
247 ddc::parallel_for_each(
-
248 exec_space,
-
249 codifferential_tensor.non_indices_domain(),
-
250 KOKKOS_LAMBDA(typename TensorType::non_indices_domain_t::discrete_element_type elem) {
- -
252 codifferential_tensor[elem],
-
253 dual_codifferential[elem],
-
254 hodge_star2[elem]);
-
255 if constexpr (
-
256 (TagToRemoveFromCochain::size() * (CochainTag::rank() + 1) + 1) % 2 == 1) {
-
257 codifferential_tensor[elem] *= -1;
-
258 }
-
259 });
-
260 exec_space.fence();
-
261
-
262 return codifferential_tensor;
-
263}
+
142template <std::size_t EndId, class T>
+
143struct CodifferentialDummyIndexSeq;
+
144
+
145template <std::size_t EndId, class T>
+
146 requires(EndId == 0)
+
147struct CodifferentialDummyIndexSeq<EndId, T>
+
148{
+
149 using type = ddc::detail::TypeSeq<>;
+
150};
+
151
+
152template <std::size_t EndId, class T>
+
153 requires(EndId > 0)
+
154struct CodifferentialDummyIndexSeq<EndId, T>
+
155{
+
156 using type = typename CodifferentialDummyIndexSeq_<std::make_index_sequence<EndId>, T>::type;
+
157};
+
158
+
159} // namespace detail
+
160
+
161template <
+
162 tensor::TensorIndex MetricIndex,
+
163 tensor::TensorNatIndex TagToRemoveFromCochain,
+
164 tensor::TensorIndex CochainTag,
+ + +
167 class ExecSpace>
+
+ +
169 ExecSpace const& exec_space,
+ +
171 codifferential_tensor,
+
172 TensorType tensor,
+
173 MetricType inv_metric)
+
174{
+ + +
177 using NuLowSeq = typename detail::CodifferentialDummyIndexSeq<
+
178 TagToRemoveFromCochain::size() - CochainTag::rank(),
+
179 TagToRemoveFromCochain>::type;
+
180 using RhoLowSeq = ddc::type_seq_merge_t<ddc::detail::TypeSeq<TagToRemoveFromCochain>, NuLowSeq>;
+
181 using RhoUpSeq = tensor::upper<RhoLowSeq>;
+
182 using SigmaLowSeq = ddc::
+
183 type_seq_remove_t<tensor::lower<MuUpSeq>, ddc::detail::TypeSeq<TagToRemoveFromCochain>>;
+
184
+ + +
187
+
188 // Hodge star
+
189 [[maybe_unused]] sil::tensor::tensor_accessor_for_domain_t<HodgeStarDomain> hodge_star_accessor;
+
190 ddc::cartesian_prod_t<typename MetricType::non_indices_domain_t, HodgeStarDomain>
+
191 hodge_star_dom(inv_metric.non_indices_domain(), hodge_star_accessor.mem_domain());
+
192 ddc::Chunk hodge_star_alloc(
+
193 hodge_star_dom,
+
194 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
195 sil::tensor::Tensor hodge_star(hodge_star_alloc);
+
196
+ + +
199 MuUpSeq,
+
200 NuLowSeq>(exec_space, hodge_star, inv_metric);
+
201 exec_space.fence();
+
202
+
203 // Dual tensor
+
204 [[maybe_unused]] tensor::TensorAccessor<
+ +
206 dual_tensor_accessor;
+
207 ddc::cartesian_prod_t<
+
208 typename TensorType::non_indices_domain_t,
+
209 ddc::DiscreteDomain<
+ +
211 dual_tensor_dom(tensor.non_indices_domain(), dual_tensor_accessor.mem_domain());
+
212 ddc::Chunk dual_tensor_alloc(
+
213 dual_tensor_dom,
+
214 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
215 sil::tensor::Tensor dual_tensor(dual_tensor_alloc);
+
216
+
217 ddc::parallel_for_each(
+
218 exec_space,
+
219 dual_tensor.non_indices_domain(),
+
220 KOKKOS_LAMBDA(typename TensorType::non_indices_domain_t::discrete_element_type elem) {
+
221 sil::tensor::tensor_prod(dual_tensor[elem], tensor[elem], hodge_star[elem]);
+
222 });
+
223 exec_space.fence();
+
224
+
225 // Dual codifferential
+
226 [[maybe_unused]] tensor::TensorAccessor<
+ +
228 dual_codifferential_accessor;
+
229 ddc::cartesian_prod_t<
+
230 typename TensorType::non_indices_domain_t,
+
231 ddc::DiscreteDomain<
+ +
233 dual_codifferential_dom(
+
234 tensor.non_indices_domain(),
+
235 dual_codifferential_accessor.mem_domain());
+
236 ddc::Chunk dual_codifferential_alloc(
+
237 dual_codifferential_dom,
+
238 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
239 sil::tensor::Tensor dual_codifferential(dual_codifferential_alloc);
+ +
241 TagToRemoveFromCochain,
+ + +
244 NuLowSeq>>(exec_space, dual_codifferential, dual_tensor);
+
245 exec_space.fence();
+
246
+
247 // Hodge star 2
+ +
249 hodge_star_accessor2;
+
250 ddc::cartesian_prod_t<typename MetricType::non_indices_domain_t, HodgeStarDomain2>
+
251 hodge_star_dom2(inv_metric.non_indices_domain(), hodge_star_accessor2.mem_domain());
+
252 ddc::Chunk hodge_star_alloc2(
+
253 hodge_star_dom2,
+
254 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
255 sil::tensor::Tensor hodge_star2(hodge_star_alloc2);
+
256
+ + +
259 RhoUpSeq,
+
260 SigmaLowSeq>(exec_space, hodge_star2, inv_metric);
+
261 exec_space.fence();
+
262
+
263 // Codifferential
+
264 ddc::parallel_for_each(
+
265 exec_space,
+
266 codifferential_tensor.non_indices_domain(),
+
267 KOKKOS_LAMBDA(typename TensorType::non_indices_domain_t::discrete_element_type elem) {
+ +
269 codifferential_tensor[elem],
+
270 dual_codifferential[elem],
+
271 hodge_star2[elem]);
+
272 if constexpr (
+
273 (TagToRemoveFromCochain::size() * (CochainTag::rank() + 1) + 1) % 2 == 1) {
+
274 codifferential_tensor[elem] *= -1;
+
275 }
+
276 });
+
277 exec_space.fence();
+
278
+
279 return codifferential_tensor;
+
280}
-
264
-
265} // namespace exterior
-
266
-
267} // namespace sil
- +
281
+
282} // namespace exterior
+
283
+
284} // namespace sil
+ -
HodgeStarType fill_hodge_star(ExecSpace const &exec_space, HodgeStarType hodge_star, MetricDeterminantType metric_determinant, MetricProdType metric_prod)
+
HodgeStarType fill_hodge_star(ExecSpace const &exec_space, HodgeStarType hodge_star, MetricDeterminantType metric_determinant, MetricProdType metric_prod)
Cochain(ChainType, TensorType) -> Cochain< ChainType, typename TensorType::value_type, ddc::detail::mdspan_to_kokkos_layout_t< typename TensorType::layout_type > >
Simplex(ddc::DiscreteElement< Tag... >, ddc::DiscreteVector< T... >) -> Simplex< sizeof...(T), Tag... >
typename detail:: CodifferentialTensorType< TagToRemoveFromCochain, CochainTag, TensorType >::type codifferential_tensor_t
Chain(Head, Tail...) -> Chain< typename Head::value_type, typename Head::array_layout, typename Head::memory_space >
+
ddc::detail::convert_type_seq_to_discrete_domain_t< ddc::type_seq_merge_t< ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorFullIndex, Indices1 > >, std::conditional_t<(ddc::type_seq_size_v< Indices2 >==0), ddc::detail::TypeSeq<>, ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorAntisymmetricIndex, Indices2 > > > > > hodge_star_domain_t
coboundary_tensor_t< TagToAddToCochain, CochainTag, TensorType > deriv(ExecSpace const &exec_space, coboundary_tensor_t< TagToAddToCochain, CochainTag, TensorType > coboundary_tensor, TensorType tensor)
typename detail::CodifferentialIndex< TagToRemoveFromCochain, CochainTag >::type codifferential_index_t
-
codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential(ExecSpace const &exec_space, codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential_tensor, TensorType tensor, MetricType inv_metric)
+
codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential(ExecSpace const &exec_space, codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential_tensor, TensorType tensor, MetricType inv_metric)
typename detail::CodifferentialType< CochainType >::type codifferential_t
-
ddc::detail::convert_type_seq_to_discrete_domain_t< ddc::type_seq_merge_t< ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorFullIndex, Indices1 > >, ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorAntisymmetricIndex, Indices2 > > > > hodge_star_domain_t
typename detail::ConvertTypeSeqTo< T, Seq >::type convert_type_seq_to_t
Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
-
Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > tensor_prod(Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > prod_tensor, Tensor< ElementType, ddc::DiscreteDomain< DDim1... >, LayoutStridedPolicy, MemorySpace > tensor1, Tensor< ElementType, ddc::DiscreteDomain< DDim2... >, LayoutStridedPolicy, MemorySpace > tensor2)
+
Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > tensor_prod(Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > prod_tensor, Tensor< ElementType, ddc::DiscreteDomain< DDim1... >, LayoutStridedPolicy, MemorySpace > tensor1, Tensor< ElementType, ddc::DiscreteDomain< DDim2... >, LayoutStridedPolicy, MemorySpace > tensor2)
detail::Upper< T >::type upper
bool constexpr is_covariant_v
detail::Uncharacterize< Index >::type uncharacterize
-
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
+
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
The top-level namespace of SimiLie.
Definition csr.hpp:14
diff --git a/doxygen_crawl.html b/doxygen_crawl.html index 3ce1a2db..08050808 100644 --- a/doxygen_crawl.html +++ b/doxygen_crawl.html @@ -89,6 +89,8 @@ + + @@ -588,6 +590,7 @@ + @@ -605,7 +608,6 @@ - @@ -683,6 +685,7 @@ + diff --git a/hierarchy.html b/hierarchy.html index bcf0c7c2..9c366a59 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -161,15 +161,17 @@  Csil::tensor::MetricIndex1< CDim >  Csil::tensor::MetricIndex2< CDim >  Csil::tensor::TensorNaturalIndex< Dummy< Id >... > - Csil::tensor::TensorSymmetricIndex< TensorIndex > - Csil::tensor::TensorYoungTableauIndex< YoungTableau, TensorIndex > - Cstd::true_type - Csil::misc::is_specialization_of< T, T< Us... > > - Cdetail::TensorNaturalIndexFromTypeSeqDim::type - Csil::tensor::TensorContravariantNaturalIndex< NaturalIndex > - Csil::tensor::TensorCovariantNaturalIndex< NaturalIndex > - Csil::tensor::Index - Csil::tensor::prime< Index, I > + Csil::tensor::TensorNaturalIndex<> + Csil::tensor::ScalarIndex + Csil::tensor::TensorSymmetricIndex< TensorIndex > + Csil::tensor::TensorYoungTableauIndex< YoungTableau, TensorIndex > + Cstd::true_type + Csil::misc::is_specialization_of< T, T< Us... > > + Cdetail::TensorNaturalIndexFromTypeSeqDim::type + Csil::tensor::TensorContravariantNaturalIndex< NaturalIndex > + Csil::tensor::TensorCovariantNaturalIndex< NaturalIndex > + Csil::tensor::Index + Csil::tensor::prime< Index, I >
diff --git a/hierarchy.js b/hierarchy.js index 5cd1aae6..ec2a807f 100644 --- a/hierarchy.js +++ b/hierarchy.js @@ -33,6 +33,9 @@ var hierarchy = [ "sil::tensor::MetricIndex2< CDim >", "structsil_1_1tensor_1_1MetricIndex2.html", null ] ] ], [ "sil::tensor::TensorNaturalIndex< Dummy< Id >... >", "structsil_1_1tensor_1_1TensorNaturalIndex.html", null ], + [ "sil::tensor::TensorNaturalIndex<>", "structsil_1_1tensor_1_1TensorNaturalIndex.html", [ + [ "sil::tensor::ScalarIndex", "structsil_1_1tensor_1_1ScalarIndex.html", null ] + ] ], [ "sil::tensor::TensorSymmetricIndex< TensorIndex >", "structsil_1_1tensor_1_1TensorSymmetricIndex.html", null ], [ "sil::tensor::TensorYoungTableauIndex< YoungTableau, TensorIndex >", "structsil_1_1tensor_1_1TensorYoungTableauIndex.html", null ], [ "std::true_type", null, [ diff --git a/hodge__star_8hpp_source.html b/hodge__star_8hpp_source.html index 185747f7..46637750 100644 --- a/hodge__star_8hpp_source.html +++ b/hodge__star_8hpp_source.html @@ -153,149 +153,153 @@
23template <
24 misc::Specialization<ddc::detail::TypeSeq> Indices1,
25 misc::Specialization<ddc::detail::TypeSeq> Indices2>
- +
27 = ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_merge_t<
28 ddc::detail::TypeSeq<misc::convert_type_seq_to_t<
30 Indices1>>, // TODO clarify Antisymmetric
-
31 ddc::detail::TypeSeq<
- -
33
-
34template <
- - - -
38 class MetricDeterminantType,
- -
40 class ExecSpace>
-
41 requires(
- -
- -
44HodgeStarType fill_hodge_star(
-
45 ExecSpace const& exec_space,
-
46 HodgeStarType hodge_star,
-
47 MetricDeterminantType metric_determinant,
-
48 MetricProdType metric_prod)
-
49{
- - -
52 ddc::type_seq_merge_t<tensor::primes<tensor::lower<Indices1>>, Indices2>>>
-
53 levi_civita_accessor;
-
54 ddc::DiscreteDomain<misc::convert_type_seq_to_t<
+
31 std::conditional_t<
+
32 (ddc::type_seq_size_v<Indices2> == 0),
+
33 ddc::detail::TypeSeq<>,
+
34 ddc::detail::TypeSeq<misc::convert_type_seq_to_t<
+ +
36 Indices2>>>>>;
+
37
+
38template <
+ + + +
42 class MetricDeterminantType,
+ +
44 class ExecSpace>
+
45 requires(
+ +
+ +
48HodgeStarType fill_hodge_star(
+
49 ExecSpace const& exec_space,
+
50 HodgeStarType hodge_star,
+
51 MetricDeterminantType metric_determinant,
+
52 MetricProdType metric_prod)
+
53{
+
56 ddc::type_seq_merge_t<tensor::primes<tensor::lower<Indices1>>, Indices2>>>
-
57 levi_civita_dom(levi_civita_accessor.mem_domain());
-
58 ddc::Chunk levi_civita_alloc(
-
59 levi_civita_dom,
-
60 ddc::KokkosAllocator<
-
61 double,
-
62 typename ExecSpace::memory_space>()); // TODO consider avoid allocation
-
63 sil::tensor::Tensor levi_civita(levi_civita_alloc);
-
64
-
65 ddc::parallel_for_each(
-
66 exec_space,
-
67 hodge_star.non_indices_domain(),
-
68 KOKKOS_LAMBDA(
-
69 typename HodgeStarType::non_indices_domain_t::discrete_element_type elem) {
-
70 tensor_prod(hodge_star[elem], metric_prod[elem], levi_civita);
-
71 hodge_star[elem] *= Kokkos::sqrt(Kokkos::abs(metric_determinant(elem)))
-
72 / misc::factorial(ddc::type_seq_size_v<Indices1>);
-
73 });
-
74 return hodge_star;
+
57 levi_civita_accessor;
+
58 ddc::DiscreteDomain<misc::convert_type_seq_to_t<
+ +
60 ddc::type_seq_merge_t<tensor::primes<tensor::lower<Indices1>>, Indices2>>>
+
61 levi_civita_dom(levi_civita_accessor.mem_domain());
+
62 ddc::Chunk levi_civita_alloc(
+
63 levi_civita_dom,
+
64 ddc::KokkosAllocator<
+
65 double,
+
66 typename ExecSpace::memory_space>()); // TODO consider avoid allocation
+
67 sil::tensor::Tensor levi_civita(levi_civita_alloc);
+
68
+
69 ddc::parallel_for_each(
+
70 exec_space,
+
71 hodge_star.non_indices_domain(),
+
72 KOKKOS_LAMBDA(
+
73 typename HodgeStarType::non_indices_domain_t::discrete_element_type elem) {
+
74 tensor_prod(hodge_star[elem], metric_prod[elem], levi_civita);
+
75 hodge_star[elem] *= Kokkos::sqrt(Kokkos::abs(metric_determinant(elem)))
+
76 / misc::factorial(ddc::type_seq_size_v<Indices1>);
+
77 });
+
78 return hodge_star;
-
75}
-
76
-
77template <
-
78 tensor::TensorIndex MetricIndex,
- - - - -
-
83 class ExecSpace>
-
84HodgeStarType fill_hodge_star(
-
85 ExecSpace const& exec_space,
-
86 HodgeStarType hodge_star,
-
87 MetricType metric)
-
88{
-
89 static_assert(tensor::are_contravariant_v<
-
90 ddc::to_type_seq_t<typename MetricIndex::subindices_domain_t>>);
-
91 static_assert(tensor::are_contravariant_v<
-
92 ddc::to_type_seq_t<typename MetricType::accessor_t::natural_domain_t>>);
- - -
95
-
96 // Allocate metric_det to receive metric field determinant values
-
97 ddc::Chunk metric_det_alloc(
-
98 ddc::remove_dims_of<MetricIndex>(metric.domain()),
-
99 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
100 ddc::ChunkSpan metric_det(metric_det_alloc);
-
101 // Allocate a buffer mirroring the metric as a full matrix, it will be overwritten by tensor::determinant() which involves a LU decomposition
-
102 ddc::Chunk buffer_alloc(
-
103 ddc::cartesian_prod_t<
-
104 ddc::remove_dims_of_t<typename MetricType::discrete_domain_type, MetricIndex>,
-
105 ddc::DiscreteDomain<
- - -
108 ddc::remove_dims_of<MetricIndex>(metric.domain()),
+
79}
+
80
+
81template <
+
82 tensor::TensorIndex MetricIndex,
+ + + + +
+
87 class ExecSpace>
+
88HodgeStarType fill_hodge_star(
+
89 ExecSpace const& exec_space,
+
90 HodgeStarType hodge_star,
+
91 MetricType metric)
+
92{
+
93 static_assert(tensor::are_contravariant_v<
+
94 ddc::to_type_seq_t<typename MetricIndex::subindices_domain_t>>);
+
95 static_assert(tensor::are_contravariant_v<
+
96 ddc::to_type_seq_t<typename MetricType::accessor_t::natural_domain_t>>);
+ + +
99
+
100 // Allocate metric_det to receive metric field determinant values
+
101 ddc::Chunk metric_det_alloc(
+
102 ddc::remove_dims_of<MetricIndex>(metric.domain()),
+
103 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
104 ddc::ChunkSpan metric_det(metric_det_alloc);
+
105 // Allocate a buffer mirroring the metric as a full matrix, it will be overwritten by tensor::determinant() which involves a LU decomposition
+
106 ddc::Chunk buffer_alloc(
+
107 ddc::cartesian_prod_t<
+
108 ddc::remove_dims_of_t<typename MetricType::discrete_domain_type, MetricIndex>,
109 ddc::DiscreteDomain<
-
111 tensor::metric_index_2<MetricIndex>>(metric.natural_domain())),
-
112 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
113 ddc::ChunkSpan buffer(buffer_alloc);
-
114 // Compute determinants
-
115 ddc::parallel_for_each(
-
116 exec_space,
-
117 ddc::remove_dims_of<MetricIndex>(metric.domain()),
-
118 KOKKOS_LAMBDA(typename ddc::remove_dims_of_t<
-
119 typename MetricType::discrete_domain_type,
-
120 MetricIndex>::discrete_element_type elem) {
-
121 ddc::for_each(
-
122 ddc::DiscreteDomain<
- -
124 tensor::metric_index_2<MetricIndex>>(metric.natural_domain()),
-
125 [=](ddc::DiscreteElement<
- - -
128 buffer(elem, index) = metric(metric.access_element(
-
129 elem,
-
130 index)); // TODO: triggers a "nvlink warning : Stack size for entry function cannot be statically determined"
-
131 });
-
132 metric_det(elem) = 1. / tensor::determinant(buffer[elem].allocation_kokkos_view());
-
133 });
-
134
-
135 // Allocate & compute the product of metrics
- - -
138 metric_prod_accessor;
-
139 ddc::Chunk metric_prod_alloc(
-
140 ddc::cartesian_prod_t<
-
141 ddc::remove_dims_of_t<typename MetricType::discrete_domain_type, MetricIndex>,
- -
143 ddc::remove_dims_of<MetricIndex>(metric.domain()),
-
144 metric_prod_accessor.mem_domain()),
-
145 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
-
146 tensor::Tensor metric_prod(metric_prod_alloc);
-
147
-
148 fill_metric_prod<
-
149 MetricIndex,
-
150 Indices1,
-
151 tensor::primes<Indices1>>(exec_space, metric_prod, metric);
-
152
-
153 // Compute Hodge star
-
154 return fill_hodge_star<Indices1, Indices2>(exec_space, hodge_star, metric_det, metric_prod);
-
-
155}
+ +
112 ddc::remove_dims_of<MetricIndex>(metric.domain()),
+
113 ddc::DiscreteDomain<
+ +
115 tensor::metric_index_2<MetricIndex>>(metric.natural_domain())),
+
116 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
117 ddc::ChunkSpan buffer(buffer_alloc);
+
118 // Compute determinants
+
119 ddc::parallel_for_each(
+
120 exec_space,
+
121 ddc::remove_dims_of<MetricIndex>(metric.domain()),
+
122 KOKKOS_LAMBDA(typename ddc::remove_dims_of_t<
+
123 typename MetricType::discrete_domain_type,
+
124 MetricIndex>::discrete_element_type elem) {
+
125 ddc::for_each(
+
126 ddc::DiscreteDomain<
+ +
128 tensor::metric_index_2<MetricIndex>>(metric.natural_domain()),
+
129 [=](ddc::DiscreteElement<
+ + +
132 buffer(elem, index) = metric.get(metric.access_element(
+
133 elem,
+
134 index)); // TODO: triggers a "nvlink warning : Stack size for entry function cannot be statically determined"
+
135 });
+
136 metric_det(elem) = 1. / tensor::determinant(buffer[elem].allocation_kokkos_view());
+
137 });
+
138
+
139 // Allocate & compute the product of metrics
+ + +
142 metric_prod_accessor;
+
143 ddc::Chunk metric_prod_alloc(
+
144 ddc::cartesian_prod_t<
+
145 ddc::remove_dims_of_t<typename MetricType::discrete_domain_type, MetricIndex>,
+ +
147 ddc::remove_dims_of<MetricIndex>(metric.domain()),
+
148 metric_prod_accessor.mem_domain()),
+
149 ddc::KokkosAllocator<double, typename ExecSpace::memory_space>());
+
150 tensor::Tensor metric_prod(metric_prod_alloc);
+
151
+
152 fill_metric_prod<
+
153 MetricIndex,
+
154 Indices1,
+
155 tensor::primes<Indices1>>(exec_space, metric_prod, metric);
156
-
157} // namespace exterior
-
158
-
159} // namespace sil
- +
157 // Compute Hodge star
+
158 return fill_hodge_star<Indices1, Indices2>(exec_space, hodge_star, metric_det, metric_prod);
+
+
159}
+
160
+
161} // namespace exterior
+
162
+
163} // namespace sil
+ -
HodgeStarType fill_hodge_star(ExecSpace const &exec_space, HodgeStarType hodge_star, MetricDeterminantType metric_determinant, MetricProdType metric_prod)
-
ddc::detail::convert_type_seq_to_discrete_domain_t< ddc::type_seq_merge_t< ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorFullIndex, Indices1 > >, ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorAntisymmetricIndex, Indices2 > > > > hodge_star_domain_t
+
HodgeStarType fill_hodge_star(ExecSpace const &exec_space, HodgeStarType hodge_star, MetricDeterminantType metric_determinant, MetricProdType metric_prod)
+
ddc::detail::convert_type_seq_to_discrete_domain_t< ddc::type_seq_merge_t< ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorFullIndex, Indices1 > >, std::conditional_t<(ddc::type_seq_size_v< Indices2 >==0), ddc::detail::TypeSeq<>, ddc::detail::TypeSeq< misc::convert_type_seq_to_t< tensor::TensorAntisymmetricIndex, Indices2 > > > > > hodge_star_domain_t
constexpr std::size_t factorial(std::size_t k) noexcept
Definition factorial.hpp:13
typename detail::ConvertTypeSeqTo< T, Seq >::type convert_type_seq_to_t
Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
@@ -305,9 +309,10 @@
KOKKOS_FUNCTION ViewType::value_type determinant(const ViewType &matrix)
ddc::type_seq_element_t< 1, ddc::to_type_seq_t< typename MetricIndex::subindices_domain_t > > metric_index_2
Definition metric.hpp:39
typename detail::MetricProdDomainType< MetricIndex, Indices1, Indices2 >::type metric_prod_domain_t
Definition metric.hpp:139
-
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
+
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
bool constexpr are_contravariant_v
The top-level namespace of SimiLie.
Definition csr.hpp:14
+
diff --git a/inherit_graph_25.map b/inherit_graph_25.map index 9a676ea6..3d027892 100644 --- a/inherit_graph_25.map +++ b/inherit_graph_25.map @@ -1,3 +1,5 @@ - + + + diff --git a/inherit_graph_25.md5 b/inherit_graph_25.md5 index fb011f06..f4f08639 100644 --- a/inherit_graph_25.md5 +++ b/inherit_graph_25.md5 @@ -1 +1 @@ -ca637e9b5ce71c429728daa3b8e413e7 \ No newline at end of file +df0cd10ba585be96b1e77cdd259f6cd5 \ No newline at end of file diff --git a/inherit_graph_25.png b/inherit_graph_25.png index 62f85ff9a73ca04d22cf642e1a154a2d65d42689..6f453587a550a150a4374418017fd703c05c6af9 100644 GIT binary patch literal 5571 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 Jtxm-*=08N`Iwk-B diff --git a/inherit_graph_26.map b/inherit_graph_26.map index f328c9e9..9a676ea6 100644 --- a/inherit_graph_26.map +++ b/inherit_graph_26.map @@ -1,3 +1,3 @@ - + diff --git a/inherit_graph_26.md5 b/inherit_graph_26.md5 index 9098054e..fb011f06 100644 --- a/inherit_graph_26.md5 +++ b/inherit_graph_26.md5 @@ -1 +1 @@ -4a62b300794131f3582f8c96ba1e5ea5 \ No newline at end of file +ca637e9b5ce71c429728daa3b8e413e7 \ No newline at end of file diff --git a/inherit_graph_26.png b/inherit_graph_26.png index 3c4243017238c6384b85908df64dc7af3fe6e195..62f85ff9a73ca04d22cf642e1a154a2d65d42689 100644 GIT binary patch literal 3813 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 Jtxm-*=08N`Iwk-B literal 5233 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[^(|MN zm{!0_@#RZikV_$tc_}k9Gh0-#nymda?vp1^fG0zvs2a$J^z`(w#Hy1)&r?gC>Mu|s#!sFc{u#PkW!XgL)666< zFMoP8ro^Baj=6GODVniO+Ct z1>XNRoGb2%FjDn}IjYZq>|x9)ux>&^LY+IaUk_0lEK?(rz`OBTA<`_%G43+x@7{0Q z96~}upwj)p`)zRmPOP96C@Lxfrr@jkX&*ogP*ove;Rra~H0lURprxh7!_Oa6TKWKq zL<)H?t0u3?1)cB!n-cfD^_7x=0XZ`>bGD=>bAQVHUyC1SEC8U?QBE!z{aVnOO1FZg(&xcQ^r>33;f8U-l_3`mR zJlV`8{-xFxSjr?DNTH;pgdAYq#j>=tyt-KbpvP=)Oxu_kiQ?r1yKqu12o78wO{ z!OL))P*fvb^}QYanFu?}>N)%!eKXLf#jFgZe$oSa>J<>+sg}U74wz(PuE8~tKU1_G zN3>f813qFapyZ%@fF|G-y0@tjLIAnmadq962v)WA_O6}NAV|9HN~$3PC5Pc$T1*=N zoSWx>1mzN7OrD1iBN`gS_ZQKi8S9#yr2gIF-_zjwll85pEfm`QiG!Q_4#-+maxy6> zMVO0rDHXW9EYq^TlnXq7m{wc&0bois zze!94HwaBlf8wXQSk>5K>A#nX0DTWG9-cUlXbD#CO6PBMAbLnjRP^1>?(WdHZ%O#% z%(|~HPm2Dlb7yB~f3~-EoSdBg?Cj`5YqO#D_6hNt6(;GaspO{{s3e!=S0|RmYF@D(G(qgQwtsO6)A-&z`BP zimL+?IUGaIEUTISIN;;(uyzZOUf}19w6q8*r~I~hdsW#hH-7*wMn1;|Jnvv{-;>|w z;^}DsBn?S6pGH~vsiUqg{ql5MjtBM z`WDb0K*#^1W!C6M4_tn&@47ydw2x|u>#xUd`sHkY_ZQ*-7Fi@VZvcXt;W@_@<+#Gh^p4uD+2OF%M(K`&qz$) z%l@{!k6D3)P6)EPx;hA4S!V>!0 z5etyt;ZhvSbnrFfN|+FbTXY1@og-!rFbC7*~L$SM>1_L5CdcftD3>QpmyYfCV-I0Wz=&1p%&EodY4r zEuyYKkg;64x#bIOnEfe^xb+oixF3XGZgOju8UtRo1KrqrlH|>RlMN%#MftwyA9N7m zO=7=~BkBEodiE?*@3Rw{PTjtDc@qmHX|CxRL{~ssit6q!|(kErD zUfk_@M>>h+Yc+lIHDI4buW{40i MHGS1D%C?dJ19kxyMgRZ+ diff --git a/inherit_graph_27.map b/inherit_graph_27.map index 63058345..f328c9e9 100644 --- a/inherit_graph_27.map +++ b/inherit_graph_27.map @@ -1,5 +1,3 @@ - - - + diff --git a/inherit_graph_27.md5 b/inherit_graph_27.md5 index 29f6aff4..9098054e 100644 --- a/inherit_graph_27.md5 +++ b/inherit_graph_27.md5 @@ -1 +1 @@ -2e73138d2beb973576d9a8db3e190bc6 \ No newline at end of file +4a62b300794131f3582f8c96ba1e5ea5 \ No newline at end of file diff --git a/inherit_graph_27.png b/inherit_graph_27.png index 432c35e6cf2328c5dfd73a12a5778adb45955220..3c4243017238c6384b85908df64dc7af3fe6e195 100644 GIT binary patch literal 5233 zcmZu#WmuF^w;fWtL|R%vq#LBWOO%utLXa+D0O^zzfguEm4+&91Vt}C=6dX!G97?)V zK;oYHp8MnexbVO`5AS;p=iPhlwbtGVhWZ+$L<~d_2!vEiQ`Hz;m%xt_0Y3Q6UEPxb zF8EL#4OPf3=DV=1>>UI`&84NPWD@v(Hy>tbqVY2>Oq5KD2>Z)jJ33r3KI2G=$aZ#C z#|K{v?FxRh#I@j50a{yqF}P^$L4C<<|kVm1ab_0JiU_f+P+@61PHM};Fuh=xVJ zUED0Lv|HKPQaeywR^(Q0uD<#(G4aA9U}54l7JgKhtq>gv=Hh39JEjpG7pH@V-4#~P zMiPZWQxe6%EF0aV%_a3uLbxIn4_G1;(wsSK0M+gL>v#$@&!@~m-9(9Kt+7nBP@LGz@ zDs^3`AM`po*__B0bD@$yU&P_FM$)CSD6Ea==Hl$l)Z*Ob(sdR>hFthqb%fq`ovw&{Fqa^0q{ukYaCK+(me zLOqBlQ@iSUD-9Zrj!#PJ-JB>}T3U)oPp9(3&2^7fQ&T%QIZ?g6xu(2#4^K``PWOX+ zzK-Whvh2LP#ECKkNxHM+?Ck8MycQuKr3jJH z{Ks)a@3>X?Xzb_eT`=cFwzY|;ONxk4x&Hjpmo03+xVjnxHbGPD&NusF0_^ASFYLRf zJ2N{gUa4YVFD_SHTx{#=ng}waTOdo%p`N7Z<>mFxF<%x&mC7u)+~&2|Ww$qfJFHr)1h^q4R#x-nNDwzpY9iPvSd*>FP6;0WvO_QGbTC)=@czrg)6-HA zh$eHn_;?~>;);NMH0Qga4OEE+L#87XsvLHGN((Q5!!;n7zv*om85$}o7o~}aiZ-9v zgkHqxcpA8&kvZTc>b7Bdu4nImpwY}A8F3{g9I>Q~_>z*6=NA_)A#J)`QMz1D7()v{ zd;#EyzP=b+>m$a+#z1pzZ4Cl(b#)c^{9>#C0*O&Zl_MoR=EDtnqQ8C>4cG-WQe?vG zy*9F2@!?44*xF zR?Xxe1U4x~BAGzmH|Co~!x>g~G{u7T18=TiOfr51AYEQQKFX@9xOH`PVjhG2G*02U zESpO`aaJ?K!$ggZjZ(gAB=f(21I%NYnwna*_z}j&#(q!#3GRXjoi8T}BCcv{Yik-C z*Y`Jw?H;}n*dNj zum7F(^(Qm3WoiriZ5Se&o9#y5OV6j3Jj}J2q*Dl$g+if=TU&1i2Q~e+CJ9>u_WN(H z|Jl8K`KDCS<2dI~4!8~_ z3VfSnhmULmLObP}*xcOo`@8qN!A_4x{OI`jAwPd|Q@oODMqZu{07>aUD$DWmSb>~Q zOiYXwqNOD_g;{Rcve%GXkkZJ}@xk-9piB`Fk@CvQN>rWrR7Cv7*3>7z-MNOKLwB{* z{y%P2e8stHrJ^rJ4ZXdEGvV+FfbQmy+>OJN%_rIh24&sd$}--|xCwpG$}e9$4BLO+ z^CuQP#ov1JQTLFR09VURfvu!LQ%5H%CI&AlIoSv(03b+{r%&wwKh4p6R=c>pj&5C9 zUKaZ`IbvH+gO88zfpZB=^ zyu1{l(BiohHkH`LIF?XnwS-&^J3BU9Y^=S7j%s(Kx%<1Ht0!aJw;YA)b-yOn0L)=W zDDJNNTSA$|Us5}bzOQf>&P}ea795kjTMoNfTUzS6SZI_0tLizwizwHck+3hzx3{-v z%fduxzig{@In$f)-ZM5freI)rGcz-Tf85*Gw{&%Je7@JZk3a~vpJM}Fz(B`R$Ar16 zx_mv8Ors5nWThZrr6#iT@JPvgWEvSC2m`br9CGeOM@QF*LQ&pc9jDG6f$9;q?|y#B(S!&9vm7%A>=De-t@$g``R^IkwqvLPPYzpbzuPlj4dnUCLtlQb##nTi6isg z#KXfoI68`qh`@4lcR&2)+2O*s|GPDS?X70u@%y=a;;E^rQ-`6!!A@{mJ13{ug9ESZ z?Cj2kg$||W;FFDr=xE$;`HyMM&CP*kVn3@gi}(d`Ntz5;8BB2xXZn~_B~JP)efDHudkiEJ1GkbOSuVe@^-Kh6%|zt zARlTP8t8Iw0s$G>T4)tm9Nz~82p|r-I=mBlb*PcNDlQ?>Kc;Y-1ZvU2(UFaf4eJgW zQzwuu>C~L!Vs^Kg8myF*6bz)4i#k*8KTgZfPk#F8nfO-Z+U8~gSe3-0zzp=ivpa@( zX=jHdEG#S|BV%#7FHtIBkLl>>h=Pe}zSte=>>M908-b$W5z`zT0bKk5Y8oHkv0L#fST{6O9^M4%4kT;iXmx~P>gQxuUcka@ zcvIT|8eK45Z8P>?m4avrz$ZRiHW5GoFM4mrk+ZBdE;{q>kC*DWbcSP1ezug<*3w!U zVxgi^hVY1qWfaK5#tT!Djf{+x04M%gURDMWTIo3ua}Pfkx!pG*Y>t}hl$@9!2>Bl)Vo5hT8O zLqSIu|3D|J5U3fTahuntPumCs-J_<`^Yck7Of0HpMMXskVwC4Q!ahiLakD2e%UP6M zw)kyE0)F&fqV*OFWd=o7S0`dkKRY|iFhV@ZR~H=}-8nKsEa{2vZFK(?=[^(|MN zm{!0_@#RZikV_$tc_}k9Gh0-#nymda?vp1^fG0zvs2a$J^z`(w#Hy1)&r?gC>Mu|s#!sFc{u#PkW!XgL)666< zFMoP8ro^Baj=6GODVniO+Ct z1>XNRoGb2%FjDn}IjYZq>|x9)ux>&^LY+IaUk_0lEK?(rz`OBTA<`_%G43+x@7{0Q z96~}upwj)p`)zRmPOP96C@Lxfrr@jkX&*ogP*ove;Rra~H0lURprxh7!_Oa6TKWKq zL<)H?t0u3?1)cB!n-cfD^_7x=0XZ`>bGD=>bAQVHUyC1SEC8U?QBE!z{aVnOO1FZg(&xcQ^r>33;f8U-l_3`mR zJlV`8{-xFxSjr?DNTH;pgdAYq#j>=tyt-KbpvP=)Oxu_kiQ?r1yKqu12o78wO{ z!OL))P*fvb^}QYanFu?}>N)%!eKXLf#jFgZe$oSa>J<>+sg}U74wz(PuE8~tKU1_G zN3>f813qFapyZ%@fF|G-y0@tjLIAnmadq962v)WA_O6}NAV|9HN~$3PC5Pc$T1*=N zoSWx>1mzN7OrD1iBN`gS_ZQKi8S9#yr2gIF-_zjwll85pEfm`QiG!Q_4#-+maxy6> zMVO0rDHXW9EYq^TlnXq7m{wc&0bois zze!94HwaBlf8wXQSk>5K>A#nX0DTWG9-cUlXbD#CO6PBMAbLnjRP^1>?(WdHZ%O#% z%(|~HPm2Dlb7yB~f3~-EoSdBg?Cj`5YqO#D_6hNt6(;GaspO{{s3e!=S0|RmYF@D(G(qgQwtsO6)A-&z`BP zimL+?IUGaIEUTISIN;;(uyzZOUf}19w6q8*r~I~hdsW#hH-7*wMn1;|Jnvv{-;>|w z;^}DsBn?S6pGH~vsiUqg{ql5MjtBM z`WDb0K*#^1W!C6M4_tn&@47ydw2x|u>#xUd`sHkY_ZQ*-7Fi@VZvcXt;W@_@<+#Gh^p4uD+2OF%M(K`&qz$) z%l@{!k6D3)P6)EPx;hA4S!V>!0 z5etyt;ZhvSbnrFfN|+FbTXY1@og-!rFbC7*~L$SM>1_L5CdcftD3>QpmyYfCV-I0Wz=&1p%&EodY4r zEuyYKkg;64x#bIOnEfe^xb+oixF3XGZgOju8UtRo1KrqrlH|>RlMN%#MftwyA9N7m zO=7=~BkBEodiE?*@3Rw{PTjtDc@qmHX|CxRL{~ssit6q!|(kErD zUfk_@M>>h+Yc+lIHDI4buW{40i MHGS1D%C?dJ19kxyMgRZ+ literal 5520 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 - - - + + + diff --git a/inherit_graph_28.md5 b/inherit_graph_28.md5 index 98f3428b..4269604d 100644 --- a/inherit_graph_28.md5 +++ b/inherit_graph_28.md5 @@ -1 +1 @@ -5e23a55e16574d82c9f49c62ecc06712 \ No newline at end of file +c13cb116a8ad5b05a5a2b2773a74ece4 \ No newline at end of file diff --git a/inherit_graph_28.png b/inherit_graph_28.png index 5ed75da46d0af38023462c16a958d9a889e1c4f4..432c35e6cf2328c5dfd73a12a5778adb45955220 100644 GIT binary patch literal 5520 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 Z{hn>r>+c>a14g1)igIeQKVFyw{134)y9odQ diff --git a/inherit_graph_29.map b/inherit_graph_29.map new file mode 100644 index 00000000..51bdad91 --- /dev/null +++ b/inherit_graph_29.map @@ -0,0 +1,5 @@ + + + + + diff --git a/inherit_graph_29.md5 b/inherit_graph_29.md5 new file mode 100644 index 00000000..62bde63f --- /dev/null +++ b/inherit_graph_29.md5 @@ -0,0 +1 @@ +b1dd83d3650df21db0d6f09e5df81d5b \ No newline at end of file diff --git a/inherit_graph_29.png b/inherit_graph_29.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed75da46d0af38023462c16a958d9a889e1c4f4 GIT binary patch literal 5440 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 Z{hn>r>+c>a14g1)igIeQKVFyw{134)y9odQ literal 0 HcmV?d00001 diff --git a/inherits.html b/inherits.html index a162e785..b8beb8c5 100644 --- a/inherits.html +++ b/inherits.html @@ -270,24 +270,31 @@ - + + + + + + + + - + - + - + diff --git a/laplacian_8hpp_source.html b/laplacian_8hpp_source.html index b5c42b45..537563d0 100644 --- a/laplacian_8hpp_source.html +++ b/laplacian_8hpp_source.html @@ -264,7 +264,7 @@
134 CochainTag>(exec_space, laplacian_tensor, tensor, inv_metric);
135 exec_space.fence();
-
136 } else if (CochainTag::rank() < LaplacianDummyIndex::size()) {
+
136 } else if constexpr (CochainTag::rank() < LaplacianDummyIndex::size()) {
137 auto tmp_alloc = ddc::create_mirror(laplacian_tensor);
138 tensor::Tensor tmp(tmp_alloc);
139
@@ -284,7 +284,7 @@
153 KOKKOS_LAMBDA(typename TensorType::discrete_element_type elem) {
154 laplacian_tensor(elem) += tmp(elem);
155 });
-
156 } else if (CochainTag::rank() == LaplacianDummyIndex::size()) {
+
156 } else if constexpr (CochainTag::rank() == LaplacianDummyIndex::size()) {
157 detail::coboundary_of_codifferential<
158 MetricIndex,
159 LaplacianDummyIndex,
@@ -305,7 +305,7 @@
coboundary_tensor_t< TagToAddToCochain, CochainTag, TensorType > deriv(ExecSpace const &exec_space, coboundary_tensor_t< TagToAddToCochain, CochainTag, TensorType > coboundary_tensor, TensorType tensor)
typename detail::CodifferentialIndex< TagToRemoveFromCochain, CochainTag >::type codifferential_index_t
typename detail::CoboundaryIndex< TagToAddToCochain, CochainTag >::type coboundary_index_t
-
codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential(ExecSpace const &exec_space, codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential_tensor, TensorType tensor, MetricType inv_metric)
+
codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential(ExecSpace const &exec_space, codifferential_tensor_t< TagToRemoveFromCochain, CochainTag, TensorType > codifferential_tensor, TensorType tensor, MetricType inv_metric)
Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
bool constexpr is_covariant_v
The top-level namespace of SimiLie.
Definition csr.hpp:14
diff --git a/levi__civita__tensor_8hpp_source.html b/levi__civita__tensor_8hpp_source.html index 1359c203..33d805a5 100644 --- a/levi__civita__tensor_8hpp_source.html +++ b/levi__civita__tensor_8hpp_source.html @@ -205,57 +205,61 @@
61 KOKKOS_FUNCTION static constexpr std::size_t access_id(
62 std::array<std::size_t, sizeof...(TensorIndex)> const natural_ids)
63 {
-
64 int const parity = misc::permutation_parity(natural_ids);
-
65 if (parity == 0) {
-
66 return 0;
-
67 } else if (parity == 1) {
-
68 return 1;
-
69 } else {
-
70 return 2;
-
71 }
-
72 }
+
64 if constexpr (rank() == 1) {
+
65 return 1;
+
66 } else {
+
67 int const parity = misc::permutation_parity(natural_ids);
+
68 if (parity == 0) {
+
69 return 0;
+
70 } else if (parity == 1) {
+
71 return 1;
+
72 } else {
+
73 return 2;
+
74 }
+
75 }
+
76 }
-
73
-
-
74 KOKKOS_FUNCTION static constexpr std::size_t access_id_to_mem_id(
-
75 [[maybe_unused]] std::size_t access_id)
-
76 {
-
77 return std::numeric_limits<std::size_t>::max();
-
78 }
+
77
+
+
78 KOKKOS_FUNCTION static constexpr std::size_t access_id_to_mem_id(
+
79 [[maybe_unused]] std::size_t access_id)
+
80 {
+
81 return std::numeric_limits<std::size_t>::max();
+
82 }
-
79
-
80 template <class Tensor, class Elem, class Id, class FunctorType>
-
-
81 KOKKOS_FUNCTION static constexpr Tensor::element_type process_access(
-
82 const FunctorType& access,
-
83 Tensor tensor,
-
84 Elem elem)
-
85 {
-
86 if (elem.template uid<Id>() == 0) {
-
87 return 0;
-
88 } else if (elem.template uid<Id>() == 1) {
-
89 return access(tensor, elem);
-
90 } else {
-
91 return -access(tensor, elem);
-
92 }
-
93 }
+
83
+
84 template <class Tensor, class Elem, class Id, class FunctorType>
+
+
85 KOKKOS_FUNCTION static constexpr Tensor::element_type process_access(
+
86 const FunctorType& access,
+
87 Tensor tensor,
+
88 Elem elem)
+
89 {
+
90 if (elem.template uid<Id>() == 0) {
+
91 return 0;
+
92 } else if (elem.template uid<Id>() == 1) {
+
93 return access(tensor, elem);
+
94 } else {
+
95 return -access(tensor, elem);
+
96 }
+
97 }
-
94
-
95 KOKKOS_FUNCTION static constexpr std::array<std::size_t, rank()>
-
- -
97 {
-
98 assert(mem_id < mem_size()); // Always false
-
99 std::array<std::size_t, rank()> ids;
-
100 return ids;
-
101 }
+
98
+
99 KOKKOS_FUNCTION static constexpr std::array<std::size_t, rank()>
+
+ +
101 {
+
102 assert(mem_id < mem_size()); // Always false
+
103 std::array<std::size_t, rank()> ids;
+
104 return ids;
+
105 }
-
102};
+
106};
-
103
-
104} // namespace tensor
-
105
-
106} // namespace sil
+
107
+
108} // namespace tensor
+
109
+
110} // namespace sil
constexpr int permutation_parity(std::array< std::size_t, N > lst)
Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
@@ -264,15 +268,15 @@
static KOKKOS_FUNCTION constexpr std::size_t rank()
static KOKKOS_FUNCTION constexpr std::size_t access_id(std::array< std::size_t, sizeof...(TensorIndex)> const natural_ids)
static KOKKOS_FUNCTION constexpr subindices_domain_t subindices_domain()
-
static KOKKOS_FUNCTION constexpr std::size_t access_id_to_mem_id(std::size_t access_id)
+
static KOKKOS_FUNCTION constexpr std::size_t access_id_to_mem_id(std::size_t access_id)
static KOKKOS_FUNCTION constexpr std::size_t mem_id(std::array< std::size_t, sizeof...(TensorIndex)> const natural_ids)
static KOKKOS_FUNCTION constexpr std::size_t access_size()
-
static KOKKOS_FUNCTION constexpr Tensor::element_type process_access(const FunctorType &access, Tensor tensor, Elem elem)
+
static KOKKOS_FUNCTION constexpr Tensor::element_type process_access(const FunctorType &access, Tensor tensor, Elem elem)
static KOKKOS_FUNCTION constexpr std::size_t size()
static constexpr bool is_explicitely_stored_tensor
static KOKKOS_FUNCTION constexpr std::size_t mem_size()
ddc::DiscreteDomain< TensorIndex... > subindices_domain_t
-
static KOKKOS_FUNCTION constexpr std::array< std::size_t, rank()> mem_id_to_canonical_natural_ids(std::size_t mem_id)
+
static KOKKOS_FUNCTION constexpr std::array< std::size_t, rank()> mem_id_to_canonical_natural_ids(std::size_t mem_id)
diff --git a/metric_8hpp_source.html b/metric_8hpp_source.html index 403d933b..86481864 100644 --- a/metric_8hpp_source.html +++ b/metric_8hpp_source.html @@ -680,12 +680,12 @@
Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
-
Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > tensor_prod(Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > prod_tensor, Tensor< ElementType, ddc::DiscreteDomain< DDim1... >, LayoutStridedPolicy, MemorySpace > tensor1, Tensor< ElementType, ddc::DiscreteDomain< DDim2... >, LayoutStridedPolicy, MemorySpace > tensor2)
+
Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > tensor_prod(Tensor< ElementType, ddc::DiscreteDomain< ProdDDim... >, LayoutStridedPolicy, Kokkos::DefaultHostExecutionSpace::memory_space > prod_tensor, Tensor< ElementType, ddc::DiscreteDomain< DDim1... >, LayoutStridedPolicy, MemorySpace > tensor1, Tensor< ElementType, ddc::DiscreteDomain< DDim2... >, LayoutStridedPolicy, MemorySpace > tensor2)
typename detail::MetricProdType< NonMetricDom, MetricIndex, Indices1, Indices2, LayoutStridedPolicy, MemorySpace >::type metric_prod_t
Definition metric.hpp:190
-
detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
+
detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
ddc::type_seq_element_t< 0, ddc::to_type_seq_t< typename MetricIndex::subindices_domain_t > > metric_index_1
Definition metric.hpp:31
detail::Primes< Indices, I >::type primes
Definition prime.hpp:50
-
constexpr relabelize_indices_in_t< T, OldIndices, NewIndices > relabelize_indices_in(T t)
+
constexpr relabelize_indices_in_t< T, OldIndices, NewIndices > relabelize_indices_in(T t)
invert_metric_t< MetricType > fill_inverse_metric(ExecSpace const &exec_space, invert_metric_t< MetricType > inv_metric, MetricType metric)
Definition metric.hpp:404
constexpr relabelize_metric_in_domain_t< Dom, Index1, Index2 > relabelize_metric_in_domain(Dom metric_dom)
Definition metric.hpp:78
constexpr relabelize_metric_t< TensorType, Index1, Index2 > relabelize_metric(TensorType tensor)
Definition metric.hpp:101
@@ -696,11 +696,11 @@
typename detail::MetricProdDomainType< MetricIndex, Indices1, Indices2 >::type metric_prod_domain_t
Definition metric.hpp:139
metric_prod_t< typename MetricType::non_indices_domain_t, MetricIndex, Indices1, Indices2, typename MetricType::layout_type, typename MetricType::memory_space > fill_metric_prod(ExecSpace const &exec_space, metric_prod_t< typename MetricType::non_indices_domain_t, MetricIndex, Indices1, Indices2, typename MetricType::layout_type, typename MetricType::memory_space > metric_prod, MetricType metric)
Definition metric.hpp:284
detail::SwapCharacter< T >::type swap_character
-
constexpr relabelize_indices_of_t< Tensor, OldIndices, NewIndices > relabelize_indices_of(Tensor tensor)
+
constexpr relabelize_indices_of_t< Tensor, OldIndices, NewIndices > relabelize_indices_of(Tensor tensor)
relabelize_indices_of_t< TensorType, ddc::detail::TypeSeq< typename detail::ConvertTypeSeqToMetricIndex1< typename Index1::type_seq_dimensions >::type, typename detail::ConvertTypeSeqToMetricIndex2< typename Index2::type_seq_dimensions >::type >, ddc::detail::TypeSeq< uncharacterize< Index1 >, uncharacterize< Index2 > > > relabelize_metric_t
Definition metric.hpp:91
detail::Uncharacterize< Index >::type uncharacterize
-
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
-
typename detail::RelabelizeIndicesInType< T, OldIndices, NewIndices >::type relabelize_indices_in_t
+
detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
+
typename detail::RelabelizeIndicesInType< T, OldIndices, NewIndices >::type relabelize_indices_in_t
The top-level namespace of SimiLie.
Definition csr.hpp:14
diff --git a/namespacemembers.html b/namespacemembers.html index 212288aa..673c7e21 100644 --- a/namespacemembers.html +++ b/namespacemembers.html @@ -181,7 +181,7 @@

- f -

    - h -

    diff --git a/namespacemembers_type.html b/namespacemembers_type.html index 57eb5911..3eb5c5e4 100644 --- a/namespacemembers_type.html +++ b/namespacemembers_type.html @@ -154,7 +154,7 @@

    - f -

      - h -

      diff --git a/namespacesil_1_1exterior.html b/namespacesil_1_1exterior.html index 681ea336..115cf949 100644 --- a/namespacesil_1_1exterior.html +++ b/namespacesil_1_1exterior.html @@ -179,9 +179,9 @@ template<class T , class ElementType = double, class LayoutStridedPolicy = Kokkos::LayoutRight> using Form = typename detail::FormWrapper<T, ElementType, LayoutStridedPolicy>::type   -template<misc::Specialization< ddc::detail::TypeSeq > Indices1, misc::Specialization< ddc::detail::TypeSeq > Indices2> -using hodge_star_domain_t -  +template<misc::Specialization< ddc::detail::TypeSeq > Indices1, misc::Specialization< ddc::detail::TypeSeq > Indices2> +using hodge_star_domain_t +  template<std::size_t K, class Dom > using simplex_for_domain_t = detail::SimplexForDomain<K, Dom>::type   @@ -398,8 +398,8 @@

      -

      ◆ hodge_star_domain_t

      + +

      ◆ hodge_star_domain_t

      Definition at line 26 of file hodge_star.hpp.

      @@ -699,7 +703,7 @@

      -

      Definition at line 151 of file codifferential.hpp.

      +

      Definition at line 168 of file codifferential.hpp.

      @@ -760,7 +764,7 @@

      -

      Definition at line 43 of file hodge_star.hpp.

      +

      Definition at line 47 of file hodge_star.hpp.

      @@ -790,7 +794,7 @@

      -

      Definition at line 83 of file hodge_star.hpp.

      +

      Definition at line 87 of file hodge_star.hpp.

      diff --git a/namespacesil_1_1exterior.js b/namespacesil_1_1exterior.js index 3613638b..c6d5ece4 100644 --- a/namespacesil_1_1exterior.js +++ b/namespacesil_1_1exterior.js @@ -14,7 +14,7 @@ var namespacesil_1_1exterior = [ "codifferential_index_t", "namespacesil_1_1exterior.html#aab91885c880898f8e30304a22b965a22", null ], [ "codifferential_tensor_t", "namespacesil_1_1exterior.html#a3da5f6d818417a943e98321a4f70d534", null ], [ "Form", "namespacesil_1_1exterior.html#a04a63056a25815fe3b4e94eddd7dbede", null ], - [ "hodge_star_domain_t", "namespacesil_1_1exterior.html#afd93aa912be271019b5425e00391049e", null ], + [ "hodge_star_domain_t", "namespacesil_1_1exterior.html#a4efa14fa3fbc50aef998647604aa1589", null ], [ "simplex_for_domain_t", "namespacesil_1_1exterior.html#abaced41367e3e156dc7d8467022b3b94", null ], [ "boundary", "namespacesil_1_1exterior.html#ab67124170cc5aa39c400687dc9e9e439", null ], [ "boundary", "namespacesil_1_1exterior.html#a5c98c080f983d9b2020d6b0f13598044", null ], diff --git a/namespacesil_1_1tensor.html b/namespacesil_1_1tensor.html index 5894d555..5cfa9e33 100644 --- a/namespacesil_1_1tensor.html +++ b/namespacesil_1_1tensor.html @@ -149,6 +149,8 @@   struct  prime   +struct  ScalarIndex +  class  Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >  Tensor class. More...
        @@ -541,7 +543,7 @@

      TensorType,
      ddc::to_type_seq_t<typename TensorType::accessor_t::natural_domain_t>,
      uncharacterize<ddc::to_type_seq_t<typename TensorType::accessor_t::natural_domain_t>>>
      -
      detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
      +
      detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t

      Definition at line 177 of file character.hpp.

      @@ -624,7 +626,7 @@

      typename detail::ConvertTypeSeqToMetricIndex2<
      typename Index2::type_seq_dimensions>::type>,
      ddc::detail::TypeSeq<uncharacterize<Index1>, uncharacterize<Index2>>>
      -
      typename detail::RelabelizeIndicesInType< T, OldIndices, NewIndices >::type relabelize_indices_in_t
      +
      typename detail::RelabelizeIndicesInType< T, OldIndices, NewIndices >::type relabelize_indices_in_t

      Definition at line 68 of file metric.hpp.

      @@ -791,7 +793,7 @@

      -

      Definition at line 135 of file tensor_impl.hpp.

      +

      Definition at line 140 of file tensor_impl.hpp.

      @@ -809,7 +811,7 @@

      -

      Definition at line 324 of file tensor_impl.hpp.

      +

      Definition at line 329 of file tensor_impl.hpp.

      @@ -827,7 +829,7 @@

      -

      Definition at line 811 of file tensor_impl.hpp.

      +

      Definition at line 819 of file tensor_impl.hpp.

      @@ -845,7 +847,7 @@

      -

      Definition at line 877 of file tensor_impl.hpp.

      +

      Definition at line 885 of file tensor_impl.hpp.

      @@ -865,7 +867,7 @@

      typename detail::RelabelizeIndicesInType<T, OldIndices, NewIndices>::type
      -

      Definition at line 975 of file tensor_impl.hpp.

      +

      Definition at line 983 of file tensor_impl.hpp.

      @@ -883,7 +885,7 @@

      -

      Definition at line 1115 of file tensor_impl.hpp.

      +

      Definition at line 1123 of file tensor_impl.hpp.

      @@ -901,7 +903,7 @@

      -

      Definition at line 1167 of file tensor_impl.hpp.

      +

      Definition at line 1175 of file tensor_impl.hpp.

      @@ -1236,7 +1238,7 @@

      -

      Definition at line 846 of file tensor_impl.hpp.

      +

      Definition at line 854 of file tensor_impl.hpp.

      @@ -1265,7 +1267,7 @@

      -

      Definition at line 890 of file tensor_impl.hpp.

      +

      Definition at line 898 of file tensor_impl.hpp.

      @@ -1294,7 +1296,7 @@

      -

      Definition at line 1026 of file tensor_impl.hpp.

      +

      Definition at line 1034 of file tensor_impl.hpp.

      @@ -1323,7 +1325,7 @@

      -

      Definition at line 1121 of file tensor_impl.hpp.

      +

      Definition at line 1129 of file tensor_impl.hpp.

      @@ -1348,7 +1350,7 @@

      -

      Definition at line 1135 of file tensor_impl.hpp.

      +

      Definition at line 1143 of file tensor_impl.hpp.

      @@ -1373,7 +1375,7 @@

      -

      Definition at line 1172 of file tensor_impl.hpp.

      +

      Definition at line 1180 of file tensor_impl.hpp.

      @@ -1403,7 +1405,7 @@

      -

      Definition at line 1237 of file tensor_impl.hpp.

      +

      Definition at line 1245 of file tensor_impl.hpp.

      @@ -1428,7 +1430,7 @@

      -

      Definition at line 1323 of file tensor_impl.hpp.

      +

      Definition at line 1331 of file tensor_impl.hpp.

      diff --git a/namespacesil_1_1tensor.js b/namespacesil_1_1tensor.js index 130c87c1..b234b98e 100644 --- a/namespacesil_1_1tensor.js +++ b/namespacesil_1_1tensor.js @@ -6,6 +6,7 @@ var namespacesil_1_1tensor = [ "MetricIndex1", "structsil_1_1tensor_1_1MetricIndex1.html", null ], [ "MetricIndex2", "structsil_1_1tensor_1_1MetricIndex2.html", null ], [ "prime", "structsil_1_1tensor_1_1prime.html", null ], + [ "ScalarIndex", "structsil_1_1tensor_1_1ScalarIndex.html", null ], [ "Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >", "classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html", "classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c" ], [ "TensorAccessor", "classsil_1_1tensor_1_1TensorAccessor.html", "classsil_1_1tensor_1_1TensorAccessor" ], [ "TensorAntisymmetricIndex", "structsil_1_1tensor_1_1TensorAntisymmetricIndex.html", "structsil_1_1tensor_1_1TensorAntisymmetricIndex" ], diff --git a/navtreeindex1.js b/navtreeindex1.js index d5de84ee..438d3b7c 100644 --- a/navtreeindex1.js +++ b/navtreeindex1.js @@ -190,64 +190,64 @@ var NAVTREEINDEX1 = "classsil_1_1mesher_1_1Mesher.html#a16d13ec3131b5d8b5a838f7054cc1801":[6,0,0,2,0,1], "classsil_1_1mesher_1_1Mesher.html#aceb024ed661bc4274401e0b711d95129":[4,0,0,2,0,2], "classsil_1_1mesher_1_1Mesher.html#aceb024ed661bc4274401e0b711d95129":[6,0,0,2,0,2], -"classsil_1_1tensor_1_1TensorAccessor.html":[4,0,0,4,7], -"classsil_1_1tensor_1_1TensorAccessor.html":[6,0,0,4,7], -"classsil_1_1tensor_1_1TensorAccessor.html#a116450df27bbb5a3e5f36770360e7399":[4,0,0,4,7,2], -"classsil_1_1tensor_1_1TensorAccessor.html#a116450df27bbb5a3e5f36770360e7399":[6,0,0,4,7,2], -"classsil_1_1tensor_1_1TensorAccessor.html#a12a1f091540c8274049bad6e814cae26":[4,0,0,4,7,3], -"classsil_1_1tensor_1_1TensorAccessor.html#a12a1f091540c8274049bad6e814cae26":[6,0,0,4,7,3], -"classsil_1_1tensor_1_1TensorAccessor.html#ac22e3651581825e3dab2abaf646ae0b1":[4,0,0,4,7,0], -"classsil_1_1tensor_1_1TensorAccessor.html#ac22e3651581825e3dab2abaf646ae0b1":[6,0,0,4,7,0], -"classsil_1_1tensor_1_1TensorAccessor.html#ae5035debe677acbd8776587ada8f2582":[4,0,0,4,7,1], -"classsil_1_1tensor_1_1TensorAccessor.html#ae5035debe677acbd8776587ada8f2582":[6,0,0,4,7,1], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html":[4,0,0,4,6], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html":[6,0,0,4,6], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a024e04c639b604cf0d489aba5ab2a834":[4,0,0,4,6,0], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a024e04c639b604cf0d489aba5ab2a834":[6,0,0,4,6,0], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2089308a2b2228647d62115ce3109b1b":[4,0,0,4,6,2], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2089308a2b2228647d62115ce3109b1b":[6,0,0,4,6,2], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a217e9499c41ce60c44af228c7bf80726":[4,0,0,4,6,12], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a217e9499c41ce60c44af228c7bf80726":[6,0,0,4,6,12], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2dbd11173fe65fecb953cf3b527a40fb":[4,0,0,4,6,7], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2dbd11173fe65fecb953cf3b527a40fb":[6,0,0,4,6,7], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a3629c86747fec40af787e5d61cdefd3c":[4,0,0,4,6,13], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a3629c86747fec40af787e5d61cdefd3c":[6,0,0,4,6,13], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a432d6619b0b734d3881641667afc98ca":[4,0,0,4,6,22], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a432d6619b0b734d3881641667afc98ca":[6,0,0,4,6,22], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a4f22e56a15910e86070759a47aa9023d":[4,0,0,4,6,3], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a4f22e56a15910e86070759a47aa9023d":[6,0,0,4,6,3], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a557d200a6ee326dd2ae91c13f9a7094a":[4,0,0,4,6,21], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a557d200a6ee326dd2ae91c13f9a7094a":[6,0,0,4,6,21], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a59f64fa3448569d6f092acf42d24f244":[4,0,0,4,6,11], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a59f64fa3448569d6f092acf42d24f244":[6,0,0,4,6,11], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a7df544efe177c9c75a99243992df4462":[4,0,0,4,6,17], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a7df544efe177c9c75a99243992df4462":[6,0,0,4,6,17], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a838a59ac32dc968ec2458e62e49ee388":[4,0,0,4,6,6], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a838a59ac32dc968ec2458e62e49ee388":[6,0,0,4,6,6], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a88bac7ee9eefe9f6ef53ab92abf9e133":[4,0,0,4,6,16], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a88bac7ee9eefe9f6ef53ab92abf9e133":[6,0,0,4,6,16], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8bd918cc83d7130c9c65bc5173fcfa5b":[4,0,0,4,6,14], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8bd918cc83d7130c9c65bc5173fcfa5b":[6,0,0,4,6,14], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8d350c444f36076fe5f4017bc7833a83":[4,0,0,4,6,4], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8d350c444f36076fe5f4017bc7833a83":[6,0,0,4,6,4], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8f1bc9c454fff45dcb23af2693f54ddb":[4,0,0,4,6,10], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8f1bc9c454fff45dcb23af2693f54ddb":[6,0,0,4,6,10], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a92562ea00e8b01c77d98a8f88efddf46":[4,0,0,4,6,19], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a92562ea00e8b01c77d98a8f88efddf46":[6,0,0,4,6,19], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aa1ebfed64ea3d304fc57f0b26a092cd5":[4,0,0,4,6,8], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aa1ebfed64ea3d304fc57f0b26a092cd5":[6,0,0,4,6,8], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aab7c4cab0617cded338679477d335e97":[4,0,0,4,6,20], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aab7c4cab0617cded338679477d335e97":[6,0,0,4,6,20], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#ad435b468a8d7f80b84976cac317d619a":[4,0,0,4,6,18], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#ad435b468a8d7f80b84976cac317d619a":[6,0,0,4,6,18], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aeb762034b5c0d0d6da6b0ba38e156c69":[4,0,0,4,6,9], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aeb762034b5c0d0d6da6b0ba38e156c69":[6,0,0,4,6,9], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#af0827abcc0f70a6aac80d7eb4e3c213d":[4,0,0,4,6,5], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#af0827abcc0f70a6aac80d7eb4e3c213d":[6,0,0,4,6,5], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afdc9bb835d626b36ec2343a4e375fc2b":[4,0,0,4,6,1], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afdc9bb835d626b36ec2343a4e375fc2b":[6,0,0,4,6,1], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afe521858f94fe6dcbc2e8848fc5c2b84":[4,0,0,4,6,15], -"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afe521858f94fe6dcbc2e8848fc5c2b84":[6,0,0,4,6,15], +"classsil_1_1tensor_1_1TensorAccessor.html":[4,0,0,4,8], +"classsil_1_1tensor_1_1TensorAccessor.html":[6,0,0,4,8], +"classsil_1_1tensor_1_1TensorAccessor.html#a116450df27bbb5a3e5f36770360e7399":[4,0,0,4,8,2], +"classsil_1_1tensor_1_1TensorAccessor.html#a116450df27bbb5a3e5f36770360e7399":[6,0,0,4,8,2], +"classsil_1_1tensor_1_1TensorAccessor.html#a12a1f091540c8274049bad6e814cae26":[4,0,0,4,8,3], +"classsil_1_1tensor_1_1TensorAccessor.html#a12a1f091540c8274049bad6e814cae26":[6,0,0,4,8,3], +"classsil_1_1tensor_1_1TensorAccessor.html#ac22e3651581825e3dab2abaf646ae0b1":[4,0,0,4,8,0], +"classsil_1_1tensor_1_1TensorAccessor.html#ac22e3651581825e3dab2abaf646ae0b1":[6,0,0,4,8,0], +"classsil_1_1tensor_1_1TensorAccessor.html#ae5035debe677acbd8776587ada8f2582":[4,0,0,4,8,1], +"classsil_1_1tensor_1_1TensorAccessor.html#ae5035debe677acbd8776587ada8f2582":[6,0,0,4,8,1], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html":[4,0,0,4,7], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html":[6,0,0,4,7], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a024e04c639b604cf0d489aba5ab2a834":[4,0,0,4,7,0], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a024e04c639b604cf0d489aba5ab2a834":[6,0,0,4,7,0], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2089308a2b2228647d62115ce3109b1b":[4,0,0,4,7,2], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2089308a2b2228647d62115ce3109b1b":[6,0,0,4,7,2], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a217e9499c41ce60c44af228c7bf80726":[4,0,0,4,7,12], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a217e9499c41ce60c44af228c7bf80726":[6,0,0,4,7,12], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2dbd11173fe65fecb953cf3b527a40fb":[4,0,0,4,7,7], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a2dbd11173fe65fecb953cf3b527a40fb":[6,0,0,4,7,7], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a3629c86747fec40af787e5d61cdefd3c":[4,0,0,4,7,13], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a3629c86747fec40af787e5d61cdefd3c":[6,0,0,4,7,13], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a432d6619b0b734d3881641667afc98ca":[4,0,0,4,7,22], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a432d6619b0b734d3881641667afc98ca":[6,0,0,4,7,22], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a4f22e56a15910e86070759a47aa9023d":[4,0,0,4,7,3], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a4f22e56a15910e86070759a47aa9023d":[6,0,0,4,7,3], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a557d200a6ee326dd2ae91c13f9a7094a":[4,0,0,4,7,21], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a557d200a6ee326dd2ae91c13f9a7094a":[6,0,0,4,7,21], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a59f64fa3448569d6f092acf42d24f244":[4,0,0,4,7,11], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a59f64fa3448569d6f092acf42d24f244":[6,0,0,4,7,11], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a7df544efe177c9c75a99243992df4462":[4,0,0,4,7,17], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a7df544efe177c9c75a99243992df4462":[6,0,0,4,7,17], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a838a59ac32dc968ec2458e62e49ee388":[4,0,0,4,7,6], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a838a59ac32dc968ec2458e62e49ee388":[6,0,0,4,7,6], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a88bac7ee9eefe9f6ef53ab92abf9e133":[4,0,0,4,7,16], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a88bac7ee9eefe9f6ef53ab92abf9e133":[6,0,0,4,7,16], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8bd918cc83d7130c9c65bc5173fcfa5b":[4,0,0,4,7,14], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8bd918cc83d7130c9c65bc5173fcfa5b":[6,0,0,4,7,14], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8d350c444f36076fe5f4017bc7833a83":[4,0,0,4,7,4], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8d350c444f36076fe5f4017bc7833a83":[6,0,0,4,7,4], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8f1bc9c454fff45dcb23af2693f54ddb":[4,0,0,4,7,10], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a8f1bc9c454fff45dcb23af2693f54ddb":[6,0,0,4,7,10], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a92562ea00e8b01c77d98a8f88efddf46":[4,0,0,4,7,19], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#a92562ea00e8b01c77d98a8f88efddf46":[6,0,0,4,7,19], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aa1ebfed64ea3d304fc57f0b26a092cd5":[4,0,0,4,7,8], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aa1ebfed64ea3d304fc57f0b26a092cd5":[6,0,0,4,7,8], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aab7c4cab0617cded338679477d335e97":[4,0,0,4,7,20], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aab7c4cab0617cded338679477d335e97":[6,0,0,4,7,20], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#ad435b468a8d7f80b84976cac317d619a":[4,0,0,4,7,18], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#ad435b468a8d7f80b84976cac317d619a":[6,0,0,4,7,18], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aeb762034b5c0d0d6da6b0ba38e156c69":[4,0,0,4,7,9], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#aeb762034b5c0d0d6da6b0ba38e156c69":[6,0,0,4,7,9], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#af0827abcc0f70a6aac80d7eb4e3c213d":[4,0,0,4,7,5], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#af0827abcc0f70a6aac80d7eb4e3c213d":[6,0,0,4,7,5], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afdc9bb835d626b36ec2343a4e375fc2b":[4,0,0,4,7,1], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afdc9bb835d626b36ec2343a4e375fc2b":[6,0,0,4,7,1], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afe521858f94fe6dcbc2e8848fc5c2b84":[4,0,0,4,7,15], +"classsil_1_1tensor_1_1Tensor_3_01ElementType_00_01ddc_1_1DiscreteDomain_3_01DDim_8_8_8_01_4_00_0ff62584396f9b5f08cbf3c068fb7130c.html#afe521858f94fe6dcbc2e8848fc5c2b84":[6,0,0,4,7,15], "concepts.html":[5], "conceptsil_1_1misc_1_1NotSpecialization.html":[4,0,0,3,3] }; diff --git a/navtreeindex2.js b/navtreeindex2.js index 30cc324f..91a2f573 100644 --- a/navtreeindex2.js +++ b/navtreeindex2.js @@ -3,9 +3,9 @@ var NAVTREEINDEX2 = "conceptsil_1_1misc_1_1NotSpecialization.html":[5,0,0,1], "conceptsil_1_1misc_1_1Specialization.html":[4,0,0,3,2], "conceptsil_1_1misc_1_1Specialization.html":[5,0,0,0], -"conceptsil_1_1tensor_1_1TensorIndex.html":[4,0,0,4,19], +"conceptsil_1_1tensor_1_1TensorIndex.html":[4,0,0,4,20], "conceptsil_1_1tensor_1_1TensorIndex.html":[5,0,1,0], -"conceptsil_1_1tensor_1_1TensorNatIndex.html":[4,0,0,4,20], +"conceptsil_1_1tensor_1_1TensorNatIndex.html":[4,0,0,4,21], "conceptsil_1_1tensor_1_1TensorNatIndex.html":[5,0,1,1], "exterior_module.html":[3], "exterior_module.html#autotoc_md14":[3,0], @@ -89,6 +89,7 @@ var NAVTREEINDEX2 = "namespacesil_1_1exterior.html#a3ac9f6a5916d6d2a26961706f2e33ec3":[4,0,0,1,20], "namespacesil_1_1exterior.html#a3da5f6d818417a943e98321a4f70d534":[4,0,0,1,12], "namespacesil_1_1exterior.html#a44d7a21937a15c4687c17dbb94778c2f":[4,0,0,1,18], +"namespacesil_1_1exterior.html#a4efa14fa3fbc50aef998647604aa1589":[4,0,0,1,14], "namespacesil_1_1exterior.html#a52bc67c02d8ba34a3eeb34de1dd21df8":[4,0,0,1,6], "namespacesil_1_1exterior.html#a5c98c080f983d9b2020d6b0f13598044":[4,0,0,1,17], "namespacesil_1_1exterior.html#a6b84e7779045ab2b05d12295aeb6bcc8":[4,0,0,1,9], @@ -106,7 +107,6 @@ var NAVTREEINDEX2 = "namespacesil_1_1exterior.html#adcce2d0c1e414dabb34ef6ce72539c0b":[4,0,0,1,21], "namespacesil_1_1exterior.html#af879a35dd2e3fe608f5c086560f16065":[4,0,0,1,10], "namespacesil_1_1exterior.html#af909312837528d942e73443a79fd9f17":[4,0,0,1,7], -"namespacesil_1_1exterior.html#afd93aa912be271019b5425e00391049e":[4,0,0,1,14], "namespacesil_1_1mesher.html":[4,0,0,2], "namespacesil_1_1misc.html":[4,0,0,3], "namespacesil_1_1misc.html#a094c71e44717da55afa244de80ca4b2c":[4,0,0,3,15], @@ -122,61 +122,61 @@ var NAVTREEINDEX2 = "namespacesil_1_1misc.html#aea35c72a0b5289f6bef175d41e5001d1":[4,0,0,3,9], "namespacesil_1_1misc.html#af83a849e8c4a2149160bd276d3e445c1":[4,0,0,3,5], "namespacesil_1_1tensor.html":[4,0,0,4], -"namespacesil_1_1tensor.html#a054cf7e3f794180e08a5a6444fa8ee43":[4,0,0,4,27], -"namespacesil_1_1tensor.html#a07b5efb792fc5564b4644c8f1d1bbeec":[4,0,0,4,21], -"namespacesil_1_1tensor.html#a13d4a3e249edb25ac1599f0598af2fcc":[4,0,0,4,65], -"namespacesil_1_1tensor.html#a164aa1d6ecb53a91d54f7158f7b0bcb7":[4,0,0,4,55], -"namespacesil_1_1tensor.html#a1bf1827923f85e07f3f920b6402ae377":[4,0,0,4,63], -"namespacesil_1_1tensor.html#a2107e4ab490e7118ac7bd436225fe2b8":[4,0,0,4,46], -"namespacesil_1_1tensor.html#a2e6798d76f9c9ff66e5be7fe70655858":[4,0,0,4,74], -"namespacesil_1_1tensor.html#a2f95b794bbc8c99edc2140cfa04f299b":[4,0,0,4,26], -"namespacesil_1_1tensor.html#a330b88aa5d68dd2ba023a5858c4ec873":[4,0,0,4,33], -"namespacesil_1_1tensor.html#a3318cc0d5802ebbef660dc7d3d4044d0":[4,0,0,4,43], -"namespacesil_1_1tensor.html#a42fd85f35c7a98d5f8504f4b56227f8d":[4,0,0,4,28], -"namespacesil_1_1tensor.html#a4681d520034e5a2ff471c2b219c9763c":[4,0,0,4,36], -"namespacesil_1_1tensor.html#a474d163b3d8d2bd9b386cce130049b98":[4,0,0,4,70], -"namespacesil_1_1tensor.html#a4dcd2abd3401c0613db18a84b2fb1539":[4,0,0,4,61], -"namespacesil_1_1tensor.html#a4ddd84a2d2c13dd5ccd9c2d98d210885":[4,0,0,4,35], -"namespacesil_1_1tensor.html#a5457e355452eb5f3df771ad43eafcd5d":[4,0,0,4,59], -"namespacesil_1_1tensor.html#a573c0c94d3d5df6eefc212984a7757d8":[4,0,0,4,54], -"namespacesil_1_1tensor.html#a6049da34dd9724305cd77d3e3733bb82":[4,0,0,4,48], -"namespacesil_1_1tensor.html#a60772fdae84eea61783cd4cc2a2fa0af":[4,0,0,4,49], -"namespacesil_1_1tensor.html#a61fe8bf1b3d411f3d86fdef8beaafc06":[4,0,0,4,47], -"namespacesil_1_1tensor.html#a6663bbd2dd68f6841a544eec9abdb78d":[4,0,0,4,71], -"namespacesil_1_1tensor.html#a67195c6cc192c638d6c3fcf777b3aa07":[4,0,0,4,40], -"namespacesil_1_1tensor.html#a6b2f3421d43c572b05cc7ecb8334e5fd":[4,0,0,4,44], -"namespacesil_1_1tensor.html#a6ba69aa07989b01533e9568120931be3":[4,0,0,4,50], -"namespacesil_1_1tensor.html#a6cf51c8836b1198ff4e2ffdfd68f60b9":[4,0,0,4,73], -"namespacesil_1_1tensor.html#a6e4843c3706eb7cb8edd8c0e0c26aa4e":[4,0,0,4,64], -"namespacesil_1_1tensor.html#a74ca02502c2700b93bc6cd2b3d7abc8a":[4,0,0,4,34], -"namespacesil_1_1tensor.html#a7a0abe122166bba6ee4509805a3946e9":[4,0,0,4,57], -"namespacesil_1_1tensor.html#a7aebefceb7d24467500a817f5073a311":[4,0,0,4,23], -"namespacesil_1_1tensor.html#a7f82dfccc78dc4f1dabf64f94f922e99":[4,0,0,4,75], -"namespacesil_1_1tensor.html#a818942c0b51017a6b1486b95708a416f":[4,0,0,4,30], -"namespacesil_1_1tensor.html#a848522a446c67d9c927f2cfbe93ffcb4":[4,0,0,4,41], -"namespacesil_1_1tensor.html#a85ebbec43d6213188d6165c3c47f5825":[4,0,0,4,56], -"namespacesil_1_1tensor.html#a860a14ced1380cc778822b7e81873698":[4,0,0,4,29], -"namespacesil_1_1tensor.html#a870c5ca50a4cc3ac7a19905a24b44522":[4,0,0,4,45], -"namespacesil_1_1tensor.html#a87b259915dc16e382a7af01fdbaeff85":[4,0,0,4,52], -"namespacesil_1_1tensor.html#a895db197dc74117c7a4b5aab298d2973":[4,0,0,4,58], -"namespacesil_1_1tensor.html#a907b640fd915c4d85e18a16bbf381877":[4,0,0,4,53], -"namespacesil_1_1tensor.html#a921e96618bb3b8f2acf9fdfe72608a49":[4,0,0,4,32], -"namespacesil_1_1tensor.html#aa0e394fc0f36443ff452393cfa95c8d0":[4,0,0,4,51], -"namespacesil_1_1tensor.html#aa4e2474eec9934102995b4e42f343a91":[4,0,0,4,37], -"namespacesil_1_1tensor.html#ac265afa3e78c715cbb7f64f9ace68f9d":[4,0,0,4,62], -"namespacesil_1_1tensor.html#ac8a8e5b218f98befea31e2aefa902f1e":[4,0,0,4,24], -"namespacesil_1_1tensor.html#acd8ef6c9524f0042f7d14f4d1903c3a3":[4,0,0,4,22], -"namespacesil_1_1tensor.html#ad550ba4fb8a3062a3cec97a08e31ee44":[4,0,0,4,60], -"namespacesil_1_1tensor.html#ad87f841c21af50491ee8198e88631449":[4,0,0,4,69], -"namespacesil_1_1tensor.html#ad931792b69b009623e283e74cdb06076":[4,0,0,4,38], -"namespacesil_1_1tensor.html#ae675c282e61cccc12927db7acacf828e":[4,0,0,4,31], -"namespacesil_1_1tensor.html#ae99219778ac9edef94c1e46ee478caa2":[4,0,0,4,25], -"namespacesil_1_1tensor.html#aeada71b3699ecf64d8d6cbfc44bf6a8c":[4,0,0,4,39], -"namespacesil_1_1tensor.html#af08aa7105bc7c2cc41d21dafcef6a9ab":[4,0,0,4,42], -"namespacesil_1_1tensor.html#af1114b530ae34962788b74719bd1eeb2":[4,0,0,4,72], -"namespacesil_1_1tensor.html#afafa161f38b2b6c9033dfaf54d6fa926":[4,0,0,4,66], -"namespacesil_1_1tensor.html#afc46d5ce3910fb5ced652d618294726c":[4,0,0,4,67], -"namespacesil_1_1tensor.html#afc897fb906eb5efe172d443f520b5c13":[4,0,0,4,68], +"namespacesil_1_1tensor.html#a054cf7e3f794180e08a5a6444fa8ee43":[4,0,0,4,28], +"namespacesil_1_1tensor.html#a07b5efb792fc5564b4644c8f1d1bbeec":[4,0,0,4,22], +"namespacesil_1_1tensor.html#a13d4a3e249edb25ac1599f0598af2fcc":[4,0,0,4,66], +"namespacesil_1_1tensor.html#a164aa1d6ecb53a91d54f7158f7b0bcb7":[4,0,0,4,56], +"namespacesil_1_1tensor.html#a1bf1827923f85e07f3f920b6402ae377":[4,0,0,4,64], +"namespacesil_1_1tensor.html#a2107e4ab490e7118ac7bd436225fe2b8":[4,0,0,4,47], +"namespacesil_1_1tensor.html#a2e6798d76f9c9ff66e5be7fe70655858":[4,0,0,4,75], +"namespacesil_1_1tensor.html#a2f95b794bbc8c99edc2140cfa04f299b":[4,0,0,4,27], +"namespacesil_1_1tensor.html#a330b88aa5d68dd2ba023a5858c4ec873":[4,0,0,4,34], +"namespacesil_1_1tensor.html#a3318cc0d5802ebbef660dc7d3d4044d0":[4,0,0,4,44], +"namespacesil_1_1tensor.html#a42fd85f35c7a98d5f8504f4b56227f8d":[4,0,0,4,29], +"namespacesil_1_1tensor.html#a4681d520034e5a2ff471c2b219c9763c":[4,0,0,4,37], +"namespacesil_1_1tensor.html#a474d163b3d8d2bd9b386cce130049b98":[4,0,0,4,71], +"namespacesil_1_1tensor.html#a4dcd2abd3401c0613db18a84b2fb1539":[4,0,0,4,62], +"namespacesil_1_1tensor.html#a4ddd84a2d2c13dd5ccd9c2d98d210885":[4,0,0,4,36], +"namespacesil_1_1tensor.html#a5457e355452eb5f3df771ad43eafcd5d":[4,0,0,4,60], +"namespacesil_1_1tensor.html#a573c0c94d3d5df6eefc212984a7757d8":[4,0,0,4,55], +"namespacesil_1_1tensor.html#a6049da34dd9724305cd77d3e3733bb82":[4,0,0,4,49], +"namespacesil_1_1tensor.html#a60772fdae84eea61783cd4cc2a2fa0af":[4,0,0,4,50], +"namespacesil_1_1tensor.html#a61fe8bf1b3d411f3d86fdef8beaafc06":[4,0,0,4,48], +"namespacesil_1_1tensor.html#a6663bbd2dd68f6841a544eec9abdb78d":[4,0,0,4,72], +"namespacesil_1_1tensor.html#a67195c6cc192c638d6c3fcf777b3aa07":[4,0,0,4,41], +"namespacesil_1_1tensor.html#a6b2f3421d43c572b05cc7ecb8334e5fd":[4,0,0,4,45], +"namespacesil_1_1tensor.html#a6ba69aa07989b01533e9568120931be3":[4,0,0,4,51], +"namespacesil_1_1tensor.html#a6cf51c8836b1198ff4e2ffdfd68f60b9":[4,0,0,4,74], +"namespacesil_1_1tensor.html#a6e4843c3706eb7cb8edd8c0e0c26aa4e":[4,0,0,4,65], +"namespacesil_1_1tensor.html#a74ca02502c2700b93bc6cd2b3d7abc8a":[4,0,0,4,35], +"namespacesil_1_1tensor.html#a7a0abe122166bba6ee4509805a3946e9":[4,0,0,4,58], +"namespacesil_1_1tensor.html#a7aebefceb7d24467500a817f5073a311":[4,0,0,4,24], +"namespacesil_1_1tensor.html#a7f82dfccc78dc4f1dabf64f94f922e99":[4,0,0,4,76], +"namespacesil_1_1tensor.html#a818942c0b51017a6b1486b95708a416f":[4,0,0,4,31], +"namespacesil_1_1tensor.html#a848522a446c67d9c927f2cfbe93ffcb4":[4,0,0,4,42], +"namespacesil_1_1tensor.html#a85ebbec43d6213188d6165c3c47f5825":[4,0,0,4,57], +"namespacesil_1_1tensor.html#a860a14ced1380cc778822b7e81873698":[4,0,0,4,30], +"namespacesil_1_1tensor.html#a870c5ca50a4cc3ac7a19905a24b44522":[4,0,0,4,46], +"namespacesil_1_1tensor.html#a87b259915dc16e382a7af01fdbaeff85":[4,0,0,4,53], +"namespacesil_1_1tensor.html#a895db197dc74117c7a4b5aab298d2973":[4,0,0,4,59], +"namespacesil_1_1tensor.html#a907b640fd915c4d85e18a16bbf381877":[4,0,0,4,54], +"namespacesil_1_1tensor.html#a921e96618bb3b8f2acf9fdfe72608a49":[4,0,0,4,33], +"namespacesil_1_1tensor.html#aa0e394fc0f36443ff452393cfa95c8d0":[4,0,0,4,52], +"namespacesil_1_1tensor.html#aa4e2474eec9934102995b4e42f343a91":[4,0,0,4,38], +"namespacesil_1_1tensor.html#ac265afa3e78c715cbb7f64f9ace68f9d":[4,0,0,4,63], +"namespacesil_1_1tensor.html#ac8a8e5b218f98befea31e2aefa902f1e":[4,0,0,4,25], +"namespacesil_1_1tensor.html#acd8ef6c9524f0042f7d14f4d1903c3a3":[4,0,0,4,23], +"namespacesil_1_1tensor.html#ad550ba4fb8a3062a3cec97a08e31ee44":[4,0,0,4,61], +"namespacesil_1_1tensor.html#ad87f841c21af50491ee8198e88631449":[4,0,0,4,70], +"namespacesil_1_1tensor.html#ad931792b69b009623e283e74cdb06076":[4,0,0,4,39], +"namespacesil_1_1tensor.html#ae675c282e61cccc12927db7acacf828e":[4,0,0,4,32], +"namespacesil_1_1tensor.html#ae99219778ac9edef94c1e46ee478caa2":[4,0,0,4,26], +"namespacesil_1_1tensor.html#aeada71b3699ecf64d8d6cbfc44bf6a8c":[4,0,0,4,40], +"namespacesil_1_1tensor.html#af08aa7105bc7c2cc41d21dafcef6a9ab":[4,0,0,4,43], +"namespacesil_1_1tensor.html#af1114b530ae34962788b74719bd1eeb2":[4,0,0,4,73], +"namespacesil_1_1tensor.html#afafa161f38b2b6c9033dfaf54d6fa926":[4,0,0,4,67], +"namespacesil_1_1tensor.html#afc46d5ce3910fb5ced652d618294726c":[4,0,0,4,68], +"namespacesil_1_1tensor.html#afc897fb906eb5efe172d443f520b5c13":[4,0,0,4,69], "pages.html":[], "structsil_1_1misc_1_1is__specialization__of.html":[4,0,0,3,0], "structsil_1_1misc_1_1is__specialization__of.html":[6,0,0,3,0], @@ -186,54 +186,56 @@ var NAVTREEINDEX2 = "structsil_1_1tensor_1_1MetricIndex1.html":[6,0,0,4,3], "structsil_1_1tensor_1_1MetricIndex2.html":[4,0,0,4,4], "structsil_1_1tensor_1_1MetricIndex2.html":[6,0,0,4,4], -"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html":[4,0,0,4,8], -"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html":[6,0,0,4,8], -"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#a73e3fcdcb6dea2cebb774ff79734ff2c":[4,0,0,4,8,0], -"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#a73e3fcdcb6dea2cebb774ff79734ff2c":[6,0,0,4,8,0], -"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html":[4,0,0,4,9], -"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html":[6,0,0,4,9], -"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html#ae8388a802e13a5ace13053a873ddc45f":[4,0,0,4,9,0], -"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html#ae8388a802e13a5ace13053a873ddc45f":[6,0,0,4,9,0], -"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html":[4,0,0,4,10], -"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html":[6,0,0,4,10], -"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html#a63541c3d50f01ac9e256ea8c9f089df2":[4,0,0,4,10,0], -"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html#a63541c3d50f01ac9e256ea8c9f089df2":[6,0,0,4,10,0], -"structsil_1_1tensor_1_1TensorDiagonalIndex.html":[4,0,0,4,11], -"structsil_1_1tensor_1_1TensorDiagonalIndex.html":[6,0,0,4,11], -"structsil_1_1tensor_1_1TensorDiagonalIndex.html#a9571f6176d63e05725d28a8eeb7ef008":[4,0,0,4,11,0], -"structsil_1_1tensor_1_1TensorDiagonalIndex.html#a9571f6176d63e05725d28a8eeb7ef008":[6,0,0,4,11,0], -"structsil_1_1tensor_1_1TensorFullIndex.html":[4,0,0,4,12], -"structsil_1_1tensor_1_1TensorFullIndex.html":[6,0,0,4,12], -"structsil_1_1tensor_1_1TensorFullIndex.html#a8198ee99ee249cbd8b1a4d96ae634c9f":[4,0,0,4,12,0], -"structsil_1_1tensor_1_1TensorFullIndex.html#a8198ee99ee249cbd8b1a4d96ae634c9f":[6,0,0,4,12,0], -"structsil_1_1tensor_1_1TensorIdentityIndex.html":[4,0,0,4,13], -"structsil_1_1tensor_1_1TensorIdentityIndex.html":[6,0,0,4,13], -"structsil_1_1tensor_1_1TensorIdentityIndex.html#a893f966a988cdf51081d1dc65958b9bf":[4,0,0,4,13,0], -"structsil_1_1tensor_1_1TensorIdentityIndex.html#a893f966a988cdf51081d1dc65958b9bf":[6,0,0,4,13,0], -"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html":[4,0,0,4,14], -"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html":[6,0,0,4,14], -"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#ad00e0d8f0fe56c6b8708e368f2fc3d85":[4,0,0,4,14,0], -"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#ad00e0d8f0fe56c6b8708e368f2fc3d85":[6,0,0,4,14,0], -"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html":[4,0,0,4,15], -"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html":[6,0,0,4,15], -"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a595943c8b831fb16f0df199c26de0464":[4,0,0,4,15,0], -"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a595943c8b831fb16f0df199c26de0464":[6,0,0,4,15,0], -"structsil_1_1tensor_1_1TensorNaturalIndex.html":[4,0,0,4,16], -"structsil_1_1tensor_1_1TensorNaturalIndex.html":[6,0,0,4,16], -"structsil_1_1tensor_1_1TensorNaturalIndex.html#a273d84311647b1c205fe3dd45f25c941":[4,0,0,4,16,1], -"structsil_1_1tensor_1_1TensorNaturalIndex.html#a273d84311647b1c205fe3dd45f25c941":[6,0,0,4,16,1], -"structsil_1_1tensor_1_1TensorNaturalIndex.html#aa699cc4c175565100a353a4299b4491c":[4,0,0,4,16,0], -"structsil_1_1tensor_1_1TensorNaturalIndex.html#aa699cc4c175565100a353a4299b4491c":[6,0,0,4,16,0], -"structsil_1_1tensor_1_1TensorSymmetricIndex.html":[4,0,0,4,17], -"structsil_1_1tensor_1_1TensorSymmetricIndex.html":[6,0,0,4,17], -"structsil_1_1tensor_1_1TensorSymmetricIndex.html#a0ece074b746d1cc09844597f24fa2424":[4,0,0,4,17,0], -"structsil_1_1tensor_1_1TensorSymmetricIndex.html#a0ece074b746d1cc09844597f24fa2424":[6,0,0,4,17,0], -"structsil_1_1tensor_1_1TensorYoungTableauIndex.html":[4,0,0,4,18], -"structsil_1_1tensor_1_1TensorYoungTableauIndex.html":[6,0,0,4,18], -"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#ab44d3e06ac1104ccaa597b2d3031b096":[4,0,0,4,18,1], -"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#ab44d3e06ac1104ccaa597b2d3031b096":[6,0,0,4,18,1], -"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#aed5c525a24e6b67e9b50e9de3565d166":[4,0,0,4,18,0], -"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#aed5c525a24e6b67e9b50e9de3565d166":[6,0,0,4,18,0], +"structsil_1_1tensor_1_1ScalarIndex.html":[4,0,0,4,6], +"structsil_1_1tensor_1_1ScalarIndex.html":[6,0,0,4,6], +"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html":[4,0,0,4,9], +"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html":[6,0,0,4,9], +"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#a73e3fcdcb6dea2cebb774ff79734ff2c":[4,0,0,4,9,0], +"structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#a73e3fcdcb6dea2cebb774ff79734ff2c":[6,0,0,4,9,0], +"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html":[4,0,0,4,10], +"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html":[6,0,0,4,10], +"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html#ae8388a802e13a5ace13053a873ddc45f":[4,0,0,4,10,0], +"structsil_1_1tensor_1_1TensorContravariantNaturalIndex.html#ae8388a802e13a5ace13053a873ddc45f":[6,0,0,4,10,0], +"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html":[4,0,0,4,11], +"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html":[6,0,0,4,11], +"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html#a63541c3d50f01ac9e256ea8c9f089df2":[4,0,0,4,11,0], +"structsil_1_1tensor_1_1TensorCovariantNaturalIndex.html#a63541c3d50f01ac9e256ea8c9f089df2":[6,0,0,4,11,0], +"structsil_1_1tensor_1_1TensorDiagonalIndex.html":[4,0,0,4,12], +"structsil_1_1tensor_1_1TensorDiagonalIndex.html":[6,0,0,4,12], +"structsil_1_1tensor_1_1TensorDiagonalIndex.html#a9571f6176d63e05725d28a8eeb7ef008":[4,0,0,4,12,0], +"structsil_1_1tensor_1_1TensorDiagonalIndex.html#a9571f6176d63e05725d28a8eeb7ef008":[6,0,0,4,12,0], +"structsil_1_1tensor_1_1TensorFullIndex.html":[4,0,0,4,13], +"structsil_1_1tensor_1_1TensorFullIndex.html":[6,0,0,4,13], +"structsil_1_1tensor_1_1TensorFullIndex.html#a8198ee99ee249cbd8b1a4d96ae634c9f":[4,0,0,4,13,0], +"structsil_1_1tensor_1_1TensorFullIndex.html#a8198ee99ee249cbd8b1a4d96ae634c9f":[6,0,0,4,13,0], +"structsil_1_1tensor_1_1TensorIdentityIndex.html":[4,0,0,4,14], +"structsil_1_1tensor_1_1TensorIdentityIndex.html":[6,0,0,4,14], +"structsil_1_1tensor_1_1TensorIdentityIndex.html#a893f966a988cdf51081d1dc65958b9bf":[4,0,0,4,14,0], +"structsil_1_1tensor_1_1TensorIdentityIndex.html#a893f966a988cdf51081d1dc65958b9bf":[6,0,0,4,14,0], +"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html":[4,0,0,4,15], +"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html":[6,0,0,4,15], +"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#ad00e0d8f0fe56c6b8708e368f2fc3d85":[4,0,0,4,15,0], +"structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#ad00e0d8f0fe56c6b8708e368f2fc3d85":[6,0,0,4,15,0], +"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html":[4,0,0,4,16], +"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html":[6,0,0,4,16], +"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a595943c8b831fb16f0df199c26de0464":[4,0,0,4,16,0], +"structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a595943c8b831fb16f0df199c26de0464":[6,0,0,4,16,0], +"structsil_1_1tensor_1_1TensorNaturalIndex.html":[4,0,0,4,17], +"structsil_1_1tensor_1_1TensorNaturalIndex.html":[6,0,0,4,17], +"structsil_1_1tensor_1_1TensorNaturalIndex.html#a273d84311647b1c205fe3dd45f25c941":[4,0,0,4,17,1], +"structsil_1_1tensor_1_1TensorNaturalIndex.html#a273d84311647b1c205fe3dd45f25c941":[6,0,0,4,17,1], +"structsil_1_1tensor_1_1TensorNaturalIndex.html#aa699cc4c175565100a353a4299b4491c":[4,0,0,4,17,0], +"structsil_1_1tensor_1_1TensorNaturalIndex.html#aa699cc4c175565100a353a4299b4491c":[6,0,0,4,17,0], +"structsil_1_1tensor_1_1TensorSymmetricIndex.html":[4,0,0,4,18], +"structsil_1_1tensor_1_1TensorSymmetricIndex.html":[6,0,0,4,18], +"structsil_1_1tensor_1_1TensorSymmetricIndex.html#a0ece074b746d1cc09844597f24fa2424":[4,0,0,4,18,0], +"structsil_1_1tensor_1_1TensorSymmetricIndex.html#a0ece074b746d1cc09844597f24fa2424":[6,0,0,4,18,0], +"structsil_1_1tensor_1_1TensorYoungTableauIndex.html":[4,0,0,4,19], +"structsil_1_1tensor_1_1TensorYoungTableauIndex.html":[6,0,0,4,19], +"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#ab44d3e06ac1104ccaa597b2d3031b096":[4,0,0,4,19,1], +"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#ab44d3e06ac1104ccaa597b2d3031b096":[6,0,0,4,19,1], +"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#aed5c525a24e6b67e9b50e9de3565d166":[4,0,0,4,19,0], +"structsil_1_1tensor_1_1TensorYoungTableauIndex.html#aed5c525a24e6b67e9b50e9de3565d166":[6,0,0,4,19,0], "structsil_1_1tensor_1_1prime.html":[4,0,0,4,5], "structsil_1_1tensor_1_1prime.html":[6,0,0,4,5], "tensor_module.html":[2], diff --git a/search/all_10.js b/search/all_10.js index 020f73c9..1b91db95 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -1,29 +1,30 @@ var searchData= [ - ['second_0',['second',['../namespacesil_1_1tensor.html#a4ddd84a2d2c13dd5ccd9c2d98d210885',1,'sil::tensor']]], - ['seconds_1',['seconds',['../namespacesil_1_1tensor.html#aa4e2474eec9934102995b4e42f343a91',1,'sil::tensor']]], - ['select_5ffrom_5ftype_5fseq_2',['select_from_type_seq',['../namespacesil_1_1misc.html#ac4920dd15665754dd8afd25c431036c5',1,'sil::misc']]], - ['sil_3',['sil',['../namespacesil.html',1,'']]], - ['sil_3a_3acsr_4',['csr',['../namespacesil_1_1csr.html',1,'sil']]], - ['sil_3a_3aexterior_5',['exterior',['../namespacesil_1_1exterior.html',1,'sil']]], - ['sil_3a_3amesher_6',['mesher',['../namespacesil_1_1mesher.html',1,'sil']]], - ['sil_3a_3amisc_7',['misc',['../namespacesil_1_1misc.html',1,'sil']]], - ['sil_3a_3amisc_3a_3anotspecialization_8',['NotSpecialization',['../conceptsil_1_1misc_1_1NotSpecialization.html',1,'sil::misc']]], - ['sil_3a_3amisc_3a_3aspecialization_9',['Specialization',['../conceptsil_1_1misc_1_1Specialization.html',1,'sil::misc']]], - ['sil_3a_3atensor_10',['tensor',['../namespacesil_1_1tensor.html',1,'sil']]], - ['sil_3a_3atensor_3a_3atensorindex_11',['TensorIndex',['../conceptsil_1_1tensor_1_1TensorIndex.html',1,'sil::tensor']]], - ['sil_3a_3atensor_3a_3atensornatindex_12',['TensorNatIndex',['../conceptsil_1_1tensor_1_1TensorNatIndex.html',1,'sil::tensor']]], - ['similie_13',['SimiLie',['../Running.html',1,'Running SimiLie'],['../index.html#autotoc_md0',1,'SimiLie']]], - ['similie_20do_20in_20addition_14',['Do Kokkos and DDC support tensor fields ? What can SimiLie do in addition ?',['../tensor_module.html#autotoc_md7',1,'']]], - ['simplex_15',['Simplex',['../classsil_1_1exterior_1_1Simplex.html',1,'sil::exterior::Simplex< K, Tag >'],['../classsil_1_1exterior_1_1Simplex.html#ace82e9b337aa4fb05b6db9dc57f506a1',1,'sil::exterior::Simplex::Simplex()=default'],['../classsil_1_1exterior_1_1Simplex.html#a70279b367cdda2665d748829a2497993',1,'sil::exterior::Simplex::Simplex(Simplex const &)=default'],['../classsil_1_1exterior_1_1Simplex.html#aeef950a04712f757c47c47ee57fdbf83',1,'sil::exterior::Simplex::Simplex(Simplex &&)=default'],['../classsil_1_1exterior_1_1Simplex.html#a04b3ed266cf4ca50d2d20ef004d90f9f',1,'sil::exterior::Simplex::Simplex(discrete_element_type elem, T vect=ddc::DiscreteVector<> {}, bool negative=false) noexcept'],['../classsil_1_1exterior_1_1Simplex.html#a2ffc43301fd80eff034ec66693780244',1,'sil::exterior::Simplex::Simplex(std::integral_constant< std::size_t, K >, discrete_element_type elem, T vect=ddc::DiscreteVector<> {}, bool negative=false) noexcept'],['../namespacesil_1_1exterior.html#a19dd94e9180327a407f012154b3c2bc4',1,'sil::exterior::Simplex(ddc::DiscreteElement< Tag... >, ddc::DiscreteVector< T... >) -> Simplex< sizeof...(T), Tag... >'],['../namespacesil_1_1exterior.html#a0f1e1f80c56429b7ed438a0ab465cb37',1,'sil::exterior::Simplex(ddc::DiscreteElement< Tag... >, ddc::DiscreteVector< T... >, bool) -> Simplex< sizeof...(T), Tag... >'],['../exterior_module.html#autotoc_md16',1,'Simplex']]], - ['simplex_16',['simplex',['../classsil_1_1exterior_1_1Cosimplex.html#a507d33e58ae24c43fa0363d31a1485e0',1,'sil::exterior::Cosimplex::simplex() noexcept'],['../classsil_1_1exterior_1_1Cosimplex.html#a668cab8839019ab294c3ae4a3d917a5e',1,'sil::exterior::Cosimplex::simplex() const noexcept']]], - ['simplex_5ffor_5fdomain_5ft_17',['simplex_for_domain_t',['../namespacesil_1_1exterior.html#abaced41367e3e156dc7d8467022b3b94',1,'sil::exterior']]], - ['simplex_5ftype_18',['simplex_type',['../classsil_1_1exterior_1_1Chain.html#a9f9e812c099a979af0f4fa646732524d',1,'sil::exterior::Chain::simplex_type'],['../classsil_1_1exterior_1_1Cochain.html#a7e72ac33d849a8377e44cc89d8002d1f',1,'sil::exterior::Cochain::simplex_type'],['../classsil_1_1exterior_1_1Cosimplex.html#a81d9acdbf7e9299823ef1f4bac72be59',1,'sil::exterior::Cosimplex::simplex_type'],['../classsil_1_1exterior_1_1LocalChain.html#a27403190b80058e1a50c6c7f13b34528',1,'sil::exterior::LocalChain::simplex_type']]], - ['simplices_5ftype_19',['simplices_type',['../classsil_1_1exterior_1_1Chain.html#ab086354195718fec59120806ba10c3c7',1,'sil::exterior::Chain::simplices_type'],['../classsil_1_1exterior_1_1LocalChain.html#a4a72129a46016fa299767b3eeca5daad',1,'sil::exterior::LocalChain::simplices_type']]], - ['size_20',['size',['../classsil_1_1exterior_1_1Chain.html#aec6e41cb77c185d9dec161ad53256616',1,'sil::exterior::Chain::size() noexcept'],['../classsil_1_1exterior_1_1Chain.html#addf633bd22f5404d0274156f672c8342',1,'sil::exterior::Chain::size() const noexcept'],['../classsil_1_1exterior_1_1Cochain.html#a8691aa090c426daa7ab474b705b2c929',1,'sil::exterior::Cochain::size() noexcept'],['../classsil_1_1exterior_1_1Cochain.html#aa66001d2bd2c3100c9111180d08e7ee6',1,'sil::exterior::Cochain::size() const noexcept'],['../classsil_1_1exterior_1_1LocalChain.html#ae075522e8817bbc962b58e140be19474',1,'sil::exterior::LocalChain::size() noexcept'],['../classsil_1_1exterior_1_1LocalChain.html#a9d6c517950c61abd47d8c0043554d95f',1,'sil::exterior::LocalChain::size() const noexcept'],['../structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#ac02ccd70e377b14327f44f0eeac1b769',1,'sil::tensor::TensorAntisymmetricIndex::size()'],['../structsil_1_1tensor_1_1TensorDiagonalIndex.html#a2825be7bf7ce597b3b8dc4b217a2a8bc',1,'sil::tensor::TensorDiagonalIndex::size()'],['../structsil_1_1tensor_1_1TensorFullIndex.html#afb8594c5f5efb91af83ecd1ff79714bf',1,'sil::tensor::TensorFullIndex::size()'],['../structsil_1_1tensor_1_1TensorIdentityIndex.html#a09d60318daf72c8c846c069cce0a4da0',1,'sil::tensor::TensorIdentityIndex::size()'],['../structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#a8b37f69f37e9ef6a57162fd37343f10c',1,'sil::tensor::TensorLeviCivitaIndex::size()'],['../structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a87f703f5265428838e21b540d9e67d3c',1,'sil::tensor::TensorLorentzianSignIndex::size()'],['../structsil_1_1tensor_1_1TensorSymmetricIndex.html#ab32da79b597a3ca1517764cca02aeeef',1,'sil::tensor::TensorSymmetricIndex::size()'],['../structsil_1_1tensor_1_1TensorNaturalIndex.html#ab21cf36a6c8e0a155b5dbde08ecdd299',1,'sil::tensor::TensorNaturalIndex::size()'],['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html#afbf91546a0328b7b32817320407bae8c',1,'sil::tensor::TensorYoungTableauIndex::size()']]], - ['star_20operator_21',['Hodge star operator',['../exterior_module.html#autotoc_md22',1,'']]], - ['subindices_5fdomain_22',['subindices_domain',['../structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#af7f5c34f925652df0a4d3acdff2b6b22',1,'sil::tensor::TensorAntisymmetricIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorDiagonalIndex.html#a90ecfb4417f67bf5f0f0db3157814820',1,'sil::tensor::TensorDiagonalIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorFullIndex.html#a346f8b1f92ee5474bf77d025194ea02a',1,'sil::tensor::TensorFullIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorIdentityIndex.html#a8fdf7d801aec5da2a8840a0fa17e13f8',1,'sil::tensor::TensorIdentityIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#a327ce133c3aada917f9343f9d03af692',1,'sil::tensor::TensorLeviCivitaIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a77289b253d4b25ed70029dd9780b117f',1,'sil::tensor::TensorLorentzianSignIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorSymmetricIndex.html#a6006fe0fa07be1c5c38b080decb9df02',1,'sil::tensor::TensorSymmetricIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorNaturalIndex.html#a2b2a55b14390a4fac958103f48972c31',1,'sil::tensor::TensorNaturalIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html#a201a4b72df99c3845cd9ada62135ef3b',1,'sil::tensor::TensorYoungTableauIndex::subindices_domain()']]], - ['subindices_5fdomain_5ft_23',['subindices_domain_t',['../structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#a73e3fcdcb6dea2cebb774ff79734ff2c',1,'sil::tensor::TensorAntisymmetricIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorDiagonalIndex.html#a9571f6176d63e05725d28a8eeb7ef008',1,'sil::tensor::TensorDiagonalIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorFullIndex.html#a8198ee99ee249cbd8b1a4d96ae634c9f',1,'sil::tensor::TensorFullIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorIdentityIndex.html#a893f966a988cdf51081d1dc65958b9bf',1,'sil::tensor::TensorIdentityIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#ad00e0d8f0fe56c6b8708e368f2fc3d85',1,'sil::tensor::TensorLeviCivitaIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a595943c8b831fb16f0df199c26de0464',1,'sil::tensor::TensorLorentzianSignIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorSymmetricIndex.html#a0ece074b746d1cc09844597f24fa2424',1,'sil::tensor::TensorSymmetricIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorNaturalIndex.html#a273d84311647b1c205fe3dd45f25c941',1,'sil::tensor::TensorNaturalIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html#ab44d3e06ac1104ccaa597b2d3031b096',1,'sil::tensor::TensorYoungTableauIndex::subindices_domain_t'],['../namespacesil_1_1tensor.html#a870c5ca50a4cc3ac7a19905a24b44522',1,'sil::tensor::subindices_domain_t']]], - ['support_20tensor_20fields_20what_20can_20similie_20do_20in_20addition_24',['Do Kokkos and DDC support tensor fields ? What can SimiLie do in addition ?',['../tensor_module.html#autotoc_md7',1,'']]], - ['swap_5fcharacter_25',['swap_character',['../namespacesil_1_1tensor.html#ac8a8e5b218f98befea31e2aefa902f1e',1,'sil::tensor']]] + ['scalarindex_0',['ScalarIndex',['../structsil_1_1tensor_1_1ScalarIndex.html',1,'sil::tensor']]], + ['second_1',['second',['../namespacesil_1_1tensor.html#a4ddd84a2d2c13dd5ccd9c2d98d210885',1,'sil::tensor']]], + ['seconds_2',['seconds',['../namespacesil_1_1tensor.html#aa4e2474eec9934102995b4e42f343a91',1,'sil::tensor']]], + ['select_5ffrom_5ftype_5fseq_3',['select_from_type_seq',['../namespacesil_1_1misc.html#ac4920dd15665754dd8afd25c431036c5',1,'sil::misc']]], + ['sil_4',['sil',['../namespacesil.html',1,'']]], + ['sil_3a_3acsr_5',['csr',['../namespacesil_1_1csr.html',1,'sil']]], + ['sil_3a_3aexterior_6',['exterior',['../namespacesil_1_1exterior.html',1,'sil']]], + ['sil_3a_3amesher_7',['mesher',['../namespacesil_1_1mesher.html',1,'sil']]], + ['sil_3a_3amisc_8',['misc',['../namespacesil_1_1misc.html',1,'sil']]], + ['sil_3a_3amisc_3a_3anotspecialization_9',['NotSpecialization',['../conceptsil_1_1misc_1_1NotSpecialization.html',1,'sil::misc']]], + ['sil_3a_3amisc_3a_3aspecialization_10',['Specialization',['../conceptsil_1_1misc_1_1Specialization.html',1,'sil::misc']]], + ['sil_3a_3atensor_11',['tensor',['../namespacesil_1_1tensor.html',1,'sil']]], + ['sil_3a_3atensor_3a_3atensorindex_12',['TensorIndex',['../conceptsil_1_1tensor_1_1TensorIndex.html',1,'sil::tensor']]], + ['sil_3a_3atensor_3a_3atensornatindex_13',['TensorNatIndex',['../conceptsil_1_1tensor_1_1TensorNatIndex.html',1,'sil::tensor']]], + ['similie_14',['SimiLie',['../Running.html',1,'Running SimiLie'],['../index.html#autotoc_md0',1,'SimiLie']]], + ['similie_20do_20in_20addition_15',['Do Kokkos and DDC support tensor fields ? What can SimiLie do in addition ?',['../tensor_module.html#autotoc_md7',1,'']]], + ['simplex_16',['Simplex',['../classsil_1_1exterior_1_1Simplex.html',1,'sil::exterior::Simplex< K, Tag >'],['../classsil_1_1exterior_1_1Simplex.html#ace82e9b337aa4fb05b6db9dc57f506a1',1,'sil::exterior::Simplex::Simplex()=default'],['../classsil_1_1exterior_1_1Simplex.html#a70279b367cdda2665d748829a2497993',1,'sil::exterior::Simplex::Simplex(Simplex const &)=default'],['../classsil_1_1exterior_1_1Simplex.html#aeef950a04712f757c47c47ee57fdbf83',1,'sil::exterior::Simplex::Simplex(Simplex &&)=default'],['../classsil_1_1exterior_1_1Simplex.html#a04b3ed266cf4ca50d2d20ef004d90f9f',1,'sil::exterior::Simplex::Simplex(discrete_element_type elem, T vect=ddc::DiscreteVector<> {}, bool negative=false) noexcept'],['../classsil_1_1exterior_1_1Simplex.html#a2ffc43301fd80eff034ec66693780244',1,'sil::exterior::Simplex::Simplex(std::integral_constant< std::size_t, K >, discrete_element_type elem, T vect=ddc::DiscreteVector<> {}, bool negative=false) noexcept'],['../namespacesil_1_1exterior.html#a19dd94e9180327a407f012154b3c2bc4',1,'sil::exterior::Simplex(ddc::DiscreteElement< Tag... >, ddc::DiscreteVector< T... >) -> Simplex< sizeof...(T), Tag... >'],['../namespacesil_1_1exterior.html#a0f1e1f80c56429b7ed438a0ab465cb37',1,'sil::exterior::Simplex(ddc::DiscreteElement< Tag... >, ddc::DiscreteVector< T... >, bool) -> Simplex< sizeof...(T), Tag... >'],['../exterior_module.html#autotoc_md16',1,'Simplex']]], + ['simplex_17',['simplex',['../classsil_1_1exterior_1_1Cosimplex.html#a507d33e58ae24c43fa0363d31a1485e0',1,'sil::exterior::Cosimplex::simplex() noexcept'],['../classsil_1_1exterior_1_1Cosimplex.html#a668cab8839019ab294c3ae4a3d917a5e',1,'sil::exterior::Cosimplex::simplex() const noexcept']]], + ['simplex_5ffor_5fdomain_5ft_18',['simplex_for_domain_t',['../namespacesil_1_1exterior.html#abaced41367e3e156dc7d8467022b3b94',1,'sil::exterior']]], + ['simplex_5ftype_19',['simplex_type',['../classsil_1_1exterior_1_1Chain.html#a9f9e812c099a979af0f4fa646732524d',1,'sil::exterior::Chain::simplex_type'],['../classsil_1_1exterior_1_1Cochain.html#a7e72ac33d849a8377e44cc89d8002d1f',1,'sil::exterior::Cochain::simplex_type'],['../classsil_1_1exterior_1_1Cosimplex.html#a81d9acdbf7e9299823ef1f4bac72be59',1,'sil::exterior::Cosimplex::simplex_type'],['../classsil_1_1exterior_1_1LocalChain.html#a27403190b80058e1a50c6c7f13b34528',1,'sil::exterior::LocalChain::simplex_type']]], + ['simplices_5ftype_20',['simplices_type',['../classsil_1_1exterior_1_1Chain.html#ab086354195718fec59120806ba10c3c7',1,'sil::exterior::Chain::simplices_type'],['../classsil_1_1exterior_1_1LocalChain.html#a4a72129a46016fa299767b3eeca5daad',1,'sil::exterior::LocalChain::simplices_type']]], + ['size_21',['size',['../classsil_1_1exterior_1_1Chain.html#aec6e41cb77c185d9dec161ad53256616',1,'sil::exterior::Chain::size() noexcept'],['../classsil_1_1exterior_1_1Chain.html#addf633bd22f5404d0274156f672c8342',1,'sil::exterior::Chain::size() const noexcept'],['../classsil_1_1exterior_1_1Cochain.html#a8691aa090c426daa7ab474b705b2c929',1,'sil::exterior::Cochain::size() noexcept'],['../classsil_1_1exterior_1_1Cochain.html#aa66001d2bd2c3100c9111180d08e7ee6',1,'sil::exterior::Cochain::size() const noexcept'],['../classsil_1_1exterior_1_1LocalChain.html#ae075522e8817bbc962b58e140be19474',1,'sil::exterior::LocalChain::size() noexcept'],['../classsil_1_1exterior_1_1LocalChain.html#a9d6c517950c61abd47d8c0043554d95f',1,'sil::exterior::LocalChain::size() const noexcept'],['../structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#ac02ccd70e377b14327f44f0eeac1b769',1,'sil::tensor::TensorAntisymmetricIndex::size()'],['../structsil_1_1tensor_1_1TensorDiagonalIndex.html#a2825be7bf7ce597b3b8dc4b217a2a8bc',1,'sil::tensor::TensorDiagonalIndex::size()'],['../structsil_1_1tensor_1_1TensorFullIndex.html#afb8594c5f5efb91af83ecd1ff79714bf',1,'sil::tensor::TensorFullIndex::size()'],['../structsil_1_1tensor_1_1TensorIdentityIndex.html#a09d60318daf72c8c846c069cce0a4da0',1,'sil::tensor::TensorIdentityIndex::size()'],['../structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#a8b37f69f37e9ef6a57162fd37343f10c',1,'sil::tensor::TensorLeviCivitaIndex::size()'],['../structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a87f703f5265428838e21b540d9e67d3c',1,'sil::tensor::TensorLorentzianSignIndex::size()'],['../structsil_1_1tensor_1_1TensorSymmetricIndex.html#ab32da79b597a3ca1517764cca02aeeef',1,'sil::tensor::TensorSymmetricIndex::size()'],['../structsil_1_1tensor_1_1TensorNaturalIndex.html#ab21cf36a6c8e0a155b5dbde08ecdd299',1,'sil::tensor::TensorNaturalIndex::size()'],['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html#afbf91546a0328b7b32817320407bae8c',1,'sil::tensor::TensorYoungTableauIndex::size()']]], + ['star_20operator_22',['Hodge star operator',['../exterior_module.html#autotoc_md22',1,'']]], + ['subindices_5fdomain_23',['subindices_domain',['../structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#af7f5c34f925652df0a4d3acdff2b6b22',1,'sil::tensor::TensorAntisymmetricIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorDiagonalIndex.html#a90ecfb4417f67bf5f0f0db3157814820',1,'sil::tensor::TensorDiagonalIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorFullIndex.html#a346f8b1f92ee5474bf77d025194ea02a',1,'sil::tensor::TensorFullIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorIdentityIndex.html#a8fdf7d801aec5da2a8840a0fa17e13f8',1,'sil::tensor::TensorIdentityIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#a327ce133c3aada917f9343f9d03af692',1,'sil::tensor::TensorLeviCivitaIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a77289b253d4b25ed70029dd9780b117f',1,'sil::tensor::TensorLorentzianSignIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorSymmetricIndex.html#a6006fe0fa07be1c5c38b080decb9df02',1,'sil::tensor::TensorSymmetricIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorNaturalIndex.html#a2b2a55b14390a4fac958103f48972c31',1,'sil::tensor::TensorNaturalIndex::subindices_domain()'],['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html#a201a4b72df99c3845cd9ada62135ef3b',1,'sil::tensor::TensorYoungTableauIndex::subindices_domain()']]], + ['subindices_5fdomain_5ft_24',['subindices_domain_t',['../structsil_1_1tensor_1_1TensorAntisymmetricIndex.html#a73e3fcdcb6dea2cebb774ff79734ff2c',1,'sil::tensor::TensorAntisymmetricIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorDiagonalIndex.html#a9571f6176d63e05725d28a8eeb7ef008',1,'sil::tensor::TensorDiagonalIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorFullIndex.html#a8198ee99ee249cbd8b1a4d96ae634c9f',1,'sil::tensor::TensorFullIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorIdentityIndex.html#a893f966a988cdf51081d1dc65958b9bf',1,'sil::tensor::TensorIdentityIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorLeviCivitaIndex.html#ad00e0d8f0fe56c6b8708e368f2fc3d85',1,'sil::tensor::TensorLeviCivitaIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorLorentzianSignIndex.html#a595943c8b831fb16f0df199c26de0464',1,'sil::tensor::TensorLorentzianSignIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorSymmetricIndex.html#a0ece074b746d1cc09844597f24fa2424',1,'sil::tensor::TensorSymmetricIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorNaturalIndex.html#a273d84311647b1c205fe3dd45f25c941',1,'sil::tensor::TensorNaturalIndex::subindices_domain_t'],['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html#ab44d3e06ac1104ccaa597b2d3031b096',1,'sil::tensor::TensorYoungTableauIndex::subindices_domain_t'],['../namespacesil_1_1tensor.html#a870c5ca50a4cc3ac7a19905a24b44522',1,'sil::tensor::subindices_domain_t']]], + ['support_20tensor_20fields_20what_20can_20similie_20do_20in_20addition_25',['Do Kokkos and DDC support tensor fields ? What can SimiLie do in addition ?',['../tensor_module.html#autotoc_md7',1,'']]], + ['swap_5fcharacter_26',['swap_character',['../namespacesil_1_1tensor.html#ac8a8e5b218f98befea31e2aefa902f1e',1,'sil::tensor']]] ]; diff --git a/search/all_11.js b/search/all_11.js index 048d6397..bfc12ed7 100644 --- a/search/all_11.js +++ b/search/all_11.js @@ -24,11 +24,12 @@ var searchData= ['tensornaturalindex_21',['TensorNaturalIndex',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], ['tensornaturalindex_3c_20cdim_2e_2e_2e_20_3e_22',['TensorNaturalIndex< CDim... >',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], ['tensornaturalindex_3c_20dummy_3c_20id_20_3e_2e_2e_2e_20_3e_23',['TensorNaturalIndex< Dummy< Id >... >',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], - ['tensors_20are_20importants_20for_20physics_24',['Why tensors are importants for physics ?',['../tensor_module.html#autotoc_md6',1,'']]], - ['tensorsymmetricindex_25',['TensorSymmetricIndex',['../structsil_1_1tensor_1_1TensorSymmetricIndex.html',1,'sil::tensor']]], - ['tensoryoungtableauindex_26',['TensorYoungTableauIndex',['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html',1,'sil::tensor']]], - ['to_5ftensor_5fantisymmetric_5findex_5ft_27',['to_tensor_antisymmetric_index_t',['../namespacesil_1_1tensor.html#a07b5efb792fc5564b4644c8f1d1bbeec',1,'sil::tensor']]], - ['to_5ftype_5fseq_5ft_28',['to_type_seq_t',['../namespacesil_1_1misc.html#a0f31a0b3b9517ab930673de3be192d65',1,'sil::misc']]], - ['type_5fseq_5fdimensions_29',['type_seq_dimensions',['../structsil_1_1tensor_1_1TensorNaturalIndex.html#aa699cc4c175565100a353a4299b4491c',1,'sil::tensor::TensorNaturalIndex']]], - ['type_5fseq_5fintersect_5ft_30',['type_seq_intersect_t',['../namespacesil_1_1misc.html#a7a2bf2edd109e79ed82bc877725c4840',1,'sil::misc']]] + ['tensornaturalindex_3c_3e_24',['TensorNaturalIndex<>',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], + ['tensors_20are_20importants_20for_20physics_25',['Why tensors are importants for physics ?',['../tensor_module.html#autotoc_md6',1,'']]], + ['tensorsymmetricindex_26',['TensorSymmetricIndex',['../structsil_1_1tensor_1_1TensorSymmetricIndex.html',1,'sil::tensor']]], + ['tensoryoungtableauindex_27',['TensorYoungTableauIndex',['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html',1,'sil::tensor']]], + ['to_5ftensor_5fantisymmetric_5findex_5ft_28',['to_tensor_antisymmetric_index_t',['../namespacesil_1_1tensor.html#a07b5efb792fc5564b4644c8f1d1bbeec',1,'sil::tensor']]], + ['to_5ftype_5fseq_5ft_29',['to_type_seq_t',['../namespacesil_1_1misc.html#a0f31a0b3b9517ab930673de3be192d65',1,'sil::misc']]], + ['type_5fseq_5fdimensions_30',['type_seq_dimensions',['../structsil_1_1tensor_1_1TensorNaturalIndex.html#aa699cc4c175565100a353a4299b4491c',1,'sil::tensor::TensorNaturalIndex']]], + ['type_5fseq_5fintersect_5ft_31',['type_seq_intersect_t',['../namespacesil_1_1misc.html#a7a2bf2edd109e79ed82bc877725c4840',1,'sil::misc']]] ]; diff --git a/search/all_7.js b/search/all_7.js index 60aadb74..2f022577 100644 --- a/search/all_7.js +++ b/search/all_7.js @@ -1,5 +1,5 @@ var searchData= [ ['hodge_20star_20operator_0',['Hodge star operator',['../exterior_module.html#autotoc_md22',1,'']]], - ['hodge_5fstar_5fdomain_5ft_1',['hodge_star_domain_t',['../namespacesil_1_1exterior.html#afd93aa912be271019b5425e00391049e',1,'sil::exterior']]] + ['hodge_5fstar_5fdomain_5ft_1',['hodge_star_domain_t',['../namespacesil_1_1exterior.html#a4efa14fa3fbc50aef998647604aa1589',1,'sil::exterior']]] ]; diff --git a/search/classes_6.js b/search/classes_6.js index 441b910e..22d7f0ae 100644 --- a/search/classes_6.js +++ b/search/classes_6.js @@ -1,4 +1,5 @@ var searchData= [ - ['simplex_0',['Simplex',['../classsil_1_1exterior_1_1Simplex.html',1,'sil::exterior']]] + ['scalarindex_0',['ScalarIndex',['../structsil_1_1tensor_1_1ScalarIndex.html',1,'sil::tensor']]], + ['simplex_1',['Simplex',['../classsil_1_1exterior_1_1Simplex.html',1,'sil::exterior']]] ]; diff --git a/search/classes_7.js b/search/classes_7.js index b5dcd34d..1ebd075f 100644 --- a/search/classes_7.js +++ b/search/classes_7.js @@ -13,6 +13,7 @@ var searchData= ['tensornaturalindex_10',['TensorNaturalIndex',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], ['tensornaturalindex_3c_20cdim_2e_2e_2e_20_3e_11',['TensorNaturalIndex< CDim... >',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], ['tensornaturalindex_3c_20dummy_3c_20id_20_3e_2e_2e_2e_20_3e_12',['TensorNaturalIndex< Dummy< Id >... >',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], - ['tensorsymmetricindex_13',['TensorSymmetricIndex',['../structsil_1_1tensor_1_1TensorSymmetricIndex.html',1,'sil::tensor']]], - ['tensoryoungtableauindex_14',['TensorYoungTableauIndex',['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html',1,'sil::tensor']]] + ['tensornaturalindex_3c_3e_13',['TensorNaturalIndex<>',['../structsil_1_1tensor_1_1TensorNaturalIndex.html',1,'sil::tensor']]], + ['tensorsymmetricindex_14',['TensorSymmetricIndex',['../structsil_1_1tensor_1_1TensorSymmetricIndex.html',1,'sil::tensor']]], + ['tensoryoungtableauindex_15',['TensorYoungTableauIndex',['../structsil_1_1tensor_1_1TensorYoungTableauIndex.html',1,'sil::tensor']]] ]; diff --git a/search/typedefs_6.js b/search/typedefs_6.js index b1499965..5eccd323 100644 --- a/search/typedefs_6.js +++ b/search/typedefs_6.js @@ -1,4 +1,4 @@ var searchData= [ - ['hodge_5fstar_5fdomain_5ft_0',['hodge_star_domain_t',['../namespacesil_1_1exterior.html#afd93aa912be271019b5425e00391049e',1,'sil::exterior']]] + ['hodge_5fstar_5fdomain_5ft_0',['hodge_star_domain_t',['../namespacesil_1_1exterior.html#a4efa14fa3fbc50aef998647604aa1589',1,'sil::exterior']]] ]; diff --git a/structsil_1_1tensor_1_1ScalarIndex-members.html b/structsil_1_1tensor_1_1ScalarIndex-members.html new file mode 100644 index 00000000..1ad6990a --- /dev/null +++ b/structsil_1_1tensor_1_1ScalarIndex-members.html @@ -0,0 +1,164 @@ + + + + + + + + + +SimiLie: Member List + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + +
      +
      SimiLie +
      +
      +
      + + + + + + + + +
      +
      + +
      +
      +
      + +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      +
      sil::tensor::ScalarIndex Member List
      +
      + +
      + + + + + + diff --git a/structsil_1_1tensor_1_1ScalarIndex.html b/structsil_1_1tensor_1_1ScalarIndex.html new file mode 100644 index 00000000..4c1215d1 --- /dev/null +++ b/structsil_1_1tensor_1_1ScalarIndex.html @@ -0,0 +1,215 @@ + + + + + + + + + +SimiLie: sil::tensor::ScalarIndex Struct Reference + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + +
      +
      SimiLie +
      +
      +
      + + + + + + + + +
      +
      + +
      +
      +
      + +
      + +
      +
      + + +
      +
      +
      +
      +
      +
      Loading...
      +
      Searching...
      +
      No Matches
      +
      +
      +
      +
      + +
      + +
      sil::tensor::ScalarIndex Struct Reference
      +
      +
      + +

      #include <tensor_impl.hpp>

      +
      +Inheritance diagram for sil::tensor::ScalarIndex:
      +
      +
      Inheritance graph
      + + + + + +
      +
      +Collaboration diagram for sil::tensor::ScalarIndex:
      +
      +
      Collaboration graph
      + + + + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

      +Additional Inherited Members

      - Public Types inherited from sil::tensor::TensorNaturalIndex<>
      using type_seq_dimensions
       
      using subindices_domain_t
       
      - Static Public Member Functions inherited from sil::tensor::TensorNaturalIndex<>
      static KOKKOS_FUNCTION constexpr subindices_domain_t subindices_domain ()
       
      static KOKKOS_FUNCTION constexpr std::size_t rank ()
       
      static KOKKOS_FUNCTION constexpr std::size_t size ()
       
      static KOKKOS_FUNCTION constexpr std::size_t mem_size ()
       
      static KOKKOS_FUNCTION constexpr std::size_t access_size ()
       
      static KOKKOS_FUNCTION constexpr std::size_t mem_id ()
       
      static KOKKOS_FUNCTION constexpr std::size_t mem_id (std::size_t const natural_id)
       
      static KOKKOS_FUNCTION constexpr std::size_t access_id (std::size_t const natural_id)
       
      static KOKKOS_FUNCTION constexpr std::size_t access_id_to_mem_id (std::size_t access_id)
       
      static KOKKOS_FUNCTION constexpr Tensor::element_type process_access (const FunctorType &access, Tensor tensor, Elem elem)
       
      static KOKKOS_FUNCTION constexpr std::array< std::size_t, rank()> mem_id_to_canonical_natural_ids (std::size_t mem_id)
       
      - Static Public Attributes inherited from sil::tensor::TensorNaturalIndex<>
      static constexpr bool is_tensor_index
       
      static constexpr bool is_tensor_natural_index
       
      static constexpr bool is_explicitely_stored_tensor
       
      +

      Detailed Description

      +
      +

      Definition at line 114 of file tensor_impl.hpp.

      +

      The documentation for this struct was generated from the following file: +
      +
      + + + + + + diff --git a/structsil_1_1tensor_1_1ScalarIndex__coll__graph.map b/structsil_1_1tensor_1_1ScalarIndex__coll__graph.map new file mode 100644 index 00000000..01ab36fb --- /dev/null +++ b/structsil_1_1tensor_1_1ScalarIndex__coll__graph.map @@ -0,0 +1,5 @@ + + + + + diff --git a/structsil_1_1tensor_1_1ScalarIndex__coll__graph.md5 b/structsil_1_1tensor_1_1ScalarIndex__coll__graph.md5 new file mode 100644 index 00000000..ce5bb830 --- /dev/null +++ b/structsil_1_1tensor_1_1ScalarIndex__coll__graph.md5 @@ -0,0 +1 @@ +44997e25c7310748c141eeca89c7f7da \ No newline at end of file diff --git a/structsil_1_1tensor_1_1ScalarIndex__coll__graph.png b/structsil_1_1tensor_1_1ScalarIndex__coll__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3af0cfe4f0f2bd1ee77b4dd0d543a8cf08cf5b GIT binary patch literal 18943 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 + + + + diff --git a/structsil_1_1tensor_1_1ScalarIndex__inherit__graph.md5 b/structsil_1_1tensor_1_1ScalarIndex__inherit__graph.md5 new file mode 100644 index 00000000..ce5bb830 --- /dev/null +++ b/structsil_1_1tensor_1_1ScalarIndex__inherit__graph.md5 @@ -0,0 +1 @@ +44997e25c7310748c141eeca89c7f7da \ No newline at end of file diff --git a/structsil_1_1tensor_1_1ScalarIndex__inherit__graph.png b/structsil_1_1tensor_1_1ScalarIndex__inherit__graph.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3af0cfe4f0f2bd1ee77b4dd0d543a8cf08cf5b GIT binary patch literal 18943 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 -

      Definition at line 74 of file levi_civita_tensor.hpp.

      +

      Definition at line 78 of file levi_civita_tensor.hpp.

      @@ -472,7 +472,7 @@

      -

      Definition at line 81 of file levi_civita_tensor.hpp.

      +

      Definition at line 85 of file levi_civita_tensor.hpp.

      @@ -501,7 +501,7 @@

      -

      Definition at line 96 of file levi_civita_tensor.hpp.

      +

      Definition at line 100 of file levi_civita_tensor.hpp.

      diff --git a/tensor__impl_8hpp_source.html b/tensor__impl_8hpp_source.html index 2b2aaaef..80c52212 100644 --- a/tensor__impl_8hpp_source.html +++ b/tensor__impl_8hpp_source.html @@ -268,1340 +268,1351 @@
      111} && DDim::is_tensor_natural_index;
      112
      -
      113// natural_domain_t is obtained using concept and specialization
      -
      114namespace detail {
      -
      115
      -
      116template <class Index>
      -
      117struct NaturalDomainType;
      -
      118
      -
      119template <class Index>
      - -
      121struct NaturalDomainType<Index>
      -
      122{
      -
      123 using type = typename Index::subindices_domain_t;
      -
      124};
      -
      125
      -
      126template <TensorNatIndex Index>
      -
      127struct NaturalDomainType<Index>
      -
      128{
      -
      129 using type = ddc::DiscreteDomain<Index>;
      -
      130};
      -
      131
      -
      132} // namespace detail
      -
      133
      -
      134template <TensorIndex Index>
      -
      135using natural_domain_t = typename detail::NaturalDomainType<Index>::type;
      +
      113// ScalarIndex, a generic rank-0 index
      +
      + +
      115{
      +
      116};
      +
      +
      117
      +
      118// natural_domain_t is obtained using concept and specialization
      +
      119namespace detail {
      +
      120
      +
      121template <class Index>
      +
      122struct NaturalDomainType;
      +
      123
      +
      124template <class Index>
      + +
      126struct NaturalDomainType<Index>
      +
      127{
      +
      128 using type = typename Index::subindices_domain_t;
      +
      129};
      +
      130
      +
      131template <TensorNatIndex Index>
      +
      132struct NaturalDomainType<Index>
      +
      133{
      +
      134 using type = ddc::DiscreteDomain<Index>;
      +
      135};
      136
      -
      137// Helpers to build the access_id() function which computes the ids of subindices of an index. This cumbersome logic is necessary because subindices do not necessarily have the same rank.
      -
      138namespace detail {
      -
      139// For Tmunu and index=nu, returns 1
      -
      140template <class Index, class...>
      -
      141struct NbDimsBeforeIndex;
      -
      142
      -
      143template <class Index, class IndexHead, class... IndexTail>
      -
      144struct NbDimsBeforeIndex<Index, ddc::detail::TypeSeq<IndexHead, IndexTail...>>
      -
      145{
      -
      146 static constexpr std::size_t run(std::size_t nb_dims_before_index)
      -
      147 {
      -
      148 if constexpr (std::is_same_v<IndexHead, Index>) {
      -
      149 return nb_dims_before_index;
      -
      150 } else {
      -
      151 return NbDimsBeforeIndex<Index, ddc::detail::TypeSeq<IndexTail...>>::run(
      -
      152 nb_dims_before_index + IndexHead::rank());
      -
      153 }
      -
      154 }
      -
      155};
      -
      156
      -
      157// Offset and index sequence
      -
      158template <std::size_t Offset, class IndexSeq>
      -
      159struct OffsetIndexSeq;
      -
      160
      -
      161template <std::size_t Offset, std::size_t... Is>
      -
      162struct OffsetIndexSeq<Offset, std::integer_sequence<std::size_t, Is...>>
      -
      163{
      -
      164 using type = std::integer_sequence<std::size_t, Offset + Is...>;
      -
      165};
      -
      166
      -
      167template <std::size_t Offset, class IndexSeq>
      -
      168using offset_index_seq_t = OffsetIndexSeq<Offset, IndexSeq>::type;
      -
      169
      -
      170// Returns dimensions from integers (ie. for Tmunu, <1> gives nu)
      -
      171template <class CDimTypeSeq, class IndexSeq>
      -
      172struct TypeSeqDimsAtInts;
      -
      173
      -
      174template <class CDimTypeSeq, std::size_t... Is>
      -
      175struct TypeSeqDimsAtInts<CDimTypeSeq, std::integer_sequence<std::size_t, Is...>>
      -
      176{
      -
      177 using type = ddc::detail::TypeSeq<ddc::type_seq_element_t<Is, CDimTypeSeq>...>;
      -
      178};
      -
      179
      -
      180template <class CDimTypeSeq, class IndexSeq>
      -
      181using type_seq_dims_at_ints_t = TypeSeqDimsAtInts<CDimTypeSeq, IndexSeq>::type;
      -
      182
      -
      183// Returns Index::access_id but from a type seq (in place of a variadic template CDim...)
      -
      184template <class Index, class SubindicesDomain, class TypeSeqDims>
      -
      185struct IdFromTypeSeqDims;
      -
      186
      -
      187template <class Index, class... Subindex, class... CDim>
      -
      188struct IdFromTypeSeqDims<Index, ddc::DiscreteDomain<Subindex...>, ddc::detail::TypeSeq<CDim...>>
      -
      189{
      -
      190 static constexpr std::size_t run()
      -
      191 {
      -
      192 static_assert(sizeof...(Subindex) == sizeof...(CDim));
      -
      193 if constexpr (TensorNatIndex<Index>) {
      -
      194 return Index::access_id(
      -
      195 ddc::type_seq_rank_v<CDim, typename Index::type_seq_dimensions>...);
      -
      196 } else {
      -
      197 return Index::access_id(std::array<
      -
      198 std::size_t,
      -
      199 sizeof...(Subindex)> {ddc::type_seq_rank_v<
      -
      200 typename ddc::type_seq_element_t<
      -
      201 ddc::type_seq_rank_v<Subindex, ddc::detail::TypeSeq<Subindex...>>,
      -
      202 ddc::detail::TypeSeq<CDim...>>,
      -
      203 typename Subindex::type_seq_dimensions>...});
      -
      204 }
      -
      205 }
      -
      206};
      -
      207
      -
      208// Returns Index::access_id for the subindex Index of the IndicesTypeSeq
      -
      209template <class Index, class IndicesTypeSeq, class... CDim>
      -
      210static constexpr std::size_t access_id()
      -
      211{
      -
      212 if constexpr (TensorNatIndex<Index>) {
      -
      213 return IdFromTypeSeqDims<
      -
      214 Index,
      -
      215 ddc::DiscreteDomain<Index>,
      -
      216 type_seq_dims_at_ints_t<
      -
      217 ddc::detail::TypeSeq<CDim...>,
      -
      218 offset_index_seq_t<
      -
      219 NbDimsBeforeIndex<Index, IndicesTypeSeq>::run(0),
      -
      220 std::make_integer_sequence<std::size_t, Index::rank()>>>>::run();
      -
      221 } else {
      -
      222 return IdFromTypeSeqDims<
      -
      223 Index,
      -
      224 typename Index::subindices_domain_t,
      -
      225 type_seq_dims_at_ints_t<
      -
      226 ddc::detail::TypeSeq<CDim...>,
      -
      227 offset_index_seq_t<
      -
      228 NbDimsBeforeIndex<Index, IndicesTypeSeq>::run(0),
      -
      229 std::make_integer_sequence<std::size_t, Index::rank()>>>>::run();
      -
      230 }
      -
      231}
      -
      232
      -
      233template <class Index, class SubindicesDomain>
      -
      234struct IdFromElem;
      -
      235
      -
      236template <class Index, class... Subindex>
      -
      237struct IdFromElem<Index, ddc::DiscreteDomain<Subindex...>>
      -
      238{
      -
      239 template <class Elem>
      -
      240 static constexpr std::size_t run(Elem natural_elem)
      -
      241 {
      -
      242 if constexpr (TensorNatIndex<Index>) {
      -
      243 return Index::access_id(natural_elem.template uid<Index>());
      -
      244 } else {
      -
      245 return Index::access_id(std::array<std::size_t, sizeof...(Subindex)> {
      -
      246 natural_elem.template uid<Subindex>()...});
      -
      247 }
      -
      248 }
      -
      249};
      -
      250
      -
      251template <class Index, class IndicesTypeSeq, class... NaturalIndex>
      -
      252static constexpr std::size_t access_id(ddc::DiscreteElement<NaturalIndex...> natural_elem)
      -
      253{
      -
      254 if constexpr (TensorNatIndex<Index>) {
      -
      255 return IdFromElem<Index, ddc::DiscreteDomain<Index>>::run(natural_elem);
      -
      256 } else {
      -
      257 return IdFromElem<Index, typename Index::subindices_domain_t>::run(natural_elem);
      -
      258 }
      -
      259}
      -
      260
      -
      261} // namespace detail
      -
      262
      -
      263// TensorAccessor class, allows to build a domain which represents the tensor and access elements.
      -
      264template <TensorIndex... Index>
      -
      - -
      266{
      -
      267public:
      -
      268 explicit constexpr TensorAccessor();
      -
      269
      -
      270 using discrete_domain_type = ddc::DiscreteDomain<Index...>;
      -
      271
      -
      272 using discrete_element_type = ddc::DiscreteElement<Index...>;
      -
      273
      -
      274 using natural_domain_t = ddc::cartesian_prod_t<std::conditional_t< // TODO natural_domain_type
      - -
      276 ddc::DiscreteDomain<Index>,
      -
      277 typename Index::subindices_domain_t>...>;
      +
      137} // namespace detail
      +
      138
      +
      139template <TensorIndex Index>
      +
      140using natural_domain_t = typename detail::NaturalDomainType<Index>::type;
      +
      141
      +
      142// Helpers to build the access_id() function which computes the ids of subindices of an index. This cumbersome logic is necessary because subindices do not necessarily have the same rank.
      +
      143namespace detail {
      +
      144// For Tmunu and index=nu, returns 1
      +
      145template <class Index, class...>
      +
      146struct NbDimsBeforeIndex;
      +
      147
      +
      148template <class Index, class IndexHead, class... IndexTail>
      +
      149struct NbDimsBeforeIndex<Index, ddc::detail::TypeSeq<IndexHead, IndexTail...>>
      +
      150{
      +
      151 static constexpr std::size_t run(std::size_t nb_dims_before_index)
      +
      152 {
      +
      153 if constexpr (std::is_same_v<IndexHead, Index>) {
      +
      154 return nb_dims_before_index;
      +
      155 } else {
      +
      156 return NbDimsBeforeIndex<Index, ddc::detail::TypeSeq<IndexTail...>>::run(
      +
      157 nb_dims_before_index + IndexHead::rank());
      +
      158 }
      +
      159 }
      +
      160};
      +
      161
      +
      162// Offset and index sequence
      +
      163template <std::size_t Offset, class IndexSeq>
      +
      164struct OffsetIndexSeq;
      +
      165
      +
      166template <std::size_t Offset, std::size_t... Is>
      +
      167struct OffsetIndexSeq<Offset, std::integer_sequence<std::size_t, Is...>>
      +
      168{
      +
      169 using type = std::integer_sequence<std::size_t, Offset + Is...>;
      +
      170};
      +
      171
      +
      172template <std::size_t Offset, class IndexSeq>
      +
      173using offset_index_seq_t = OffsetIndexSeq<Offset, IndexSeq>::type;
      +
      174
      +
      175// Returns dimensions from integers (ie. for Tmunu, <1> gives nu)
      +
      176template <class CDimTypeSeq, class IndexSeq>
      +
      177struct TypeSeqDimsAtInts;
      +
      178
      +
      179template <class CDimTypeSeq, std::size_t... Is>
      +
      180struct TypeSeqDimsAtInts<CDimTypeSeq, std::integer_sequence<std::size_t, Is...>>
      +
      181{
      +
      182 using type = ddc::detail::TypeSeq<ddc::type_seq_element_t<Is, CDimTypeSeq>...>;
      +
      183};
      +
      184
      +
      185template <class CDimTypeSeq, class IndexSeq>
      +
      186using type_seq_dims_at_ints_t = TypeSeqDimsAtInts<CDimTypeSeq, IndexSeq>::type;
      +
      187
      +
      188// Returns Index::access_id but from a type seq (in place of a variadic template CDim...)
      +
      189template <class Index, class SubindicesDomain, class TypeSeqDims>
      +
      190struct IdFromTypeSeqDims;
      +
      191
      +
      192template <class Index, class... Subindex, class... CDim>
      +
      193struct IdFromTypeSeqDims<Index, ddc::DiscreteDomain<Subindex...>, ddc::detail::TypeSeq<CDim...>>
      +
      194{
      +
      195 static constexpr std::size_t run()
      +
      196 {
      +
      197 static_assert(sizeof...(Subindex) == sizeof...(CDim));
      +
      198 if constexpr (TensorNatIndex<Index>) {
      +
      199 return Index::access_id(
      +
      200 ddc::type_seq_rank_v<CDim, typename Index::type_seq_dimensions>...);
      +
      201 } else {
      +
      202 return Index::access_id(std::array<
      +
      203 std::size_t,
      +
      204 sizeof...(Subindex)> {ddc::type_seq_rank_v<
      +
      205 typename ddc::type_seq_element_t<
      +
      206 ddc::type_seq_rank_v<Subindex, ddc::detail::TypeSeq<Subindex...>>,
      +
      207 ddc::detail::TypeSeq<CDim...>>,
      +
      208 typename Subindex::type_seq_dimensions>...});
      +
      209 }
      +
      210 }
      +
      211};
      +
      212
      +
      213// Returns Index::access_id for the subindex Index of the IndicesTypeSeq
      +
      214template <class Index, class IndicesTypeSeq, class... CDim>
      +
      215static constexpr std::size_t access_id()
      +
      216{
      +
      217 if constexpr (TensorNatIndex<Index>) {
      +
      218 return IdFromTypeSeqDims<
      +
      219 Index,
      +
      220 ddc::DiscreteDomain<Index>,
      +
      221 type_seq_dims_at_ints_t<
      +
      222 ddc::detail::TypeSeq<CDim...>,
      +
      223 offset_index_seq_t<
      +
      224 NbDimsBeforeIndex<Index, IndicesTypeSeq>::run(0),
      +
      225 std::make_integer_sequence<std::size_t, Index::rank()>>>>::run();
      +
      226 } else {
      +
      227 return IdFromTypeSeqDims<
      +
      228 Index,
      +
      229 typename Index::subindices_domain_t,
      +
      230 type_seq_dims_at_ints_t<
      +
      231 ddc::detail::TypeSeq<CDim...>,
      +
      232 offset_index_seq_t<
      +
      233 NbDimsBeforeIndex<Index, IndicesTypeSeq>::run(0),
      +
      234 std::make_integer_sequence<std::size_t, Index::rank()>>>>::run();
      +
      235 }
      +
      236}
      +
      237
      +
      238template <class Index, class SubindicesDomain>
      +
      239struct IdFromElem;
      +
      240
      +
      241template <class Index, class... Subindex>
      +
      242struct IdFromElem<Index, ddc::DiscreteDomain<Subindex...>>
      +
      243{
      +
      244 template <class Elem>
      +
      245 static constexpr std::size_t run(Elem natural_elem)
      +
      246 {
      +
      247 if constexpr (TensorNatIndex<Index>) {
      +
      248 return Index::access_id(natural_elem.template uid<Index>());
      +
      249 } else {
      +
      250 return Index::access_id(std::array<std::size_t, sizeof...(Subindex)> {
      +
      251 natural_elem.template uid<Subindex>()...});
      +
      252 }
      +
      253 }
      +
      254};
      +
      255
      +
      256template <class Index, class IndicesTypeSeq, class... NaturalIndex>
      +
      257static constexpr std::size_t access_id(ddc::DiscreteElement<NaturalIndex...> natural_elem)
      +
      258{
      +
      259 if constexpr (TensorNatIndex<Index>) {
      +
      260 return IdFromElem<Index, ddc::DiscreteDomain<Index>>::run(natural_elem);
      +
      261 } else {
      +
      262 return IdFromElem<Index, typename Index::subindices_domain_t>::run(natural_elem);
      +
      263 }
      +
      264}
      +
      265
      +
      266} // namespace detail
      +
      267
      +
      268// TensorAccessor class, allows to build a domain which represents the tensor and access elements.
      +
      269template <TensorIndex... Index>
      +
      + +
      271{
      +
      272public:
      +
      273 explicit constexpr TensorAccessor();
      +
      274
      +
      275 using discrete_domain_type = ddc::DiscreteDomain<Index...>;
      +
      276
      +
      277 using discrete_element_type = ddc::DiscreteElement<Index...>;
      278
      -
      279 static constexpr natural_domain_t natural_domain();
      -
      280
      -
      281 static constexpr discrete_domain_type mem_domain();
      -
      282
      -
      283 static constexpr discrete_domain_type access_domain();
      -
      284
      -
      285 template <class... CDim>
      -
      286 static constexpr discrete_element_type access_element();
      +
      279 using natural_domain_t = ddc::cartesian_prod_t<std::conditional_t< // TODO natural_domain_type
      + +
      281 ddc::DiscreteDomain<Index>,
      +
      282 typename Index::subindices_domain_t>...>;
      +
      283
      +
      284 static constexpr natural_domain_t natural_domain();
      +
      285
      +
      286 static constexpr discrete_domain_type mem_domain();
      287
      -
      288 template <class... NaturalIndex>
      -
      289 static constexpr discrete_element_type access_element(
      -
      290 ddc::DiscreteElement<NaturalIndex...> natural_elem);
      -
      291
      -
      292 template <class... MemIndex>
      -
      293 static constexpr natural_domain_t::discrete_element_type canonical_natural_element(
      -
      294 ddc::DiscreteElement<MemIndex...> mem_elem);
      -
      295};
      -
      +
      288 static constexpr discrete_domain_type access_domain();
      +
      289
      +
      290 template <class... CDim>
      +
      291 static constexpr discrete_element_type access_element();
      +
      292
      +
      293 template <class... NaturalIndex>
      +
      294 static constexpr discrete_element_type access_element(
      +
      295 ddc::DiscreteElement<NaturalIndex...> natural_elem);
      296
      -
      297namespace detail {
      -
      298
      -
      299template <class Seq>
      -
      300struct TensorAccessorForTypeSeq;
      +
      297 template <class... MemIndex>
      +
      298 static constexpr natural_domain_t::discrete_element_type canonical_natural_element(
      +
      299 ddc::DiscreteElement<MemIndex...> mem_elem);
      +
      300};
      +
      301
      -
      302template <TensorIndex... Index>
      -
      303struct TensorAccessorForTypeSeq<ddc::detail::TypeSeq<Index...>>
      -
      304{
      -
      305 using type = TensorAccessor<Index...>;
      -
      306};
      -
      307
      -
      308template <class Dom>
      -
      309struct TensorAccessorForDomain;
      -
      310
      -
      311template <class... DDim>
      -
      312struct TensorAccessorForDomain<ddc::DiscreteDomain<DDim...>>
      -
      313{
      -
      314 using type = typename TensorAccessorForTypeSeq<
      -
      315 ddc::to_type_seq_t<ddc::cartesian_prod_t<std::conditional_t<
      -
      316 TensorIndex<DDim>,
      -
      317 ddc::DiscreteDomain<DDim>,
      -
      318 ddc::DiscreteDomain<>>...>>>::type;
      -
      319};
      -
      320
      -
      321} // namespace detail
      -
      322
      -
      323template <misc::Specialization<ddc::DiscreteDomain> Dom>
      -
      324using tensor_accessor_for_domain_t = detail::TensorAccessorForDomain<Dom>::type;
      +
      302namespace detail {
      +
      303
      +
      304template <class Seq>
      +
      305struct TensorAccessorForTypeSeq;
      +
      306
      +
      307template <TensorIndex... Index>
      +
      308struct TensorAccessorForTypeSeq<ddc::detail::TypeSeq<Index...>>
      +
      309{
      +
      310 using type = TensorAccessor<Index...>;
      +
      311};
      +
      312
      +
      313template <class Dom>
      +
      314struct TensorAccessorForDomain;
      +
      315
      +
      316template <class... DDim>
      +
      317struct TensorAccessorForDomain<ddc::DiscreteDomain<DDim...>>
      +
      318{
      +
      319 using type = typename TensorAccessorForTypeSeq<
      +
      320 ddc::to_type_seq_t<ddc::cartesian_prod_t<std::conditional_t<
      +
      321 TensorIndex<DDim>,
      +
      322 ddc::DiscreteDomain<DDim>,
      +
      323 ddc::DiscreteDomain<>>...>>>::type;
      +
      324};
      325
      -
      326template <TensorIndex... Index>
      -
      - -
      328{
      -
      329}
      -
      +
      326} // namespace detail
      +
      327
      +
      328template <misc::Specialization<ddc::DiscreteDomain> Dom>
      +
      329using tensor_accessor_for_domain_t = detail::TensorAccessorForDomain<Dom>::type;
      330
      -
      331namespace detail {
      -
      332template <class Index>
      -
      333constexpr auto natural_domain()
      -
      334{
      -
      335 if constexpr (TensorNatIndex<Index>) {
      -
      336 return typename ddc::DiscreteDomain<
      -
      337 Index>(ddc::DiscreteElement<Index>(0), ddc::DiscreteVector<Index>(Index::size()));
      -
      338 } else {
      -
      339 return Index::subindices_domain();
      -
      340 }
      -
      341}
      -
      342} // namespace detail
      -
      343
      -
      344template <TensorIndex... Index>
      -
      - -
      346{
      -
      347 return natural_domain_t(detail::natural_domain<Index>()...);
      -
      348}
      +
      331template <TensorIndex... Index>
      + -
      349
      -
      350template <TensorIndex... Index>
      -
      -
      351constexpr TensorAccessor<Index...>::discrete_domain_type TensorAccessor<Index...>::mem_domain()
      -
      352{
      -
      353 return ddc::DiscreteDomain<Index...>(
      -
      354 ddc::DiscreteElement<Index...>(ddc::DiscreteElement<Index>(0)...),
      -
      355 ddc::DiscreteVector<Index...>(ddc::DiscreteVector<Index>(Index::mem_size())...));
      -
      356}
      +
      335
      +
      336namespace detail {
      +
      337template <class Index>
      +
      338constexpr auto natural_domain()
      +
      339{
      +
      340 if constexpr (TensorNatIndex<Index>) {
      +
      341 return typename ddc::DiscreteDomain<
      +
      342 Index>(ddc::DiscreteElement<Index>(0), ddc::DiscreteVector<Index>(Index::size()));
      +
      343 } else {
      +
      344 return Index::subindices_domain();
      +
      345 }
      +
      346}
      +
      347} // namespace detail
      +
      348
      +
      349template <TensorIndex... Index>
      +
      + +
      351{
      +
      352 return natural_domain_t(detail::natural_domain<Index>()...);
      +
      353}
      -
      357
      -
      358template <TensorIndex... Index>
      -
      -
      359constexpr TensorAccessor<Index...>::discrete_domain_type TensorAccessor<Index...>::access_domain()
      -
      360{
      -
      361 return ddc::DiscreteDomain<Index...>(
      -
      362 ddc::DiscreteElement<Index...>(ddc::DiscreteElement<Index>(0)...),
      -
      363 ddc::DiscreteVector<Index...>(ddc::DiscreteVector<Index>(Index::access_size())...));
      -
      364}
      +
      354
      +
      355template <TensorIndex... Index>
      +
      +
      356constexpr TensorAccessor<Index...>::discrete_domain_type TensorAccessor<Index...>::mem_domain()
      +
      357{
      +
      358 return ddc::DiscreteDomain<Index...>(
      +
      359 ddc::DiscreteElement<Index...>(ddc::DiscreteElement<Index>(0)...),
      +
      360 ddc::DiscreteVector<Index...>(ddc::DiscreteVector<Index>(Index::mem_size())...));
      +
      361}
      -
      365
      -
      366template <TensorIndex... Index>
      -
      367template <class... CDim>
      -
      -
      368constexpr TensorAccessor<Index...>::discrete_element_type TensorAccessor<Index...>::access_element()
      -
      369{
      -
      370 return ddc::DiscreteElement<Index...>(ddc::DiscreteElement<Index>(
      -
      371 detail::access_id<Index, ddc::detail::TypeSeq<Index...>, CDim...>())...);
      -
      372}
      +
      362
      +
      363template <TensorIndex... Index>
      +
      +
      364constexpr TensorAccessor<Index...>::discrete_domain_type TensorAccessor<Index...>::access_domain()
      +
      365{
      +
      366 return ddc::DiscreteDomain<Index...>(
      +
      367 ddc::DiscreteElement<Index...>(ddc::DiscreteElement<Index>(0)...),
      +
      368 ddc::DiscreteVector<Index...>(ddc::DiscreteVector<Index>(Index::access_size())...));
      +
      369}
      -
      373
      -
      374template <TensorIndex... Index>
      -
      375template <class... NaturalIndex>
      -
      -
      376constexpr TensorAccessor<Index...>::discrete_element_type TensorAccessor<Index...>::access_element(
      -
      377 [[maybe_unused]] ddc::DiscreteElement<NaturalIndex...> natural_elem)
      -
      378{
      -
      379 return ddc::DiscreteElement<Index...>(
      -
      380 ddc::DiscreteElement<Index>(detail::access_id<Index, ddc::detail::TypeSeq<Index...>>(
      -
      381 typename natural_domain_t::discrete_element_type(natural_elem)))...);
      -
      382}
      +
      370
      +
      371template <TensorIndex... Index>
      +
      372template <class... CDim>
      +
      +
      373constexpr TensorAccessor<Index...>::discrete_element_type TensorAccessor<Index...>::access_element()
      +
      374{
      +
      375 return ddc::DiscreteElement<Index...>(ddc::DiscreteElement<Index>(
      +
      376 detail::access_id<Index, ddc::detail::TypeSeq<Index...>, CDim...>())...);
      +
      377}
      -
      383
      -
      384template <TensorIndex... Index>
      -
      385template <class... MemIndex>
      -
      386constexpr TensorAccessor<Index...>::natural_domain_t::discrete_element_type TensorAccessor<
      -
      -
      387 Index...>::canonical_natural_element(ddc::DiscreteElement<MemIndex...> mem_elem)
      -
      388{
      -
      389 std::array<std::size_t, natural_domain_t::rank()> ids {};
      -
      390 auto it = ids.begin();
      -
      391 (
      -
      392 [&]() {
      -
      393 auto i = MemIndex::mem_id_to_canonical_natural_ids(
      -
      394 mem_elem.template uid<MemIndex>());
      -
      395 std::copy(i.begin(), i.end(), it);
      -
      396 it += i.size();
      -
      397 }(),
      -
      398 ...);
      -
      399 typename natural_domain_t::discrete_element_type natural_elem;
      -
      400 ddc::detail::array(natural_elem) = std::array<std::size_t, natural_domain_t::rank()>(ids);
      -
      401 return natural_elem;
      -
      402}
      +
      378
      +
      379template <TensorIndex... Index>
      +
      380template <class... NaturalIndex>
      +
      +
      381constexpr TensorAccessor<Index...>::discrete_element_type TensorAccessor<Index...>::access_element(
      +
      382 [[maybe_unused]] ddc::DiscreteElement<NaturalIndex...> natural_elem)
      +
      383{
      +
      384 return ddc::DiscreteElement<Index...>(
      +
      385 ddc::DiscreteElement<Index>(detail::access_id<Index, ddc::detail::TypeSeq<Index...>>(
      +
      386 typename natural_domain_t::discrete_element_type(natural_elem)))...);
      +
      387}
      -
      403
      -
      404namespace detail {
      -
      405
      -
      406// Helpers to handle memory access and processing for particular tensor structures (ie. eventual multiplication with -1 for antisymmetry or non-stored zeros)
      -
      407template <
      -
      408 class TensorField,
      -
      409 class Element,
      -
      410 class IndexHeadsTypeSeq,
      -
      411 class IndexInterest,
      -
      412 class... IndexTail>
      -
      413struct Access;
      -
      414
      -
      415template <
      -
      416 class TensorField,
      -
      417 class Element,
      -
      418 class... IndexHead,
      -
      419 class IndexInterest,
      -
      420 class... IndexTail>
      -
      421struct Access<TensorField, Element, ddc::detail::TypeSeq<IndexHead...>, IndexInterest, IndexTail...>
      -
      422{
      -
      423 template <class Elem>
      -
      424 KOKKOS_FUNCTION static TensorField::element_type run(TensorField tensor_field, Elem const& elem)
      -
      425 {
      -
      426 /*
      -
      427 ----- Important warning -----
      -
      428 The general case is not correctly handled here. It would be difficult to do so.
      -
      429 It means you can get silent bug (with wrong result) if you try to use exotic ordering
      -
      430 of dimensions/indices. Ie., a TensorYoungTableauIndex has to be the last of the list.
      -
      431 */
      -
      432 if constexpr (sizeof...(IndexTail) > 0) {
      -
      433 if constexpr (TensorIndex<IndexInterest>) {
      -
      434 return IndexInterest::template process_access<TensorField, Elem, IndexInterest>(
      -
      435 KOKKOS_LAMBDA(TensorField tensor_field_, Elem elem_)
      -
      436 ->TensorField::element_type {
      -
      437 return Access<
      -
      438 TensorField,
      -
      439 Element,
      -
      440 ddc::detail::TypeSeq<IndexHead..., IndexInterest>,
      -
      441 IndexTail...>::run(tensor_field_, elem_);
      -
      442 },
      -
      443 tensor_field,
      -
      444 elem);
      -
      445 } else {
      -
      446 return Access<
      -
      447 TensorField,
      -
      448 Element,
      -
      449 ddc::detail::TypeSeq<IndexHead..., IndexInterest>,
      -
      450 IndexTail...>::run(tensor_field, elem);
      -
      451 }
      -
      452 } else {
      -
      453 if constexpr (TensorIndex<IndexInterest>) {
      -
      454 return IndexInterest::template process_access<TensorField, Elem, IndexInterest>(
      -
      455 KOKKOS_LAMBDA(TensorField tensor_field_, Elem elem_)
      -
      456 ->TensorField::element_type {
      -
      457 double tensor_field_value = 0;
      -
      458 if constexpr (IndexInterest::is_explicitely_stored_tensor) {
      -
      459 std::size_t const mem_id
      -
      460 = IndexInterest::access_id_to_mem_id(
      -
      461 elem_.template uid<IndexInterest>());
      -
      462 if (mem_id != std::numeric_limits<std::size_t>::max()) {
      -
      463 tensor_field_value
      -
      464 = tensor_field_
      -
      465 .mem(ddc::DiscreteElement<
      -
      466 IndexHead...>(elem_),
      -
      467 ddc::DiscreteElement<
      -
      468 IndexInterest>(mem_id));
      -
      469 } else {
      -
      470 tensor_field_value = 1.;
      -
      471 }
      -
      472 } else {
      -
      473 std::pair<
      -
      474 std::vector<double>,
      -
      475 std::vector<std::size_t>> const mem_lin_comb
      -
      476 = IndexInterest::access_id_to_mem_lin_comb(
      -
      477 elem_.template uid<IndexInterest>());
      -
      478
      -
      479 if (std::get<0>(mem_lin_comb).size() > 0) {
      -
      480 for (std::size_t i = 0;
      -
      481 i < std::get<0>(mem_lin_comb).size();
      -
      482 ++i) {
      -
      483 tensor_field_value
      -
      484 += std::get<0>(mem_lin_comb)[i]
      -
      485 * tensor_field_.mem(
      -
      486 ddc::DiscreteElement<
      -
      487 IndexHead...>(elem_),
      -
      488 ddc::DiscreteElement<
      -
      489 IndexInterest>(std::get<
      -
      490 1>(
      -
      491 mem_lin_comb)[i]));
      -
      492 }
      -
      493 } else {
      -
      494 tensor_field_value = 1.;
      -
      495 }
      -
      496 }
      -
      497
      -
      498 return tensor_field_value;
      -
      499 },
      -
      500 tensor_field,
      -
      501 elem);
      -
      502 } else {
      -
      503 return tensor_field(elem);
      -
      504 }
      -
      505 }
      -
      506 }
      -
      507};
      -
      508
      -
      509// Functor for memory element access (if defined)
      -
      510template <class InterestDim>
      -
      511struct LambdaMemElem
      -
      512{
      -
      513 template <class Elem>
      -
      514 KOKKOS_FUNCTION static ddc::DiscreteElement<InterestDim> run(Elem elem)
      -
      515 {
      -
      516 return ddc::DiscreteElement<InterestDim>(elem);
      -
      517 }
      -
      518};
      -
      519
      -
      520template <TensorIndex InterestDim>
      -
      521struct LambdaMemElem<InterestDim>
      -
      522{
      -
      523 template <class Elem>
      -
      524 KOKKOS_FUNCTION static ddc::DiscreteElement<InterestDim> run(Elem elem)
      -
      525 {
      -
      526 if constexpr (InterestDim::is_explicitely_stored_tensor) {
      -
      527 std::size_t const mem_id
      -
      528 = InterestDim::access_id_to_mem_id(elem.template uid<InterestDim>());
      -
      529 assert(mem_id != std::numeric_limits<std::size_t>::max()
      -
      530 && "mem_elem is not defined because mem_id() returned a max integer");
      -
      531 return ddc::DiscreteElement<InterestDim>(mem_id);
      -
      532 } else {
      -
      533 std::pair<std::vector<double>, std::vector<std::size_t>> const mem_lin_comb
      -
      534 = InterestDim::access_id_to_mem_lin_comb(elem.template uid<InterestDim>());
      -
      535 assert(std::get<0>(mem_lin_comb).size() > 0
      -
      536 && "mem_elem is not defined because mem_lin_comb contains no id");
      -
      537 assert(std::get<0>(mem_lin_comb).size() == 1
      -
      538 && "mem_elem is not defined because mem_lin_comb contains several ids");
      -
      539 return ddc::DiscreteElement<InterestDim>(std::get<1>(mem_lin_comb)[0]);
      -
      540 }
      -
      541 }
      -
      542};
      -
      543
      -
      544} // namespace detail
      -
      545
      -
      546// @cond
      -
      547
      -
      548template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      -
      549class Tensor;
      -
      550
      -
      551} // namespace tensor
      -
      552
      -
      553} // namespace sil
      -
      554
      -
      555namespace ddc {
      -
      556
      -
      557template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      -
      558inline constexpr bool enable_chunk<
      - -
      560 = true;
      -
      561
      -
      562template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      -
      563inline constexpr bool enable_borrowed_chunk<
      - -
      565 = true;
      -
      566
      -
      567} // namespace ddc
      -
      568
      -
      569namespace sil {
      -
      570
      -
      571namespace tensor {
      -
      572
      -
      573// @endcond
      -
      574
      -
      576template <class ElementType, class... DDim, class LayoutStridedPolicy, class MemorySpace>
      -
      -
      577class Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      -
      578 : public ddc::
      -
      579 ChunkSpan<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      -
      580{
      -
      581protected:
      -
      582 using base_type = ddc::
      -
      583 ChunkSpan<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>;
      -
      584
      -
      585public:
      -
      586 using base_type::ChunkSpan;
      -
      587 using reference = base_type::reference;
      -
      588 using discrete_domain_type = base_type::discrete_domain_type;
      -
      589 using discrete_element_type = base_type::discrete_element_type;
      -
      590
      -
      591 using base_type::domain;
      -
      592 using base_type::operator();
      -
      593
      -
      -
      594 KOKKOS_FUNCTION constexpr explicit Tensor(ddc::ChunkSpan<
      -
      595 ElementType,
      -
      596 ddc::DiscreteDomain<DDim...>,
      -
      597 LayoutStridedPolicy,
      -
      598 MemorySpace> other) noexcept
      -
      599 : base_type(other)
      -
      600 {
      -
      601 }
      +
      388
      +
      389template <TensorIndex... Index>
      +
      390template <class... MemIndex>
      +
      391constexpr TensorAccessor<Index...>::natural_domain_t::discrete_element_type TensorAccessor<
      +
      +
      392 Index...>::canonical_natural_element(ddc::DiscreteElement<MemIndex...> mem_elem)
      +
      393{
      +
      394 std::array<std::size_t, natural_domain_t::rank()> ids {};
      +
      395 auto it = ids.begin();
      +
      396 (
      +
      397 [&]() {
      +
      398 auto i = MemIndex::mem_id_to_canonical_natural_ids(
      +
      399 mem_elem.template uid<MemIndex>());
      +
      400 std::copy(i.begin(), i.end(), it);
      +
      401 it += i.size();
      +
      402 }(),
      +
      403 ...);
      +
      404 typename natural_domain_t::discrete_element_type natural_elem;
      +
      405 ddc::detail::array(natural_elem) = std::array<std::size_t, natural_domain_t::rank()>(ids);
      +
      406 return natural_elem;
      +
      407}
      -
      602
      -
      603 using accessor_t = tensor_accessor_for_domain_t<ddc::cartesian_prod_t<std::conditional_t<
      - -
      605 ddc::DiscreteDomain<DDim>,
      -
      606 ddc::DiscreteDomain<>>...>>;
      -
      607
      -
      -
      608 static constexpr accessor_t accessor()
      -
      609 {
      -
      610 return accessor_t();
      -
      611 }
      +
      408
      +
      409namespace detail {
      +
      410
      +
      411// Helpers to handle memory access and processing for particular tensor structures (ie. eventual multiplication with -1 for antisymmetry or non-stored zeros)
      +
      412template <
      +
      413 class TensorField,
      +
      414 class Element,
      +
      415 class IndexHeadsTypeSeq,
      +
      416 class IndexInterest,
      +
      417 class... IndexTail>
      +
      418struct Access;
      +
      419
      +
      420template <
      +
      421 class TensorField,
      +
      422 class Element,
      +
      423 class... IndexHead,
      +
      424 class IndexInterest,
      +
      425 class... IndexTail>
      +
      426struct Access<TensorField, Element, ddc::detail::TypeSeq<IndexHead...>, IndexInterest, IndexTail...>
      +
      427{
      +
      428 template <class Elem>
      +
      429 KOKKOS_FUNCTION static TensorField::element_type run(TensorField tensor_field, Elem const& elem)
      +
      430 {
      +
      431 /*
      +
      432 ----- Important warning -----
      +
      433 The general case is not correctly handled here. It would be difficult to do so.
      +
      434 It means you can get silent bug (with wrong result) if you try to use exotic ordering
      +
      435 of dimensions/indices. Ie., a TensorYoungTableauIndex has to be the last of the list.
      +
      436 */
      +
      437 if constexpr (sizeof...(IndexTail) > 0) {
      +
      438 if constexpr (TensorIndex<IndexInterest>) {
      +
      439 return IndexInterest::template process_access<TensorField, Elem, IndexInterest>(
      +
      440 KOKKOS_LAMBDA(TensorField tensor_field_, Elem elem_)
      +
      441 ->TensorField::element_type {
      +
      442 return Access<
      +
      443 TensorField,
      +
      444 Element,
      +
      445 ddc::detail::TypeSeq<IndexHead..., IndexInterest>,
      +
      446 IndexTail...>::run(tensor_field_, elem_);
      +
      447 },
      +
      448 tensor_field,
      +
      449 elem);
      +
      450 } else {
      +
      451 return Access<
      +
      452 TensorField,
      +
      453 Element,
      +
      454 ddc::detail::TypeSeq<IndexHead..., IndexInterest>,
      +
      455 IndexTail...>::run(tensor_field, elem);
      +
      456 }
      +
      457 } else {
      +
      458 if constexpr (TensorIndex<IndexInterest>) {
      +
      459 return IndexInterest::template process_access<TensorField, Elem, IndexInterest>(
      +
      460 KOKKOS_LAMBDA(TensorField tensor_field_, Elem elem_)
      +
      461 ->TensorField::element_type {
      +
      462 double tensor_field_value = 0;
      +
      463 if constexpr (IndexInterest::is_explicitely_stored_tensor) {
      +
      464 std::size_t const mem_id
      +
      465 = IndexInterest::access_id_to_mem_id(
      +
      466 elem_.template uid<IndexInterest>());
      +
      467 if (mem_id != std::numeric_limits<std::size_t>::max()) {
      +
      468 tensor_field_value
      +
      469 = tensor_field_
      +
      470 .mem(ddc::DiscreteElement<
      +
      471 IndexHead...>(elem_),
      +
      472 ddc::DiscreteElement<
      +
      473 IndexInterest>(mem_id));
      +
      474 } else {
      +
      475 tensor_field_value = 1.;
      +
      476 }
      +
      477 } else {
      +
      478 std::pair<
      +
      479 std::vector<double>,
      +
      480 std::vector<std::size_t>> const mem_lin_comb
      +
      481 = IndexInterest::access_id_to_mem_lin_comb(
      +
      482 elem_.template uid<IndexInterest>());
      +
      483
      +
      484 if (std::get<0>(mem_lin_comb).size() > 0) {
      +
      485 for (std::size_t i = 0;
      +
      486 i < std::get<0>(mem_lin_comb).size();
      +
      487 ++i) {
      +
      488 tensor_field_value
      +
      489 += std::get<0>(mem_lin_comb)[i]
      +
      490 * tensor_field_.mem(
      +
      491 ddc::DiscreteElement<
      +
      492 IndexHead...>(elem_),
      +
      493 ddc::DiscreteElement<
      +
      494 IndexInterest>(std::get<
      +
      495 1>(
      +
      496 mem_lin_comb)[i]));
      +
      497 }
      +
      498 } else {
      +
      499 tensor_field_value = 1.;
      +
      500 }
      +
      501 }
      +
      502
      +
      503 return tensor_field_value;
      +
      504 },
      +
      505 tensor_field,
      +
      506 elem);
      +
      507 } else {
      +
      508 return tensor_field(elem);
      +
      509 }
      +
      510 }
      +
      511 }
      +
      512};
      +
      513
      +
      514// Functor for memory element access (if defined)
      +
      515template <class InterestDim>
      +
      516struct LambdaMemElem
      +
      517{
      +
      518 template <class Elem>
      +
      519 KOKKOS_FUNCTION static ddc::DiscreteElement<InterestDim> run(Elem elem)
      +
      520 {
      +
      521 return ddc::DiscreteElement<InterestDim>(elem);
      +
      522 }
      +
      523};
      +
      524
      +
      525template <TensorIndex InterestDim>
      +
      526struct LambdaMemElem<InterestDim>
      +
      527{
      +
      528 template <class Elem>
      +
      529 KOKKOS_FUNCTION static ddc::DiscreteElement<InterestDim> run(Elem elem)
      +
      530 {
      +
      531 if constexpr (InterestDim::is_explicitely_stored_tensor) {
      +
      532 std::size_t const mem_id
      +
      533 = InterestDim::access_id_to_mem_id(elem.template uid<InterestDim>());
      +
      534 assert(mem_id != std::numeric_limits<std::size_t>::max()
      +
      535 && "mem_elem is not defined because mem_id() returned a max integer. Maybe you "
      +
      536 "used Tensor::operator() in place of Tensor::get ?");
      +
      537 return ddc::DiscreteElement<InterestDim>(mem_id);
      +
      538 } else {
      +
      539 std::pair<std::vector<double>, std::vector<std::size_t>> const mem_lin_comb
      +
      540 = InterestDim::access_id_to_mem_lin_comb(elem.template uid<InterestDim>());
      +
      541 assert(std::get<0>(mem_lin_comb).size() > 0
      +
      542 && "mem_elem is not defined because mem_lin_comb contains no id. Maybe you used "
      +
      543 "Tensor::operator() in place of Tensor::get ?");
      +
      544 assert(std::get<0>(mem_lin_comb).size() == 1
      +
      545 && "mem_elem is not defined because mem_lin_comb contains several ids. Maybe "
      +
      546 "you used Tensor::operator() in place of Tensor::get ?");
      +
      547 return ddc::DiscreteElement<InterestDim>(std::get<1>(mem_lin_comb)[0]);
      +
      548 }
      +
      549 }
      +
      550};
      +
      551
      +
      552} // namespace detail
      +
      553
      +
      554// @cond
      +
      555
      +
      556template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      +
      557class Tensor;
      +
      558
      +
      559} // namespace tensor
      +
      560
      +
      561} // namespace sil
      +
      562
      +
      563namespace ddc {
      +
      564
      +
      565template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      +
      566inline constexpr bool enable_chunk<
      + +
      568 = true;
      +
      569
      +
      570template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      +
      571inline constexpr bool enable_borrowed_chunk<
      + +
      573 = true;
      +
      574
      +
      575} // namespace ddc
      +
      576
      +
      577namespace sil {
      +
      578
      +
      579namespace tensor {
      +
      580
      +
      581// @endcond
      +
      582
      +
      584template <class ElementType, class... DDim, class LayoutStridedPolicy, class MemorySpace>
      +
      +
      585class Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      +
      586 : public ddc::
      +
      587 ChunkSpan<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      +
      588{
      +
      589protected:
      +
      590 using base_type = ddc::
      +
      591 ChunkSpan<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>;
      +
      592
      +
      593public:
      +
      594 using base_type::ChunkSpan;
      +
      595 using reference = base_type::reference;
      +
      596 using discrete_domain_type = base_type::discrete_domain_type;
      +
      597 using discrete_element_type = base_type::discrete_element_type;
      +
      598
      +
      599 using base_type::domain;
      +
      600 using base_type::operator();
      +
      601
      +
      +
      602 KOKKOS_FUNCTION constexpr explicit Tensor(ddc::ChunkSpan<
      +
      603 ElementType,
      +
      604 ddc::DiscreteDomain<DDim...>,
      +
      605 LayoutStridedPolicy,
      +
      606 MemorySpace> other) noexcept
      +
      607 : base_type(other)
      +
      608 {
      +
      609 }
      -
      612
      -
      613 using indices_domain_t = accessor_t::discrete_domain_type;
      -
      614
      - -
      616 = ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_remove_t<
      -
      617 ddc::to_type_seq_t<discrete_domain_type>,
      -
      618 ddc::to_type_seq_t<indices_domain_t>>>;
      -
      - -
      620 KOKKOS_FUNCTION constexpr indices_domain_t indices_domain() const noexcept
      -
      621 {
      -
      622 return indices_domain_t(domain());
      +
      610
      +
      611 using accessor_t = tensor_accessor_for_domain_t<ddc::cartesian_prod_t<std::conditional_t<
      + +
      613 ddc::DiscreteDomain<DDim>,
      +
      614 ddc::DiscreteDomain<>>...>>;
      +
      615
      +
      +
      616 static constexpr accessor_t accessor()
      +
      617 {
      +
      618 return accessor_t();
      +
      619 }
      -
      623 }
      -
      - -
      625 KOKKOS_FUNCTION constexpr non_indices_domain_t non_indices_domain() const noexcept
      -
      626 {
      -
      627 return non_indices_domain_t(domain());
      +
      620
      +
      621 using indices_domain_t = accessor_t::discrete_domain_type;
      +
      622
      + +
      624 = ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_remove_t<
      +
      625 ddc::to_type_seq_t<discrete_domain_type>,
      +
      626 ddc::to_type_seq_t<indices_domain_t>>>;
      +
      + +
      628 KOKKOS_FUNCTION constexpr indices_domain_t indices_domain() const noexcept
      +
      629 {
      +
      630 return indices_domain_t(domain());
      -
      628 }
      - -
      630 using natural_domain_t
      -
      -
      631 = ddc::cartesian_prod_t<non_indices_domain_t, typename accessor_t::natural_domain_t>;
      -
      632
      -
      633 KOKKOS_FUNCTION constexpr natural_domain_t natural_domain() const noexcept
      +
      631 }
      +
      + +
      633 KOKKOS_FUNCTION constexpr non_indices_domain_t non_indices_domain() const noexcept
      634 {
      +
      635 return non_indices_domain_t(domain());
      -
      635 return natural_domain_t(non_indices_domain(), accessor_t::natural_domain());
      -
      - -
      637
      -
      638 KOKKOS_FUNCTION constexpr discrete_domain_type mem_domain() const noexcept
      -
      639 {
      +
      636 }
      + +
      638 using natural_domain_t
      +
      +
      639 = ddc::cartesian_prod_t<non_indices_domain_t, typename accessor_t::natural_domain_t>;
      +
      640
      +
      641 KOKKOS_FUNCTION constexpr natural_domain_t natural_domain() const noexcept
      +
      642 {
      -
      640 return discrete_domain_type(non_indices_domain(), accessor_t::mem_domain());
      -
      - -
      642
      -
      643 KOKKOS_FUNCTION constexpr discrete_domain_type access_domain() const noexcept
      -
      644 {
      +
      643 return natural_domain_t(non_indices_domain(), accessor_t::natural_domain());
      +
      + +
      645
      +
      646 KOKKOS_FUNCTION constexpr discrete_domain_type mem_domain() const noexcept
      +
      647 {
      -
      645 return discrete_domain_type(non_indices_domain(), accessor_t::access_domain());
      -
      646 }
      -
      - -
      648 template <class... CDim>
      -
      649 KOKKOS_FUNCTION constexpr discrete_element_type access_element()
      -
      650 const noexcept // TODO merge this with the one below
      -
      651 {
      +
      648 return discrete_domain_type(non_indices_domain(), accessor_t::mem_domain());
      +
      + +
      650
      +
      651 KOKKOS_FUNCTION constexpr discrete_domain_type access_domain() const noexcept
      +
      652 {
      -
      652 return discrete_element_type(accessor_t::template access_element<CDim...>());
      -
      653 }
      -
      - -
      655 template <class... Elem>
      -
      656 KOKKOS_FUNCTION constexpr discrete_element_type access_element(Elem... elem) const noexcept
      -
      657 {
      - -
      659 accessor_t::access_element(
      -
      660 typename accessor_t::natural_domain_t::discrete_element_type(elem...)),
      +
      653 return discrete_domain_type(non_indices_domain(), accessor_t::access_domain());
      +
      654 }
      +
      + +
      656 template <class... CDim>
      +
      657 KOKKOS_FUNCTION constexpr discrete_element_type access_element()
      +
      658 const noexcept // TODO merge this with the one below
      +
      659 {
      -
      661 typename non_indices_domain_t::discrete_element_type(elem...));
      -
      662 }
      -
      - -
      664 template <class... Elem>
      -
      665 KOKKOS_FUNCTION constexpr natural_domain_t::discrete_element_type canonical_natural_element(
      -
      666 Elem... mem_elem) const noexcept
      -
      667 {
      -
      668 return typename natural_domain_t::discrete_element_type(
      -
      669 accessor_t::canonical_natural_element(
      -
      670 typename accessor_t::discrete_element_type(mem_elem...)),
      +
      660 return discrete_element_type(accessor_t::template access_element<CDim...>());
      +
      661 }
      +
      + +
      663 template <class... Elem>
      +
      664 KOKKOS_FUNCTION constexpr discrete_element_type access_element(Elem... elem) const noexcept
      +
      665 {
      + +
      667 accessor_t::access_element(
      +
      668 typename accessor_t::natural_domain_t::discrete_element_type(elem...)),
      -
      671 typename non_indices_domain_t::discrete_element_type(mem_elem...));
      -
      672 }
      -
      - -
      674 template <class... DElems>
      -
      675 KOKKOS_FUNCTION constexpr reference mem(DElems const&... delems) const noexcept
      -
      676 {
      -
      677 return ddc::ChunkSpan<
      -
      678 ElementType,
      -
      679 ddc::DiscreteDomain<DDim...>,
      -
      680 LayoutStridedPolicy,
      +
      669 typename non_indices_domain_t::discrete_element_type(elem...));
      +
      670 }
      +
      + +
      672 template <class... Elem>
      +
      673 KOKKOS_FUNCTION constexpr natural_domain_t::discrete_element_type canonical_natural_element(
      +
      674 Elem... mem_elem) const noexcept
      +
      675 {
      +
      676 return typename natural_domain_t::discrete_element_type(
      +
      677 accessor_t::canonical_natural_element(
      +
      678 typename accessor_t::discrete_element_type(mem_elem...)),
      -
      681 MemorySpace>::operator()(delems...);
      -
      682 }
      -
      - -
      684 template <class... DElems>
      -
      685 KOKKOS_FUNCTION constexpr reference operator()(DElems const&... delems) const noexcept
      -
      686 {
      -
      687 return ddc::ChunkSpan<
      -
      688 ElementType,
      -
      689 ddc::DiscreteDomain<DDim...>,
      -
      690 LayoutStridedPolicy,
      -
      691 MemorySpace>::
      -
      692 operator()(ddc::DiscreteElement<DDim...>(
      +
      679 typename non_indices_domain_t::discrete_element_type(mem_elem...));
      +
      680 }
      +
      + +
      682 template <class... DElems>
      +
      683 KOKKOS_FUNCTION constexpr reference mem(DElems const&... delems) const noexcept
      +
      684 {
      +
      685 return ddc::ChunkSpan<
      +
      686 ElementType,
      +
      687 ddc::DiscreteDomain<DDim...>,
      +
      688 LayoutStridedPolicy,
      -
      693 detail::LambdaMemElem<DDim>::run(ddc::DiscreteElement<DDim>(delems...))...));
      -
      694 }
      -
      - -
      696 template <class... ODDim>
      -
      697 KOKKOS_FUNCTION constexpr auto operator[](
      -
      698 ddc::DiscreteElement<ODDim...> const& slice_spec) const noexcept
      -
      699 {
      -
      700 ddc::ChunkSpan chunkspan = ddc::ChunkSpan<
      -
      701 ElementType,
      -
      702 ddc::DiscreteDomain<DDim...>,
      -
      703 LayoutStridedPolicy,
      -
      704 MemorySpace>::
      -
      705 operator[](
      -
      706 ddc::DiscreteElement<ODDim...>(detail::LambdaMemElem<ODDim>::run(slice_spec)...));
      -
      707 return Tensor<
      -
      708 ElementType,
      -
      709 ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_remove_t<
      -
      710 ddc::detail::TypeSeq<DDim...>,
      -
      711 ddc::detail::TypeSeq<ODDim...>>>,
      -
      712 typename decltype(chunkspan)::layout_type,
      +
      689 MemorySpace>::operator()(delems...);
      +
      690 }
      +
      + +
      692 template <class... DElems>
      +
      693 KOKKOS_FUNCTION constexpr reference operator()(DElems const&... delems) const noexcept
      +
      694 {
      +
      695 return ddc::ChunkSpan<
      +
      696 ElementType,
      +
      697 ddc::DiscreteDomain<DDim...>,
      +
      698 LayoutStridedPolicy,
      +
      699 MemorySpace>::
      +
      700 operator()(ddc::DiscreteElement<DDim...>(
      -
      713 MemorySpace>(chunkspan);
      -
      714 }
      -
      - -
      716 template <class... DElems>
      -
      717 KOKKOS_FUNCTION ElementType get(DElems const&... delems) const noexcept
      -
      718 {
      -
      719 if constexpr (sizeof...(DDim) == 0) {
      -
      720 return operator()(delems...);
      -
      721 } else {
      -
      722 return detail::Access<
      -
      723 Tensor<ElementType,
      -
      724 ddc::DiscreteDomain<DDim...>,
      -
      725 LayoutStridedPolicy,
      -
      726 MemorySpace>,
      -
      727 ddc::DiscreteElement<DDim...>,
      -
      728 ddc::detail::TypeSeq<>,
      -
      729 DDim...>::run(*this, ddc::DiscreteElement<DDim...>(delems...));
      +
      701 detail::LambdaMemElem<DDim>::run(ddc::DiscreteElement<DDim>(delems...))...));
      +
      702 }
      +
      + +
      704 template <class... ODDim>
      +
      705 KOKKOS_FUNCTION constexpr auto operator[](
      +
      706 ddc::DiscreteElement<ODDim...> const& slice_spec) const noexcept
      +
      707 {
      +
      708 ddc::ChunkSpan chunkspan = ddc::ChunkSpan<
      +
      709 ElementType,
      +
      710 ddc::DiscreteDomain<DDim...>,
      +
      711 LayoutStridedPolicy,
      +
      712 MemorySpace>::
      +
      713 operator[](
      +
      714 ddc::DiscreteElement<ODDim...>(detail::LambdaMemElem<ODDim>::run(slice_spec)...));
      +
      715 return Tensor<
      +
      716 ElementType,
      +
      717 ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_remove_t<
      +
      718 ddc::detail::TypeSeq<DDim...>,
      +
      719 ddc::detail::TypeSeq<ODDim...>>>,
      +
      720 typename decltype(chunkspan)::layout_type,
      -
      730 }
      -
      731 }
      -
      732
      -
      733 KOKKOS_FUNCTION Tensor<
      -
      734 ElementType,
      -
      735 ddc::DiscreteDomain<DDim...>,
      -
      -
      736 LayoutStridedPolicy,
      -
      737 MemorySpace>&
      -
      738 operator+=(const Tensor<
      -
      739 ElementType,
      -
      740 ddc::DiscreteDomain<DDim...>,
      -
      741 LayoutStridedPolicy,
      -
      742 MemorySpace>& tensor)
      -
      743 {
      -
      744 ddc::for_each(this->domain(), [&](ddc::DiscreteElement<DDim...> elem) {
      -
      745 this->mem(elem) += tensor.mem(elem);
      -
      746 });
      +
      721 MemorySpace>(chunkspan);
      +
      722 }
      +
      + +
      724 template <class... DElems>
      +
      725 KOKKOS_FUNCTION ElementType get(DElems const&... delems) const noexcept
      +
      726 {
      +
      727 if constexpr (sizeof...(DDim) == 0) {
      +
      728 return operator()(delems...);
      +
      729 } else {
      +
      730 return detail::Access<
      +
      731 Tensor<ElementType,
      +
      732 ddc::DiscreteDomain<DDim...>,
      +
      733 LayoutStridedPolicy,
      +
      734 MemorySpace>,
      +
      735 ddc::DiscreteElement<DDim...>,
      +
      736 ddc::detail::TypeSeq<>,
      +
      737 DDim...>::run(*this, ddc::DiscreteElement<DDim...>(delems...));
      -
      747 return *this;
      -
      748 }
      -
      749
      -
      750 KOKKOS_FUNCTION Tensor<
      -
      751 ElementType,
      -
      752 ddc::DiscreteDomain<DDim...>,
      -
      -
      753 LayoutStridedPolicy,
      -
      754 MemorySpace>&
      -
      755 operator*=(const ElementType scalar)
      -
      756 {
      -
      757 ddc::for_each(this->domain(), [&](ddc::DiscreteElement<DDim...> elem) {
      -
      758 this->mem(elem) *= scalar;
      -
      759 });
      +
      738 }
      +
      739 }
      +
      740
      +
      741 KOKKOS_FUNCTION Tensor<
      +
      742 ElementType,
      +
      743 ddc::DiscreteDomain<DDim...>,
      +
      +
      744 LayoutStridedPolicy,
      +
      745 MemorySpace>&
      +
      746 operator+=(const Tensor<
      +
      747 ElementType,
      +
      748 ddc::DiscreteDomain<DDim...>,
      +
      749 LayoutStridedPolicy,
      +
      750 MemorySpace>& tensor)
      +
      751 {
      +
      752 ddc::for_each(this->domain(), [&](ddc::DiscreteElement<DDim...> elem) {
      +
      753 this->mem(elem) += tensor.mem(elem);
      +
      754 });
      -
      760 return *this;
      -
      761 }
      -
      762};
      +
      755 return *this;
      +
      756 }
      +
      757
      +
      758 KOKKOS_FUNCTION Tensor<
      +
      759 ElementType,
      +
      760 ddc::DiscreteDomain<DDim...>,
      +
      +
      761 LayoutStridedPolicy,
      +
      762 MemorySpace>&
      +
      763 operator*=(const ElementType scalar)
      +
      764 {
      +
      765 ddc::for_each(this->domain(), [&](ddc::DiscreteElement<DDim...> elem) {
      +
      766 this->mem(elem) *= scalar;
      +
      767 });
      +
      +
      768 return *this;
      +
      769 }
      +
      770};
      -
      763
      -
      764template <class ElementType, class SupportType, class Allocator>
      -
      765Tensor(ddc::Chunk<ElementType, SupportType, Allocator>)
      - -
      767
      -
      768template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      -
      769Tensor(ddc::ChunkSpan<ElementType, SupportType, LayoutStridedPolicy, MemorySpace>)
      -
      771
      -
      772// Relabelize index without altering allocation
      -
      773namespace detail {
      -
      774template <class IndexToRelabelize, TensorIndex OldIndex, TensorIndex NewIndex>
      -
      775struct RelabelizeIndex;
      -
      776
      -
      777template <class IndexToRelabelize, TensorIndex OldIndex, TensorIndex NewIndex>
      - -
      779struct RelabelizeIndex<IndexToRelabelize, OldIndex, NewIndex>
      -
      780{
      -
      781 using type = std::
      -
      782 conditional_t<std::is_same_v<IndexToRelabelize, OldIndex>, NewIndex, IndexToRelabelize>;
      -
      783};
      +
      772template <class ElementType, class SupportType, class Allocator>
      +
      773Tensor(ddc::Chunk<ElementType, SupportType, Allocator>)
      + +
      775
      +
      776template <class ElementType, class SupportType, class LayoutStridedPolicy, class MemorySpace>
      +
      777Tensor(ddc::ChunkSpan<ElementType, SupportType, LayoutStridedPolicy, MemorySpace>)
      + +
      779
      +
      780// Relabelize index without altering allocation
      +
      781namespace detail {
      +
      782template <class IndexToRelabelize, TensorIndex OldIndex, TensorIndex NewIndex>
      +
      783struct RelabelizeIndex;
      784
      -
      785template <
      -
      786 template <class...>
      -
      787 class IndexToRelabelizeType,
      -
      788 TensorIndex OldIndex,
      -
      789 TensorIndex NewIndex,
      -
      790 class... Arg>
      -
      791struct RelabelizeIndex<IndexToRelabelizeType<Arg...>, OldIndex, NewIndex>
      -
      792{
      -
      793 using type = std::conditional_t<
      -
      794 std::is_same_v<IndexToRelabelizeType<Arg...>, OldIndex>,
      -
      795 NewIndex,
      -
      796 IndexToRelabelizeType<typename RelabelizeIndex<Arg, OldIndex, NewIndex>::type...>>;
      -
      797};
      -
      798
      -
      799template <class T, class OldIndex, class NewIndex>
      -
      800struct RelabelizeIndexInType;
      -
      801
      -
      802template <template <class...> class T, class... DDim, class OldIndex, class NewIndex>
      -
      803struct RelabelizeIndexInType<T<DDim...>, OldIndex, NewIndex>
      -
      804{
      -
      805 using type = T<typename RelabelizeIndex<DDim, OldIndex, NewIndex>::type...>;
      -
      806};
      -
      807
      -
      808} // namespace detail
      +
      785template <class IndexToRelabelize, TensorIndex OldIndex, TensorIndex NewIndex>
      + +
      787struct RelabelizeIndex<IndexToRelabelize, OldIndex, NewIndex>
      +
      788{
      +
      789 using type = std::
      +
      790 conditional_t<std::is_same_v<IndexToRelabelize, OldIndex>, NewIndex, IndexToRelabelize>;
      +
      791};
      +
      792
      +
      793template <
      +
      794 template <class...>
      +
      795 class IndexToRelabelizeType,
      +
      796 TensorIndex OldIndex,
      +
      797 TensorIndex NewIndex,
      +
      798 class... Arg>
      +
      799struct RelabelizeIndex<IndexToRelabelizeType<Arg...>, OldIndex, NewIndex>
      +
      800{
      +
      801 using type = std::conditional_t<
      +
      802 std::is_same_v<IndexToRelabelizeType<Arg...>, OldIndex>,
      +
      803 NewIndex,
      +
      804 IndexToRelabelizeType<typename RelabelizeIndex<Arg, OldIndex, NewIndex>::type...>>;
      +
      805};
      +
      806
      +
      807template <class T, class OldIndex, class NewIndex>
      +
      808struct RelabelizeIndexInType;
      809
      -
      810template <class T, TensorIndex OldIndex, TensorIndex NewIndex>
      -
      811using relabelize_index_in_t = detail::RelabelizeIndexInType<T, OldIndex, NewIndex>::type;
      -
      812
      -
      813namespace detail {
      -
      814
      -
      815template <class OldIndex, class NewIndex>
      -
      816struct RelabelizeIndexIn
      -
      817{
      -
      818 template <class... DDim>
      -
      819 static constexpr auto run(ddc::DiscreteElement<DDim...> elem)
      -
      820 {
      -
      821 return ddc::DiscreteElement<
      -
      822 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::type...>(
      -
      823 elem.template uid<DDim>()...);
      -
      824 }
      -
      825
      +
      810template <template <class...> class T, class... DDim, class OldIndex, class NewIndex>
      +
      811struct RelabelizeIndexInType<T<DDim...>, OldIndex, NewIndex>
      +
      812{
      +
      813 using type = T<typename RelabelizeIndex<DDim, OldIndex, NewIndex>::type...>;
      +
      814};
      +
      815
      +
      816} // namespace detail
      +
      817
      +
      818template <class T, TensorIndex OldIndex, TensorIndex NewIndex>
      +
      819using relabelize_index_in_t = detail::RelabelizeIndexInType<T, OldIndex, NewIndex>::type;
      +
      820
      +
      821namespace detail {
      +
      822
      +
      823template <class OldIndex, class NewIndex>
      +
      824struct RelabelizeIndexIn
      +
      825{
      826 template <class... DDim>
      -
      827 static constexpr auto run(ddc::DiscreteVector<DDim...> vect)
      +
      827 static constexpr auto run(ddc::DiscreteElement<DDim...> elem)
      828 {
      -
      829 return ddc::DiscreteVector<
      +
      829 return ddc::DiscreteElement<
      830 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::type...>(
      -
      831 static_cast<std::size_t>(vect.template get<DDim>())...);
      +
      831 elem.template uid<DDim>()...);
      832 }
      833
      834 template <class... DDim>
      -
      835 static constexpr auto run(ddc::DiscreteDomain<DDim...> dom)
      +
      835 static constexpr auto run(ddc::DiscreteVector<DDim...> vect)
      836 {
      -
      837 return relabelize_index_in_t<ddc::DiscreteDomain<DDim...>, OldIndex, NewIndex>(
      - - +
      837 return ddc::DiscreteVector<
      +
      838 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::type...>(
      +
      839 static_cast<std::size_t>(vect.template get<DDim>())...);
      840 }
      -
      841};
      -
      842
      -
      843} // namespace detail
      -
      844
      -
      845template <class OldIndex, class NewIndex, class T>
      -
      - -
      847{
      -
      848 return detail::RelabelizeIndexIn<OldIndex, NewIndex>::run(t);
      -
      849}
      -
      +
      841
      +
      842 template <class... DDim>
      +
      843 static constexpr auto run(ddc::DiscreteDomain<DDim...> dom)
      +
      844 {
      +
      845 return relabelize_index_in_t<ddc::DiscreteDomain<DDim...>, OldIndex, NewIndex>(
      + + +
      848 }
      +
      849};
      850
      -
      851namespace detail {
      -
      852template <class TensorType, class OldIndex, class NewIndex>
      -
      853struct RelabelizeIndexOfType;
      -
      854
      -
      855template <
      -
      856 class OldIndex,
      -
      857 class NewIndex,
      -
      858 class ElementType,
      -
      859 class Dom,
      -
      860 class LayoutStridedPolicy,
      -
      861 class MemorySpace>
      -
      862struct RelabelizeIndexOfType<
      -
      863 Tensor<ElementType, Dom, LayoutStridedPolicy, MemorySpace>,
      -
      864 OldIndex,
      -
      865 NewIndex>
      -
      866{
      -
      867 using type = Tensor<
      -
      868 ElementType,
      -
      869 typename RelabelizeIndexInType<Dom, OldIndex, NewIndex>::type,
      -
      870 LayoutStridedPolicy,
      -
      871 MemorySpace>;
      -
      872};
      -
      873
      -
      874} // namespace detail
      -
      875
      -
      876template <misc::Specialization<Tensor> TensorType, TensorIndex OldIndex, TensorIndex NewIndex>
      -
      877using relabelize_index_of_t = detail::RelabelizeIndexOfType<TensorType, OldIndex, NewIndex>::type;
      -
      878
      -
      879template <
      -
      880 TensorIndex OldIndex,
      -
      881 TensorIndex NewIndex,
      -
      882 class ElementType,
      -
      883 class... DDim,
      -
      884 class LayoutStridedPolicy,
      -
      885 class MemorySpace>
      -
      886constexpr relabelize_index_of_t<
      -
      887 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>,
      -
      888 OldIndex,
      -
      889 NewIndex>
      -
      - -
      891 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      -
      892 old_tensor)
      -
      893{
      - -
      895 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>,
      -
      896 OldIndex,
      -
      897 NewIndex>(
      -
      898 old_tensor.data_handle(),
      -
      899 typename detail::RelabelizeIndexInType<
      -
      900 ddc::DiscreteDomain<DDim...>,
      -
      901 OldIndex,
      -
      902 NewIndex>::
      -
      903 type(ddc::DiscreteDomain<
      -
      904 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::type>(
      -
      905 ddc::DiscreteElement<
      -
      906 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::
      -
      907 type>(old_tensor.domain().front().template uid<DDim>()),
      -
      908 ddc::DiscreteVector<
      -
      909 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::
      -
      910 type>(static_cast<std::size_t>(
      -
      911 old_tensor.template extent<DDim>())))...));
      -
      912}
      +
      851} // namespace detail
      +
      852
      +
      853template <class OldIndex, class NewIndex, class T>
      +
      + +
      855{
      +
      856 return detail::RelabelizeIndexIn<OldIndex, NewIndex>::run(t);
      +
      857}
      -
      913
      -
      914namespace detail {
      -
      915template <class IndexToRelabelize, class OldIndices, class NewIndices>
      -
      916struct RelabelizeIndices;
      -
      917
      -
      918template <class IndexToRelabelize>
      -
      919struct RelabelizeIndices<IndexToRelabelize, ddc::detail::TypeSeq<>, ddc::detail::TypeSeq<>>
      -
      920{
      -
      921 using type = IndexToRelabelize;
      -
      922};
      -
      923
      -
      924template <
      -
      925 class IndexToRelabelize,
      -
      926 class HeadOldIndex,
      -
      927 class... TailOldIndex,
      -
      928 class HeadNewIndex,
      -
      929 class... TailNewIndex>
      -
      930struct RelabelizeIndices<
      -
      931 IndexToRelabelize,
      -
      932 ddc::detail::TypeSeq<HeadOldIndex, TailOldIndex...>,
      -
      933 ddc::detail::TypeSeq<HeadNewIndex, TailNewIndex...>>
      -
      934{
      -
      935 static_assert(sizeof...(TailOldIndex) == sizeof...(TailNewIndex));
      -
      936 using type = std::conditional_t<
      -
      937 (sizeof...(TailOldIndex) > 0),
      -
      938 typename RelabelizeIndices<
      -
      939 typename RelabelizeIndex<IndexToRelabelize, HeadOldIndex, HeadNewIndex>::type,
      -
      940 ddc::detail::TypeSeq<TailOldIndex...>,
      -
      941 ddc::detail::TypeSeq<TailNewIndex...>>::type,
      -
      942 typename RelabelizeIndex<IndexToRelabelize, HeadOldIndex, HeadNewIndex>::type>;
      -
      943};
      -
      944
      -
      945template <class T, class OldIndices, class NewIndices>
      -
      946struct RelabelizeIndicesInType;
      -
      947
      -
      948template <class T>
      -
      949struct RelabelizeIndicesInType<T, ddc::detail::TypeSeq<>, ddc::detail::TypeSeq<>>
      -
      950{
      -
      951 using type = T;
      -
      952};
      -
      953
      -
      954template <
      -
      955 class T,
      -
      956 class HeadOldIndex,
      -
      957 class... TailOldIndex,
      -
      958 class HeadNewIndex,
      -
      959 class... TailNewIndex>
      -
      960struct RelabelizeIndicesInType<
      -
      961 T,
      -
      962 ddc::detail::TypeSeq<HeadOldIndex, TailOldIndex...>,
      -
      963 ddc::detail::TypeSeq<HeadNewIndex, TailNewIndex...>>
      -
      964{
      -
      965 static_assert(sizeof...(TailOldIndex) == sizeof...(TailNewIndex));
      -
      966 using type = typename RelabelizeIndicesInType<
      - -
      968 ddc::detail::TypeSeq<TailOldIndex...>,
      -
      969 ddc::detail::TypeSeq<TailNewIndex...>>::type;
      -
      970};
      -
      971
      -
      972} // namespace detail
      -
      973
      -
      974template <class T, class OldIndices, class NewIndices>
      - -
      976 typename detail::RelabelizeIndicesInType<T, OldIndices, NewIndices>::type;
      -
      977
      -
      978namespace detail {
      -
      979
      -
      980template <class OldIndices, class NewIndices, std::size_t I = 0>
      -
      981struct RelabelizeIndicesIn
      -
      982{
      -
      983 template <class... DDim>
      -
      984 static constexpr auto run(ddc::DiscreteElement<DDim...> elem)
      -
      985 {
      -
      986 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      -
      987 return RelabelizeIndicesIn<OldIndices, NewIndices, I + 1>::run(
      - -
      989 ddc::type_seq_element_t<I, OldIndices>,
      -
      990 ddc::type_seq_element_t<I, NewIndices>>(elem));
      -
      991 } else {
      -
      992 return elem;
      -
      993 }
      -
      994 }
      -
      995
      -
      996 template <class... DDim>
      -
      997 static constexpr auto run(ddc::DiscreteVector<DDim...> vect)
      -
      998 {
      -
      999 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      -
      1000 return RelabelizeIndicesIn<OldIndices, NewIndices, I + 1>::run(
      - -
      1002 ddc::type_seq_element_t<I, OldIndices>,
      -
      1003 ddc::type_seq_element_t<I, NewIndices>>(vect));
      -
      1004 } else {
      -
      1005 return vect;
      -
      1006 }
      -
      1007 }
      -
      1008
      -
      1009 template <class... DDim>
      -
      1010 static constexpr auto run(ddc::DiscreteDomain<DDim...> dom)
      -
      1011 {
      -
      1012 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      -
      1013 return RelabelizeIndicesIn<OldIndices, NewIndices, I + 1>::run(
      - -
      1015 ddc::type_seq_element_t<I, OldIndices>,
      -
      1016 ddc::type_seq_element_t<I, NewIndices>>(dom));
      -
      1017 } else {
      -
      1018 return dom;
      -
      1019 }
      -
      1020 }
      -
      1021};
      -
      1022
      -
      1023} // namespace detail
      -
      1024
      -
      1025template <class OldIndices, class NewIndices, class T>
      -
      - -
      1027{
      -
      1028 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      -
      1029 return detail::RelabelizeIndicesIn<OldIndices, NewIndices>::run(t);
      -
      1030}
      +
      858
      +
      859namespace detail {
      +
      860template <class TensorType, class OldIndex, class NewIndex>
      +
      861struct RelabelizeIndexOfType;
      +
      862
      +
      863template <
      +
      864 class OldIndex,
      +
      865 class NewIndex,
      +
      866 class ElementType,
      +
      867 class Dom,
      +
      868 class LayoutStridedPolicy,
      +
      869 class MemorySpace>
      +
      870struct RelabelizeIndexOfType<
      +
      871 Tensor<ElementType, Dom, LayoutStridedPolicy, MemorySpace>,
      +
      872 OldIndex,
      +
      873 NewIndex>
      +
      874{
      +
      875 using type = Tensor<
      +
      876 ElementType,
      +
      877 typename RelabelizeIndexInType<Dom, OldIndex, NewIndex>::type,
      +
      878 LayoutStridedPolicy,
      +
      879 MemorySpace>;
      +
      880};
      +
      881
      +
      882} // namespace detail
      +
      883
      +
      884template <misc::Specialization<Tensor> TensorType, TensorIndex OldIndex, TensorIndex NewIndex>
      +
      885using relabelize_index_of_t = detail::RelabelizeIndexOfType<TensorType, OldIndex, NewIndex>::type;
      +
      886
      +
      887template <
      +
      888 TensorIndex OldIndex,
      +
      889 TensorIndex NewIndex,
      +
      890 class ElementType,
      +
      891 class... DDim,
      +
      892 class LayoutStridedPolicy,
      +
      893 class MemorySpace>
      +
      894constexpr relabelize_index_of_t<
      +
      895 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>,
      +
      896 OldIndex,
      +
      897 NewIndex>
      +
      + +
      899 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      +
      900 old_tensor)
      +
      901{
      + +
      903 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>,
      +
      904 OldIndex,
      +
      905 NewIndex>(
      +
      906 old_tensor.data_handle(),
      +
      907 typename detail::RelabelizeIndexInType<
      +
      908 ddc::DiscreteDomain<DDim...>,
      +
      909 OldIndex,
      +
      910 NewIndex>::
      +
      911 type(ddc::DiscreteDomain<
      +
      912 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::type>(
      +
      913 ddc::DiscreteElement<
      +
      914 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::
      +
      915 type>(old_tensor.domain().front().template uid<DDim>()),
      +
      916 ddc::DiscreteVector<
      +
      917 typename detail::RelabelizeIndex<DDim, OldIndex, NewIndex>::
      +
      918 type>(static_cast<std::size_t>(
      +
      919 old_tensor.template extent<DDim>())))...));
      +
      920}
      -
      1031
      -
      1032namespace detail {
      -
      1033
      -
      1034template <class TensorType, class OldIndex, class NewIndex>
      -
      1035struct RelabelizeIndicesOfType;
      -
      1036
      -
      1037template <
      -
      1038 class OldIndices,
      -
      1039 class NewIndices,
      -
      1040 class ElementType,
      -
      1041 class Dom,
      -
      1042 class LayoutStridedPolicy,
      -
      1043 class MemorySpace>
      -
      1044struct RelabelizeIndicesOfType<
      -
      1045 Tensor<ElementType, Dom, LayoutStridedPolicy, MemorySpace>,
      -
      1046 OldIndices,
      -
      1047 NewIndices>
      -
      1048{
      -
      1049 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      -
      1050 using type = Tensor<
      -
      1051 ElementType,
      -
      1052 typename RelabelizeIndicesInType<Dom, OldIndices, NewIndices>::type,
      -
      1053 LayoutStridedPolicy,
      -
      1054 MemorySpace>;
      -
      1055};
      -
      1056
      -
      1057template <
      -
      1058 class OldIndices,
      -
      1059 class NewIndices,
      -
      1060 std::size_t I,
      -
      1061 class ElementType,
      -
      1062 class... DDim,
      -
      1063 class LayoutStridedPolicy,
      -
      1064 class MemorySpace>
      -
      1065constexpr auto RelabelizeIndicesOf(
      -
      1066 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      -
      1067 old_tensor)
      -
      1068{
      -
      1069 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      -
      1070 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      -
      1071 return RelabelizeIndicesOf<
      -
      1072 ddc::type_seq_replace_t<
      -
      1073 OldIndices,
      -
      1074 ddc::detail::TypeSeq<ddc::type_seq_element_t<I, OldIndices>>,
      -
      1075 ddc::detail::TypeSeq<ddc::type_seq_element_t<I, NewIndices>>>,
      -
      1076 NewIndices,
      -
      1077 I + 1>(relabelize_index_of_t<
      -
      1078 Tensor<ElementType,
      -
      1079 ddc::DiscreteDomain<DDim...>,
      -
      1080 LayoutStridedPolicy,
      -
      1081 MemorySpace>,
      -
      1082 ddc::type_seq_element_t<I, OldIndices>,
      -
      1083 ddc::type_seq_element_t<I, NewIndices>>(
      -
      1084 old_tensor.data_handle(),
      -
      1085 typename detail::RelabelizeIndexInType<
      -
      1086 ddc::DiscreteDomain<DDim...>,
      -
      1087 ddc::type_seq_element_t<I, OldIndices>,
      -
      1088 ddc::type_seq_element_t<I, NewIndices>>::
      -
      1089 type(ddc::DiscreteDomain<typename detail::RelabelizeIndex<
      -
      1090 DDim,
      -
      1091 ddc::type_seq_element_t<I, OldIndices>,
      -
      1092 ddc::type_seq_element_t<I, NewIndices>>::type>(
      -
      1093 ddc::DiscreteElement<typename detail::RelabelizeIndex<
      -
      1094 DDim,
      -
      1095 ddc::type_seq_element_t<I, OldIndices>,
      -
      1096 ddc::type_seq_element_t<I, NewIndices>>::type>(
      -
      1097 old_tensor.domain().front().template uid<DDim>()),
      -
      1098 ddc::DiscreteVector<typename detail::RelabelizeIndex<
      -
      1099 DDim,
      -
      1100 ddc::type_seq_element_t<I, OldIndices>,
      -
      1101 ddc::type_seq_element_t<I, NewIndices>>::type>(
      -
      1102 static_cast<std::size_t>(
      -
      1103 old_tensor.template extent<DDim>())))...)));
      -
      1104 } else {
      -
      1105 return old_tensor;
      -
      1106 }
      -
      1107}
      -
      1108
      -
      1109} // namespace detail
      -
      1110
      -
      1111template <
      -
      1112 misc::Specialization<Tensor> TensorType,
      -
      1113 misc::Specialization<ddc::detail::TypeSeq> OldIndices,
      -
      1114 misc::Specialization<ddc::detail::TypeSeq> NewIndices>
      - -
      1116 = detail::RelabelizeIndicesOfType<TensorType, OldIndices, NewIndices>::type;
      -
      1117
      -
      1118template <
      - - -
      - - -
      1123 Tensor tensor)
      -
      1124{
      -
      1125 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      -
      1126 return detail::RelabelizeIndicesOf<OldIndices, NewIndices, 0>(tensor);
      +
      921
      +
      922namespace detail {
      +
      923template <class IndexToRelabelize, class OldIndices, class NewIndices>
      +
      924struct RelabelizeIndices;
      +
      925
      +
      926template <class IndexToRelabelize>
      +
      927struct RelabelizeIndices<IndexToRelabelize, ddc::detail::TypeSeq<>, ddc::detail::TypeSeq<>>
      +
      928{
      +
      929 using type = IndexToRelabelize;
      +
      930};
      +
      931
      +
      932template <
      +
      933 class IndexToRelabelize,
      +
      934 class HeadOldIndex,
      +
      935 class... TailOldIndex,
      +
      936 class HeadNewIndex,
      +
      937 class... TailNewIndex>
      +
      938struct RelabelizeIndices<
      +
      939 IndexToRelabelize,
      +
      940 ddc::detail::TypeSeq<HeadOldIndex, TailOldIndex...>,
      +
      941 ddc::detail::TypeSeq<HeadNewIndex, TailNewIndex...>>
      +
      942{
      +
      943 static_assert(sizeof...(TailOldIndex) == sizeof...(TailNewIndex));
      +
      944 using type = std::conditional_t<
      +
      945 (sizeof...(TailOldIndex) > 0),
      +
      946 typename RelabelizeIndices<
      +
      947 typename RelabelizeIndex<IndexToRelabelize, HeadOldIndex, HeadNewIndex>::type,
      +
      948 ddc::detail::TypeSeq<TailOldIndex...>,
      +
      949 ddc::detail::TypeSeq<TailNewIndex...>>::type,
      +
      950 typename RelabelizeIndex<IndexToRelabelize, HeadOldIndex, HeadNewIndex>::type>;
      +
      951};
      +
      952
      +
      953template <class T, class OldIndices, class NewIndices>
      +
      954struct RelabelizeIndicesInType;
      +
      955
      +
      956template <class T>
      +
      957struct RelabelizeIndicesInType<T, ddc::detail::TypeSeq<>, ddc::detail::TypeSeq<>>
      +
      958{
      +
      959 using type = T;
      +
      960};
      +
      961
      +
      962template <
      +
      963 class T,
      +
      964 class HeadOldIndex,
      +
      965 class... TailOldIndex,
      +
      966 class HeadNewIndex,
      +
      967 class... TailNewIndex>
      +
      968struct RelabelizeIndicesInType<
      +
      969 T,
      +
      970 ddc::detail::TypeSeq<HeadOldIndex, TailOldIndex...>,
      +
      971 ddc::detail::TypeSeq<HeadNewIndex, TailNewIndex...>>
      +
      972{
      +
      973 static_assert(sizeof...(TailOldIndex) == sizeof...(TailNewIndex));
      +
      974 using type = typename RelabelizeIndicesInType<
      + +
      976 ddc::detail::TypeSeq<TailOldIndex...>,
      +
      977 ddc::detail::TypeSeq<TailNewIndex...>>::type;
      +
      978};
      +
      979
      +
      980} // namespace detail
      +
      981
      +
      982template <class T, class OldIndices, class NewIndices>
      + +
      984 typename detail::RelabelizeIndicesInType<T, OldIndices, NewIndices>::type;
      +
      985
      +
      986namespace detail {
      +
      987
      +
      988template <class OldIndices, class NewIndices, std::size_t I = 0>
      +
      989struct RelabelizeIndicesIn
      +
      990{
      +
      991 template <class... DDim>
      +
      992 static constexpr auto run(ddc::DiscreteElement<DDim...> elem)
      +
      993 {
      +
      994 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      +
      995 return RelabelizeIndicesIn<OldIndices, NewIndices, I + 1>::run(
      + +
      997 ddc::type_seq_element_t<I, OldIndices>,
      +
      998 ddc::type_seq_element_t<I, NewIndices>>(elem));
      +
      999 } else {
      +
      1000 return elem;
      +
      1001 }
      +
      1002 }
      +
      1003
      +
      1004 template <class... DDim>
      +
      1005 static constexpr auto run(ddc::DiscreteVector<DDim...> vect)
      +
      1006 {
      +
      1007 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      +
      1008 return RelabelizeIndicesIn<OldIndices, NewIndices, I + 1>::run(
      + +
      1010 ddc::type_seq_element_t<I, OldIndices>,
      +
      1011 ddc::type_seq_element_t<I, NewIndices>>(vect));
      +
      1012 } else {
      +
      1013 return vect;
      +
      1014 }
      +
      1015 }
      +
      1016
      +
      1017 template <class... DDim>
      +
      1018 static constexpr auto run(ddc::DiscreteDomain<DDim...> dom)
      +
      1019 {
      +
      1020 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      +
      1021 return RelabelizeIndicesIn<OldIndices, NewIndices, I + 1>::run(
      + +
      1023 ddc::type_seq_element_t<I, OldIndices>,
      +
      1024 ddc::type_seq_element_t<I, NewIndices>>(dom));
      +
      1025 } else {
      +
      1026 return dom;
      +
      1027 }
      +
      1028 }
      +
      1029};
      +
      1030
      +
      1031} // namespace detail
      +
      1032
      +
      1033template <class OldIndices, class NewIndices, class T>
      +
      + +
      1035{
      +
      1036 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      +
      1037 return detail::RelabelizeIndicesIn<OldIndices, NewIndices>::run(t);
      +
      1038}
      -
      1127}
      -
      1128
      -
      1129// Sum of tensors
      -
      1130template <
      -
      1131 class... DDim,
      -
      1132 class ElementType,
      -
      1133 class LayoutStridedPolicy,
      -
      1134 class MemorySpace,
      -
      - -
      1136Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace> tensor_sum(
      -
      1137 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      -
      1138 sum_tensor,
      -
      1139 TensorType... tensor)
      -
      1140{
      -
      1141 ddc::for_each(sum_tensor.domain(), [=](ddc::DiscreteElement<DDim...> elem) {
      -
      1142 sum_tensor(elem) = (tensor(elem) + ...);
      -
      1143 });
      -
      1144 return sum_tensor;
      +
      1039
      +
      1040namespace detail {
      +
      1041
      +
      1042template <class TensorType, class OldIndex, class NewIndex>
      +
      1043struct RelabelizeIndicesOfType;
      +
      1044
      +
      1045template <
      +
      1046 class OldIndices,
      +
      1047 class NewIndices,
      +
      1048 class ElementType,
      +
      1049 class Dom,
      +
      1050 class LayoutStridedPolicy,
      +
      1051 class MemorySpace>
      +
      1052struct RelabelizeIndicesOfType<
      +
      1053 Tensor<ElementType, Dom, LayoutStridedPolicy, MemorySpace>,
      +
      1054 OldIndices,
      +
      1055 NewIndices>
      +
      1056{
      +
      1057 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      +
      1058 using type = Tensor<
      +
      1059 ElementType,
      +
      1060 typename RelabelizeIndicesInType<Dom, OldIndices, NewIndices>::type,
      +
      1061 LayoutStridedPolicy,
      +
      1062 MemorySpace>;
      +
      1063};
      +
      1064
      +
      1065template <
      +
      1066 class OldIndices,
      +
      1067 class NewIndices,
      +
      1068 std::size_t I,
      +
      1069 class ElementType,
      +
      1070 class... DDim,
      +
      1071 class LayoutStridedPolicy,
      +
      1072 class MemorySpace>
      +
      1073constexpr auto RelabelizeIndicesOf(
      +
      1074 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      +
      1075 old_tensor)
      +
      1076{
      +
      1077 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      +
      1078 if constexpr (I != ddc::type_seq_size_v<OldIndices>) {
      +
      1079 return RelabelizeIndicesOf<
      +
      1080 ddc::type_seq_replace_t<
      +
      1081 OldIndices,
      +
      1082 ddc::detail::TypeSeq<ddc::type_seq_element_t<I, OldIndices>>,
      +
      1083 ddc::detail::TypeSeq<ddc::type_seq_element_t<I, NewIndices>>>,
      +
      1084 NewIndices,
      +
      1085 I + 1>(relabelize_index_of_t<
      +
      1086 Tensor<ElementType,
      +
      1087 ddc::DiscreteDomain<DDim...>,
      +
      1088 LayoutStridedPolicy,
      +
      1089 MemorySpace>,
      +
      1090 ddc::type_seq_element_t<I, OldIndices>,
      +
      1091 ddc::type_seq_element_t<I, NewIndices>>(
      +
      1092 old_tensor.data_handle(),
      +
      1093 typename detail::RelabelizeIndexInType<
      +
      1094 ddc::DiscreteDomain<DDim...>,
      +
      1095 ddc::type_seq_element_t<I, OldIndices>,
      +
      1096 ddc::type_seq_element_t<I, NewIndices>>::
      +
      1097 type(ddc::DiscreteDomain<typename detail::RelabelizeIndex<
      +
      1098 DDim,
      +
      1099 ddc::type_seq_element_t<I, OldIndices>,
      +
      1100 ddc::type_seq_element_t<I, NewIndices>>::type>(
      +
      1101 ddc::DiscreteElement<typename detail::RelabelizeIndex<
      +
      1102 DDim,
      +
      1103 ddc::type_seq_element_t<I, OldIndices>,
      +
      1104 ddc::type_seq_element_t<I, NewIndices>>::type>(
      +
      1105 old_tensor.domain().front().template uid<DDim>()),
      +
      1106 ddc::DiscreteVector<typename detail::RelabelizeIndex<
      +
      1107 DDim,
      +
      1108 ddc::type_seq_element_t<I, OldIndices>,
      +
      1109 ddc::type_seq_element_t<I, NewIndices>>::type>(
      +
      1110 static_cast<std::size_t>(
      +
      1111 old_tensor.template extent<DDim>())))...)));
      +
      1112 } else {
      +
      1113 return old_tensor;
      +
      1114 }
      +
      1115}
      +
      1116
      +
      1117} // namespace detail
      +
      1118
      +
      1119template <
      +
      1120 misc::Specialization<Tensor> TensorType,
      +
      1121 misc::Specialization<ddc::detail::TypeSeq> OldIndices,
      +
      1122 misc::Specialization<ddc::detail::TypeSeq> NewIndices>
      + +
      1124 = detail::RelabelizeIndicesOfType<TensorType, OldIndices, NewIndices>::type;
      +
      1125
      +
      1126template <
      + + +
      + + +
      1131 Tensor tensor)
      +
      1132{
      +
      1133 static_assert(ddc::type_seq_size_v<OldIndices> == ddc::type_seq_size_v<NewIndices>);
      +
      1134 return detail::RelabelizeIndicesOf<OldIndices, NewIndices, 0>(tensor);
      -
      1145}
      -
      1146
      -
      1147namespace detail {
      -
      1148
      -
      1149// Domain of a tensor result of product between two tensors
      -
      1150template <class Dom1, class Dom2>
      -
      1151struct NaturalTensorProdDomain;
      -
      1152
      -
      1153template <class... DDim1, class... DDim2>
      -
      1154struct NaturalTensorProdDomain<ddc::DiscreteDomain<DDim1...>, ddc::DiscreteDomain<DDim2...>>
      -
      1155{
      -
      1156 using type = ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_merge_t<
      -
      1157 ddc::type_seq_remove_t<ddc::detail::TypeSeq<DDim1...>, ddc::detail::TypeSeq<DDim2...>>,
      -
      1158 ddc::type_seq_remove_t<
      -
      1159 ddc::detail::TypeSeq<DDim2...>,
      -
      1160 ddc::detail::TypeSeq<DDim1...>>>>;
      -
      1161};
      -
      1162
      -
      1163} // namespace detail
      -
      1164
      -
      1165template <
      -
      1166 misc::Specialization<ddc::DiscreteDomain> Dom1,
      - -
      1168using natural_tensor_prod_domain_t = detail::NaturalTensorProdDomain<Dom1, Dom2>::type;
      -
      1169
      -
      1170template <
      - -
      - - -
      1174{
      - +
      1135}
      +
      1136
      +
      1137// Sum of tensors
      +
      1138template <
      +
      1139 class... DDim,
      +
      1140 class ElementType,
      +
      1141 class LayoutStridedPolicy,
      +
      1142 class MemorySpace,
      +
      + +
      1144Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace> tensor_sum(
      +
      1145 Tensor<ElementType, ddc::DiscreteDomain<DDim...>, LayoutStridedPolicy, MemorySpace>
      +
      1146 sum_tensor,
      +
      1147 TensorType... tensor)
      +
      1148{
      +
      1149 ddc::for_each(sum_tensor.domain(), [=](ddc::DiscreteElement<DDim...> elem) {
      +
      1150 sum_tensor(elem) = (tensor(elem) + ...);
      +
      1151 });
      +
      1152 return sum_tensor;
      -
      1176}
      +
      1153}
      +
      1154
      +
      1155namespace detail {
      +
      1156
      +
      1157// Domain of a tensor result of product between two tensors
      +
      1158template <class Dom1, class Dom2>
      +
      1159struct NaturalTensorProdDomain;
      +
      1160
      +
      1161template <class... DDim1, class... DDim2>
      +
      1162struct NaturalTensorProdDomain<ddc::DiscreteDomain<DDim1...>, ddc::DiscreteDomain<DDim2...>>
      +
      1163{
      +
      1164 using type = ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_merge_t<
      +
      1165 ddc::type_seq_remove_t<ddc::detail::TypeSeq<DDim1...>, ddc::detail::TypeSeq<DDim2...>>,
      +
      1166 ddc::type_seq_remove_t<
      +
      1167 ddc::detail::TypeSeq<DDim2...>,
      +
      1168 ddc::detail::TypeSeq<DDim1...>>>>;
      +
      1169};
      +
      1170
      +
      1171} // namespace detail
      +
      1172
      +
      1173template <
      +
      1174 misc::Specialization<ddc::DiscreteDomain> Dom1,
      + +
      1176using natural_tensor_prod_domain_t = detail::NaturalTensorProdDomain<Dom1, Dom2>::type;
      1177
      -
      1178namespace detail {
      -
      1179
      -
      1180// Product between two tensors naturally indexed.
      -
      1181template <class HeadDDim1TypeSeq, class ContractDDimTypeSeq, class TailDDim2TypeSeq>
      -
      1182struct NaturalTensorProd;
      -
      1183
      -
      1184template <class... HeadDDim1, class... ContractDDim, class... TailDDim2>
      -
      1185struct NaturalTensorProd<
      -
      1186 ddc::detail::TypeSeq<HeadDDim1...>,
      -
      1187 ddc::detail::TypeSeq<ContractDDim...>,
      -
      1188 ddc::detail::TypeSeq<TailDDim2...>>
      -
      1189{
      -
      1190 template <class ElementType, class LayoutStridedPolicy, class MemorySpace>
      -
      1191 static Tensor<
      -
      1192 ElementType,
      -
      1193 ddc::DiscreteDomain<HeadDDim1..., TailDDim2...>,
      -
      1194 LayoutStridedPolicy,
      -
      1195 MemorySpace>
      -
      1196 run(Tensor<ElementType,
      -
      1197 ddc::DiscreteDomain<HeadDDim1..., TailDDim2...>,
      -
      1198 LayoutStridedPolicy,
      -
      1199 Kokkos::DefaultHostExecutionSpace::memory_space> prod_tensor,
      -
      1200 Tensor<ElementType,
      -
      1201 ddc::DiscreteDomain<HeadDDim1..., ContractDDim...>,
      -
      1202 LayoutStridedPolicy,
      -
      1203 MemorySpace> tensor1,
      -
      1204 Tensor<ElementType,
      -
      1205 ddc::DiscreteDomain<ContractDDim..., TailDDim2...>,
      +
      1178template <
      + + +
      1184}
      +
      1185
      +
      1186namespace detail {
      +
      1187
      +
      1188// Product between two tensors naturally indexed.
      +
      1189template <class HeadDDim1TypeSeq, class ContractDDimTypeSeq, class TailDDim2TypeSeq>
      +
      1190struct NaturalTensorProd;
      +
      1191
      +
      1192template <class... HeadDDim1, class... ContractDDim, class... TailDDim2>
      +
      1193struct NaturalTensorProd<
      +
      1194 ddc::detail::TypeSeq<HeadDDim1...>,
      +
      1195 ddc::detail::TypeSeq<ContractDDim...>,
      +
      1196 ddc::detail::TypeSeq<TailDDim2...>>
      +
      1197{
      +
      1198 template <class ElementType, class LayoutStridedPolicy, class MemorySpace>
      +
      1199 static Tensor<
      +
      1200 ElementType,
      +
      1201 ddc::DiscreteDomain<HeadDDim1..., TailDDim2...>,
      +
      1202 LayoutStridedPolicy,
      +
      1203 MemorySpace>
      +
      1204 run(Tensor<ElementType,
      +
      1205 ddc::DiscreteDomain<HeadDDim1..., TailDDim2...>,
      1206 LayoutStridedPolicy,
      -
      1207 MemorySpace> tensor2)
      -
      1208 {
      -
      1209 ddc::for_each(
      -
      1210 prod_tensor.domain(),
      -
      1211 [=](ddc::DiscreteElement<HeadDDim1..., TailDDim2...> elem) {
      -
      1212 prod_tensor(elem) = ddc::transform_reduce(
      -
      1213 tensor1.template domain<ContractDDim...>(),
      -
      1214 0.,
      -
      1215 ddc::reducer::sum<ElementType>(),
      -
      1216 [=](ddc::DiscreteElement<ContractDDim...> contract_elem) {
      -
      1217 return tensor1(ddc::select<HeadDDim1...>(elem), contract_elem)
      -
      1218 * tensor2(ddc::select<TailDDim2...>(elem), contract_elem);
      -
      1219 });
      -
      1220 });
      -
      1221 return prod_tensor;
      -
      1222 }
      -
      1223};
      -
      1224
      -
      1225} // namespace detail
      -
      1226
      -
      1227template <
      -
      1228 TensorNatIndex... ProdDDim,
      -
      1229 TensorNatIndex... DDim1,
      -
      1230 TensorNatIndex... DDim2,
      -
      1231 class ElementType,
      -
      1232 class LayoutStridedPolicy,
      -
      1233 class MemorySpace>
      -
      1234Tensor<ElementType,
      -
      1235 ddc::DiscreteDomain<ProdDDim...>,
      -
      1236 LayoutStridedPolicy,
      -
      -
      1237 Kokkos::DefaultHostExecutionSpace::memory_space>
      -
      1238tensor_prod(
      -
      1239 Tensor<ElementType,
      -
      1240 ddc::DiscreteDomain<ProdDDim...>,
      -
      1241 LayoutStridedPolicy,
      -
      1242 Kokkos::DefaultHostExecutionSpace::memory_space> prod_tensor,
      -
      1243 Tensor<ElementType, ddc::DiscreteDomain<DDim1...>, LayoutStridedPolicy, MemorySpace>
      -
      1244 tensor1,
      -
      1245 Tensor<ElementType, ddc::DiscreteDomain<DDim2...>, LayoutStridedPolicy, MemorySpace>
      -
      1246 tensor2)
      -
      1247{
      -
      1248 static_assert(std::is_same_v<
      -
      1249 ddc::type_seq_remove_t<
      -
      1250 ddc::detail::TypeSeq<DDim1...>,
      -
      1251 ddc::detail::TypeSeq<ProdDDim...>>,
      -
      1252 ddc::type_seq_remove_t<
      -
      1253 ddc::detail::TypeSeq<DDim2...>,
      -
      1254 ddc::detail::TypeSeq<ProdDDim...>>>);
      -
      1255 return detail::NaturalTensorProd<
      -
      1256 ddc::type_seq_remove_t<
      -
      1257 ddc::detail::TypeSeq<ProdDDim...>,
      -
      1258 ddc::detail::TypeSeq<DDim2...>>,
      -
      1259 ddc::type_seq_remove_t<
      -
      1260 ddc::detail::TypeSeq<DDim1...>,
      -
      1261 ddc::detail::TypeSeq<ProdDDim...>>,
      -
      1262 ddc::type_seq_remove_t<
      -
      1263 ddc::detail::TypeSeq<ProdDDim...>,
      -
      1264 ddc::detail::TypeSeq<DDim1...>>>::run(prod_tensor, tensor1, tensor2);
      +
      1207 Kokkos::DefaultHostExecutionSpace::memory_space> prod_tensor,
      +
      1208 Tensor<ElementType,
      +
      1209 ddc::DiscreteDomain<HeadDDim1..., ContractDDim...>,
      +
      1210 LayoutStridedPolicy,
      +
      1211 MemorySpace> tensor1,
      +
      1212 Tensor<ElementType,
      +
      1213 ddc::DiscreteDomain<ContractDDim..., TailDDim2...>,
      +
      1214 LayoutStridedPolicy,
      +
      1215 MemorySpace> tensor2)
      +
      1216 {
      +
      1217 ddc::for_each(
      +
      1218 prod_tensor.domain(),
      +
      1219 [=](ddc::DiscreteElement<HeadDDim1..., TailDDim2...> elem) {
      +
      1220 prod_tensor(elem) = ddc::transform_reduce(
      +
      1221 tensor1.template domain<ContractDDim...>(),
      +
      1222 0.,
      +
      1223 ddc::reducer::sum<ElementType>(),
      +
      1224 [=](ddc::DiscreteElement<ContractDDim...> contract_elem) {
      +
      1225 return tensor1(ddc::select<HeadDDim1...>(elem), contract_elem)
      +
      1226 * tensor2(ddc::select<TailDDim2...>(elem), contract_elem);
      +
      1227 });
      +
      1228 });
      +
      1229 return prod_tensor;
      +
      1230 }
      +
      1231};
      +
      1232
      +
      1233} // namespace detail
      +
      1234
      +
      1235template <
      +
      1236 TensorNatIndex... ProdDDim,
      +
      1237 TensorNatIndex... DDim1,
      +
      1238 TensorNatIndex... DDim2,
      +
      1239 class ElementType,
      +
      1240 class LayoutStridedPolicy,
      +
      1241 class MemorySpace>
      +
      1242Tensor<ElementType,
      +
      1243 ddc::DiscreteDomain<ProdDDim...>,
      +
      1244 LayoutStridedPolicy,
      +
      +
      1245 Kokkos::DefaultHostExecutionSpace::memory_space>
      +
      1246tensor_prod(
      +
      1247 Tensor<ElementType,
      +
      1248 ddc::DiscreteDomain<ProdDDim...>,
      +
      1249 LayoutStridedPolicy,
      +
      1250 Kokkos::DefaultHostExecutionSpace::memory_space> prod_tensor,
      +
      1251 Tensor<ElementType, ddc::DiscreteDomain<DDim1...>, LayoutStridedPolicy, MemorySpace>
      +
      1252 tensor1,
      +
      1253 Tensor<ElementType, ddc::DiscreteDomain<DDim2...>, LayoutStridedPolicy, MemorySpace>
      +
      1254 tensor2)
      +
      1255{
      +
      1256 static_assert(std::is_same_v<
      +
      1257 ddc::type_seq_remove_t<
      +
      1258 ddc::detail::TypeSeq<DDim1...>,
      +
      1259 ddc::detail::TypeSeq<ProdDDim...>>,
      +
      1260 ddc::type_seq_remove_t<
      +
      1261 ddc::detail::TypeSeq<DDim2...>,
      +
      1262 ddc::detail::TypeSeq<ProdDDim...>>>);
      +
      1263 return detail::NaturalTensorProd<
      +
      1264 ddc::type_seq_remove_t<
      +
      1265 ddc::detail::TypeSeq<ProdDDim...>,
      +
      1266 ddc::detail::TypeSeq<DDim2...>>,
      +
      1267 ddc::type_seq_remove_t<
      +
      1268 ddc::detail::TypeSeq<DDim1...>,
      +
      1269 ddc::detail::TypeSeq<ProdDDim...>>,
      +
      1270 ddc::type_seq_remove_t<
      +
      1271 ddc::detail::TypeSeq<ProdDDim...>,
      +
      1272 ddc::detail::TypeSeq<DDim1...>>>::run(prod_tensor, tensor1, tensor2);
      -
      1265}
      -
      1266
      -
      1267namespace detail {
      -
      1268
      -
      1269template <class HeadDom, class InterestDom, class TailDom>
      -
      1270struct PrintTensor;
      -
      1271
      -
      1272template <class... HeadDDim, class InterestDDim>
      -
      1273struct PrintTensor<
      -
      1274 ddc::DiscreteDomain<HeadDDim...>,
      -
      1275 ddc::DiscreteDomain<InterestDDim>,
      -
      1276 ddc::DiscreteDomain<>>
      -
      1277{
      -
      1278 template <class TensorType>
      -
      1279 static std::string run(
      -
      1280 std::string& str,
      -
      1281 TensorType const& tensor,
      -
      1282 ddc::DiscreteElement<HeadDDim...> i)
      -
      1283 {
      -
      1284 for (ddc::DiscreteElement<InterestDDim> elem :
      -
      1285 ddc::DiscreteDomain<InterestDDim>(tensor.natural_domain())) {
      -
      1286 str = str + " "
      -
      1287 + std::to_string(tensor.get(tensor.access_element(
      -
      1288 ddc::DiscreteElement<HeadDDim..., InterestDDim>(i, elem))));
      -
      1289 }
      -
      1290 str += "\n";
      -
      1291 return str;
      -
      1292 }
      -
      1293};
      -
      1294
      -
      1295template <class... HeadDDim, class InterestDDim, class HeadOfTailDDim, class... TailOfTailDDim>
      -
      1296struct PrintTensor<
      -
      1297 ddc::DiscreteDomain<HeadDDim...>,
      -
      1298 ddc::DiscreteDomain<InterestDDim>,
      -
      1299 ddc::DiscreteDomain<HeadOfTailDDim, TailOfTailDDim...>>
      -
      1300{
      -
      1301 template <class TensorType>
      -
      1302 static std::string run(
      -
      1303 std::string& str,
      -
      1304 TensorType const& tensor,
      -
      1305 ddc::DiscreteElement<HeadDDim...> i)
      -
      1306 {
      -
      1307 str += "[";
      -
      1308 for (ddc::DiscreteElement<InterestDDim> elem :
      -
      1309 ddc::DiscreteDomain<InterestDDim>(tensor.natural_domain())) {
      -
      1310 str = PrintTensor<
      -
      1311 ddc::DiscreteDomain<HeadDDim..., InterestDDim>,
      -
      1312 ddc::DiscreteDomain<HeadOfTailDDim>,
      -
      1313 ddc::DiscreteDomain<TailOfTailDDim...>>::
      -
      1314 run(str, tensor, ddc::DiscreteElement<HeadDDim..., InterestDDim>(i, elem));
      -
      1315 }
      -
      1316 str += "]\n";
      -
      1317 return str;
      -
      1318 }
      -
      1319};
      -
      1320
      -
      1321} // namespace detail
      -
      1322
      -
      -
      1323template <misc::Specialization<Tensor> TensorType>
      -
      1324std::ostream& operator<<(std::ostream& os, TensorType const& tensor)
      -
      1325{
      -
      1326 std::string str = "";
      -
      1327 os << detail::PrintTensor<
      -
      1328 ddc::DiscreteDomain<>,
      -
      1329 ddc::DiscreteDomain<ddc::type_seq_element_t<
      -
      1330 0,
      -
      1331 ddc::to_type_seq_t<typename TensorType::natural_domain_t>>>,
      -
      1332 ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_remove_t<
      -
      1333 ddc::to_type_seq_t<typename TensorType::natural_domain_t>,
      -
      1334 ddc::detail::TypeSeq<ddc::type_seq_element_t<
      -
      1335 0,
      -
      1336 ddc::to_type_seq_t<typename TensorType::natural_domain_t>>>>>>::
      -
      1337 run(str, tensor, ddc::DiscreteElement<>());
      -
      1338 return os;
      +
      1273}
      +
      1274
      +
      1275namespace detail {
      +
      1276
      +
      1277template <class HeadDom, class InterestDom, class TailDom>
      +
      1278struct PrintTensor;
      +
      1279
      +
      1280template <class... HeadDDim, class InterestDDim>
      +
      1281struct PrintTensor<
      +
      1282 ddc::DiscreteDomain<HeadDDim...>,
      +
      1283 ddc::DiscreteDomain<InterestDDim>,
      +
      1284 ddc::DiscreteDomain<>>
      +
      1285{
      +
      1286 template <class TensorType>
      +
      1287 static std::string run(
      +
      1288 std::string& str,
      +
      1289 TensorType const& tensor,
      +
      1290 ddc::DiscreteElement<HeadDDim...> i)
      +
      1291 {
      +
      1292 for (ddc::DiscreteElement<InterestDDim> elem :
      +
      1293 ddc::DiscreteDomain<InterestDDim>(tensor.natural_domain())) {
      +
      1294 str = str + " "
      +
      1295 + std::to_string(tensor.get(tensor.access_element(
      +
      1296 ddc::DiscreteElement<HeadDDim..., InterestDDim>(i, elem))));
      +
      1297 }
      +
      1298 str += "\n";
      +
      1299 return str;
      +
      1300 }
      +
      1301};
      +
      1302
      +
      1303template <class... HeadDDim, class InterestDDim, class HeadOfTailDDim, class... TailOfTailDDim>
      +
      1304struct PrintTensor<
      +
      1305 ddc::DiscreteDomain<HeadDDim...>,
      +
      1306 ddc::DiscreteDomain<InterestDDim>,
      +
      1307 ddc::DiscreteDomain<HeadOfTailDDim, TailOfTailDDim...>>
      +
      1308{
      +
      1309 template <class TensorType>
      +
      1310 static std::string run(
      +
      1311 std::string& str,
      +
      1312 TensorType const& tensor,
      +
      1313 ddc::DiscreteElement<HeadDDim...> i)
      +
      1314 {
      +
      1315 str += "[";
      +
      1316 for (ddc::DiscreteElement<InterestDDim> elem :
      +
      1317 ddc::DiscreteDomain<InterestDDim>(tensor.natural_domain())) {
      +
      1318 str = PrintTensor<
      +
      1319 ddc::DiscreteDomain<HeadDDim..., InterestDDim>,
      +
      1320 ddc::DiscreteDomain<HeadOfTailDDim>,
      +
      1321 ddc::DiscreteDomain<TailOfTailDDim...>>::
      +
      1322 run(str, tensor, ddc::DiscreteElement<HeadDDim..., InterestDDim>(i, elem));
      +
      1323 }
      +
      1324 str += "]\n";
      +
      1325 return str;
      +
      1326 }
      +
      1327};
      +
      1328
      +
      1329} // namespace detail
      +
      1330
      +
      +
      1331template <misc::Specialization<Tensor> TensorType>
      +
      1332std::ostream& operator<<(std::ostream& os, TensorType const& tensor)
      +
      1333{
      +
      1334 std::string str = "";
      +
      1335 os << detail::PrintTensor<
      +
      1336 ddc::DiscreteDomain<>,
      +
      1337 ddc::DiscreteDomain<ddc::type_seq_element_t<
      +
      1338 0,
      +
      1339 ddc::to_type_seq_t<typename TensorType::natural_domain_t>>>,
      +
      1340 ddc::detail::convert_type_seq_to_discrete_domain_t<ddc::type_seq_remove_t<
      +
      1341 ddc::to_type_seq_t<typename TensorType::natural_domain_t>,
      +
      1342 ddc::detail::TypeSeq<ddc::type_seq_element_t<
      +
      1343 0,
      +
      1344 ddc::to_type_seq_t<typename TensorType::natural_domain_t>>>>>>::
      +
      1345 run(str, tensor, ddc::DiscreteElement<>());
      +
      1346 return os;
      -
      1339}
      -
      1340
      -
      1341} // namespace tensor
      -
      1342
      -
      1343} // namespace sil
      - -
      ddc::cartesian_prod_t< std::conditional_t< TensorNatIndex< Index >, ddc::DiscreteDomain< Index >, typename Index::subindices_domain_t >... > natural_domain_t
      - -
      static constexpr natural_domain_t natural_domain()
      -
      static constexpr natural_domain_t::discrete_element_type canonical_natural_element(ddc::DiscreteElement< MemIndex... > mem_elem)
      -
      static constexpr discrete_element_type access_element()
      -
      static constexpr discrete_domain_type access_domain()
      -
      ddc::DiscreteDomain< Index... > discrete_domain_type
      -
      static constexpr discrete_domain_type mem_domain()
      -
      ddc::DiscreteElement< Index... > discrete_element_type
      -
      ddc:: ChunkSpan< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > base_type
      - - -
      ddc::cartesian_prod_t< non_indices_domain_t, typename accessor_t::natural_domain_t > natural_domain_t
      - -
      ddc::detail::convert_type_seq_to_discrete_domain_t< ddc::type_seq_remove_t< ddc::to_type_seq_t< discrete_domain_type >, ddc::to_type_seq_t< indices_domain_t > > > non_indices_domain_t
      -
      tensor_accessor_for_domain_t< ddc::cartesian_prod_t< std::conditional_t< TensorIndex< DDim >, ddc::DiscreteDomain< DDim >, ddc::DiscreteDomain<> >... > > accessor_t
      -
      KOKKOS_FUNCTION constexpr Tensor(ddc::ChunkSpan< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > other) noexcept
      - - +
      1347}
      +
      1348
      +
      1349} // namespace tensor
      +
      1350
      +
      1351} // namespace sil
      + +
      ddc::cartesian_prod_t< std::conditional_t< TensorNatIndex< Index >, ddc::DiscreteDomain< Index >, typename Index::subindices_domain_t >... > natural_domain_t
      + +
      static constexpr natural_domain_t natural_domain()
      +
      static constexpr natural_domain_t::discrete_element_type canonical_natural_element(ddc::DiscreteElement< MemIndex... > mem_elem)
      +
      static constexpr discrete_element_type access_element()
      +
      static constexpr discrete_domain_type access_domain()
      +
      ddc::DiscreteDomain< Index... > discrete_domain_type
      +
      static constexpr discrete_domain_type mem_domain()
      +
      ddc::DiscreteElement< Index... > discrete_element_type
      +
      ddc:: ChunkSpan< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > base_type
      + + +
      ddc::cartesian_prod_t< non_indices_domain_t, typename accessor_t::natural_domain_t > natural_domain_t
      + +
      ddc::detail::convert_type_seq_to_discrete_domain_t< ddc::type_seq_remove_t< ddc::to_type_seq_t< discrete_domain_type >, ddc::to_type_seq_t< indices_domain_t > > > non_indices_domain_t
      +
      tensor_accessor_for_domain_t< ddc::cartesian_prod_t< std::conditional_t< TensorIndex< DDim >, ddc::DiscreteDomain< DDim >, ddc::DiscreteDomain<> >... > > accessor_t
      +
      KOKKOS_FUNCTION constexpr Tensor(ddc::ChunkSpan< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > other) noexcept
      + +
      Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
      -
      detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
      -
      Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > tensor_sum(Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > sum_tensor, TensorType... tensor)
      -
      constexpr relabelize_indices_in_t< T, OldIndices, NewIndices > relabelize_indices_in(T t)
      -
      detail::RelabelizeIndexInType< T, OldIndex, NewIndex >::type relabelize_index_in_t
      -
      detail::NaturalTensorProdDomain< Dom1, Dom2 >::type natural_tensor_prod_domain_t
      -
      constexpr relabelize_index_in_t< T, OldIndex, NewIndex > relabelize_index_in(T t)
      -
      detail::RelabelizeIndexOfType< TensorType, OldIndex, NewIndex >::type relabelize_index_of_t
      -
      constexpr relabelize_index_of_t< Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >, OldIndex, NewIndex > relabelize_index_of(Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > old_tensor)
      -
      natural_tensor_prod_domain_t< Dom1, Dom2 > natural_tensor_prod_domain(Dom1 dom1, Dom2 dom2)
      -
      constexpr relabelize_indices_of_t< Tensor, OldIndices, NewIndices > relabelize_indices_of(Tensor tensor)
      -
      typename detail::NaturalDomainType< Index >::type natural_domain_t
      -
      detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
      -
      typename detail::RelabelizeIndicesInType< T, OldIndices, NewIndices >::type relabelize_indices_in_t
      +
      detail::RelabelizeIndicesOfType< TensorType, OldIndices, NewIndices >::type relabelize_indices_of_t
      +
      Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > tensor_sum(Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > sum_tensor, TensorType... tensor)
      +
      constexpr relabelize_indices_in_t< T, OldIndices, NewIndices > relabelize_indices_in(T t)
      +
      detail::RelabelizeIndexInType< T, OldIndex, NewIndex >::type relabelize_index_in_t
      +
      detail::NaturalTensorProdDomain< Dom1, Dom2 >::type natural_tensor_prod_domain_t
      +
      constexpr relabelize_index_in_t< T, OldIndex, NewIndex > relabelize_index_in(T t)
      +
      detail::RelabelizeIndexOfType< TensorType, OldIndex, NewIndex >::type relabelize_index_of_t
      +
      constexpr relabelize_index_of_t< Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace >, OldIndex, NewIndex > relabelize_index_of(Tensor< ElementType, ddc::DiscreteDomain< DDim... >, LayoutStridedPolicy, MemorySpace > old_tensor)
      +
      natural_tensor_prod_domain_t< Dom1, Dom2 > natural_tensor_prod_domain(Dom1 dom1, Dom2 dom2)
      +
      constexpr relabelize_indices_of_t< Tensor, OldIndices, NewIndices > relabelize_indices_of(Tensor tensor)
      +
      typename detail::NaturalDomainType< Index >::type natural_domain_t
      +
      detail::TensorAccessorForDomain< Dom >::type tensor_accessor_for_domain_t
      +
      typename detail::RelabelizeIndicesInType< T, OldIndices, NewIndices >::type relabelize_indices_in_t
      The top-level namespace of SimiLie.
      Definition csr.hpp:14
      +
      static KOKKOS_FUNCTION constexpr std::size_t mem_id(std::size_t const natural_id)
      static KOKKOS_FUNCTION constexpr std::size_t mem_id()
      diff --git a/tensor__prod_8hpp_source.html b/tensor__prod_8hpp_source.html index b5334251..0b3e97aa 100644 --- a/tensor__prod_8hpp_source.html +++ b/tensor__prod_8hpp_source.html @@ -678,8 +678,8 @@
      544} // namespace tensor
      545
      546} // namespace sil
      - -
      static constexpr natural_domain_t natural_domain()
      + +
      static constexpr natural_domain_t natural_domain()
      sil::tensor::Tensor< double, ddc::DiscreteDomain< TailTensorIndex... >, Kokkos::layout_right, Kokkos::DefaultHostExecutionSpace::memory_space > tensor_prod(sil::tensor::Tensor< double, ddc::DiscreteDomain< TailTensorIndex... >, Kokkos::layout_right, Kokkos::DefaultHostExecutionSpace::memory_space > prod, sil::tensor::Tensor< double, ddc::DiscreteDomain< HeadTensorIndex >, Kokkos::layout_right, Kokkos::DefaultHostExecutionSpace::memory_space > dense, Csr< N, HeadTensorIndex, TailTensorIndex... > csr)
      Definition csr.hpp:107
      constexpr void check_tensors_compatibility()
      Tensor(ddc::Chunk< ElementType, SupportType, Allocator >) -> Tensor< ElementType, SupportType, Kokkos::layout_right, typename Allocator::memory_space >
      diff --git a/young__tableau_8hpp_source.html b/young__tableau_8hpp_source.html index 5f5bde2a..b762c519 100644 --- a/young__tableau_8hpp_source.html +++ b/young__tableau_8hpp_source.html @@ -1412,7 +1412,7 @@
      1285
      1286#endif
      std::ostream & operator<<(std::ostream &os, Csr< N, TensorIndex... > const &csr)
      Definition csr.hpp:185
      -
      natural_tensor_prod_domain_t< Dom1, Dom2 > natural_tensor_prod_domain(Dom1 dom1, Dom2 dom2)
      +
      natural_tensor_prod_domain_t< Dom1, Dom2 > natural_tensor_prod_domain(Dom1 dom1, Dom2 dom2)
      The top-level namespace of SimiLie.
      Definition csr.hpp:14

133 LaplacianDummyIndex2,