14#include "arcane/core/VariableScalar.h"
16#include "arcane/utils/NotSupportedException.h"
17#include "arcane/utils/ArgumentException.h"
18#include "arcane/utils/FatalErrorException.h"
19#include "arcane/utils/TraceInfo.h"
20#include "arcane/utils/Ref.h"
21#include "arcane/utils/ITraceMng.h"
23#include "arcane/core/VariableDiff.h"
24#include "arcane/core/VariableBuildInfo.h"
25#include "arcane/core/VariableInfo.h"
26#include "arcane/core/IApplication.h"
27#include "arcane/core/IVariableMng.h"
28#include "arcane/core/IItemFamily.h"
29#include "arcane/core/IVariableSynchronizer.h"
30#include "arcane/core/IDataReader.h"
31#include "arcane/core/ItemGroup.h"
32#include "arcane/core/IDataFactoryMng.h"
33#include "arcane/core/IParallelMng.h"
34#include "arcane/core/IMesh.h"
35#include "arcane/core/internal/IVariableMngInternal.h"
37#include "arcane/core/datatype/DataStorageBuildInfo.h"
48template<
class DataType>
61 int max_print,
bool compare_ghost)
75 bool compare_failed =
false;
78 const Item& item = *i;
79 if (!item.
isOwn() && !compare_ghost)
82 if (group_index_table){
83 index = (*group_index_table)[index];
88 DataType diff = DataType();
91 compare_failed =
true;
94 DataType dref = ref[index];
95 DataType dcurrent = current[index];
96 if (VarDataTypeTraits::verifDifferent(dref,dcurrent,diff,
true)){
97 this->m_diffs_info.add(
DiffInfo(dcurrent,dref,diff,item,NULL_ITEM_ID));
105 msg->
pinfo() <<
"Processor " << sid <<
" : "
106 <<
" Unable to compare : elements numbers are different !"
107 <<
" pour la variable " << var_name <<
" ref_size=" << ref_size;
111 this->_sortAndDump(var,pm,max_print);
116 Integer checkReplica(IParallelMng* pm,IVariable* var,
const DataType& var_value,
121 using ReduceType =
typename VariableDataTypeTraitsT<DataType>::HasReduceMinMax;
122 if constexpr(std::is_same<TrueType,ReduceType>::value)
123 return _checkReplica2(pm,var_value);
126 ARCANE_UNUSED(var_value);
127 ARCANE_UNUSED(max_print);
128 throw NotSupportedException(A_FUNCINFO);
133 Integer _checkReplica2(IParallelMng* pm,
const DataType& var_value)
135 Int32 nb_rank = pm->commSize();
143 DataType diff = DataType();
144 if (VarDataTypeTraits::verifDifferent(min_value,max_value,diff,
true)){
145 this->m_diffs_info.add(DiffInfo(min_value,max_value,diff,0,NULL_ITEM_ID));
166 String storage_full_type =
info.storageTypeInfo().fullName();
167 Ref<IData> data = df->createSimpleDataRef(storage_full_type,storage_build_info);
168 m_value =
dynamic_cast<ValueDataType*
>(
data.get());
178 ThatClass* true_ptr = 0;
182 true_ptr =
dynamic_cast<ThatClass*
>(var);
184 true_ptr =
new ThatClass(vb,vi);
187 ARCANE_CHECK_PTR(true_ptr);
199 ThatClass* true_ptr =
dynamic_cast<ThatClass*
>(var);
201 ARCANE_FATAL(
"Can not build a reference from variable {0}",var->name());
216 reader->read(
this,ref_data.get());
217 ref = ref_data->value();
221 return csa.check(
this,ref_array,from_array,max_print,compare_ghost);
233 const T& value,
Integer max_print)
236 return csa.checkReplica(pm,var,value,max_print);
246 return csa.checkReplica(pm,var,int_value,max_print);
256 return _checkIfSameOnAllReplicaHelper(replica_pm,
this,value(),max_print);
263print(std::ostream& o)
const
265 o << m_value->value();
284 ARCANE_UNUSED(local_ids);
293 return static_cast<Real>(
sizeof(T));
302 ARCANE_UNUSED(source);
303 ARCANE_UNUSED(destination);
314 ARCANE_UNUSED(first_source);
315 ARCANE_UNUSED(second_source);
316 ARCANE_UNUSED(destination);
325 ARCANE_UNUSED(new_to_old_ids);
342 ARCANE_UNUSED(group);
348template<
typename DataType>
void
352 _checkSwapIsValid(&rhs);
353 m_value->swapValues(rhs.m_value);
356 rhs.syncReferences();
362ARCANE_INTERNAL_INSTANTIATE_TEMPLATE_FOR_NUMERIC_DATATYPE(VariableScalarT);
363template class VariableScalarT<String>;
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Exception lorsqu'un argument est invalide.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Informations pour construire une instance de 'IData'.
Interface de lecture des données d'une variable.
Interface du gestionnaire de parallélisme pour un sous-domaine.
virtual Int32 commRank() const =0
Rang de cette instance dans le communicateur.
Interface du gestionnaire de traces.
virtual TraceMessage pinfo()=0
Flot pour un message d'information parallèle.
Interface du gestionnaire de variables.
virtual IVariable * checkVariable(const VariableInfo &infos)=0
Vérifie une variable.
virtual IVariableMngInternal * _internalApi()=0
API interne à Arcane.
virtual bool isPartial() const =0
Indique si la variable est partielle.
virtual ItemGroup itemGroup() const =0
Groupe du maillage associé.
virtual String name() const =0
Nom de la variable.
Groupe d'entités de maillage.
SharedPtrT< GroupIndexTable > localIdToIndex() const
Table des local ids vers une position pour toutes les entités du groupe.
bool null() const
true is le groupe est le groupe nul
IMesh * mesh() const
Maillage auquel appartient ce groupe (0 pour le group nul)
Classe de base d'un élément de maillage.
constexpr Int32 localId() const
Identifiant local de l'entité dans le sous-domaine du processeur.
bool isOwn() const
true si l'entité est appartient au sous-domaine
Référence à une instance.
Chaîne de caractères unicode.
TraceMessage info() const
Flot pour un message d'information.
Paramètres nécessaires à la construction d'une variable.
Infos caractérisant une variable.
IData * data() override
Données associées à la variable.
void copyItemsValues(Int32ConstArrayView source, Int32ConstArrayView destination) override
Copie les valeurs des entités numéros source dans les entités numéro destination.
VariableScalarT(const VariableBuildInfo &v, const VariableInfo &vi)
Construit une variable basée sur la référence v.
void setIsSynchronized() override
Indique que la variable est synchronisée.
void synchronize() override
Synchronise la variable.
void copyItemsMeanValues(Int32ConstArrayView first_source, Int32ConstArrayView second_source, Int32ConstArrayView destination) override
Copie les moyennes des valeurs des entités numéros first_source et second_source dans les entités num...
void print(std::ostream &o) const override
Imprime les valeurs de la variable sur le flot o.
void compact(Int32ConstArrayView new_to_old_ids) override
Compacte les valeurs de la variable.
Real allocatedMemory() const override
Taille mémoire (en Koctet) utilisée par la variable.
IMesh * mesh() const final
Maillage auquel est associé la variable.
Variable(const VariableBuildInfo &v, const VariableInfo &vi)
Créé une variable lié à la référence v.
void _setData(const Ref< IData > &data)
Positionne la donnée.
@ ReduceMin
Minimum des valeurs.
@ ReduceMax
Maximum des valeurs.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
@ IK_Particle
Entité de maillage de genre particule.
double Real
Type représentant un réel.
unsigned char Byte
Type d'un octet.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.
std::int32_t Int32
Type entier signé sur 32 bits.