Arcane  4.1.12.0
Developer documentation
Loading...
Searching...
No Matches
TimeLoop.cc
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/* TimeLoop.cc (C) 2000-2014 */
9/* */
10/* Time loop. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/utils/ArcanePrecomp.h"
15
16#include "arcane/utils/List.h"
17#include "arcane/utils/String.h"
18
19#include "arcane/core/TimeLoop.h"
20#include "arcane/core/TimeLoopEntryPointInfo.h"
21#include "arcane/core/TimeLoopSingletonServiceInfo.h"
22#include "arcane/core/Configuration.h"
23#include "arcane/core/IApplication.h"
24
25#include <map>
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30namespace Arcane
31{
32
33/*---------------------------------------------------------------------------*/
34/*---------------------------------------------------------------------------*/
35
36const char* ITimeLoop::WComputeLoop = "compute-loop";
37const char* ITimeLoop::WBuild = "build";
38const char* ITimeLoop::WInit = "init";
39const char* ITimeLoop::WRestore = "restore";
40const char* ITimeLoop::WOnMeshChanged = "on-mesh-changed";
41const char* ITimeLoop::WOnMeshRefinement = "on-mesh-refinement";
42const char* ITimeLoop::WExit = "exit";
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47typedef List<TimeLoopEntryPointInfo> TimeLoopEntryPointInfoList;
48
49/*---------------------------------------------------------------------------*/
50/*---------------------------------------------------------------------------*/
51
56class TimeLoopPrivate
57{
58 public:
59
60 typedef std::map<String, List<TimeLoopEntryPointInfo>> EntryPointInfoMap;
61
62 public:
63
64 TimeLoopPrivate(IApplication* mng, const String& name);
65 ~TimeLoopPrivate() { delete m_configuration; }
66
67 public:
68
73 bool m_is_old;
75 StringList m_optional_modules_name;
77 EntryPointInfoMap m_entry_points;
78 List<TimeLoopSingletonServiceInfo> m_singleton_services;
79 IConfiguration* m_configuration;
80};
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85extern "C++" ARCANE_CORE_EXPORT ITimeLoop*
86arcaneCreateTimeLoop(IApplication* app, const String& name)
87{
88 ITimeLoop* tm = new TimeLoop(app, name);
89 tm->build();
90 return tm;
91}
92
93/*---------------------------------------------------------------------------*/
94/*---------------------------------------------------------------------------*/
95
96TimeLoopPrivate::
97TimeLoopPrivate(IApplication* app, const String& name)
98: m_application(app)
99, m_name(name)
100, m_is_old(false)
101, m_configuration(0)
102{
103}
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
108TimeLoop::
109TimeLoop(IApplication* app, const String& name)
110: m_p(new TimeLoopPrivate(app, name))
111{
112}
113
114/*---------------------------------------------------------------------------*/
115/*---------------------------------------------------------------------------*/
116
117TimeLoop::
118~TimeLoop()
119{
120 delete m_p;
121}
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
127build()
128{
129 m_p->m_configuration = m_p->m_application->configurationMng()->createConfiguration();
130}
131
132/*---------------------------------------------------------------------------*/
133/*---------------------------------------------------------------------------*/
134
137{
138 m_p->m_required_modules_name.clone(names);
139}
140
141/*---------------------------------------------------------------------------*/
142/*---------------------------------------------------------------------------*/
143
146{
147 m_p->m_optional_modules_name.clone(names);
148}
149
150/*---------------------------------------------------------------------------*/
151/*---------------------------------------------------------------------------*/
152
153TimeLoopEntryPointInfoCollection TimeLoop::
154entryPoints(const String& where) const
155{
156 TimeLoopPrivate::EntryPointInfoMap::const_iterator it = m_p->m_entry_points.find(where);
157 if (it == m_p->m_entry_points.end()) {
159 }
160 return it->second;
161}
162
163/*---------------------------------------------------------------------------*/
164/*---------------------------------------------------------------------------*/
165
167setEntryPoints(const String& where,
168 const TimeLoopEntryPointInfoCollection& calls)
169{
170 TimeLoopEntryPointInfoList entry_points;
171 entry_points.clone(calls);
172 m_p->m_entry_points.insert(TimeLoopPrivate::EntryPointInfoMap::value_type(where, entry_points));
173}
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
179setUserClasses(const StringCollection& user_classes)
180{
181 m_p->m_user_classes.clone(user_classes);
182}
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
188application() const
189{
190 return m_p->m_application;
191}
192
194name() const
195{
196 return m_p->m_name;
197}
198
200title() const
201{
202 return m_p->m_title;
203}
204
206setTitle(const String& title)
207{
208 m_p->m_title = title;
209}
210
211bool TimeLoop::
212isOldFormat() const
213{
214 return m_p->m_is_old;
215}
216
217void TimeLoop::
218setOldFormat(bool is_old)
219{
220 m_p->m_is_old = is_old;
221}
222
224description() const
225{
226 return m_p->m_description;
227}
228
231{
232 m_p->m_description = description;
233}
234
237{
238 return m_p->m_required_modules_name;
239}
240
243{
244 return m_p->m_optional_modules_name;
245}
246
248userClasses() const
249{
250 return m_p->m_user_classes;
251}
252
253/*---------------------------------------------------------------------------*/
254/*---------------------------------------------------------------------------*/
255
256TimeLoopSingletonServiceInfoCollection TimeLoop::
257singletonServices() const
258{
259 return m_p->m_singleton_services;
260}
261
262/*---------------------------------------------------------------------------*/
263/*---------------------------------------------------------------------------*/
264
266setSingletonServices(const TimeLoopSingletonServiceInfoCollection& c)
267{
268 m_p->m_singleton_services.clone(c);
269}
270
271/*---------------------------------------------------------------------------*/
272/*---------------------------------------------------------------------------*/
273
276{
277 return m_p->m_configuration;
278}
279
280/*---------------------------------------------------------------------------*/
281/*---------------------------------------------------------------------------*/
282
283} // namespace Arcane
284
285/*---------------------------------------------------------------------------*/
286/*---------------------------------------------------------------------------*/
Application interface.
Interface for a configuration.
Interface of a time loop.
Definition ITimeLoop.h:33
static const char * WRestore
called to restore variables during a rollback
Definition ITimeLoop.h:47
static const char * WOnMeshChanged
called after a mesh change
Definition ITimeLoop.h:49
static const char * WExit
called upon termination of the code.
Definition ITimeLoop.h:53
virtual void build()=0
Constructs the time loop.
static const char * WOnMeshRefinement
called after mesh refinement
Definition ITimeLoop.h:51
static const char * WBuild
called when reading the dataset
Definition ITimeLoop.h:43
static const char * WComputeLoop
called during the calculation loop
Definition ITimeLoop.h:41
static const char * WInit
called during initialization, initialization of a restart, or a new case
Definition ITimeLoop.h:45
Implementation of a collection of elements in vector form.
void clone(const Collection< T > &base)
Clone the collection base.
String m_description
Description.
Definition TimeLoop.cc:72
String m_title
Title.
Definition TimeLoop.cc:71
StringList m_required_modules_name
True if time loop is in the old format.
Definition TimeLoop.cc:74
IApplication * m_application
Application.
Definition TimeLoop.cc:69
StringList m_user_classes
List of user classes.
Definition TimeLoop.cc:76
Time loop.
Definition TimeLoop.h:35
void setOptionalModulesName(const StringCollection &names) override
Sets the list of optional modules.
Definition TimeLoop.cc:145
String name() const override
Name of the time loop.
Definition TimeLoop.cc:194
virtual void build() override
Constructs the time loop.
Definition TimeLoop.cc:127
StringCollection requiredModulesName() const override
List of names of required modules.
Definition TimeLoop.cc:236
void setDescription(const String &description) override
Sets the description of the time loop.
Definition TimeLoop.cc:230
IConfiguration * configuration() override
Configuration options.
Definition TimeLoop.cc:275
StringCollection optionalModulesName() const override
List of names of optional modules.
Definition TimeLoop.cc:242
String description() const override
Description of the time loop.
Definition TimeLoop.cc:224
StringCollection userClasses() const override
List of user classes associated with the time loop.
Definition TimeLoop.cc:248
void setTitle(const String &title) override
Sets the title of the time loop.
Definition TimeLoop.cc:206
void setUserClasses(const StringCollection &user_classes) override
Returns the list of classes associated with the time loop.
Definition TimeLoop.cc:179
TimeLoopEntryPointInfoCollection entryPoints(const String &where) const override
List of names of entry points for the call point where.
Definition TimeLoop.cc:154
void setRequiredModulesName(const StringCollection &names) override
Sets the list of required modules.
Definition TimeLoop.cc:136
void setEntryPoints(const String &where, const TimeLoopEntryPointInfoCollection &calls) override
Sets the list of names of entry points for the call point where.
Definition TimeLoop.cc:167
String title() const override
Title of the time loop.
Definition TimeLoop.cc:200
void setSingletonServices(const TimeLoopSingletonServiceInfoCollection &c) override
Sets the list of singleton services.
Definition TimeLoop.cc:266
TimeLoopSingletonServiceInfoCollection singletonServices() const override
List of singleton services.
Definition TimeLoop.cc:257
IApplication * application() const override
Application.
Definition TimeLoop.cc:188
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Collection< String > StringCollection
Collection of strings.
Definition UtilsTypes.h:506
List< String > StringList
Unicode string list.
Definition UtilsTypes.h:509