12#ifndef ARCANE_CORE_MESHVARIABLESCALARREF_H
13#define ARCANE_CORE_MESHVARIABLESCALARREF_H
17#include "arcane/utils/FatalErrorException.h"
19#include "arcane/core/MeshVariableRef.h"
20#include "arcane/core/PrivateVariableScalar.h"
22#include "arcane/core/ItemGroupRangeIterator.h"
23#include "arcane/core/ItemPairEnumerator.h"
34template<
typename DataTypeT>
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"); }
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);
71template<
typename DataTypeT>
77 typedef DataTypeT DataType;
79 typedef const DataTypeT& ConstReturnReferenceType;
80 typedef DataTypeT& ReturnReferenceType;
84 typedef typename BaseClass::PrivatePartType PrivatePartType;
85 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
116 add(v,this->itemGroup());
120 sub(v,this->itemGroup());
124 mult(v,this->itemGroup());
126 void mult(
const DataTypeT& v)
128 mult(v,this->itemGroup());
132 copy(v,this->itemGroup());
134 void power(
const DataTypeT& v)
136 power(v,this->itemGroup());
141 ItemNumericOperation<DataTypeT>::add(*
this,v,group);
145 ItemNumericOperation<DataTypeT>::sub(*
this,v,group);
149 ItemNumericOperation<DataTypeT>::mult(*
this,v,group);
151 void mult(
const DataTypeT& v,
const ItemGroup& group)
153 ItemNumericOperation<DataTypeT>::mult(*
this,v,group);
155 void power(
const DataTypeT& v,
const ItemGroup& group)
157 ItemNumericOperation<DataTypeT>::power(*
this,v,group);
162 ARCANE_CORE_EXPORT
void fill(
const DataTypeT& value);
163 ARCANE_CORE_EXPORT
void fill(
const DataTypeT& value,
const ItemGroup& group);
204template<
typename ItemTypeT,
typename DataTypeT>
210 typedef DataTypeT DataType;
211 typedef ItemTypeT ItemType;
213 typedef const DataTypeT& ConstReturnReferenceType;
214 typedef DataTypeT& ReturnReferenceType;
218 typedef typename ItemType::Index ItemIndexType;
219 typedef typename ItemType::LocalIdType ItemLocalIdType;
224 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
238 ThatClass& operator=(
const ThatClass& rhs) =
delete;
248 ThatClass& _Internal() {
return *
this; }
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); }
261 ARCANE_CORE_EXPORT
void setIsSynchronized();
262 ARCANE_CORE_EXPORT
void setIsSynchronized(
const GroupType& group);
267 const DataTypeT&
operator[](ItemLocalIdType i)
const {
return this->_value(i.localId()); }
270 DataTypeReturnReference
operator[](ItemLocalIdType i) {
return this->_value(i.localId()); }
273 const DataTypeT&
operator()(ItemLocalIdType i)
const {
return this->_value(i.localId()); }
276 DataTypeReturnReference
operator()(ItemLocalIdType i) {
return this->_value(i.localId()); }
281 return this->_value(item.localId());
284 const DataTypeT& item(ItemLocalIdType i)
const
286 return this->_value(i.localId());
288 void setItem(ItemLocalIdType i,
const DataTypeT& v)
290 this->_value(i.localId()) = v;
292#ifdef ARCANE_DOTNET_WRAPPER
293 const DataTypeT& item(
Int32 i)
const
295 return this->_value(i);
297 void setItem(
Int32 i,
const DataTypeT& v)
305 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
306 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(
const VariableBuildInfo& vbi);
310 static VariableFactoryRegisterer m_auto_registerer;
311 static VariableRef* _autoCreate(
const VariableBuildInfo& vb);
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
File d'exécution pour un accélérateur.
Vue modifiable d'un tableau d'un type T.
Groupe d'entités de maillage.
Index d'un Item dans une variable.
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()
Constructeur vide.
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.
MeshVariableScalarRefT()
Constructeur vide.
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.