Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshVariableScalarRef.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* MeshVariableScalarRef.h (C) 2000-2023 */
9/* */
10/* Classe gérant une variable scalaire sur une entité du maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MESHVARIABLESCALARREF_H
13#define ARCANE_CORE_MESHVARIABLESCALARREF_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
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28namespace Arcane
29{
30
31/*---------------------------------------------------------------------------*/
32/*---------------------------------------------------------------------------*/
33
34template<typename DataTypeT>
36{
37 public:
39 public:
40 static void add(VarType&,const VarType&,const ItemGroup&) { _notSupported(); }
41 static void sub(VarType&,const VarType&,const ItemGroup&) { _notSupported(); }
42 static void mult(VarType&,const VarType&,const ItemGroup&) { _notSupported(); }
43 static void mult(VarType&,const DataTypeT&,const ItemGroup&) { _notSupported(); }
44 static void power(VarType&,const DataTypeT&,const ItemGroup&) { _notSupported(); }
45 static void _notSupported()
46 { ARCANE_FATAL("ItemNumeraticOperation: operation not supported"); }
47};
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51
52template<>
54{
55 public:
57 public:
58 static ARCANE_CORE_EXPORT void add (VarType& out,const VarType& v,const ItemGroup& group);
59 static ARCANE_CORE_EXPORT void sub (VarType& out,const VarType& v,const ItemGroup& group);
60 static ARCANE_CORE_EXPORT void mult (VarType& out,const VarType& v,const ItemGroup& group);
61 static ARCANE_CORE_EXPORT void mult (VarType& out,Real v,const ItemGroup& group);
62 static ARCANE_CORE_EXPORT void power(VarType& out,Real v,const ItemGroup& group);
63};
64
65/*---------------------------------------------------------------------------*/
66/*---------------------------------------------------------------------------*/
67/*!
68 * \ingroup Variable
69 * \brief Variable scalaire sur un type d'entité du maillage.
70 */
71template<typename DataTypeT>
73: public PrivateVariableScalarT<DataTypeT>
74{
75 public:
76
77 typedef DataTypeT DataType;
78 typedef UniqueArray<DataTypeT> ValueType;
79 typedef const DataTypeT& ConstReturnReferenceType;
80 typedef DataTypeT& ReturnReferenceType;
81
84 typedef typename BaseClass::PrivatePartType PrivatePartType;
85 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
86
87 public:
88
89 //! Construit une référence à la variable spécifiée dans \a vb
90 ARCANE_CORE_EXPORT ItemVariableScalarRefT(const VariableBuildInfo& b,eItemKind ik);
91
92 //! Construit une référence à partir de \a var
93 explicit ARCANE_CORE_EXPORT ItemVariableScalarRefT(IVariable* var);
94
95 //! Construit une référence à partir de \a rhs
96 ARCANE_CORE_EXPORT ItemVariableScalarRefT(const ItemVariableScalarRefT<DataTypeT>& rhs);
97
98 protected:
99
100 //! Positionne la référence de l'instance à la variable \a rhs.
101 ARCANE_CORE_EXPORT void operator=(const ItemVariableScalarRefT<DataTypeT>& rhs);
102
103#ifdef ARCANE_DOTNET
104 public:
105#else
106 protected:
107#endif
108
109 //! Constructeur vide
111
112 public:
113
114 void add(const ItemVariableScalarRefT<DataTypeT>& v)
115 {
116 add(v,this->itemGroup());
117 }
118 void sub(const ItemVariableScalarRefT<DataTypeT>& v)
119 {
120 sub(v,this->itemGroup());
121 }
122 void mult(const ItemVariableScalarRefT<DataTypeT>& v)
123 {
124 mult(v,this->itemGroup());
125 }
126 void mult(const DataTypeT& v)
127 {
128 mult(v,this->itemGroup());
129 }
130 void copy(const ItemVariableScalarRefT<DataTypeT>& v)
131 {
132 copy(v,this->itemGroup());
133 }
134 void power(const DataTypeT& v)
135 {
136 power(v,this->itemGroup());
137 }
138
139 void add(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group)
140 {
141 ItemNumericOperation<DataTypeT>::add(*this,v,group);
142 }
143 void sub(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group)
144 {
145 ItemNumericOperation<DataTypeT>::sub(*this,v,group);
146 }
147 void mult(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group)
148 {
149 ItemNumericOperation<DataTypeT>::mult(*this,v,group);
150 }
151 void mult(const DataTypeT& v,const ItemGroup& group)
152 {
153 ItemNumericOperation<DataTypeT>::mult(*this,v,group);
154 }
155 void power(const DataTypeT& v,const ItemGroup& group)
156 {
157 ItemNumericOperation<DataTypeT>::power(*this,v,group);
158 }
159
160 //! Copie pour les entités de \a group, les valeurs de \a v dans cette variable.
161 ARCANE_CORE_EXPORT void copy(const ItemVariableScalarRefT<DataTypeT>& v,const ItemGroup& group);
162 ARCANE_CORE_EXPORT void fill(const DataTypeT& value);
163 ARCANE_CORE_EXPORT void fill(const DataTypeT& value,const ItemGroup& group);
164
165 /*!
166 * \brief Copie les valeurs de \a v dans cette variable via la file \a queue.
167 *
168 * \a queue peut être nul.
169 */
170 ARCANE_CORE_EXPORT void copy(const ItemVariableScalarRefT<DataTypeT>& v,RunQueue* queue);
171 /*!
172 * \brief Remplit les valeurs de l'instance par \a value via la file \a queue.
173 *
174 * \a queue peut être nul.
175 */
176 ARCANE_CORE_EXPORT void fill(const DataTypeT& value,RunQueue* queue);
177
178 public:
179
180 //! Valeur non modifiable de l'entité \a item
181 const DataType& operator[](ItemLocalId item) const { return this->_value(item.localId()); }
182
183 //! Valeur modifiable de l'entité \a item
184 DataTypeReturnReference operator[](ItemLocalId item) { return this->_value(item.localId()); }
185
186 //! Valeur non modifiable de l'entité \a item
187 const DataType& operator()(ItemLocalId item) const { return this->_value(item.localId()); }
188
189 //! Valeur modifiable de l'entité \a item
190 DataTypeReturnReference operator()(ItemLocalId item) { return this->_value(item.localId()); }
191
192 public:
193
194 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(const VariableBuildInfo& vbi,eItemKind ik);
195 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo(eItemKind ik);
196};
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
200/*!
201 * \ingroup Variable
202 * \brief Variable scalaire sur un type d'entité du maillage.
203 */
204template<typename ItemTypeT,typename DataTypeT>
206: public ItemVariableScalarRefT<DataTypeT>
207{
208 public:
209
210 typedef DataTypeT DataType;
211 typedef ItemTypeT ItemType;
212 typedef UniqueArray<DataTypeT> ValueType;
213 typedef const DataTypeT& ConstReturnReferenceType;
214 typedef DataTypeT& ReturnReferenceType;
215
216 protected:
217
218 typedef typename ItemType::Index ItemIndexType;
219 typedef typename ItemType::LocalIdType ItemLocalIdType;
220 typedef ItemVariableScalarRefT<DataTypeT> BaseClass;
221
222 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
224 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
225
226 public:
227
228 //! Construit une référence à la variable spécifiée dans \a vb
229 ARCANE_CORE_EXPORT MeshVariableScalarRefT(const VariableBuildInfo& vb);
230 //! Construit une référence à partir de \a var
231 explicit ARCANE_CORE_EXPORT MeshVariableScalarRefT(IVariable* var);
232 //! Construit une référence à partir de \a rhs
234
235 //! Positionne la référence de l'instance à la variable \a rhs.
236 ARCANE_CORE_EXPORT void refersTo(const MeshVariableScalarRefT<ItemType,DataTypeT>& rhs);
237
238 ThatClass& operator=(const ThatClass& rhs) = delete;
239
240#ifdef ARCANE_DOTNET
241 public:
242#else
243 protected:
244#endif
245
246 //! Constructeur vide
248 ThatClass& _Internal() { return *this; }
249
250 public:
251
252 void fill(const DataTypeT& value) { BaseClass::fill(value); }
253 void fill(const DataTypeT& value,RunQueue* queue) { BaseClass::fill(value,queue); }
254 void fill(const DataTypeT& value,const GroupType& group) { BaseClass::fill(value,group); }
255
256 ARCANE_CORE_EXPORT void swapValues(MeshVariableScalarRefT<ItemType,DataType>& rhs);
257
258 //! Groupe associé à la grandeur
259 ARCANE_CORE_EXPORT GroupType itemGroup() const;
260
261 ARCANE_CORE_EXPORT void setIsSynchronized();
262 ARCANE_CORE_EXPORT void setIsSynchronized(const GroupType& group);
263
264 public:
265
266 //! Valeur non modifiable de l'entité \a item
267 const DataTypeT& operator[](ItemLocalIdType i) const { return this->_value(i.localId()); }
268
269 //! Valeur modifiable de l'entité \a item
270 DataTypeReturnReference operator[](ItemLocalIdType i) { return this->_value(i.localId()); }
271
272 //! Valeur non modifiable de l'entité \a item
273 const DataTypeT& operator()(ItemLocalIdType i) const { return this->_value(i.localId()); }
274
275 //! Valeur modifiable de l'entité \a item
276 DataTypeReturnReference operator()(ItemLocalIdType i) { return this->_value(i.localId()); }
277
278 //! Valeur modifiable de l'entité \a item
279 DataTypeT& getReference(ItemLocalIdType item)
280 {
281 return this->_value(item.localId());
282 }
283
284 const DataTypeT& item(ItemLocalIdType i) const
285 {
286 return this->_value(i.localId());
287 }
288 void setItem(ItemLocalIdType i,const DataTypeT& v)
289 {
290 this->_value(i.localId()) = v;
291 }
292#ifdef ARCANE_DOTNET_WRAPPER
293 const DataTypeT& item(Int32 i) const
294 {
295 return this->_value(i);
296 }
297 void setItem(Int32 i,const DataTypeT& v)
298 {
299 this->_value(i) = v;
300 }
301#endif
302
303 public:
304
305 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
306 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(const VariableBuildInfo& vbi);
307
308 private:
309
310 static VariableFactoryRegisterer m_auto_registerer;
311 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
312};
313
314/*---------------------------------------------------------------------------*/
315/*---------------------------------------------------------------------------*/
316
317} // End namespace Arcane
318
319/*---------------------------------------------------------------------------*/
320/*---------------------------------------------------------------------------*/
321
322#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et macros pour itérer sur les entités du maillage.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Index d'un Item dans une variable.
Definition ItemLocalId.h:40
Variable scalaire sur un type d'entité du maillage.
void operator=(const ItemVariableScalarRefT< DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
const DataType & operator[](ItemLocalId item) const
Valeur non modifiable de l'entité item.
DataTypeReturnReference operator[](ItemLocalId item)
Valeur modifiable de l'entité item.
DataTypeReturnReference operator()(ItemLocalId item)
Valeur modifiable de l'entité item.
const DataType & operator()(ItemLocalId item) const
Valeur non modifiable de l'entité item.
Variable scalaire sur un type d'entité du maillage.
DataTypeReturnReference operator[](ItemLocalIdType i)
Valeur modifiable de l'entité item.
GroupType itemGroup() const
Groupe associé à la grandeur.
DataTypeReturnReference operator()(ItemLocalIdType i)
Valeur modifiable de l'entité item.
DataTypeT & getReference(ItemLocalIdType item)
Valeur modifiable de l'entité item.
void refersTo(const MeshVariableScalarRefT< ItemType, DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
void swapValues(MeshVariableScalarRefT< ItemType, DataType > &rhs)
Échange les valeurs de la variable rhs avec celles de l'instance.
const DataTypeT & operator[](ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
const DataTypeT & operator()(ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
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.
VariableRef(const VariableBuildInfo &vbi)
Construit une référence sur une variable avec les infos vbi.
Informations caractérisant le type d'une variable.
Vue modifiable d'un tableau d'un type T.
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.