Closed sethrj closed 3 years ago
@whokion I think a reasonable target for one of the core GPU kernels in celeritas is one that simply performs cross section and energy loss lookups, once per step (or less). Do you agree? If so, can you help determine requirements:
You might be able to work with @stognini and his geant exporter to determine bounds on the practical answers to these questions. By practical, I mean "what does Geant4 for HEP detector simulations actually do?" vs "what does Geant4 support?"
Brief answers for above questions. May add more detailed descriptions later if necessary:
Excellent, thanks for the detailed responses @whokion. I didn't realize the hadronic processes used a totally different class for their lookups: that sounds like another can of worms.
Basic value grids were implemented in https://github.com/celeritas-project/celeritas/pull/128 .
Completed in #142 .
The physics tables contain energy-dependent, initialization-time physics data in Geant used during the event loop. It includes properties such as mean free paths (inverse of macroscopic cross section, used for sampling distance-to-interaction for "discrete" processes), energy deposition rates (dE/dx, for "continuous" processes), etc.
The dimensions on the data are ragged:
\lambda
$, microscopic cross section $\sigma
$, energy loss $dE/dx
$)If a spline interpolation option is given (on a per-model basis), geant4 calculates and caches derivatives (but geantv calculates them on-the-fly) from the adjacent points.
The stored data in geant have different acceleration methods to speed lookup:
I'd like to implement the "physics vector" with the more generic "value grid" since none of the methods are specific to physics; it's just about grid lookup and value interpolation.
This should be similar to some of the stuff we've done in shift (physica/sce_cuda/xs_calculator) as well as geant4/geantv.