Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // G4WorkerRunManagerKernel implementation 27 // 28 // Authors: M.Asai, A.Dotti (SLAC), 2013 29 // ------------------------------------------- 30 31 #include "G4WorkerRunManagerKernel.hh" 32 33 #include "G4ParticleTable.hh" 34 35 // ------------------------------------------- 36 G4WorkerRunManagerKernel::G4WorkerRunManagerKe 37 { 38 // This version of the constructor should ne 39 #ifndef G4MULTITHREADED 40 G4ExceptionDescription msg; 41 msg << "Geant4 code is compiled without mult 42 "(-DG4MULTITHREADED " 43 "is set to off)."; 44 msg << " This type of RunManager can only be 45 "applications."; 46 G4Exception("G4RunManagerKernel::G4RunManage 47 #endif 48 } 49 50 // ------------------------------------------- 51 G4WorkerRunManagerKernel::~G4WorkerRunManagerK 52 { 53 G4ParticleTable::GetParticleTable()->Destroy 54 } 55 56 // ------------------------------------------- 57 void G4WorkerRunManagerKernel::SetupShadowProc 58 { 59 // Master thread has created processes and s 60 // to the master process, get it and copy it 61 62 G4ParticleTable* theParticleTable = G4Partic 63 auto theParticleIterator = theParticleTable- 64 theParticleIterator->reset(); 65 // loop on particles and get process manager 66 while ((*theParticleIterator)()) { 67 G4ParticleDefinition* pd = theParticleIter 68 G4ProcessManager* pm = pd->GetProcessManag 69 G4ProcessManager* pmM = pd->GetMasterProce 70 if (pm == nullptr || pmM == nullptr) { 71 G4ExceptionDescription msg; 72 msg << "Process manager or process manag 73 msg << "Particle : " << pd->GetParticleN 74 msg << " proc-manager-shadow: " << pmM; 75 G4Exception("G4WorkerRunManagerKernel::S 76 return; 77 } 78 G4ProcessVector& procs = *(pm->GetProcessL 79 G4ProcessVector& procsM = *(pmM->GetProces 80 if (procs.size() != procsM.size()) { 81 G4cout << "G4WorkerRunManagerKernel::Set 82 << pd->GetParticleName() << ">" < 83 G4cout << " ProcessManager : " << pm << 84 for (G4int iv1 = 0; iv1 < (G4int)procs.s 85 G4cout << " " << iv1 << " - " << proc 86 } 87 G4cout << "----------------------------- 88 for (G4int iv2 = 0; iv2 < (G4int)procsM. 89 G4cout << " " << iv2 << " - " << proc 90 } 91 G4cout << "----------------------------- 92 G4ExceptionDescription msg; 93 msg << " Size of G4ProcessVector is inco 94 "threads "; 95 msg << " for the particle <" << pd->GetP 96 msg << " size of G4ProcessVector for wor 97 msg << " while master thread is " << pro 98 G4Exception("G4WorkerRunManagerKernel::S 99 } 100 // To each process add the reference to th 101 // process from master. Note that we rely 102 // processes being in the correct order! 103 // We could use some checking using proces 104 for (G4int idx = 0; idx < (G4int)procs.siz 105 procs[idx]->SetMasterProcess(procsM[idx] 106 } 107 } 108 } 109