14#include "arcane/impl/ArcaneMain.h"
16#include "arcane/utils/Iostream.h"
17#include "arcane/utils/List.h"
18#include "arcane/utils/Iterator.h"
19#include "arcane/utils/ScopedPtr.h"
20#include "arcane/utils/PlatformUtils.h"
21#include "arcane/utils/FatalErrorException.h"
22#include "arcane/utils/ParallelFatalErrorException.h"
23#include "arcane/utils/OStringStream.h"
24#include "arcane/utils/ApplicationInfo.h"
25#include "arcane/utils/ValueConvert.h"
26#include "arcane/utils/ITraceMng.h"
27#include "arcane/utils/SignalException.h"
28#include "arcane/utils/TimeoutException.h"
29#include "arcane/utils/ArithmeticException.h"
30#include "arcane/utils/StringBuilder.h"
31#include "arccore/base/internal/IDynamicLibraryLoader.h"
32#include "arcane/utils/CheckedConvert.h"
33#include "arcane/utils/CommandLineArguments.h"
34#include "arcane/utils/TestLogger.h"
37#include "arccore/base/internal/ConvertInternal.h"
39#include "arccore/common/internal/MemoryUtilsInternal.h"
40#include "arccore/common/accelerator/internal/RuntimeLoader.h"
42#include "arcane/core/IMainFactory.h"
43#include "arcane/core/IApplication.h"
44#include "arcane/core/IServiceLoader.h"
45#include "arcane/core/IParallelMng.h"
46#include "arcane/core/IParallelSuperMng.h"
47#include "arcane/core/ISession.h"
48#include "arcane/core/VariableRef.h"
49#include "arcane/core/ItemTypeMng.h"
50#include "arcane/core/ServiceUtils.h"
51#include "arcane/core/CaseOptions.h"
52#include "arcane/core/ItemGroupImpl.h"
53#include "arcane/core/DotNetRuntimeInitialisationInfo.h"
54#include "arcane/core/AcceleratorRuntimeInitialisationInfo.h"
55#include "arcane/core/ApplicationBuildInfo.h"
57#include "arcane/core/IServiceFactory.h"
58#include "arcane/core/IModuleFactory.h"
60#include "arcane/impl/MainFactory.h"
61#include "arcane/impl/InternalInfosDumper.h"
62#include "arcane/impl/internal/ArcaneMainExecInfo.h"
63#include "arcane/impl/internal/ThreadBindingMng.h"
65#include "arccore/common/accelerator/internal/RegisterRuntimeInfo.h"
67#include "arcane_internal_config.h"
71#ifndef ARCANE_OS_WIN32
82#include "arcane/impl/FlexLMTools.h"
100 bool m_has_dotnet_wrapper =
false;
119 if (!global_static_info)
121 return global_static_info;
123void _deleteStaticInfo()
125 delete global_static_info;
126 global_static_info =
nullptr;
133extern "C" void arcaneEndProgram()
142typedef void (*fSignalFunc)(int);
143void arcaneSignalHandler(
int);
155extern "C++" ARCANE_UTILS_EXPORT
void
156arcaneRedirectSignals(fSignalFunc sig_func);
158extern "C++" ARCANE_UTILS_EXPORT
void
159arcaneCallDefaultSignal(
int val);
161extern "C++" ARCANE_UTILS_EXPORT
void
162initializeStringConverter();
170extern "C++" ARCCORE_COMMON_EXPORT
void
171arccorePrintSpecificMemoryStats();
175bool ArcaneMain::m_has_garbage_collector =
false;
176bool ArcaneMain::m_is_master_io =
true;
177bool ArcaneMain::m_is_use_test_logger =
false;
189 return createArcaneMainBatch(app_info,
this);
210 , m_application_build_info(build_infos)
211 , m_dotnet_info(dotnet_info)
212 , m_accelerator_info(accelerator_info)
233 bool redirect_signals =
true;
235 (void)builtInGetValue(redirect_signals, rv);
236 if (redirect_signals) {
245setUseTestLogger(
bool v)
247 m_is_use_test_logger = v;
256 m_default_main_factory = mf;
262class ArcaneMainExecFunctor
268 : m_app_info(app_info)
269 , m_exec_main(exec_main)
278 m_app_info.args(args);
279 if (!m_exec_main->parseArgs(args))
280 m_exec_main->execute();
304 auto* x = _staticInfo();
305 if (x->m_nb_autodetect > 0)
306 return x->m_autodetect_return_value;
308 ArcaneMain::_setArcaneLibraryPath();
310 std::chrono::high_resolution_clock clock;
314 ArcaneMain::_checkAutoDetectMPI();
316 bool has_accelerator =
false;
320 auto start_time = clock.now();
322 auto end_time = clock.now();
325 x->m_init_time_accelerator = _getTime(end_time, start_time);
326 ++x->m_nb_autodetect;
328 return x->m_autodetect_return_value;
331 template <
typename TimeType>
332 Real _getTime(TimeType end_time, TimeType start_time)
334 auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(end_time - start_time);
335 Real x =
static_cast<Real>(duration.count());
359 m_clean_abort =
false;
361 ArcaneMain::redirectSignals();
365 if (m_has_build_info) {
367 m_application_build_info,
373 m_exec_main = m_main_factory->createArcaneMain(
m_app_info);
375 m_exec_main->build();
376 ArcaneMain::m_is_master_io = m_exec_main->application()->parallelSuperMng()->isMasterIO();
377 m_exec_main->initialize();
381 cerr <<
"** CATCH ARITHMETIC_EXCEPTION\n";
387 catch (
const std::exception& ex) {
397 ArcaneMain::redirectSignals();
400 m_clean_abort =
false;
407 trace->
info() <<
"Initializing license manager";
422 m_ret_val = arcanePrintArcaneException(ex, trace);
424 m_clean_abort =
true;
435void ArcaneMainExecInfo::
441 if (m_direct_exec_functor)
442 m_exec_main->setDirectExecuteFunctor(m_direct_exec_functor);
445 if (ArcaneMain::m_exec_override_functor) {
448 ArcaneMain::m_exec_override_functor->m_application = app;
450 trace->
info() <<
"Calling overriding functor";
452 m_exec_main, &m_clean_abort,
true);
461void ArcaneMainExecInfo::
469 int exe_error_code = m_exec_main->errorCode();
470 if (m_ret_val == 0 && exe_error_code != 0) {
471 m_ret_val = exe_error_code;
473 else if (m_ret_val != 0)
474 m_exec_main->setErrorCode(m_ret_val);
476 m_exec_main->finalize();
478 if (m_ret_val != 0 && !m_clean_abort)
479 m_exec_main->doAbort();
486 m_exec_main =
nullptr;
487#ifndef ARCANE_USE_MPC
505 ArcaneMainExecInfo exec_info(app_info, factory);
512 exec_info.setDirectExecFunctor(func);
514 exec_info.finalize();
516 return exec_info.returnValue();
524 bool* clean_abort,
bool is_print)
527 *clean_abort =
false;
533 functor->executeFunctor();
540 if (is_master && is_print) {
541 std::ofstream ofile(
"fatal");
542 ofile << ret_val <<
'\n';
544 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
548 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
553 trace->
error() << Trace::Color::red() <<
"FatalErrorException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
558 trace->
error() <<
"SignalException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
562 trace->
error() <<
"TimeoutException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
570 if (is_master && is_print) {
571 std::ofstream ofile(
"fatal");
572 ofile << ret_val <<
'\n';
574 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
578 trace->
error() <<
"ParallelFatalErrorException caught in ArcaneMain::callFunctor: " << ex <<
'\n';
583 cerr <<
"** ARITHMETIC EXCEPTION!\n";
595 catch (
const std::exception& ex) {
608_launchMissingInitException()
610 std::cerr <<
"ERROR: ArcaneMain: missing call to ArcaneMain::arcaneInitialize().\n";
611 throw std::runtime_error(
"Missing call to ArcaneMain::arcaneInitialize()");
621 _launchMissingInitException();
627extern "C++" void arcaneInitCheckMemory();
628extern "C++" void arcaneExitCheckMemory();
637 cerr <<
"WARNING: ArcaneMain::setHasGarbageCollector has to be called before arcaneInitialize\n";
640 m_has_garbage_collector =
true;
650 cerr <<
"WARNING: ArcaneMain::setHasDotNETRuntime has to be called before arcaneInitialize\n";
662 m_exec_override_functor = functor;
671 return _staticInfo()->m_has_dotnet_wrapper;
683_setArcaneLibraryPath()
687 if (!dll_full_path.
null())
691 _staticInfo()->m_arcane_lib_path = dir_name;
705 dom::DOMImplementation::initialize();
715 initializeStringConverter();
716 arcaneInitCheckMemory();
747 arccorePrintSpecificMemoryStats();
748 arcaneExitCheckMemory();
750 dom::DOMImplementation::terminate();
768 _staticInfo()->m_service_factory_infos.add(sri);
777 _staticInfo()->m_module_factory_infos.add(mfi);
786 _staticInfo()->m_application_build_info_visitors.add(visitor);
795 return _staticInfo()->m_app_build_info._internalApplicationInfo();
804 return _staticInfo()->m_dotnet_init_info;
813 return _staticInfo()->m_accelerator_init_info;
822 return _staticInfo()->m_app_build_info;
831 return m_p->m_application_build_info;
838_applicationBuildInfo()
840 return m_p->m_application_build_info;
849 return m_p->m_dotnet_info;
858 return m_p->m_accelerator_info;
867 return _staticInfo()->m_init_time_accelerator;
880 factory = m_default_main_factory;
883 default_factory = factory;
889 default_factory =
nullptr;
893 if (ret != 0 && ret != 5)
894 cerr <<
"* Process return: " << ret <<
'\n';
907 _staticInfo()->m_direct_exec_functor = func;
915_checkTestLoggerResult()
917 if (!m_is_use_test_logger)
921 return TestLogger::compare();
930 ArcaneMainAutoDetectRuntimeHelper auto_detect_helper;
931 return auto_detect_helper.check();
940 int r = _initRuntimes();
949 if (!is_in_dotnet && dotnet_info.isUsingDotNetRuntime()) {
954 bool do_finalize =
false;
970 return _checkTestLoggerResult();
979 auto si = _staticInfo();
980 si->m_has_dotnet_wrapper =
true;
993 DotNetMainFunctor my_functor =
nullptr;
994 String os_dir(si->m_arcane_lib_path);
999 String dll_name =
"arcane_mono";
1000 String symbol_name =
"arcane_mono_main2";
1002 String runtime_name = dotnet_info.embeddedRuntime();
1004 if (runtime_name.
null() || runtime_name ==
"mono")
1007 else if (runtime_name ==
"coreclr") {
1008 dll_name =
"arcane_dotnet_coreclr";
1009 symbol_name =
"arcane_dotnet_coreclr_main";
1012 ARCANE_FATAL(
"Unknown '.Net' runtime '{0}'. Valid values are 'mono' or 'coreclr'", runtime_name);
1014 IDynamicLibrary* dl = dll_loader->
open(os_dir, dll_name);
1016 ARCANE_FATAL(
"Can not found dynamic library '{0}' for using .Net", dll_name);
1018 bool is_found =
false;
1019 void* functor_addr = dl->getSymbolAddress(symbol_name, &is_found);
1021 ARCANE_FATAL(
"Can not find symbol '{0}' in library '{1}'", symbol_name, dll_name);
1023 my_functor =
reinterpret_cast<DotNetMainFunctor
>(functor_addr);
1025 catch (
const Exception& ex) {
1026 return ExceptionUtils::print(ex,
nullptr);
1028 catch (
const std::exception& ex) {
1029 return ExceptionUtils::print(ex,
nullptr);
1032 return ExceptionUtils::print(
nullptr);
1036 const CommandLineArguments& cmd_args = app_info.commandLineArguments();
1038 String new_name = os_dir +
"/Arcane.Main.dll";
1039 return (*my_functor)(cmd_args, new_name);
1049_checkAutoDetectMPI()
1051 auto si = _staticInfo();
1056 typedef void (*ArcaneAutoDetectMPIFunctor)();
1060 String os_dir(si->m_arcane_lib_path);
1061 String dll_name =
"arcane_mpi";
1062 String symbol_name =
"arcaneAutoDetectMessagePassingServiceMPI";
1063 IDynamicLibrary* dl = dll_loader->open(os_dir, dll_name);
1067 bool is_found =
false;
1068 void* functor_addr = dl->getSymbolAddress(symbol_name, &is_found);
1072 auto my_functor =
reinterpret_cast<ArcaneAutoDetectMPIFunctor
>(functor_addr);
1093 has_accelerator =
false;
1094 String default_runtime_name;
1095#if defined(ARCANE_ACCELERATOR_RUNTIME)
1096 default_runtime_name = ARCANE_ACCELERATOR_RUNTIME;
1098 auto si = _staticInfo();
1100 if (!init_info.isUsingAcceleratorRuntime())
1111IMainFactory* ArcaneMain::m_default_main_factory =
nullptr;
1119: m_p(new Impl(app_info))
1120, m_main_factory(factory)
1128ArcaneMain(
const ApplicationInfo& app_info, IMainFactory* factory,
1129 const ApplicationBuildInfo& app_build_info,
1130 const DotNetRuntimeInitialisationInfo& dotnet_info,
1131 const AcceleratorRuntimeInitialisationInfo& accelerator_info)
1132: m_p(new Impl(app_info, app_build_info, dotnet_info, accelerator_info))
1133, m_main_factory(factory)
1146 m_p->m_thread_binding_mng.finalize();
1147 delete m_application;
1160 _parseApplicationBuildInfoArgs();
1161 m_application = m_main_factory->createApplication(
this);
1162 m_p->m_thread_binding_mng.initialize(m_application->traceMng(),
1163 m_p->m_application_build_info.threadBindingStrategy());
1172 return m_p->m_app_info;
1179_parseApplicationBuildInfoArgs()
1185 auto& x = _staticInfo()->m_application_build_info_visitors;
1191 abi.setDefaultServices();
1200 m_application->initialize();
1203 service_loader->loadApplicationServices(m_application);
1212 return _staticInfo()->m_service_factory_infos;
1221 return _staticInfo()->m_module_factory_infos;
1248 m_error_code = errcode;
1252 if (ArcaneMain::m_is_master_io || errcode == 4) {
1253 String errname =
"fatal_" + String::fromNumber(errcode);
1254 std::ofstream ofile(errname.
localstr());
1267 bool arcane_internal =
false;
1269 bool arcane_all_internal =
false;
1271 bool arcane_database =
false;
1273 bool arcane_help =
false;
1275 String us_arcane_opt(
"-arcane_opt");
1277 String us_arcane_internal(
"arcane_internal");
1278 String us_arcane_all_internal(
"arcane_all_internal");
1279 String us_arcane_database(
"arcane_database");
1283 if (args[i].startsWith(
"-A")) {
1286 if (args[i] != us_arcane_opt) {
1287 unknown_args.add(args[i]);
1290 bool is_valid_opt =
false;
1295 if (str == us_arcane_internal) {
1296 arcane_internal =
true;
1297 is_valid_opt =
true;
1299 if (str == us_arcane_all_internal) {
1300 arcane_all_internal =
true;
1301 is_valid_opt =
true;
1303 if (str == us_arcane_database) {
1304 arcane_database =
true;
1305 is_valid_opt =
true;
1307 if (str == us_help) {
1309 is_valid_opt =
true;
1311 if (!is_valid_opt) {
1314 unknown_args.add(us_arcane_opt);
1316 unknown_args.add(str);
1321 bool do_stop =
false;
1322 if (arcane_database) {
1327 if (arcane_internal) {
1329 dumper.dumpInternalInfos();
1332 if (arcane_all_internal) {
1357 typedef std::multimap<String, IServiceInfo*>
ServiceList;
1364 std::set<IServiceInfo*> done_set;
1367 if (done_set.find(si) != done_set.end()) {
1370 done_set.insert(si);
1372 max_name_size =
math::max(max_name_size, CheckedConvert::toInteger(name.length()));
1373 service_list.insert(std::make_pair(name, si));
1377 UniqueArray<String> module_names;
1378 for (EnumeratorT<IModuleFactoryInfo*> e =
application()->moduleFactoryInfos(); ++e;) {
1379 IModuleFactoryInfo* mfi = (*e);
1380 const String& name = mfi->moduleName();
1381 max_name_size =
math::max(max_name_size, CheckedConvert::toInteger(name.length()));
1382 module_names.add(name);
1386 trace->
info() <<
" ";
1387 trace->info() << std::setw(max_name_size) <<
"Module List";
1388 trace->info() << std::setw(max_name_size) <<
"-------------"
1390 for (
int i = 0, n = module_names.size(); i < n; ++i) {
1391 trace->info() << std::setw(max_name_size) << module_names[i];
1394 trace->info() <<
" ";
1395 trace->info() << std::setw(max_name_size) <<
"Service List";
1396 trace->info() << std::setw(max_name_size) <<
"--------------"
1398 for (ServiceList::const_iterator i = service_list.begin(); i != service_list.end(); ++i) {
1399 IServiceInfo* si = i->second;
1401 oss() << std::setw(max_name_size) << i->first;
1403 if (!interfaces.empty())
1404 oss() <<
" Implements : ";
1405 for (EnumeratorT<String> e(interfaces.enumerator()); ++e;) {
1406 oss() << e.current() <<
" ";
1408 trace->info() << oss.str();
1411 const Integer option_size = 20;
1412 trace->info() <<
" ";
1413 trace->info() << std::setw(max_name_size) <<
"Usage";
1414 trace->info() << std::setw(max_name_size) <<
"-------"
1417 trace->info() <<
"Where OPTION is";
1418 trace->info() << std::setw(option_size) <<
"help"
1419 <<
" : this help page and abort";
1420 trace->info() << std::setw(option_size) <<
"arcane_internal"
1421 <<
" : save into a file internal Arcane informations and abort execution";
1422 trace->info() << std::setw(option_size) <<
"arcane_all_internal"
1423 <<
" : save into a file timeloop informations and abort execution";
1424 trace->info() << std::setw(option_size) <<
"arcane_database"
1425 <<
" : save internal database infos in file 'arcane_database.json'";
1426 trace->info() << std::setw(option_size) <<
"init_only"
1427 <<
" : only run initialization step";
1428 trace->info() << std::setw(option_size) <<
"continue"
1429 <<
" : continue an interrupted run";
1430 trace->info() << std::setw(option_size) <<
"max_iteration"
1431 <<
" : define maximum iteration number";
1432 trace->info() << std::setw(option_size) <<
"casename"
1433 <<
" : define case name";
1447 const char* signal_str =
"Unknown";
1448 bool is_alarm =
false;
1449 int written_signal_number = val;
1453 signal_str =
"Segmentation Fault";
1456 signal_str =
"Floating exception";
1460 signal_str =
"Bus Error";
1465 signal_str =
"System signal";
1470 signal_str =
"Broken pipe";
1475 signal_str =
"Sigalarm";
1481 signal_str =
"Sigalarm(VirtualTime)";
1482 written_signal_number = SIGALRM;
1488 cerr <<
"Signal Caught !!! number=" << val <<
" name=" << signal_str <<
".\n";
1493#ifndef ARCANE_OS_WIN32
1497 bool create_file = ArcaneMain::isMasterIO() || (!is_alarm);
1501 mode_t mode = S_IRUSR | S_IWUSR;
1503 sprintf(path,
"signal_%d", written_signal_number);
1505 int fd = ::open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);
1515 Arcane::arcaneCallDefaultSignal(val);
#define ARCANE_FATAL(...)
Macro throwing a FatalErrorException.
Utility functions for exception handling.
Int32 print(ITraceMng *tm, bool is_no_continue=true)
Prints a message for an unknown exception.
Memory and allocator management functions.
Information for accelerator initialization.
static int loadRuntime(AcceleratorRuntimeInitialisationInfo &init_info, const String &default_runtime_name, const String &library_path, bool &has_accelerator)
Detects and loads the accelerator runtime management library.
Information for constructing an instance of IApplication.
void parseArguments(const CommandLineArguments &args)
Parses the arguments in args.
const CommandLineArguments & commandLineArguments() const
Command line arguments.
IArcaneMain * createArcaneMain(const ApplicationInfo &app_info) override
Creates an instance of IArcaneMain.
Class to manage calls to runtime auto-detection mechanisms (MPI, Accelerators).
void executeFunctor() override
Executes the associated method.
int initialize()
Creation of the 'IArcaneMain' instance.
const ApplicationInfo & m_app_info
WARNING: reference.
std::atomic< Int32 > m_nb_autodetect
Number of times auto-detection for MPI and accelerators has been run.
Real m_init_time_accelerator
Time spent (in seconds) during initialization for accelerators.
Int32 m_autodetect_return_value
Return code for auto-detection.
Execution management class.
static ApplicationBuildInfo & defaultApplicationBuildInfo()
Information for accelerator initialization.
static AcceleratorRuntimeInitialisationInfo & defaultAcceleratorRuntimeInitialisationInfo()
Information for accelerator initialization.
static std::atomic< Int32 > m_nb_arcane_init
Number of times arcaneInitialize() has been called.
static DotNetRuntimeInitialisationInfo & defaultDotNetRuntimeInitialisationInfo()
Information for .Net runtime initialization.
static void arcaneInitialize()
Initializes Arcane.
static void addApplicationBuildInfoVisitor(IApplicationBuildInfoVisitor *visitor)
Adds a visitor to fill ApplicationBuildInfo.
const DotNetRuntimeInitialisationInfo & dotnetRuntimeInitialisationInfo() const override
.Net runtime initialization information.
static int _checkAutoDetectAccelerator(bool &has_accelerator)
Detects and loads accelerator runtime management.
static void arcaneFinalize()
Terminates Arcane usage.
static int _arcaneMain(const ApplicationInfo &, IMainFactory *)
Executable entry point.
static Real initializationTimeForAccelerator()
Returns the time (in seconds) for the initialization of accelerator runtimes for this process.
const ApplicationInfo & applicationInfo() const override
Executable information.
ServiceFactoryInfoCollection registeredServiceFactoryInfos() override
List of registered service factories.
const AcceleratorRuntimeInitialisationInfo & acceleratorRuntimeInitialisationInfo() const override
Runtime initialization information for accelerators.
static int callFunctorWithCatchedException(IFunctor *functor, IArcaneMain *amain, bool *clean_abort, bool is_print=true)
Calls the functor functor while catching possible exceptions.
ModuleFactoryInfoCollection registeredModuleFactoryInfos() override
List of registered module factories.
void setErrorCode(int errcode) override
Sets the return code.
static void setHasDotNETRuntime()
Indicates that we are running in the .NET runtime.
IApplication * application() const override
Application.
static void setHasGarbageCollector()
Indicates that certain objects are managed by a garbage collector.
static std::atomic< Int32 > m_is_init_done
1 if init finished, 0 otherwise
static int run()
Entry point of the executable in Arcane.
static void addServiceFactoryInfo(IServiceFactoryInfo *factory)
Adds a service factory.
void build() override
Constructs the class members. The instance is not usable until this method has been called....
static ApplicationInfo & defaultApplicationInfo()
Default application info.
static void setExecuteOverrideFunctor(ArcaneMainExecutionOverrideFunctor *functor)
static bool hasDotNetWrapper()
Indicates if a '.Net' assembly is being executed from a C++ main.
const ApplicationBuildInfo & applicationBuildInfo() const override
Information to build the IApplication instance.
int execute() override
Starts execution. This method only returns when the program exits.
void doAbort() override
Performs an abort.
static void setDefaultMainFactory(IMainFactory *mf)
Sets the default factory.
void initialize() override
Initializes the instance. The instance is not usable until this method has been called.
bool parseArgs(StringList args) override
Parses arguments.
static void addModuleFactoryInfo(IModuleFactoryInfo *factory)
Adds a module factory.
Exception when an arithmetic error occurs.
void clear()
Removes all elements from the collection.
Integer count() const
Number of elements in the collection.
EnumeratorT< Internal::IServiceFactory2 * > Enumerator
static void setUseFromChars(bool v)
Indicates whether 'std::from_chars' is used to convert character strings into a numeric type.
Template class for converting a type.
Information for the initialization of the '.Net' runtime.
Base class for an exception.
bool isCollective() const
True if it is a collective error (concerns all processors).
Exception when a fatal error has occurred.
static FlexLMMng * instance()
Access to the singleton.
void init(IParallelSuperMng *parallel_super_mng)
Initializes the license manager.
void releaseAllLicenses()
Releases all allocated licenses.
virtual String applicationName() const =0
Application name.
virtual IParallelSuperMng * parallelSuperMng()=0
Supervisory parallelism manager.
Interface of the code management class.
virtual IApplication * application() const =0
Application.
static IArcaneMain * arcaneMain()
static void setArcaneMain(IArcaneMain *arcane_main)
virtual ITraceMng * traceMng() const =0
Trace manager.
Interface of a case loader.
Interface of a functor to execute code directly after the creation of a subdomain without going throu...
Interface of a dynamic library loader.
virtual IDynamicLibrary * open(const String &directory, const String &name)=0
Loads a dynamic library.
static IDynamicLibraryLoader * getDefault()
Service used for dynamically loading libraries.
Factory for Arcane classes.
Information about a module factory.
Abstract class of the parallelism supervisor.
virtual bool isMasterIO() const =0
Returns true if the instance is a master I/O manager.
virtual bool isParallel() const =0
Returns true if the execution is parallel.
Information about a service factory.
Interface for service or module information.
virtual String localName() const =0
Local part of the service name.
virtual TraceMessage error()=0
Stream for an error message.
virtual TraceMessage info()=0
Stream for an information message.
Internal information dumping for Arcane.
void dumpInternalAllInfos()
void dumpArcaneDatabase()
Saves the internal information of Arcane in a json file.
static void _buildSharedNull()
Internal.
static void _destroySharedNull()
Internal.
static void _destroySingleton()
Destroys the singleton.
static ItemTypeMng * _singleton()
Singleton instance of the type.
Implementation of a collection of elements in vector form.
ListEnumeratorT< String > Enumerator
Exception when a 'parallel' fatal error is generated.
Encapsulation of an automatically destructing pointer.
Exception when a signal occurs.
Unicode character string.
bool null() const
Returns true if the string is null.
const char * localstr() const
Returns the conversion of the instance into UTF-8 encoding.
Exception when a timeout occurs.
T max(const T &a, const T &b, const T &c)
Returns the maximum of three elements.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Int32 Integer
Type representing an integer.
Collection< IServiceFactoryInfo * > ServiceFactoryInfoCollection
Collection of service factory information.
Collection< String > StringCollection
Collection of strings.
void arcaneSignalHandler(int val)
Brief function called when the program is interrupted by the 'val' signal.
List< String > StringList
Unicode string list.
Collection< IModuleFactoryInfo * > ModuleFactoryInfoCollection
Collection of module factory information.
List< IService * > ServiceList
Array of services.
double Real
Type representing a real number.
std::int32_t Int32
Signed integer type of 32 bits.