95 Parts... parts [[maybe_unused]])
97 static_assert(
sizeof...(Parts) > 0,
"No state vector part selected");
102 const auto &[U, Q, U_dynamic, Q_dynamic] = state_vector;
107 U.template copy_to_memory_space<MemorySpace>();
110 Q.template copy_to_memory_space<MemorySpace>();
113 for (
const auto &U_k : U_dynamic)
114 U_k.template copy_to_memory_space<MemorySpace>();
117 for (
const auto &Q_k : Q_dynamic)
118 Q_k.template copy_to_memory_space<MemorySpace>();
156 Parts... parts [[maybe_unused]])
158 static_assert(
sizeof...(Parts) > 0,
"No state vector part selected");
163 auto &[U, Q, U_dynamic, Q_dynamic] = state_vector;
168 U.template move_to_memory_space<MemorySpace>();
171 Q.template move_to_memory_space<MemorySpace>();
174 for (
auto &U_k : U_dynamic)
175 U_k.template move_to_memory_space<MemorySpace>();
178 for (
auto &Q_k : Q_dynamic)
179 Q_k.template move_to_memory_space<MemorySpace>();
221 copy_to_memory_space<MemorySpace>(
223 move_to_memory_space<MemorySpace>(
226 auto &[dst_U, dst_Q, dst_U_dynamic, dst_Q_dynamic] = dst;
227 const auto &[src_U, src_Q, src_U_dynamic, src_Q_dynamic] = src;
229 auto &dst_U_vector = dst_U.template deal_ii_vector<MemorySpace>();
230 dst_U_vector.zero_out_ghost_values();
231 dst_U_vector.sadd(s, b, src_U.template deal_ii_vector<MemorySpace>());
233 AssertDimension(dst_U_dynamic.size(), src_U_dynamic.size());
235 for (std::size_t k = 0; k < dst_U_dynamic.size(); ++k) {
236 auto &dst_k = dst_U_dynamic[k].template deal_ii_vector<MemorySpace>();
238 src_U_dynamic[k].template deal_ii_vector<MemorySpace>();
239 dst_k.zero_out_ghost_values();
240 dst_k.sadd(s, b, src_k);
263 move_to_memory_space<dealii::MemorySpace::Host>(
266 auto &[U, Q, U_dynamic, Q_dynamic] = state_vector;
268 constexpr auto nan = std::numeric_limits<Number>::signaling_NaN();
270 const unsigned int n_owned = offline_data.n_locally_owned();
271 const unsigned int n_relevant = offline_data.n_locally_relevant();
272 const auto &partitioner = offline_data.scalar_partitioner();
278 const unsigned int prob_dim = U.n_comp();
279 const unsigned int prec_dim = Q.n_comp();
280 Number *
const U_data = U.deal_ii_vector().begin();
281 Number *
const prec_data = Q.deal_ii_vector().begin();
283 for (
unsigned int i = 0; i < n_owned; ++i) {
284 std::fill_n(prec_data + i * prec_dim, prec_dim, nan);
286 if (!offline_data.affine_constraints().is_constrained(
287 partitioner->local_to_global(i)))
289 std::fill_n(U_data + i * prob_dim, prob_dim, nan);
292 for (
unsigned int i = n_owned; i < n_relevant; ++i) {
293 std::fill_n(prec_data + i * prec_dim, prec_dim, nan);
295 std::fill_n(U_data + i * prob_dim, prob_dim, nan);