Arcane  v4.1.7.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
StandaloneSubDomain.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/* StandaloneSubDomain.cc (C) 2000-2026 */
9/* */
10/* Implémentation autonome d'un sous-domaine. */
11/*---------------------------------------------------------------------------*/
12/*---------------------------------------------------------------------------*/
13
14#include "arcane/launcher/StandaloneSubDomain.h"
15
16#include "arccore/base/internal/ProfilingInternal.h"
17
18#include "arcane/utils/Ref.h"
19#include "arcane/utils/ITraceMng.h"
20#include "arcane/utils/FatalErrorException.h"
21#include "arcane/utils/Exception.h"
22
23#include "arcane/impl/ArcaneSimpleExecutor.h"
24
25#include "arcane/core/ISubDomain.h"
26
27#include "arcane/launcher/ArcaneLauncher.h"
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31
32namespace Arcane
33{
34
36{
37 public:
38
39 Impl() = default;
40 ~Impl()
41 {
42 arcaneCallFunctionAndCatchException([&]{ dumpStats(); });
43 StandaloneSubDomain::_notifyRemoveStandaloneSubDomain();
44 }
45
46 void init(const String& case_file_name)
47 {
48 int r = m_simple_exec.initialize();
49 if (r != 0)
50 ARCANE_FATAL("Error during initialization r={0}", r);
51 m_sub_domain = m_simple_exec.createSubDomain(case_file_name);
52 m_trace_mng = makeRef(m_sub_domain->traceMng());
53 }
54
55 void dumpStats()
56 {
57 if (!m_sub_domain)
58 return;
59 std::ostringstream ostr;
60 ::Arcane::Impl::dumpProfilingStatistics(ostr);
61 if (m_trace_mng.get())
62 m_trace_mng->info() << ostr.str();
63 else
64 std::cout << ostr.str() << "\n";
65 }
66
67 public:
68
69 ArcaneSimpleExecutor m_simple_exec;
70 ISubDomain* m_sub_domain = nullptr;
71 Ref<ITraceMng> m_trace_mng;
72};
73
74/*---------------------------------------------------------------------------*/
75/*---------------------------------------------------------------------------*/
76
81
82/*---------------------------------------------------------------------------*/
83/*---------------------------------------------------------------------------*/
84
85void StandaloneSubDomain::
86_checkIsInitialized()
87{
88 if (m_p.get())
89 return;
90 ARCANE_FATAL("Instance of 'StandaloneSubDomain' is not initialized.\n"
91 "You have to call ArcaneLauncher::createStandaloneSubDomain()\n"
92 "to get a valid instance");
93}
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97
100{
101 _checkIsInitialized();
102 return m_p->m_trace_mng.get();
103}
104
105/*---------------------------------------------------------------------------*/
106/*---------------------------------------------------------------------------*/
107
109subDomain()
110{
111 _checkIsInitialized();
112 return m_p->m_sub_domain;
113}
114
115/*---------------------------------------------------------------------------*/
116/*---------------------------------------------------------------------------*/
117
118void StandaloneSubDomain::
119_initUniqueInstance(const String& case_file_name)
120{
121 m_p = makeRef(new Impl());
122 m_p->init(case_file_name);
123}
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127
128bool StandaloneSubDomain::
129_isValid()
130{
131 return m_p.get();
132}
133
134/*---------------------------------------------------------------------------*/
135/*---------------------------------------------------------------------------*/
136
137void StandaloneSubDomain::
138_notifyRemoveStandaloneSubDomain()
139{
140 ArcaneLauncher::_notifyRemoveStandaloneSubDomain();
141}
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146} // End namespace Arcane
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Interface du gestionnaire d'un sous-domaine.
Definition ISubDomain.h:74
Interface du gestionnaire de traces.
Référence à une instance.
ITraceMng * traceMng()
Gestionnaire de trace associé.
StandaloneSubDomain()
Constructeur non initialisé.
ISubDomain * subDomain()
Sous-domaine.
Chaîne de caractères unicode.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Integer arcaneCallFunctionAndCatchException(std::function< void()> function)
auto makeRef(InstanceType *t) -> Ref< InstanceType >
Créé une référence sur un pointeur.