3#ifndef DUNE_PDELAB_GRIDOPERATOR_ONESTEP_HH
4#define DUNE_PDELAB_GRIDOPERATOR_ONESTEP_HH
17 template<
typename GO0,
typename GO1,
bool implicit = true>
42 <
typename GO0::Traits::TrialGridFunctionSpace,
43 typename GO0::Traits::TestGridFunctionSpace,
44 typename GO0::Traits::MatrixBackend,
45 typename GO0::Traits::DomainField,
46 typename GO0::Traits::RangeField,
47 typename GO0::Traits::JacobianField,
48 typename GO0::Traits::TrialGridFunctionSpaceConstraints,
49 typename GO0::Traits::TestGridFunctionSpaceConstraints,
60 template <
typename MFT>
78 local_assembler(la0,la1, const_residual)
80 GO0::setupGridOperators(std::tie(go0_,go1_));
91 DUNE_THROW(Dune::Exception,
"This function should not be called in explicit mode");
97 DUNE_THROW(Dune::Exception,
"This function should not be called in explicit mode");
104 return global_assembler.trialGridFunctionSpace();
110 return global_assembler.testGridFunctionSpace();
114 typename Traits::TrialGridFunctionSpace::Traits::SizeType
globalSizeU ()
const
120 typename Traits::TestGridFunctionSpace::Traits::SizeType
globalSizeV ()
const
136 global_assembler.assemble(pattern_engine);
142 global_assembler.assemble(pattern_engine);
147 void preStage(
unsigned int stage,
const std::vector<Domain*> & x)
150 DUNE_THROW(Dune::Exception,
"This function should not be called in explicit mode");
155 global_assembler.assemble(prestage_engine);
162 DUNE_THROW(Dune::Exception,
"This function should not be called in explicit mode");
166 global_assembler.assemble(residual_engine);
173 DUNE_THROW(Dune::Exception,
"This function should not be called in explicit mode");
177 global_assembler.assemble(jacobian_engine);
185 DUNE_THROW(Dune::Exception,
"This function should not be called in implicit mode");
190 ExplicitJacobianResidualEngine;
192 ExplicitJacobianResidualEngine & jacobian_residual_engine
194 global_assembler.assemble(jacobian_residual_engine);
200 if ((not la0.localOperator().isLinear) or (not la1.localOperator().isLinear))
201 DUNE_THROW(Dune::Exception,
"Your trying to use a linear jacobian apply for a non linear problem.");
208 if (la0.localOperator().isLinear and la1.localOperator().isLinear)
209 DUNE_THROW(Dune::Exception,
"Your trying to use a non linear jacobian apply for a linear problem.");
214 template<
typename F,
typename X>
215 void interpolate (
unsigned stage,
const X& xold, F& f, X& x)
const
220 go0.localAssembler().setTime(local_assembler.
timeAtStage(stage));
223 go0.interpolate(xold,f,x);
231 if (es.comm().size() > 1)
234 es.communicate(data_handle,InteriorBorder_All_Interface,ForwardCommunication);
248 local_assembler.
preStep(time_,dt_,method_.
s());
268 Real suggested_dt = std::min(la0.suggestTimestep(dt),la1.suggestTimestep(dt));
278 const_residual =
Range(go0.testGridFunctionSpace());
283 go0.make_consistent(a);
288 return go0.matrixBackend();
291 const typename LocalAssembler::Traits::TrialGridFunctionSpaceConstraints
trialConstraints()
const
302 Range const_residual;
const P & p
Definition constraints.hh:148
void copy_nonconstrained_dofs(const CG &cg, const XG &xgin, XG &xgout)
Definition constraints.hh:987
virtual unsigned s() const =0
Return number of stages of the method.
For backward compatibility – Do not use this!
Definition adaptivity.hh:28
Definition genericdatahandle.hh:730
const CU & trialConstraints() const
get the constraints on the trial grid function space
Definition assemblerutilities.hh:205
Traits class for the grid operator.
Definition gridoperatorutilities.hh:34
GFSU TrialGridFunctionSpace
The trial grid function space.
Definition gridoperatorutilities.hh:37
GFSV TestGridFunctionSpace
The test grid function space.
Definition gridoperatorutilities.hh:40
MB MatrixBackend
The matrix backend of the grid operator.
Definition gridoperatorutilities.hh:51
Dune::PDELab::Backend::Matrix< MB, Domain, Range, JF > Jacobian
The type of the jacobian.
Definition gridoperatorutilities.hh:72
Dune::PDELab::Backend::Vector< GFSV, RF > Range
The type of the range (residual).
Definition gridoperatorutilities.hh:65
Dune::PDELab::Backend::Vector< GFSU, DF > Domain
The type of the domain (solution).
Definition gridoperatorutilities.hh:58
Definition gridoperator/onestep.hh:19
Traits::Domain Domain
Definition gridoperator/onestep.hh:55
void postStep()
to be called after step is completed
Definition gridoperator/onestep.hh:252
const LocalAssembler::Traits::TrialGridFunctionSpaceConstraints trialConstraints() const
Definition gridoperator/onestep.hh:291
void interpolate(unsigned stage, const X &xold, F &f, X &x) const
Interpolate constrained values from given function f.
Definition gridoperator/onestep.hh:215
const Traits::TestGridFunctionSpace & testGridFunctionSpace() const
Get the test grid function space.
Definition gridoperator/onestep.hh:108
void divideMassTermByDeltaT()
Definition gridoperator/onestep.hh:88
LocalAssembler & localAssembler() const
Definition gridoperator/onestep.hh:127
void preStage(unsigned int stage, const std::vector< Domain * > &x)
Assemble constant part of residual.
Definition gridoperator/onestep.hh:147
GO1::Traits::LocalAssembler LocalAssemblerDT1
Definition gridoperator/onestep.hh:31
LocalAssembler::Real Real
The type for real number e.g. time.
Definition gridoperator/onestep.hh:67
void setMethod(const TimeSteppingParameterInterface< Real > &method_)
set time stepping method
Definition gridoperator/onestep.hh:239
void residual(const Domain &x, Range &r) const
Assemble residual.
Definition gridoperator/onestep.hh:159
void multiplySpatialTermByDeltaT()
Definition gridoperator/onestep.hh:94
void fill_pattern(Pattern &p) const
Fill pattern of jacobian matrix.
Definition gridoperator/onestep.hh:130
Real suggestTimestep(Real dt) const
to be called once before each stage
Definition gridoperator/onestep.hh:266
void explicit_jacobian_residual(unsigned int stage, const std::vector< Domain * > &x, Jacobian &a, Range &r1, Range &r0)
Assemble jacobian and residual simultaneously for explicit treatment.
Definition gridoperator/onestep.hh:181
GO0::Traits::LocalAssembler LocalAssemblerDT0
Definition gridoperator/onestep.hh:30
void jacobian(const Domain &x, Jacobian &a) const
Assemble jacobian.
Definition gridoperator/onestep.hh:170
void make_consistent(Jacobian &a) const
Definition gridoperator/onestep.hh:281
OneStepLocalAssembler< OneStepGridOperator, LocalAssemblerDT0, LocalAssemblerDT1 > LocalAssembler
The local assembler type.
Definition gridoperator/onestep.hh:35
GO0::BorderDOFExchanger BorderDOFExchanger
The BorderDOFExchanger.
Definition gridoperator/onestep.hh:38
void update()
Definition gridoperator/onestep.hh:274
void preStep(const TimeSteppingParameterInterface< Real > &method_, Real time_, Real dt_)
parametrize assembler with a time-stepping method
Definition gridoperator/onestep.hh:245
const Traits::TrialGridFunctionSpace & trialGridFunctionSpace() const
Get the trial grid function space.
Definition gridoperator/onestep.hh:102
void postStage()
to be called after stage is completed
Definition gridoperator/onestep.hh:259
Traits::TestGridFunctionSpace::Traits::SizeType globalSizeV() const
Get dimension of space v.
Definition gridoperator/onestep.hh:120
OneStepGridOperator(GO0 &go0_, GO1 &go1_)
Constructor for non trivial constraints.
Definition gridoperator/onestep.hh:73
Traits::TrialGridFunctionSpace::Traits::SizeType globalSizeU() const
Get dimension of space u.
Definition gridoperator/onestep.hh:114
Traits::Range Range
Definition gridoperator/onestep.hh:56
GO0::Traits::Assembler Assembler
The global UDG assembler type.
Definition gridoperator/onestep.hh:26
Dune::PDELab::GridOperatorTraits< typename GO0::Traits::TrialGridFunctionSpace, typename GO0::Traits::TestGridFunctionSpace, typename GO0::Traits::MatrixBackend, typename GO0::Traits::DomainField, typename GO0::Traits::RangeField, typename GO0::Traits::JacobianField, typename GO0::Traits::TrialGridFunctionSpaceConstraints, typename GO0::Traits::TestGridFunctionSpaceConstraints, Assembler, LocalAssembler > Traits
The grid operator traits.
Definition gridoperator/onestep.hh:51
Assembler & assembler() const
Definition gridoperator/onestep.hh:125
LocalAssembler::OneStepParameters OneStepParameters
The type of the one step method parameters.
Definition gridoperator/onestep.hh:70
const Traits::MatrixBackend & matrixBackend() const
Definition gridoperator/onestep.hh:286
Traits::Jacobian Jacobian
Definition gridoperator/onestep.hh:57
void jacobian_apply(const Domain &update, Range &result) const
Apply jacobian matrix to the vector update without explicitly assembling it.
Definition gridoperator/onestep.hh:198
void jacobian_apply(const Domain &solution, const Domain &update, Range &result) const
Apply jacobian matrix to the vector update without explicitly assembling it.
Definition gridoperator/onestep.hh:206
GO0::Pattern Pattern
The sparsity pattern container for the jacobian matrix.
Definition gridoperator/onestep.hh:23
Definition gridoperator/onestep.hh:62
Jacobian Type
Definition gridoperator/onestep.hh:63
The local assembler for one step methods.
Definition onestep/localassembler.hh:34
void setStage(int stage_)
Set the current stage of the one step scheme.
Definition onestep/localassembler.hh:146
LocalPatternAssemblerEngine & localPatternAssemblerEngine(typename Traits::MatrixPattern &p)
Definition onestep/localassembler.hh:185
LocalPreStageAssemblerEngine & localPreStageAssemblerEngine(const std::vector< typename Traits::Solution * > &x)
Definition onestep/localassembler.hh:194
Real timeAtStage(int stage_) const
Access time at given stage.
Definition onestep/localassembler.hh:162
void setMethod(const OneStepParameters &method_)
Set the one step method parameters.
Definition onestep/localassembler.hh:140
void setDTAssemblingMode(DTAssemblingMode dt_mode_)
Definition onestep/localassembler.hh:156
LocalResidualAssemblerEngine & localResidualAssemblerEngine(typename Traits::Residual &r, const typename Traits::Solution &x)
Definition onestep/localassembler.hh:204
LocalJacobianApplyAssemblerEngine & localJacobianApplyAssemblerEngine(const typename Traits::Domain &update, typename Traits::Range &result)
Definition onestep/localassembler.hh:252
@ DoNotAssembleDT
Definition onestep/localassembler.hh:151
@ DivideOperator1ByDT
Definition onestep/localassembler.hh:151
@ MultiplyOperator0ByDT
Definition onestep/localassembler.hh:151
void preStep(Real time_, Real dt_, int stages_)
Definition onestep/localassembler.hh:109
LA1::LocalPatternAssemblerEngine LocalExplicitPatternAssemblerEngine
Definition onestep/localassembler.hh:57
LocalExplicitPatternAssemblerEngine & localExplicitPatternAssemblerEngine(typename Traits::MatrixPattern &p)
Definition onestep/localassembler.hh:225
LocalExplicitJacobianResidualAssemblerEngine & localExplicitJacobianResidualAssemblerEngine(typename Traits::Jacobian &a, typename Traits::Residual &r0, typename Traits::Residual &r1, const std::vector< typename Traits::Solution * > &x)
Definition onestep/localassembler.hh:233
LocalJacobianAssemblerEngine & localJacobianAssemblerEngine(typename Traits::Jacobian &a, const typename Traits::Solution &x)
Definition onestep/localassembler.hh:215
Traits::RangeField Real
The local operators type for real numbers e.g. time.
Definition onestep/localassembler.hh:90
Base parameter class for time stepping scheme parameters.
Definition onestepparameter.hh:44