/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/timestepping/sundials_ida.hh Source File#

DiFfRG: /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/timestepping/sundials_ida.hh Source File
DiFfRG
Discretization Framework for functional Renormalization Group flows
sundials_ida.hh
Go to the documentation of this file.
1#pragma once
2
3// DiFfRG
12
13#include <functional>
14#include <utility>
15
16namespace DiFfRG
17{
25 template <typename VectorType, typename SparseMatrixType, uint dim,
26 template <typename...> typename LinearSolver>
27 class TimeStepperSUNDIALS_IDA_impl : public AbstractTimestepper<VectorType, SparseMatrixType, dim>
28 {
30
31 public:
32 using NumberType = typename Base::NumberType;
34 using IDAErrorDofCallback = std::function<void(const IDAErrorDofDiagnostics &)>;
35
51
52 virtual void run(AbstractFlowingVariables<NumberType, VectorType> &initial_condition, const double t_start,
53 const double t_stop) override;
54
56
57 private:
58 void run(VectorType &initial_data, const double t_start, const double t_stop);
59 void run(BlockVectorType &initial_data, const double t_start, const double t_stop);
60 void run_vars(VectorType &initial_data, const double t_start, const double t_stop);
61
63 };
64
65 // ##############################################################################
66 // Application-facing spelling
67 // ##############################################################################
68 //
69 // The class above takes the linear algebra spelled out because it is compiled out of line: the
70 // set of valid arguments is closed by the explicit instantiations in src/, and keying it on the
71 // assembler would explode that set into one instantiation per model. Applications name the
72 // assembler instead and let these aliases project it onto that fixed parameter list.
73 //
74 // The argument is anything exposing VectorType, SparseMatrixType and dim -- an Assembler, or a
75 // Discretization where the assembler type is not a single type (e.g. a test that runs one
76 // discretization against several models).
77 //
78 // The solver defaults to DefaultLinearSolver, which follows the linear algebra: UMFPack when it
79 // is serial, a distributed direct solve when it is not. Note that <Assembler> and
80 // <Assembler, UMFPack> are *different types* even in a serial build -- see the comment on
81 // DefaultLinearSolver -- so both need their own explicit instantiation.
82 template <typename Assembler, template <typename...> typename LinearSolver = DefaultLinearSolver>
84 TimeStepperSUNDIALS_IDA_impl<typename Assembler::VectorType, typename Assembler::SparseMatrixType, Assembler::dim,
85 LinearSolver>;
86} // namespace DiFfRG
Implement a simple interface to do all adaptivity tasks, i.e. solution transfer, reinit of dofHandler...
Definition abstract_adaptor.hh:11
This is the general assembler interface for any kind of discretization. An assembler is responsible f...
Definition abstract_assembler.hh:54
A class to set up initial data for whatever discretization we have chosen. Also used to switch/manage...
Definition abstract_data.hh:21
The abstract base class for all timestepping algorithms. It provides a standard constructor which pop...
Definition abstract_timestepper.hh:155
VectorType VectorType
Definition abstract_timestepper.hh:158
struct DiFfRG::AbstractTimestepper::ExplicitParameters expl
typename get_type::BlockVectorType< VectorType > BlockVectorType
Definition abstract_timestepper.hh:169
AbstractAssembler< VectorType, SparseMatrixType, dim > & assembler
Definition abstract_timestepper.hh:309
OutputSession_impl< dim, VectorType > & data_out
Definition abstract_timestepper.hh:310
AbstractAdaptor< VectorType > & adaptor
Definition abstract_timestepper.hh:311
typename get_type::NumberType< VectorType > NumberType
Definition abstract_timestepper.hh:159
const ConfigTree config
Definition abstract_timestepper.hh:307
struct DiFfRG::AbstractTimestepper::ImplicitParameters impl
double output_dt
Definition abstract_timestepper.hh:318
A hierarchical configuration tree, readable from JSON and TOML files.
Definition config_tree.hh:32
Definition output_session.hh:176
A class to perform time stepping using the SUNDIALS IDA solver. This stepper uses adaptive time steps...
Definition sundials_ida.hh:28
void run_vars(VectorType &initial_data, const double t_start, const double t_stop)
TimeStepperSUNDIALS_IDA_impl(const ConfigTree &config, AbstractAssembler< VectorType, SparseMatrixType, dim > &assembler, OutputSession_impl< dim, VectorType > &data_out, AbstractAdaptor< VectorType > &adaptor)
Definition sundials_ida.hh:45
std::function< void(const IDAErrorDofDiagnostics &)> IDAErrorDofCallback
Definition sundials_ida.hh:34
TimeStepperSUNDIALS_IDA_impl(const ConfigTree &config, AbstractAssembler< VectorType, SparseMatrixType, dim > &assembler, OutputSession_impl< dim, VectorType > &data_out)
Definition sundials_ida.hh:40
virtual void run(AbstractFlowingVariables< NumberType, VectorType > &initial_condition, const double t_start, const double t_stop) override
Any derived class must implement this method to run the timestepping algorithm.
void set_ida_error_dof_callback(IDAErrorDofCallback callback)
Definition sundials_ida.hh:55
void run(BlockVectorType &initial_data, const double t_start, const double t_stop)
typename Base::BlockVectorType BlockVectorType
Definition sundials_ida.hh:33
void run(VectorType &initial_data, const double t_start, const double t_stop)
IDAErrorDofCallback ida_error_dof_callback
Definition sundials_ida.hh:62
typename Base::NumberType NumberType
Definition sundials_ida.hh:32
The linear solver a timestepper uses when the application does not name one.
Definition complex_math.hh:10
typename internal::_default_solver< SparseMatrixType, VectorType >::type DefaultLinearSolver
The build-configuration-dependent default linear solver.
Definition default_linear_solver.hh:66
unsigned int uint
Definition utils.hh:24
Definition abstract_timestepper.hh:50