18 #include <deal.II/algorithms/theta_timestepping.h>
20 #include <deal.II/base/parameter_handler.h>
21 #include <deal.II/lac/vector_memory.h>
27 template <
class VECTOR>
29 : vtheta(0.5), adaptive(false), op_explicit(&e), op_implicit(&i)
33 template <
class VECTOR>
37 op_explicit->notify(e);
38 op_implicit->notify(e);
41 template <
class VECTOR>
52 template <
class VECTOR>
57 control.parse_parameters (param);
59 adaptive = param.
get_bool(
"Adaptive");
64 template <
class VECTOR>
70 deallog.
push (
"Theta");
77 d_explicit.time = control.now();
84 src1.
add(p,
"Previous iterate");
88 src2.
add(p,
"Previous iterate");
92 out1.
add(p,
"Result");
95 src2.
add(p,
"Previous time");
99 (*output) << 0U << out;
101 for (
unsigned int count = 1; d_explicit.time < control.final(); ++count)
103 const bool step_change = control.advance();
104 d_implicit.time = control.now();
105 d_explicit.step = (1.-vtheta)*control.step();
106 d_implicit.step = vtheta*control.step();
107 deallog <<
"Time step:" << d_implicit.time << std::endl;
119 (*op_explicit)(out1, src1);
120 (*op_implicit)(out, src2);
122 if (output != 0 && control.print())
123 (*output) << count << out;
125 d_explicit.time = control.now();
131 DEAL_II_NAMESPACE_CLOSE
virtual void notify(const Event &)
void add(DATA &v, const std::string &name)
ThetaTimestepping(Operator< VECTOR > &op_explicit, Operator< VECTOR > &op_implicit)
void enter_subsection(const std::string &subsection)
virtual void operator()(NamedData< VECTOR * > &out, const NamedData< VECTOR * > &in)
#define Assert(cond, exc)
const Event new_timestep_size
void merge(NamedData< DATA2 > &)
bool get_bool(const std::string &entry_name) const
static void declare_parameters(ParameterHandler ¶m)
void push(const std::string &text)
double get_double(const std::string &entry_name) const
void declare_entry(const std::string &entry, const std::string &default_value, const Patterns::PatternBase &pattern=Patterns::Anything(), const std::string &documentation=std::string())
::ExceptionBase & ExcNotImplemented()