Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
MainFactory.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* MainFactory.cc (C) 2000-2023 */
9/* */
10/* AbstractFactory des gestionnaires d'Arcane. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/impl/MainFactory.h"
15
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/PlatformUtils.h"
18#include "arcane/utils/ITraceMng.h"
19#include "arcane/utils/ScopedPtr.h"
20
21#include "arcane/IArcaneMain.h"
22#include "arcane/ISubDomain.h"
23#include "arcane/IModuleMng.h"
24#include "arcane/IModule.h"
25#include "arcane/IModuleMaster.h"
26#include "arcane/ServiceUtils.h"
27#include "arcane/IFactoryService.h"
28#include "arcane/IMeshFactory.h"
29#include "arcane/IPrimaryMesh.h"
30#include "arcane/IApplication.h"
31#include "arcane/ItemGroup.h"
32#include "arcane/ServiceBuilder.h"
33#include "arcane/IMeshMng.h"
34#include "arcane/MeshHandle.h"
35#include "arcane/MeshBuildInfo.h"
36
37#include "arcane/impl/internal/MeshFactoryMng.h"
38
39/*---------------------------------------------------------------------------*/
40/*---------------------------------------------------------------------------*/
41
42namespace Arcane
43{
44
45/*---------------------------------------------------------------------------*/
46/*---------------------------------------------------------------------------*/
47
48extern "C++" ARCANE_IMPL_EXPORT IArcaneMain*
49createArcaneMainBatch(const ApplicationInfo& app_info,IMainFactory* main_factory);
50extern "C++" IApplication* arcaneCreateApplication(IArcaneMain*);
51extern "C++" IVariableMng* arcaneCreateVariableMng(ISubDomain*);
52extern "C++" IModuleMng* arcaneCreateModuleMng(ISubDomain*);
53extern "C++" IEntryPointMng* arcaneCreateEntryPointMng(ISubDomain*);
54extern "C++" ARCANE_IMPL_EXPORT ITimeHistoryMng* arcaneCreateTimeHistoryMng2(ISubDomain*);
55extern "C++" ICaseMng* arcaneCreateCaseMng(ISubDomain*);
56extern "C++" ICaseDocument* arcaneCreateCaseDocument(ITraceMng*,const String& lang);
57extern "C++" ICaseDocument* arcaneCreateCaseDocument(ITraceMng*,IXmlDocumentHolder* doc);
58extern "C++" ITimeStats* arcaneCreateTimeStats(ITimerMng* timer_mng,ITraceMng* trm,const String& name);
59extern "C++" ITimeLoopMng* arcaneCreateTimeLoopMng(ISubDomain*);
60extern "C++" IServiceLoader* arcaneCreateServiceLoader();
61extern "C++" IServiceMng* arcaneCreateServiceMng(IBase*);
62extern "C++" ICheckpointMng* arcaneCreateCheckpointMng(ISubDomain*);
63extern "C++" IPropertyMng* arcaneCreatePropertyMng(ITraceMng*);
64extern "C++" Ref<IPropertyMng> arcaneCreatePropertyMngReference(ITraceMng*);
65extern "C++" IDataFactory* arcaneCreateDataFactory(IApplication*);
66extern "C++" Ref<IDataFactoryMng> arcaneCreateDataFactoryMngRef(IApplication*);
67extern "C++" ITraceMng* arcaneCreateTraceMng();
68extern "C++" ITraceMngPolicy* arcaneCreateTraceMngPolicy(IApplication*);
69extern "C++" ILoadBalanceMng* arcaneCreateLoadBalanceMng(ISubDomain*);
70
71extern "C++" ARCANE_CORE_EXPORT IModuleMaster*
72arcaneCreateModuleMaster(ISubDomain*);
73
74extern "C++" ARCANE_CORE_EXPORT ITimeLoop*
75arcaneCreateTimeLoop(IApplication* sm,const String& name);
76
77extern "C++" ARCANE_IMPL_EXPORT IIOMng*
78arcaneCreateIOMng(IParallelSuperMng*);
79
80extern "C++" ARCANE_IMPL_EXPORT IIOMng*
81arcaneCreateIOMng(IParallelMng*);
82
83namespace Accelerator
84{
85extern "C++" ARCANE_IMPORT Ref<IAcceleratorMng>
86arcaneCreateAcceleratorMngRef(ITraceMng* tm);
87}
88
89/*---------------------------------------------------------------------------*/
90/*---------------------------------------------------------------------------*/
91
92namespace
93{
95String _getMeshFactoryName(bool is_amr)
96{
97 if (is_amr)
98 return String("ArcaneDynamicAMRMeshFactory");
99 return String("ArcaneDynamicMeshFactory");
100}
101}
102
103/*---------------------------------------------------------------------------*/
104/*---------------------------------------------------------------------------*/
105
106MainFactory::
107MainFactory()
108{
109}
110
111/*---------------------------------------------------------------------------*/
112/*---------------------------------------------------------------------------*/
113
114MainFactory::
115~MainFactory()
116{
117}
118
119/*---------------------------------------------------------------------------*/
120/*---------------------------------------------------------------------------*/
121
124{
125 return createArcaneMainBatch(app_info,this);
126}
127
128/*---------------------------------------------------------------------------*/
129/*---------------------------------------------------------------------------*/
130
133{
134 return arcaneCreateApplication(am);
135}
136
137/*---------------------------------------------------------------------------*/
138/*---------------------------------------------------------------------------*/
139
142{
143 return arcaneCreateVariableMng(sd);
144}
145
146/*---------------------------------------------------------------------------*/
147/*---------------------------------------------------------------------------*/
148
151{
152 return arcaneCreateModuleMng(sd);
153}
154
155/*---------------------------------------------------------------------------*/
156/*---------------------------------------------------------------------------*/
157
160{
161 return arcaneCreateEntryPointMng(sd);
162}
163
164/*---------------------------------------------------------------------------*/
165/*---------------------------------------------------------------------------*/
166
169{
170 ITimeHistoryMng* thm = 0;
171 thm = arcaneCreateTimeHistoryMng2(sd);
172 return thm;
173}
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
177
180{
181 return arcaneCreateCaseMng(sd);
182}
183
184/*---------------------------------------------------------------------------*/
185/*---------------------------------------------------------------------------*/
186
189{
190 ITimerMng* tm = sd->timerMng();
191 String name = String::format("Rank{0}", sd->subDomainId());
192 return arcaneCreateTimeStats(tm,sd->traceMng(),name);
193}
194
195/*---------------------------------------------------------------------------*/
196/*---------------------------------------------------------------------------*/
197
200{
201 return arcaneCreateTimeStats(tim,trm,name);
202}
203
204/*---------------------------------------------------------------------------*/
205/*---------------------------------------------------------------------------*/
206
209{
210 return arcaneCreateTimeLoopMng(sd);
211}
212
213/*---------------------------------------------------------------------------*/
214/*---------------------------------------------------------------------------*/
215
218{
219 return arcaneCreateTimeLoop(sm,name);
220}
221
222/*---------------------------------------------------------------------------*/
223/*---------------------------------------------------------------------------*/
224
227{
228 return arcaneCreateIOMng(app->parallelSuperMng());
229}
230
231/*---------------------------------------------------------------------------*/
232/*---------------------------------------------------------------------------*/
233
236{
237 return arcaneCreateIOMng(pm);
238}
239
240/*---------------------------------------------------------------------------*/
241/*---------------------------------------------------------------------------*/
242
245{
246 return arcaneCreateServiceLoader();
247}
248
249/*---------------------------------------------------------------------------*/
250/*---------------------------------------------------------------------------*/
251
254{
255 return arcaneCreateServiceMng(base);
256}
257
258/*---------------------------------------------------------------------------*/
259/*---------------------------------------------------------------------------*/
260
263{
264 return arcaneCreateCheckpointMng(sd);
265}
266
267/*---------------------------------------------------------------------------*/
268/*---------------------------------------------------------------------------*/
269
272{
273 return arcaneCreatePropertyMng(sd->traceMng());
274}
275
276/*---------------------------------------------------------------------------*/
277/*---------------------------------------------------------------------------*/
278
281{
282 return arcaneCreatePropertyMngReference(sd->traceMng());
283}
284
285/*---------------------------------------------------------------------------*/
286/*---------------------------------------------------------------------------*/
287
290{
291 return arcaneCreateCaseDocument(sm->traceMng(),String());
292}
293
294/*---------------------------------------------------------------------------*/
295/*---------------------------------------------------------------------------*/
296
299{
300 return arcaneCreateCaseDocument(sm->traceMng(),lang);
301}
302
303/*---------------------------------------------------------------------------*/
304/*---------------------------------------------------------------------------*/
305
308{
309 return arcaneCreateCaseDocument(sm->traceMng(),doc);
310}
311
312/*---------------------------------------------------------------------------*/
313/*---------------------------------------------------------------------------*/
314
317{
318 return createMesh(sd,sd->parallelMng(),name, amr_type);
319}
320
321/*---------------------------------------------------------------------------*/
322/*---------------------------------------------------------------------------*/
323
325createMesh(ISubDomain* sd,const String& name, bool is_amr)
326{
327 return createMesh(sd,sd->parallelMng(),name, (is_amr ? eMeshAMRKind::Cell : eMeshAMRKind::None));
328}
329
330/*---------------------------------------------------------------------------*/
331/*---------------------------------------------------------------------------*/
332
334createMesh(ISubDomain* sd,IParallelMng* pm,const String& name, bool is_amr)
335{
336 return createMesh(sd, pm, name, (is_amr ? eMeshAMRKind::Cell : eMeshAMRKind::None));
337}
338
339/*---------------------------------------------------------------------------*/
340/*---------------------------------------------------------------------------*/
341
344{
345 String factory_name = _getMeshFactoryName(amr_type != eMeshAMRKind::None);
346 IMeshFactoryMng* mfm = sd->meshMng()->meshFactoryMng();
348 MeshKind mk(build_info.meshKind());
349 mk.setMeshAMRKind(amr_type);
350 build_info.addMeshKind(mk);
351 build_info.addFactoryName(factory_name);
352 build_info.addParallelMng(makeRef(pm));
353 return mfm->createMesh(build_info);
354}
355
356/*---------------------------------------------------------------------------*/
357/*---------------------------------------------------------------------------*/
358
360createMesh(ISubDomain* sd,const String& name)
361{
362 return createMesh(sd,sd->parallelMng(),name,eMeshAMRKind::None);
363}
364
365/*---------------------------------------------------------------------------*/
366/*---------------------------------------------------------------------------*/
367
370{
371 return createMesh(sd,pm,name,eMeshAMRKind::None);
372}
373
374/*---------------------------------------------------------------------------*/
375/*---------------------------------------------------------------------------*/
376
378createSubMesh(IMesh* mesh,const ItemGroup& group,const String& name)
379{
380 // Actuellement, les sous-maillages des maillages AMR ne sont pas supportés
381 bool is_amr = false;
383 IMeshFactoryMng* mfm = mesh->meshMng()->meshFactoryMng();
385 build_info.addFactoryName(factory_name);
386 build_info.addParentGroup(group);
387 return mfm->createMesh(build_info);
388}
389
390/*---------------------------------------------------------------------------*/
391/*---------------------------------------------------------------------------*/
392
395{
396 return arcaneCreateDataFactory(sm);
397}
398
399/*---------------------------------------------------------------------------*/
400/*---------------------------------------------------------------------------*/
401
404{
405 return arcaneCreateDataFactoryMngRef(app);
406}
407
408/*---------------------------------------------------------------------------*/
409/*---------------------------------------------------------------------------*/
410
413{
414 return Accelerator::arcaneCreateAcceleratorMngRef(tm);
415}
416
417/*---------------------------------------------------------------------------*/
418/*---------------------------------------------------------------------------*/
419
422{
423 return arcaneCreateTraceMng();
424}
425
426/*---------------------------------------------------------------------------*/
427/*---------------------------------------------------------------------------*/
428
431{
432 return arcaneCreateTraceMngPolicy(app);
433}
434
435/*---------------------------------------------------------------------------*/
436/*---------------------------------------------------------------------------*/
437
440{
441 IModuleMaster* mm = arcaneCreateModuleMaster(sd);
442 IModule* m = dynamic_cast<IModule*>(mm);
443 if (!m)
444 ARCANE_FATAL("module is not a derived class of 'IModule'");
445 sd->moduleMng()->addModule(makeRef(m));
446 return mm;
447}
448
449/*---------------------------------------------------------------------------*/
450/*---------------------------------------------------------------------------*/
451
454{
455 return arcaneCreateLoadBalanceMng(sd);
456}
457
458/*---------------------------------------------------------------------------*/
459/*---------------------------------------------------------------------------*/
460
461} // End namespace Arcane
462
463/*---------------------------------------------------------------------------*/
464/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Informations sur une application.
Interface de l'application.
Interface de la classe de gestion du code.
Definition IArcaneMain.h:54
Interface de la classe de base des objets principaux arcane.
Definition IBase.h:38
Interface d'une classe gérant un document XML du jeu de données.
Interface du gestionnaire de cas.
Definition ICaseMng.h:56
Interface du gestionnaire des informations des protections.
Interface d'une fabrique d'une donnée.
Interface du gestionnaire de point d'entrée.
Interface du gestionnaire des entrées sorties.
Definition IIOMng.h:42
Interface d'enregistrement des variables pour l'equilibrage de charge.
Interface du gestionnaire de fabriques de maillages.
virtual IMeshMng * meshMng() const =0
Gestionnaire de maillage associé
Interface du module principal.
Interface du gestionnaire de modules.
Definition IModuleMng.h:39
Interface d'un module.
Definition IModule.h:39
Interface du gestionnaire de parallélisme pour un sous-domaine.
Interface du gestionnaire des propriétés.
Interface de chargement des services.
Interface du gestionnaire de services.
Definition IServiceMng.h:31
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Classe gérant un historique de valeurs.
Interface du gestionnaire de la boucle en temps.
Interface d'une boucle en temps.
Definition ITimeLoop.h:41
Interface gérant les statistiques sur les temps d'exécution.
Definition ITimeStats.h:48
Interface d'un gestionnaire de timer.
Definition ITimerMng.h:53
Interface du gestionnaire de configuration d'un gestionnnaire de trace.
Interface du gestionnaire de variables.
Gestionnaire d'un document DOM.
Groupe d'entités de maillage.
Definition ItemGroup.h:49
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
IMesh * createSubMesh(IMesh *mesh, const ItemGroup &group, const String &name) override
Créé un sous-maillage pour le maillage mesh, de nom name.
IVariableMng * createVariableMng(ISubDomain *) override
Crée une instance du gestionnaire de variable.
ITraceMng * createTraceMng() override
Créé un gestionnaire de trace.
Ref< IPropertyMng > createPropertyMngReference(ISubDomain *) override
Crée une instance du gestionnaire de propriétés.
ITraceMngPolicy * createTraceMngPolicy(IApplication *app) override
Créé un gestionnaire de configuration pour un gestion de trace.
IIOMng * createIOMng(IApplication *) override
Crée une instance du gestionnaire d'entrée/sortie.
ICaseMng * createCaseMng(ISubDomain *) override
Crée une instance du gestionnaire du jeu de données.
ITimeHistoryMng * createTimeHistoryMng(ISubDomain *) override
Crée une instance du gestionnaire d'historique en temps.
ICheckpointMng * createCheckpointMng(ISubDomain *) override
Crée une instance du gestionnaire de protections.
IEntryPointMng * createEntryPointMng(ISubDomain *) override
Crée une instance du gestionnaire des points d'entrée.
ILoadBalanceMng * createLoadBalanceMng(ISubDomain *sd) override
Cree un gestionnaire de description pour l'equilibrage.
IPropertyMng * createPropertyMng(ISubDomain *) override
Crée une instance du gestionnaire de propriétés.
IServiceMng * createServiceMng(IBase *) override
Crée une instance du gestionnaire de services.
IApplication * createApplication(IArcaneMain *) override
Crée une instance d'un superviseur.
IArcaneMain * createArcaneMain(const ApplicationInfo &app_info) override
Crée une instance de IArcaneMain.
ICaseDocument * createCaseDocument(IApplication *) override
Crée une instance d'un document du jeu de données.
IPrimaryMesh * createMesh(ISubDomain *sub_domain, const String &name) override
Créé ou récupère un maillage.
Ref< IAcceleratorMng > createAcceleratorMngRef(ITraceMng *tm) override
Créé un gestionnaire pour les accélérateurs.
IDataFactory * createDataFactory(IApplication *) override
Créé une fabrique pour les données.
Ref< IDataFactoryMng > createDataFactoryMngRef(IApplication *) override
Créé un gestionnaire de fabrique pour les données.
IServiceLoader * createServiceLoader() override
Crée une instance du chargeur de services.
ITimeStats * createTimeStats(ISubDomain *) override
Crée une instance des statistiques de temps d'exécution.
IModuleMng * createModuleMng(ISubDomain *) override
Crée une instance du gestionnaire de module.
ITimeLoop * createTimeLoop(IApplication *sm, const String &name) override
Crée une boucle en temps de nom name.
IModuleMaster * createModuleMaster(ISubDomain *sd) override
Créé le module maitre pour le sous-domaine sd.
ITimeLoopMng * createTimeLoopMng(ISubDomain *) override
Crée une instance du gestionnaire de la boucle en temps.
Paramètres nécessaires à la construction d'un maillage.
Caractéristiques d'un maillage.
Definition MeshKind.h:59
Interface du gestionnaire de traces.
Chaîne de caractères unicode.
ITraceMng * traceMng() const
Gestionnaire de trace.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
eMeshAMRKind
Type de maillage AMR.
Definition MeshKind.h:40