Arcane  4.2.1.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
TimeHistoryMngInternal.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2026 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/* TimeHistoryMngInternal.h (C) 2000-2026 */
9/* */
10/* Classe interne gérant un historique de valeurs. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IMPL_INTERNAL_TIMEHISTORYMNGINTERNAL_H
13#define ARCANE_IMPL_INTERNAL_TIMEHISTORYMNGINTERNAL_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/Iostream.h"
18#include "arcane/utils/Iterator.h"
19#include "arcane/utils/ScopedPtr.h"
20#include "arcane/utils/ITraceMng.h"
21#include "arcane/utils/PlatformUtils.h"
22#include "arcane/utils/OStringStream.h"
23#include "arcane/utils/Convert.h"
24
25#include "arcane/core/IIOMng.h"
26#include "arcane/core/CommonVariables.h"
27#include "arcane/core/Directory.h"
28#include "arcane/core/ObserverPool.h"
29#include "arcane/core/IVariableMng.h"
30#include "arcane/core/IParallelMng.h"
31#include "arcane/core/ITimeHistoryCurveWriter2.h"
32#include "arcane/core/ITimeHistoryTransformer.h"
33#include "arcane/core/XmlNode.h"
34#include "arcane/core/XmlNodeList.h"
35#include "arcane/core/IXmlDocumentHolder.h"
36#include "arcane/core/ServiceBuilder.h"
37#include "arcane/core/Properties.h"
38#include "arcane/core/IParallelReplication.h"
39
40#include "arcane/datatype/DataTypeTraits.h"
41
42#include "arcane/core/internal/ITimeHistoryMngInternal.h"
43
44#include <map>
45#include <set>
46
47/*---------------------------------------------------------------------------*/
48/*---------------------------------------------------------------------------*/
49
50namespace Arcane
51{
52
59class TimeHistoryValue
60{
61 public:
62
63 TimeHistoryValue(const TimeHistoryAddValueArgInternal& thpi, eDataType dt, Integer index, Integer sub_size)
64 : m_data_type(dt)
65 , m_index(index)
66 , m_sub_size(sub_size)
67 , m_thpi(thpi)
68 {}
69
70 virtual ~TimeHistoryValue() = default;
71
72 public:
73
81 virtual void fromOldToNewVariables(IVariableMng* vm, IMesh* default_mesh) = 0;
82
84 virtual void dumpValues(ITraceMng* msg,
86 const TimeHistoryCurveWriterInfo& infos) const = 0;
87
95 virtual void arrayToWrite(UniqueArray<Int32>& iterations,
96 UniqueArray<Real>& values,
97 const TimeHistoryCurveWriterInfo& infos) const = 0;
98
108
114 virtual Integer size() const = 0;
115
121 virtual void removeAfterIteration(Integer last_iteration) = 0;
122
124 const String& name() const { return m_thpi.timeHistoryAddValueArg().name(); }
125
127 eDataType dataType() const { return m_data_type; }
128
130 Integer index() const { return m_index; }
131
132 Integer subSize() const { return m_sub_size; }
133
141 const MeshHandle& meshHandle() const { return m_thpi.meshHandle(); }
142
149 bool isLocal() const { return m_thpi.timeHistoryAddValueArg().isLocal(); }
150
156 Integer localSubDomainId() const { return m_thpi.timeHistoryAddValueArg().localSubDomainId(); }
157
158 private:
159
162 Integer m_sub_size;
164};
165
166/*---------------------------------------------------------------------------*/
167/*---------------------------------------------------------------------------*/
168
180template <typename DataType>
182: public TimeHistoryValue
183{
184 /*
185 * ATTENTION CE QUI EST DECRIT DANS CE COMMENTAIRE N'EST PAS ENCORE OPERATIONNEL
186 * Lorsqu'il y a beaucoup de courbes et que le nombre d'itérations
187 * devient important, le stockage consomme de la mémoire. Pour éviter
188 * cela, il est possible de compresser le tableau des itérations.
189 * Si c'est le cas et que les itérations sont consécutives, on
190 * conserve uniquement la première et la dernière. Dans ce cas,
191 * m_iterations à 3 valeurs: [0] = COMPRESSED_TAG, [1] = première
192 * et [2] = dernière.
193 */
194 public:
195
196 typedef VariableRefArrayT<DataType> ValueList;
197 typedef VariableRefArrayT<Int32> IterationList;
198 static const Integer COMPRESSED_TAG = -15;
199
200 public:
201
203
204 public:
205
216 : TimeHistoryValue(thpi, DataTypeTraitsT<DataType>::type(), index, nb_element)
217 , m_values(VariableBuildInfo(vm, String("TimeHistoryMngValues") + index, VAR_BUILD_FLAGS))
218 , m_iterations(VariableBuildInfo(vm, String("TimeHistoryMngIterations") + index, VAR_BUILD_FLAGS))
219 , m_use_compression(false)
220 , m_shrink_history(shrink)
221 {
222 }
223
233 : TimeHistoryValue(thpi, DataTypeTraitsT<DataType>::type(), index, nb_element)
234 , m_values(VariableBuildInfo(thpi.meshHandle(), String("TimeHistoryMngValues") + index, VAR_BUILD_FLAGS))
235 , m_iterations(VariableBuildInfo(thpi.meshHandle(), String("TimeHistoryMngIterations") + index, VAR_BUILD_FLAGS))
236 , m_use_compression(false)
237 , m_shrink_history(shrink)
238 {
239 }
240
241 public:
242
243 void fromOldToNewVariables(IVariableMng* vm, IMesh* default_mesh) override
244 {
245 IVariable* ptr_old_values = vm->findMeshVariable(default_mesh, String("TimeHistory_Values_") + index());
246 IVariable* ptr_old_iterations = vm->findMeshVariable(default_mesh, String("TimeHistory_Iterations_") + index());
247 if (ptr_old_values == nullptr || ptr_old_iterations == nullptr)
248 ARCANE_FATAL("Unknown old variable");
249
250 ValueList old_values(ptr_old_values);
251 IterationList old_iterations(ptr_old_iterations);
252
253 m_values.resize(old_values.size());
254 m_values.copy(old_values);
255
256 m_iterations.resize(old_iterations.size());
257 m_iterations.copy(old_iterations);
258
259 old_values.resize(0);
260 old_iterations.resize(0);
261 }
262
263 Integer size() const override
264 {
265 return m_iterations.size();
266 }
267
275 {
276 Integer nb_iteration = m_iterations.size();
277 Integer nb_value = m_values.size();
278 Integer sub_size = values.size();
279 if (nb_iteration != 0)
280 if (m_iterations[nb_iteration - 1] == iteration) {
281 // Remplace la valeur
282 for (Integer i = 0; i < sub_size; ++i)
283 m_values[nb_value - sub_size + i] = values[i];
284 return;
285 }
286 Integer add_nb_iter = math::max(128, nb_iteration / 20);
287 Integer add_nb_value = math::max(1024, nb_value / 20);
288 m_iterations.resizeWithReserve(nb_iteration + 1, add_nb_iter);
289 m_values.resizeWithReserve(nb_value + sub_size, add_nb_value);
290 m_iterations[nb_iteration] = iteration;
291 for (Integer i = 0; i < sub_size; ++i)
292 m_values[nb_value + i] = values[i];
293 }
294
295 void removeAfterIteration(Integer last_iteration) override
296 {
297 Integer size = m_iterations.size();
298 Integer last_elem = size;
299 for (Integer i = 0; i < size; ++i)
300 if (m_iterations[i] >= last_iteration) {
301 last_elem = i;
302 break;
303 }
304 if (last_elem != size) {
305 m_iterations.resize(last_elem);
306 m_values.resize(last_elem * subSize());
307 }
308 }
309
310 // Ecriture d'une courbe pour les écrivains version 2.
313 const TimeHistoryCurveWriterInfo& infos) const override
314 {
315 ARCANE_UNUSED(msg);
316
317 // Pour l'instant, on ne fait rien
318 if (m_shrink_history)
319 return;
320
321 UniqueArray<Real> values_to_write;
322 UniqueArray<Int32> iterations_to_write;
323
324 arrayToWrite(iterations_to_write, values_to_write, infos);
325
327 if (!meshHandle().isNull()) {
328 TimeHistoryCurveInfo curve_info(name(), meshHandle().meshName(), iterations_to_write, values_to_write, subSize(), sd);
329 writer->writeCurve(curve_info);
330 }
331 else {
332 TimeHistoryCurveInfo curve_info(name(), iterations_to_write, values_to_write, subSize(), sd);
333 writer->writeCurve(curve_info);
334 }
335 }
336
338 {
340 ci.name = name();
341 SharedArray<Int32> iterations(m_iterations.asArray());
342 ci.iterations = iterations;
343 Integer sub_size = subSize();
344 ci.sub_size = subSize();
345
346 SharedArray<DataType> values(m_values.asArray());
347
348 v->transform(ci, values);
349
350 Integer nb_iteration = iterations.size();
351 Integer nb_value = values.size();
352 if (nb_iteration * sub_size != nb_value) {
353 msg->warning() << "Bad size after history transformation";
354 return;
355 }
356
357 m_iterations.resize(nb_iteration);
358 for (Integer i = 0; i < nb_iteration; ++i)
359 m_iterations[i] = iterations[i];
360
361 m_values.resize(nb_value);
362 for (Integer i = 0; i < nb_value; ++i)
363 m_values[i] = values[i];
364 }
365
366 void arrayToWrite(UniqueArray<Int32>& iterations, UniqueArray<Real>& values, const TimeHistoryCurveWriterInfo& infos) const override
367 {
368 // Pour vérifier qu'on ne sauve pas plus d'itérations qu'il y en
369 // a actuellement (ce qui peut arriver en cas de retour arrière).
370 Integer max_iter = infos.times().size();
371 Integer nb_iteration = m_iterations.size();
372 Integer sub_size = subSize();
373 iterations.clear();
374 iterations.reserve(nb_iteration);
375 values.clear();
376 values.reserve(nb_iteration * sub_size);
377 for (Integer i = 0, is = nb_iteration; i < is; ++i) {
378 Integer iter = m_iterations[i];
379 if (iter < max_iter) {
380 for (Integer z = 0; z < sub_size; ++z) {
381 values.add(Convert::toReal(m_values[(i * sub_size) + z]));
382 }
383 iterations.add(iter);
384 }
385 }
386 }
387
388 const ValueList& values() const { return m_values; }
389 const IterationList& iterations() const { return m_iterations; }
390
391 private:
392
393 ValueList m_values;
394 IterationList m_iterations;
395 bool m_use_compression;
396 bool m_shrink_history;
397};
398
399/*---------------------------------------------------------------------------*/
400/*---------------------------------------------------------------------------*/
401
402class TimeHistoryMngInternal
404{
405 public:
406
407 explicit TimeHistoryMngInternal(IVariableMng* vm, const Ref<Properties>& properties)
408 : m_variable_mng(vm)
409 , m_trace_mng(m_variable_mng->traceMng())
410 , m_parallel_mng(m_variable_mng->parallelMng())
411 , m_common_variables(m_variable_mng)
412 , m_is_active(true)
413 , m_is_shrink_active(false)
414 , m_is_dump_active(true)
416 , m_need_comm(false)
417 , m_th_meta_data(VariableBuildInfo(m_variable_mng, "TimeHistoryMngMetaData"))
418 , m_th_global_time(VariableBuildInfo(m_variable_mng, "TimeHistoryMngGlobalTime"))
419 , m_properties(properties)
420 , m_version(2)
421 {
422 // TODO AH : Avec la nouvelle API, cette variable devrait pouvoir être toujours true (grâce à m_need_comm). À garder pour l'IFPEN.
423 m_enable_non_io_master_curves = !platform::getEnvironmentVariable("ARCANE_ENABLE_NON_IO_MASTER_CURVES").null();
424
425 bool enable_all_replicats_write = !platform::getEnvironmentVariable("ARCANE_ENABLE_ALL_REPLICATS_WRITE_CURVES").null();
426
427 // Seul le sous-domaine maître des IO rend actif les time history.
428 IParallelReplication* pr = m_parallel_mng->replication();
429 if (pr->hasReplication()) {
430 m_is_master_io = (pr->isMasterRank() && m_parallel_mng->isMasterIO());
431 m_is_master_io_of_sd = (enable_all_replicats_write || pr->isMasterRank());
432 }
433 else {
434 m_is_master_io = m_parallel_mng->isMasterIO();
436 }
437 }
438
439 ~TimeHistoryMngInternal() override
440 {
442
443 m_curve_writers2.clear();
444 m_history_list.clear();
445 }
446
447 typedef std::map<String, TimeHistoryValue*> HistoryList;
448 typedef std::set<Ref<ITimeHistoryCurveWriter2>> CurveWriter2List;
449 typedef HistoryList::value_type HistoryValueType;
450
451 public:
452
453 void addValue(const TimeHistoryAddValueArgInternal& thpi, Real value) override
454 {
455 RealConstArrayView values(1, &value);
456 _addHistoryValue(thpi, values);
457 }
458 void addValue(const TimeHistoryAddValueArgInternal& thpi, Int64 value) override
459 {
460 Int64ConstArrayView values(1, &value);
461 _addHistoryValue(thpi, values);
462 }
463 void addValue(const TimeHistoryAddValueArgInternal& thpi, Int32 value) override
464 {
465 Int32ConstArrayView values(1, &value);
466 _addHistoryValue(thpi, values);
467 }
469 {
470 _addHistoryValue(thpi, values);
471 }
473 {
474 _addHistoryValue(thpi, values);
475 }
477 {
478 _addHistoryValue(thpi, values);
479 }
480
481 public:
482
483 void addNowInGlobalTime() override;
484 void updateGlobalTimeCurve() override;
485 void resizeArrayAfterRestore() override;
486 void dumpCurves(ITimeHistoryCurveWriter2* writer) override;
487 void dumpHistory() override;
488 void updateMetaData() override;
489 void readVariables(IMeshMng* mesh_mng, IMesh* default_mesh) override;
490
491 void addCurveWriter(Ref<ITimeHistoryCurveWriter2> writer) override;
492 void removeCurveWriter(const String& name) override;
494
495 void addObservers(IPropertyMng* prop_mng) override;
496 void editOutputPath(const Directory& directory) override;
497 void iterationsAndValues(const TimeHistoryAddValueArgInternal& thpi, UniqueArray<Int32>& iterations, UniqueArray<Real>& values) override;
498
499 public:
500
501 bool isShrinkActive() const override { return m_is_shrink_active; }
502 void setShrinkActive(bool is_active) override { m_is_shrink_active = is_active; }
503 bool active() const override { return m_is_active; }
504 void setActive(bool is_active) override { m_is_active = is_active; }
505 bool isDumpActive() const override { return m_is_dump_active; }
506 void setDumpActive(bool is_active) override { m_is_dump_active = is_active; }
507 bool isMasterIO() override { return m_is_master_io; }
508 bool isMasterIOOfSubDomain() override { return m_is_master_io_of_sd; }
510 bool isIOMasterWriteOnly() override { return m_io_master_write_only; }
511 void setIOMasterWriteOnly(bool is_active) override { m_io_master_write_only = is_active; }
512
513 private:
514
522 template <class DataType>
524
528 void _destroyAll();
529
534
540
547
553 void _fromLegacyFormat(IMesh* default_mesh);
554
558 void _saveProperties();
559
565
566 private:
567
568 IVariableMng* m_variable_mng;
569 ITraceMng* m_trace_mng;
570 IParallelMng* m_parallel_mng;
571 CommonVariables m_common_variables;
572 Directory m_directory;
573
582
583 String m_output_path;
584 ObserverPool m_observer_pool;
585 HistoryList m_history_list;
589 CurveWriter2List m_curve_writers2;
590 Ref<Properties> m_properties;
591 Integer m_version;
592};
593
594/*---------------------------------------------------------------------------*/
595/*---------------------------------------------------------------------------*/
596
597} // End namespace Arcane
598
599/*---------------------------------------------------------------------------*/
600/*---------------------------------------------------------------------------*/
601
602#endif
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
constexpr Integer size() const noexcept
Retourne la taille du tableau.
Variables communes d'un cas.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Classe gérant un répertoire.
Definition Directory.h:35
Interface du gestionnaire des maillages.
Definition IMeshMng.h:40
Interface du gestionnaire de parallélisme pour un sous-domaine.
Informations sur la réplication des sous-domaines en parallèle.
virtual bool hasReplication() const =0
Indique si la réplication est active.
virtual bool isMasterRank() const =0
Indique si ce rang de réplication est le maître.
Interface du gestionnaire des propriétés.
Interface d'un écrivain d'une courbe.
virtual void writeCurve(const TimeHistoryCurveInfo &infos)=0
Ecrit une courbe.
Interface de la partie interne d'un gestionnaire d'historique de valeur.
Integer sub_size
Nombre de valeurs par courbe.
Int32SharedArray iterations
Liste des itérations.
Interface d'un objet transformant les courbes d'historiques.
virtual void transform(CommonInfo &infos, RealSharedArray values)=0
Applique la transformation pour une courbe avec des valeurs Real.
Interface du gestionnaire de traces.
virtual TraceMessage warning()=0
Flot pour un message d'avertissement.
Interface du gestionnaire de variables.
virtual IVariable * findMeshVariable(IMesh *mesh, const String &name)=0
Retourne la variable du maillage de nom name ou 0 si aucune de se nom existe.
Interface d'une variable.
Definition IVariable.h:39
@ PNoReplicaSync
Indique que la variable n'a pas forcément la même valeur entre les réplicas.
Definition IVariable.h:149
@ PExecutionDepend
Indique que la valeur de la variable est dépendante de l'exécution.
Definition IVariable.h:96
@ PNoRestore
Indique que la variable ne doit pas être restaurée.
Definition IVariable.h:123
Handle sur un maillage.
Definition MeshHandle.h:47
Liste d'observateurs.
Référence à une instance.
Vecteur 1D de données avec sémantique par référence.
Chaîne de caractères unicode.
bool null() const
Retourne true si la chaîne est nulle.
Definition String.cc:305
Classe étendant les arguments lors d'un ajout de valeur dans un historique de valeur.
Informations pour l'écriture d'une courbe.
Informations sur l'écriture des courbes.
RealConstArrayView times() const
Liste des temps.
void setIOMasterWriteOnly(bool is_active) override
Méthode permettant de définir si seul le processus maitre appelle les écrivains.
bool isShrinkActive() const override
Retourne un booléen indiquant si l'historique est compressé
void updateMetaData() override
Méthode permettant de mettre à jour les méta-données des courbes.
bool m_is_master_io
True si je suis le gestionnaire des IO.
bool m_is_shrink_active
Indique si la compression de l'historique est active.
void addNowInGlobalTime() override
Méthode permettant d'ajouter le GlobalTime actuel au tableau des GlobalTimes.
bool isMasterIO() override
Méthode permettant de savoir si notre processus est l'écrivain.
void addValue(const TimeHistoryAddValueArgInternal &thpi, Real value) override
Méthode permettant d'ajouter une valeur à un historique.
void _dumpSummaryOfCurves()
Méthode permettant de sortir un fichier JSON avec le nom de chaque courbe sortie en format GNUPLOT ai...
void addValue(const TimeHistoryAddValueArgInternal &thpi, Int32 value) override
Méthode permettant d'ajouter une valeur à un historique.
bool m_is_master_io_of_sd
True si je suis le gestionnaire des IO pour mon sous-domaine.
void _removeCurveWriter(const Ref< ITimeHistoryCurveWriter2 > &writer)
Méthode permettant de retirer un écrivain.
void updateGlobalTimeCurve() override
Méthode permettant de copier le tableau de GlobalTime dans la variable globale GlobalTime.
void resizeArrayAfterRestore() override
Méthode permettant de redimensionner les tableaux de valeurs après une reprise.
void addObservers(IPropertyMng *prop_mng) override
Méthode permettant de rajouter les observers sauvegardant l'historique avant une protection.
bool isMasterIOOfSubDomain() override
Méthode permettant de savoir si notre processus est l'écrivain pour notre sous-domaine....
bool isDumpActive() const override
Indique l'état d'activation des sorties.
bool m_is_dump_active
Indique si les dump sont actifs.
void removeCurveWriter(const String &name) override
Méthode permettant de retirer un écrivain.
void readVariables(IMeshMng *mesh_mng, IMesh *default_mesh) override
Méthode permettant de récupérer les courbes précédemment écrites lors d'une reprise.
void setDumpActive(bool is_active) override
Positionne l'état d'activation des sorties.
void addValue(const TimeHistoryAddValueArgInternal &thpi, Int32ConstArrayView values) override
Méthode permettant d'ajouter des valeurs à un historique.
void dumpHistory() override
Méthode permettant d'écrire toutes les courbes à l'aide de tous les writers enregistrés.
void _dumpSummaryOfCurvesLegacy()
Méthode permettant de sortir un fichier XML avec le nom de chaque courbe sortie en format GNUPLOT.
void addValue(const TimeHistoryAddValueArgInternal &thpi, Int64ConstArrayView values) override
Méthode permettant d'ajouter des valeurs à un historique.
HistoryList m_history_list
Liste des historiques.
void _addHistoryValue(const TimeHistoryAddValueArgInternal &thpi, ConstArrayView< DataType > values)
Méthode permettant d'ajouter des valeurs à un historique de valeurs.
VariableArrayReal m_th_global_time
Tableau des instants de temps.
bool isNonIOMasterCurvesEnabled() override
Méthode permettant de savoir si tous les processus peuvent avoir un historique de valeurs.
bool m_enable_non_io_master_curves
Indique si l'ecriture de courbes par des procs non io_master est possible.
void _dumpCurvesAllWriters()
Méthode permettant de sortir toutes les courbes avec tous les writers.
void setActive(bool is_active) override
Positionne l'état d'activation.
void applyTransformation(ITimeHistoryTransformer *v) override
Applique la transformation v à l'ensemble des courbes.
void iterationsAndValues(const TimeHistoryAddValueArgInternal &thpi, UniqueArray< Int32 > &iterations, UniqueArray< Real > &values) override
Méthode permettant de sortir les itérations et les valeurs d'un historique.
void dumpCurves(ITimeHistoryCurveWriter2 *writer) override
Méthode permettant d"écrire les courbes à l'aide du writer fourni.
bool m_io_master_write_only
Indique si les writers doivent être appelé par tous les processus.
bool isIOMasterWriteOnly() override
Méthode permettant de savoir s'il n'y a que le processus maitre qui appelle les écrivains.
bool active() const override
Indique l'état d'activation.
void addValue(const TimeHistoryAddValueArgInternal &thpi, RealConstArrayView values) override
Méthode permettant d'ajouter des valeurs à un historique.
void _saveProperties()
Méthode permettant de sauver les propriétés des metadatas.
void addValue(const TimeHistoryAddValueArgInternal &thpi, Int64 value) override
Méthode permettant d'ajouter une valeur à un historique.
void setShrinkActive(bool is_active) override
Positionne le booléen indiquant si l'historique est compressé
VariableScalarString m_th_meta_data
Infos des historiques.
void _fromLegacyFormat(IMesh *default_mesh)
Méthode permettant de convertir l'ancien format vers le nouveau.
void editOutputPath(const Directory &directory) override
Méthode permettant de changer le répertoire de sortie des courbes.
RealUniqueArray m_global_times
Liste des temps globaux.
bool m_need_comm
Indique si au moins une courbe est non local (donc nécessite des communications).
bool m_is_active
Indique si le service est actif.
void addCurveWriter(Ref< ITimeHistoryCurveWriter2 > writer) override
Méthode permettant d'ajouter un écrivain pour la sortie des courbes.
TimeHistoryValueT(const TimeHistoryAddValueArgInternal &thpi, Integer index, Integer nb_element, bool shrink)
Constructeur permettant de construire un historique de valeur lié à un maillage.
void applyTransformation(ITraceMng *msg, ITimeHistoryTransformer *v) override
Méthode permettant d'appliquer une transformation sur les valeurs de l'historique de valeur.
Integer size() const override
Méthode permettant de récupérer le nombre de valeurs enregistrées.
void dumpValues(ITraceMng *msg, ITimeHistoryCurveWriter2 *writer, const TimeHistoryCurveWriterInfo &infos) const override
Imprime les valeurs de l'historique avec l'écrivain writer.
void addValue(ConstArrayView< DataType > values, Integer iteration)
Méthode permettant d'ajouter des valeurs à une itération.
void removeAfterIteration(Integer last_iteration) override
Méthode permettant de retirer toutes les valeurs après une certaine itération.
void arrayToWrite(UniqueArray< Int32 > &iterations, UniqueArray< Real > &values, const TimeHistoryCurveWriterInfo &infos) const override
Méthode permettant de récupérer les itérations et les valeurs d'un historique de valeur.
TimeHistoryValueT(IVariableMng *vm, const TimeHistoryAddValueArgInternal &thpi, Integer index, Integer nb_element, bool shrink)
Constructeur permettant de construire un historique de valeur non lié à un maillage.
void fromOldToNewVariables(IVariableMng *vm, IMesh *default_mesh) override
Méthode permettant de convertir les variables d'anciennes sauvegardes vers le nouveau format.
Integer index() const
Index de l'historique dans la liste.
virtual Integer size() const =0
Méthode permettant de récupérer le nombre de valeurs enregistrées.
const MeshHandle & meshHandle() const
Méthode permettant de récupérer le MeshHandle enregistré.
virtual void removeAfterIteration(Integer last_iteration)=0
Méthode permettant de retirer toutes les valeurs après une certaine itération.
const String & name() const
Nom de l'historique.
eDataType dataType() const
Type de données de l'historique.
virtual void applyTransformation(ITraceMng *msg, ITimeHistoryTransformer *v)=0
Méthode permettant d'appliquer une transformation sur les valeurs de l'historique de valeur.
Integer m_index
Index de l'historique dans la liste.
virtual void fromOldToNewVariables(IVariableMng *vm, IMesh *default_mesh)=0
Méthode permettant de convertir les variables d'anciennes sauvegardes vers le nouveau format.
virtual ~TimeHistoryValue()=default
Libére les ressources.
Integer localSubDomainId() const
Méthode permettant de récupérer l'id du sous-domaine à qui appartient cet historique.
virtual void arrayToWrite(UniqueArray< Int32 > &iterations, UniqueArray< Real > &values, const TimeHistoryCurveWriterInfo &infos) const =0
Méthode permettant de récupérer les itérations et les valeurs d'un historique de valeur.
bool isLocal() const
Méthode permettant de savoir si c'est un historique global ou local à un sous-domaine.
eDataType m_data_type
Type de la donnée.
virtual void dumpValues(ITraceMng *msg, ITimeHistoryCurveWriter2 *writer, const TimeHistoryCurveWriterInfo &infos) const =0
Imprime les valeurs de l'historique avec l'écrivain writer.
Vecteur 1D de données avec sémantique par valeur (style STL).
Paramètres nécessaires à la construction d'une variable.
virtual void resize(Integer new_size)
Redimensionne le tableau pour contenir new_size éléments.
T max(const T &a, const T &b, const T &c)
Retourne le maximum de trois éléments.
Definition MathUtils.h:407
VariableRefArrayT< Real > VariableArrayReal
Variable tableau de type réels.
VariableRefScalarT< String > VariableScalarString
Variable scalaire de type chaine de caractère.
Real toReal(Real r)
Convertit r en Real.
String getEnvironmentVariable(const String &name)
Variable d'environnement du nom name.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
std::int64_t Int64
Type entier signé sur 64 bits.
Int32 Integer
Type représentant un entier.
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:480
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Definition UtilsTypes.h:478
Integer arcaneCallFunctionAndCatchException(std::function< void()> function)
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
Definition UtilsTypes.h:347
double Real
Type représentant un réel.
eDataType
Type d'une donnée.
Definition DataTypes.h:39
std::int32_t Int32
Type entier signé sur 32 bits.
ConstArrayView< Real > RealConstArrayView
Equivalent C d'un tableau à une dimension de réels.
Definition UtilsTypes.h:486