Arcane  v3.14.10.0
Documentation développeur
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/*---------------------------------------------------------------------------*/
38template<typename DataTypeT>
40: public PrivateVariableArrayT<DataTypeT>
41{
42 public:
43
44 typedef DataTypeT DataType;
48
49 protected:
50
52 typedef typename BaseClass::PrivatePartType PrivatePartType;
53
56
57 public:
58
61
63 explicit ARCANE_CORE_EXPORT ItemPartialVariableArrayRefT(IVariable* var);
64
67
68 protected:
69
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
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/*---------------------------------------------------------------------------*/
145template<typename ItemTypeT,typename DataTypeT>
147: public ItemPartialVariableArrayRefT<DataTypeT>
148{
149 public:
150
151 typedef DataTypeT DataType;
152 typedef ItemTypeT ItemType;
156
157 public:
158
160
161 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
162
164
167
168 public:
169
171 ARCANE_CORE_EXPORT MeshPartialVariableArrayRefT(const VariableBuildInfo& vb);
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
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.
Classe de base d'une table de hachage entre les items d'un groupe et leurs positions dans la table.
Interface d'une variable.
Definition IVariable.h:54
constexpr Integer index() const
Indice courant de l'énumérateur.
Représente un index d'une énumération sur une entité.
Enumérateur sur une liste d'entités.
Iterateur sur les éléments d'un groupe.
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.
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
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
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
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.
Enregistreur d'une fabrique de variables.
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.