12#ifndef ARCANE_CORE_MESHVECTORMDVARIABLEREF_H
13#define ARCANE_CORE_MESHVECTORMDVARIABLEREF_H
17#include "arcane/utils/NumVector.h"
19#include "arcane/core/DataView.h"
20#include "arcane/core/MeshMDVariableRef.h"
37template <
typename ItemType,
typename DataType_,
int Size,
typename Extents>
38class MeshVectorMDVariableRefT
39:
public MeshMDVariableRefBaseT<ItemType, DataType_, typename Extents::template AddedFirstLastExtentsType<DynExtent, Size>>
47 using DataType = DataType_;
53 using AddedFirstLastExtentsType =
typename Extents::template AddedFirstLastExtentsType<DynExtent, Size>;
54 using AddedFirstExtentsType =
typename Extents::template AddedFirstExtentsType<DynExtent>;
55 using BaseClass = MeshMDVariableRefBaseT<ItemType, DataType, AddedFirstLastExtentsType>;
56 static_assert(Extents::rank() >= 0 && Extents::rank() <= 2,
"Only Extents of rank 0, 1 or 2 are implemented");
57 static_assert(std::is_same_v<DataType, BasicType>,
"DataType should be a basic type (Real, Int32, Int64, ... )");
61 using ItemLocalIdType =
typename ItemType::LocalIdType;
65 static constexpr int nb_dynamic = Extents::nb_dynamic;
79 requires(Extents::rank() == 0)
81 return ReferenceType(m_vector_mdspan.ptrAt(
id.localId()));
86 requires(Extents::rank() == 0)
88 return ConstReferenceType(m_vector_mdspan.ptrAt(
id.localId()));
96 requires(Extents::rank() == 1)
98 return ReferenceType(m_vector_mdspan.ptrAt(
id.localId(), i1));
103 requires(Extents::rank() == 1)
105 return ConstReferenceType(m_vector_mdspan.ptrAt(
id.localId(), i1));
113 requires(Extents::rank() == 2)
115 return ReferenceType(m_vector_mdspan.ptrAt(
id.localId(), i1, i2));
120 requires(Extents::rank() == 2)
122 return ConstReferenceType(m_vector_mdspan.ptrAt(
id.localId(), i1, i2));
132 void reshape(std::array<Int32, Extents::nb_dynamic> dims)
134 std::array<Int32, nb_dynamic + 1> full_dims;
136 for (
int i = 0; i < nb_dynamic; ++i)
137 full_dims[i] = dims[i];
138 full_dims[nb_dynamic] = Size;
140 this->m_underlying_var.resizeAndReshape(shape);
152 DataType* v = this->m_mdspan.to1DSpan().data();
153 NumVectorType* nv =
reinterpret_cast<NumVectorType*
>(v);
154 m_vector_mdspan = MDSpanType(nv, this->m_mdspan.extents().dynamicExtents());
159 MDSpanType m_vector_mdspan;
Vue en lecture/écriture de variable vectorielle multidimensionnelle sur un élément de maillage.
Vue en lecture seule de variable vectorielle multidimensionnelle sur un élément de maillage.
Classe pour accéder à un élément d'une vue en lecture/écriture.
Classe pour accéder à un élément d'une vue en lecture.
Classe de base des vues multi-dimensionnelles.
void updateFromInternal() override
ReferenceType operator()(ItemLocalIdType id, Int32 i1)
ConstReferenceType operator()(ItemLocalIdType id) const
Accède aux données en lecture.
ReferenceType operator()(ItemLocalIdType id, Int32 i1, Int32 i2)
void updateFromInternal() override
Mise à jour à partir de la partie interne.
void reshape(std::array< Int32, Extents::nb_dynamic > dims)
Change la forme des données.
ConstReferenceType operator()(ItemLocalIdType id, Int32 i1, Int32 i2) const
Accède aux données en lecture.
ReferenceType operator()(ItemLocalIdType id)
ConstReferenceType operator()(ItemLocalIdType id, Int32 i1) const
Accède aux données en lecture.
Petit vecteur de taille fixe de points de données numériques de taille Size.
Paramètres nécessaires à la construction d'une variable.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int32_t Int32
Type entier signé sur 32 bits.