DUNE PDELab (git)

Dune::PDELab::WeightedSumLocalOperator< K, Args > Class Template Reference

A local operator to take the weighted sum of other local operators. More...

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

Construction and modification

 WeightedSumLocalOperator (ArgPtrs &&lops, const Weights &weights_)
 
 WeightedSumLocalOperator (const Weights &weights_=Weights(1))
 construct a WeightedSumLocalOperator More...
 
 WeightedSumLocalOperator (Args &... lops_, const Weights &weights_=Weights(1))
 
 WeightedSumLocalOperator (Args &&... lops_, const Weights &weights_=Weights(1))
 
void setWeight (K w, std::size_t i)
 set the weight for the i'th component of the sum
 
getWeight (std::size_t i)
 get the weight for the i'th component of the sum
 

Construction and modification

void setSummand (typename std::tuple_element_t< i, ArgRefs > summand)
 set the i'th component of the sum
 
std::tuple_element_t< i, ArgRefs > getSummand ()
 get the i'th component of the sum
 

Methods for selective assembly

bool skip_entity (const EG &eg) const
 whether to assembly methods associated with a given entity
 
bool skip_intersection (const IG &ig) const
 whether to assembly methods associated with a given intersection
 

Methods for the sparsity pattern

void pattern_volume (const LFSU &lfsu, const LFSV &lfsv, LocalPattern &pattern) const
 get an element's contribution to the sparsity pattern More...
 
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...
 
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...
 
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

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...
 
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...
 
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...
 
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

void lambda_volume (const EG &eg, const LFSV &lfsv, R &r) const
 get an element's contribution to lambda More...
 
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...
 
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...
 
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

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...
 
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...
 
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...
 
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

void jacobian_volume (const EG &eg, const LFSU &lfsu, const X &x, const LFSV &lfsv, LocalMatrix &mat) const
 get an element's jacobian More...
 
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...
 
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...
 
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...
 

Methods for instationary problems

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

Control flags

enum  
 Whether to do selective cell assembly, i.e. whether or not skip_entity() should be called.
 
enum  
 Whether to do selective intersection assembly, i.e. whether or not skip_intersection() should be called.
 
enum  
 Whether to assemble the pattern on the elements, i.e. whether or not pattern_volume() should be called.
 
enum  
 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.
 
enum  
 Whether to assemble the pattern on the interior intersections, i.e. whether or not pattern_skeleton() should be called.
 
enum  
 Whether to assemble the pattern on the boundary intersections, i.e. whether or not pattern_boundary() should be called.
 
enum  
 Whether to call the local operator's alpha_volume(), jacobian_apply_volume() and jacobian_volume().
 
enum  
 Whether to call the local operator's alpha_volume_post_skeleton(), jacobian_apply_volume_post_skeleton() and jacobian_volume_post_skeleton().
 
enum  
 Whether to call the local operator's alpha_skeleton(), jacobian_apply_skeleton() and jacobian_skeleton().
 
enum  
 Whether to call the local operator's alpha_boundary(), jacobian_apply_boundary() and jacobian_boundary().
 
enum  
 Whether to call the local operator's lambda_volume().
 
enum  
 Whether to call the local operator's lambda_volume_post_skeleton().
 
enum  
 Whether to call the local operator's lambda_skeleton().
 
enum  
 Whether to call the local operator's lambda_boundary().
 
enum  
 Whether to visit the skeleton methods from both sides.
 
enum  
 Whether this is a linear operator.
 

Detailed Description

template<typename K, typename... Args>
class Dune::PDELab::WeightedSumLocalOperator< K, Args >

A local operator to take the weighted sum of other local operators.

If the weight for one summand is zero, calls to that local operators evaluation and pattern methods are eliminated at run-time.

Template Parameters
KType of the scaling factors.
Argsvariadic list of local operators

Member Function Documentation

◆ alpha_boundary()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::alpha_boundary ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const LFSV &  lfsv_s,
R &  r_s 
) const
inlineinherited

get a boundary intersections's contribution to alpha

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ alpha_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::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
inlineinherited

get an internal intersections's contribution to alpha

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ alpha_volume()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::alpha_volume ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
R &  r 
) const
inlineinherited

get an element's contribution to alpha

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ alpha_volume_post_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::alpha_volume_post_skeleton ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
R &  r 
) const
inlineinherited

get an element's contribution to alpha after the intersections have been handled

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_apply_boundary()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::jacobian_apply_boundary ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const LFSV &  lfsv_s,
Y &  y_s 
) const
inlineinherited

apply a boundary intersections's jacobian

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_apply_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::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
inlineinherited

apply an internal intersections's jacobians

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_apply_volume()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::jacobian_apply_volume ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
Y &  y 
) const
inlineinherited

apply an element's jacobian

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_apply_volume_post_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::jacobian_apply_volume_post_skeleton ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
Y &  y 
) const
inlineinherited

apply an element's jacobian after the intersections have been handled

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_boundary()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::jacobian_boundary ( const IG &  ig,
const LFSU &  lfsu_s,
const X &  x_s,
const LFSV &  lfsv_s,
LocalMatrix mat_ss 
) const
inlineinherited

get a boundary intersections's jacobian

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::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
inlineinherited

apply an internal intersections's jacobians

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_volume()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::jacobian_volume ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
LocalMatrix mat 
) const
inlineinherited

get an element's jacobian

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ jacobian_volume_post_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::jacobian_volume_post_skeleton ( const EG &  eg,
const LFSU &  lfsu,
const X &  x,
const LFSV &  lfsv,
LocalMatrix mat 
) const
inlineinherited

get an element's jacobian after the intersections have been handled

Note
Summands with zero weight don't contribute to the jacobian, and the calls to the evaluation methods are eliminated at run-time.

◆ lambda_boundary()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::lambda_boundary ( const IG &  ig,
const LFSV &  lfsv_s,
R &  r_s 
) const
inlineinherited

get a boundary intersections's contribution to lambda

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ lambda_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::lambda_skeleton ( const IG &  ig,
const LFSV &  lfsv_s,
const LFSV &  lfsv_n,
R &  r_s,
R &  r_n 
) const
inlineinherited

get an internal intersections's contribution to lambda

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ lambda_volume()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::lambda_volume ( const EG &  eg,
const LFSV &  lfsv,
R &  r 
) const
inlineinherited

get an element's contribution to lambda

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ lambda_volume_post_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::lambda_volume_post_skeleton ( const EG &  eg,
const LFSV &  lfsv,
R &  r 
) const
inlineinherited

get an element's contribution to lambda after the intersections have been handled

Note
Summands with zero weight don't contribute to the residual, and the calls to the evaluation methods are eliminated at run-time.

◆ pattern_boundary()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::pattern_boundary ( const LFSU &  lfsu_s,
const LFSV &  lfsv_s,
LocalPattern &  pattern_ss 
) const
inlineinherited

get a boundary intersection's contribution to the sparsity pattern

Note
Summands with zero weight don't contribute to the sparsity pattern, and the calls to the pattern methods are eliminated at run-time.

◆ pattern_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::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
inlineinherited

get an internal intersection's contribution to the sparsity pattern

Note
Summands with zero weight don't contribute to the sparsity pattern, and the calls to the pattern methods are eliminated at run-time.

◆ pattern_volume()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::pattern_volume ( const LFSU &  lfsu,
const LFSV &  lfsv,
LocalPattern &  pattern 
) const
inlineinherited

get an element's contribution to the sparsity pattern

Note
Summands with zero weight don't contribute to the sparsity pattern, and the calls to the pattern methods are eliminated at run-time.

◆ pattern_volume_post_skeleton()

void Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::pattern_volume_post_skeleton ( const LFSU &  lfsu,
const LFSV &  lfsv,
LocalPattern &  pattern 
) const
inlineinherited

get an element's contribution to the sparsity pattern after the intersections have been handled

Note
Summands with zero weight don't contribute to the sparsity pattern, and the calls to the pattern methods are eliminated at run-time.

◆ suggestTimestep()

RealType Dune::PDELab::CombinedOperator< WeightedSumLocalOperator< K, Args... > , Args >::suggestTimestep ( RealType  dt) const
inlineinherited

to be called after stage 1

Note
This operator simply chains suggestTimestep() methods of all the component local operators together and hopes that the result will be meaningful.

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.111.3 (Nov 11, 23:29, 2024)