Alsvinn  0.5.3
The fast FVM simulator with UQ support
RoeMatrix.hpp
Go to the documentation of this file.
1 /* Copyright (c) 2018 ETH Zurich, Kjetil Olsen Lye
2  * This program is free software: you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program. If not, see <http://www.gnu.org/licenses/>.
14  */
15 
16 #pragma once
17 #include "alsfvm/types.hpp"
18 
19 namespace alsfvm {
20 namespace diffusion {
21 
26 template<class Equation, int direction>
27 class RoeMatrix {
28 public:
29 
30  __device__ __host__ RoeMatrix (const Equation& equation,
31  const typename Equation::ConservedVariables& conservedVariables)
32  : equation(equation), conservedVariables(conservedVariables) {
33  // empty
34  }
35 
36  template<typename VectorType>
37  __device__ __host__ VectorType operator*(const VectorType& in) {
38  VectorType out;
39  auto eigenValues = equation.template computeEigenValues<direction>
40  (conservedVariables);
41 
42  for (size_t i = 0; i < eigenValues.size(); ++i) {
43  out[i] = fabs(eigenValues[i]) * in[i];
44  }
45 
46  return out;
47  }
48 
49 private:
50  const Equation& equation;
51  typename Equation::ConservedVariables conservedVariables;
52 };
53 }
54 }
#define __host__
Definition: types.hpp:46
__device__ __host__ RoeMatrix(const Equation &equation, const typename Equation::ConservedVariables &conservedVariables)
Definition: RoeMatrix.hpp:30
#define __device__
Definition: types.hpp:45
__device__ __host__ VectorType operator*(const VectorType &in)
Definition: RoeMatrix.hpp:37
Definition: RoeMatrix.hpp:27
Various utility functions to implement the tecno flux.
Definition: types.hpp:30