43#include "common/common.h"
44#include "common/util/smart_pointer.h"
46#include "lib_disc/time_disc/time_disc_interface.h"
47#include "lib_disc/assemble_interface.h"
48#include "lib_disc/operator/non_linear_operator/assembled_non_linear_operator.h"
49#include "lib_disc/operator/linear_operator/assembled_linear_operator.h"
51#include "lib_algebra/algebra_template_define_helper.h"
52#include "lib_algebra/operator/debug_writer.h"
71template <
class TAlgebra>
73:
public ITimeDiscretization<TAlgebra>,
74 public DebugWritingObject<TAlgebra>
96 : ITimeDiscretization<TAlgebra>(spDD),
100 m_spMatrixJDisc(spDD),
m_spMatrixJOp(SPNULL), m_bMatrixJNeedsUpdate(true), m_useLinearMode(false),
102 m_useCachedMatrices(true)
107 SmartPtr<IDomainDiscretization<algebra_type> > spMatrixJDisc)
108 : ITimeDiscretization<TAlgebra>(spDefectDisc),
112 m_spMatrixJDisc(spMatrixJDisc),
m_spMatrixJOp(SPNULL), m_bMatrixJNeedsUpdate(true), m_useLinearMode(false),
114 m_useCachedMatrices(true)
119 SmartPtr<IDomainDiscretization<algebra_type> > spMatrixJDisc,
120 SmartPtr<IDomainDiscretization<algebra_type> > spGammaDisc)
121 : ITimeDiscretization<TAlgebra>(spDefectDisc),
125 m_spMatrixJDisc(spMatrixJDisc),
m_spMatrixJOp(SPNULL), m_bMatrixJNeedsUpdate(true), m_useLinearMode(false),
127 m_useCachedMatrices(true)
138 virtual void prepare_step(SmartPtr<VectorTimeSeries<vector_type> > prevSol,
143 number dt,
const GridLevel& gl);
146 virtual void finish_step(SmartPtr<VectorTimeSeries<vector_type> > currSol) {};
150 const GridLevel& gl);
152 virtual number future_time()
const {
return m_futureTime;}
167 void assemble_rhs(
vector_type& b,
const GridLevel& gl);
169 void adjust_solution(
vector_type& u,
const GridLevel& gl);
171 virtual size_t num_stages()
const {
return 1;};
172 virtual void set_stage(
size_t stage) {};
177 void disable_linear_mode() { m_useLinearMode =
false; }
178 bool use_linear_mode()
const {
return m_useLinearMode; }
180 void enable_matrix_cache() { m_useCachedMatrices =
true; }
181 void disable_matrix_cache() { m_useCachedMatrices =
false; }
182 void set_matrix_cache(
bool useCache) { m_useCachedMatrices = useCache; }
186 virtual number update_scaling(std::vector<number>& vSM,
187 std::vector<number>& vSA,
188 number dt, number currentTime,
189 ConstSmartPtr<VectorTimeSeries<vector_type> > prevSol)
199 return currentTime + dt;
211 using base_type::m_spDomDisc;
215 SmartPtr<IDomainDiscretization<algebra_type> > m_spMatrixJDisc;
217 bool m_bMatrixJNeedsUpdate;
218 bool m_useLinearMode;
223 bool m_bGammaNeedsUpdate;
225 SmartPtr<matrix_type> m_spMatrixCacheMk;
227 bool m_useCachedMatrices;
234 m_spMatrixCacheMk = SPNULL;
235 m_bMatrixJNeedsUpdate =
true;
241 {
m_spGammaOp = SPNULL; m_bGammaNeedsUpdate =
true; }
243 void set_gamma_disc(SmartPtr<IDomainDiscretization<algebra_type> > spGammaDisc)
246 using DebugWritingObject<TAlgebra>::set_debug;
249 using DebugWritingObject<TAlgebra>::write_debug;
250 using DebugWritingObject<TAlgebra>::debug_writer;
ITimeDiscretization< algebra_type > base_type
Definition linear_implicit_timestep.h:79
static const size_t m_prevSteps
Definition linear_implicit_timestep.h:202
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!)
Definition linear_implicit_timestep.cpp:197
SmartPtr< AssembledLinearOperator< algebra_type > > m_spGammaOp
Definition linear_implicit_timestep.h:222
algebra_type::vector_type vector_type
Definition linear_implicit_timestep.h:88
algebra_type algebra_type
Definition linear_implicit_timestep.h:82
LinearImplicitEuler(SmartPtr< IDomainDiscretization< algebra_type > > spDD)
CTOR.
Definition linear_implicit_timestep.h:95
std::vector< number > m_vScaleMass
Definition linear_implicit_timestep.h:203
void enable_linear_mode()
Some simplifications for linear systems. (In this case, the mass matrix is not re-assembled....
Definition linear_implicit_timestep.h:176
LinearImplicitEuler(SmartPtr< IDomainDiscretization< algebra_type > > spDefectDisc, SmartPtr< IDomainDiscretization< algebra_type > > spMatrixJDisc, SmartPtr< IDomainDiscretization< algebra_type > > spGammaDisc)
CTOR.
Definition linear_implicit_timestep.h:118
IDomainDiscretization< algebra_type > domain_discretization_type
Definition linear_implicit_timestep.h:91
virtual size_t num_prev_steps() const
Definition linear_implicit_timestep.h:135
virtual ~LinearImplicitEuler()
DTOR.
Definition linear_implicit_timestep.h:131
SmartPtr< IDomainDiscretization< algebra_type > > m_spGammaDisc
Definition linear_implicit_timestep.h:221
void assemble_linear(matrix_type &A, vector_type &b, const GridLevel &gl)
Should return (M+tau A) delta = tau f.
Definition linear_implicit_timestep.cpp:382
number m_futureTime
Definition linear_implicit_timestep.h:208
SmartPtr< AssembledLinearOperator< algebra_type > > m_spMatrixJOp
Definition linear_implicit_timestep.h:216
virtual void prepare_step(SmartPtr< VectorTimeSeries< vector_type > > prevSol, number dt)
Definition linear_implicit_timestep.cpp:52
void assemble_defect(vector_type &d, const vector_type &u, const GridLevel &gl)
Meant to assemble d(u), but abused here... (u not used!)
Definition linear_implicit_timestep.cpp:307
LinearImplicitEuler(SmartPtr< IDomainDiscretization< algebra_type > > spDefectDisc, SmartPtr< IDomainDiscretization< algebra_type > > spMatrixJDisc)
CTOR.
Definition linear_implicit_timestep.h:106
void invalidate()
Invalidate all cached operators.
Definition linear_implicit_timestep.h:232
virtual void finish_step(SmartPtr< VectorTimeSeries< vector_type > > currSol)
Definition linear_implicit_timestep.h:146
algebra_type::matrix_type matrix_type
Definition linear_implicit_timestep.h:85
number m_dt
Definition linear_implicit_timestep.h:207
virtual void finish_step_elem(SmartPtr< VectorTimeSeries< vector_type > > currSol, const GridLevel &gl)
Definition linear_implicit_timestep.cpp:165
virtual void prepare_step_elem(SmartPtr< VectorTimeSeries< vector_type > > prevSol, number dt, const GridLevel &gl)
Definition linear_implicit_timestep.cpp:104
SmartPtr< VectorTimeSeries< vector_type > > m_pPrevSol
Definition linear_implicit_timestep.h:206
void invalidate_gamma()
Invalidate Gamma operator.
Definition linear_implicit_timestep.h:240
std::vector< number > m_vScaleStiff
Definition linear_implicit_timestep.h:204