LIMEX plugin
Loading...
Searching...
No Matches
ug::LinearImplicitEuler< TAlgebra > Class Template Reference

#include <linear_implicit_timestep.h>

Inheritance diagram for ug::LinearImplicitEuler< TAlgebra >:

Public Types

typedef ITimeDiscretization< TAlgebra > base_type
 Type of base class.
typedef TAlgebra algebra_type
 Type of algebra.
typedef algebra_type::matrix_type matrix_type
 Type of algebra matrix.
typedef algebra_type::vector_type vector_type
 Type of algebra vector.
typedef IDomainDiscretization< algebra_typedomain_discretization_type
 Domain Discretization type.

Public Member Functions

 LinearImplicitEuler (SmartPtr< IDomainDiscretization< algebra_type > > spDD)
 CTOR.
 LinearImplicitEuler (SmartPtr< IDomainDiscretization< algebra_type > > spDefectDisc, SmartPtr< IDomainDiscretization< algebra_type > > spMatrixJDisc)
 CTOR.
 LinearImplicitEuler (SmartPtr< IDomainDiscretization< algebra_type > > spDefectDisc, SmartPtr< IDomainDiscretization< algebra_type > > spMatrixJDisc, SmartPtr< IDomainDiscretization< algebra_type > > spGammaDisc)
 CTOR.
virtual ~LinearImplicitEuler ()
 DTOR.
virtual size_t num_prev_steps () const
virtual void prepare_step (SmartPtr< VectorTimeSeries< vector_type > > prevSol, number dt)
virtual void prepare_step_elem (SmartPtr< VectorTimeSeries< vector_type > > prevSol, number dt, const GridLevel &gl)
virtual void finish_step (SmartPtr< VectorTimeSeries< vector_type > > currSol)
virtual void finish_step_elem (SmartPtr< VectorTimeSeries< vector_type > > currSol, const GridLevel &gl)
virtual number future_time () const
void assemble_jacobian (matrix_type &J, const vector_type &u, const GridLevel &gl)
 Meant to assemble J(u) c = d(u), but abused here... (u not used!).
void assemble_defect (vector_type &d, const vector_type &u, const GridLevel &gl)
 Meant to assemble d(u), but abused here... (u not used!).
void assemble_linear (matrix_type &A, vector_type &b, const GridLevel &gl)
 Should return (M+tau A) delta = tau f.
void assemble_rhs (vector_type &b, const vector_type &u, const GridLevel &gl)
void assemble_rhs (vector_type &b, const GridLevel &gl)
void adjust_solution (vector_type &u, const GridLevel &gl)
virtual size_t num_stages () const
virtual void set_stage (size_t stage)
void enable_linear_mode ()
 Some simplifications for linear systems. (In this case, the mass matrix is not re-assembled.).
void disable_linear_mode ()
bool use_linear_mode () const
void enable_matrix_cache ()
void disable_matrix_cache ()
void set_matrix_cache (bool useCache)
void invalidate ()
 Invalidate all cached operators.
void invalidate_gamma ()
 Invalidate Gamma operator.
void set_gamma_disc (SmartPtr< IDomainDiscretization< algebra_type > > spGammaDisc)

Protected Member Functions

virtual number update_scaling (std::vector< number > &vSM, std::vector< number > &vSA, number dt, number currentTime, ConstSmartPtr< VectorTimeSeries< vector_type > > prevSol)

Protected Attributes

std::vector< number > m_vScaleMass
 Scaling for mass part.
std::vector< number > m_vScaleStiff
 Scaling for stiffness part.
SmartPtr< VectorTimeSeries< vector_type > > m_pPrevSol
 Previous solutions.
number m_dt
 Time Step size.
number m_futureTime
 Future Time.
SmartPtr< IDomainDiscretization< algebra_type > > m_spMatrixJDisc
SmartPtr< AssembledLinearOperator< algebra_type > > m_spMatrixJOp
 Operator.
bool m_bMatrixJNeedsUpdate
bool m_useLinearMode
SmartPtr< IDomainDiscretization< algebra_type > > m_spGammaDisc
 Gamma disc.
SmartPtr< AssembledLinearOperator< algebra_type > > m_spGammaOp
 Gamma operator.
bool m_bGammaNeedsUpdate
SmartPtr< matrix_typem_spMatrixCacheMk
bool m_useCachedMatrices

Static Protected Attributes

static const size_t m_prevSteps =1
 number of previous steps needed.

Detailed Description

template<class TAlgebra>
class ug::LinearImplicitEuler< TAlgebra >

This time stepping scheme discretizes equations of the form

\‍[    M \partial_t u(t) = f(t)
\‍]

as

\‍[    (M - \Delta t J) \left( u(t^{k+1}) - u(t^k) \right)  =  \Delta t \cdot f(t^{k})
\‍]

Thus, for $\theta = 1 $ this is the Backward-Euler time stepping.

Member Function Documentation

◆ assemble_defect()

template<typename TAlgebra>
void ug::LinearImplicitEuler< TAlgebra >::assemble_defect ( vector_type & d,
const vector_type & u,
const GridLevel & gl )

Meant to assemble d(u), but abused here... (u not used!).

WARNING: This function is abused Must return : d_A(k-1):= tau * F(k-1) - A(k-1) u(k-1)

◆ assemble_jacobian()

template<typename TAlgebra>
void ug::LinearImplicitEuler< TAlgebra >::assemble_jacobian ( matrix_type & J_limex,
const vector_type & u,
const GridLevel & gl )

Meant to assemble J(u) c = d(u), but abused here... (u not used!).

WARNING: This function is abused Must return: $Mk + \tau J$

◆ finish_step()

template<class TAlgebra>
virtual void ug::LinearImplicitEuler< TAlgebra >::finish_step ( SmartPtr< VectorTimeSeries< vector_type > > currSol)
inlinevirtual

◆ finish_step_elem()

template<typename TAlgebra>
void ug::LinearImplicitEuler< TAlgebra >::finish_step_elem ( SmartPtr< VectorTimeSeries< vector_type > > currSol,
const GridLevel & gl )
virtual

◆ num_prev_steps()

template<class TAlgebra>
virtual size_t ug::LinearImplicitEuler< TAlgebra >::num_prev_steps ( ) const
inlinevirtual

◆ prepare_step()

template<typename TAlgebra>
void ug::LinearImplicitEuler< TAlgebra >::prepare_step ( SmartPtr< VectorTimeSeries< vector_type > > prevSol,
number dt )
virtual

◆ prepare_step_elem()

template<typename TAlgebra>
void ug::LinearImplicitEuler< TAlgebra >::prepare_step_elem ( SmartPtr< VectorTimeSeries< vector_type > > prevSol,
number dt,
const GridLevel & gl )
virtual


The documentation for this class was generated from the following files: