9#include "../Functors.h"
14#include "../CellIntegral.h"
15#include "../Riemann.h"
23#if defined(GPUOffloadingOMP)
30 namespace laxfriedrichs {
112 int auxiliaryVariables,
114 const double* __restrict__ quadraturePoints,
117 const double* __restrict__ projectedValues,
118 double* __restrict__ solution
131 const int auxiliaryVariables,
136 const double* __restrict__ QuadratureNodes1d,
137 const double* __restrict__ MassMatrixDiagonal1d,
138 const double* __restrict__ StiffnessMatrix1d,
139 const double* __restrict__ DerivativeOperator1d,
141 bool evaluateNonconservativeProduct,
143 bool evaluatePointSources
147 order, unknowns, auxiliaryVariables,
148 flux, nonConservativeProduct, source, pointSources,
150 MassMatrixDiagonal1d,
152 DerivativeOperator1d,
153 evaluateFlux, evaluateNonconservativeProduct, evaluateSource, evaluatePointSources
167 const int auxiliaryVariables,
168 const double* __restrict__ MassMatrixDiagonal1d
172 order, unknowns, auxiliaryVariables, MassMatrixDiagonal1d
183 const double*
const __restrict__ faceQLeft,
184 const double*
const __restrict__ faceQRight,
185 const double*
const __restrict__ faceQBottom,
186 const double*
const __restrict__ faceQUp,
189 const int auxiliaryVariables,
191 const double*
const __restrict__ BasisFunctionValuesLeft,
192 const double* __restrict__ MassMatrixDiagonal1d,
193 double* __restrict__ cellQ
196 faceQLeft, faceQRight, faceQBottom, faceQUp,
197 order, unknowns, auxiliaryVariables,
199 BasisFunctionValuesLeft,
200 MassMatrixDiagonal1d,
212 const double*
const __restrict__ faceQLeft,
213 const double*
const __restrict__ faceQRight,
214 const double*
const __restrict__ faceQBottom,
215 const double*
const __restrict__ faceQUp,
216 const double*
const __restrict__ faceQFront,
217 const double*
const __restrict__ faceQBack,
220 const int auxiliaryVariables,
222 const double*
const __restrict__ BasisFunctionValuesLeft,
223 const double* __restrict__ MassMatrixDiagonal1d,
224 double* __restrict__ cellQ
227 faceQLeft, faceQRight, faceQBottom, faceQUp, faceQFront, faceQBack,
228 order, unknowns, auxiliaryVariables,
230 BasisFunctionValuesLeft,
231 MassMatrixDiagonal1d,
241 int auxiliaryVariables
246 bool evaluateNonconservativeProduct,
248 bool evaluatePointSources
250 ::exahype2::dg::cellIntegral_patchwise_in_situ_GaussLegendre<Solver,order,unknowns,auxiliaryVariables>(
253 evaluateNonconservativeProduct,
static void cellIntegral_patchwise_in_situ_GaussLegendre_functors(::exahype2::CellData< double, double > &cellData, const int order, const int unknowns, const int auxiliaryVariables, Flux flux, NonConservativeProduct nonConservativeProduct, Source source, PointSources pointSources, const double *__restrict__ QuadratureNodes1d, const double *__restrict__ MassMatrixDiagonal1d, const double *__restrict__ StiffnessMatrix1d, const double *__restrict__ DerivativeOperator1d, bool evaluateFlux, bool evaluateNonconservativeProduct, bool evaluateSource, bool evaluatePointSources)
Delegate to generic implementation in parent directory.
void cellIntegral_patchwise_in_situ_GaussLegendre(::exahype2::CellData< double, double > &cellData, bool evaluateFlux, bool evaluateNonconservativeProduct, bool evaluateSource, bool evaluatePointSources)
static void multiplyWithInvertedMassMatrix_GaussLegendre(::exahype2::CellData< double, double > &cellData, const int order, const int unknowns, const int auxiliaryVariables, const double *__restrict__ MassMatrixDiagonal1d)
Delegate to generic implementation.
static void integrateOverRiemannSolutionsAndAddToVolume_GaussLegendre(const double *const __restrict__ faceQLeft, const double *const __restrict__ faceQRight, const double *const __restrict__ faceQBottom, const double *const __restrict__ faceQUp, int order, int unknowns, const int auxiliaryVariables, const tarch::la::Vector< 2, double > &cellSize, const double *const __restrict__ BasisFunctionValuesLeft, const double *__restrict__ MassMatrixDiagonal1d, double *__restrict__ cellQ)
Delegate to generic implementation.
void solveRiemannProblem_pointwise_in_situ(::exahype2::dg::Flux flux, ::exahype2::dg::NonConservativeProduct ncp, const tarch::la::Vector< Dimensions, double > &faceCentre, const tarch::la::Vector< Dimensions, double > &cellSize, double t, double dt, int order, int unknowns, int auxiliaryVariables, int faceNumber, const double *__restrict__ quadraturePoints, bool useFlux, bool useNcp, const double *__restrict__ projectedValues, double *__restrict__ solution)
Solve Riemann problem on face.
void multiplyWithInvertedMassMatrix_GaussLegendre(::exahype2::CellData< double, double > &cellData, const int order, const int unknowns, const int auxiliaryVariables, const double *__restrict__ MassMatrixDiagonal1d)
Final step of DG algorithm.
std::function< std::vector< PointSource >(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &cellCentre, const tarch::la::Vector< Dimensions, double > &h, double t, double dt) > PointSources
This is the only routine within the DG framework which accepts the dimensions of the underlying cell ...
std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, double t, double dt, double *__restrict__ S) > Source
Source functor.
void cellIntegral_patchwise_in_situ_GaussLegendre_functors(::exahype2::CellData< double, double > &cellData, const int order, const int unknowns, const int auxiliaryVariables, Flux flux, NonConservativeProduct nonconservativeProduct, Source source, PointSources pointSources, const double *__restrict__ QuadratureNodes1d, const double *__restrict__ MassMatrixDiagonal1d, const double *__restrict__ StiffnessMatrix1d, const double *__restrict__ DerivativeOperator1d, bool evaluateFlux, bool evaluateNonconservativeProduct, bool evaluateSource, bool evaluatePointSources)
std::function< void(const double *__restrict__ Q, const tarch::la::Vector< Dimensions, double > &x, double t, double dt, int normal, double *__restrict__ F) > Flux
Flux functor.
std::function< void(const double *__restrict__ Q, const double *__restrict__ dQdx, const tarch::la::Vector< Dimensions, double > &x, double t, double dt, int normal, double *__restrict__ F) > NonConservativeProduct
void integrateOverRiemannSolutionsAndAddToVolume_GaussLegendre(const double *const __restrict__ faceQLeft, const double *const __restrict__ faceQRight, const double *const __restrict__ faceQBottom, const double *const __restrict__ faceQUp, int order, int unknowns, const int auxiliaryVariables, const tarch::la::Vector< 2, double > &cellSize, const double *const __restrict__ BasisFunctionValuesLeft, const double *__restrict__ MassMatrixDiagonal1d, double *__restrict__ cellQ)
Given a numerical flux at the various faces, this computes and adds the Riemann integral of this flux...
This file is part of the ExaHyPE 2 project within Peano 4.
Representation of a number of cells which contains all information that's required to process the sto...