celeritas-project / celeritas

Celeritas is a new Monte Carlo transport code designed to accelerate scientific discovery in high energy physics by improving detector simulation throughput and energy efficiency using GPUs.
https://celeritas-project.github.io/celeritas/
Other
64 stars 35 forks source link

Implement value/xs interpolation ("physics tables") on GPU #3

Closed sethrj closed 3 years ago

sethrj commented 4 years ago

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:

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.

sethrj commented 4 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?"

whokion commented 4 years ago

Brief answers for above questions. May add more detailed descriptions later if necessary:

sethrj commented 4 years ago

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.

sethrj commented 3 years ago

Basic value grids were implemented in https://github.com/celeritas-project/celeritas/pull/128 .

sethrj commented 3 years ago

Completed in #142 .