Arcane  v3.16.4.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IBackwardMng.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/* IBackwardMng.h (C) 2000-2025 */
9/* */
10/* Interface gérant les stratégies de retour-arrière. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IBACKWARDMNG_H
13#define ARCANE_CORE_IBACKWARDMNG_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \internal
29 * \brief Interface gérant les stratégies de retour-arrière.
30 *
31 * Cette interface est utilisée par le ITimeLoopMng pour gérer les
32 * retour-arrière. Le principe du retour-arrière est de sauvegarder à une
33 * itération donnée les valeurs des variables pour pouvoir revenir à
34 * cette itération, par exemple en cas de problème dans le calcul.
35 *
36 * Il est possible de positionner une instance spécifique via
37 * ITimeLoopMng::setBackwardMng();
38 *
39 * L'enchainement des opérations, effectué à la fin de chaque itération,
40 * est géré par l'instance de ITimeLoopMng. Il est comme suit:
41 *
42 * \code
43 * IBackwardMng bw = ...;
44 * bw->beginAction();
45 * if (bw->checkAndApplyRestore()){
46 * // Exécution des points d'entrée de restoration.
47 * }
48 * bw->checkAndApplySave();
49 * bw->endAction();
50 * \endcode
51 */
52class ARCANE_CORE_EXPORT IBackwardMng
53{
54 public:
55
56 // Actions à entreprendre
58 {
59 //! Sauvegarde
61 //! Restauration
63 };
64
65 public:
66
67 virtual ~IBackwardMng() = default;
68
69 public:
70
71 //! Initialisation du manager de retour en arrière
72 virtual void init() = 0;
73
74 //! Indique qu'on commence les actions de sauvegarde/restauration sont terminées
75 virtual void beginAction() = 0;
76
77 /*!
78 * \brief Vérifie et applique la restauration si nécessaire.
79 * \retval true si une restauration est effectuée.
80 */
81 virtual bool checkAndApplyRestore() = 0;
82
83 /*!
84 * \brief Vérifie et applique la sauvegarde des variables si nécessaire.
85 * Si \a is_forced est vrai, force la sauvegarde.
86 * \retval true si une sauvegarde est effectuée.
87 */
88 virtual bool checkAndApplySave(bool is_forced) = 0;
89
90 //! Indique que les actions de sauvegarde/restauration sont terminées
91 virtual void endAction() = 0;
92
93 // Période de sauvegarde
94 virtual void setSavePeriod(Integer n) = 0;
95
96 // Récupère la période de sauvegarde
97 virtual Integer savePeriod() const = 0;
98
99 /*!
100 * \brief Signale qu'on souhaite effectué un retour arrière.
101 *
102 * Le retour arrière aura lieu lors de l'appel à checkAndApplyRestore().
103 *
104 * En général il ne faut pas appeler directement cette méthode mais
105 * plutôt ITimeLoopMng::goBackward().
106 *
107 * Depuis l'appel à cette méthode jusqu'à l'action effective du
108 * retour-arrière lors de l'appel à checkAndApplyRestore(),
109 * isBackwardEnabled() retourne \a true.
110 */
111 virtual void goBackward() = 0;
112
113 /*!
114 * \brief Indique si les sauvegardes de retour-arrière sont verrouillées.
115 *
116 * isLocked() est vrai s'il n'est pas possible de faire une
117 * sauvegarde. C'est le cas par exemple lorsqu'on a effectué à l'itération
118 * \a M un retour arrière vers l'itération N et qu'on n'est pas encore
119 * revenu à l'itération \a M.
120 */
121 virtual bool isLocked() const = 0;
122
123 /*!
124 * \brief Indique si un retour-arrière est programmé.
125 * \sa goBackward().
126 */
127 virtual bool isBackwardEnabled() const = 0;
128
129 /*!
130 * \brief Supprime les ressources associées au retour-arrière.
131 *
132 * Cette méthode est appelé pour désallouer les ressources
133 * comme les sauvegardes des variables. Cette méthode est appelée
134 * entre autre avant un équilibrage de charge puisqu'il ne sera
135 * pas possible de faire un retour-arrière avant cet équilibrage.
136 */
137 virtual void clear() = 0;
138};
139
140/*---------------------------------------------------------------------------*/
141/*---------------------------------------------------------------------------*/
142
143} // namespace Arcane
144
145/*---------------------------------------------------------------------------*/
146/*---------------------------------------------------------------------------*/
147
148#endif
149
Déclarations des types généraux de Arcane.
virtual void init()=0
Initialisation du manager de retour en arrière.
virtual void clear()=0
Supprime les ressources associées au retour-arrière.
virtual bool checkAndApplySave(bool is_forced)=0
Vérifie et applique la sauvegarde des variables si nécessaire. Si is_forced est vrai,...
virtual void endAction()=0
Indique que les actions de sauvegarde/restauration sont terminées.
virtual void goBackward()=0
Signale qu'on souhaite effectué un retour arrière.
@ Restore
Restauration.
virtual bool isLocked() const =0
Indique si les sauvegardes de retour-arrière sont verrouillées.
virtual bool isBackwardEnabled() const =0
Indique si un retour-arrière est programmé.
virtual void beginAction()=0
Indique qu'on commence les actions de sauvegarde/restauration sont terminées.
virtual bool checkAndApplyRestore()=0
Vérifie et applique la restauration si nécessaire.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Int32 Integer
Type représentant un entier.