Import Geant4 10.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-10 12:08:39 +02:00
parent 286caacf06
commit c9b32a6c0a
5770 changed files with 1050949 additions and 367105 deletions
+78 -25
View File
@@ -46,6 +46,7 @@
G4ScoringManager* G4MTRunManager::masterScM = 0;
G4MTRunManager::masterWorlds_t G4MTRunManager::masterWorlds = G4MTRunManager::masterWorlds_t();
G4MTRunManager* G4MTRunManager::fMasterRM = 0;
G4int G4MTRunManager::seedOncePerCommunication = 0;
namespace {
G4Mutex cmdHandlingMutex = G4MUTEX_INITIALIZER;
@@ -81,7 +82,7 @@ G4MTRunManagerKernel* G4MTRunManager::GetMTMasterRunManagerKernel()
}
G4MTRunManager::G4MTRunManager() : G4RunManager(masterRM),
nworkers(2),forcedNwokers(-1),
nworkers(2),forcedNwokers(-1),pinAffinity(0),
masterRNGEngine(0),
nextActionRequest(UNDEFINED),
eventModuloDef(0),eventModulo(1),
@@ -211,10 +212,10 @@ void G4MTRunManager::Initialize()
///G4UImanager::GetUIpointer()->SetIgnoreCmdNotFound(true);
}
void G4MTRunManager::TerminateEventLoop()
{
//Nothing to do
}
////void G4MTRunManager::TerminateEventLoop()
////{
//// //Nothing to do
////}
void G4MTRunManager::ProcessOneEvent(G4int)
{
//Nothing to do
@@ -315,7 +316,27 @@ void G4MTRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, G
if ( InitializeSeeds(n_event) == false && n_event>0 )
{
G4RNGHelper* helper = G4RNGHelper::GetInstance();
nSeedsFilled = n_event;
switch(seedOncePerCommunication)
{
case 0:
nSeedsFilled = n_event;
break;
case 1:
nSeedsFilled = nworkers;
break;
case 2:
nSeedsFilled = n_event/eventModulo + 1;
break;
default:
G4ExceptionDescription msgd;
msgd << "Parameter value <" << seedOncePerCommunication
<< "> of seedOncePerCommunication is invalid. It is reset to 0." ;
G4Exception("G4MTRunManager::InitializeEventLoop()",
"Run10036", JustWarning, msgd);
seedOncePerCommunication = 0;
nSeedsFilled = n_event;
}
// Generates up to nSeedsMax seed pairs only.
if(nSeedsFilled>nSeedsMax) nSeedsFilled=nSeedsMax;
masterRNGEngine->flatArray(nSeedsPerEvent*nSeedsFilled,randDbl);
@@ -341,7 +362,19 @@ void G4MTRunManager::InitializeEventLoop(G4int n_event, const char* macroFile, G
void G4MTRunManager::RefillSeeds()
{
G4RNGHelper* helper = G4RNGHelper::GetInstance();
G4int nFill = numberOfEventToBeProcessed - nSeedsFilled;
G4int nFill = 0;
switch(seedOncePerCommunication)
{
case 0:
nFill = numberOfEventToBeProcessed - nSeedsFilled;
break;
case 1:
nFill = nworkers - nSeedsFilled;
break;
case 2:
default:
nFill = (numberOfEventToBeProcessed - nSeedsFilled*eventModulo)/eventModulo + 1;
}
// Generates up to nSeedsMax seed pairs only.
if(nFill>nSeedsMax) nFill=nSeedsMax;
masterRNGEngine->flatArray(nSeedsPerEvent*nFill,randDbl);
@@ -359,10 +392,10 @@ void G4MTRunManager::RunTermination()
// Wait now for all threads to finish event-loop
WaitForEndEventLoopWorkers();
//Now call base-class methof
G4RunManager::TerminateEventLoop();
G4RunManager::RunTermination();
}
void G4MTRunManager::ConstructScoringWorlds()
{
masterScM = G4ScoringManager::GetScoringManagerIfExist();
@@ -455,26 +488,29 @@ void G4MTRunManager::MergeRun(const G4Run* localRun)
if(currentRun) currentRun->Merge(localRun);
}
G4bool G4MTRunManager::SetUpAnEvent(G4Event* evt,long& s1,long& s2,long& s3)
G4bool G4MTRunManager::SetUpAnEvent(G4Event* evt,long& s1,long& s2,long& s3,G4bool reseedRequired)
{
G4AutoLock l(&setUpEventMutex);
if( numberOfEventProcessed < numberOfEventToBeProcessed )
{
evt->SetEventID(numberOfEventProcessed);
G4RNGHelper* helper = G4RNGHelper::GetInstance();
G4int idx_rndm = nSeedsPerEvent*nSeedsUsed;
s1 = helper->GetSeed(idx_rndm);
s2 = helper->GetSeed(idx_rndm+1);
if(nSeedsPerEvent==3) s3 = helper->GetSeed(idx_rndm+2);
if(reseedRequired)
{
G4RNGHelper* helper = G4RNGHelper::GetInstance();
G4int idx_rndm = nSeedsPerEvent*nSeedsUsed;
s1 = helper->GetSeed(idx_rndm);
s2 = helper->GetSeed(idx_rndm+1);
if(nSeedsPerEvent==3) s3 = helper->GetSeed(idx_rndm+2);
nSeedsUsed++;
if(nSeedsUsed==nSeedsFilled) RefillSeeds();
}
numberOfEventProcessed++;
nSeedsUsed++;
if(nSeedsUsed==nSeedsFilled) RefillSeeds();
return true;
}
return false;
}
G4int G4MTRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue)
G4int G4MTRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue,G4bool reseedRequired)
{
G4AutoLock l(&setUpEventMutex);
if( numberOfEventProcessed < numberOfEventToBeProcessed && !runAborted )
@@ -483,15 +519,20 @@ G4int G4MTRunManager::SetUpNEvents(G4Event* evt, G4SeedsQueue* seedsQueue)
if(numberOfEventProcessed + nev > numberOfEventToBeProcessed)
{ nev = numberOfEventToBeProcessed - numberOfEventProcessed; }
evt->SetEventID(numberOfEventProcessed);
G4RNGHelper* helper = G4RNGHelper::GetInstance();
for(int i=0;i<nev;i++)
if(reseedRequired)
{
seedsQueue->push(helper->GetSeed(nSeedsPerEvent*nSeedsUsed));
seedsQueue->push(helper->GetSeed(nSeedsPerEvent*nSeedsUsed+1));
if(nSeedsPerEvent==3)
seedsQueue->push(helper->GetSeed(nSeedsPerEvent*nSeedsUsed+2));
nSeedsUsed++;
if(nSeedsUsed==nSeedsFilled) RefillSeeds();
G4RNGHelper* helper = G4RNGHelper::GetInstance();
G4int nevRnd = nev;
if(seedOncePerCommunication>0) nevRnd = 1;
for(int i=0;i<nevRnd;i++)
{
seedsQueue->push(helper->GetSeed(nSeedsPerEvent*nSeedsUsed));
seedsQueue->push(helper->GetSeed(nSeedsPerEvent*nSeedsUsed+1));
if(nSeedsPerEvent==3)
seedsQueue->push(helper->GetSeed(nSeedsPerEvent*nSeedsUsed+2));
nSeedsUsed++;
if(nSeedsUsed==nSeedsFilled) RefillSeeds();
}
}
numberOfEventProcessed += nev;
return nev;
@@ -863,3 +904,15 @@ G4MTRunManager::WorkerActionRequest G4MTRunManager::ThisWorkerWaitForNextAction(
WorkerActionRequest result = nextActionRequest;
return result;
}
void G4MTRunManager::SetPinAffinity(G4int n)
{
if ( n == 0 )
{
G4Exception("G4MTRunManager::SetPinAffinity",
"Run0035",FatalException,
"Pin affinity must be >0 or <0.");
}
pinAffinity = n;
return;
}