dune-fem  2.8-git
odesolver.hh
Go to the documentation of this file.
1 #ifndef RUNGEKUTTA_ODE_SOLVER_HH
2 #define RUNGEKUTTA_ODE_SOLVER_HH
3 
4 //- system includes
5 #include <iostream>
6 #include <cmath>
7 #include <vector>
8 #include <pthread.h>
9 #include <cassert>
10 #include <sys/times.h>
11 
12 //- dune-fem includes
13 #include <dune/fem/io/parameter.hh>
17 
20 
23 
28 
29 namespace DuneODE
30 {
31  using namespace Dune;
32  using namespace Fem;
33  using namespace std;
34 
36 
43  //
44  // --ExplicitOdeSolver
45  //
47  template< class Destination >
49 
51  //
52  // --ImplicitOdeSolver
53  //
55  template <class Destination>
57 
58  template <class Destination>
60  typename ParDGHelmholtz< Destination > :: JacobianOperatorType,
62 
63  template<class Destination>
65  : public ImplicitRungeKuttaSolver<
66  ParDGHelmholtz< Destination >, ParDGNewtonInverse< Destination > >
67  {
68  public:
72 
73  protected:
74  using BaseType :: helmholtzOp_;
75  std::unique_ptr< HelmholtzOperatorType > helmOpPtr_;
76 
78  {
79  return new HelmholtzOperatorType( op ) ;
80  }
81 
82  public:
84  const ParameterReader &parameter = Parameter::container() )
85  : BaseType( *createHelmholtzOperator( op ), tp, order, parameter )
86  {
87  // store pointer for later removal
88  helmOpPtr_.reset( &helmholtzOp_ );
89  }
90  };
91 
93  //
94  // --SemiImplicitOdeSolver
95  //
97  template<class Destination>
100  SpaceOperatorInterface<Destination>,
101  ParDGHelmholtz< Destination >, ParDGNewtonInverse< Destination > >
102  {
103  public:
107 
108  protected:
109  using BaseType :: helmholtzOp_;
110  std::unique_ptr< HelmholtzOperatorType > helmOpPtr_;
111 
113  {
114  return new HelmholtzOperatorType( op ) ;
115  }
116 
117  public:
119  const ParameterReader &parameter = Parameter::container() )
120  : BaseType( explOp, *createHelmholtzOperator( implOp ), tp, order, parameter )
121  {
122  // store pointer for later removal
123  helmOpPtr_.reset( &helmholtzOp_ );
124  }
125  };
126 
131 } // namespace DuneODE
132 
133 #endif // #ifndef RUNGEKUTTA_ODE_SOLVER_HH
Definition: bindguard.hh:11
Definition: multistep.hh:17
static ParameterContainer & container()
Definition: io/parameter.hh:193
interface for time evolution operators
Definition: spaceoperatorif.hh:38
Definition: dghelmholtz.hh:62
Definition: krylovinverseoperators.hh:48
inverse operator based on a newton scheme
Definition: newtoninverseoperator.hh:209
Definition: odesolver.hh:67
ImplicitRungeKuttaSolver< HelmholtzOperatorType, ParDGNewtonInverse< Destination > > BaseType
Definition: odesolver.hh:71
HelmholtzOperatorType * createHelmholtzOperator(OperatorType &op)
Definition: odesolver.hh:77
SpaceOperatorInterface< Destination > OperatorType
Definition: odesolver.hh:69
ParDGHelmholtz< Destination > HelmholtzOperatorType
Definition: odesolver.hh:70
ImplicitOdeSolver(OperatorType &op, TimeProviderBase &tp, int order, const ParameterReader &parameter=Parameter::container())
Definition: odesolver.hh:83
std::unique_ptr< HelmholtzOperatorType > helmOpPtr_
Definition: odesolver.hh:75
Definition: odesolver.hh:102
SemiImplicitRungeKuttaSolver< OperatorType, HelmholtzOperatorType, ParDGNewtonInverse< Destination > > BaseType
Definition: odesolver.hh:106
SemiImplicitOdeSolver(OperatorType &explOp, OperatorType &implOp, TimeProviderBase &tp, int order, const ParameterReader &parameter=Parameter::container())
Definition: odesolver.hh:118
ParDGHelmholtz< Destination > HelmholtzOperatorType
Definition: odesolver.hh:105
std::unique_ptr< HelmholtzOperatorType > helmOpPtr_
Definition: odesolver.hh:110
SpaceOperatorInterface< Destination > OperatorType
Definition: odesolver.hh:104
HelmholtzOperatorType * createHelmholtzOperator(OperatorType &op)
Definition: odesolver.hh:112
Exlicit RungeKutta ODE solver.
Definition: explicit.hh:65
Implicit RungeKutta ODE solver.
Definition: implicit.hh:26
Implicit RungeKutta ODE solver.
Definition: semiimplicit.hh:112
Definition: timestepcontrol.hh:23
general base for time providers
Definition: timeprovider.hh:36