53 auto pos = sycl::vec<Tscal, 3>{r * sycl::cos(theta), r * sycl::sin(theta), z};
79 using namespace shamrock::patch;
82 std::vector<DiscOutput> pos_data;
85 if (!generator.is_done()) {
86 u64 loc_gen_count = nmax;
87 pos_data = generator.next_n(loc_gen_count);
91 std::vector<Tvec> vec_pos;
92 std::vector<Tscal> vec_rho;
94 vec_pos.reserve(pos_data.size());
95 vec_rho.reserve(pos_data.size());
97 for (DiscOutput o : pos_data) {
98 vec_pos.push_back(o.pos);
99 vec_rho.push_back(o.rho);
103 std::vector<Tscal> vec_h;
104 vec_h.reserve(pos_data.size());
105 for (Tscal rho : vec_rho) {
106 vec_h.push_back(shamrock::sph::h_rho(pmass, rho, Kernel::hfactd) * init_h_factor);
110 std::vector<Tvec> vec_vel;
111 vec_vel.reserve(pos_data.size());
112 for (
size_t i = 0; i < vec_pos.size(); i++) {
113 Tvec vel = vel_profile(vec_pos[i]);
114 vec_vel.push_back(vel);
118 bool need_cs = solver_config.is_eos_locally_isothermal();
120 std::vector<Tscal> vec_cs;
124 "With this EOS you need to provide a cs_profile");
126 vec_cs.reserve(pos_data.size());
127 for (
size_t i = 0; i < vec_pos.size(); i++) {
128 Tscal cs = cs_profile(vec_pos[i]);
129 vec_cs.push_back(cs);
135 if (!pos_data.empty()) {
136 tmp.resize(pos_data.size());
140 u32 len = pos_data.size();
142 = tmp.get_field<Tvec>(sched.pdl_old().get_field_idx<Tvec>(
"xyz"));
143 sycl::buffer<Tvec> buf(vec_pos.data(), len);
144 f.override(buf, len);
148 u32 len = pos_data.size();
150 = tmp.get_field<Tvec>(sched.pdl_old().get_field_idx<Tvec>(
"vxyz"));
151 sycl::buffer<Tvec> buf(vec_vel.data(), len);
152 f.override(buf, len);
155 u32 len = vec_pos.size();
157 = tmp.get_field<Tscal>(sched.pdl_old().get_field_idx<Tscal>(
"hpart"));
158 sycl::buffer<Tscal> buf(vec_h.data(), len);
159 f.override(buf, len);
163 u32 len = vec_pos.size();
165 = tmp.get_field<Tscal>(sched.pdl_old().get_field_idx<Tscal>(
"soundspeed"));
166 sycl::buffer<Tscal> buf(vec_cs.data(), len);
167 f.override(buf, len);
T & get_check_ref(const std::unique_ptr< T > &ptr, SourceLocation loc=SourceLocation())
Takes a std::unique_ptr and returns a reference to the object it holds. It throws a std::runtime_erro...