Arcane  v3.14.10.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-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/* VariableInfo.cc (C) 2000-2020 */
9/* */
10/* Infos caractérisant une variable. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/VariableInfo.h"
15
16#include "arcane/utils/FatalErrorException.h"
17#include "arcane/utils/StringBuilder.h"
18
19#include "arcane/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_Int16:
38 nb_basic = DataTypeTraitsT<Int16>::nbBasicType();
39 basic_data_type = DataTypeTraitsT<Int16>::basicDataType();
40 break;
41 case DT_Int32:
42 nb_basic = DataTypeTraitsT<Int32>::nbBasicType();
43 basic_data_type = DataTypeTraitsT<Int32>::basicDataType();
44 break;
45 case DT_Int64:
46 nb_basic = DataTypeTraitsT<Int64>::nbBasicType();
47 basic_data_type = DataTypeTraitsT<Int64>::basicDataType();
48 break;
49 case DT_Real:
50 nb_basic = DataTypeTraitsT<Real>::nbBasicType();
51 basic_data_type = DataTypeTraitsT<Real>::basicDataType();
52 break;
53 case DT_Real2:
54 nb_basic = DataTypeTraitsT<Real2>::nbBasicType();
55 basic_data_type = DataTypeTraitsT<Real2>::basicDataType();
56 break;
57 case DT_Real3:
58 nb_basic = DataTypeTraitsT<Real3>::nbBasicType();
59 basic_data_type = DataTypeTraitsT<Real3>::basicDataType();
60 break;
61 case DT_Real2x2:
62 nb_basic = DataTypeTraitsT<Real2x2>::nbBasicType();
63 basic_data_type = DataTypeTraitsT<Real2x2>::basicDataType();
64 break;
65 case DT_Real3x3:
66 nb_basic = DataTypeTraitsT<Real3x3>::nbBasicType();
67 basic_data_type = DataTypeTraitsT<Real3x3>::basicDataType();
68 break;
69 case DT_String:
70 // Pour les chaînes de caractères, le conteneur contient
71 // des 'Byte' et la dimension est 1 de plus que celle
72 // de la variable.
73 nb_basic = 0;
74 multi_tag = 1;
75 dimension += 1;
76 basic_data_type = eBasicDataType::Byte;
77 break;
78 case DT_Unknown:
79 break;
80 }
81 return DataStorageTypeInfo(basic_data_type,nb_basic,dimension,multi_tag);
82}
83
84/*---------------------------------------------------------------------------*/
85/*---------------------------------------------------------------------------*/
86
87VariableInfo::
88VariableInfo(const String& local_name,const String& item_family_name,
89 const String& item_group_name,
90 const String& mesh_name,eItemKind item_kind,
91 Integer dimension,Integer multi_tag,eDataType data_type)
92: VariableInfo(local_name,item_family_name,item_group_name,mesh_name,
93 VariableTypeInfo(item_kind,data_type,dimension,multi_tag,!item_group_name.null()),
94 _internalGetStorageTypeInfo(data_type,dimension,multi_tag))
95{
96}
97
98/*---------------------------------------------------------------------------*/
99/*---------------------------------------------------------------------------*/
100
101VariableInfo::
102VariableInfo(const String& local_name,const String& item_family_name,
103 const String& item_group_name,
104 const String& mesh_name,
105 const VariableTypeInfo& var_type_info,
106 const DataStorageTypeInfo& storage_info)
107: m_local_name(local_name)
108, m_item_family_name(item_family_name)
109, m_item_group_name(item_group_name)
110, m_mesh_name(mesh_name)
111, m_variable_type_info(var_type_info)
112, m_storage_type_info(storage_info)
113{
114 if (m_item_family_name.null())
115 m_item_family_name = _defaultFamilyName();
116 // m_item_group_name peut être nul ici. Dans ce cas,
117 // il sera initialisé par la suite via
118 // setDefaultItemGroupName(). Il ne faut pas le faire
119 // ici car mettre a jour le nom entraine des allocations/desallocation
120 // memoire et ce constructeur peut-être appelé souvent si on recherche
121 // des variables.
122}
123
124/*---------------------------------------------------------------------------*/
125/*---------------------------------------------------------------------------*/
126
127String VariableInfo::
128_defaultFamilyName()
129{
130 String family_name;
131 switch(itemKind()){
132 case IK_Particle:
133 ARCANE_FATAL("No default family for 'particle' variable '{0}'",m_local_name);
134 case IK_DoF:
135 ARCANE_FATAL("No default family for 'dof' variable '{0}'",m_local_name);
136 case IK_Node:
137 family_name = ItemTraitsT<Node>::defaultFamilyName();
138 break;
139 case IK_Edge:
140 family_name = ItemTraitsT<Edge>::defaultFamilyName();
141 break;
142 case IK_Face:
143 family_name = ItemTraitsT<Face>::defaultFamilyName();
144 break;
145 case IK_Cell:
146 family_name = ItemTraitsT<Cell>::defaultFamilyName();
147 break;
148 case IK_Unknown:
149 break;
150 }
151 return family_name;
152}
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156/*!
157 * \brief Calcul le nom complet de la variable.
158 *
159 * Ce nom nécessite de concaténer des chaînes de caractère et donc
160 * de faire des allocations qui peuvent être couteuses.
161 * On ne calcule le nom que si fullName() est explicitement demandé.
162 */
163void VariableInfo::
164_computeFullName() const
165{
166 StringBuilder full_name;
167 if (m_mesh_name.null()){
168 full_name = String();
169 }
170 else{
171 full_name = m_mesh_name;
172 full_name += "_";
173 }
174
175 if (m_item_family_name.null()){
176 full_name += m_local_name;
177 }
178 else{
179 full_name += m_item_family_name;
180 full_name += "_";
181 full_name += m_local_name;
182 }
183 m_full_name = full_name.toString();
184}
185
186/*---------------------------------------------------------------------------*/
187/*---------------------------------------------------------------------------*/
188
189void VariableInfo::
190setDefaultItemGroupName()
191{
192 if (!m_item_group_name.null())
193 return;
194 // Le nom construit ici doit être cohérent avec celui de DynamicMeshKindInfos.cc
195 m_item_group_name = "All" + m_item_family_name + "s";
196}
197
198/*---------------------------------------------------------------------------*/
199/*---------------------------------------------------------------------------*/
200
201} // End namespace Arcane
202
203/*---------------------------------------------------------------------------*/
204/*---------------------------------------------------------------------------*/
205
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Integer dimension() const
Dimension.
-*- 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_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_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_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:54
@ DT_String
Donnée de type chaîne de caractère UTF-8.
Definition DataTypes.h:45
@ 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.