39class TimeIntAdamsBashforthMoultonBase :
public TimeIntMultistepBase
41 using Number =
typename VectorType::value_type;
42 using BoostInputArchiveType = TimeIntBase::BoostInputArchiveType;
43 using BoostOutputArchiveType = TimeIntBase::BoostOutputArchiveType;
46 TimeIntAdamsBashforthMoultonBase(std::shared_ptr<Operator> pde_operator_in,
47 double const start_time_,
48 double const end_time_,
49 unsigned int const max_number_of_time_steps_,
50 unsigned int const order_,
51 bool const start_with_low_order_,
52 bool const adaptive_time_stepping_,
54 MPI_Comm
const & mpi_comm_,
56 : TimeIntMultistepBase(start_time_,
58 max_number_of_time_steps_,
60 start_with_low_order_,
61 adaptive_time_stepping_,
65 pde_operator(pde_operator_in),
67 ab(order_ - 1, start_with_low_order_),
68 am(order_, start_with_low_order_),
69 vec_evaluated_operators(order_ - 1)
71 AssertThrow(order_ >= 1,
72 dealii::ExcMessage(
"Oder of ABM time integrator has to be at least 1."));
76 print_iterations()
const
79 print_list_of_iterations(pcout, {
"Adams-Bashforth-Moulton"}, {0});
85 AssertThrow(
false, dealii::ExcMessage(
"not yet implemented"));
96 get_underlying_operator()
const
103 update_time_integrator_constants()
final
105 ab.update(time_step_number, adaptive_time_stepping, time_steps);
106 am.update(time_step_number, adaptive_time_stepping, time_steps);
110 allocate_vectors()
final
112 pde_operator->initialize_dof_vector(solution);
113 pde_operator->initialize_dof_vector(prediction);
115 pde_operator->initialize_dof_vector(evaluated_operator_np);
116 for(
auto & evaluated_operator : vec_evaluated_operators)
117 pde_operator->initialize_dof_vector(evaluated_operator);
121 initialize_current_solution()
final
123 pde_operator->prescribe_initial_conditions(solution, get_time());
127 initialize_former_multistep_dof_vectors()
final
129 if(start_with_low_order)
131 if(vec_evaluated_operators.size() > 0)
132 pde_operator->evaluate(vec_evaluated_operators[0], solution, get_time());
138 pde_operator->initialize_dof_vector(temp_sol);
139 for(
unsigned int i = 0; i < vec_evaluated_operators.size(); ++i)
141 pde_operator->prescribe_initial_conditions(temp_sol, get_previous_time(i));
142 pde_operator->evaluate(vec_evaluated_operators[i], temp_sol, get_previous_time(i));
148 setup_derived()
final
153 do_timestep_predict()
158 predrict_solution(prediction, solution, vec_evaluated_operators);
160 timer_tree->insert({
"Timeloop",
"Adams-Bashforth-Moulton"}, timer.wall_time());
164 do_timestep_correct()
170 pde_operator->evaluate(evaluated_operator_np, prediction, get_next_time());
172 correct_solution(solution, evaluated_operator_np, vec_evaluated_operators);
174 pde_operator->evaluate(evaluated_operator_np, solution, get_next_time());
177 if(this->print_solver_info() and not(this->is_test))
179 pcout << std::endl <<
"Adams-Bashforth-Moulton:";
180 print_wall_time(pcout, timer.wall_time());
183 timer_tree->insert({
"Timeloop",
"Adams-Bashforth-Moulton"}, timer.wall_time());
187 do_timestep_solve()
final
189 do_timestep_predict();
190 do_timestep_correct();
196 std::vector<VectorType>
const & ops)
const
198 dst.add(
static_cast<Number
>(get_time_step_size() * am.get_gamma0()), op_np);
199 for(
unsigned int i = 0; i < this->am.get_order() - 1; ++i)
200 dst.add(
static_cast<Number
>(get_time_step_size() * am.get_alpha(i)), ops[i]);
206 std::vector<VectorType>
const & ops)
const
209 for(
unsigned int i = 0; i < this->ab.get_order(); ++i)
210 dst.add(
static_cast<Number
>(get_time_step_size() * ab.get_alpha(i)), ops[i]);
214 prepare_vectors_for_next_timestep()
final
216 if(vec_evaluated_operators.size() > 0)
218 push_back(vec_evaluated_operators);
219 std::swap(vec_evaluated_operators[0], evaluated_operator_np);
224 read_restart_vectors(BoostInputArchiveType & ia)
final
229 for(
unsigned int i = 0; i < vec_evaluated_operators.size(); ++i)
236 write_restart_vectors(BoostOutputArchiveType & oa)
const final
241 for(
unsigned int i = 0; i < vec_evaluated_operators.size(); ++i)
248 solve_steady_problem()
final
250 AssertThrow(
false, dealii::ExcMessage(
"Steady not implemented."));
254 std::shared_ptr<Operator> pde_operator;
267 std::vector<VectorType> vec_evaluated_operators;