Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
ISubDomain.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 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/* ISubDomain.h (C) 2000-2021 */
9/* */
10/* Interface d'un sous-domaine. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_ISUBDOMAIN_H
13#define ARCANE_ISUBDOMAIN_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18
19#include "arcane/IBase.h"
20
21/*---------------------------------------------------------------------------*/
22/*---------------------------------------------------------------------------*/
23
24namespace Arcane
25{
26
27/*---------------------------------------------------------------------------*/
28/*---------------------------------------------------------------------------*/
29
30class IVariableMng;
31class IModuleMng;
32class IServiceMng;
33class IEntryPointMng;
34class IModule;
35class IMeshIOService;
36class IMesh;
37class IMeshMng;
38class ApplicationInfo;
39class IIOMng;
40class ITimeLoopMng;
41class CaseOptionsMain;
42class IParallelMng;
43class IThreadMng;
44class IDirectory;
45class ITimeHistoryMng;
46class ICaseMng;
47class IInterfaceMng;
48class ITimerMng;
49class ITimeStats;
50class IRessourceMng;
51class CommonVariables;
52class IMainFactory;
53class ICaseDocument;
54class XmlNode;
55class IMemoryInfo;
56class IObservable;
57class IInitialPartitioner;
58class IDirectExecution;
59class IPhysicalUnitSystem;
60class ILoadBalanceMng;
61class IModuleMaster;
62class ICheckpointMng;
63class IPropertyMng;
64class IConfiguration;
65class MeshHandle;
66
67/*---------------------------------------------------------------------------*/
68/*---------------------------------------------------------------------------*/
69/*!
70 * \brief Interface du gestionnaire d'un sous-domaine.
71 */
72class ARCANE_CORE_EXPORT ISubDomain
73: public IBase
74{
75 protected:
76
77 virtual ~ISubDomain() {} //!< Libère les ressources.
78
79 public:
80
81 virtual void destroy() =0;
82
83 public:
84
85 //! Manufacture principale.
87
88 //! Session
89 virtual ISession* session() const =0;
90
91 //! Application
93
94 //! Retourne le gestionnaire de variables
96
97 //! Retourne le gestionnaire de modules
98 virtual IModuleMng* moduleMng() =0;
99
100 //! Retourne le gestionnaire de points d'entrée
102
103 //! Retourne le gestionnaire de parallélisme
105
106 /*!
107 * \brief Retourne le gestionnaire de parallélisme pour tous les réplicats.
108 *
109 * En règle général, il faut utiliser parallelMng(). Ce gestionnaire
110 * sert essentiellement à effectuer des opérations sur l'ensemble
111 * des sous-domaines et leur réplicats. S'il n'y a pas de réplication,
112 * ce gestionnaire est le même que parallelMng().
113 */
115
116 //! Retourne le gestionnaire de thread
117 virtual IThreadMng* threadMng() =0;
118
119 //! Retourne le gestionnaire d'historique
121
122 //! Retourne le gestionnaire de la boucle en temps
124
125 //! Retourne le gestionnaire des entrées/sorties.
126 virtual IIOMng* ioMng() =0;
127
128 //! Retourne le gestionnaire du jeu de données.
129 virtual ICaseMng* caseMng() =0;
130
131 //! Retourne le gestionnaire de timers
132 virtual ITimerMng* timerMng() const =0;
133
134 //! Gestionnaire de protections
135 virtual ICheckpointMng* checkpointMng() const =0;
136
137 //! Gestionnaire de propriétés
138 virtual IPropertyMng* propertyMng() const =0;
139
140 //! Statistiques des temps d'exécution
141 virtual ITimeStats* timeStats() const =0;
142
143 //! Gestionnaire d'informations mémoire
144 virtual IMemoryInfo* memoryInfo() const =0;
145
146 //! Système d'unité du sous-domaine.
148
149 //! Retourne le gestionnaire d'équilibrage de charge.
151
152 //! Retourne le gestionnaire de maillage.
153 virtual IMeshMng* meshMng() const =0;
154
155 //! Interface du module maître.
156 virtual IModuleMaster* moduleMaster() const =0;
157
158 //! Configuration associée.
159 virtual const IConfiguration* configuration() const =0;
160
161 //! Configuration associée.
163
164 //! Gestionnaire de l'accélérateur associé
166
167 public:
168
169 //! Numéro du sous-domaine associé à ce gestionnaire.
170 virtual Int32 subDomainId() const =0;
171
172 //! Nombre total de sous-domaines
173 virtual Int32 nbSubDomain() const =0;
174
175 //! Lit les informations de maillage du jeu de données
176 virtual void readCaseMeshes() =0;
177
178 /*!
179 * \internal
180 * \brief Positionne un flag indiquant qu'on effectue une
181 * reprise.
182 *
183 * Cette méthode doit être appelée avant d'allouer le maillage (allocateMeshes()).
184 */
185 virtual void setIsContinue() =0;
186
187 //! Vrai si on effectue une reprise, faux sinon.
188 virtual bool isContinue() const =0;
189
190 /*!
191 * \internal
192 * \brief Alloue les instances.
193 *
194 * Les instances de maillages sont simplements alloués mais ne contiennent pas d'entités.
195 * Cette méthode doit être appelée avant toute autre opération impliquant le maillage,
196 * en particulier avant la lecture des options du jeu de données ou la lecture des protections.
197 */
198 virtual void allocateMeshes() =0;
199
200 /*!
201 * \internal
202 * \brief Lit ou relit les maillages.
203 *
204 * Au démarrage, les maillages sont relues à partir des informations du jeu de données.
205 * En reprise, les maillages sont rechargés depuis une protection.
206 * Cette méthode doit être appelée après l'appel à allocateMeshes().
207 */
208 virtual void readOrReloadMeshes() =0;
209
210 /*!
211 * \internal
212 * \brief Initialise les variables dont les valeurs sont spécifiées dans
213 * le jeu de données.
214 */
215 virtual void initializeMeshVariablesFromCaseFile() =0;
216
217 /*!
218 * \internal
219 * \brief Applique le partitionnement de maillage de l'initialisation.
220 */
221 virtual void doInitMeshPartition() =0;
222
223 //! Ajoute un maillage au sous-domaine
224 ARCCORE_DEPRECATED_2020("Use meshMng()->meshFactoryMng() to create and add mesh")
225 virtual void addMesh(IMesh* mesh) =0;
226
227 //! Listes des maillages du sous-domaine
228 virtual ConstArrayView<IMesh*> meshes() const =0;
229
230 /*!
231 * \internal
232 * \brief Exécution des modules d'initialisation
233 * \deprecated Cette méthode ne fait plus rien.
234 */
235 virtual ARCANE_DEPRECATED_2018 void doInitModules() =0;
236
237 //! Exécution des modules de fin d'exécution
238 virtual void doExitModules() =0;
239
240 //! Affiche des informations sur l'instance
241 virtual void dumpInfo(std::ostream&) =0;
242
243 /*!
244 * \brief Maillage par défaut.
245 *
246 * Le maillage par défaut n'existe pas tant que le jeu
247 * de données n'a pas été lu. Il est en général préférable
248 * d'utiliser defautMeshHandle() à la place.
249 */
250 virtual IMesh* defaultMesh() =0;
251
252 /*!
253 * \brief Handle sur le maillage par défaut.
254 *
255 * Ce handle existe toujours même si le maillage associé n'a pas
256 * encore été créé.
257 */
258 virtual const MeshHandle& defaultMeshHandle() =0;
259
260 virtual ARCANE_DEPRECATED IMesh* mesh() =0;
261
262 /*! \brief Recherche le maillage de nom \a name.
263 *
264 * Si le maillage n'est pas trouvé, la méthode lance une exception
265 * si \a throw_exception vaut \a true ou retourne 0 si \a throw_exception
266 * vaut \a false.
267 */
268 ARCCORE_DEPRECATED_2019("Use meshMng()->findMeshHandle() instead")
269 virtual IMesh* findMesh(const String& name,bool throw_exception=true) =0;
270
271 //! Indique si la session a été initialisée.
272 virtual bool isInitialized() const =0;
273
274 /*!
275 * \internal
276 * \brief Indique que le sous-domaine est initialié.
277 */
278 virtual void setIsInitialized() =0;
279
280 //! Informations sur l'exécutable
281 virtual const ApplicationInfo& applicationInfo() const =0;
282
283 //! Document XML du cas.
284 virtual ICaseDocument* caseDocument() =0;
285
286 /*!
287 * \brief Vérifie qu'un identifiant est valide
288 *
289 * \exception ExceptionBadName si \a id n'est pas valide comme identifiant.
290 */
291 virtual void checkId(const String& where,const String& id) =0;
292
293 //! Chemin complet du fichier contenant le jeu de données
294 virtual const String& caseFullFileName() const =0;
295
296 //! Nom du cas
297 virtual const String& caseName() const =0;
298
299 //! Remplit \a bytes avec le contenue du jeu de données.
300 virtual void fillCaseBytes(ByteArray& bytes) const =0;
301
302 /*! \brief Positionne le nom du cas.
303 *
304 Cette méthode doit être appelée avant l'initialisation.
305 */
306 virtual void setCaseName(const String& name) =0;
307
308 /*!
309 * \brief Positionne le partitionneur initial.
310 *
311 * Si cette méthode n'est pas appelée, le partitionneur
312 * par défaut est utilisé.
313 *
314 * Cette méthode doit être appelée avant l'initialisation des modules,
315 * par exemple dans les points d'entrée de construction.
316 *
317 * L'instance s'approprie \a partitioner et le détruira par delete
318 * à la fin du calcul.
319 */
320 virtual void setInitialPartitioner(IInitialPartitioner* partitioner) =0;
321
322 //! Options générales du jeu de donnée.
323 virtual const CaseOptionsMain* caseOptionsMain() const =0;
324
325 //! Répertoire de base des exportations.
326 virtual const IDirectory& exportDirectory() const =0;
327
328 /*! \brief Positionne le chemin de sortie des exportations (protections et reprises)
329
330 Le répertoire correspondant à \a dir doit exister.
331
332 Cette méthode doit être appelée avant l'initialisation.
333 */
334 virtual void setExportDirectory(const IDirectory& dir) =0;
335
336 //! Répertoire de base des exportations nécessitant un archivage.
337 virtual const IDirectory& storageDirectory() const =0;
338
339 /*! \brief Positionne le chemin de sortie des exportations nécessitant un archivage.
340
341 Ce répertoire permet d'indiquer un répertoire qui peut être archivé automatiquement.
342 S'il est nul, on utilise le exportDirectory().
343
344 Cette méthode doit être appelée avant l'initialisation.
345 */
346 virtual void setStorageDirectory(const IDirectory& dir) =0;
347
348 //! Répertoire de base des listings (logs, info exécution).
349 virtual const IDirectory& listingDirectory() const =0;
350
351 /*! \brief Positionne le chemin de sortie des infos listing
352 *
353 Le répertoire correspondant à \a dirname doit exister.
354
355 Cette méthode doit être appelée avant l'initialisation.
356 */
357 virtual void setListingDirectory(const IDirectory& dir) =0;
358
359 //! Informations sur les variables standards
360 virtual const CommonVariables& commonVariables() const =0;
361
362 /*!
363 * \brief Sort les informations internes de l'architecture.
364 * Les informations sont stockées dans un arbre XML ayant pour élément
365 * racine \a root.
366 * Ces informations sont à usage interne d'Arcane.
367 */
368 virtual void dumpInternalInfos(XmlNode& elem) =0;
369
370 /*! \brief Dimension du maillage (1D, 2D ou 3D).
371 *
372 * \deprecated Utiliser mesh()->dimension() à la place.
373 */
374 virtual Integer ARCANE_DEPRECATED meshDimension() const =0;
375
376 /*!
377 * \brief Notification avant destruction du sous-domaine
378 */
379 virtual IObservable* onDestroyObservable() =0;
380
381 //! Service d'exécution directe (ou null)
382 virtual IDirectExecution* directExecution() const =0;
383
384 /*!
385 * \brief Positionne le service d'exécution directe.
386 *
387 * Ce service doit être positionné lors de la création des services lors
388 * de la lecture du jeu de donnée.
389 */
390 virtual void setDirectExecution(IDirectExecution* v) =0;
391};
392
393/*---------------------------------------------------------------------------*/
394/*---------------------------------------------------------------------------*/
395
396} // End namespace Arcane
397
398/*---------------------------------------------------------------------------*/
399/*---------------------------------------------------------------------------*/
400
401#endif
402
Interface du gestionnaire des accélérateurs.
Informations sur une application.
Variables communes d'un cas.
Interface de l'application.
Interface de la classe de base des objets principaux arcane.
Definition IBase.h:38
Interface du gestionnaire de cas.
Definition ICaseMng.h:56
Interface du gestionnaire des informations des protections.
Interface d'une configuration.
Interface d'un service d'exécution direct.
Interface d'une classe gérant un répertoire.
Definition IDirectory.h:31
Interface du gestionnaire des entrées sorties.
Definition IIOMng.h:42
Interface d'un partitionneur initial.
Interface d'enregistrement des variables pour l'equilibrage de charge.
Interface du gestionnaire des maillages.
Definition IMeshMng.h:40
Interface du gestionnaire de modules.
Definition IModuleMng.h:39
Interface d'un observable.
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire des propriétés.
Interface d'une session d'exécution d'un cas.
Definition ISession.h:44
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
virtual IModuleMng * moduleMng()=0
Retourne le gestionnaire de modules.
virtual IThreadMng * threadMng()=0
Retourne le gestionnaire de thread.
virtual Int32 subDomainId() const =0
Numéro du sous-domaine associé à ce gestionnaire.
virtual IIOMng * ioMng()=0
Retourne le gestionnaire des entrées/sorties.
virtual IMemoryInfo * memoryInfo() const =0
Gestionnaire d'informations mémoire.
virtual ICheckpointMng * checkpointMng() const =0
Gestionnaire de protections.
virtual ITimeStats * timeStats() const =0
Statistiques des temps d'exécution.
virtual ~ISubDomain()
Libère les ressources.
Definition ISubDomain.h:77
virtual IApplication * application()=0
Application.
virtual IConfiguration * configuration()=0
Configuration associée.
virtual IPropertyMng * propertyMng() const =0
Gestionnaire de propriétés.
virtual IParallelMng * parallelMng()=0
Retourne le gestionnaire de parallélisme.
virtual const IConfiguration * configuration() const =0
Configuration associée.
virtual IMeshMng * meshMng() const =0
Retourne le gestionnaire de maillage.
virtual ISession * session() const =0
Session.
virtual bool isContinue() const =0
Vrai si on effectue une reprise, faux sinon.
virtual ITimeLoopMng * timeLoopMng()=0
Retourne le gestionnaire de la boucle en temps.
virtual ITimeHistoryMng * timeHistoryMng()=0
Retourne le gestionnaire d'historique.
virtual Int32 nbSubDomain() const =0
Nombre total de sous-domaines.
virtual IModuleMaster * moduleMaster() const =0
Interface du module maître.
virtual IVariableMng * variableMng()=0
Retourne le gestionnaire de variables.
virtual ITimerMng * timerMng() const =0
Retourne le gestionnaire de timers.
virtual void readCaseMeshes()=0
Lit les informations de maillage du jeu de données.
virtual IMainFactory * mainFactory()=0
Manufacture principale.
virtual IEntryPointMng * entryPointMng()=0
Retourne le gestionnaire de points d'entrée.
virtual IPhysicalUnitSystem * physicalUnitSystem()=0
Système d'unité du sous-domaine.
virtual ICaseMng * caseMng()=0
Retourne le gestionnaire du jeu de données.
virtual IParallelMng * allReplicaParallelMng() const =0
Retourne le gestionnaire de parallélisme pour tous les réplicats.
virtual ILoadBalanceMng * loadBalanceMng()=0
Retourne le gestionnaire d'équilibrage de charge.
virtual IAcceleratorMng * acceleratorMng()=0
Gestionnaire de l'accélérateur associé
Interface d'un gestionnaire de thread.
Definition IThreadMng.h:30
Classe gérant un historique de valeurs.
Interface du gestionnaire de la boucle en temps.
Interface d'un gestionnaire de timer.
Definition ITimerMng.h:53
Interface du gestionnaire de variables.
Handle sur un maillage.
Definition MeshHandle.h:47
Noeud d'un arbre DOM.
Definition XmlNode.h:51
Classe de base des vecteurs 1D de données.
Vue constante d'un tableau de type T.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-