Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshPartialVariableScalarRef.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/* MeshPartialVariableScalarRef.h (C) 2000-2024 */
9/* */
10/* Classe gérant une variable partielle scalaire sur une entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHPARTIALVARIABLESCALARREF_H
13#define ARCANE_CORE_MESHPARTIALVARIABLESCALARREF_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/FatalErrorException.h"
18
19#include "arcane/core/MeshVariableRef.h"
20#include "arcane/core/PrivateVariableScalar.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 PrivateVariableScalarT<DataTypeT>
41{
42 public:
43
44 typedef DataTypeT DataType;
48
49 protected:
50
52 typedef typename BaseClass::PrivatePartType PrivatePartType;
53 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
54
55 public:
56
60 explicit ARCANE_CORE_EXPORT ItemPartialVariableScalarRefT(IVariable* var);
63
64 protected:
65
67 ARCANE_CORE_EXPORT void operator=(const ItemPartialVariableScalarRefT<DataType>& rhs);
68
69 public:
70
71 ARCANE_CORE_EXPORT void fill(const DataType& value);
72 ARCANE_CORE_EXPORT void copy(const ItemPartialVariableScalarRefT<DataType>& v);
73 ARCANE_CORE_EXPORT void internalSetUsed(bool v);
74
75 public:
76
77 const DataType& operator[](const Item& i) const
78 {
79 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
80 ARCANE_ASSERT((m_table.isUsed()),("GroupIndexTable expired"));
81 const GroupIndexTable& table = *m_table;
82 return this->_value(table[i.localId()]);
83 }
84 DataTypeReturnReference operator[](const Item& i)
85 {
86 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
87 ARCANE_ASSERT((m_table.isUsed()),("GroupIndexTable expired"));
88 const GroupIndexTable& table = *m_table;
89 return this->_value(table[i.localId()]);
90 }
91
92 const DataType& operator[](const ItemGroupRangeIterator& i) const
93 {
94 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
95 return this->_value(i.index());
96 }
97 const DataType& operator[](const ItemEnumerator& i) const
98 {
99 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
100 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
101 return this->_value(i.index());
102 }
103 const DataType& operator[](ItemEnumeratorIndex i) const
104 {
105 return this->_value(i.index());
106 }
107 const DataType& operator[](const ItemPairEnumerator& i) const
108 {
109 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
110 return this->_value(i.index());
111 }
112
113 DataTypeReturnReference operator[](const ItemGroupRangeIterator& i)
114 {
115 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND(i);
116 return this->_value(i.index());
117 }
118 DataTypeReturnReference operator[](const ItemEnumerator& i)
119 {
120 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
121 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
122 return this->_value(i.index());
123 }
124 DataTypeReturnReference operator[](ItemEnumeratorIndex i)
125 {
126 return this->_value(i.index());
127 }
128 DataTypeReturnReference operator[](const ItemPairEnumerator& i)
129 {
130 ARCANE_CHECK_VALID_ITEM_AND_GROUP_KIND((*i));
131 return this->_value(i.index());
132 }
133
134 public:
135
137 GroupIndexTableView tableView() const { return m_table->view(); }
138
139 protected:
140
142
143 protected:
144
145 static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi,eItemKind ik);
146 static VariableTypeInfo _buildVariableTypeInfo(eItemKind ik);
147};
148
149/*---------------------------------------------------------------------------*/
150/*---------------------------------------------------------------------------*/
155template<typename ItemTypeT,typename DataTypeT>
157: public ItemPartialVariableScalarRefT<DataTypeT>
158{
159 public:
160
161 typedef DataTypeT DataType;
162 typedef ItemTypeT ItemType;
164 typedef const DataType& ConstReturnReferenceType;
166
168
169 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
170
172 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
173
174 public:
175
177 ARCANE_CORE_EXPORT MeshPartialVariableScalarRefT(const VariableBuildInfo& vb);
181 ARCANE_CORE_EXPORT void refersTo(const MeshPartialVariableScalarRefT<ItemType,DataType>& rhs);
182
183 public:
184
185 const DataType& operator[](const ItemType& i) const
186 {
187 ARCANE_ASSERT((this->m_table.isUsed()),("GroupIndexTable expired"));
188 const GroupIndexTable& table = *this->m_table;
189 return this->_value(table[i.localId()]);
190 }
191 DataTypeReturnReference operator[](const ItemType& i)
192 {
193 ARCANE_ASSERT((this->m_table.isUsed()),("GroupIndexTable expired"));
194 const GroupIndexTable& table = *this->m_table;
195 return this->_value(table[i.localId()]);
196 }
197
198 const DataType& operator[](const ItemGroupRangeIteratorT<ItemType>& i) const
199 {
200 return this->_value(i.index());
201 }
202 DataTypeReturnReference operator[](const ItemGroupRangeIteratorT<ItemType>& i)
203 {
204 return this->_value(i.index());
205 }
206 const DataType& operator[](const ItemEnumeratorT<ItemType>& i) const
207 {
208 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
209 return this->_value(i.index());
210 }
211 const DataType& operator[](ItemEnumeratorIndexT<ItemType> i) const
212 {
213 return this->_value(i.index());
214 }
215 DataTypeReturnReference operator[](const ItemEnumeratorT<ItemType>& i)
216 {
217 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
218 return this->_value(i.index());
219 }
220 DataTypeReturnReference operator[](ItemEnumeratorIndexT<ItemType> i)
221 {
222 return this->_value(i.index());
223 }
224 const DataType& operator[](const ItemPairEnumeratorSubT<ItemType>& i) const
225 {
226 return this->_value(i.index());
227 }
228 DataTypeReturnReference operator[](const ItemPairEnumeratorSubT<ItemType>& i)
229 {
230 return this->_value(i.index());
231 }
232
234 ARCANE_CORE_EXPORT GroupType itemGroup() const;
235
236 private:
237
238 static VariableFactoryRegisterer m_auto_registerer;
239 //static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi);
240 static VariableTypeInfo _buildVariableTypeInfo();
241 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
242};
243
244/*---------------------------------------------------------------------------*/
245/*---------------------------------------------------------------------------*/
246
247} // End namespace Arcane
248
249/*---------------------------------------------------------------------------*/
250/*---------------------------------------------------------------------------*/
251
252#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.
Enumérateur sur un tableau de tableaux d'entités du maillage.
Variable partielle scalaire sur un type d'entité du maillage.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
void operator=(const ItemPartialVariableScalarRefT< 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 MeshPartialVariableScalarRefT< 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.
Vecteur 1D de données 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.