Alsvinn  0.5.3
The fast FVM simulator with UQ support
RusanovMatrix.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>
28 public:
29 
30  __device__ __host__ RusanovMatrix(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 
43  // find max eigenvalue
44  real maxEigenValue = 0.0;
45 
46  for (size_t i = 0; i < eigenValues.size(); ++i) {
47  maxEigenValue = fmax(fabs(eigenValues[i]), maxEigenValue);
48  }
49 
50  // multiply with max eigenvalue.s
51  for (size_t i = 0; i < eigenValues.size(); ++i) {
52  out[i] = maxEigenValue * in[i];
53  }
54 
55  return out;
56  }
57 
58 private:
59  const Equation& equation;
60  typename Equation::ConservedVariables conservedVariables;
61 };
62 }
63 }
#define __host__
Definition: types.hpp:46
__device__ __host__ VectorType operator*(const VectorType &in)
Definition: RusanovMatrix.hpp:37
double real
Definition: types.hpp:65
__device__ __host__ RusanovMatrix(const Equation &equation, const typename Equation::ConservedVariables &conservedVariables)
Definition: RusanovMatrix.hpp:30
#define __device__
Definition: types.hpp:45
Definition: RusanovMatrix.hpp:27
Various utility functions to implement the tecno flux.
Definition: types.hpp:30