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::LocalIdType ItemLocalIdType;
223 typedef typename BaseClass::DataTypeReturnReference DataTypeReturnReference;
237 ThatClass& operator=(
const ThatClass& rhs) =
delete;
247 ThatClass& _Internal() {
return *
this; }
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); }
260 ARCANE_CORE_EXPORT
void setIsSynchronized();
261 ARCANE_CORE_EXPORT
void setIsSynchronized(
const GroupType& group);
266 const DataTypeT&
operator[](ItemLocalIdType i)
const {
return this->_value(i.localId()); }
269 DataTypeReturnReference
operator[](ItemLocalIdType i) {
return this->_value(i.localId()); }
272 const DataTypeT&
operator()(ItemLocalIdType i)
const {
return this->_value(i.localId()); }
275 DataTypeReturnReference
operator()(ItemLocalIdType i) {
return this->_value(i.localId()); }
280 return this->_value(item.localId());
283 const DataTypeT& item(ItemLocalIdType i)
const
285 return this->_value(i.localId());
287 void setItem(ItemLocalIdType i,
const DataTypeT& v)
289 this->_value(i.localId()) = v;
291#ifdef ARCANE_DOTNET_WRAPPER
292 const DataTypeT& item(
Int32 i)
const
294 return this->_value(i);
296 void setItem(
Int32 i,
const DataTypeT& v)
304 static ARCANE_CORE_EXPORT VariableTypeInfo _internalVariableTypeInfo();
305 static ARCANE_CORE_EXPORT VariableInfo _internalVariableInfo(
const VariableBuildInfo& vbi);
309 static VariableFactoryRegisterer m_auto_registerer;
310 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.
Interface d'une variable.
Groupe d'entités de maillage.
Index d'un Item dans une variable.
Caractéristiques des éléments du maillage.
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.