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 ()
 
G4VPhysicalVolumeGetCurrentWorld () const
 
G4EventManagerGetEventManager () const
 
G4int GetNumberOfParallelWorld () const
 
G4int GetNumberOfStaticAllocators () const
 
G4VUserPhysicsListGetPhysicsList () const
 
G4PrimaryTransformerGetPrimaryTransformer () const
 
G4StackManagerGetStackManager () const
 
G4TrackingManagerGetTrackingManager () const
 
const G4StringGetVersionString () 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 G4RunManagerKernelGetRunManagerKernel ()
 
static G4WorkerThreadGetWorkerThread ()
 
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

G4RegiondefaultRegion = nullptr
 
G4RegiondefaultRegionForParallelWorld = nullptr
 
G4bool geometryNeedsToBeClosed = true
 
RMKType runManagerKernelType
 

Static Protected Attributes

static G4TASK_DLL std::vector< G4StringinitCmdStack = {}
 

Private Member Functions

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

Private Attributes

G4VPhysicalVolumecurrentWorld = nullptr
 
G4ExceptionHandlerdefaultExceptionHandler = nullptr
 
G4EventManagereventManager = nullptr
 
G4bool geometryInitialized = false
 
G4bool geometryToBeOptimized = true
 
G4int numberOfParallelWorld = 0
 
G4int numberOfStaticAllocators = 0
 
G4bool physicsInitialized = false
 
G4VUserPhysicsListphysicsList = nullptr
 
G4bool physicsNeedsToBeReBuilt = true
 
G4int verboseLevel = 0
 
G4String versionString = ""
 

Static Private Attributes

static G4ThreadLocal G4RunManagerKernelfRunManagerKernel = 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: