12#ifndef ARCANE_IMPL_INTERNAL_TIMEHISTORYMNGINTERNAL_H
13#define ARCANE_IMPL_INTERNAL_TIMEHISTORYMNGINTERNAL_H
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"
24#include "arcane/core/IIOMng.h"
25#include "arcane/core/CommonVariables.h"
26#include "arcane/core/Directory.h"
27#include "arcane/core/ObserverPool.h"
28#include "arcane/core/IVariableMng.h"
29#include "arcane/core/IParallelMng.h"
30#include "arcane/core/ITimeHistoryCurveWriter2.h"
31#include "arcane/core/ITimeHistoryTransformer.h"
32#include "arcane/core/XmlNode.h"
33#include "arcane/core/XmlNodeList.h"
34#include "arcane/core/IXmlDocumentHolder.h"
35#include "arcane/core/ServiceBuilder.h"
36#include "arcane/core/Properties.h"
37#include "arcane/core/IParallelReplication.h"
39#include "arcane/datatype/DataTypeTraits.h"
41#include "arcane/core/internal/ITimeHistoryMngInternal.h"
65 , m_sub_size(sub_size)
123 const String&
name()
const {
return m_thpi.timeHistoryAddValueArg().name(); }
131 Integer subSize()
const {
return m_sub_size; }
148 bool isLocal()
const {
return m_thpi.timeHistoryAddValueArg().isLocal(); }
58class TimeHistoryValue {
…};
178template <
typename DataType>
180:
public TimeHistoryValue
196 static const Integer COMPRESSED_TAG = -15;
217 , m_use_compression(false)
218 , m_shrink_history(shrink)
234 , m_use_compression(false)
235 , m_shrink_history(shrink)
245 if (ptr_old_values ==
nullptr || ptr_old_iterations ==
nullptr)
248 ValueList old_values(ptr_old_values);
249 IterationList old_iterations(ptr_old_iterations);
251 m_values.resize(old_values.
size());
252 m_values.copy(old_values);
254 m_iterations.resize(old_iterations.
size());
255 m_iterations.copy(old_iterations);
263 return m_iterations.size();
274 Integer nb_iteration = m_iterations.size();
275 Integer nb_value = m_values.size();
276 Integer sub_size = values.size();
277 if (nb_iteration != 0)
278 if (m_iterations[nb_iteration - 1] == iteration) {
280 for (
Integer i = 0; i < sub_size; ++i)
281 m_values[nb_value - sub_size + i] = values[i];
286 m_iterations.resizeWithReserve(nb_iteration + 1, add_nb_iter);
287 m_values.resizeWithReserve(nb_value + sub_size, add_nb_value);
288 m_iterations[nb_iteration] = iteration;
289 for (
Integer i = 0; i < sub_size; ++i)
290 m_values[nb_value + i] = values[i];
298 if (m_iterations[i] >= last_iteration) {
302 if (last_elem !=
size) {
303 m_iterations.resize(last_elem);
304 m_values.resize(last_elem * subSize());
316 if (m_shrink_history)
322 arrayToWrite(iterations_to_write, values_to_write, infos);
348 Integer nb_iteration = iterations.size();
349 Integer nb_value = values.size();
350 if (nb_iteration * sub_size != nb_value) {
351 msg->
warning() <<
"Bad size after history transformation";
355 m_iterations.resize(nb_iteration);
356 for (
Integer i = 0; i < nb_iteration; ++i)
357 m_iterations[i] = iterations[i];
359 m_values.resize(nb_value);
360 for (
Integer i = 0; i < nb_value; ++i)
361 m_values[i] = values[i];
369 Integer nb_iteration = m_iterations.size();
372 iterations.reserve(nb_iteration);
374 values.reserve(nb_iteration * sub_size);
375 for (
Integer i = 0, is = nb_iteration; i < is; ++i) {
376 Integer iter = m_iterations[i];
377 if (iter < max_iter) {
378 for (
Integer z = 0; z < sub_size; ++z) {
381 iterations.add(iter);
386 const ValueList& values()
const {
return m_values; }
387 const IterationList& iterations()
const {
return m_iterations; }
392 IterationList m_iterations;
393 bool m_use_compression;
394 bool m_shrink_history;
400class TimeHistoryMngInternal
407 , m_trace_mng(m_variable_mng->traceMng())
408 , m_parallel_mng(m_variable_mng->parallelMng())
409 , m_common_variables(m_variable_mng)
416 , m_properties(properties)
426 ~TimeHistoryMngInternal()
override
430 m_curve_writers2.clear();
434 typedef std::map<String, TimeHistoryValue*> HistoryList;
435 typedef std::set<Ref<ITimeHistoryCurveWriter2>> CurveWriter2List;
436 typedef HistoryList::value_type HistoryValueType;
508 template <
class DataType>
573 CurveWriter2List m_curve_writers2;
400class TimeHistoryMngInternal {
…};
#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.
Interface du gestionnaire des maillages.
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.
Infos communes à chaque courbe.
String name
Nom de la courbe.
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.
@ PNoReplicaSync
Indique que la variable n'a pas forcément la même valeur entre les réplicas.
@ PExecutionDepend
Indique que la valeur de la variable est dépendante de l'exécution.
@ PNoRestore
Indique que la variable ne doit pas être restaurée.
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.
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 actif.
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.
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 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.
void _destroyAll()
Destructeur.
RealUniqueArray m_global_times
Liste des temps globaux.
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 localProcId() 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.
VariableRefArrayT< Real > VariableArrayReal
Variable tableau de type réels.
VariableRefScalarT< String > VariableScalarString
Variable scalaire de type chaine de caractère.
Real toReal(Real r)
Converti r en un Real.
-*- 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.
ConstArrayView< Int64 > Int64ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 64 bits.
Integer arcaneCallFunctionAndCatchException(std::function< void()> function)
UniqueArray< Real > RealUniqueArray
Tableau dynamique à une dimension de réels.
double Real
Type représentant un réel.
eDataType
Type d'une donnée.
std::int32_t Int32
Type entier signé sur 32 bits.
ConstArrayView< Real > RealConstArrayView
Equivalent C d'un tableau à une dimension de réels.