Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshPartialVariableArrayRef.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* MeshPartialVariableArrayRef.h (C) 2000-2024 */
9/* */
10/* Classe gérant une variable partielle array sur une entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHPARTIALVARIABLEARRAYREF_H
13#define ARCANE_CORE_MESHPARTIALVARIABLEARRAYREF_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/FatalErrorException.h"
18
19#include "arcane/core/MeshVariableRef.h"
20#include "arcane/core/PrivateVariableArray.h"
22#include "arcane/core/ItemGroupRangeIterator.h"
23#include "arcane/core/ItemPairEnumerator.h"
24#include "arcane/core/GroupIndexTable.h"
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Arcane
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34/*!
35 * \ingroup Variable
36 * \brief Variable partielle scalaire sur un type d'entité du maillage.
37 */
38template<typename DataTypeT>
40: public PrivateVariableArrayT<DataTypeT>
41{
42 public:
43
44 typedef DataTypeT DataType;
45 typedef UniqueArray2<DataType> ValueType;
48
49 protected:
50
51 typedef PrivateVariableArrayT<DataType> BaseClass;
52 typedef typename BaseClass::PrivatePartType PrivatePartType;
53
56
57 public:
58
59 //! Construit une référence à la variable spécifiée dans \a vb
60 ARCANE_CORE_EXPORT ItemPartialVariableArrayRefT(const VariableBuildInfo& vb,eItemKind ik);
61
62 //! Construit une référence à partir de \a var
63 explicit ARCANE_CORE_EXPORT ItemPartialVariableArrayRefT(IVariable* var);
64
65 //! Construit une référence à partir de \a rhs
67
68 protected:
69
70 //! Opérateur de recopie
71 ARCANE_CORE_EXPORT void operator=(const ItemPartialVariableArrayRefT<DataType>& rhs);
72
73 public:
74
75 ARCANE_CORE_EXPORT void fill(const DataType& value);
76 ARCANE_CORE_EXPORT void copy(const ItemPartialVariableArrayRefT<DataType>& v);
77 ARCANE_CORE_EXPORT void internalSetUsed(bool v);
78
79 public:
80
81 ConstArrayType operator[](const Item& i) const
82 {
83 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
84 ARCANE_ASSERT((m_table.isUsed()),("GroupIndexTable expired"));
85 const GroupIndexTable& table = *m_table;
86 return this->m_view[table[i.localId()]];
87 }
88 ArrayType operator[](const Item& i)
89 {
90 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
91 ARCANE_ASSERT((m_table.isUsed()),("GroupIndexTable expired"));
92 const GroupIndexTable& table = *m_table;
93 return this->m_view[table[i.localId()]];
94 }
95 ConstArrayType operator[](const ItemGroupRangeIterator& i) const
96 {
97 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
98 return this->m_view[i.index()];
99 }
100 ArrayType operator[](const ItemGroupRangeIterator& i)
101 {
102 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
103 return this->m_view[i.index()];
104 }
105 ConstArrayType operator[](const ItemEnumerator& i) const
106 {
107 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
108 return this->m_view[i.index()];
109 }
110 ArrayType operator[](const ItemEnumerator& i)
111 {
112 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
113 return this->m_view[i.index()];
114 }
115 ConstArrayType operator[](ItemEnumeratorIndex i) const
116 {
117 return this->m_view[i.index()];
118 }
119 ArrayType operator[](ItemEnumeratorIndex i)
120 {
121 return this->m_view[i.index()];
122 }
123
124 public:
125
126 //! Vue sur table d'indirection du groupe.
127 GroupIndexTableView tableView() const { return m_table->view(); }
128
129 protected:
130
132
133 protected:
134
135 static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi,eItemKind ik);
136 static VariableTypeInfo _buildVariableTypeInfo(eItemKind ik);
137};
138
139/*---------------------------------------------------------------------------*/
140/*---------------------------------------------------------------------------*/
141/*!
142 * \ingroup Variable
143 * \brief Variable scalaire sur un type d'entité du maillage.
144 */
145template<typename ItemTypeT,typename DataTypeT>
147: public ItemPartialVariableArrayRefT<DataTypeT>
148{
149 public:
150
151 typedef DataTypeT DataType;
152 typedef ItemTypeT ItemType;
153 typedef UniqueArray2<DataType> ValueType;
156
157 public:
158
160
161 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
162
164
167
168 public:
169
170 //! Construit une référence à la variable spécifiée dans \a vb
171 ARCANE_CORE_EXPORT MeshPartialVariableArrayRefT(const VariableBuildInfo& vb);
172 //! Construit une référence à partir de \a rhs
174 //! Positionne la référence de l'instance à la variable \a rhs.
175 ARCANE_CORE_EXPORT void refersTo(const MeshPartialVariableArrayRefT<ItemType,DataType>& rhs);
176
177 public:
178
179 ConstArrayType operator[](const ItemType& i) const
180 {
181 ARCANE_ASSERT((this->m_table.isUsed()),("GroupIndexTable expired"));
182 const GroupIndexTable& table = *this->m_table;
183 return this->m_view[table[i.localId()]];
184 }
185 ArrayType operator[](const ItemType& i)
186 {
187 ARCANE_ASSERT((this->m_table.isUsed()),("GroupIndexTable expired"));
188 const GroupIndexTable& table = *this->m_table;
189 return this->m_view[table[i.localId()]];
190 }
191 ConstArrayType operator[](const ItemGroupRangeIteratorT<ItemType>& i) const
192 {
193 return this->m_view[i.index()];
194 }
196 {
197 return this->m_view[i.index()];
198 }
199 ConstArrayType operator[](const ItemPairEnumeratorSubT<ItemType>& i) const
200 {
201 return this->m_view[i.index()];
202 }
204 {
205 return this->m_view[i.index()];
206 }
207 ConstArrayType operator[](const ItemEnumeratorT<ItemType>& i) const
208 {
209 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
210 return this->m_view[i.index()];
211 }
212 ArrayType operator[](const ItemEnumeratorT<ItemType>& i)
213 {
214 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
215 return this->m_view[i.index()];
216 }
218 {
219 return this->m_view[i.index()];
220 }
222 {
223 return this->m_view[i.index()];
224 }
225
226 //! Groupe associé à la grandeur
227 ARCANE_CORE_EXPORT GroupType itemGroup() const;
228
229 private:
230
231 static VariableFactoryRegisterer m_auto_registerer;
232 static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi);
233 static VariableTypeInfo _buildVariableTypeInfo();
234 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
235};
236
237/*---------------------------------------------------------------------------*/
238/*---------------------------------------------------------------------------*/
239
240} // End namespace Arcane
241
242/*---------------------------------------------------------------------------*/
243/*---------------------------------------------------------------------------*/
244
245#endif
Types et macros pour itérer sur les entités du maillage.
constexpr Integer index() const
Indice courant de l'énumérateur.
Représente un index d'une énumération sur une entité ItemType.
Représente un index d'une énumération sur une entité.
Enumérateur sur une liste typée d'entités de type ItemType.
Enumérateur sur une liste d'entités.
Intervalle d'itération sur un groupe d'entités de maillage.
Iterateur sur les éléments d'un groupe.
Enumérateur sur un tableau de tableaux d'entités du maillage de genre ItemType et SubItemType.
Variable partielle scalaire sur un type d'entité du maillage.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
void operator=(const ItemPartialVariableArrayRefT< DataType > &rhs)
Opérateur de recopie.
Classe de base d'un élément de maillage.
Definition Item.h:83
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
Definition Item.h:210
Variable scalaire sur un type d'entité du maillage.
void refersTo(const MeshPartialVariableArrayRefT< ItemType, DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
GroupType itemGroup() const
Groupe associé à la grandeur.
Classe de factorisation des variables scalaires sur des entités du maillage.
Paramètres nécessaires à la construction d'une variable.
Infos caractérisant une variable.
Référence à une variable.
Definition VariableRef.h:56
Informations caractérisant le type d'une variable.
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.
Vecteur de données 2D avec sémantique par valeur (style STL).
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.