43static void fail(
const std::string& _prefix,
const std::string& _name,
44 const std::set<std::string>& _opts,
G4int _num)
47 msg << _prefix <<
": \"" << _name <<
"\". "
48 <<
"Must be one of: ";
50 for (
const auto& itr : _opts)
51 ss <<
", \"" << itr <<
"\"";
52 msg << ss.str().substr(2);
53 auto mnum = std::string(
"RunManagerFactory000") + std::to_string(_num);
69 std::string rm_type =
GetName(_type);
74 fail_if_unavail =
true;
83 "Overriding G4RunManager type...");
87 if (force_rm.length() > 0) {
89 fail_if_unavail =
true;
91 else if (rm_type.empty()) {
100 if (opts.find(rm_type) == opts.end()) {
101 if (fail_if_unavail) {
102 fail(
"Run manager type is not available", rm_type, opts, 1);
118#if defined(G4MULTITHREADED)
123#if defined(G4MULTITHREADED)
128#if defined(G4MULTITHREADED) && defined(GEANT4_USE_TBB)
145 if (rm ==
nullptr) fail(
"Failure creating run manager",
GetName(_type),
GetOptions(), 2);
150 master_run_manager = rm;
151 mt_master_run_manager = mtrm;
152 master_run_manager_kernel = rm->
kernel;
162#if defined(G4MULTITHREADED)
173 static auto _instance = []() {
174 std::set<std::string> options = {
"Serial"};
175#if defined(G4MULTITHREADED)
176 options.insert({
"MT",
"Tasking"});
177# if defined(GEANT4_USE_TBB)
178 options.insert(
"TBB");
191 static const auto opts = std::regex::icase;
232#if !defined(G4MULTITHREADED)
237 if (master_run_manager !=
nullptr)
return master_run_manager;
242 if (mt_rm !=
nullptr)
return mt_rm;
254#if defined(G4MULTITHREADED)
256 if (mt_master_run_manager !=
nullptr)
return mt_master_run_manager;
261 if (task_rm !=
nullptr)
return task_rm;
273#if !defined(G4MULTITHREADED)
278 if (master_run_manager_kernel !=
nullptr)
return master_run_manager_kernel;
283 if (mt_rm !=
nullptr)
return mt_rm->kernel;
_Tp G4GetEnv(const std::string &env_id, _Tp _default=_Tp())
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
void SetNumberOfThreads(G4int n) override
static G4MTRunManager * GetMasterRunManager()
static G4RunManager * CreateRunManager(G4RunManagerType _type=G4RunManagerType::Default, G4VUserTaskQueue *_queue=nullptr, G4bool fail_if_unavail=true, G4int nthreads=0)
static G4RunManager * GetMasterRunManager()
static G4MTRunManager * GetMTMasterRunManager()
static std::set< std::string > GetOptions()
static std::string GetName(G4RunManagerType)
static std::string GetDefault()
static G4RunManagerType GetType(const std::string &)
static G4RunManagerKernel * GetMasterRunManagerKernel()
G4RunManagerKernel * kernel
static G4RunManager * GetRunManager()
static G4TaskRunManager * GetMasterRunManager()
G4bool IsMultithreadedApplication()
void G4ConsumeParameters(_Args &&...)