Line data Source code
1 0 : // Distributed under the MIT License. 2 : // See LICENSE.txt for details. 3 : 4 : #pragma once 5 : 6 : #include <vector> 7 : 8 : #include "Utilities/TMPL.hpp" 9 : 10 : namespace imex { 11 : /// Type of guess returned from an implicit sector's `initial_guess` 12 : /// mutator. If `ExactSolution` is returned, the implicit solve is 13 : /// skipped. 14 0 : enum class GuessResult { InitialGuess, ExactSolution }; 15 : 16 : /// Mutator for the `initial_guess` of an implicit sector that does 17 : /// not modify the variables. The initial guess is therefore the 18 : /// result of the explicit step. 19 1 : struct GuessExplicitResult { 20 0 : using return_tags = tmpl::list<>; 21 0 : using argument_tags = tmpl::list<>; 22 : template <typename ImplicitVars> 23 0 : static std::vector<GuessResult> apply( 24 : const ImplicitVars& /*inhomogeneous_terms*/, 25 : const double /*implicit_weight*/) { 26 : return {}; 27 : } 28 : }; 29 : 30 : /// Mutator for the `jacobian` of an implicit sector that has an 31 : /// analytic solution. Such a sector never does numerical solves, and 32 : /// so does not need an available jacobian. 33 : /// 34 : /// \note The `source` mutator is always required, even if the 35 : /// implicit equation can be solved analytically. 36 1 : struct NoJacobianBecauseSolutionIsAnalytic { 37 0 : using return_tags = tmpl::list<>; 38 0 : using argument_tags = tmpl::list<>; 39 0 : [[noreturn]] static void apply(); 40 : }; 41 : } // namespace imex