Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ModuleMaster.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/* ModuleMaster.h (C) 2000-2025 */
9/* */
10/* Module maître. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_MODULEMASTER_H
13#define ARCANE_CORE_MODULEMASTER_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/VersionInfo.h"
18
19#include "arcane/core/IModuleMaster.h"
20#include "arcane/core/AbstractModule.h"
22#include "arcane/core/CommonVariables.h"
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27namespace Arcane
28{
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \internal
34 * \brief Module principal.
35 *
36 * Ce module est toujours chargé en premier pour que ces points d'entrée encadrent tous ceux des autres modules.
37 * Il contient les variables globales du cas, comme le nom de fichier ou le numéro de l'itération.
38 */
39class ARCANE_CORE_EXPORT ModuleMaster
40: public AbstractModule
41, public CommonVariables
42, public IModuleMaster
43{
44 public:
45
46 //! Constructeur
47 explicit ModuleMaster(const ModuleBuildInfo&);
48
49 //! Destructeur
50 ~ModuleMaster() override;
51
52 public:
53
54 //! Version du module
55 VersionInfo versionInfo() const override { return VersionInfo(1, 0, 0); }
56
57 //! Accès aux options du module
59
60 //! Conversion en \a IModule
61 IModule* toModule() override { return this; }
62
63 //! Accès aux variables 'communes' partagées entre tout service et module
64 CommonVariables* commonVariables() override { return this; }
65
66 void addTimeLoopService(ITimeLoopService* tls) override;
67
68 //! Sort les courbes classiques (CPUTime, ElapsedTime, ...)
69 void dumpStandardCurves() override;
70
71 public:
72
73 //! Point d'entrée auto-chargé en début d'itération de la boucle de calcul
74 /*!
75 <ul>
76 <li>Au cas où le temps courant est strictement supérieur au temps limite, demande l'arrêt du calcul</li>
77 <li>Ajoute au temps courant le deltat calculé au pas de temps précédent</li>
78 </ul>
79 */
80 void timeLoopBegin();
81
82 //! Point d'entrée auto-chargé en fin d'itération de la boucle de calcul
83 /*!
84 <ul>
85 <li>Incrémente le compteur d'itération</li>
86 </ul>
87 */
88 void timeLoopEnd();
89
90 //! Point d'entrée auto-chargé en début d'initialisation
91 void masterInit();
92
93 //! Point d'entrée auto-chargé en début d'initialisation d'un nouveau cas
94 /*! N'est pas appelé en cas d'initialisation sur une reprise */
95 void masterStartInit();
96
97 //! Point d'entrée auto-chargé en début de reprise d'un nouveau cas
98 void masterContinueInit();
99
100 protected:
101
102 //! Incrémentation du pas de temps surchargeable
103 // nb: IFPEN a une notion d'évènement. On peut connaître le prochain
104 // temps et pas de temps. Si on applique l'incrémentation par défaut,
105 // on a des erreurs d'arrondi...
106 virtual void timeIncrementation();
107
108 //! Affichage surchargeable des informations du pas de temps
109 // nb: IFPEN souhaite des affichages paramétrables par application
110 virtual void timeStepInformation();
111
112 void _masterBeginLoop();
113 void _masterEndLoop();
114 void _masterStartInit();
115 void _masterContinueInit();
116 void _masterLoopExit();
117 void _masterMeshChanged();
118 void _masterRestore();
119
120 protected:
121
122 //! Instance des options du module
124
125 //! Nombre de boucles de calcul effectuées
127
128 //! Valeur du temps CPU à la dernière itération
130
131 //! Valeur du temps horloge à la dernière itération
133
134 //! Liste des services de boucle en temps
136
137 //! Indique si on est dans la première itération de l'exécution
138 bool m_is_first_loop = true;
139
140 Real m_thm_mem_used = 0.0;
141 Real m_thm_diff_cpu = 0.0;
142 Real m_thm_global_cpu_time = 0.0;
143 Real m_thm_diff_elapsed = 0.0;
144 Real m_thm_global_elapsed_time = 0.0;
145 Real m_thm_global_time = 0.0;
146
147 bool m_has_thm_dump_at_iteration = false;
148
149 private:
150
151 void _dumpTimeInfo();
152};
153
154/*---------------------------------------------------------------------------*/
155/*---------------------------------------------------------------------------*/
156
157} // namespace Arcane
158
159/*---------------------------------------------------------------------------*/
160/*---------------------------------------------------------------------------*/
161
162#endif
163
AbstractModule(const ModuleBuildInfo &)
Constructeur à partir d'un ModuleBuildInfo.
CommonVariables(IModule *c)
Construit les références des variables communes pour le module c.
Interface d'un module.
Definition IModule.h:39
Interface d'un service opérant lors de la boucle en temps.
Informations pour construire un module.
CaseOptionsMain * m_case_options_main
Instance des options du module.
bool m_is_first_loop
Indique si on est dans la première itération de l'exécution.
Real m_old_cpu_time
Valeur du temps CPU à la dernière itération.
ModuleMaster(const ModuleBuildInfo &)
Constructeur.
IModule * toModule() override
Conversion en IModule.
Real m_old_elapsed_time
Valeur du temps horloge à la dernière itération.
CommonVariables * commonVariables() override
Accès aux variables 'communes' partagées entre tout service et module.
VersionInfo versionInfo() const override
Version du module.
CaseOptionsMain * caseoptions() override
Accès aux options du module.
UniqueArray< ITimeLoopService * > m_timeloop_services
Liste des services de boucle en temps.
Integer m_nb_loop
Nombre de boucles de calcul effectuées.
Vecteur 1D de données avec sémantique par valeur (style STL).
Informations sur une version.
Definition VersionInfo.h:46
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.
double Real
Type représentant un réel.