Arcane  v4.1.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MeshVariableScalarRef.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/* MeshVariableScalarRef.h (C) 2000-2025 */
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:
56 typedef ItemVariableScalarRefT<Real> VarType;
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/*---------------------------------------------------------------------------*/
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
82 typedef ArrayView<DataTypeT> ArrayBase;
83 typedef PrivateVariableScalarT<DataTypeT> BaseClass;
84 typedef typename BaseClass::PrivatePartType PrivatePartType;
85 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
86
87 public:
88
90 ARCANE_CORE_EXPORT ItemVariableScalarRefT(const VariableBuildInfo& b,eItemKind ik);
91
93 explicit ARCANE_CORE_EXPORT ItemVariableScalarRefT(IVariable* var);
94
97
98 protected:
99
101 ARCANE_CORE_EXPORT void operator=(const ItemVariableScalarRefT<DataTypeT>& rhs);
102
103#ifdef ARCANE_DOTNET
104 public:
105#else
106 protected:
107#endif
108
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
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
170 ARCANE_CORE_EXPORT void copy(const ItemVariableScalarRefT<DataTypeT>& v,RunQueue* queue);
176 ARCANE_CORE_EXPORT void fill(const DataTypeT& value,RunQueue* queue);
177
178 public:
179
181 const DataType& operator[](ItemLocalId item) const { return this->_value(item.localId()); }
182
184 DataTypeReturnReference operator[](ItemLocalId item) { return this->_value(item.localId()); }
185
187 const DataType& operator()(ItemLocalId item) const { return this->_value(item.localId()); }
188
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/*---------------------------------------------------------------------------*/
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::LocalIdType ItemLocalIdType;
219 typedef ItemVariableScalarRefT<DataTypeT> BaseClass;
220
221 typedef typename ItemTraitsT<ItemType>::ItemGroupType GroupType;
223 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
224
225 public:
226
228 ARCANE_CORE_EXPORT MeshVariableScalarRefT(const VariableBuildInfo& vb);
230 explicit ARCANE_CORE_EXPORT MeshVariableScalarRefT(IVariable* var);
233
235 ARCANE_CORE_EXPORT void refersTo(const MeshVariableScalarRefT<ItemType,DataTypeT>& rhs);
236
237 ThatClass& operator=(const ThatClass& rhs) = delete;
238
239#ifdef ARCANE_DOTNET
240 public:
241#else
242 protected:
243#endif
244
247 ThatClass& _Internal() { return *this; }
248
249 public:
250
251 void fill(const DataTypeT& value) { BaseClass::fill(value); }
252 void fill(const DataTypeT& value,RunQueue* queue) { BaseClass::fill(value,queue); }
253 void fill(const DataTypeT& value,const GroupType& group) { BaseClass::fill(value,group); }
254
256
258 ARCANE_CORE_EXPORT GroupType itemGroup() const;
259
260 ARCANE_CORE_EXPORT void setIsSynchronized();
261 ARCANE_CORE_EXPORT void setIsSynchronized(const GroupType& group);
262
263 public:
264
266 const DataTypeT& operator[](ItemLocalIdType i) const { return this->_value(i.localId()); }
267
269 DataTypeReturnReference operator[](ItemLocalIdType i) { return this->_value(i.localId()); }
270
272 const DataTypeT& operator()(ItemLocalIdType i) const { return this->_value(i.localId()); }
273
275 DataTypeReturnReference operator()(ItemLocalIdType i) { return this->_value(i.localId()); }
276
278 DataTypeT& getReference(ItemLocalIdType item)
279 {
280 return this->_value(item.localId());
281 }
282
283 const DataTypeT& item(ItemLocalIdType i) const
284 {
285 return this->_value(i.localId());
286 }
287 void setItem(ItemLocalIdType i,const DataTypeT& v)
288 {
289 this->_value(i.localId()) = v;
290 }
291#ifdef ARCANE_DOTNET_WRAPPER
292 const DataTypeT& item(Int32 i) const
293 {
294 return this->_value(i);
295 }
296 void setItem(Int32 i,const DataTypeT& v)
297 {
298 this->_value(i) = v;
299 }
300#endif
301
302 public:
303
304 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
305 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(const VariableBuildInfo& vbi);
306
307 private:
308
309 static VariableFactoryRegisterer m_auto_registerer;
310 static VariableRef* _autoCreate(const VariableBuildInfo& vb);
311};
312
313/*---------------------------------------------------------------------------*/
314/*---------------------------------------------------------------------------*/
315
316} // End namespace Arcane
317
318/*---------------------------------------------------------------------------*/
319/*---------------------------------------------------------------------------*/
320
321#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Types et macros pour itérer sur les entités du maillage.
File d'exécution pour un accélérateur.
Vue modifiable d'un tableau d'un type T.
Interface d'une variable.
Definition IVariable.h:39
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Index d'un Item dans une variable.
Definition ItemLocalId.h:41
Caractéristiques des éléments du maillage.
Definition ItemTypes.h:621
Variable scalaire sur un type d'entité du maillage.
ItemVariableScalarRefT(IVariable *var)
Construit une référence à partir de var.
void operator=(const ItemVariableScalarRefT< DataTypeT > &rhs)
Positionne la référence de l'instance à la variable rhs.
ItemVariableScalarRefT(const ItemVariableScalarRefT< DataTypeT > &rhs)
Construit une référence à partir de rhs.
const DataType & operator[](ItemLocalId item) const
Valeur non modifiable de l'entité item.
DataTypeReturnReference operator[](ItemLocalId item)
Valeur modifiable de l'entité item.
void fill(const DataTypeT &value, RunQueue *queue)
Remplit les valeurs de l'instance par value via la file queue.
DataTypeReturnReference operator()(ItemLocalId item)
Valeur modifiable de l'entité item.
void copy(const ItemVariableScalarRefT< DataTypeT > &v, RunQueue *queue)
Copie les valeurs de v dans cette variable via la file queue.
ItemVariableScalarRefT(const VariableBuildInfo &b, eItemKind ik)
Construit une référence à la variable spécifiée dans vb.
const DataType & operator()(ItemLocalId item) const
Valeur non modifiable de l'entité item.
void copy(const ItemVariableScalarRefT< DataTypeT > &v, const ItemGroup &group)
Copie pour les entités de group, les valeurs de v dans cette variable.
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.
MeshVariableScalarRefT(const VariableBuildInfo &vb)
Construit une référence à la variable spécifiée dans vb.
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.
MeshVariableScalarRefT(const MeshVariableScalarRefT< ItemType, DataTypeT > &rhs)
Construit une référence à partir de rhs.
const DataTypeT & operator[](ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
MeshVariableScalarRefT(IVariable *var)
Construit une référence à partir de var.
const DataTypeT & operator()(ItemLocalIdType i) const
Valeur non modifiable de l'entité item.
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.
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.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
double Real
Type représentant un réel.
std::int32_t Int32
Type entier signé sur 32 bits.