/home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/timestepping/abstract_timestepper.hh Source File#
|
DiFfRG
Discretization Framework for functional Renormalization Group flows
|
abstract_timestepper.hh
Go to the documentation of this file.
44 const double ms = double(std::chrono::duration_cast<std::chrono::milliseconds>(now - mark).count());
90 size_t nonfinite_failures() const { return nonfinite_solution_failures + nonfinite_residual_failures; }
93 return nonfinite_failures() > 0 || residual_exceptions > 0 || jacobian_failures > 0 || linear_solver_failures > 0;
154 template <typename VectorType_, typename SparseMatrixType_, uint dim_> class AbstractTimestepper
183 AbstractTimestepper(const ConfigTree &config, AbstractAssembler<VectorType, SparseMatrixType, dim> &assembler,
186 : config(config), adaptor_default(), assembler(assembler), data_out(data_out), adaptor(adaptor_default),
192 AbstractTimestepper(const ConfigTree &config, AbstractAssembler<VectorType, SparseMatrixType, dim> &assembler,
216 impl.max_non_linear_iterations = config.get_uint("/timestepping/implicit/max_non_linear_iterations", 10);
217 impl.jacobian_diagnostics = config.get_bool("/timestepping/implicit/jacobian_diagnostics", false);
219 impl.ida_callback_trace_min_t = config.get_double("/timestepping/implicit/ida_callback_trace_min_t", 0.0);
220 impl.ida_callback_trace_max_lines = config.get_uint("/timestepping/implicit/ida_callback_trace_max_lines", 200);
223 impl.ida_error_dof_diagnostics = config.get_bool("/timestepping/implicit/ida_error_dof_diagnostics", false);
228 if (impl.minimal_dt <= 0.0) throw std::invalid_argument("Minimal timestep size must be positive.");
229 if (impl.maximal_dt <= 0.0) throw std::invalid_argument("Maximal timestep size must be positive.");
231 throw std::invalid_argument("Minimal timestep size must be smaller than maximal timestep size.");
233 throw std::invalid_argument("Initial timestep size must be within the minimal and maximal timestep size.");
247 if (expl.minimal_dt <= 0.0) throw std::invalid_argument("Minimal timestep size must be positive.");
248 if (expl.maximal_dt <= 0.0) throw std::invalid_argument("Maximal timestep size must be positive.");
250 throw std::invalid_argument("Minimal timestep size must be smaller than maximal timestep size.");
275 template <typename EmitFinalFrame> void finalize_output_after_failure(EmitFinalFrame &&emit_final_frame)
300 virtual void run(AbstractFlowingVariables<NumberType, VectorType> &initial_condition, const double t_start,
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
struct DiFfRG::AbstractTimestepper::ExplicitParameters expl
std::size_t next_jacobian_build_id
Definition abstract_timestepper.hh:348
SparseMatrixType_ SparseMatrixType
Definition abstract_timestepper.hh:160
virtual void run(AbstractFlowingVariables< NumberType, VectorType > &initial_condition, const double t_start, const double t_stop)=0
Any derived class must implement this method to run the timestepping algorithm.
void finalize_output_after_failure(EmitFinalFrame &&emit_final_frame)
Best-effort output cleanup while a timestepping failure is being reported.
Definition abstract_timestepper.hh:275
const bool m_is_explicit
Definition abstract_timestepper.hh:315
typename get_type::BlockVectorType< VectorType > BlockVectorType
Definition abstract_timestepper.hh:169
AbstractAssembler< VectorType, SparseMatrixType, dim > & assembler
Definition abstract_timestepper.hh:309
AbstractTimestepper(const ConfigTree &config, AbstractAssembler< VectorType, SparseMatrixType, dim > &assembler, OutputSession_impl< dim, VectorType > &data_out, AbstractAdaptor< VectorType > &adaptor, const bool implicit_stepper, const bool explicit_stepper)
Definition abstract_timestepper.hh:192
bool is_explicit() const
Definition abstract_timestepper.hh:304
TimestepperJacobianDiagnosticsState jacobian_diagnostics_state
Definition abstract_timestepper.hh:349
OutputSession_impl< dim, VectorType > & data_out
Definition abstract_timestepper.hh:310
AbstractTimestepper(const ConfigTree &config, AbstractAssembler< VectorType, SparseMatrixType, dim > &assembler, OutputSession_impl< dim, VectorType > &data_out, const bool implicit_stepper, const bool explicit_stepper)
Construct a new Abstract Timestepper object.
Definition abstract_timestepper.hh:183
bool is_implicit() const
Definition abstract_timestepper.hh:303
AbstractAdaptor< VectorType > & adaptor
Definition abstract_timestepper.hh:311
typename get_type::NumberType< VectorType > NumberType
Definition abstract_timestepper.hh:159
void read_parameters()
Definition abstract_timestepper.hh:202
const bool m_is_implicit
Definition abstract_timestepper.hh:314
struct DiFfRG::AbstractTimestepper::ImplicitParameters impl
NoAdaptivity< VectorType > adaptor_default
Definition abstract_timestepper.hh:308
A hierarchical configuration tree, readable from JSON and TOML files.
Definition config_tree.hh:32
double get_double_or_warn(const std::string &key, const double def) const
uint get_uint(const std::string &key) const
Get the value of a key in the configuration object.
double get_double(const std::string &key) const
Get the value of a key in the configuration object.
bool get_bool(const std::string &key) const
Get the value of a key in the configuration object.
Definition no_adaptivity.hh:25
Definition output_session.hh:176
Definition run_reporter.hh:96
void summary(const SummaryEvent &event) const
void error(spdlog::format_string_t< Args... > format, Args &&...args) const
Definition run_reporter.hh:111
Definition jacobian_diagnostics.hh:59
A vector type DiFfRG's timesteppers and assemblers can work with.
Definition linear_algebra.hh:179
All compile-time knowledge about which linear algebra types DiFfRG uses.
typename internal::_NumberType< VectorType >::value NumberType
Definition linear_algebra.hh:152
typename internal::_BlockVectorType< VectorType >::value BlockVectorType
The block-vector type belonging to a given vector type.
Definition linear_algebra.hh:167
Definition complex_math.hh:10
Definition abstract_timestepper.hh:339
double abs_tol
Definition abstract_timestepper.hh:343
double minimal_dt
Definition abstract_timestepper.hh:341
bool detect_stuck
Definition abstract_timestepper.hh:345
double maximal_dt
Definition abstract_timestepper.hh:342
double rel_tol
Definition abstract_timestepper.hh:344
Definition abstract_timestepper.hh:319
double ida_callback_trace_min_t
Definition abstract_timestepper.hh:332
bool ida_callback_trace_successes
Definition abstract_timestepper.hh:334
double maximal_dt
Definition abstract_timestepper.hh:322
double minimal_dt
Definition abstract_timestepper.hh:321
bool ida_error_dof_diagnostics
Definition abstract_timestepper.hh:335
uint ida_callback_trace_max_lines
Definition abstract_timestepper.hh:333
uint ida_error_dof_diagnostics_top_n
Definition abstract_timestepper.hh:336
bool ida_callback_trace
Definition abstract_timestepper.hh:331
double rel_tol
Definition abstract_timestepper.hh:324
uint max_non_linear_iterations
Definition abstract_timestepper.hh:326
uint max_steps
Definition abstract_timestepper.hh:325
bool jacobian_diagnostics
Definition abstract_timestepper.hh:330
double abs_tol
Definition abstract_timestepper.hh:323
Stopwatch feeding structured progress durations.
Definition abstract_timestepper.hh:38
std::chrono::high_resolution_clock::time_point mark
Definition abstract_timestepper.hh:39
Definition abstract_timestepper.hh:50
double ida_current_step_size
Definition abstract_timestepper.hh:57
long int reject_delta
Definition abstract_timestepper.hh:53
double ida_last_step_size
Definition abstract_timestepper.hh:56
double ida_current_time
Definition abstract_timestepper.hh:58
std::vector< IDAErrorDofRecord > top_dofs
Definition abstract_timestepper.hh:60
long int total_rejects
Definition abstract_timestepper.hh:54
Definition abstract_timestepper.hh:22
double estimated_local_error
Definition abstract_timestepper.hh:25
Definition abstract_timestepper.hh:63
long int ida_nonlinear_convergence_failures
Definition abstract_timestepper.hh:66
void append_to(ProgressEvent &event) const
Definition abstract_timestepper.hh:73
long int ida_nonlinear_iterations
Definition abstract_timestepper.hh:69
double ida_current_step_size
Definition abstract_timestepper.hh:71
long int ida_error_test_failures
Definition abstract_timestepper.hh:65
long int ida_step_solve_failures
Definition abstract_timestepper.hh:67
double ida_last_step_size
Definition abstract_timestepper.hh:70
double ida_current_time
Definition abstract_timestepper.hh:72
long int ida_residual_evaluations
Definition abstract_timestepper.hh:68
Definition run_reporter.hh:50
Definition abstract_timestepper.hh:83
size_t linear_solver_failures
Definition abstract_timestepper.hh:88
size_t nonfinite_failures() const
Definition abstract_timestepper.hh:90
size_t nonfinite_residual_failures
Definition abstract_timestepper.hh:85
void append_to(ProgressEvent &event) const
Definition abstract_timestepper.hh:95
size_t nonfinite_solution_failures
Definition abstract_timestepper.hh:84
bool has_failures() const
Definition abstract_timestepper.hh:91
size_t jacobian_failures
Definition abstract_timestepper.hh:87
size_t residual_exceptions
Definition abstract_timestepper.hh:86
Definition abstract_timestepper.hh:105
void append_to(ProgressEvent &event) const
Definition abstract_timestepper.hh:109
std::optional< IDAProgressDiagnostics > ida
Definition abstract_timestepper.hh:106
SolverCallbackDiagnostics callbacks
Definition abstract_timestepper.hh:107
Generated by