HyperHDG
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t > Class Template Reference

Combine local solver and global information for nonlinear eigenvalue problems. More...

#include <nonlinear_eigenvalue.hxx>

Collaboration diagram for GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >:
Collaboration graph
[legend]

Public Member Functions

 NonlinearEigenvalue (const typename TopologyT::constructor_value_type &construct_topo, const typename GeometryT::constructor_value_type &construct_geom, const typename LocalSolverT::constructor_value_type &construct_loc_sol)
 Abstract problem constructor. More...
 
 NonlinearEigenvalue (const typename TopologyT::constructor_value_type &construct_topo, const typename LocalSolverT::constructor_value_type &construct_loc_sol)
 Abstract problem constructor. More...
 
 NonlinearEigenvalue (const typename TopologyT::constructor_value_type &construct_topo)
 Abstract problem constructor. More...
 
template<typename hyNode_index_t = dof_index_t>
LargeVecT trace_to_flux (const LargeVecT &x_vec, const dof_value_t eig=0.)
 Evaluate condensed matrix-vector product. More...
 
template<typename hyNode_index_t = dof_index_t>
LargeVecT jacobian_of_trace_to_flux (const LargeVecT &x_vec, const dof_value_t eig, const LargeVecT &x_val, const dof_value_t eig_val)
 Evaluate condensed matrix-vector product. More...
 
template<typename hyNode_index_t = dof_index_t>
LargeVecT make_initial (const LargeVecT &x_vec, const dof_value_t eig=0.)
 Create initial starting value for Newton's methods. More...
 
dof_index_t size_of_system () const
 Determine size of condensed system for the skeletal unknowns. More...
 
std::string plot_option (const std::string &option, std::string value="")
 Set plot option and return old plot option. More...
 
void plot_solution (const std::vector< dof_value_t > &lambda, const dof_value_t time=0.)
 Plot solution in vtu format. More...
 
unsigned int get_refinement ()
 Return refinement level. More...
 
void set_refinement (unsigned int level)
 Set refinement level. More...
 

Private Types

using dof_value_t = typename LargeVecT::value_type
 Floating type is determined by floating type of large vector's entries. More...
 

Private Member Functions

 HAS_MEMBER_FUNCTION (trace_to_flux, has_trace_to_flux)
 Prepare struct to check for function to exist (cf. compile_time_tricks.hxx). More...
 
 HAS_MEMBER_FUNCTION (jacobian_of_trace_to_flux, has_jacobian_of_trace_to_flux)
 Prepare struct to check for function to exist (cf. compile_time_tricks.hxx). More...
 
 HAS_MEMBER_FUNCTION (make_initial, has_make_initial)
 Prepare struct to check for function to exist (cf. compile_time_tricks.hxx). More...
 

Private Attributes

HDGHyperGraph< LocalSolverT::n_glob_dofs_per_node(), TopologyT, GeometryT, NodeDescriptorT, typename LocalSolverT::data_type > hyper_graph_
 Instantiation of a hypergraph. More...
 
const LocalSolverT local_solver_
 Instantiation of a local solver. More...
 
PlotOptions plot_options
 Struct encoding the options for plotting. More...
 

Detailed Description

template<class TopologyT, class GeometryT, class NodeDescriptorT, class LocalSolverT, typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
class GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >

Combine local solver and global information for nonlinear eigenvalue problems.


Template Parameters
TopologyTClass type containing topological information.
GeometryTClass type containing geometrical information.
NodeDescriptorTClass type containing the information of nodes of hyperedges.
LocalSolverTClass type of the local solver.
LargeVecTClas type of large, global vector.
dof_index_tIndex type of hyperedges. Default is unsigned int.
Authors
Guido Kanschat, Heidelberg University, 2019–2020.
Andreas Rupp, Heidelberg University, 2019–2020.

Member Typedef Documentation

◆ dof_value_t

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
using GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::dof_value_t = typename LargeVecT::value_type
private

Floating type is determined by floating type of large vector's entries.


Constructor & Destructor Documentation

◆ NonlinearEigenvalue() [1/3]

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::NonlinearEigenvalue ( const typename TopologyT::constructor_value_type &  construct_topo,
const typename GeometryT::constructor_value_type &  construct_geom,
const typename LocalSolverT::constructor_value_type &  construct_loc_sol 
)
inline

Abstract problem constructor.


Constructor for class containing a HyperGraph and a local solver that solve a PDE on a hyperedge.

Parameters
construct_topoInformation to construct a topology.
construct_geomInformation to construct a geometry.
construct_loc_solInformation to construct a local solver.

◆ NonlinearEigenvalue() [2/3]

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::NonlinearEigenvalue ( const typename TopologyT::constructor_value_type &  construct_topo,
const typename LocalSolverT::constructor_value_type &  construct_loc_sol 
)
inline

Abstract problem constructor.


Constructor for class containing a HyperGraph and a local solver that solve a PDE on a hyperedge.

Parameters
construct_topoInformation to construct a topology.
construct_loc_solInformation to construct a local solver.

◆ NonlinearEigenvalue() [3/3]

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::NonlinearEigenvalue ( const typename TopologyT::constructor_value_type &  construct_topo)
inline

Abstract problem constructor.


Constructor for class containing a HyperGraph and a local solver that solve a PDE on a hyperedge.

Parameters
construct_topoInformation to construct a topology.

Member Function Documentation

◆ get_refinement()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
unsigned int GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::get_refinement ( )
inline

Return refinement level.


◆ HAS_MEMBER_FUNCTION() [1/3]

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::HAS_MEMBER_FUNCTION ( jacobian_of_trace_to_flux  ,
has_jacobian_of_trace_to_flux   
)
private

Prepare struct to check for function to exist (cf. compile_time_tricks.hxx).


◆ HAS_MEMBER_FUNCTION() [2/3]

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::HAS_MEMBER_FUNCTION ( make_initial  ,
has_make_initial   
)
private

Prepare struct to check for function to exist (cf. compile_time_tricks.hxx).


◆ HAS_MEMBER_FUNCTION() [3/3]

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::HAS_MEMBER_FUNCTION ( trace_to_flux  ,
has_trace_to_flux   
)
private

Prepare struct to check for function to exist (cf. compile_time_tricks.hxx).


◆ jacobian_of_trace_to_flux()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
template<typename hyNode_index_t = dof_index_t>
LargeVecT GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::jacobian_of_trace_to_flux ( const LargeVecT &  x_vec,
const dof_value_t  eig,
const LargeVecT &  x_val,
const dof_value_t  eig_val 
)
inline

Evaluate condensed matrix-vector product.


This function corresponds to evaluating the Jacobian at point x_val, eig_val in direction x_vec, eig.

Parameters
x_vecDirection in which Jacobian is evaluated.
eigDirection in which Jacobian is evaluated.
x_valPoint at which Jacobian is evaluated.
eig_valPoint at which Jacobian is evaluated.
Return values
y_vecCorresponds to directional derivative.
Here is the call graph for this function:

◆ make_initial()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
template<typename hyNode_index_t = dof_index_t>
LargeVecT GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::make_initial ( const LargeVecT &  x_vec,
const dof_value_t  eig = 0. 
)
inline

Create initial starting value for Newton's methods.


Parameters
x_vecA vector containing the input vector \(x\) which should be zero.
eigEigenvalue (approximation).
Return values
y_vecA vector containing initial flux vector.
Here is the call graph for this function:

◆ plot_option()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
std::string GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::plot_option ( const std::string &  option,
std::string  value = "" 
)
inline

Set plot option and return old plot option.


Function to set and / or read the current plot option.

Parameters
optionA std::string containing the plot option to be considered.
valueA std::string containing the new value of the considered option. If empty, the old value is kept.
Return values
opt_valueA std::string containing the value of the plot option.
Here is the call graph for this function:

◆ plot_solution()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
void GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::plot_solution ( const std::vector< dof_value_t > &  lambda,
const dof_value_t  time = 0. 
)
inline

Plot solution in vtu format.


Function that plots the solution of the problem to a predefined file.

Parameters
lambdaA vector of unknowns containing the data vector.
timeTime.
Return values
fileA file in the output directory.
Here is the call graph for this function:

◆ set_refinement()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
void GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::set_refinement ( unsigned int  level)
inline

Set refinement level.


◆ size_of_system()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
dof_index_t GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::size_of_system ( ) const
inline

Determine size of condensed system for the skeletal unknowns.


Function that returns the size \(n\) of the \(n \times n\) linear, sparse system \(Ax = b\) that is solved by the program in a matrix-free fashion.

This function is needed to define a LinearOperator from Python's scipy.sparse.linalg package which can be used to define iterative solvers for sparse systems.

Return values
nAn int which Python needs and actually is a parsed unsigned int.

◆ trace_to_flux()

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
template<typename hyNode_index_t = dof_index_t>
LargeVecT GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::trace_to_flux ( const LargeVecT &  x_vec,
const dof_value_t  eig = 0. 
)
inline

Evaluate condensed matrix-vector product.


This function corresponds to the evaluation of the residual. Here, the vector contains the eigenfunction representation, while the floating point is the eigenvalue.

Parameters
x_vecA vector containing the input vector.
eigEigenvalue.
Return values
y_vecA vector containing the residual.
Here is the call graph for this function:

Member Data Documentation

◆ hyper_graph_

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
HDGHyperGraph<LocalSolverT::n_glob_dofs_per_node(), TopologyT, GeometryT, NodeDescriptorT, typename LocalSolverT::data_type> GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::hyper_graph_
private

Instantiation of a hypergraph.


◆ local_solver_

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
const LocalSolverT GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::local_solver_
private

Instantiation of a local solver.


◆ plot_options

template<class TopologyT , class GeometryT , class NodeDescriptorT , class LocalSolverT , typename LargeVecT = std::vector<double>, typename dof_index_t = unsigned int>
PlotOptions GlobalLoop::NonlinearEigenvalue< TopologyT, GeometryT, NodeDescriptorT, LocalSolverT, LargeVecT, dof_index_t >::plot_options
private

Struct encoding the options for plotting.



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