Arcane  v3.16.0.0
Documentation utilisateur
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;
32 switch(data_type){
33 case DT_Byte:
35 basic_data_type = DataTypeTraitsT<Byte>::basicDataType();
36 break;
37 case DT_Int8:
39 basic_data_type = DataTypeTraitsT<Int8>::basicDataType();
40 break;
41 case DT_Int16:
43 basic_data_type = DataTypeTraitsT<Int16>::basicDataType();
44 break;
45 case DT_Int32:
47 basic_data_type = DataTypeTraitsT<Int32>::basicDataType();
48 break;
49 case DT_Int64:
51 basic_data_type = DataTypeTraitsT<Int64>::basicDataType();
52 break;
53 case DT_Real:
55 basic_data_type = DataTypeTraitsT<Real>::basicDataType();
56 break;
57 case DT_Float32:
60 break;
61 case DT_Float16:
64 break;
65 case DT_BFloat16:
68 break;
69 case DT_Real2:
71 basic_data_type = DataTypeTraitsT<Real2>::basicDataType();
72 break;
73 case DT_Real3:
75 basic_data_type = DataTypeTraitsT<Real3>::basicDataType();
76 break;
77 case DT_Real2x2:
80 break;
81 case DT_Real3x3:
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/*---------------------------------------------------------------------------*/
172/*!
173 * \brief Calcul le nom complet de la variable.
174 *
175 * Ce nom nécessite de concaténer des chaînes de caractère et donc
176 * de faire des allocations qui peuvent être couteuses.
177 * On ne calcule le nom que si fullName() est explicitement demandé.
178 */
179void VariableInfo::
180_computeFullName() const
181{
182 StringBuilder full_name;
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.
Informations de type pour un conteneur de données.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
static constexpr int nbBasicType()
Nombre d'éléments du type de base.
static constexpr eBasicDataType basicDataType()
Type de donnée de base.
Chaîne de caractères unicode.
Infos caractérisant une variable.
Integer dimension() const
Dimension.
Informations caractérisant le type d'une variable.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
eBasicDataType
Type d'une donnée de base.
@ Unknown
Donnée de type inconnu ou non initialisé
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