Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshPartialVariableArrayRefT.H
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* MeshPartialVariableRefT.H (C) 2000-2020 */
9/* */
10/* Implémentation des classes dérivant de MeshParialVariableRef. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/MeshPartialVariableArrayRef.h"
15#include "arcane/ItemGroup.h"
16#include "arcane/IMesh.h"
17#include "arcane/VariableBuildInfo.h"
18#include "arcane/VariableDataTypeTraits.h"
19#include "arcane/IParallelMng.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30template<typename DataType> VariableTypeInfo
31ItemPartialVariableArrayRefT<DataType>::
32_buildVariableTypeInfo(eItemKind ik)
33{
34 eDataType dt = VariableDataTypeTraitsT<DataType>::type();
35 return VariableTypeInfo(ik,dt,2,0,true);
36}
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41template<typename DataType> VariableInfo
42ItemPartialVariableArrayRefT<DataType>::
43_buildVariableInfo(const VariableBuildInfo& vbi,eItemKind ik)
44{
45 VariableTypeInfo vti = _buildVariableTypeInfo(ik);
46 DataStorageTypeInfo sti = vti._internalDefaultDataStorage();
47 return VariableInfo(vbi.name(),vbi.itemFamilyName(),vbi.itemGroupName(),vbi.meshName(),vti,sti);
48}
49
50/*---------------------------------------------------------------------------*/
51/*---------------------------------------------------------------------------*/
52
53template<class DataType>
56: PrivateVariableArrayT<DataType>(vb,_buildVariableInfo(vb,ik))
57{
58 this->_internalInit();
59 internalSetUsed(this->isUsed());
60}
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65template<class DataType>
68: PrivateVariableArrayT<DataType>(var)
69{
70 this->_internalInit();
71 internalSetUsed(this->isUsed());
72}
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76
77template<class DataType>
84
85/*---------------------------------------------------------------------------*/
86/*---------------------------------------------------------------------------*/
87
88template<typename DataType> void
90internalSetUsed(bool v)
91{
92 if (v)
93 m_table = this->itemGroup().localIdToIndex();
94 else
95 m_table.reset();
96}
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101template<class DataType> void
108
109/*---------------------------------------------------------------------------*/
110/*---------------------------------------------------------------------------*/
111
112template<class DataType> void
114fill(const DataType& v)
115{
116 ENUMERATE_ITEM(iitem,this->itemGroup()){
117 operator[](iitem).fill(v);
118 }
119}
120
121/*---------------------------------------------------------------------------*/
122/*---------------------------------------------------------------------------*/
123
124template<typename DataType> void
125ItemPartialVariableArrayRefT<DataType>::
126copy(const ItemPartialVariableArrayRefT<DataType>& v)
127{
128 ENUMERATE_ITEM(iitem,this->itemGroup()){
129 operator[](iitem).copy(v[iitem]);
130 }
131}
132
133/*---------------------------------------------------------------------------*/
134/*---------------------------------------------------------------------------*/
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138
139template<class ItemType,class DataType> VariableFactoryRegisterer
140MeshPartialVariableArrayRefT<ItemType,DataType>::
141m_auto_registerer(_autoCreate,_buildVariableTypeInfo());
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146template<typename ItemType,typename DataType> VariableTypeInfo
147MeshPartialVariableArrayRefT<ItemType,DataType>::
148_buildVariableTypeInfo()
149{
151 return BaseClass::_buildVariableTypeInfo(ik);
152}
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157template<typename ItemType,typename DataType> VariableInfo
158MeshPartialVariableArrayRefT<ItemType,DataType>::
159_buildVariableInfo(const VariableBuildInfo& vbi)
160{
162 return BaseClass::_buildVariableInfo(vbi,ik);
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168template<class ItemType,class DataType> VariableRef*
169MeshPartialVariableArrayRefT<ItemType,DataType>::
170_autoCreate(const VariableBuildInfo& vb)
171{
172 return new ThatClass(vb);
173}
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
178template<class ItemType,class DataType>
181: ItemPartialVariableArrayRefT<DataType>(vb,ItemTraitsT<ItemType>::kind())
182{
183 // Normalement, c'est à cette classe de faire l'initilisation mais
184 // comme cette classe est juste un wrapper autour de ItemVariableArrayRefT
185 // et ne fait rien d'autre, on laisse l'initialisation à la classe de base,
186 // ce qui permet de fabriquer de manière générique une variable sur
187 // une entité du maillage à partir de son genre.
188}
189
190/*---------------------------------------------------------------------------*/
191/*---------------------------------------------------------------------------*/
192
193template<class ItemType,class DataType>
196: ItemPartialVariableArrayRefT<DataType>(rhs)
197{
198 // Normalement, c'est à cette classe de faire l'initilisation mais
199 // comme cette classe est juste un wrapper autour de ItemVariableArrayRefT
200 // et ne fait rien d'autre, on laisse l'initialisation à la classe de base,
201 // ce qui permet de fabriquer de manière générique une variable sur
202 // une entité du maillage à partir de son genre.
203}
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208template<class ItemType,class DataType> void
214
215/*---------------------------------------------------------------------------*/
216/*---------------------------------------------------------------------------*/
217
218template<class ItemType,class DataType>
219typename Arcane::MeshPartialVariableArrayRefT<ItemType, DataType>::GroupType
221itemGroup() const
222{
223 return GroupType(this->m_private_part->itemGroup());
224}
225
226/*---------------------------------------------------------------------------*/
227/*---------------------------------------------------------------------------*/
228
229} // End namespace Arcane
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
#define ENUMERATE_ITEM(name, group)
Enumérateur générique d'un groupe de noeuds.
Variable partielle scalaire sur un type d'entité du maillage.
ItemPartialVariableArrayRefT(const VariableBuildInfo &vb, eItemKind ik)
Construit une référence à la variable spécifiée dans vb.
void operator=(const ItemPartialVariableArrayRefT< DataType > &rhs)
Opérateur de recopie.
static eItemKind kind()
Genre de l'entité
Definition ItemTypes.h:624
Variable scalaire sur un type d'entité du maillage.
void refersTo(const MeshPartialVariableArrayRefT< ItemType, DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
MeshPartialVariableArrayRefT(const VariableBuildInfo &vb)
Construit une référence à la variable spécifiée dans vb.
GroupType itemGroup() const
Groupe associé à la grandeur.
Classe de factorisation des variables scalaires sur des entités du maillage.
Paramètres nécessaires à la construction d'une variable.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
eDataType
Type d'une donnée.
Definition DataTypes.h:39