Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-22 10:31:19

0001 //----------------------------------*-C++-*----------------------------------//
0002 // Copyright 2020-2024 UT-Battelle, LLC, and other Celeritas developers.
0003 // See the top-level COPYRIGHT file for details.
0004 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0005 //---------------------------------------------------------------------------//
0006 //! \file celeritas/em/params/AtomicRelaxationParams.hh
0007 //---------------------------------------------------------------------------//
0008 #pragma once
0009 
0010 #include <functional>
0011 #include <memory>
0012 
0013 #include "corecel/Types.hh"
0014 #include "corecel/data/CollectionMirror.hh"
0015 #include "corecel/data/ParamsDataInterface.hh"
0016 #include "celeritas/Quantities.hh"
0017 #include "celeritas/em/data/AtomicRelaxationData.hh"
0018 #include "celeritas/io/ImportAtomicRelaxation.hh"
0019 #include "celeritas/phys/AtomicNumber.hh"
0020 
0021 namespace celeritas
0022 {
0023 class CutoffParams;
0024 class MaterialParams;
0025 class ParticleParams;
0026 
0027 //---------------------------------------------------------------------------//
0028 /*!
0029  * Data management for the EADL transition data for atomic relaxation.
0030  */
0031 class AtomicRelaxationParams final
0032     : public ParamsDataInterface<AtomicRelaxParamsData>
0033 {
0034   public:
0035     //@{
0036     //! Type aliases
0037     using MevEnergy = units::MevEnergy;
0038     using ReadData = std::function<ImportAtomicRelaxation(AtomicNumber)>;
0039     using SPConstCutoffs = std::shared_ptr<CutoffParams const>;
0040     using SPConstMaterials = std::shared_ptr<MaterialParams const>;
0041     using SPConstParticles = std::shared_ptr<ParticleParams const>;
0042     //@}
0043 
0044     struct Input
0045     {
0046         SPConstCutoffs cutoffs;
0047         SPConstMaterials materials;
0048         SPConstParticles particles;
0049         ReadData load_data;
0050         bool is_auger_enabled{false};  //!< Whether to produce Auger electrons
0051     };
0052 
0053   public:
0054     // Construct with a vector of element identifiers
0055     explicit AtomicRelaxationParams(Input const& inp);
0056 
0057     //! Access EADL data on the host
0058     HostRef const& host_ref() const final { return data_.host_ref(); }
0059 
0060     //! Access EADL data on the device
0061     DeviceRef const& device_ref() const final { return data_.device_ref(); }
0062 
0063   private:
0064     // Whether to simulate non-radiative transitions
0065     bool is_auger_enabled_;
0066 
0067     // Host/device storage and reference
0068     CollectionMirror<AtomicRelaxParamsData> data_;
0069 
0070     // HELPER FUNCTIONS
0071     using HostData = HostVal<AtomicRelaxParamsData>;
0072     void append_element(ImportAtomicRelaxation const& inp,
0073                         HostData* data,
0074                         MevEnergy electron_cutoff,
0075                         MevEnergy gamma_cutoff);
0076 };
0077 
0078 //---------------------------------------------------------------------------//
0079 }  // namespace celeritas