ryujin 2.1.1 revision ee5cbcbf2346c1299c942d0e1f13b46449973c18
Loading...
Searching...
No Matches
state_vector.h
Go to the documentation of this file.
1//
2// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
3// Copyright (C) 2024 - 2026 by the ryujin authors
4//
5
6#pragma once
7
8#include <compile_time_options.h>
9
11
12#include <deal.II/lac/la_parallel_block_vector.h>
13
14namespace ryujin
15{
16#ifndef DOXYGEN
17 /* Forward declaration */
18 template <int dim, typename Number>
19 class OfflineData;
20#endif
21
27 namespace Vectors
28 {
34 template <typename Number>
35 using ScalarHostVector = dealii::LinearAlgebra::distributed::Vector<Number>;
36
37
43 template <typename Number>
45 dealii::LinearAlgebra::distributed::BlockVector<Number>;
46
47
51 template <typename Number>
53
54
63 template <typename Number, unsigned int problem_dim, unsigned int prec_dim>
64 using StateVector = std::tuple<
66 MultiComponentVector<Number, prec_dim> /*precomputed values*/,
67 BlockHostVector<Number> /*parabolic state vector*/>;
68
69
78 template <typename Number, int prob_dim, int prec_dim, typename OfflineData>
80 StateVector<Number, prob_dim, prec_dim> &state_vector [[maybe_unused]],
81 const OfflineData &offline_data [[maybe_unused]])
82 {
83#ifdef DEBUG
84
85 auto &[U, prec, V] = state_vector;
86
87 /* Ensure that the state vector is resident on the host memory space. */
88 if constexpr (have_separate_memory_spaces) {
89 U.template move_to_memory_space<dealii::MemorySpace::Host>();
90 prec.template move_to_memory_space<dealii::MemorySpace::Host>();
91 }
92
93 constexpr auto nan = std::numeric_limits<Number>::signaling_NaN();
94
95 const unsigned int n_owned = offline_data.n_locally_owned();
96 const unsigned int n_relevant = offline_data.n_locally_relevant();
97 const auto &partitioner = offline_data.scalar_partitioner();
98
99 const auto U_view = U.view();
100 const auto prec_view = prec.view();
101
102 for (unsigned int i = 0; i < n_owned; ++i) {
103 prec_view.write_tensor(dealii::Tensor<1, prec_dim, Number>() * nan, i);
104
105 if (!offline_data.affine_constraints().is_constrained(
106 partitioner->local_to_global(i)))
107 continue;
108 U_view.write_tensor(dealii::Tensor<1, prob_dim, Number>() * nan, i);
109 }
110
111 for (unsigned int i = n_owned; i < n_relevant; ++i) {
112 prec_view.write_tensor(dealii::Tensor<1, prec_dim, Number>() * nan, i);
113
114 U_view.write_tensor(dealii::Tensor<1, prob_dim, Number>() * nan, i);
115 }
116#endif
117 }
118
119 } // namespace Vectors
120} // namespace ryujin
constexpr bool have_separate_memory_spaces
Definition gpu.h:29
void debug_poison_invalid_values(StateVector< Number, prob_dim, prec_dim > &state_vector, const OfflineData &offline_data)
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, BlockHostVector< Number > > StateVector
dealii::LinearAlgebra::distributed::BlockVector< Number > BlockHostVector
dealii::LinearAlgebra::distributed::Vector< Number > ScalarHostVector