|
BEM++
2.0
|
Integral operator with weak form assembled from several pieces. More...
#include </home/wojtek/Projects/BEM/bempp-sven/bempp/lib/assembly/synthetic_integral_operator.hpp>
Public Types | |
| typedef Base::BasisFunctionType | BasisFunctionType |
| Type of the values of the (components of the) basis functions into which functions acted upon by the operator are expanded. More... | |
| typedef Base::ResultType | ResultType |
| Type used to represent elements of the weak form of the operator. More... | |
| typedef Base::CoordinateType | CoordinateType |
| Type used to represent coordinates. More... | |
| typedef Base::QuadratureStrategy | QuadratureStrategy |
| Type of the appropriate instantiation of Fiber::QuadratureStrategy. More... | |
|
typedef Fiber::LocalAssemblerForOperators < ResultType > | LocalAssembler |
Public Types inherited from Bempp::AbstractBoundaryOperator< BasisFunctionType_, ResultType_ > | |
| typedef BasisFunctionType_ | BasisFunctionType |
| Type of the values of the (components of the) basis functions into which functions acted upon by the operator are expanded. | |
| typedef ResultType_ | ResultType |
| Type used to represent elements of the weak form of the operator. | |
|
typedef ScalarTraits < ResultType >::RealType | CoordinateType |
| Type used to represent coordinates. | |
|
typedef Fiber::QuadratureStrategy < BasisFunctionType, ResultType, GeometryFactory > | QuadratureStrategy |
| Type of the appropriate instantiation of Fiber::QuadratureStrategy. | |
Public Member Functions | |
| SyntheticIntegralOperator (const std::vector< BoundaryOperator< BasisFunctionType, ResultType > > &testLocalOps, const BoundaryOperator< BasisFunctionType, ResultType > &integralOp, const std::vector< BoundaryOperator< BasisFunctionType, ResultType > > &trialLocalOps, const std::string &label="", int syntheseSymmetry=NO_SYMMETRY) | |
| Constructor. More... | |
| virtual bool | isLocal () const |
| Return whether this operator is local. More... | |
Public Member Functions inherited from Bempp::AbstractBoundaryOperator< BasisFunctionType_, ResultType_ > | |
| AbstractBoundaryOperator (const shared_ptr< const Space< BasisFunctionType > > &domain, const shared_ptr< const Space< BasisFunctionType > > &range, const shared_ptr< const Space< BasisFunctionType > > &dualToRange, const std::string &label, int symmetry) | |
| Constructor. More... | |
| virtual | ~AbstractBoundaryOperator () |
| Destructor. | |
| virtual BEMPP_DEPRECATED shared_ptr< const AbstractBoundaryOperatorId > | id () const |
| Return the identifier of this operator. More... | |
| shared_ptr< const Space < BasisFunctionType > > | domain () const |
| Domain. More... | |
| shared_ptr< const Space < BasisFunctionType > > | range () const |
| Range. More... | |
| shared_ptr< const Space < BasisFunctionType > > | dualToRange () const |
| Dual to range. More... | |
| std::string | label () const |
| Return the label of the operator. | |
| int | symmetry () const |
| Return the symmetry properties of the operator. More... | |
| shared_ptr < DiscreteBoundaryOperator < ResultType_ > > | assembleWeakForm (const Context< BasisFunctionType_, ResultType_ > &context) const |
| Assemble and return the operator's weak form. More... | |
Static Public Member Functions | |
| static void | getContextsForInternalAndAuxiliaryOperators (const shared_ptr< const Context< BasisFunctionType, ResultType > > &context, shared_ptr< const Context< BasisFunctionType, ResultType > > &internalContext, shared_ptr< const Context< BasisFunctionType, ResultType > > &auxContext) |
| Get contexts appropriate for construction of internal integral operators and auxiliary local operators. | |
Static Public Member Functions inherited from Bempp::AbstractBoundaryOperator< BasisFunctionType_, ResultType_ > | |
| static std::string | uniqueLabel () |
| Generate and return a new unique label "OpN", where N is a number. | |
Protected Member Functions | |
| virtual shared_ptr < DiscreteBoundaryOperator < ResultType_ > > | assembleWeakFormImpl (const Context< BasisFunctionType, ResultType > &context) const |
| Assemble and return the operator's weak form. More... | |
Protected Member Functions inherited from Bempp::AbstractBoundaryOperator< BasisFunctionType_, ResultType_ > | |
| void | collectDataForAssemblerConstruction (const AssemblyOptions &options, shared_ptr< Fiber::RawGridGeometry< CoordinateType > > &testRawGeometry, shared_ptr< Fiber::RawGridGeometry< CoordinateType > > &trialRawGeometry, shared_ptr< GeometryFactory > &testGeometryFactory, shared_ptr< GeometryFactory > &trialGeometryFactory, shared_ptr< std::vector< const Fiber::Shapeset< BasisFunctionType_ > * > > &testShapesets, shared_ptr< std::vector< const Fiber::Shapeset< BasisFunctionType_ > * > > &trialShapesets, shared_ptr< Fiber::OpenClHandler > &openClHandler, bool &cacheSingularIntegrals) const |
| Given an AssemblyOptions object, construct objects necessary for subsequent local assembler construction. | |
| void | collectOptionsIndependentDataForAssemblerConstruction (shared_ptr< Fiber::RawGridGeometry< CoordinateType > > &testRawGeometry, shared_ptr< Fiber::RawGridGeometry< CoordinateType > > &trialRawGeometry, shared_ptr< GeometryFactory > &testGeometryFactory, shared_ptr< GeometryFactory > &trialGeometryFactory, shared_ptr< std::vector< const Fiber::Shapeset< BasisFunctionType_ > * > > &testShapesets, shared_ptr< std::vector< const Fiber::Shapeset< BasisFunctionType_ > * > > &trialShapesets) const |
| Construct those objects necessary for subsequent local assembler construction that are independent from assembly options. | |
| void | collectOptionsDependentDataForAssemblerConstruction (const AssemblyOptions &options, const shared_ptr< Fiber::RawGridGeometry< CoordinateType > > &testRawGeometry, const shared_ptr< Fiber::RawGridGeometry< CoordinateType > > &trialRawGeometry, shared_ptr< Fiber::OpenClHandler > &openClHandler, bool &cacheSingularIntegrals) const |
| Construct those objects necessary for subsequent local assembler construction that depend on assembly options. | |
Private Types | |
|
typedef AbstractBoundaryOperator < BasisFunctionType_, ResultType_ > | Base |
Integral operator with weak form assembled from several pieces.
This class can be used to construct an integral operator assembled in the following way [1], which in ACA mode may be less time-consuming, though more memory-consuming. Suppose the formula for the
th entry of the weak form of the operator in question can be written as
where
and
are scalar-valued transformations of test and trial shape functions (e.g. basis functions, individual components of their surface curls etc.) and
kernel functions. Let
and
be two boundary-element spaces spanned by basis functions
and
such that the support of each basis function consists of a single element of the respective mesh; for example,
and
can be the spaces of piecewise constant or linear, discontinuous functions defined on
and
. Provided that
and
for all
, the matrix
can be rewritten as
with the entries of the individual matrices given by
All these matrices except
are sparse, and ACA-based assembly of
can potentially take less time than that of
because each entry of the former is an integral over a single pair of elements, while the entries of
may contain contributions from many element pairs.
In the current implementation we only handle the case of equal
, i.e.
for all
. In addition, we coalesce
and
into single sparse matrices.
[1] This method was proposed by Lars Kielhorn in "On single- and multi-trace implementations for scattering problems with BETL", 10. Workshop on Fast Boundary Element Methods in Industrial Applications, Soellerhaus 27-30 September 2012.
| typedef Base::BasisFunctionType Bempp::SyntheticIntegralOperator< BasisFunctionType_, ResultType_ >::BasisFunctionType |
Type of the values of the (components of the) basis functions into which functions acted upon by the operator are expanded.
| typedef Base::CoordinateType Bempp::SyntheticIntegralOperator< BasisFunctionType_, ResultType_ >::CoordinateType |
Type used to represent coordinates.
| typedef Base::QuadratureStrategy Bempp::SyntheticIntegralOperator< BasisFunctionType_, ResultType_ >::QuadratureStrategy |
Type of the appropriate instantiation of Fiber::QuadratureStrategy.
| typedef Base::ResultType Bempp::SyntheticIntegralOperator< BasisFunctionType_, ResultType_ >::ResultType |
Type used to represent elements of the weak form of the operator.
| Bempp::SyntheticIntegralOperator< BasisFunctionType, ResultType >::SyntheticIntegralOperator | ( | const std::vector< BoundaryOperator< BasisFunctionType, ResultType > > & | testLocalOps, |
| const BoundaryOperator< BasisFunctionType, ResultType > & | integralOp, | ||
| const std::vector< BoundaryOperator< BasisFunctionType, ResultType > > & | trialLocalOps, | ||
| const std::string & | label = "", |
||
| int | syntheseSymmetry = NO_SYMMETRY |
||
| ) |
Constructor.
| [in] | testLocalOps | Vector of the operators , as described above. |
| [in] | integralOp | The operator , as described above. |
| [in] | trialLocalOps | Vector of the operators , as described above. |
| [in] | label | (Optional) operator label. |
| [in] | syntheseSymmetry | Symmetry flag (see below). |
All operators passed as elements of testLocalOps and trialLocalOps must be local.
If syntheseSymmetry is equal to NO_SYMMETRY, either testLocalOps or trialLocalOps may be empty. In the former case,
is assembled as
; in the latter, as
. testLocalOps and trialLocalOps must not be empty at the same time.
If syntheseSymmetry contains the flag SYMMETRIC and/or HERMITIAN, trialLocalOps should be left empty and
are taken as the transposes or Hermitian transposes of
.
|
protectedvirtual |
Assemble and return the operator's weak form.
This virtual function is invoked by assembleWeakForm() to do the actual work.
Implements Bempp::AbstractBoundaryOperator< BasisFunctionType_, ResultType_ >.
References Bempp::Context< BasisFunctionType, ResultType >::assemblyOptions(), and Bempp::AssemblyOptions::verbosityLevel().
|
virtual |
Return whether this operator is local.
Suppose that an operator
acting on a function
produces another function
. We say that
is local if the value of
at any point
depends only on the values of
in an infinitesimal neighbourhood of
.
Multiplicative and differential operators are local and discretization of their weak forms with finite elements leads to sparse matrices. Conversely, integral operators are in general non-local and discretization of their weak forms leads to dense matrices.
Implements Bempp::AbstractBoundaryOperator< BasisFunctionType_, ResultType_ >.
1.8.5