30 using Tscal = shambase::VecComponent<Tvec>;
31 static constexpr u32 dim = shambase::VectorProperties<Tvec>::dimension;
32 using Kernel = SPHKernel<Tscal>;
37 Config &solver_config;
40 sycl::vec<Tscal, 3> pos;
50 std::function<Tvec(Tvec)> vel_profile;
51 std::function<Tscal(Tvec)> cs_profile;
58 std::function<Tscal(Tscal)> sigma_profile,
59 std::function<Tscal(Tscal)> H_profile,
60 std::mt19937_64 eng) {
61 return DiscIterator(part_mass, disc_mass, r_in, r_out, sigma_profile, H_profile, eng);
67 Config &solver_config,
72 std::function<Tscal(Tscal)> sigma_profile,
73 std::function<Tscal(Tscal)> H_profile,
74 std::function<Tvec(Tvec)> vel_profile,
75 std::function<Tscal(Tvec)> cs_profile,
78 : context(context), solver_config(solver_config),
80 make_generator(part_mass, disc_mass, r_in, r_out, sigma_profile, H_profile, eng)),
81 init_h_factor(init_h_factor), pmass(part_mass), vel_profile(vel_profile),
82 cs_profile(cs_profile) {}
88 std::string
get_name() {
return "GeneratorMCDisc"; }
98 u64 current_index = 0;
106 std::function<Tscal(Tscal)> sigma_profile;
107 std::function<Tscal(Tscal)> H_profile;
111 static constexpr Tscal _2pi = 2 * shambase::constants::pi<Tscal>;
113 Tscal f_func(Tscal r) {
return r * sigma_profile(r); }
115 DiscOutput next(
u64 seed);
123 std::function<Tscal(Tscal)> sigma_profile,
124 std::function<Tscal(Tscal)> H_profile,
134 disc_mass / part_mass) {}
141 std::function<Tscal(Tscal)> sigma_profile,
142 std::function<Tscal(Tscal)> H_profile,
145 : part_mass(part_mass), disc_mass(disc_mass), Npart(Npart), r_in(r_in), r_out(r_out),
146 sigma_profile(sigma_profile), H_profile(H_profile), generator(eng, Npart),
164 return generator.is_done();
167 inline std::vector<DiscOutput>
next_n(
u64 nmax) {
168 std::vector<u64> seeds = generator.next_n(nmax);
169 std::vector<DiscOutput> ret{};
170 for (
u64 seed : seeds) {
171 ret.push_back(next(seed));