13#include "include/Sfx_StateVector.h"
14#include "include/Sfx_StateVariables.h"
15#include "include/Sfx_DefineTypes.h"
27 template<
typename FuncLimiter>
28 std::pair<std::valarray<float64>, std::valarray<float64>>
30 const std::valarray<float64>& aU2, FuncLimiter&& aFuncLimtr)
33 assert(std::size(aU1) == Sfx::EMCNEILNbSections::value);
34 assert(std::size(aU2) == Sfx::EMCNEILNbSections::value);
41 std::valarray<float64> dU1(size(aU1));
42 std::valarray<float64> dU2(size(aU2));
45 std::adjacent_difference(std::ranges::begin(aU1), std::ranges::end(aU1),
46 std::ranges::begin(dU1));
48 std::adjacent_difference(std::ranges::begin(aU2), std::ranges::end(aU2),
49 std::ranges::begin(dU2));
55 std::adjacent_difference(std::ranges::begin(dU1), std::ranges::end(dU1),
56 std::ranges::begin(dU1),
59 std::adjacent_difference(std::ranges::begin(dU2), std::ranges::end(dU2),
60 std::ranges::begin(dU2),
63 auto w_dU1Shifted = dU1.shift(1);
64 auto w_dU2Shifted = dU2.shift(1);
67 w_dU1Shifted[aU1.size() - 1] = aFuncLimtr(0., aU1[aU1.size() - 1] - aU1[aU1.size() - 2]);
68 w_dU2Shifted[aU2.size() - 1] = aFuncLimtr(0., aU2[aU2.size() - 1] - aU2[aU2.size() - 2]);
71 dU1 = std::move(w_dU1Shifted);
72 dU2 = std::move(w_dU2Shifted);
86 typename = std::enable_if<std::is_same_v<NumArrayType, std::valarray<double>>>>
91 auto [dU1, dU2] =
computeDU12(aU1, aU2, std::forward<F>(aSlopeLimiter));
93 const NumArrayType w_dU1(std::ranges::begin(dU1), std::ranges::size(w_dU1));
94 const NumArrayType w_dU2(std::ranges::begin(dU2), std::ranges::size(w_dU2));
108 const NumArrayType UL1{ std::begin(aU1 + 0.5 * w_dU1), Sfx::DIM::value };
109 const NumArrayType UL2{ std::begin(aU2 + 0.5 * w_dU2), Sfx::DIM::value };
110 const NumArrayType UR1{ std::next(std::begin(aU1 - 0.5 * dU1)), Sfx::DIM::value };
111 const NumArrayType UR2{ std::next(std::begin(aU2 - 0.5 * dU2)), Sfx::DIM::value };
114 return std::make_tuple(UL1, UL2, UR1, UR2);
127 template<
typename T,
typename CONT,
128 typename std::enable_if_t<!std::is_lvalue_reference<T>::value>>
139 std::map<
short, std::pair<Sfx::StateVector, Sfx::StateVector>>;
148 for(
auto&&
cellFace : aListCellFaces)
155 Sfx::StateVector{ static_cast<float64>(Sfx::StateVariables{ aA[w_leftIdxNode] + 0.5 * w_dA[w_leftIdxNode]}),
156 static_cast<float64>(Sfx::StateVariables{ aQ[w_leftIdxNode] + 0.5 * w_dQ[w_leftIdxNode] }) },
157 Sfx::StateVector{
static_cast<float64>(Sfx::StateVariables{ aA[w_rightIdxNode] - 0.5 * w_dA[w_rightIdxNode]}),
158 static_cast<float64>(Sfx::StateVariables{ aQ[w_rightIdxNode] - 0.5 * w_dQ[w_rightIdxNode]}) }
179 template<
typename... Args>
180 auto MUSCLReconstrFwd(Args&&... args)
184 return MUSCLReconstr(std::forward<Args>(args)...);
187 template<
typename Range>
188 auto MUSCLReconstr(Range&& aRng1, Range&& aRng2)
191 template<
typename Range>
192 auto MUSCLReconstr(Range& aRng1, Range& aRng2)
195 template<
typename Range>
196 auto MUSCLReconstr(
const Range& aRng1,
const Range& aRng2)
199 template<
typename Range>
200 auto MUSCLReconstr(
const Range& aRng1,
const Range& aRng2, Range& aU1LR, Range& aU2LR)
std::valarray< float64 > NumArrayType
Definition SimulationConfig.h:24
std::map< short, std::pair< Sfx::StateVector, Sfx::StateVector > > mapcellfaceVar
Definition SimulationConfig.h:42
Minmod limiter function for slope limiting gradient evaluation.
Definition dbpp_SimulationUtilities.hpp:89
Cell face in the finite volume discretization Usage: caculFF(const cellFace& aFace) compute the numer...
Definition dbpp_CellFace.h:29
constexpr signed short getRightNodeI() const noexcept
right node neighbour
Definition dbpp_CellFace.h:63
constexpr short getLeftNodeI() const noexcept
left node neighbour
Definition dbpp_CellFace.h:58
constexpr signed short getGblFaceI() const noexcept
global face
Definition dbpp_CellFace.h:68
Definition DamBreakProb.h:15
double float64
Definition dbpp_LDeltaOperator.h:12
auto MUSCLReconstruction(const NumArrayType &aU1, const NumArrayType &aU2, F &&aSlopeLimiter)
MUSCL reconstruction procedure of state variables at cell face.
Definition dbpp_Reconstruction.hpp:87
decltype(auto) MUSCLReconstrv(T &&aA, T &&aQ, CONT aListCellFaces)
Variables extrapolation according to MUSCL algorithm.
Definition dbpp_Reconstruction.hpp:129
std::pair< std::valarray< float64 >, std::valarray< float64 > > computeDU12(const std::valarray< float64 > &aU1, const std::valarray< float64 > &aU2, FuncLimiter &&aFuncLimtr)
Slope limiter (gradient)
Definition dbpp_Reconstruction.hpp:29