Arcane  v3.16.0.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
VariableComparer.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2025 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/* VariableComparer.h (C) 2000-2025 */
9/* */
10/* Classe pour effectuer des comparaisons entre les variables. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_VARIABLECOMPARER_H
13#define ARCANE_CORE_VARIABLECOMPARER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/TraceAccessor.h"
18
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30//! Méthode de comparaison à utiliser
32{
33 //! Compare avec une référence
34 Same = 0,
35 //! Vérifie que la variable est bien synchronisée
36 Sync = 1,
37 //! Vérifie que les valeurs de la variable sont les même sur tous les replica
39};
40
41//! Méthode utilisée pour calculer la différence entre deux valeurs \a v1 et \a v2.
43{
44 //! Utilise (v1-v2) / v1
46 /*!
47 * \brief Utilise (v1-v2) / local_norm_max.
48 *
49 * \a local_norm_max est le maximum des math::abs() des valeurs sur le sous-domaine.
50 */
52};
53
54/*---------------------------------------------------------------------------*/
55/*---------------------------------------------------------------------------*/
56/*!
57 * \brief Arguments des méthodes de VariableComparer.
58 */
59class ARCANE_CORE_EXPORT VariableComparerArgs
60{
61 public:
62
63 /*!
64 * \brief Positionne le nombre d'erreurs à afficher dans le listing.
65 *
66 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
67 * \a v élément. Si négatif, tous les éléments sont affichés.
68 */
69 void setMaxPrint(Int32 v) { m_max_print = v; }
70 Int32 maxPrint() const { return m_max_print; }
71
72 /*!
73 * \brief Indique sur quelles entités on fait la comparaison.
74 *
75 * Si \a v si vrai, compare les valeurs à la fois sur les entités
76 * propres et les entités fantômes. Sinon, ne fait la comparaison que sur les
77 * entités propres.
78 *
79 * Ce paramètre n'est utilisé que si compareMode() vaut eCompareMode::Same.
80 */
81 void setCompareGhost(bool v) { m_is_compare_ghost = v; }
82 bool isCompareGhost() const { return m_is_compare_ghost; }
83
84 void setDataReader(IDataReader* v) { m_data_reader = v; }
85 IDataReader* dataReader() const { return m_data_reader; }
86
87 void setCompareMode(eVariableComparerCompareMode v) { m_compare_mode = v; }
88 eVariableComparerCompareMode compareMode() const { return m_compare_mode; }
89
90 void setComputeDifferenceMethod(eVariableComparerComputeDifferenceMethod v) { m_compute_difference_method = v; }
91 eVariableComparerComputeDifferenceMethod computeDifferenceMethod() const { return m_compute_difference_method; }
92
93 void setReplicaParallelMng(IParallelMng* pm) { m_replica_parallel_mng = pm; }
94 IParallelMng* replicaParallelMng() const { return m_replica_parallel_mng; }
95
96 private:
97
98 Int32 m_max_print = 0;
99 bool m_is_compare_ghost = false;
100 IDataReader* m_data_reader = nullptr;
101 eVariableComparerCompareMode m_compare_mode = eVariableComparerCompareMode::Same;
102 eVariableComparerComputeDifferenceMethod m_compute_difference_method = eVariableComparerComputeDifferenceMethod::Relative;
103 IParallelMng* m_replica_parallel_mng = nullptr;
104};
105
106/*---------------------------------------------------------------------------*/
107/*---------------------------------------------------------------------------*/
108/*!
109 * \brief Résultats d'une opération de comparaison.
110 */
111class ARCANE_CORE_EXPORT VariableComparerResults
112{
113 public:
114
115 VariableComparerResults() = default;
116 explicit VariableComparerResults(Int32 nb_diff)
117 : m_nb_diff(nb_diff)
118 {}
119
120 public:
121
122 void setNbDifference(Int32 v) { m_nb_diff = v; }
123 Int32 nbDifference() const { return m_nb_diff; }
124
125 public:
126
127 Int32 m_nb_diff = 0;
128};
129
130/*---------------------------------------------------------------------------*/
131/*---------------------------------------------------------------------------*/
132/*!
133 * \brief Classe pour effectuer des comparaisons entre les variables.
134 */
135class ARCANE_CORE_EXPORT VariableComparer
136: public TraceAccessor
137{
138 public:
139
140 explicit VariableComparer(ITraceMng* tm);
141
142 public:
143
144 /*!
145 * \brief Vérifie si la variable \a var est bien synchronisée.
146 *
147 * Cette opération ne fonctionne que pour les variables de maillage.
148 *
149 * Un variable est synchronisée lorsque ses valeurs sont les mêmes
150 * sur tous les sous-domaines à la fois sur les éléments propres et
151 * les éléments fantômes.
152 *
153 * Pour chaque élément non synchronisé, un message est affiché.
154 *
155 * \param max_print nombre maximum de messages à afficher.
156 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
157 * \a max_print élément. Si négatif, tous les éléments sont affichés.
158 *
159 * \return le nombre de valeurs différentes de la référence
160 */
161 Int32 checkIfSync(IVariable* var, Int32 max_print);
162
163 /*!
164 * \brief Vérifie que la variable \a var est identique à une valeur de référence
165 *
166 * Cette opération vérifie que les valeurs de la variable sont identique
167 * à une valeur de référence qui est lu à partir du lecteur \a reader.
168 *
169 * Pour chaque valeur différente de la référence, un message est affiché.
170 *
171 * \param max_print nombre maximum de messages à afficher.
172 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
173 * \a max_print élément. Si négatif, tous les éléments sont affichés.
174 * \param compare_ghost si vrai, compare les valeurs à la fois sur les entités
175 * propres et les entités fantômes. Sinon, ne fait la comparaison que sur les
176 * entités propres.
177 *
178 * \return le nombre de valeurs différentes de la référence
179 */
180 Int32 checkIfSame(IVariable* var, IDataReader* reader, Int32 max_print, bool compare_ghost);
181
182 /*!
183 * \brief Vérifie si la variable \a var a les mêmes valeurs sur tous les réplicas.
184 *
185 * Compare les valeurs de la variable avec celle du même sous-domaine
186 * des autres réplicas. Pour chaque élément différent,
187 * un message est affiché.
188 *
189 * Cette méthode est collective sur le même sous-domaine des autres réplica.
190 * Il ne faut donc l'appeler que si la variable existe sur tous les sous-domaines
191 * sinon cela provoque un blocage.
192 *
193 * Cette méthode ne fonctionne que pour les variables sur les types numériques.
194 * Dans ce cas, elle renvoie une exception de type NotSupportedException.
195 *
196 * \param max_print nombre maximum de messages à afficher.
197 * Si 0, aucun élément n'est affiché. Si positif, affiche au plus
198 * \a max_print élément. Si négatif, tous les éléments sont affichés.
199 * Pour chaque élément différent est affiché la valeur minimale et
200 * maximale.
201 *
202 * \return le nombre de valeurs différentes de la référence.
203 */
205
206 public:
207
208 /*!
209 * \brief Créé une comparaison pour vérifie qu'une variable est identique
210 * à une valeur de référence.
211 *
212 * Cette opération vérifie que les valeurs de la variable sont identiques
213 * à une valeur de référence qui sera lue à partir du lecteur \a data_reader.
214 *
215 * Il est possible d'appeler sur l'instance retournée les
216 * méthodes VariableComparerArgs::setCompareGhost() ou
217 * VariableComparerArgs::setMaxPrint() pour modifier le comportement.
218 *
219 * Il est ensuite possible d'appeler la méthode apply() sur l'instance
220 * retournée pour effectuer les comparaisons sur une variable.
221 */
223
224 //! Applique la comparaison \a compare_args à la variable \a var
226};
227
228/*---------------------------------------------------------------------------*/
229/*---------------------------------------------------------------------------*/
230
231} // namespace Arcane
232
233/*---------------------------------------------------------------------------*/
234/*---------------------------------------------------------------------------*/
235
236#endif
Déclarations des types généraux de Arcane.
Interface de lecture des données d'une variable.
Definition IDataReader.h:41
Interface du gestionnaire de traces.
TraceAccessor(ITraceMng *m)
Construit un accesseur via le gestionnaire de trace m.
Arguments des méthodes de VariableComparer.
void setMaxPrint(Int32 v)
Positionne le nombre d'erreurs à afficher dans le listing.
void setCompareGhost(bool v)
Indique sur quelles entités on fait la comparaison.
Résultats d'une opération de comparaison.
VariableComparerResults apply(IVariable *var, const VariableComparerArgs &compare_args)
Applique la comparaison compare_args à la variable var.
VariableComparerArgs buildForCheckIfSame(IDataReader *data_reader)
Créé une comparaison pour vérifie qu'une variable est identique à une valeur de référence.
Int32 checkIfSame(IVariable *var, IDataReader *reader, Int32 max_print, bool compare_ghost)
Vérifie que la variable var est identique à une valeur de référence.
Int32 checkIfSync(IVariable *var, Int32 max_print)
Vérifie si la variable var est bien synchronisée.
Int32 checkIfSameOnAllReplica(IVariable *var, Integer max_print)
Vérifie si la variable var a les mêmes valeurs sur tous les réplicas.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eVariableComparerComputeDifferenceMethod
Méthode utilisée pour calculer la différence entre deux valeurs v1 et v2.
@ LocalNormMax
Utilise (v1-v2) / local_norm_max.
Int32 Integer
Type représentant un entier.
eVariableComparerCompareMode
Méthode de comparaison à utiliser.
@ SameReplica
Vérifie que les valeurs de la variable sont les même sur tous les replica.
@ Same
Compare avec une référence.
@ Sync
Vérifie que la variable est bien synchronisée.
std::int32_t Int32
Type entier signé sur 32 bits.