Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
MeshPartialVariableScalarRefT.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/MeshPartialVariableScalarRef.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
31ItemPartialVariableScalarRefT<DataType>::
32_buildVariableTypeInfo(eItemKind ik)
33{
34 eDataType dt = VariableDataTypeTraitsT<DataType>::type();
35 return VariableTypeInfo(ik,dt,1,0,true);
36}
37
38/*---------------------------------------------------------------------------*/
39/*---------------------------------------------------------------------------*/
40
41template<typename DataType> VariableInfo
42ItemPartialVariableScalarRefT<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: PrivateVariableScalarT<DataType>(vbi,_buildVariableInfo(vbi,ik))
57{
58 this->_internalInit();
59 internalSetUsed(this->isUsed());
60}
61
62/*---------------------------------------------------------------------------*/
63/*---------------------------------------------------------------------------*/
64
65template<class DataType>
68: PrivateVariableScalarT<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
104{
106 m_table = rhs.m_table;
107 //this->updateFromInternal();
108}
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112
113template<class DataType> void
115fill(const DataType& v)
116{
117 this->m_private_part->fill(v);
118}
119
120/*---------------------------------------------------------------------------*/
121/*---------------------------------------------------------------------------*/
122
123template<typename DataType> void
124ItemPartialVariableScalarRefT<DataType>::
125copy(const ItemPartialVariableScalarRefT<DataType>& v)
126{
127 //TODO: utiliser memcpy()
128 ENUMERATE_ITEM(iitem,this->itemGroup()){
129 operator[](iitem) = v[iitem];
130 }
131}
132
133/*---------------------------------------------------------------------------*/
134/*---------------------------------------------------------------------------*/
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138
139template<class ItemType,class DataType> VariableFactoryRegisterer
140MeshPartialVariableScalarRefT<ItemType,DataType>::
141m_auto_registerer(_autoCreate,_buildVariableTypeInfo());
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146template<typename ItemType,typename DataType> VariableTypeInfo
147MeshPartialVariableScalarRefT<ItemType,DataType>::
148_buildVariableTypeInfo()
149{
151 eDataType dt = VariableDataTypeTraitsT<DataType>::type();
152 return VariableTypeInfo(ik,dt,1,0,true);
153}
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
158template<class ItemType,class DataType>
159VariableRef* MeshPartialVariableScalarRefT<ItemType,DataType>::
160_autoCreate(const VariableBuildInfo& vb)
161{
162 return new ThatClass(vb);
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168template<class ItemType,class DataType>
171: ItemPartialVariableScalarRefT<DataType>(vb,ItemTraitsT<ItemType>::kind())
172{
173 // Normalement, c'est à cette classe de faire l'initialisation mais
174 // comme cette classe est juste un wrapper autour de ItemVariableScalarRefT
175 // et ne fait rien d'autre, on laisse l'initialisation à la classe de base,
176 // ce qui permet de fabriquer de manière générique une variable sur
177 // une entité du maillage à partir de son genre.
178}
179
180/*---------------------------------------------------------------------------*/
181/*---------------------------------------------------------------------------*/
182
183template<class ItemType,class DataType>
186: ItemPartialVariableScalarRefT<DataType>(rhs)
187{
188 // Normalement, c'est à cette classe de faire l'initialisation mais
189 // comme cette classe est juste un wrapper autour de ItemVariableScalarRefT
190 // et ne fait rien d'autre, on laisse l'initialisation à la classe de base,
191 // ce qui permet de fabriquer de manière générique une variable sur
192 // une entité du maillage à partir de son genre.
193}
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
198template<class ItemType,class DataType> void
204
205/*---------------------------------------------------------------------------*/
206/*---------------------------------------------------------------------------*/
207
208template<class ItemType,class DataType> auto
210itemGroup() const -> GroupType
211{
212 return GroupType(this->m_private_part->itemGroup());
213}
214
215/*---------------------------------------------------------------------------*/
216/*---------------------------------------------------------------------------*/
217
218} // End namespace Arcane
219
220/*---------------------------------------------------------------------------*/
221/*---------------------------------------------------------------------------*/
#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.
ItemPartialVariableScalarRefT(const VariableBuildInfo &vb, eItemKind ik)
Construit une référence à la variable spécifiée dans vb.
void operator=(const ItemPartialVariableScalarRefT< 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 MeshPartialVariableScalarRefT< ItemType, DataType > &rhs)
Positionne la référence de l'instance à la variable rhs.
MeshPartialVariableScalarRefT(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