1#ifndef DISCRETE_BRIDGE_HH
2#define DISCRETE_BRIDGE_HH
6#include "dune/common/fmatrix.hh"
7#include "dune/istl/bvector.hh"
22template<
class Functional>
26 typedef typename Functional::RT
RT;
37 fu.setOrigin(getImpl<DomainElement>(*x));
48 createLinearizedSystem();
51 virtual void getMatrixBlocks(MatrixAsTriplet<RT>& mat_,
int rbegin,
int rend,
int cbegin,
int cend)
const
53 createLinearizedSystem();
54 for(
int i=rbegin; i<rend; i++)
55 for(
int j=cbegin; j<cend; j++)
56 mat_.addEntry(i-rbegin,j-cbegin,mat[i][j]);
58 virtual void getRHSBlocks(std::vector<RT>& rhs_,
int rbegin,
int rend)
const
61 rhs_.resize(rend-rbegin);
62 for(
int i=0; i<rend-rbegin;++i)
63 rhs_[i] = rhs[i+rbegin];
72 AbstractFunctionSpaceElement
const&
getOrigin()
const {
return *x;}
74 void flush() { mflushed=
true; rhs.resize(0); mat*=0.0;}
80 void createLinearizedSystem()
const
91 void createRHS()
const
97 mutable std::vector<RT> rhs;
98 std::std::unique_ptr<AbstractFunctionSpaceElement > x;
100 mutable typename Functional::Matrix mat;
101 mutable bool mflushed;
104 template<
class T,
class Functional>
DomainElement domain_type
Linearization Implementation for a fixed system, i.e. an inherently finite dimensional system,...
Implementation const & getLinImpl() const
return the implementation
virtual int nColBlocks() const
virtual void getMatrixBlocks(MatrixAsTriplet< RT > &mat_, int rbegin, int rend, int cbegin, int cend) const
Functional Implementation
virtual void getRHSBlocks(std::vector< RT > &rhs_, int rbegin, int rend) const
int rows(int rbegin, int rend) const
Functional::Vector ImageElement
Functional::Vector DomainElement
int cols(int cbegin, int cend) const
AbstractFunctionSpaceElement const & getOrigin() const
FixedSystemLinearization(Functional &fu_, AbstractFunctionSpaceElement const &x_)
virtual int nRowBlocks() const
virtual ~FixedSystemLinearization()
FixedSystemLinearization< Functional > Linearization
Dune::FieldVector< T, n > max(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise maximum.
Dune::FieldVector< T, n > min(Dune::FieldVector< T, n > x, Dune::FieldVector< T, n > const &y)
Componentwise minimum.
Dune::BlockVector< Dune::FieldVector< Scalar, n >, Allocator > BlockVector
Dune::FieldVector< Scalar, dim > Vector
Bridge classes that connect low level FE algorithms to higher level algorithms.