Arcane  v3.15.0.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
VariableInfo.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2024 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/* VariableInfo.cc (C) 2000-2024 */
9/* */
10/* Infos caractérisant une variable. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/core/VariableInfo.h"
15
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/StringBuilder.h"
18
19#include "arcane/core/datatype/DataTypeTraits.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27DataStorageTypeInfo VariableInfo::
28_internalGetStorageTypeInfo(eDataType data_type,Integer dimension,Integer multi_tag)
29{
30 Integer nb_basic = -1;
31 eBasicDataType basic_data_type = eBasicDataType::Unknown;
32 switch(data_type){
33 case DT_Byte:
34 nb_basic = DataTypeTraitsT<Byte>::nbBasicType();
35 basic_data_type = DataTypeTraitsT<Byte>::basicDataType();
36 break;
37 case DT_Int8:
38 nb_basic = DataTypeTraitsT<Int8>::nbBasicType();
39 basic_data_type = DataTypeTraitsT<Int8>::basicDataType();
40 break;
41 case DT_Int16:
42 nb_basic = DataTypeTraitsT<Int16>::nbBasicType();
43 basic_data_type = DataTypeTraitsT<Int16>::basicDataType();
44 break;
45 case DT_Int32:
46 nb_basic = DataTypeTraitsT<Int32>::nbBasicType();
47 basic_data_type = DataTypeTraitsT<Int32>::basicDataType();
48 break;
49 case DT_Int64:
50 nb_basic = DataTypeTraitsT<Int64>::nbBasicType();
51 basic_data_type = DataTypeTraitsT<Int64>::basicDataType();
52 break;
53 case DT_Real:
54 nb_basic = DataTypeTraitsT<Real>::nbBasicType();
55 basic_data_type = DataTypeTraitsT<Real>::basicDataType();
56 break;
57 case DT_Float32:
58 nb_basic = DataTypeTraitsT<Float32>::nbBasicType();
59 basic_data_type = DataTypeTraitsT<Float32>::basicDataType();
60 break;
61 case DT_Float16:
62 nb_basic = DataTypeTraitsT<Float16>::nbBasicType();
63 basic_data_type = DataTypeTraitsT<Float16>::basicDataType();
64 break;
65 case DT_BFloat16:
66 nb_basic = DataTypeTraitsT<BFloat16>::nbBasicType();
67 basic_data_type = DataTypeTraitsT<BFloat16>::basicDataType();
68 break;
69 case DT_Real2:
70 nb_basic = DataTypeTraitsT<Real2>::nbBasicType();
71 basic_data_type = DataTypeTraitsT<Real2>::basicDataType();
72 break;
73 case DT_Real3:
74 nb_basic = DataTypeTraitsT<Real3>::nbBasicType();
75 basic_data_type = DataTypeTraitsT<Real3>::basicDataType();
76 break;
77 case DT_Real2x2:
78 nb_basic = DataTypeTraitsT<Real2x2>::nbBasicType();
79 basic_data_type = DataTypeTraitsT<Real2x2>::basicDataType();
80 break;
81 case DT_Real3x3:
82 nb_basic = DataTypeTraitsT<Real3x3>::nbBasicType();
83 basic_data_type = DataTypeTraitsT<Real3x3>::basicDataType();
84 break;
85 case DT_String:
86 // Pour les chaînes de caractères, le conteneur contient
87 // des 'Byte' et la dimension est 1 de plus que celle
88 // de la variable.
89 nb_basic = 0;
90 multi_tag = 1;
91 dimension += 1;
92 basic_data_type = eBasicDataType::Byte;
93 break;
94 case DT_Unknown:
95 break;
96 }
97 return DataStorageTypeInfo(basic_data_type,nb_basic,dimension,multi_tag);
98}
99
100/*---------------------------------------------------------------------------*/
101/*---------------------------------------------------------------------------*/
102
103VariableInfo::
104VariableInfo(const String& local_name,const String& item_family_name,
105 const String& item_group_name,
106 const String& mesh_name,eItemKind item_kind,
107 Integer dimension,Integer multi_tag,eDataType data_type)
108: VariableInfo(local_name,item_family_name,item_group_name,mesh_name,
109 VariableTypeInfo(item_kind,data_type,dimension,multi_tag,!item_group_name.null()),
110 _internalGetStorageTypeInfo(data_type,dimension,multi_tag))
111{
112}
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
117VariableInfo::
118VariableInfo(const String& local_name,const String& item_family_name,
119 const String& item_group_name,
120 const String& mesh_name,
121 const VariableTypeInfo& var_type_info,
122 const DataStorageTypeInfo& storage_info)
123: m_local_name(local_name)
124, m_item_family_name(item_family_name)
125, m_item_group_name(item_group_name)
126, m_mesh_name(mesh_name)
127, m_variable_type_info(var_type_info)
128, m_storage_type_info(storage_info)
129{
130 if (m_item_family_name.null())
131 m_item_family_name = _defaultFamilyName();
132 // m_item_group_name peut être nul ici. Dans ce cas,
133 // il sera initialisé par la suite via
134 // setDefaultItemGroupName(). Il ne faut pas le faire
135 // ici car mettre a jour le nom entraine des allocations/desallocation
136 // memoire et ce constructeur peut-être appelé souvent si on recherche
137 // des variables.
138}
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
142
143String VariableInfo::
144_defaultFamilyName()
145{
146 String family_name;
147 switch(itemKind()){
148 case IK_Particle:
149 ARCANE_FATAL("No default family for 'particle' variable '{0}'",m_local_name);
150 case IK_DoF:
151 ARCANE_FATAL("No default family for 'dof' variable '{0}'",m_local_name);
152 case IK_Node:
153 family_name = ItemTraitsT<Node>::defaultFamilyName();
154 break;
155 case IK_Edge:
156 family_name = ItemTraitsT<Edge>::defaultFamilyName();
157 break;
158 case IK_Face:
159 family_name = ItemTraitsT<Face>::defaultFamilyName();
160 break;
161 case IK_Cell:
162 family_name = ItemTraitsT<Cell>::defaultFamilyName();
163 break;
164 case IK_Unknown:
165 break;
166 }
167 return family_name;
168}
169
170/*---------------------------------------------------------------------------*/
171/*---------------------------------------------------------------------------*/
179void VariableInfo::
180_computeFullName() const
181{
183 if (m_mesh_name.null()){
184 full_name = String();
185 }
186 else{
187 full_name = m_mesh_name;
188 full_name += "_";
189 }
190
191 if (m_item_family_name.null()){
192 full_name += m_local_name;
193 }
194 else{
195 full_name += m_item_family_name;
196 full_name += "_";
197 full_name += m_local_name;
198 }
199 m_full_name = full_name.toString();
200}
201
202/*---------------------------------------------------------------------------*/
203/*---------------------------------------------------------------------------*/
204
205void VariableInfo::
206setDefaultItemGroupName()
207{
208 if (!m_item_group_name.null())
209 return;
210 // Le nom construit ici doit être cohérent avec celui de DynamicMeshKindInfos.cc
211 m_item_group_name = "All" + m_item_family_name + "s";
212}
213
214/*---------------------------------------------------------------------------*/
215/*---------------------------------------------------------------------------*/
216
217} // End namespace Arcane
218
219/*---------------------------------------------------------------------------*/
220/*---------------------------------------------------------------------------*/
221
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:149
Integer dimension() const
Dimension.
Constructeur de chaîne de caractère unicode.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eItemKind
Genre d'entité de maillage.
@ IK_Particle
Entité de maillage de genre particule.
@ IK_Node
Entité de maillage de genre noeud.
@ IK_Cell
Entité de maillage de genre maille.
@ IK_Unknown
Entité de maillage de genre inconnu ou non initialisé
@ IK_Face
Entité de maillage de genre face.
@ IK_DoF
Entité de maillage de genre degre de liberte.
@ IK_Edge
Entité de maillage de genre arête.
eDataType
Type d'une donnée.
Definition DataTypes.h:39
@ DT_Float32
Donnée de type 'Float32'.
Definition DataTypes.h:52
@ DT_Real2x2
Donnée de type tenseur 3x3.
Definition DataTypes.h:48
@ DT_Int16
Donnée de type entier 16 bits.
Definition DataTypes.h:42
@ DT_Int8
Donnée de type entier sur 8 bits.
Definition DataTypes.h:53
@ DT_Real3x3
Donnée de type tenseur 3x3.
Definition DataTypes.h:49
@ DT_Int32
Donnée de type entier 32 bits.
Definition DataTypes.h:43
@ DT_Real3
Donnée de type vecteur 3.
Definition DataTypes.h:47
@ DT_Float16
Donnée de type 'Float16'.
Definition DataTypes.h:51
@ DT_Int64
Donnée de type entier 64 bits.
Definition DataTypes.h:44
@ DT_Unknown
Donnée de type inconnue ou non initialisée.
Definition DataTypes.h:56
@ DT_String
Donnée de type chaîne de caractère UTF-8.
Definition DataTypes.h:45
@ DT_BFloat16
Donnée de type 'BFloat16'.
Definition DataTypes.h:50
@ DT_Real2
Donnée de type vecteur 2.
Definition DataTypes.h:46
@ DT_Real
Donnée de type réel.
Definition DataTypes.h:41
@ DT_Byte
Donnée de type octet.
Definition DataTypes.h:40
Int32 Integer
Type représentant un entier.
eBasicDataType
Type d'une donnée de base.