File indexing completed on 2025-12-16 10:11:41
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <functional>
0010
0011 #include "corecel/data/CollectionMirror.hh"
0012 #include "celeritas/Quantities.hh"
0013 #include "celeritas/inp/Grid.hh"
0014 #include "celeritas/mat/IsotopeView.hh"
0015 #include "celeritas/mat/MaterialView.hh"
0016 #include "celeritas/neutron/data/NeutronElasticData.hh"
0017 #include "celeritas/phys/AtomicNumber.hh"
0018 #include "celeritas/phys/Model.hh"
0019
0020 namespace celeritas
0021 {
0022 class MaterialParams;
0023 class ParticleParams;
0024
0025
0026
0027
0028
0029 class ChipsNeutronElasticModel final : public Model, public StaticConcreteAction
0030 {
0031 public:
0032
0033 using AtomicMassNumber = IsotopeView::AtomicMassNumber;
0034 using MevEnergy = units::MevEnergy;
0035 using ReadData = std::function<inp::Grid(AtomicNumber)>;
0036 using HostRef = NeutronElasticHostRef;
0037 using DeviceRef = NeutronElasticDeviceRef;
0038
0039
0040 public:
0041
0042 ChipsNeutronElasticModel(ActionId id,
0043 ParticleParams const& particles,
0044 MaterialParams const& materials,
0045 ReadData load_data);
0046
0047
0048 SetApplicability applicability() const final;
0049
0050
0051 MicroXsBuilders micro_xs(Applicability) const final;
0052
0053
0054 void step(CoreParams const&, CoreStateHost&) const final;
0055
0056
0057 void step(CoreParams const&, CoreStateDevice&) const final;
0058
0059
0060
0061 HostRef const& host_ref() const { return mirror_.host_ref(); }
0062 DeviceRef const& device_ref() const { return mirror_.device_ref(); }
0063
0064
0065 private:
0066
0067
0068
0069 CollectionMirror<NeutronElasticData> mirror_;
0070
0071
0072
0073 using HostXsData = HostVal<NeutronElasticData>;
0074
0075
0076 void append_coeffs(AtomicMassNumber A, HostXsData* xs_data) const;
0077 };
0078
0079
0080 }