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