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");
143 auto& build_info = m_p->m_application_build_info;
145 m_p->m_has_minimal_verbosity_level = (build_info.minimalVerbosityLevel() != Trace::UNSPECIFIED_VERBOSITY_LEVEL);
146 m_p->m_has_output_level = (build_info.outputLevel() != Trace::UNSPECIFIED_VERBOSITY_LEVEL);
148 if (!m_p->m_has_minimal_verbosity_level)
149 build_info.setMinimalVerbosityLevel(level);
150 if (!m_p->m_has_output_level)
151 build_info.setOutputLevel(level);
157int ArcaneSimpleExecutor::
160 if (m_p->m_arcane_main)
165 m_p->m_main_factory = factory;
166 m_p->m_arcane_main =
new ArcaneMainExecInfo(app_info, m_p->m_application_build_info, factory);
175int ArcaneSimpleExecutor::
178 if (!m_p->m_arcane_main)
182 IArcaneMain* am = m_p->m_arcane_main->arcaneMainClass();
183 bool clean_abort =
false;
184 bool is_print =
true;
191ApplicationBuildInfo& ArcaneSimpleExecutor::
192applicationBuildInfo()
194 return m_p->m_application_build_info;
200const ApplicationBuildInfo& ArcaneSimpleExecutor::
201applicationBuildInfo()
const
203 return m_p->m_application_build_info;
209ISubDomain* ArcaneSimpleExecutor::
210createSubDomain(
const String& case_file_name, Span<const std::byte> file_content)
213 IApplication* app = m_p->m_arcane_main->arcaneMainClass()->application();
214 ITraceMng* tr = app->traceMng();
215 if (!m_p->m_has_minimal_verbosity_level)
216 tr->setVerbosityLevel(Trace::DEFAULT_VERBOSITY_LEVEL);
217 if (!m_p->m_has_output_level)
218 tr->setStandardOutputVerbosityLevel(Trace::DEFAULT_VERBOSITY_LEVEL);
219 IMainFactory* main_factory = app->mainFactory();
221 Ref<ICodeService> code_service = createArcaneCodeService(app);
222 ISession* session(code_service->createSession());
223 IParallelSuperMng* psm = app->parallelSuperMng();
224 Ref<IParallelMng> world_pm = psm->internalCreateWorldParallelMng(0);
226 SubDomainBuildInfo sdbi(world_pm, 0);
227 UniqueArray<Byte> case_bytes;
228 bool has_case_file = !case_file_name.empty();
230 sdbi.setCaseFileName(case_file_name);
231 if (file_content.empty()) {
232 bool is_bad = app->ioMng()->collectiveRead(case_file_name, case_bytes);
234 ARCANE_FATAL(
"Can not read case file '{0}'", case_file_name);
235 sdbi.setCaseBytes(case_bytes);
236 tr->info() <<
"Create sub domain with case file '" << case_file_name <<
"'";
239 sdbi.setCaseContent(file_content);
243 sdbi.setCaseFileName({});
244 if (file_content.empty())
245 sdbi.setCaseBytes({});
247 sdbi.setCaseContent(file_content);
250 ITimeStats* time_stat = main_factory->createTimeStats(world_pm->timerMng(), tr,
"Stats");
251 time_stat->beginGatherStats();
252 m_p->m_time_stats_list.add(time_stat);
253 world_pm->setTimeStats(time_stat);
255 ISubDomain* sub_domain(session->createSubDomain(sdbi));
257 code_service->initCase(sub_domain,
false);
265ISubDomain* ArcaneSimpleExecutor::
266createSubDomain(
const String& case_file_name)
268 return createSubDomain(case_file_name, {});
#define ARCANE_FATAL(...)
Macro envoyant une exception FatalErrorException.
Fichier contenant les déclarations concernant le modèle de programmation par échange de message.
Informations pour construire une instance de IApplication.
Informations sur une application.
const CommandLineArguments & commandLineArguments() const
Arguments de la ligne de commande.
int initialize()
Création de l'instance 'IArcaneMain'.
Classe de gestion de l'exécution.
static void arcaneInitialize()
Initialise Arcane.
static void arcaneFinalize()
Termine l'utilisation Arcane.
static int callFunctorWithCatchedException(IFunctor *functor, IArcaneMain *amain, bool *clean_abort, bool is_print=true)
Appelle le fonctor functor en récupérant les éventuelles exceptions.
static ApplicationInfo & defaultApplicationInfo()
Infos par défaut de l'application.
IArcaneMain * createArcaneMain(const ApplicationInfo &app_info) override
Crée une instance de IArcaneMain.
void _setDefaultVerbosityLevel(Integer level)
Positionne le niveau des traces à level si elles ne sont pas positionnées.
Arguments de la ligne de commande.
Interface de l'application.
Interface de la classe de gestion du code.
Interface gérant les statistiques sur les temps d'exécution.
Référence à une instance.
Chaîne de caractères unicode.
Vecteur 1D de données avec sémantique par valeur (style STL).
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type représentant un entier.