Arcane  v3.16.8.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-2025 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-2025 */
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;
45 typedef UniqueArray<DataType> ValueType;
46 typedef const DataType& ConstReturnReferenceType;
47 typedef DataType& ReturnReferenceType;
48
49 protected:
50
51 typedef PrivateVariableScalarT<DataType> BaseClass;
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;
163 typedef UniqueArray<DataType> ValueType;
164 typedef const DataType& ConstReturnReferenceType;
165 typedef DataType& ReturnReferenceType;
166 typedef ItemLocalIdT<ItemType> ItemLocalIdType;
167
169
170 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
171
173 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
174
175 public:
176
183
184 public:
185
186 const DataType& operator[](const ItemLocalIdType& i) const
187 {
188 ARCANE_ASSERT((this->m_table.isUsed()), ("GroupIndexTable expired"));
189 const GroupIndexTable& table = *this->m_table;
190 return this->_value(table[i.asInt32()]);
191 }
192 DataTypeReturnReference operator[](const ItemLocalIdType& i)
193 {
194 ARCANE_ASSERT((this->m_table.isUsed()), ("GroupIndexTable expired"));
195 const GroupIndexTable& table = *this->m_table;
196 return this->_value(table[i.asInt32()]);
197 }
198
199 const DataType& operator[](const ItemGroupRangeIteratorT<ItemType>& i) const
200 {
201 return this->_value(i.index());
202 }
203 DataTypeReturnReference operator[](const ItemGroupRangeIteratorT<ItemType>& i)
204 {
205 return this->_value(i.index());
206 }
207 const DataType& operator[](const ItemEnumeratorT<ItemType>& i) const
208 {
209 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
210 return this->_value(i.index());
211 }
212 const DataType& operator[](ItemEnumeratorIndexT<ItemType> i) const
213 {
214 return this->_value(i.index());
215 }
216 DataTypeReturnReference operator[](const ItemEnumeratorT<ItemType>& i)
217 {
218 ARCANE_CHECK_ENUMERATOR(i,this->itemGroup());
219 return this->_value(i.index());
220 }
221 DataTypeReturnReference operator[](ItemEnumeratorIndexT<ItemType> i)
222 {
223 return this->_value(i.index());
224 }
225 const DataType& operator[](const ItemPairEnumeratorSubT<ItemType>& i) const
226 {
227 return this->_value(i.index());
228 }
229 DataTypeReturnReference operator[](const ItemPairEnumeratorSubT<ItemType>& i)
230 {
231 return this->_value(i.index());
232 }
233
235 ARCANE_CORE_EXPORT GroupType itemGroup() const;
236
237 private:
238
239 static VariableFactoryRegisterer m_auto_registerer;
240 //static VariableInfo _buildVariableInfo(const VariableBuildInfo& vbi);
241 static VariableTypeInfo _buildVariableTypeInfo();
242 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
243};
244
245/*---------------------------------------------------------------------------*/
246/*---------------------------------------------------------------------------*/
247
248} // End namespace Arcane
249
250/*---------------------------------------------------------------------------*/
251/*---------------------------------------------------------------------------*/
252
253#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:39
Index d'une entité ItemType dans une variable.
Definition ItemLocalId.h:90
ItemPartialVariableScalarRefT(const VariableBuildInfo &vb, eItemKind ik)
Construit une référence à la variable spécifiée dans vb.
GroupIndexTableView tableView() const
Vue sur table d'indirection du groupe.
ItemPartialVariableScalarRefT(IVariable *var)
Construit une référence à partir de var.
void operator=(const ItemPartialVariableScalarRefT< DataType > &rhs)
Opérateur de recopie.
ItemPartialVariableScalarRefT(const ItemPartialVariableScalarRefT< DataType > &rhs)
Construit une référence à partir de rhs.
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:219
void refersTo(const MeshPartialVariableScalarRefT< ItemType, DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
MeshPartialVariableScalarRefT(const MeshPartialVariableScalarRefT< ItemType, DataType > &rhs)
Construit une référence à partir de rhs.
MeshPartialVariableScalarRefT(const VariableBuildInfo &vb)
Construit une référence à la variable spécifiée dans vb.
GroupType itemGroup() const
Groupe associé à la grandeur.
PrivateVariableScalarT(const VariableBuildInfo &vb, const VariableInfo &vi)
Vecteur 1D de données avec sémantique par valeur (style STL).
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.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.