KASKADE 7 development version
Static Public Attributes | List of all members
VariationalFunctional::D2< row, col > Struct Template Reference

Provides static information about the submatrix blocks of the stiffness block matrix. More...

#include <variationalfunctional.hh>

Detailed Description

template<int row, int col>
struct VariationalFunctional::D2< row, col >

Provides static information about the submatrix blocks of the stiffness block matrix.

This block info concept defines the interface that is accessed by the assembler. This is not a base class, only a documentation!

The class provides static information about the row-col block of the second derivative.

Definition at line 342 of file variationalfunctional.hh.

Static Public Attributes

static bool const present
 Specifies the presence of a submatrix block. More...
 
static bool const symmetric
 Specifies whether the subblock is symmetric. More...
 
static const bool makePositive
 If this flag is true (and symmetric==true), the assembler will enforce positive semidefiniteness of all local matrices by projecting them onto the cone of psd matrices. More...
 
static bool const lumped
 Specifies whether only the diagonal of the subblock shall be assembled. Is true if only the diagonal of the second derivative shall be assembled. This is usually false, but can be set to true e.g. for hierarchical error estimation. More...
 
static int const derivatives
 Determines the highest derivatives that need to be available for evaluation of this block. More...
 

Member Data Documentation

◆ derivatives

template<int row, int col>
int const VariationalFunctional::D2< row, col >::derivatives
static

Determines the highest derivatives that need to be available for evaluation of this block.

The default is one, but it may be set to 0 or 2.

Definition at line 410 of file variationalfunctional.hh.

◆ lumped

template<int row, int col>
bool const VariationalFunctional::D2< row, col >::lumped
static

Specifies whether only the diagonal of the subblock shall be assembled. Is true if only the diagonal of the second derivative shall be assembled. This is usually false, but can be set to true e.g. for hierarchical error estimation.

Definition at line 403 of file variationalfunctional.hh.

◆ makePositive

template<int row, int col>
const bool VariationalFunctional::D2< row, col >::makePositive
static

If this flag is true (and symmetric==true), the assembler will enforce positive semidefiniteness of all local matrices by projecting them onto the cone of psd matrices.

If this is true, the variational functional must have a member function

template <int row, int col>
double makePositiveThreshold() const;

that defines the relative limit \( \alpha \) to which "positivity" is enforced: All eigenvalues \( \lambda \) are shifted (if necessary) to satisfy \( \lambda \ge \alpha \max(|\lambda_{\max}|,|\lambda_{\min}|) \). The default implementation in the base class FunctionalBase uses \( \alpha = -10\epsilon \), with machine precision \( \epsilon \).

While this destroys accuracy in the Taylor approximation, it can be very convenient in algorithms for nonconvex minimization.

Definition at line 395 of file variationalfunctional.hh.

◆ present

template<int row, int col>
bool const VariationalFunctional::D2< row, col >::present
static

Specifies the presence of a submatrix block.

Is true if that block is statically present, i.e. if variable \( u_{\mathrm{row}} \) and \( u_{\mathrm{col}}\) are nonlinearly coupled.

For second derivatives (problem type is VariationalFunctional), which are assumed to be always symmetric, only the lower triangular blocks need be present.

Announcing blocks as not present allows the assembler to save both memory and cput time as such blocks are completely ignored.

Definition at line 357 of file variationalfunctional.hh.

◆ symmetric

template<int row, int col>
bool const VariationalFunctional::D2< row, col >::symmetric
static

Specifies whether the subblock is symmetric.

Should be true if the block is conceptually symmetric, i.e. if EvaluationCache::d2 with row/col and arg1/arg2 exchanged returns the same value. Note that this does not imply that the Galerkin representation is symmetric, since using different ansatz/test spaces are possible.

Announcing a block to be symmetric allows the assembler to save both memory and cpu time by accessing only the lower half of the matrix block.

Note that if the problem type is VariationalFunctional, all diagonal blocks (row==col) are implicitly assumed to be symmetric.

Definition at line 374 of file variationalfunctional.hh.


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