Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/geometry/management/include/G4GeometryManager.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /geometry/management/include/G4GeometryManager.hh (Version 11.3.0) and /geometry/management/include/G4GeometryManager.hh (Version 11.0.p3,)


** Warning: Cannot open xref database.

  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 // G4GeometryManager                              
 27 //                                                
 28 // Class description:                             
 29 //                                                
 30 // A class responsible for high level geometri    
 31 // high level objects in the geometry subdomai    
 32 // The class is a `singleton', with access via    
 33 // G4GeometryManager::GetInstance().              
 34 //                                                
 35 // Member data:                                   
 36 //                                                
 37 //   - fgInstance                                 
 38 //     Ptr to the unique instance of class (pe    
 39                                                   
 40 // 26.07.95, P.Kent - Initial version, includi    
 41 // 12.06.24, J.Apostolakis - Added parallel op    
 42 // -------------------------------------------    
 43 #ifndef G4GEOMETRYMANAGER_HH                      
 44 #define G4GEOMETRYMANAGER_HH 1                    
 45                                                   
 46 #include <vector>                                 
 47                                                   
 48 #include "G4Types.hh"                             
 49 #include "G4SmartVoxelStat.hh"                    
 50 #include "G4ios.hh"                               
 51                                                   
 52 class G4VPhysicalVolume;                          
 53 class G4Timer;                                    
 54                                                   
 55 class G4GeometryManager                           
 56 {                                                 
 57   public:                                         
 58                                                   
 59     G4bool CloseGeometry(G4bool pOptimise = tr    
 60                          G4VPhysicalVolume* vo    
 61       // Close (`lock') the geometry: perform     
 62       // and optionally [default=yes] build op    
 63       // Applies to just a specific subtree if    
 64                                                   
 65     void OpenGeometry(G4VPhysicalVolume* vol =    
 66       // Open (`unlock') the geometry and remo    
 67       // present. Applies to just a specific s    
 68       // specified.                               
 69                                                   
 70     inline G4bool IsGeometryClosed() { return     
 71       // Return true/false according to state     
 72                                                   
 73     void SetWorldMaximumExtent(G4double worldE    
 74       // Set the maximum extent of the world v    
 75       // allowed only if NO solids have been c    
 76                                                   
 77     static G4GeometryManager* GetInstance();      
 78       // Return ptr to singleton instance of t    
 79       // not existing.                            
 80                                                   
 81     static G4GeometryManager* GetInstanceIfExi    
 82       // Return ptr to singleton instance.        
 83                                                   
 84     void OptimiseInParallel(G4bool val = true)    
 85       // Request optimisation using threads (i    
 86                                                   
 87     void UndertakeOptimisation();                 
 88       // Method that contributes to (Voxel) op    
 89       // Must be called by Worker thread initi    
 90       // method.                                  
 91                                                   
 92     void RequestParallelOptimisation(G4bool va    
 93                                      G4bool ve    
 94       // Detailed method for user to request p    
 95       // (if verbosity is required). Calling t    
 96       // It will be used if Geant4 is built wi    
 97                                                   
 98     void ChooseSequentialOptimisation(G4bool v    
 99       // Simple way to avoid parallel optimisa    
100                                                   
101     G4bool IsParallelOptimisationConfigured();    
102       // Check whether parallel optimisation w    
103     G4bool IsParallelOptimisationFinished();      
104       // Report whether parallel optimisation     
105                                                   
106     ~G4GeometryManager();                         
107       // Destructor; called by G4RunManagerKer    
108                                                   
109   private:                                        
110                                                   
111     G4GeometryManager() = default;                
112       // Private constructor. Set the geometry    
113                                                   
114     G4bool BuildOptimisations(G4bool allOpt, G    
115        // Optimise all or just multi-volumes (    
116     void BuildOptimisations(G4bool allOpt, G4V    
117        // Optimise one volume or subtree only.    
118     void DeleteOptimisations();                   
119     void DeleteOptimisations(G4VPhysicalVolume    
120                                                   
121     void ReportVoxelStats( std::vector<G4Smart    
122                            G4double totalCpuTi    
123                            std::ostream &os =     
124     void ReportVoxelInfo(G4LogicalVolume * log    
125                                                   
126     void PrepareParallelOptimisation(G4bool al    
127     void BuildOptimisationsSequential(G4bool a    
128                                                   
129     // Methods for parallel initialization        
130     void CreateListOfVolumesToOptimise(G4bool     
131       // Build vector of relevant volumes.        
132     G4LogicalVolume* ObtainVolumeToOptimise();    
133                                                   
134     void ConfigureParallelOptimisation(G4bool     
135       // Prepare for parallel optimisation.       
136                                                   
137     G4int ReportWorkerIsDoneOptimising(unsigne    
138       // Thread-safe method for worker to repo    
139       // It counts the number of workers that     
140       // It counts the number of volumes optim    
141       // reported, it results in a 'Finished'     
142                                                   
143     void InformOptimisationIsFinished(G4bool v    
144       // Returns true if all workers are finis    
145                                                   
146     void ResetListOfVolumesToOptimise();          
147       // Resets (empties) the list of candidat    
148       // Must be called when Optimisation is f    
149                                                   
150     G4int CheckOptimisation();                    
151       // Check volumes marked to optimised are    
152       // that are missing voxel header.           
153                                                   
154     void WaitForVoxelisationFinish(G4bool verb    
155       // Wait until the voxelisation is all do    
156                                                   
157   private:                                        
158                                                   
159     static G4ThreadLocal G4GeometryManager* fg    
160     G4bool fIsClosed = false;                     
161                                                   
162     static std::vector<G4LogicalVolume*> fVolu    
163       // The list of volumes which threads nee    
164     static std::vector<G4LogicalVolume*>::cons    
165       // Iterator used by UndertakeOptimisatio    
166                                                   
167     static std::vector<G4SmartVoxelStat> fGlob    
168       // Statistics container shared by all wo    
169                                                   
170     // Flags for parallel initialization          
171     // ---------------------------------          
172     static G4bool fVerboseParallel;               
173     static G4bool fParallelVoxelOptimisationRe    
174       // Flag to register it was requested.       
175     static G4bool fOptimiseInParallelConfigure    
176       // Not just requested, but adopted (i.e.    
177     static G4bool fParallelVoxelOptimisationUn    
178     static G4bool fParallelVoxelOptimisationFi    
179     static G4bool fUsingExistingWorkers; // Ca    
180                                                   
181     // Statistics for parallel Optimisation -     
182     // ------------------------------------       
183     static G4double fSumVoxelTime;                
184     static G4int fNumberThreadsReporting;         
185     static unsigned int fTotalNumberVolumesOpt    
186       // Counters.                                
187                                                   
188     // For Wall Clock time in parallel mode ..    
189     //                                            
190     static G4Timer* fWallClockTimer;   // Owne    
191     static G4bool fWallClockStarted;              
192 };                                                
193                                                   
194 #endif                                            
195