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 /* 27 * G4VUserChemistryList.cc 28 * 29 * Created on: 23 oct. 2013 30 * Author: kara 31 */ 32 33 #include "G4VUserChemistryList.hh" 34 35 #include <G4VScheduler.hh> 36 #include "G4MoleculeTable.hh" 37 #include "G4MoleculeDefinition.hh" 38 #include "G4ProcessManager.hh" 39 #include "G4DNAChemistryManager.hh" 40 41 G4VUserChemistryList::G4VUserChemistryList(G4b 42 fIsPhysicsConstructor(flag) 43 { 44 verboseLevel = 1; 45 } 46 47 G4VUserChemistryList::~G4VUserChemistryList() 48 { 49 G4DNAChemistryManager* chemMan = G4DNAChemis 50 if (chemMan != nullptr) 51 { 52 chemMan->Deregister(*this); 53 } 54 } 55 56 void G4VUserChemistryList::RegisterTimeStepMod 57 58 { 59 G4VScheduler::Instance()->RegisterModel(time 60 } 61 62 void G4VUserChemistryList::BuildPhysicsTable() 63 { 64 G4MoleculeTable* theMoleculeTable = G4Molecu 65 66 G4MoleculeDefinitionIterator iterator = 67 theMoleculeTable->GetDefintionIterator() 68 69 iterator.reset(); 70 while (iterator()) 71 { 72 G4MoleculeDefinition* moleculeDef = iterat 73 BuildPhysicsTable(moleculeDef); 74 } 75 } 76 77 void G4VUserChemistryList::BuildPhysicsTable(G 78 { 79 //Get processes from master thread; 80 G4ProcessManager* pManager = moleculeDef->Ge 81 82 if (pManager == nullptr) 83 { 84 #ifdef G4VERBOSE 85 if (verboseLevel > 0) 86 { 87 G4cout << "G4VUserPhysicsList::BuildPhys 88 << " : No Process Manager for " < 89 << G4endl; 90 G4cout << moleculeDef->GetParticleName() 91 << " should be created in your PhysicsLi 92 } 93 #endif 94 G4Exception("G4VUserChemistryList::BuildPh 95 "Run0271", FatalException, 96 "No process manager"); 97 return; 98 } 99 100 G4ProcessManager* pManagerShadow = moleculeD 101 G4ProcessVector* pVector = pManager->GetProc 102 if (pVector == nullptr) 103 { 104 #ifdef G4VERBOSE 105 if (verboseLevel > 0) 106 { 107 G4cout << "G4VUserChemistryList::BuildPh 108 << " : No Process Vector for " << 109 << G4endl; 110 } 111 #endif 112 G4Exception("G4VUserChemistryList::BuildPh 113 "Run0272", FatalException, 114 "No process Vector"); 115 return; 116 } 117 #ifdef G4VERBOSE 118 if (verboseLevel > 2) 119 { 120 G4cout << "G4VUserChemistryList::BuildPhys 121 << moleculeDef->GetParticleName() < 122 G4cout << " ProcessManager : " << pManager 123 << " ProcessManagerShadow : " << pM 124 for(G4int iv1=0;iv1<(G4int)pVector->size() 125 { 126 G4cout << " " << iv1 << " - " << (*pVec 127 << G4endl; 128 } 129 G4cout << "------------------------------- 130 << G4endl; 131 G4ProcessVector* pVectorShadow = pManagerS 132 133 for(G4int iv2=0;iv2<(G4int)pVectorShadow-> 134 { 135 G4cout << " " << iv2 << " - " << (*pVec 136 << G4endl; 137 } 138 } 139 #endif 140 for (G4int j = 0; j < (G4int)pVector->size() 141 { 142 //Andrea July 16th 2013 : migration to new 143 //Infer if we are in a worker thread or ma 144 //Master thread is the one in which the pr 145 // and process manager shadow pointers are 146 if (pManagerShadow == pManager) 147 { 148 (*pVector)[j]->BuildPhysicsTable(*molecu 149 } 150 else 151 { 152 (*pVector)[j]->BuildWorkerPhysicsTable(* 153 } 154 155 } 156 } 157