21 #ifndef FUB_FLUX_METHOD_MUSCL_HANCOCK_METHOD2
22 #define FUB_FLUX_METHOD_MUSCL_HANCOCK_METHOD2
36 typename Equation,
typename GradientMethod = ConservativeGradient<Equation>,
37 typename ReconstructionMethod = ConservativeReconstruction<Equation>,
38 typename BaseMethod = GodunovMethod<Equation, ExactRiemannSolver<Equation>>>
42 using Gradient =
typename GradientMethod::Gradient;
57 return flux_method_.ComputeStableDt(states.template subspan<1, 2>(), dx,
63 return flux_method_.ComputeStableDt(states.template subspan<1, 2>(), dx,
72 states.template subspan<1, 2>(), face_fraction,
73 volume_fraction.template subspan<1, 2>(), dx, dir);
125 template <
typename Equation,
typename GradientMethod,
126 typename ReconstructionMethod,
typename BaseMethod>
130 gradient_method_.ComputeGradient(gradient_[0],
131 stencil.template subspan<0, 3>(), dx, dir);
132 gradient_method_.ComputeGradient(gradient_[1],
133 stencil.template subspan<1, 3>(), dx, dir);
134 ComputeNumericFlux(flux, stencil.template subspan<1, 2>(), gradient_, dt, dx,
138 template <
typename Equation,
typename GradientMethod,
139 typename ReconstructionMethod,
typename BaseMethod>
144 reconstruction_method_.Reconstruct(reconstruction_[0], stencil[0],
146 reconstruction_method_.Reconstruct(reconstruction_[1], stencil[1],
148 flux_method_.ComputeNumericFlux(flux, reconstruction_, dt, dx, dir);
151 template <
typename Equation,
typename GradientMethod,
152 typename ReconstructionMethod,
typename BaseMethod>
157 gradient_method_.ComputeGradient(gradient_array_[0],
158 stencil.template subspan<0, 3>(), dx, dir);
159 gradient_method_.ComputeGradient(gradient_array_[1],
160 stencil.template subspan<1, 3>(), dx, dir);
161 ComputeNumericFlux(flux, stencil.template subspan<1, 2>(), gradient_array_,
165 template <
typename Equation,
typename GradientMethod,
166 typename ReconstructionMethod,
typename BaseMethod>
172 reconstruction_method_.Reconstruct(reconstruction_array_[0], stencil[0],
174 reconstruction_method_.Reconstruct(reconstruction_array_[1], stencil[1],
176 flux_method_.ComputeNumericFlux(flux, reconstruction_array_, dt, dx, dir);
179 template <
typename Equation,
typename GradientMethod,
180 typename ReconstructionMethod,
typename BaseMethod>
186 gradient_method_.ComputeGradient(gradient_array_[0],
187 stencil.template subspan<0, 3>(), dx, dir);
188 gradient_method_.ComputeGradient(gradient_array_[1],
189 stencil.template subspan<1, 3>(), dx, dir);
191 (volume_fractions[0] > 0.0 && volume_fractions[1] > 0.0 &&
192 volume_fractions[2] > 0.0);
194 (volume_fractions[1] > 0.0 && volume_fractions[2] > 0.0 &&
195 volume_fractions[3] > 0.0);
197 [&](
auto&& x,
auto&& y) {
198 x = left_mask.select(x, 0.0);
199 y = right_mask.select(y, 0.0);
201 gradient_array_[0], gradient_array_[1]);
202 ComputeNumericFlux(flux, face_fractions, stencil.template subspan<1, 2>(),
203 gradient_array_, volume_fractions.template subspan<1, 2>(),
207 template <
typename Equation,
typename GradientMethod,
208 typename ReconstructionMethod,
typename BaseMethod>
215 reconstruction_method_.Reconstruct(reconstruction_array_[0], stencil[0],
217 reconstruction_method_.Reconstruct(reconstruction_array_[1], stencil[1],
219 flux_method_.ComputeNumericFlux(flux, face_fractions, reconstruction_array_,
220 volume_fractions, dt, dx, dir);
#define FUB_ASSERT(x)
Definition: assert.hpp:39
A span is a view over a contiguous sequence of objects, the storage of which is owned by some other o...
Definition: span.hpp:81
The fub namespace.
Definition: AnyBoundaryCondition.hpp:31
std::chrono::duration< double > Duration
Definition: Duration.hpp:31
Array< double, 1 > Array1d
Definition: Eigen.hpp:53
void ForEachVariable(F function, Ts &&... states)
Definition: State.hpp:89
Direction
This is a type safe type to denote a dimensional split direction.
Definition: Direction.hpp:30
void ForEachComponent(F function, Ts &&... states)
Definition: State.hpp:624
Array< bool, 1 > MaskArray
Definition: Eigen.hpp:59
This type has a constructor which takes an equation and might allocate any dynamically sized member v...
Definition: State.hpp:251
Definition: MusclHancockMethod2.hpp:39
std::array< GradientArray, 2 > gradient_array_
Definition: MusclHancockMethod2.hpp:119
typename Equation::Conservative Conservative
Definition: MusclHancockMethod2.hpp:41
const BaseMethod & GetBaseMethod() const noexcept
Definition: MusclHancockMethod2.hpp:106
std::array< CompleteArray, 2 > reconstruction_array_
Definition: MusclHancockMethod2.hpp:121
MusclHancock2(const Equation &eq)
Definition: MusclHancockMethod2.hpp:48
Equation equation_
Definition: MusclHancockMethod2.hpp:110
void ComputeNumericFlux(Conservative &flux, span< const Complete, 4 > stencil, Duration dt, double dx, Direction dir)
Definition: MusclHancockMethod2.hpp:128
typename GradientMethod::Gradient Gradient
Definition: MusclHancockMethod2.hpp:42
Array1d ComputeStableDt(span< const CompleteArray, 4 > states, Array1d face_fraction, span< const Array1d, 4 > volume_fraction, double dx, Direction dir)
Definition: MusclHancockMethod2.hpp:67
Equation & GetEquation() noexcept
Definition: MusclHancockMethod2.hpp:104
BaseMethod flux_method_
Definition: MusclHancockMethod2.hpp:113
const Equation & GetEquation() const noexcept
Definition: MusclHancockMethod2.hpp:103
std::array< Complete, 2 > reconstruction_
Definition: MusclHancockMethod2.hpp:116
static constexpr int GetStencilWidth() noexcept
Definition: MusclHancockMethod2.hpp:53
typename GradientMethod::GradientArray GradientArray
Definition: MusclHancockMethod2.hpp:46
Array1d ComputeStableDt(span< const CompleteArray, 4 > states, double dx, Direction dir) noexcept
Definition: MusclHancockMethod2.hpp:61
GradientMethod gradient_method_
Definition: MusclHancockMethod2.hpp:111
ReconstructionMethod reconstruction_method_
Definition: MusclHancockMethod2.hpp:112
typename Equation::Complete Complete
Definition: MusclHancockMethod2.hpp:40
MusclHancock2(const Equation &eq, const BaseMethod &method)
Definition: MusclHancockMethod2.hpp:50
double ComputeStableDt(span< const Complete, 4 > states, double dx, Direction dir) noexcept
Definition: MusclHancockMethod2.hpp:55
std::array< Gradient, 2 > gradient_
Definition: MusclHancockMethod2.hpp:115