14#include "arcane/utils/Iostream.h"
15#include "arcane/utils/ApplicationInfo.h"
16#include "arcane/utils/ScopedPtr.h"
17#include "arcane/utils/ITraceMng.h"
18#include "arcane/utils/PlatformUtils.h"
20#include "arcane/ITimeHistoryMng.h"
21#include "arcane/IIOMng.h"
22#include "arcane/CommonVariables.h"
23#include "arcane/ISubDomain.h"
24#include "arcane/Directory.h"
25#include "arcane/AbstractModule.h"
26#include "arcane/EntryPoint.h"
27#include "arcane/ObserverPool.h"
28#include "arcane/IVariableMng.h"
29#include "arcane/CaseOptionsMain.h"
30#include "arcane/IParallelMng.h"
31#include "arcane/ITimeHistoryCurveWriter2.h"
32#include "arcane/ITimeHistoryTransformer.h"
33#include "arcane/XmlNode.h"
34#include "arcane/XmlNodeList.h"
35#include "arcane/IXmlDocumentHolder.h"
36#include "arcane/ServiceFinder2.h"
37#include "arcane/ServiceBuilder.h"
38#include "arcane/core/IMeshMng.h"
40#include "arcane/datatype/DataTypeTraits.h"
42#include "arcane/impl/internal/TimeHistoryMngInternal.h"
43#include "arcane/core/GlobalTimeHistoryAdder.h"
72 void build()
override {}
75 m_times = infos.
times();
78 if (m_output_path.
empty())
84 warning() <<
"Can not create gnuplot curve directory '"
85 << m_gnuplot_path.
path() <<
"'";
92 if (infos.subDomain() != NULL_SUB_DOMAIN_ID) {
93 name =
"SD" + String::fromNumber(infos.subDomain()) +
"_" +
name;
95 if (infos.hasSupport()) {
102 warning() <<
"Can not open gnuplot curve file '" <<
sname <<
"'";
108 Integer sub_size = infos.
subSize();
109 for (Integer i = 0; i <
nb_val; ++i) {
111 for (Integer z = 0; z < sub_size; ++z)
124 m_output_path = path;
128 return m_output_path;
193 void timeHistoryBegin()
override;
194 void timeHistoryEnd()
override;
195 void timeHistoryInit()
override;
196 void timeHistoryStartInit()
override;
197 void timeHistoryContinueInit()
override;
198 void timeHistoryRestore()
override;
199 void timeHistoryStartInitEnd();
216 bool active()
const override {
return m_internal->active(); }
219 bool isDumpActive()
const override {
return m_internal->isDumpActive(); }
239TimeHistoryMng2(
const ModuleBuildInfo& mb,
bool add_entry_points)
241, CommonVariables(this)
242, m_internal(makeRef(new TimeHistoryMngInternal(subDomain()->variableMng(),
243 makeRef(new Properties(subDomain()->propertyMng(),
"ArcaneTimeHistoryProperties")))))
244, m_adder(makeRef(new GlobalTimeHistoryAdder(this)))
246 if (add_entry_points) {
247 addEntryPoint(
this,
"ArcaneTimeHistoryBegin", &TimeHistoryMng2::timeHistoryBegin,
249 addEntryPoint(
this,
"ArcaneTimeHistoryEnd", &TimeHistoryMng2::timeHistoryEnd,
251 addEntryPoint(
this,
"ArcaneTimeHistoryInit", &TimeHistoryMng2::timeHistoryInit,
253 addEntryPoint(
this,
"ArcaneTimeHistoryStartInit", &TimeHistoryMng2::timeHistoryStartInit,
255 addEntryPoint(
this,
"ArcaneTimeHistoryContinueInit", &TimeHistoryMng2::timeHistoryContinueInit,
257 addEntryPoint(
this,
"ArcaneTimeHistoryStartInitEnd", &TimeHistoryMng2::timeHistoryStartInitEnd,
259 addEntryPoint(
this,
"ArcaneTimeHistoryRestore", &TimeHistoryMng2::timeHistoryRestore,
267void TimeHistoryMng2::
268timeHistoryStartInit()
270 m_internal->addNowInGlobalTime();
275void TimeHistoryMng2::
276timeHistoryStartInitEnd()
278 m_internal->updateGlobalTimeCurve();
284void TimeHistoryMng2::
294 m_internal->addNowInGlobalTime();
299 bool force_print_thm =
false;
303 if (
parallelMng()->isMasterIO() || m_internal->isNonIOMasterCurvesEnabled())
304 force_print_thm =
true;
306 if (
subDomain()->applicationInfo().isDebug())
307 force_print_thm =
true;
309 m_internal->dumpHistory();
316void TimeHistoryMng2::
319 m_internal->updateGlobalTimeCurve();
325void TimeHistoryMng2::
330 info(4) <<
"TimeHistory is MasterIO ? " << m_internal->isMasterIO();
331 if (!m_internal->isMasterIO() && !m_internal->isNonIOMasterCurvesEnabled())
333 m_internal->editOutputPath(Directory(
subDomain()->exportDirectory(),
"courbes"));
334 m_internal->addObservers(
subDomain()->propertyMng());
336 if (platform::getEnvironmentVariable(
"ARCANE_DISABLE_GNUPLOT_CURVES").null()) {
337 ITimeHistoryCurveWriter2* gnuplot_curve_writer =
new GnuplotTimeHistoryCurveWriter2(
traceMng());
338 m_internal->addCurveWriter(
makeRef(gnuplot_curve_writer));
341 if (m_internal->isMasterIO() || m_internal->isNonIOMasterCurvesEnabled()) {
342 ServiceBuilder<ITimeHistoryCurveWriter2> builder(
subDomain());
343 auto writers = builder.createAllInstances();
344 for (
auto& wr_ref : writers) {
345 ITimeHistoryCurveWriter2* cw = wr_ref.get();
347 info() <<
"FOUND CURVE SERVICE (V2)!";
348 m_internal->addCurveWriter(wr_ref);
360 m_internal->addCurveWriter(makeRef(
writer));
366void TimeHistoryMng2::
367timeHistoryContinueInit()
369 if (m_internal->isMasterIO() || m_internal->isNonIOMasterCurvesEnabled())
376void TimeHistoryMng2::
379 m_internal->resizeArrayAfterRestore();
388 ARCANE_UNUSED(is_verbose);
389 m_internal->dumpHistory();
398 m_internal->dumpCurves(
writer);
407 m_internal->applyTransformation(v);
416 m_internal->removeCurveWriter(
name);
430extern "C++" ARCANE_IMPL_EXPORT ITimeHistoryMng*
431arcaneCreateTimeHistoryMng2(ISubDomain* mng,
bool add_entry_points)
433 return new TimeHistoryMng2(ModuleBuildInfo(mng,
"TimeHistoryMng"), add_entry_points);
#define ARCANE_CHECK_POINTER(ptr)
Macro retournant le pointeur ptr s'il est non nul ou lancant une exception s'il est nul.
Classe représentant un module.
String name() const override
Nom du module.
ITraceMng * traceMng() const override
Gestionnaire de traces.
ISubDomain * subDomain() const override
Sous-domaine associé au module.
IMesh * defaultMesh() const override
Maillage par défaut pour ce module.
IParallelMng * parallelMng() const override
Gestionnaire du parallélisme par échange de message.
Variables communes d'un cas.
Int32 globalIteration() const
Numéro de l'itération courante.
Classe gérant un répertoire.
virtual String file(const String &file_name) const
Retourne le chemin complet du fichier file_name dans le répertoire.
virtual bool createDirectory() const
Créé le répertoire.
virtual String path() const
Retourne le chemin du répertoire.
Ecrivain au format GNUPLOT.
void beginWrite(const TimeHistoryCurveWriterInfo &infos) override
Notifie un début d'écriture.
void setOutputPath(const String &path) override
Répertoire de base où seront écrites les courbes.
String outputPath() const override
Répertoire de base où seront écrites les courbes.
void writeCurve(const TimeHistoryCurveInfo &infos) override
Ecrit une courbe.
void endWrite() override
Notifie la fin de l'écriture.
String name() const override
Nom de l'écrivain.
static const char *const WComputeLoop
appelé pendant la boucle de calcul
@ PAutoLoadEnd
Chargé automatiquement à la fin. Cela signifie qu'un module possédant un point d'entrée avec cette pr...
@ PAutoLoadBegin
Chargé automatiquement au début. Cela signifie qu'un module possédant un point d'entrée avec cette pr...
static const char *const WStartInit
appelé pendant l'initialisation d'un nouveau cas
static const char *const WRestore
appelé pour restaurer les variables lors d'un retour arrière
static const char *const WContinueInit
appelé pendant l'initialisation d'une reprise
static const char *const WInit
appelé pendant l'initialisation
Interface du gestionnaire d'un sous-domaine.
virtual const CaseOptionsMain * caseOptionsMain() const =0
Options générales du jeu de donnée.
Interface d'un écrivain d'une courbe.
Interface de la partie interne d'un gestionnaire d'historique de valeur.
Classe gérant un historique de valeurs.
Interface d'un objet transformant les courbes d'historiques.
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Informations pour construire un module.
Classe étendant les arguments lors d'un ajout de valeur dans un historique de valeur.
Informations pour l'écriture d'une courbe.
Int32ConstArrayView iterations() const
Liste des itérations.
const String & name() const
Nom de la courbe.
RealConstArrayView values() const
Liste des valeurs de la courbe.
Integer subSize() const
Nombre de valeur par temps.
Informations sur l'écriture des courbes.
String path() const
Chemin ou écrire les données (sauf si surchargé spécifiquement par le service via ITimeHistoryCurveWr...
RealConstArrayView times() const
Liste des temps.
Gestionnaire d'un historique de valeurs.
void applyTransformation(ITimeHistoryTransformer *v) override
Applique la transformation v à l'ensemble des courbes.
void setDumpActive(bool is_active) override
Positionne l'état d'activation des sorties.
void dumpCurves(ITimeHistoryCurveWriter2 *writer) override
Utilise l'écrivain writer pour sortir toutes les courbes.
ITimeHistoryMngInternal * _internalApi() override
API interne à Arcane.
void removeCurveWriter(ITimeHistoryCurveWriter2 *writer) override
Supprime un écrivain.
void addValue(const String &name, Real value, bool end_time, bool is_local) override
Ajoute la valeur value à l'historique name.
void setActive(bool is_active) override
Positionne l'état d'activation.
void addValue(const String &name, Int64 value, bool end_time, bool is_local) override
void dumpHistory(bool is_verbose) override
Sauve l'historique.
bool active() const override
Indique l'état d'activation.
void addValue(const String &name, Int64ConstArrayView values, bool end_time, bool is_local) override
void setShrinkActive(bool is_active) override
Positionne le booléen indiquant si l'historique est compressé
void addValue(const String &name, RealConstArrayView values, bool end_time, bool is_local) override
Ajoute la valeur value à l'historique name.
VersionInfo versionInfo() const override
Version du module.
void addValue(const String &name, Int32 value, bool end_time, bool is_local) override
Ajoute la valeur value à l'historique name.
bool isDumpActive() const override
Indique l'état d'activation des sorties.
void addValue(const String &name, Int32ConstArrayView values, bool end_time, bool is_local) override
Ajoute la valeur value à l'historique name.
void addCurveWriter(ITimeHistoryCurveWriter2 *writer) override
Ajoute un écrivain.
bool isShrinkActive() const override
Retourne un booléen indiquant si l'historique est compressé
Informations sur une version.
Vue constante d'un tableau de type T.
constexpr Integer size() const noexcept
Nombre d'éléments du tableau.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
bool empty() const
Vrai si la chaîne est vide (nulle ou "")
String clone() const
Clone cette chaîne.
Classe d'accès aux traces.
TraceMessage warning() const
Flot pour un message d'avertissement.
TraceMessage info() const
Flot pour un message d'information.
double toDouble(Real r)
Converti un Real en double.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
void addEntryPoint(ModuleType *module, const char *name, void(ModuleType::*func)(), const String &where=IEntryPoint::WComputeLoop, int property=IEntryPoint::PNone)
Routine template permettant de référencer un point d'entrée dans un module.
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.