Geant4-11
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Private Attributes | Static Private Attributes
G4TaskRunManagerKernel Class Reference

#include <G4TaskRunManagerKernel.hh>

Inheritance diagram for G4TaskRunManagerKernel:
G4RunManagerKernel

Public Types

enum  RMKType { sequentialRMK , masterRMK , workerRMK }
 

Public Member Functions

void BroadcastAbortRun (G4bool softAbort)
 
void DefineWorldVolume (G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
 
void DumpRegion (const G4String &rname) const
 
void DumpRegion (G4Region *region=nullptr) const
 
 G4TaskRunManagerKernel ()
 
void GeometryHasBeenModified ()
 
G4VPhysicalVolume * GetCurrentWorld () const
 
G4EventManager * GetEventManager () const
 
G4int GetNumberOfParallelWorld () const
 
G4int GetNumberOfStaticAllocators () const
 
G4VUserPhysicsList * GetPhysicsList () const
 
G4PrimaryTransformer * GetPrimaryTransformer () const
 
G4StackManager * GetStackManager () const
 
G4TrackingManager * GetTrackingManager () const
 
const G4String & GetVersionString () const
 
void InitializePhysics ()
 
void PhysicsHasBeenModified ()
 
G4bool RunInitialization (G4bool fakeRun=false)
 
void RunTermination ()
 
void SetGeometryToBeOptimized (G4bool vl)
 
void SetNumberOfParallelWorld (G4int i)
 
void SetPhysics (G4VUserPhysicsList *uPhys)
 
void SetPrimaryTransformer (G4PrimaryTransformer *pt)
 
void SetUpDecayChannels ()
 
void SetVerboseLevel (G4int vl)
 
void UpdateRegion ()
 
void WorkerDefineWorldVolume (G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
 
void WorkerUpdateWorldVolume ()
 
virtual ~G4TaskRunManagerKernel ()
 

Static Public Member Functions

static void ExecuteWorkerInit ()
 
static void ExecuteWorkerTask ()
 
static G4RunManagerKernel * GetRunManagerKernel ()
 
static G4WorkerThread * GetWorkerThread ()
 
static std::vector< G4String > & InitCommandStack ()
 
static void InitializeWorker ()
 
static void TerminateWorker ()
 
static void TerminateWorker (G4WorkerTaskRunManager *)
 
static void TerminateWorkerRunEventLoop ()
 
static void TerminateWorkerRunEventLoop (G4WorkerTaskRunManager *)
 

Protected Member Functions

void BuildPhysicsTables (G4bool fakeRun)
 
void CheckRegions ()
 
void PropagateGenericIonID ()
 
void ResetNavigator ()
 
void SetupDefaultRegion ()
 
void SetupPhysics ()
 
void SetupShadowProcess () const
 

Protected Attributes

G4Region * defaultRegion = nullptr
 
G4Region * defaultRegionForParallelWorld = nullptr
 
G4bool geometryNeedsToBeClosed = true
 
RMKType runManagerKernelType
 

Static Protected Attributes

static G4TASK_DLL std::vector< G4String > initCmdStack = {}
 

Private Member Functions

void CheckRegularGeometry ()
 
G4bool ConfirmCoupledTransportation ()
 
void SetScoreSplitter ()
 

Private Attributes

G4VPhysicalVolume * currentWorld = nullptr
 
G4ExceptionHandler * defaultExceptionHandler = nullptr
 
G4EventManager * eventManager = nullptr
 
G4bool geometryInitialized = false
 
G4bool geometryToBeOptimized = true
 
G4int numberOfParallelWorld = 0
 
G4int numberOfStaticAllocators = 0
 
G4bool physicsInitialized = false
 
G4VUserPhysicsList * physicsList = nullptr
 
G4bool physicsNeedsToBeReBuilt = true
 
G4int verboseLevel = 0
 
G4String versionString = ""
 

Static Private Attributes

static G4ThreadLocal G4RunManagerKernel * fRunManagerKernel = nullptr
 

Detailed Description

Definition at line 65 of file G4TaskRunManagerKernel.hh.

Member Enumeration Documentation

◆ RMKType

Enumerator
sequentialRMK 
masterRMK 
workerRMK 

Definition at line 176 of file G4RunManagerKernel.hh.

Constructor & Destructor Documentation

◆ G4TaskRunManagerKernel()

G4TaskRunManagerKernel::G4TaskRunManagerKernel ( )

Definition at line 70 of file G4TaskRunManagerKernel.cc.

72{
73 // This version of the constructor should never be called in sequential mode!
74#ifndef G4MULTITHREADED
76 msg << "Geant4 code is compiled without multi-threading support "
77 "(-DG4MULTITHREADED "
78 "is set to off).";
79 msg << " This type of RunManager can only be used in mult-threaded "
80 "applications.";
81 G4Exception("G4RunManagerKernel::G4RunManagerKernel()", "Run0109",
82 FatalException, msg);
83#endif
84 // Set flag that a MT-type kernel has been instantiated
86}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
Definition: G4Exception.cc:35
std::ostringstream G4ExceptionDescription
Definition: G4Exception.hh:40
void SetMultithreadedApplication(G4bool value)
Definition: G4Threading.cc:129

References FatalException, G4Exception(), and G4Threading::SetMultithreadedApplication().

◆ ~G4TaskRunManagerKernel()

G4TaskRunManagerKernel::~G4TaskRunManagerKernel ( )
virtual

Definition at line 90 of file G4TaskRunManagerKernel.cc.

90{}

Member Function Documentation

◆ BroadcastAbortRun()

void G4TaskRunManagerKernel::BroadcastAbortRun ( G4bool  softAbort)

Definition at line 357 of file G4TaskRunManagerKernel.cc.

358{
359 G4ConsumeParameters(softAbort);
360}
void G4ConsumeParameters(_Args &&...)
Definition: templates.hh:187

References G4ConsumeParameters().

Referenced by G4TaskRunManager::AbortRun().

◆ BuildPhysicsTables()

void G4RunManagerKernel::BuildPhysicsTables ( G4bool  fakeRun)
protectedinherited

Definition at line 895 of file G4RunManagerKernel.cc.

896{
899 {
900 #ifdef G4MULTITHREADED
902 {
903 // make sure workers also rebuild physics tables
905 pUImanager->ApplyCommand("/run/physicsModified");
906 }
907 #endif
911 }
912
913 if(!fakeRun && verboseLevel > 1)
914 DumpRegion();
915 if(!fakeRun && verboseLevel > 0)
917 if(!fakeRun)
919}
static G4ProductionCutsTable * GetProductionCutsTable()
G4VUserPhysicsList * physicsList
void DumpRegion(const G4String &rname) const
G4int ApplyCommand(const char *aCommand)
Definition: G4UImanager.cc:485
static G4UImanager * GetUIpointer()
Definition: G4UImanager.cc:77
void DumpCutValuesTable(G4int flag=1)

References G4UImanager::ApplyCommand(), G4VUserPhysicsList::BuildPhysicsTable(), G4VUserPhysicsList::DumpCutValuesTable(), G4VUserPhysicsList::DumpCutValuesTableIfRequested(), G4RunManagerKernel::DumpRegion(), G4ProductionCutsTable::GetProductionCutsTable(), G4UImanager::GetUIpointer(), G4RunManagerKernel::masterRMK, G4RunManagerKernel::physicsList, G4RunManagerKernel::physicsNeedsToBeReBuilt, G4RunManagerKernel::runManagerKernelType, and G4RunManagerKernel::verboseLevel.

Referenced by G4RunManagerKernel::RunInitialization().

◆ CheckRegions()

void G4RunManagerKernel::CheckRegions ( )
protectedinherited

Definition at line 922 of file G4RunManagerKernel.cc.

923{
926 std::size_t nWorlds = transM->GetNoWorlds();
927 std::vector<G4VPhysicalVolume*>::iterator wItr;
928 for(std::size_t i = 0; i < G4RegionStore::GetInstance()->size(); ++i)
929 {
930 G4Region* region = (*(G4RegionStore::GetInstance()))[i];
931
932 // Let each region have a pointer to the world volume where it belongs to.
933 // G4Region::SetWorld() checks if the region belongs to the given world and
934 // set it only if it does. Thus, here we go through all the registered world
935 // volumes.
936 region->SetWorld(nullptr); // reset
937 region->UsedInMassGeometry(false);
938 region->UsedInParallelGeometry(false);
939 wItr = transM->GetWorldsIterator();
940 for(std::size_t iw = 0; iw < nWorlds; ++iw)
941 {
942 if(region->BelongsTo(*wItr))
943 {
944 if(*wItr == currentWorld)
945 {
946 region->UsedInMassGeometry(true);
947 }
948 else
949 {
950 region->UsedInParallelGeometry(true);
951 }
952 }
953 region->SetWorld(*wItr);
954 ++wItr;
955 }
956
957 G4ProductionCuts* cuts = region->GetProductionCuts();
958 if(cuts == nullptr)
959 {
960 if(region->IsInMassGeometry() && verboseLevel > 0)
961 {
962 G4cout << "Warning : Region <" << region->GetName()
963 << "> does not have specific production cuts," << G4endl
964 << "even though it appears in the current tracking world."
965 << G4endl;
966 G4cout << "Default cuts are used for this region." << G4endl;
967 }
968
969 if(region->IsInMassGeometry() || region->IsInParallelGeometry())
970 {
971 region->SetProductionCuts(
974 }
975 }
976 }
977
978 //
979 // If a parallel world has no region, set default region for parallel world
980 //
981
982 wItr = transM->GetWorldsIterator();
983 for(std::size_t iw = 0; iw < nWorlds; ++iw)
984 {
985 if(*wItr != currentWorld)
986 {
987 G4LogicalVolume* pwLogical = (*wItr)->GetLogicalVolume();
988 if(pwLogical->GetRegion() == nullptr)
989 {
992 }
993 }
994 ++wItr;
995 }
996}
#define G4endl
Definition: G4ios.hh:57
G4GLOB_DLL std::ostream G4cout
void SetRegion(G4Region *reg)
G4Region * GetRegion() const
G4ProductionCuts * GetDefaultProductionCuts() const
static G4RegionStore * GetInstance()
G4bool BelongsTo(G4VPhysicalVolume *thePhys) const
Definition: G4Region.cc:414
void SetWorld(G4VPhysicalVolume *wp)
Definition: G4Region.cc:398
G4bool IsInParallelGeometry() const
G4ProductionCuts * GetProductionCuts() const
void SetProductionCuts(G4ProductionCuts *cut)
const G4String & GetName() const
G4bool IsInMassGeometry() const
void UsedInParallelGeometry(G4bool val=true)
void AddRootLogicalVolume(G4LogicalVolume *lv, G4bool search=true)
Definition: G4Region.cc:293
void UsedInMassGeometry(G4bool val=true)
G4Region * defaultRegionForParallelWorld
G4VPhysicalVolume * currentWorld
static G4TransportationManager * GetTransportationManager()
std::vector< G4VPhysicalVolume * >::iterator GetWorldsIterator()
size_t GetNoWorlds() const

References G4Region::AddRootLogicalVolume(), G4Region::BelongsTo(), G4RunManagerKernel::currentWorld, G4RunManagerKernel::defaultRegionForParallelWorld, G4cout, G4endl, G4ProductionCutsTable::GetDefaultProductionCuts(), G4RegionStore::GetInstance(), G4Region::GetName(), G4TransportationManager::GetNoWorlds(), G4Region::GetProductionCuts(), G4ProductionCutsTable::GetProductionCutsTable(), G4LogicalVolume::GetRegion(), G4TransportationManager::GetTransportationManager(), G4TransportationManager::GetWorldsIterator(), G4Region::IsInMassGeometry(), G4Region::IsInParallelGeometry(), G4Region::SetProductionCuts(), G4LogicalVolume::SetRegion(), G4Region::SetWorld(), G4Region::UsedInMassGeometry(), G4Region::UsedInParallelGeometry(), and G4RunManagerKernel::verboseLevel.

Referenced by G4RunManagerKernel::InitializePhysics(), and G4RunManagerKernel::UpdateRegion().

◆ CheckRegularGeometry()

void G4RunManagerKernel::CheckRegularGeometry ( )
privateinherited

Definition at line 1090 of file G4RunManagerKernel.cc.

1091{
1093 for(auto pos = store->cbegin(); pos != store->cend(); ++pos)
1094 {
1095 if((*pos) && ((*pos)->GetNoDaughters() == 1))
1096 {
1097 if((*pos)->GetDaughter(0)->IsRegularStructure())
1098 {
1100 return;
1101 }
1102 }
1103 }
1104}
static const G4double pos
static G4LogicalVolumeStore * GetInstance()

References G4LogicalVolumeStore::GetInstance(), pos, and G4RunManagerKernel::SetScoreSplitter().

Referenced by G4RunManagerKernel::RunInitialization().

◆ ConfirmCoupledTransportation()

G4bool G4RunManagerKernel::ConfirmCoupledTransportation ( )
privateinherited

Definition at line 1107 of file G4RunManagerKernel.cc.

1108{
1110 auto theParticleIterator = theParticleTable->GetIterator();
1111 theParticleIterator->reset();
1112 while((*theParticleIterator)())
1113 {
1116 if(pm)
1117 {
1119 G4VProcess* p = (*pv)[0];
1120 return ((p->GetProcessName()) == "CoupledTransportation");
1121 }
1122 }
1123 return false;
1124}
@ typeDoIt
#define theParticleIterator
G4ProcessManager * GetProcessManager() const
G4PTblDicIterator * GetIterator() const
static G4ParticleTable * GetParticleTable()
G4ProcessVector * GetAlongStepProcessVector(G4ProcessVectorTypeIndex typ=typeGPIL) const
const G4String & GetProcessName() const
Definition: G4VProcess.hh:382

References G4ProcessManager::GetAlongStepProcessVector(), G4ParticleTable::GetIterator(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetProcessManager(), G4VProcess::GetProcessName(), theParticleIterator, and typeDoIt.

◆ DefineWorldVolume()

void G4RunManagerKernel::DefineWorldVolume ( G4VPhysicalVolume *  worldVol,
G4bool  topologyIsChanged = true 
)
inherited

Definition at line 520 of file G4RunManagerKernel.cc.

522{
524 G4ApplicationState currentState = stateManager->GetCurrentState();
525
526 if(currentState != G4State_Init)
527 {
528 if(!(currentState == G4State_Idle || currentState == G4State_PreInit))
529 {
530 G4cout << "Current application state is "
531 << stateManager->GetStateString(currentState) << G4endl;
532 G4Exception("G4RunManagerKernel::DefineWorldVolume",
533 "DefineWorldVolumeAtIncorrectState", FatalException,
534 "Geant4 kernel is not Init state : Method ignored.");
535 return;
536 }
537 else
538 {
539 stateManager->SetNewState(G4State_Init);
540 }
541 }
542
543 // The world volume MUST NOT have a region defined by the user
544 if(worldVol->GetLogicalVolume()->GetRegion() != nullptr)
545 {
546 if(worldVol->GetLogicalVolume()->GetRegion() != defaultRegion)
547 {
549 ED << "The world volume has a user-defined region <"
550 << worldVol->GetLogicalVolume()->GetRegion()->GetName() << ">."
551 << G4endl;
552 ED << "World would have a default region assigned by RunManagerKernel."
553 << G4endl;
554 G4Exception("G4RunManager::DefineWorldVolume", "Run0004", FatalException,
555 ED);
556 }
557 }
558
560
561 // Accept the world volume
562 currentWorld = worldVol;
563
564 // Set the default region to the world
565
567 worldLog->SetRegion(defaultRegion);
569 if(verboseLevel > 1)
570 G4cout << worldLog->GetName() << " is registered to the default region."
571 << G4endl;
572
573 // Set the world volume, notify the Navigator and reset its state
576 if(topologyIsChanged)
578
579 // Notify the VisManager as well
581 {
583 if(pVVisManager != nullptr)
584 pVVisManager->GeometryHasChanged();
585 }
586
587 geometryInitialized = true;
588 stateManager->SetNewState(currentState);
589 if(physicsInitialized && currentState != G4State_Idle)
590 {
591 stateManager->SetNewState(G4State_Idle);
592 }
593}
G4ApplicationState
@ G4State_Init
@ G4State_Idle
@ G4State_PreInit
const G4String & GetName() const
const G4ApplicationState & GetCurrentState() const
G4String GetStateString(const G4ApplicationState &aState) const
static G4StateManager * GetStateManager()
G4bool SetNewState(const G4ApplicationState &requestedState)
void SetWorldForTracking(G4VPhysicalVolume *theWorld)
G4LogicalVolume * GetLogicalVolume() const
static G4VVisManager * GetConcreteInstance()
virtual void GeometryHasChanged()=0
G4bool IsMasterThread()
Definition: G4Threading.cc:124

References G4Region::AddRootLogicalVolume(), G4RunManagerKernel::currentWorld, G4RunManagerKernel::defaultRegion, FatalException, G4cout, G4endl, G4Exception(), G4State_Idle, G4State_Init, G4State_PreInit, G4VVisManager::GeometryHasChanged(), G4RunManagerKernel::geometryInitialized, G4RunManagerKernel::geometryNeedsToBeClosed, G4VVisManager::GetConcreteInstance(), G4StateManager::GetCurrentState(), G4VPhysicalVolume::GetLogicalVolume(), G4LogicalVolume::GetName(), G4Region::GetName(), G4LogicalVolume::GetRegion(), G4StateManager::GetStateManager(), G4StateManager::GetStateString(), G4TransportationManager::GetTransportationManager(), G4Threading::IsMasterThread(), G4RunManagerKernel::physicsInitialized, G4StateManager::SetNewState(), G4LogicalVolume::SetRegion(), G4RunManagerKernel::SetupDefaultRegion(), G4TransportationManager::SetWorldForTracking(), and G4RunManagerKernel::verboseLevel.

Referenced by G4RunManager::DefineWorldVolume(), G4ErrorRunManagerHelper::InitializeGeometry(), and G4RunManager::InitializeGeometry().

◆ DumpRegion() [1/2]

void G4RunManagerKernel::DumpRegion ( const G4String &  rname) const
inherited

Definition at line 999 of file G4RunManagerKernel.cc.

1000{
1001 G4Region* region = G4RegionStore::GetInstance()->GetRegion(rname);
1002 if(region != nullptr)
1003 DumpRegion(region);
1004}
G4Region * GetRegion(const G4String &name, G4bool verbose=true) const

References G4RunManagerKernel::DumpRegion(), G4RegionStore::GetInstance(), and G4RegionStore::GetRegion().

Referenced by G4RunManagerKernel::BuildPhysicsTables(), G4RunManager::DumpRegion(), and G4RunManagerKernel::DumpRegion().

◆ DumpRegion() [2/2]

void G4RunManagerKernel::DumpRegion ( G4Region *  region = nullptr) const
inherited

Definition at line 1007 of file G4RunManagerKernel.cc.

1008{
1009 if(region == nullptr)
1010 {
1011 for(std::size_t i = 0; i < G4RegionStore::GetInstance()->size(); ++i)
1012 {
1014 }
1015 }
1016 else
1017 {
1019 return;
1020 G4cout << G4endl;
1021 G4cout << "Region <" << region->GetName() << "> -- ";
1022 if(region->GetWorldPhysical())
1023 {
1024 G4cout << " -- appears in <" << region->GetWorldPhysical()->GetName()
1025 << "> world volume";
1026 }
1027 else
1028 {
1029 G4cout << " -- is not associated to any world.";
1030 }
1031 G4cout << G4endl;
1032 if(region->IsInMassGeometry())
1033 {
1034 G4cout << " This region is in the mass world." << G4endl;
1035 }
1036 if(region->IsInParallelGeometry())
1037 {
1038 G4cout << " This region is in the parallel world." << G4endl;
1039 }
1040
1041 G4cout << " Root logical volume(s) : ";
1042 std::size_t nRootLV = region->GetNumberOfRootVolumes();
1043 auto lvItr = region->GetRootLogicalVolumeIterator();
1044 for(std::size_t j = 0; j < nRootLV; ++j)
1045 {
1046 G4cout << (*lvItr)->GetName() << " ";
1047 ++lvItr;
1048 }
1049 G4cout << G4endl;
1050
1051 G4cout << " Pointers : G4VUserRegionInformation["
1052 << region->GetUserInformation() << "], G4UserLimits["
1053 << region->GetUserLimits() << "], G4FastSimulationManager["
1054 << region->GetFastSimulationManager() << "], G4UserSteppingAction["
1055 << region->GetRegionalSteppingAction() << "]" << G4endl;
1056
1057 G4cout << " Materials : ";
1058 auto mItr = region->GetMaterialIterator();
1059 std::size_t nMaterial = region->GetNumberOfMaterials();
1060 for(std::size_t iMate = 0; iMate < nMaterial; ++iMate)
1061 {
1062 G4cout << (*mItr)->GetName() << " ";
1063 ++mItr;
1064 }
1065 G4cout << G4endl;
1066 G4ProductionCuts* cuts = region->GetProductionCuts();
1067 if(!cuts && region->IsInMassGeometry())
1068 {
1069 G4cerr << "Warning : Region <" << region->GetName()
1070 << "> does not have specific production cuts." << G4endl;
1071 G4cerr << "Default cuts are used for this region." << G4endl;
1073 ->GetDefaultProductionCuts());
1074 }
1075 else if(cuts != nullptr)
1076 {
1077 G4cout << " Production cuts : "
1078 << " gamma "
1079 << G4BestUnit(cuts->GetProductionCut("gamma"), "Length")
1080 << " e- " << G4BestUnit(cuts->GetProductionCut("e-"), "Length")
1081 << " e+ " << G4BestUnit(cuts->GetProductionCut("e+"), "Length")
1082 << " proton "
1083 << G4BestUnit(cuts->GetProductionCut("proton"), "Length")
1084 << G4endl;
1085 }
1086 }
1087}
#define G4BestUnit(a, b)
G4GLOB_DLL std::ostream G4cerr
G4double GetProductionCut(G4int index) const
G4FastSimulationManager * GetFastSimulationManager() const
Definition: G4Region.cc:140
G4VUserRegionInformation * GetUserInformation() const
G4VPhysicalVolume * GetWorldPhysical() const
G4UserLimits * GetUserLimits() const
size_t GetNumberOfRootVolumes() const
G4UserSteppingAction * GetRegionalSteppingAction() const
Definition: G4Region.cc:158
size_t GetNumberOfMaterials() const
std::vector< G4Material * >::const_iterator GetMaterialIterator() const
std::vector< G4LogicalVolume * >::iterator GetRootLogicalVolumeIterator()
const G4String & GetName() const
G4bool IsWorkerThread()
Definition: G4Threading.cc:123

References G4RunManagerKernel::DumpRegion(), G4BestUnit, G4cerr, G4cout, G4endl, G4Region::GetFastSimulationManager(), G4RegionStore::GetInstance(), G4Region::GetMaterialIterator(), G4Region::GetName(), G4VPhysicalVolume::GetName(), G4Region::GetNumberOfMaterials(), G4Region::GetNumberOfRootVolumes(), G4ProductionCuts::GetProductionCut(), G4Region::GetProductionCuts(), G4ProductionCutsTable::GetProductionCutsTable(), G4Region::GetRegionalSteppingAction(), G4Region::GetRootLogicalVolumeIterator(), G4Region::GetUserInformation(), G4Region::GetUserLimits(), G4Region::GetWorldPhysical(), G4Region::IsInMassGeometry(), G4Region::IsInParallelGeometry(), G4Threading::IsWorkerThread(), and G4Region::SetProductionCuts().

◆ ExecuteWorkerInit()

void G4TaskRunManagerKernel::ExecuteWorkerInit ( )
static

Definition at line 233 of file G4TaskRunManagerKernel.cc.

234{
235 // because of TBB
236 if(G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id())
237 {
238 G4TaskManager* taskManager =
240 auto _fut = taskManager->async(ExecuteWorkerInit);
241 return _fut->get();
242 }
243
244 // this check is for TBB as there is not a way to run an initialization
245 // routine on each thread
246 if(!workerRM())
248
249 auto& wrm = workerRM();
250 assert(wrm.get() != nullptr);
251 wrm->DoCleanup();
252}
static G4ThreadId GetMasterThreadId()
static G4TaskRunManager * GetMasterRunManager()
std::shared_ptr< PackagedTask< RetT, Args... > > async(FuncT &&func, Args &&... args)
Definition: TaskManager.hh:100
TaskManager * GetTaskManager() const

References PTL::TaskManager::async(), ExecuteWorkerInit(), G4TaskRunManager::GetMasterRunManager(), G4MTRunManager::GetMasterThreadId(), PTL::TaskRunManager::GetTaskManager(), InitializeWorker(), and anonymous_namespace{G4TaskRunManagerKernel.cc}::workerRM().

Referenced by G4TaskRunManager::CreateAndStartWorkers(), and ExecuteWorkerInit().

◆ ExecuteWorkerTask()

void G4TaskRunManagerKernel::ExecuteWorkerTask ( )
static

Definition at line 256 of file G4TaskRunManagerKernel.cc.

257{
258 // because of TBB
259 if(G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id())
260 {
261 G4TaskManager* taskManager =
263 auto _fut = taskManager->async(ExecuteWorkerTask);
264 return _fut->get();
265 }
266
267 // this check is for TBB as there is not a way to run an initialization
268 // routine on each thread
269 if(!workerRM())
271
272 auto& wrm = workerRM();
273 assert(wrm.get() != nullptr);
274 wrm->DoWork();
275}

References PTL::TaskManager::async(), ExecuteWorkerTask(), G4TaskRunManager::GetMasterRunManager(), G4MTRunManager::GetMasterThreadId(), PTL::TaskRunManager::GetTaskManager(), InitializeWorker(), and anonymous_namespace{G4TaskRunManagerKernel.cc}::workerRM().

Referenced by G4TaskRunManager::AddEventTask(), and ExecuteWorkerTask().

◆ GeometryHasBeenModified()

void G4RunManagerKernel::GeometryHasBeenModified ( )
inlineinherited

◆ GetCurrentWorld()

G4VPhysicalVolume * G4RunManagerKernel::GetCurrentWorld ( ) const
inlineinherited

Definition at line 169 of file G4RunManagerKernel.hh.

169{ return currentWorld; }

References G4RunManagerKernel::currentWorld.

Referenced by G4WorkerRunManager::InitializeGeometry().

◆ GetEventManager()

G4EventManager * G4RunManagerKernel::GetEventManager ( ) const
inlineinherited

Definition at line 130 of file G4RunManagerKernel.hh.

130{ return eventManager; }
G4EventManager * eventManager

References G4RunManagerKernel::eventManager.

Referenced by G4RunManager::G4RunManager().

◆ GetNumberOfParallelWorld()

G4int G4RunManagerKernel::GetNumberOfParallelWorld ( ) const
inlineinherited

◆ GetNumberOfStaticAllocators()

G4int G4RunManagerKernel::GetNumberOfStaticAllocators ( ) const
inlineinherited

◆ GetPhysicsList()

G4VUserPhysicsList * G4RunManagerKernel::GetPhysicsList ( ) const
inlineinherited

Definition at line 167 of file G4RunManagerKernel.hh.

167{ return physicsList; }

References G4RunManagerKernel::physicsList.

◆ GetPrimaryTransformer()

G4PrimaryTransformer * G4RunManagerKernel::GetPrimaryTransformer ( ) const
inlineinherited

Definition at line 143 of file G4RunManagerKernel.hh.

144 {
146 }
G4PrimaryTransformer * GetPrimaryTransformer() const

References G4RunManagerKernel::eventManager, and G4EventManager::GetPrimaryTransformer().

Referenced by G4RunManagerKernel::RunInitialization().

◆ GetRunManagerKernel()

G4RunManagerKernel * G4RunManagerKernel::GetRunManagerKernel ( )
staticinherited

◆ GetStackManager()

G4StackManager * G4RunManagerKernel::GetStackManager ( ) const
inlineinherited

Definition at line 131 of file G4RunManagerKernel.hh.

132 {
134 }
G4StackManager * GetStackManager() const

References G4RunManagerKernel::eventManager, and G4EventManager::GetStackManager().

◆ GetTrackingManager()

G4TrackingManager * G4RunManagerKernel::GetTrackingManager ( ) const
inlineinherited

Definition at line 135 of file G4RunManagerKernel.hh.

136 {
138 }
G4TrackingManager * GetTrackingManager() const

References G4RunManagerKernel::eventManager, and G4EventManager::GetTrackingManager().

Referenced by G4VisManager::Disable(), and G4ExceptionHandler::DumpTrackInfo().

◆ GetVersionString()

const G4String & G4RunManagerKernel::GetVersionString ( ) const
inlineinherited

Definition at line 148 of file G4RunManagerKernel.hh.

148{ return versionString; }

References G4RunManagerKernel::versionString.

Referenced by G4RunManager::GetVersionString().

◆ GetWorkerThread()

G4WorkerThread * G4TaskRunManagerKernel::GetWorkerThread ( )
static

◆ InitCommandStack()

std::vector< G4String > & G4TaskRunManagerKernel::InitCommandStack ( )
static

Definition at line 329 of file G4TaskRunManagerKernel.cc.

330{
331 return initCmdStack;
332}
static G4TASK_DLL std::vector< G4String > initCmdStack

References initCmdStack.

Referenced by G4TaskRunManager::CreateAndStartWorkers().

◆ InitializePhysics()

void G4RunManagerKernel::InitializePhysics ( )
inherited

Definition at line 673 of file G4RunManagerKernel.cc.

674{
676 G4ApplicationState currentState = stateManager->GetCurrentState();
677 if(currentState != G4State_Init)
678 {
679 G4cout << "Current application state is "
680 << stateManager->GetStateString(currentState) << G4endl;
681 if(!(currentState == G4State_Idle || currentState == G4State_PreInit))
682 {
683 G4Exception("G4RunManagerKernel::InitializePhysics",
684 "InitializePhysicsIncorrectState", FatalException,
685 "Geant4 kernel is not Init state : Method ignored.");
686 return;
687 }
688 else
689 {
690 // G4Exception("G4RunManagerKernel::DefineWorldVolume",
691 // "DefineWorldVolumeAtIncorrectState", JustWarning,
692 // "Geant4 kernel is not Init state : Assuming Init state.");
693 G4cout
694 << "Warning : Geant4 kernel is not Init state : Assuming Init state."
695 << G4endl;
696 stateManager->SetNewState(G4State_Init);
697 }
698 }
699
700 if(physicsList == nullptr)
701 {
702 G4Exception("G4RunManagerKernel::InitializePhysics", "Run0012",
703 FatalException, "G4VUserPhysicsList is not defined");
704 return;
705 }
706
707 if(verboseLevel > 1)
708 G4cout << "physicsList->Construct() start." << G4endl;
712
713 if(verboseLevel > 1)
714 G4cout << "physicsList->CheckParticleList() start." << G4endl;
716
717 // Cannot assume that SetCuts() and CheckRegions() are thread safe.
718 // We need to mutex (report from valgrind --tool=drd)
721 {
722 if(verboseLevel > 1)
723 G4cout << "physicsList->setCut() start." << G4endl;
725 }
726 CheckRegions();
727 l.unlock();
728
729 /*******************
730 // static G4bool createIsomerOnlyOnce = false;
731 // if(G4Threading::IsMultithreadedApplication() &&
732 G4Threading::IsMasterThread())
733 // {
734 // if(!createIsomerOnlyOnce)
735 // {
736 // createIsomerOnlyOnce = true;
737 // G4ParticleDefinition* gion =
738 G4ParticleTable::GetParticleTable()->GetGenericIon();
739 // if(gion != nullptr)
740 // {
741 // G4ParticleTable::GetParticleTable()
742 ->GetIonTable()->CreateAllIsomer();
743 // PropagateGenericIonID();
744 // }
745 // }
746 // }
747 *********************/
748
749 physicsInitialized = true;
750#ifdef G4MULTITHREADED
751 G4UnitDefinition::GetUnitsTable().Synchronize();
752#endif
753 stateManager->SetNewState(currentState);
754 if(geometryInitialized && currentState != G4State_Idle)
755 {
756 stateManager->SetNewState(G4State_Idle);
757 }
758}
static G4UnitsTable & GetUnitsTable()
void UseCoupledTransportation(G4bool vl=true)

References G4VUserPhysicsList::CheckParticleList(), G4RunManagerKernel::CheckRegions(), G4VUserPhysicsList::Construct(), FatalException, G4cout, G4endl, G4Exception(), G4State_Idle, G4State_Init, G4State_PreInit, G4RunManagerKernel::geometryInitialized, G4StateManager::GetCurrentState(), G4StateManager::GetStateManager(), G4StateManager::GetStateString(), G4UnitDefinition::GetUnitsTable(), anonymous_namespace{G4RunManagerKernel.cc}::initphysicsmutex, G4Threading::IsMasterThread(), G4RunManagerKernel::numberOfParallelWorld, G4RunManagerKernel::physicsInitialized, G4RunManagerKernel::physicsList, G4VUserPhysicsList::SetCuts(), G4StateManager::SetNewState(), G4TemplateAutoLock< _Mutex_t >::unlock(), G4VUserPhysicsList::UseCoupledTransportation(), and G4RunManagerKernel::verboseLevel.

Referenced by G4ErrorRunManagerHelper::InitializePhysics(), and G4RunManager::InitializePhysics().

◆ InitializeWorker()

void G4TaskRunManagerKernel::InitializeWorker ( )
static

!!!!!!!!!!!!!!!!!!!!!!!!! !!!!! IMPORTANT !!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!

Definition at line 131 of file G4TaskRunManagerKernel.cc.

132{
133 if(context() && workerRM())
134 return;
135
137 if(G4MTRunManager::GetMasterThreadId() == G4ThisThread::get_id())
138 {
139 G4TaskManager* taskManager = mrm->GetTaskManager();
140 auto _fut = taskManager->async(InitializeWorker);
141 _fut->wait();
142 return;
143 }
144
148 // Here is not sequential anymore and G4UserWorkerThreadInitialization is
149 // a shared user initialization class
150 // This means this method cannot use data memebers of G4RunManagerKernel
151 // unless they are invariant ("read-only") and can be safely shared.
152 // All the rest that is not invariant should be incapsualted into
153 // the context (or, as for wThreadContext be G4ThreadLocal)
155
157 context().reset(new G4WorkerThread);
158
159 //============================
160 // Step-0: Thread ID
161 //============================
162 // Initliazie per-thread stream-output
163 // The following line is needed before we actually do IO initialization
164 // becasue the constructor of UI manager resets the IO destination.
165 context()->SetNumberThreads(mrm->GetThreadPool()->size());
166 context()->SetThreadId(G4ThreadPool::get_this_thread_id() - 1);
167 G4int thisID = context()->GetThreadId();
170
171 //============================
172 // Optimization: optional
173 //============================
174 // Enforce thread affinity if requested
175 context()->SetPinAffinity(mrm->GetPinAffinity());
176
177 //============================
178 // Step-1: Random number engine
179 //============================
180 // RNG Engine needs to be initialized by "cloning" the master one.
181 const CLHEP::HepRandomEngine* masterEngine = mrm->getMasterRandomEngine();
183
184 //============================
185 // Step-2: Initialize worker thread
186 //============================
189
191 {
194 if(sv)
196 }
197 // Now initialize worker part of shared objects (geometry/physics)
198 context()->BuildGeometryAndPhysicsVector();
199 workerRM().reset(static_cast<G4WorkerTaskRunManager*>(
201 auto& wrm = workerRM();
202 wrm->SetWorkerThread(context().get());
203
204 //================================
205 // Step-3: Setup worker run manager
206 //================================
207 // Set the detector and physics list to the worker thread. Share with master
208 const G4VUserDetectorConstruction* detector =
210 wrm->G4RunManager::SetUserInitialization(
211 const_cast<G4VUserDetectorConstruction*>(detector));
212 const G4VUserPhysicsList* physicslist = mrm->GetUserPhysicsList();
213 wrm->SetUserInitialization(const_cast<G4VUserPhysicsList*>(physicslist));
214
215 //================================
216 // Step-4: Initialize worker run manager
217 //================================
222
223 workerRM()->Initialize();
224
225 for(auto& itr : initCmdStack)
227
228 wrm->ProcessUI();
229}
int G4int
Definition: G4Types.hh:85
G4int GetPinAffinity() const
const CLHEP::HepRandomEngine * getMasterRandomEngine() const
const G4UserWorkerInitialization * GetUserWorkerInitialization() const
const G4VUserDetectorConstruction * GetUserDetectorConstruction() const
const G4VUserActionInitialization * GetUserActionInitialization() const
G4VUserActionInitialization * GetNonConstUserActionInitialization() const
const G4VUserPhysicsList * GetUserPhysicsList() const
const G4UserWorkerThreadInitialization * GetUserWorkerThreadInitialization() const
void SetUpForAThread(G4int tId)
Definition: G4UImanager.cc:860
virtual void SetupRNGEngine(const CLHEP::HepRandomEngine *aRNGEngine) const
virtual G4WorkerRunManager * CreateWorkerRunManager() const
static void SetInstance(G4VSteppingVerbose *Instance)
virtual void Build() const =0
virtual G4VSteppingVerbose * InitializeSteppingVerbose() const
ThreadPool * GetThreadPool() const
static uintmax_t get_this_thread_id()
Definition: ThreadPool.cc:122
size_type size() const
Definition: ThreadPool.hh:163
G4int WorkerThreadJoinsPool()
Definition: G4Threading.cc:132
void G4SetThreadId(G4int aNewValue)
Definition: G4Threading.cc:125
auto get(Tuple< Elements... > &t) -> decltype(get_height< sizeof...(Elements) - I - 1 >(t))
Definition: Tuple.hh:139

References G4UImanager::ApplyCommand(), PTL::TaskManager::async(), G4VUserActionInitialization::Build(), anonymous_namespace{G4TaskRunManagerKernel.cc}::context(), G4UserWorkerThreadInitialization::CreateWorkerRunManager(), G4Threading::G4SetThreadId(), PTL::get(), PTL::ThreadPool::get_this_thread_id(), G4MTRunManager::getMasterRandomEngine(), G4TaskRunManager::GetMasterRunManager(), G4MTRunManager::GetMasterThreadId(), G4RunManager::GetNonConstUserActionInitialization(), G4MTRunManager::GetPinAffinity(), PTL::TaskRunManager::GetTaskManager(), PTL::TaskRunManager::GetThreadPool(), G4UImanager::GetUIpointer(), G4RunManager::GetUserActionInitialization(), G4RunManager::GetUserDetectorConstruction(), G4RunManager::GetUserPhysicsList(), G4RunManager::GetUserWorkerInitialization(), G4RunManager::GetUserWorkerThreadInitialization(), initCmdStack, G4VUserActionInitialization::InitializeSteppingVerbose(), InitializeWorker(), G4VSteppingVerbose::SetInstance(), G4UImanager::SetUpForAThread(), G4UserWorkerThreadInitialization::SetupRNGEngine(), PTL::ThreadPool::size(), G4UserWorkerInitialization::WorkerInitialize(), anonymous_namespace{G4TaskRunManagerKernel.cc}::workerRM(), G4UserWorkerInitialization::WorkerStart(), and G4Threading::WorkerThreadJoinsPool().

Referenced by G4TaskRunManager::CreateAndStartWorkers(), ExecuteWorkerInit(), ExecuteWorkerTask(), and InitializeWorker().

◆ PhysicsHasBeenModified()

void G4RunManagerKernel::PhysicsHasBeenModified ( )
inlineinherited

◆ PropagateGenericIonID()

void G4RunManagerKernel::PropagateGenericIonID ( )
protectedinherited

Definition at line 820 of file G4RunManagerKernel.cc.

821{
824 if(gion != nullptr)
825 {
826 // G4ParticleTable::GetParticleTable()->GetIonTable()->CreateAllIsomer();
827 G4int gionId = gion->GetParticleDefinitionID();
829 pItr->reset(false);
830 while((*pItr)())
831 {
832 G4ParticleDefinition* particle = pItr->value();
833 if(particle->IsGeneralIon())
834 particle->SetParticleDefinitionID(gionId);
835 }
836 }
837}
G4bool IsGeneralIon() const
void SetParticleDefinitionID(G4int id=-1)
G4int GetParticleDefinitionID() const
void reset(G4bool ifSkipIon=true)
G4ParticleDefinition * GetGenericIon() const

References G4ParticleTable::GetGenericIon(), G4ParticleTable::GetIterator(), G4ParticleDefinition::GetParticleDefinitionID(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::IsGeneralIon(), G4ParticleTableIterator< K, V >::reset(), and G4ParticleDefinition::SetParticleDefinitionID().

Referenced by G4RunManagerKernel::RunInitialization().

◆ ResetNavigator()

void G4RunManagerKernel::ResetNavigator ( )
protectedinherited

Definition at line 848 of file G4RunManagerKernel.cc.

849{
851 {
853 return;
854 }
855
856 // We have to tweak the navigator's state in case a geometry has been
857 // modified between runs. By the following calls we ensure that navigator's
858 // state is reset properly. It is required the geometry to be closed
859 // and previous optimisations to be cleared.
860
862 if(verboseLevel > 1)
863 G4cout << "Start closing geometry." << G4endl;
864
865 geomManager->OpenGeometry();
867
869}
static G4GeometryManager * GetInstance()
G4bool CloseGeometry(G4bool pOptimise=true, G4bool verbose=false, G4VPhysicalVolume *vol=nullptr)
void OpenGeometry(G4VPhysicalVolume *vol=nullptr)

References G4GeometryManager::CloseGeometry(), G4cout, G4endl, G4RunManagerKernel::geometryNeedsToBeClosed, G4RunManagerKernel::geometryToBeOptimized, G4GeometryManager::GetInstance(), G4GeometryManager::OpenGeometry(), G4RunManagerKernel::runManagerKernelType, G4RunManagerKernel::verboseLevel, and G4RunManagerKernel::workerRMK.

Referenced by G4RunManagerKernel::RunInitialization().

◆ RunInitialization()

G4bool G4RunManagerKernel::RunInitialization ( G4bool  fakeRun = false)
inherited

Definition at line 761 of file G4RunManagerKernel.cc.

762{
764 G4ApplicationState currentState = stateManager->GetCurrentState();
765
767 {
768 G4Exception("G4RunManagerKernel::RunInitialization", "Run0021", JustWarning,
769 "Geometry has not yet initialized : method ignored.");
770 return false;
771 }
772
774 {
775 G4Exception("G4RunManagerKernel::RunInitialization", "Run0022", JustWarning,
776 "Physics has not yet initialized : method ignored.");
777 return false;
778 }
779
780 if(currentState != G4State_Idle)
781 {
782 G4Exception("G4RunManagerKernel::RunInitialization", "Run0023", JustWarning,
783 "Geant4 kernel not in Idle state : method ignored.");
784 return false;
785 }
786
789
790 stateManager->SetNewState(G4State_Init);
793 UpdateRegion();
794 BuildPhysicsTables(fakeRun);
795
797 {
799 // CheckRegularGeometry();
800 // Notify the VisManager as well
802 {
804 if(pVVisManager != nullptr)
805 pVVisManager->GeometryHasChanged();
806 }
807 }
808
810
811#ifdef G4MULTITHREADED
812 G4UnitDefinition::GetUnitsTable().Synchronize();
813#endif
814 stateManager->SetNewState(G4State_Idle);
815 stateManager->SetNewState(G4State_GeomClosed);
816 return true;
817}
@ G4State_GeomClosed
@ JustWarning
G4PrimaryTransformer * GetPrimaryTransformer() const
virtual void SetupShadowProcess() const
void BuildPhysicsTables(G4bool fakeRun)

References G4RunManagerKernel::BuildPhysicsTables(), G4RunManagerKernel::CheckRegularGeometry(), G4PrimaryTransformer::CheckUnknown(), G4Exception(), G4State_GeomClosed, G4State_Idle, G4State_Init, G4VVisManager::GeometryHasChanged(), G4RunManagerKernel::geometryInitialized, G4RunManagerKernel::geometryNeedsToBeClosed, G4VVisManager::GetConcreteInstance(), G4StateManager::GetCurrentState(), G4RunManagerKernel::GetPrimaryTransformer(), G4StateManager::GetStateManager(), G4UnitDefinition::GetUnitsTable(), G4Threading::IsMasterThread(), JustWarning, G4RunManagerKernel::physicsInitialized, G4RunManagerKernel::PropagateGenericIonID(), G4RunManagerKernel::ResetNavigator(), G4StateManager::SetNewState(), G4RunManagerKernel::SetupShadowProcess(), and G4RunManagerKernel::UpdateRegion().

Referenced by export_G4RunManagerKernel(), G4ErrorRunManagerHelper::RunInitialization(), G4RunManager::RunInitialization(), G4WorkerRunManager::RunInitialization(), and G4WorkerTaskRunManager::RunInitialization().

◆ RunTermination()

void G4RunManagerKernel::RunTermination ( )
inherited

◆ SetGeometryToBeOptimized()

void G4RunManagerKernel::SetGeometryToBeOptimized ( G4bool  vl)
inlineinherited

◆ SetNumberOfParallelWorld()

void G4RunManagerKernel::SetNumberOfParallelWorld ( G4int  i)
inlineinherited

◆ SetPhysics()

void G4RunManagerKernel::SetPhysics ( G4VUserPhysicsList *  uPhys)
inherited

Definition at line 596 of file G4RunManagerKernel.cc.

597{
598 physicsList = uPhys;
599
601 return;
602
603 SetupPhysics();
604 if(verboseLevel > 2)
606 if(verboseLevel > 1)
607 {
608 G4cout << "List of instantiated particles "
609 "============================================"
610 << G4endl;
612 for(G4int i = 0; i < nPtcl; ++i)
613 {
616 G4cout << pd->GetParticleName() << " ";
617 if(i % 10 == 9)
618 G4cout << G4endl;
619 }
620 G4cout << G4endl;
621 }
622}
const G4String & GetParticleName() const
G4ParticleDefinition * GetParticle(G4int index) const
G4int entries() const
void DumpTable(const G4String &particle_name="ALL")

References G4ParticleTable::DumpTable(), G4ParticleTable::entries(), G4cout, G4endl, G4ParticleTable::GetParticle(), G4ParticleDefinition::GetParticleName(), G4ParticleTable::GetParticleTable(), G4RunManagerKernel::physicsList, G4RunManagerKernel::runManagerKernelType, G4RunManagerKernel::SetupPhysics(), G4RunManagerKernel::verboseLevel, and G4RunManagerKernel::workerRMK.

Referenced by G4ErrorRunManagerHelper::InitializePhysics(), and G4RunManager::SetUserInitialization().

◆ SetPrimaryTransformer()

void G4RunManagerKernel::SetPrimaryTransformer ( G4PrimaryTransformer *  pt)
inlineinherited

Definition at line 139 of file G4RunManagerKernel.hh.

140 {
142 }
void SetPrimaryTransformer(G4PrimaryTransformer *tf)

References G4RunManagerKernel::eventManager, and G4EventManager::SetPrimaryTransformer().

Referenced by G4RunManager::SetPrimaryTransformer().

◆ SetScoreSplitter()

void G4RunManagerKernel::SetScoreSplitter ( )
privateinherited

Definition at line 1127 of file G4RunManagerKernel.cc.

1128{
1131 auto theParticleIterator = theParticleTable->GetIterator();
1132
1133 // Ensure that Process is added only once to the particles' process managers
1134 static G4ThreadLocal G4bool InitSplitter = false;
1135 if(!InitSplitter)
1136 {
1137 InitSplitter = true;
1138
1139 theParticleIterator->reset();
1140 while((*theParticleIterator)())
1141 {
1142 G4ParticleDefinition* particle = theParticleIterator->value();
1143 G4ProcessManager* pmanager = particle->GetProcessManager();
1144 if(pmanager)
1145 {
1146 pmanager->AddDiscreteProcess(pSplitter);
1147 }
1148 }
1149
1150 if(verboseLevel > 0)
1151 {
1152 G4cout
1153 << "G4RunManagerKernel -- G4ScoreSplittingProcess is appended to all "
1154 "particles."
1155 << G4endl;
1156 }
1157 }
1158}
bool G4bool
Definition: G4Types.hh:86
G4int AddDiscreteProcess(G4VProcess *aProcess, G4int ord=ordDefault)
#define G4ThreadLocal
Definition: tls.hh:77

References G4ProcessManager::AddDiscreteProcess(), G4cout, G4endl, G4ThreadLocal, G4ParticleTable::GetIterator(), G4ParticleTable::GetParticleTable(), G4ParticleDefinition::GetProcessManager(), theParticleIterator, and G4RunManagerKernel::verboseLevel.

Referenced by G4RunManagerKernel::CheckRegularGeometry().

◆ SetUpDecayChannels()

void G4TaskRunManagerKernel::SetUpDecayChannels ( )

Definition at line 336 of file G4TaskRunManagerKernel.cc.

337{
340 pItr->reset();
341 while((*pItr)())
342 {
343 G4DecayTable* dt = pItr->value()->GetDecayTable();
344 if(dt)
345 {
346 G4int nCh = dt->entries();
347 for(G4int i = 0; i < nCh; i++)
348 {
349 dt->GetDecayChannel(i)->GetDaughter(0);
350 }
351 }
352 }
353}
G4VDecayChannel * GetDecayChannel(G4int index) const
G4int entries() const
G4ParticleDefinition * GetDaughter(G4int anIndex)

References G4DecayTable::entries(), G4VDecayChannel::GetDaughter(), G4DecayTable::GetDecayChannel(), G4ParticleTable::GetIterator(), G4ParticleTable::GetParticleTable(), G4ParticleTableIterator< K, V >::reset(), and G4ParticleTableIterator< K, V >::value().

Referenced by G4TaskRunManager::InitializeEventLoop().

◆ SetupDefaultRegion()

void G4RunManagerKernel::SetupDefaultRegion ( )
protectedinherited

Definition at line 330 of file G4RunManagerKernel.cc.

331{
333 return;
334
335 // Remove old world logical volume from the default region, if exist
337 {
338 if(defaultRegion->GetNumberOfRootVolumes() > size_t(1))
339 {
340 G4Exception("G4RunManager::SetupDefaultRegion", "Run0005", FatalException,
341 "Default world region should have a unique logical volume.");
342 }
345 if(verboseLevel > 1)
346 G4cout
347 << "Obsolete world logical volume is removed from the default region."
348 << G4endl;
349 }
350}
void RemoveRootLogicalVolume(G4LogicalVolume *lv, G4bool scan=true)
Definition: G4Region.cc:328

References G4RunManagerKernel::defaultRegion, FatalException, G4cout, G4endl, G4Exception(), G4Region::GetNumberOfRootVolumes(), G4Region::GetRootLogicalVolumeIterator(), G4Region::RemoveRootLogicalVolume(), G4RunManagerKernel::runManagerKernelType, G4RunManagerKernel::verboseLevel, and G4RunManagerKernel::workerRMK.

Referenced by G4RunManagerKernel::DefineWorldVolume().

◆ SetupPhysics()

void G4RunManagerKernel::SetupPhysics ( )
protectedinherited

Definition at line 625 of file G4RunManagerKernel.cc.

626{
628
630
631 // For sanity reason
635 if(gion != nullptr)
636 {
638 }
640
642 pItr->reset();
643 while((*pItr)())
644 {
645 G4ParticleDefinition* particle = pItr->value();
646 if(!(particle->IsGeneralIon()))
647 particle->SetParticleDefinitionID();
648 }
649
650 if(gion != nullptr)
651 {
652 G4int gionId = gion->GetParticleDefinitionID();
653 pItr->reset(false);
654 while((*pItr)())
655 {
656 G4ParticleDefinition* particle = pItr->value();
657 if(particle->IsGeneralIon())
658 particle->SetParticleDefinitionID(gionId);
659 }
660 }
661#ifdef G4MULTITHREADED
662 G4UnitDefinition::GetUnitsTable().Synchronize();
663#endif
664}
static G4Geantino * GeantinoDefinition()
Definition: G4Geantino.cc:81
static void ConstructParticle()
void InitializeLightIons()
Definition: G4IonTable.cc:205
G4IonTable * GetIonTable() const
void SetReadiness(G4bool val=true)
virtual void ConstructParticle()=0

References G4IonConstructor::ConstructParticle(), G4VUserPhysicsList::ConstructParticle(), G4Geantino::GeantinoDefinition(), G4ParticleTable::GetGenericIon(), G4ParticleTable::GetIonTable(), G4ParticleTable::GetIterator(), G4ParticleDefinition::GetParticleDefinitionID(), G4ParticleTable::GetParticleTable(), G4UnitDefinition::GetUnitsTable(), G4IonTable::InitializeLightIons(), G4ParticleDefinition::IsGeneralIon(), G4RunManagerKernel::physicsList, G4ParticleTableIterator< K, V >::reset(), G4ParticleDefinition::SetParticleDefinitionID(), and G4ParticleTable::SetReadiness().

Referenced by G4RunManagerKernel::SetPhysics().

◆ SetupShadowProcess()

void G4TaskRunManagerKernel::SetupShadowProcess ( ) const
protectedvirtual

Reimplemented from G4RunManagerKernel.

Definition at line 94 of file G4TaskRunManagerKernel.cc.

95{
96 // Behavior is the same as base class (sequential mode)
97 // ShadowProcess pointer == process poitner
99}

References G4RunManagerKernel::SetupShadowProcess().

◆ SetVerboseLevel()

void G4RunManagerKernel::SetVerboseLevel ( G4int  vl)
inlineinherited

◆ TerminateWorker() [1/2]

void G4TaskRunManagerKernel::TerminateWorker ( )
static

◆ TerminateWorker() [2/2]

void G4TaskRunManagerKernel::TerminateWorker ( G4WorkerTaskRunManager *  wrm)
static

Definition at line 309 of file G4TaskRunManagerKernel.cc.

310{
311 if(!wrm)
312 return;
313
314 //===============================
315 // Step-6: Terminate worker thread
316 //===============================
318 if(mrm && mrm->GetUserWorkerInitialization())
320
321 G4WorkerThread* _context = wrm->GetWorkerThread();
323
325}
G4WorkerThread * GetWorkerThread() const
static void DestroyGeometryAndPhysicsVector()
G4int WorkerThreadLeavesPool()
Definition: G4Threading.cc:131

References G4WorkerThread::DestroyGeometryAndPhysicsVector(), G4TaskRunManager::GetMasterRunManager(), G4RunManager::GetUserWorkerInitialization(), G4WorkerTaskRunManager::GetWorkerThread(), G4UserWorkerInitialization::WorkerStop(), and G4Threading::WorkerThreadLeavesPool().

◆ TerminateWorkerRunEventLoop() [1/2]

void G4TaskRunManagerKernel::TerminateWorkerRunEventLoop ( )
static

◆ TerminateWorkerRunEventLoop() [2/2]

void G4TaskRunManagerKernel::TerminateWorkerRunEventLoop ( G4WorkerTaskRunManager *  wrm)
static

Definition at line 297 of file G4TaskRunManagerKernel.cc.

299{
300 if(!wrm)
301 return;
302
303 wrm->TerminateEventLoop();
304 wrm->RunTermination();
305}
virtual void RunTermination() override
virtual void TerminateEventLoop() override

References G4WorkerTaskRunManager::RunTermination(), and G4WorkerTaskRunManager::TerminateEventLoop().

◆ UpdateRegion()

void G4RunManagerKernel::UpdateRegion ( )
inherited

◆ WorkerDefineWorldVolume()

void G4RunManagerKernel::WorkerDefineWorldVolume ( G4VPhysicalVolume *  worldVol,
G4bool  topologyIsChanged = true 
)
inherited

Definition at line 455 of file G4RunManagerKernel.cc.

457{
459 G4ApplicationState currentState = stateManager->GetCurrentState();
460 if(currentState != G4State_Init)
461 {
462 if(!(currentState == G4State_Idle || currentState == G4State_PreInit))
463 {
464 G4cout << "Current application state is "
465 << stateManager->GetStateString(currentState) << G4endl;
466 G4Exception("G4RunManagerKernel::DefineWorldVolume",
467 "DefineWorldVolumeAtIncorrectState", FatalException,
468 "Geant4 kernel is not Init state : Method ignored.");
469 return;
470 }
471 else
472 {
473 stateManager->SetNewState(G4State_Init);
474 }
475 }
476
477 currentWorld = worldVol;
481 G4MTRunManager::masterWorlds_t masterWorlds = masterRM->GetMasterWorlds();
482 for(auto itrMW = masterWorlds.cbegin();
483 itrMW != masterWorlds.cend(); ++itrMW)
484 {
485 if((*itrMW).first == 0)
486 {
487 if((*itrMW).second != currentWorld)
488 {
489 G4Exception("G4RunManagerKernel::WorkerDefineWorldVolume", "RUN3091",
490 FatalException, "Mass world is inconsistent");
491 }
492 transM->SetWorldForTracking((*itrMW).second);
493 }
494 else
495 {
496 transM->RegisterWorld((*itrMW).second);
497 }
498 }
499
500 if(topologyIsChanged)
502
503 // Notify the VisManager as well
505 {
507 if(pVVisManager != nullptr)
508 pVVisManager->GeometryHasChanged();
509 }
510
511 geometryInitialized = true;
512 stateManager->SetNewState(currentState);
513 if(physicsInitialized && currentState != G4State_Idle)
514 {
515 stateManager->SetNewState(G4State_Idle);
516 }
517}
static G4MTRunManager * GetMasterRunManager()
std::map< G4int, G4VPhysicalVolume * > masterWorlds_t
static masterWorlds_t & GetMasterWorlds()
G4bool RegisterWorld(G4VPhysicalVolume *aWorld)

References G4RunManagerKernel::currentWorld, FatalException, G4cout, G4endl, G4Exception(), G4State_Idle, G4State_Init, G4State_PreInit, G4VVisManager::GeometryHasChanged(), G4RunManagerKernel::geometryInitialized, G4RunManagerKernel::geometryNeedsToBeClosed, G4VVisManager::GetConcreteInstance(), G4StateManager::GetCurrentState(), G4MTRunManager::GetMasterRunManager(), G4MTRunManager::GetMasterWorlds(), G4StateManager::GetStateManager(), G4StateManager::GetStateString(), G4TransportationManager::GetTransportationManager(), G4Threading::IsMasterThread(), G4RunManagerKernel::physicsInitialized, G4TransportationManager::RegisterWorld(), G4StateManager::SetNewState(), and G4TransportationManager::SetWorldForTracking().

Referenced by G4WorkerRunManager::InitializeGeometry().

◆ WorkerUpdateWorldVolume()

void G4RunManagerKernel::WorkerUpdateWorldVolume ( )
inherited

Definition at line 434 of file G4RunManagerKernel.cc.

435{
439 G4MTRunManager::masterWorlds_t masterWorlds = masterRM->GetMasterWorlds();
440 for(auto itrMW = masterWorlds.cbegin();
441 itrMW != masterWorlds.cend(); ++itrMW)
442 {
443 G4VPhysicalVolume* wv = (*itrMW).second;
444 G4VPhysicalVolume* pWorld =
446 ->IsWorldExisting(wv->GetName());
447 if(pWorld == nullptr)
448 {
449 transM->RegisterWorld(wv);
450 }
451 }
452}
G4VPhysicalVolume * IsWorldExisting(const G4String &worldName)

References G4MTRunManager::GetMasterRunManager(), G4MTRunManager::GetMasterWorlds(), G4VPhysicalVolume::GetName(), G4TransportationManager::GetTransportationManager(), G4TransportationManager::IsWorldExisting(), and G4TransportationManager::RegisterWorld().

Referenced by G4WorkerRunManager::ConstructScoringWorlds().

Field Documentation

◆ currentWorld

G4VPhysicalVolume* G4RunManagerKernel::currentWorld = nullptr
privateinherited

◆ defaultExceptionHandler

G4ExceptionHandler* G4RunManagerKernel::defaultExceptionHandler = nullptr
privateinherited

◆ defaultRegion

G4Region* G4RunManagerKernel::defaultRegion = nullptr
protectedinherited

◆ defaultRegionForParallelWorld

G4Region* G4RunManagerKernel::defaultRegionForParallelWorld = nullptr
protectedinherited

◆ eventManager

G4EventManager* G4RunManagerKernel::eventManager = nullptr
privateinherited

◆ fRunManagerKernel

G4ThreadLocal G4RunManagerKernel * G4RunManagerKernel::fRunManagerKernel = nullptr
staticprivateinherited

◆ geometryInitialized

G4bool G4RunManagerKernel::geometryInitialized = false
privateinherited

◆ geometryNeedsToBeClosed

G4bool G4RunManagerKernel::geometryNeedsToBeClosed = true
protectedinherited

◆ geometryToBeOptimized

G4bool G4RunManagerKernel::geometryToBeOptimized = true
privateinherited

◆ initCmdStack

std::vector< G4String > G4TaskRunManagerKernel::initCmdStack = {}
staticprotected

Definition at line 92 of file G4TaskRunManagerKernel.hh.

Referenced by InitCommandStack(), and InitializeWorker().

◆ numberOfParallelWorld

G4int G4RunManagerKernel::numberOfParallelWorld = 0
privateinherited

◆ numberOfStaticAllocators

G4int G4RunManagerKernel::numberOfStaticAllocators = 0
privateinherited

◆ physicsInitialized

G4bool G4RunManagerKernel::physicsInitialized = false
privateinherited

◆ physicsList

G4VUserPhysicsList* G4RunManagerKernel::physicsList = nullptr
privateinherited

◆ physicsNeedsToBeReBuilt

G4bool G4RunManagerKernel::physicsNeedsToBeReBuilt = true
privateinherited

◆ runManagerKernelType

RMKType G4RunManagerKernel::runManagerKernelType
protectedinherited

◆ verboseLevel

G4int G4RunManagerKernel::verboseLevel = 0
privateinherited

◆ versionString

G4String G4RunManagerKernel::versionString = ""
privateinherited

The documentation for this class was generated from the following files: