14#include "arcane/impl/ArcaneSimpleExecutor.h"
16#include "arcane/utils/NotImplementedException.h"
17#include "arcane/utils/FatalErrorException.h"
18#include "arcane/utils/TraceClassConfig.h"
19#include "arcane/utils/ITraceMng.h"
20#include "arcane/utils/ApplicationInfo.h"
24#include "arcane/impl/ArcaneMain.h"
25#include "arcane/impl/MainFactory.h"
26#include "arcane/impl/internal/ArcaneMainExecInfo.h"
28#include "arcane/core/SubDomainBuildInfo.h"
29#include "arcane/core/ISession.h"
30#include "arcane/core/ICodeService.h"
31#include "arcane/core/IApplication.h"
32#include "arcane/core/IParallelSuperMng.h"
33#include "arcane/core/IParallelMng.h"
34#include "arcane/core/ITimeStats.h"
35#include "arcane/core/IIOMng.h"
70 ~Impl()
noexcept(
false)
77 m_arcane_main->finalize();
80 delete m_main_factory;
89 bool m_has_minimal_verbosity_level =
false;
90 bool m_has_output_level =
false;
103 auto& build_info = m_p->m_application_build_info;
104 build_info.parseArguments(cmd_line_args);
107 build_info.setConfigFileName(
String());
117ArcaneSimpleExecutor::
118~ArcaneSimpleExecutor() noexcept(false)
126void ArcaneSimpleExecutor::
129 if (!m_p->m_arcane_main)
130 ARCANE_FATAL(
"This instance is not initialized. Call initialize() method");
142 auto& build_info = m_p->m_application_build_info;
144 m_p->m_has_minimal_verbosity_level = (build_info.minimalVerbosityLevel() != Trace::UNSPECIFIED_VERBOSITY_LEVEL);
145 m_p->m_has_output_level = (build_info.outputLevel() != Trace::UNSPECIFIED_VERBOSITY_LEVEL);
147 if (!m_p->m_has_minimal_verbosity_level)
148 build_info.setMinimalVerbosityLevel(level);
149 if (!m_p->m_has_output_level)
150 build_info.setOutputLevel(level);
156int ArcaneSimpleExecutor::
159 if (m_p->m_arcane_main)
164 m_p->m_main_factory = factory;
165 m_p->m_arcane_main =
new ArcaneMainExecInfo(app_info, m_p->m_application_build_info, factory);
174int ArcaneSimpleExecutor::
177 if (!m_p->m_arcane_main)
181 IArcaneMain* am = m_p->m_arcane_main->arcaneMainClass();
182 bool clean_abort =
false;
183 bool is_print =
true;
190ApplicationBuildInfo& ArcaneSimpleExecutor::
191applicationBuildInfo()
193 return m_p->m_application_build_info;
199const ApplicationBuildInfo& ArcaneSimpleExecutor::
200applicationBuildInfo()
const
202 return m_p->m_application_build_info;
208ISubDomain* ArcaneSimpleExecutor::
209createSubDomain(
const String& case_file_name, Span<const std::byte> file_content)
212 IApplication* app = m_p->m_arcane_main->arcaneMainClass()->application();
213 ITraceMng* tr = app->traceMng();
214 if (!m_p->m_has_minimal_verbosity_level)
215 tr->setVerbosityLevel(Trace::DEFAULT_VERBOSITY_LEVEL);
216 if (!m_p->m_has_output_level)
217 tr->setStandardOutputVerbosityLevel(Trace::DEFAULT_VERBOSITY_LEVEL);
218 IMainFactory* main_factory = app->mainFactory();
220 Ref<ICodeService> code_service = createArcaneCodeService(app);
221 ISession* session(code_service->createSession());
222 IParallelSuperMng* psm = app->parallelSuperMng();
223 Ref<IParallelMng> world_pm = psm->internalCreateWorldParallelMng(0);
225 SubDomainBuildInfo sdbi(world_pm, 0);
226 UniqueArray<Byte> case_bytes;
227 bool has_case_file = !case_file_name.empty();
229 sdbi.setCaseFileName(case_file_name);
230 if (file_content.empty()) {
231 bool is_bad = app->ioMng()->collectiveRead(case_file_name, case_bytes);
233 ARCANE_FATAL(
"Can not read case file '{0}'", case_file_name);
234 sdbi.setCaseBytes(case_bytes);
235 tr->info() <<
"Create sub domain with case file '" << case_file_name <<
"'";
238 sdbi.setCaseContent(file_content);
242 sdbi.setCaseFileName({});
243 if (file_content.empty())
244 sdbi.setCaseBytes({});
246 sdbi.setCaseContent(file_content);
249 ITimeStats* time_stat = main_factory->createTimeStats(world_pm->timerMng(), tr,
"Stats");
250 time_stat->beginGatherStats();
251 m_p->m_time_stats_list.add(time_stat);
252 world_pm->setTimeStats(time_stat);
254 ISubDomain* sub_domain(session->createSubDomain(sdbi));
256 code_service->initCase(sub_domain,
false);
264ISubDomain* ArcaneSimpleExecutor::
265createSubDomain(
const String& case_file_name)
267 return createSubDomain(case_file_name, {});
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
File containing declarations concerning the message passing model.
Information for constructing an instance of IApplication.
const CommandLineArguments & commandLineArguments() const
Command line arguments.
int initialize()
Creation of the 'IArcaneMain' instance.
Execution management class.
static void arcaneInitialize()
Initializes Arcane.
static void arcaneFinalize()
Terminates Arcane usage.
static int callFunctorWithCatchedException(IFunctor *functor, IArcaneMain *amain, bool *clean_abort, bool is_print=true)
Calls the functor functor while catching possible exceptions.
static ApplicationInfo & defaultApplicationInfo()
Default application info.
IArcaneMain * createArcaneMain(const ApplicationInfo &app_info) override
Creates an instance of IArcaneMain.
void _setDefaultVerbosityLevel(Integer level)
Sets the trace level to level if it is not set.
Interface of the code management class.
Interface managing execution time statistics.
Reference to an instance.
Unicode character string.
1D data vector with value semantics (STL style).
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.