ryujin 2.1.1 revision 71cdc42292164f8095c0bd62c4ea75ebcfac58fa
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 <tuple>
13#include <vector>
14
15namespace ryujin
16{
17#ifndef DOXYGEN
18 /* Forward declaration */
19 template <int dim, typename Number>
20 class OfflineData;
21#endif
22
28 namespace Vectors
29 {
35 template <typename Number>
36 using ScalarHostVector = dealii::LinearAlgebra::distributed::Vector<Number>;
37
38
42 template <typename Number>
44
45
54 template <typename Number, unsigned int problem_dim, unsigned int prec_dim>
55 using StateVector = std::tuple<
57 MultiComponentVector<Number, prec_dim> /*precomputed values*/,
58 std::vector<ScalarVector<Number>> /*parabolic state*/>;
59
60
69 template <typename Number, int prob_dim, int prec_dim, typename OfflineData>
71 StateVector<Number, prob_dim, prec_dim> &state_vector [[maybe_unused]],
72 const OfflineData &offline_data [[maybe_unused]])
73 {
74#ifdef DEBUG
75
76 auto &[U, prec, V] = state_vector;
77
78 /* Ensure that the state vector is resident on the host memory space. */
79 if constexpr (have_separate_memory_spaces) {
80 U.template move_to_memory_space<dealii::MemorySpace::Host>();
81 prec.template move_to_memory_space<dealii::MemorySpace::Host>();
82 }
83
84 constexpr auto nan = std::numeric_limits<Number>::signaling_NaN();
85
86 const unsigned int n_owned = offline_data.n_locally_owned();
87 const unsigned int n_relevant = offline_data.n_locally_relevant();
88 const auto &partitioner = offline_data.scalar_partitioner();
89
90 const auto U_view = U.view();
91 const auto prec_view = prec.view();
92
93 for (unsigned int i = 0; i < n_owned; ++i) {
94 prec_view.write_tensor(dealii::Tensor<1, prec_dim, Number>() * nan, i);
95
96 if (!offline_data.affine_constraints().is_constrained(
97 partitioner->local_to_global(i)))
98 continue;
99 U_view.write_tensor(dealii::Tensor<1, prob_dim, Number>() * nan, i);
100 }
101
102 for (unsigned int i = n_owned; i < n_relevant; ++i) {
103 prec_view.write_tensor(dealii::Tensor<1, prec_dim, Number>() * nan, i);
104
105 U_view.write_tensor(dealii::Tensor<1, prob_dim, Number>() * nan, i);
106 }
107#endif
108 }
109
110 } // namespace Vectors
111} // 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)
dealii::LinearAlgebra::distributed::Vector< Number > ScalarHostVector
std::tuple< MultiComponentVector< Number, problem_dim >, MultiComponentVector< Number, prec_dim >, std::vector< ScalarVector< Number > > > StateVector