dune-pdelab  2.7-git
Classes | Protected Types | Protected Member Functions | Protected Attributes | List of all members
Dune::PDELab::CombinedOperator< ApplyOp, Args > Class Template Reference

A local operator to take combine different local operators. More...

#include <dune/pdelab/localoperator/combinedoperator.hh>

Inheritance diagram for Dune::PDELab::CombinedOperator< ApplyOp, Args >:
Inheritance graph

Protected Types

using ArgPtrs = std::tuple< std::shared_ptr< std::remove_reference_t< Args > >... >
 
using ArgRefs = std::tuple< Args &... >
 

Protected Member Functions

template<typename... FArgs>
void applyLops (FArgs &... args) const
 

Protected Attributes

ArgPtrs lops
 

Control flags

enum  { doSkipEntity }
 Whether to do selective cell assembly, i.e. whether or not skip_entity() should be called. More...
 
enum  { doSkipIntersection }
 Whether to do selective intersection assembly, i.e. whether or not skip_intersection() should be called. More...
 
enum  { doPatternVolume }
 Whether to assemble the pattern on the elements, i.e. whether or not pattern_volume() should be called. More...
 
enum  { doPatternVolumePostSkeleton }
 Whether to assemble the pattern on the elements after the skeleton has been handled, i.e. whether or not pattern_volume_post_skeleton() should be called. More...
 
enum  { doPatternSkeleton }
 Whether to assemble the pattern on the interior intersections, i.e. whether or not pattern_skeleton() should be called. More...
 
enum  { doPatternBoundary }
 Whether to assemble the pattern on the boundary intersections, i.e. whether or not pattern_boundary() should be called. More...
 
enum  { doAlphaVolume }
 Whether to call the local operator's alpha_volume(), jacobian_apply_volume() and jacobian_volume(). More...
 
enum  { doAlphaVolumePostSkeleton }
 Whether to call the local operator's alpha_volume_post_skeleton(), jacobian_apply_volume_post_skeleton() and jacobian_volume_post_skeleton(). More...
 
enum  { doAlphaSkeleton }
 Whether to call the local operator's alpha_skeleton(), jacobian_apply_skeleton() and jacobian_skeleton(). More...
 
enum  { doAlphaBoundary }
 Whether to call the local operator's alpha_boundary(), jacobian_apply_boundary() and jacobian_boundary(). More...
 
enum  { doLambdaVolume }
 Whether to call the local operator's lambda_volume(). More...
 
enum  { doLambdaVolumePostSkeleton }
 Whether to call the local operator's lambda_volume_post_skeleton(). More...
 
enum  { doLambdaSkeleton }
 Whether to call the local operator's lambda_skeleton(). More...
 
enum  { doLambdaBoundary }
 Whether to call the local operator's lambda_boundary(). More...
 
enum  { doSkeletonTwoSided }
 Whether to visit the skeleton methods from both sides. More...
 
enum  { isLinear = std::conjunction_v<std::integral_constant<bool,Args::isLinear>...> }
 Whether this is a linear operator. More...
 

Methods for instationary problems

typedef std::tuple_element< 0, std::tuple< Args... > >::type::RealType RealType
 Export type used for time values. More...
 
void setTime (RealType t)
 set time for subsequent evaluation More...
 
RealType getTime () const
 get current time More...
 
void preStep (RealType time, RealType dt, int stages)
 to be called once before each time step More...
 
void postStep ()
 to be called once at the end of each time step More...
 
void preStage (RealType time, int r)
 to be called once before each stage More...
 
int getStage () const
 get current stage More...
 
void postStage ()
 to be called once at the end of each stage More...
 
RealType suggestTimestep (RealType dt) const
 to be called after stage 1 More...
 

Construction and modification

 CombinedOperator (ArgPtrs &&l)
 
 CombinedOperator ()
 
 CombinedOperator (Args &... args)
 
 CombinedOperator (Args &&... args)
 
template<std::size_t i>
void setSummand (typename std::tuple_element_t< i, ArgRefs > summand)
 set the i'th component of the sum More...
 
template<std::size_t i>
std::tuple_element_t< i, ArgRefsgetSummand ()
 get the i'th component of the sum More...
 

Methods for selective assembly

template<typename EG >
bool skip_entity (const EG &eg) const
 whether to assembly methods associated with a given entity More...
 
template<typename IG >
bool skip_intersection (const IG &ig) const
 whether to assembly methods associated with a given intersection More...
 

Methods for the sparsity pattern

template<typename LFSU , typename LFSV , typename LocalPattern >
void pattern_volume (const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
 get an element's contribution to the sparsity pattern More...
 
template<typename LFSU , typename LFSV , typename LocalPattern >
void pattern_volume_post_skeleton (const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
 get an element's contribution to the sparsity pattern after the intersections have been handled More...
 
template<typename LFSU , typename LFSV , typename LocalPattern >
void pattern_skeleton (const LFSU &lfsu_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const LFSV &lfsv_n, LocalPattern &pattern_sn, LocalPattern &pattern_ns) const
 get an internal intersection's contribution to the sparsity pattern More...
 
template<typename LFSU , typename LFSV , typename LocalPattern >
void pattern_boundary (const LFSU &lfsu_s, const LFSV &lfsv_s, LocalPattern &pattern_ss) const
 get a boundary intersection's contribution to the sparsity pattern More...
 

Methods for the residual – non-constant parts

template<typename EG , typename LFSU , typename X , typename LFSV , typename R >
void alpha_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
 get an element's contribution to alpha More...
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename R >
void alpha_volume_post_skeleton (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, R &r) const
 get an element's contribution to alpha after the intersections have been handled More...
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename R >
void alpha_skeleton (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, R &r_s, R &r_n) const
 get an internal intersections's contribution to alpha More...
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename R >
void alpha_boundary (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, R &r_s) const
 get a boundary intersections's contribution to alpha More...
 

Methods for the residual – constant parts

template<typename EG , typename LFSV , typename R >
void lambda_volume (const EG &eg, const LFSV &lfsv, R &r) const
 get an element's contribution to lambda More...
 
template<typename EG , typename LFSV , typename R >
void lambda_volume_post_skeleton (const EG &eg, const LFSV &lfsv, R &r) const
 get an element's contribution to lambda after the intersections have been handled More...
 
template<typename IG , typename LFSV , typename R >
void lambda_skeleton (const IG &ig, const LFSV &lfsv_s, const LFSV &lfsv_n, R &r_s, R &r_n) const
 get an internal intersections's contribution to lambda More...
 
template<typename IG , typename LFSV , typename R >
void lambda_boundary (const IG &ig, const LFSV &lfsv_s, R &r_s) const
 get a boundary intersections's contribution to lambda More...
 

Methods for the application of the jacobian

template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y) const
 apply an element's jacobian More...
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_volume_post_skeleton (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, Y &y) const
 apply an element's jacobian after the intersections have been handled More...
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_skeleton (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, Y &y_s, Y &y_n) const
 apply an internal intersections's jacobians More...
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename Y >
void jacobian_apply_boundary (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, Y &y_s) const
 apply a boundary intersections's jacobian More...
 

Methods to extract the jacobian

template<typename EG , typename LFSU , typename X , typename LFSV , typename LocalMatrix >
void jacobian_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, LocalMatrix &mat) const
 get an element's jacobian More...
 
template<typename EG , typename LFSU , typename X , typename LFSV , typename LocalMatrix >
void jacobian_volume_post_skeleton (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, LocalMatrix &mat) const
 get an element's jacobian after the intersections have been handled More...
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename LocalMatrix >
void jacobian_skeleton (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, const LFSU &lfsu_n, const X &x_n, const LFSV &lfsv_n, LocalMatrix &mat_ss, LocalMatrix &mat_sn, LocalMatrix &mat_ns, LocalMatrix &mat_nn) const
 apply an internal intersections's jacobians More...
 
template<typename IG , typename LFSU , typename X , typename LFSV , typename LocalMatrix >
void jacobian_boundary (const IG &ig, const LFSU &lfsu_s, const X &x_s, const LFSV &lfsv_s, LocalMatrix &mat_ss) const
 get a boundary intersections's jacobian More...
 

Detailed Description

template<typename ApplyOp, typename... Args>
class Dune::PDELab::CombinedOperator< ApplyOp, Args >

A local operator to take combine different local operators.

Template Parameters
ApplyOpoperator implementing applyLops to call a particular local operator and combine them
Argsvariadic list of local operators

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