DUNE-ACFEM (2.5.1)

Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits > Class Template Reference

Basic parabolic fem-scheme class. More...

#include <dune/acfem/algorithms/parabolicfemscheme.hh>

+ Collaboration diagram for Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >:

Public Types

typedef DiscreteFunction DiscreteFunctionType
 Type of the discrete solution function.
 
typedef DiscreteFunctionType::GridType GridType
 type of hierarchic grid
 
typedef DiscreteFunctionType::GridPartType GridPartType
 type of the grid view
 
typedef DiscreteFunctionType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
 type of the discrete function space
 
typedef TimeProvider TimeProviderType
 access to the simulation time and time-step
 
typedef ImplicitModel ImplicitModelImplementationType
 type of the mathematical model
 
typedef InitialValue InitialValueType
 Initial value.
 
typedef ImplicitModelType::FunctionSpaceType FunctionSpaceType
 type of function space (scalar functions, \(f: \Omega -> R\))
 
typedef Fem::NewtonInverseOperator< LinearOperatorType, LinearInverseOperatorType > NonLinearInverseOperatorType
 Non-linear solver.
 
typedef Dune::Fem::RestrictProlongDefault< DiscreteFunctionTypeRestrictionProlongationType
 type of restriction/prolongation projection for adaptive simulations (use default here, i.e. More...
 
typedef Dune::Fem::AdaptationManager< GridType, RestrictionProlongationTypeAdaptationManagerType
 type of adaptation manager handling adapation and DoF compression
 
typedef ImplicitModelType::DirichletIndicatorType DirichletIndicatorType
 types for various data
 
typedef ImplicitModelType::DirichletBoundaryFunctionType DirichletBoundaryFunctionType
 type of Dirichlet boundary values
 
typedef ImplicitModelType::DirichletWeightFunctionType DirichletWeightFunctionType
 type of Dirichlet weight function
 
typedef DirichletConstraints< LinearOperatorType, EffectiveDirichletFunctionType, DirichletIndicatorTypeConstraintsOperatorType
 type of Dirichlet constraints
 
typedef DifferentiableEmptyBlockConstraints< LinearOperatorType > EmptyConstraintsType
 empty constraints for the explicit operator (old solution is already constrained)
 
typedef DifferentiableEllipticOperator< LinearOperatorType, ImplicitOperatorPartsType, ConstraintsOperatorType, QuadratureTraits > ImplicitOperatorType
 define differential operator, implicit part
 
typedef EllipticOperator< ExplicitOperatorPartsType, DiscreteFunctionType, DiscreteFunctionType, EmptyConstraintsType, QuadratureTraits > ExplicitOperatorType
 explicit part of differential operator. More...
 
typedef ParabolicEulerEstimator< DiscreteFunctionType, TimeProviderType, ImplicitModelImplementationType, ExplicitModelImplementationType > EstimatorType
 type of error estimator
 
typedef MarkingStrategy< EstimatorTypeMarkingStrategyType
 type of marking strategy for space adaptivity
 
typedef TrueErrorEstimator< InitialValueFunctionType, Dune::Fem::L2Norm< GridPartType > > InitialEstimatorType
 intial estimator
 
typedef MarkingStrategy< InitialEstimatorTypeInitialMarkingStrategyType
 Initial marking.
 
typedef InitialValueFunctionType ExactSolutionFunctionType
 adapter to turn exact solution into a grid function (for visualization)
 
typedef std::tuple< DiscreteFunctionType *, const ExactSolutionFunctionType * > IOTupleType
 type of input/output tuple
 
typedef DataOutput< GridType, IOTupleTypeDataOutputType
 type of data writer (produces VTK data)
 
typedef Dune::Fem::CheckPointer< GridTypeCheckPointerType
 type of check-pointer (dumps unaltered simulation data)
 

Define the RHS functional.

The default for forces and Neumann is a ZeroGridFunction which will result in a ZeroFunctional which simply will do nothing.

For assembling, both will be added efficently together using FunctionalExpressions.

typedef SumModelType::BulkForcesFunctionType BulkForcesFunctionType
 
typedef L2InnerProductFunctional< DiscreteFunctionSpaceType, BulkForcesFunctionType > BulkForcesFunctional
 
typedef SumModelType::NeumannBoundaryFunctionType BoundaryFluxFunctionType
 
typedef L2BoundaryFunctional< DiscreteFunctionSpaceType, BoundaryFluxFunctionType, typename ImplicitModelType::NeumannIndicatorTypeBoundaryFluxFunctional
 

Public Member Functions

 ParabolicFemScheme (DiscreteFunctionType &solution, const TimeProviderType &timeProvider, const ImplicitModelType &implicitModel, const ExplicitModelType &explicitModel, const InitialValueType &initialValue, const std::string name="heat")
 Constructor. More...
 
virtual void initialize ()
 initialize the solution
 
virtual void next ()
 Close the current time-step. More...
 
virtual void solve (bool forceMatrixAssembling=true)
 solve the system
 
virtual bool mark (const double tolerance)
 mark elements for adaptation
 
virtual double estimate ()
 calculate error estimator
 
virtual double timeEstimate ()
 return the most recent time estimate
 
virtual void adapt ()
 do the adaptation for a given marking
 
virtual int output ()
 data I/O
 
virtual double residual () const
 calculate residual (in small l^2)
 
virtual double error () const
 Calculate L2/H1 error. More...
 
virtual size_t size () const
 return some measure about the number of DOFs in use
 

Public Attributes

decltype(std::declval< DirichletBoundaryFunctionType >()/std::declval< typename DirichletWeightFunctionType::GridFunctionType >()) typedef EffectiveDirichletFunctionType
 type of effective Dirichlet values
 

Protected Member Functions

virtual void nonLinearSolve (DiscreteFunctionType &rhs)
 Run the full Newton-scheme ...
 
virtual void linearSolve (DiscreteFunctionType &rhs, bool forceMatrixAssembling)
 Perform only one step of the Newton scheme for the affine-linear case. More...
 

Detailed Description

template<class DiscreteFunction, class TimeProvider, class ImplicitModel, class ExplicitModel, class InitialValue, template< class > class QuadratureTraits = DefaultQuadratureTraits>
class Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >

Basic parabolic fem-scheme class.

Parameters
[in]DiscreteFunctionThe type of the discrete solution.
[in]TimeProviderThe type of the Dune::Fem::TimeProvider.
[in]ImplicitModelThe type of the implicit model.
[in]ExplicitModelThe type of the explicit model.
[in]InitialValueThe type of the initial value. Additionally, this can also be the exact solution in order to perform experimental convergence tests. ParabolicFemScheme::error() will compute the distance to this function; it will also be dumped to the VTK-files for visualization.
[in]QuadratureTraitsSpecial quadrature rules, for instance to implement mass-lumping. Defaults to DefaultQuadratureTraits. The template argument of the template template-parameter is the GridPartType.

Member Typedef Documentation

◆ ExplicitOperatorType

template<class DiscreteFunction , class TimeProvider , class ImplicitModel , class ExplicitModel , class InitialValue , template< class > class QuadratureTraits = DefaultQuadratureTraits>
typedef EllipticOperator<ExplicitOperatorPartsType, DiscreteFunctionType, DiscreteFunctionType, EmptyConstraintsType, QuadratureTraits> Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::ExplicitOperatorType

explicit part of differential operator.

Need not be differentiable as it is only needed for the RHS.

◆ RestrictionProlongationType

template<class DiscreteFunction , class TimeProvider , class ImplicitModel , class ExplicitModel , class InitialValue , template< class > class QuadratureTraits = DefaultQuadratureTraits>
typedef Dune::Fem::RestrictProlongDefault<DiscreteFunctionType> Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::RestrictionProlongationType

type of restriction/prolongation projection for adaptive simulations (use default here, i.e.

LagrangeInterpolation)

Constructor & Destructor Documentation

◆ ParabolicFemScheme()

template<class DiscreteFunction , class TimeProvider , class ImplicitModel , class ExplicitModel , class InitialValue , template< class > class QuadratureTraits = DefaultQuadratureTraits>
Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::ParabolicFemScheme ( DiscreteFunctionType solution,
const TimeProviderType timeProvider,
const ImplicitModelType implicitModel,
const ExplicitModelType explicitModel,
const InitialValueType initialValue,
const std::string  name = "heat" 
)
inline

Constructor.

Parameters
[in,out]solutionStorage for the discrete solution.
[in]timeProviderA Dune::Fem time-provider to communicate time and step-size all over the place.
[in]implicitModelThe part of the operator to be applied at the end of the time interval.
[in]explicitModelThe part of the operator to be applied to the old values.
[in]initialValueGuess what. This can either be a non-discrete function or something which already has a LocalFunction-property. This can also used to pass an "exact" "solution" for experimental convergence tests. If so the function still has to evaluate at the start of the current time-step, in order to be suitable as an initial value.
[in]nameName used for parameters and output.

Member Function Documentation

◆ error()

template<class DiscreteFunction , class TimeProvider , class ImplicitModel , class ExplicitModel , class InitialValue , template< class > class QuadratureTraits = DefaultQuadratureTraits>
virtual double Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::error ( ) const
inlinevirtual

Calculate L2/H1 error.

This actually computes the distance to the initial value which optionally may be used for experimental convergence tests in order to pass an exact "solution". In this case initialValue may be time-dependent and has to give the correct value at the start of the time-step.

Implements Dune::ACFem::BasicFemScheme.

◆ linearSolve()

template<class DiscreteFunction , class TimeProvider , class ImplicitModel , class ExplicitModel , class InitialValue , template< class > class QuadratureTraits = DefaultQuadratureTraits>
virtual void Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::linearSolve ( DiscreteFunctionType rhs,
bool  forceMatrixAssembling 
)
inlineprotectedvirtual

Perform only one step of the Newton scheme for the affine-linear case.

This implies that an affine linear case is really allowed.

Referenced by Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::solve().

◆ next()

template<class DiscreteFunction , class TimeProvider , class ImplicitModel , class ExplicitModel , class InitialValue , template< class > class QuadratureTraits = DefaultQuadratureTraits>
virtual void Dune::ACFem::ParabolicFemScheme< DiscreteFunction, TimeProvider, ImplicitModel, ExplicitModel, InitialValue, QuadratureTraits >::next ( )
inlinevirtual

Close the current time-step.

Here: copy new solution to oldSolution. Note that this does not move the timeProvider to the new time-step.


The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 30, 22:37, 2024)