Class xlifepp::DoubleIntgBilinearForm#

class DoubleIntgBilinearForm : public xlifepp::BasicBilinearForm#

Inheritence diagram for xlifepp::DoubleIntgBilinearForm:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "2" [label="xlifepp::BasicBilinearForm" tooltip="xlifepp::BasicBilinearForm"] "1" [label="xlifepp::DoubleIntgBilinearForm" tooltip="xlifepp::DoubleIntgBilinearForm" fillcolor="#BFBFBF"] "1" -> "2" [dir=forward tooltip="public-inheritance"] }

Collaboration diagram for xlifepp::DoubleIntgBilinearForm:

digraph { graph [bgcolor="#00000000"] node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2] edge [color="#1414CE"] "28" [label="xlifepp::Collection< string_t >" tooltip="xlifepp::Collection< string_t >"] "21" [label="xlifepp::Matrix< real_t >" tooltip="xlifepp::Matrix< real_t >"] "25" [label="xlifepp::Vector< real_t >" tooltip="xlifepp::Vector< real_t >"] "36" [label="xlifepp::Vector< xlifepp::Vector< real_t > >" tooltip="xlifepp::Vector< xlifepp::Vector< real_t > >"] "41" [label="std::list< std::pair< number_t, real_t > >" tooltip="std::list< std::pair< number_t, real_t > >"] "17" [label="std::map< number_t, std::vector< number_t > >" tooltip="std::map< number_t, std::vector< number_t > >"] "15" [label="std::map< number_t, xlifepp::Geometry * >" tooltip="std::map< number_t, xlifepp::Geometry * >"] "40" [label="std::map< string_t, number_t >" tooltip="std::map< string_t, number_t >"] "59" [label="std::map< string_t, std::pair< ValueType, StrucType > >" tooltip="std::map< string_t, std::pair< ValueType, StrucType > >"] "56" [label="std::map< string_t, structPair >" tooltip="std::map< string_t, structPair >"] "61" [label="std::map< xlifepp::GeomElement *, std::set< number_t > >" tooltip="std::map< xlifepp::GeomElement *, std::set< number_t > >"] "42" [label="std::list< T >" tooltip="std::list< T >"] "16" [label="std::map< K, T >" tooltip="std::map< K, T >"] "12" [label="std::vector< T >" tooltip="std::vector< T >"] "31" [label="std::vector< T >" tooltip="std::vector< T >"] "24" [label="std::vector< K >" tooltip="std::vector< K >"] "67" [label="std::vector< OpkuvValPair >" tooltip="std::vector< OpkuvValPair >"] "11" [label="std::vector< RealPair >" tooltip="std::vector< RealPair >"] "65" [label="std::vector< complex_t >" tooltip="std::vector< complex_t >"] "47" [label="std::vector< const xlifepp::GeomDomain * >" tooltip="std::vector< const xlifepp::GeomDomain * >"] "27" [label="std::vector< const xlifepp::Transformation * >" tooltip="std::vector< const xlifepp::Transformation * >"] "32" [label="std::vector< number_t >" tooltip="std::vector< number_t >"] "22" [label="std::vector< real_t >" tooltip="std::vector< real_t >"] "46" [label="std::vector< std::vector< GeoNumPair > >" tooltip="std::vector< std::vector< GeoNumPair > >"] "18" [label="std::vector< std::vector< int_t > >" tooltip="std::vector< std::vector< int_t > >"] "29" [label="std::vector< string_t >" tooltip="std::vector< string_t >"] "53" [label="std::vector< xlifepp::DifferentialOperator * >" tooltip="std::vector< xlifepp::DifferentialOperator * >"] "45" [label="std::vector< xlifepp::GeomDomain * >" tooltip="std::vector< xlifepp::GeomDomain * >"] "44" [label="std::vector< xlifepp::GeomElement * >" tooltip="std::vector< xlifepp::GeomElement * >"] "70" [label="std::vector< xlifepp::IntgMeth >" tooltip="std::vector< xlifepp::IntgMeth >"] "39" [label="std::vector< xlifepp::Parameter * >" tooltip="std::vector< xlifepp::Parameter * >"] "14" [label="std::vector< xlifepp::Point >" tooltip="std::vector< xlifepp::Point >"] "48" [label="std::vector< xlifepp::Space * >" tooltip="std::vector< xlifepp::Space * >"] "33" [label="std::vector< xlifepp::Transformation * >" tooltip="std::vector< xlifepp::Transformation * >"] "49" [label="std::vector< xlifepp::Unknown * >" tooltip="std::vector< xlifepp::Unknown * >"] "37" [label="std::vector< xlifepp::Vector< real_t > >" tooltip="std::vector< xlifepp::Vector< real_t > >"] "2" [label="xlifepp::BasicBilinearForm" tooltip="xlifepp::BasicBilinearForm"] "10" [label="xlifepp::BoundingBox" tooltip="xlifepp::BoundingBox"] "30" [label="xlifepp::Collection< T >" tooltip="xlifepp::Collection< T >"] "52" [label="xlifepp::DifferentialOperator" tooltip="xlifepp::DifferentialOperator"] "7" [label="xlifepp::DomainInfo" tooltip="xlifepp::DomainInfo"] "1" [label="xlifepp::DoubleIntgBilinearForm" tooltip="xlifepp::DoubleIntgBilinearForm" fillcolor="#BFBFBF"] "60" [label="xlifepp::Extension" tooltip="xlifepp::Extension"] "19" [label="xlifepp::ExtrusionData" tooltip="xlifepp::ExtrusionData"] "58" [label="xlifepp::Function" tooltip="xlifepp::Function"] "43" [label="xlifepp::GeoNode" tooltip="xlifepp::GeoNode"] "6" [label="xlifepp::GeomDomain" tooltip="xlifepp::GeomDomain"] "9" [label="xlifepp::Geometry" tooltip="xlifepp::Geometry"] "68" [label="xlifepp::IntegrationMethod" tooltip="xlifepp::IntegrationMethod"] "69" [label="xlifepp::IntegrationMethods" tooltip="xlifepp::IntegrationMethods"] "63" [label="xlifepp::Kernel" tooltip="xlifepp::Kernel"] "64" [label="xlifepp::KernelExpansion" tooltip="xlifepp::KernelExpansion"] "50" [label="xlifepp::KernelOperatorOnUnknowns" tooltip="xlifepp::KernelOperatorOnUnknowns"] "66" [label="xlifepp::LcKernelOperatorOnUnknowns" tooltip="xlifepp::LcKernelOperatorOnUnknowns"] "23" [label="xlifepp::Matrix< K >" tooltip="xlifepp::Matrix< K >"] "8" [label="xlifepp::Mesh" tooltip="xlifepp::Mesh"] "13" [label="xlifepp::MinimalBox" tooltip="xlifepp::MinimalBox"] "54" [label="xlifepp::Operand" tooltip="xlifepp::Operand"] "57" [label="xlifepp::OperatorOnFunction" tooltip="xlifepp::OperatorOnFunction"] "62" [label="xlifepp::OperatorOnKernel" tooltip="xlifepp::OperatorOnKernel"] "51" [label="xlifepp::OperatorOnUnknown" tooltip="xlifepp::OperatorOnUnknown"] "38" [label="xlifepp::Parameters" tooltip="xlifepp::Parameters"] "35" [label="xlifepp::Parametrization" tooltip="xlifepp::Parametrization"] "34" [label="xlifepp::Point" tooltip="xlifepp::Point"] "4" [label="xlifepp::Space" tooltip="xlifepp::Space"] "5" [label="xlifepp::SpaceInfo" tooltip="xlifepp::SpaceInfo"] "20" [label="xlifepp::Transformation" tooltip="xlifepp::Transformation"] "3" [label="xlifepp::Unknown" tooltip="xlifepp::Unknown"] "55" [label="xlifepp::Value" tooltip="xlifepp::Value"] "26" [label="xlifepp::Vector< K >" tooltip="xlifepp::Vector< K >"] "28" -> "29" [dir=forward tooltip="public-inheritance"] "28" -> "30" [dir=forward tooltip="template-instance"] "21" -> "22" [dir=forward tooltip="public-inheritance"] "21" -> "23" [dir=forward tooltip="template-instance"] "25" -> "22" [dir=forward tooltip="public-inheritance"] "25" -> "26" [dir=forward tooltip="template-instance"] "36" -> "37" [dir=forward tooltip="public-inheritance"] "36" -> "26" [dir=forward tooltip="template-instance"] "41" -> "42" [dir=forward tooltip="template-instance"] "17" -> "16" [dir=forward tooltip="template-instance"] "15" -> "16" [dir=forward tooltip="template-instance"] "40" -> "16" [dir=forward tooltip="template-instance"] "59" -> "16" [dir=forward tooltip="template-instance"] "56" -> "16" [dir=forward tooltip="template-instance"] "61" -> "16" [dir=forward tooltip="template-instance"] "24" -> "12" [dir=forward tooltip="template-instance"] "67" -> "12" [dir=forward tooltip="template-instance"] "11" -> "12" [dir=forward tooltip="template-instance"] "65" -> "12" [dir=forward tooltip="template-instance"] "47" -> "12" [dir=forward tooltip="template-instance"] "27" -> "12" [dir=forward tooltip="template-instance"] "32" -> "12" [dir=forward tooltip="template-instance"] "22" -> "12" [dir=forward tooltip="template-instance"] "46" -> "12" [dir=forward tooltip="template-instance"] "18" -> "12" [dir=forward tooltip="template-instance"] "29" -> "12" [dir=forward tooltip="template-instance"] "53" -> "12" [dir=forward tooltip="template-instance"] "45" -> "12" [dir=forward tooltip="template-instance"] "44" -> "12" [dir=forward tooltip="template-instance"] "70" -> "12" [dir=forward tooltip="template-instance"] "39" -> "12" [dir=forward tooltip="template-instance"] "14" -> "12" [dir=forward tooltip="template-instance"] "48" -> "12" [dir=forward tooltip="template-instance"] "33" -> "12" [dir=forward tooltip="template-instance"] "49" -> "12" [dir=forward tooltip="template-instance"] "37" -> "12" [dir=forward tooltip="template-instance"] "2" -> "3" [dir=forward tooltip="usage"] "2" -> "6" [dir=forward tooltip="usage"] "10" -> "11" [dir=forward tooltip="usage"] "30" -> "31" [dir=forward tooltip="public-inheritance"] "52" -> "53" [dir=forward tooltip="usage"] "7" -> "8" [dir=forward tooltip="usage"] "1" -> "2" [dir=forward tooltip="public-inheritance"] "1" -> "50" [dir=forward tooltip="usage"] "1" -> "66" [dir=forward tooltip="usage"] "1" -> "68" [dir=forward tooltip="usage"] "1" -> "69" [dir=forward tooltip="usage"] "60" -> "6" [dir=forward tooltip="usage"] "60" -> "61" [dir=forward tooltip="usage"] "19" -> "20" [dir=forward tooltip="usage"] "19" -> "28" [dir=forward tooltip="usage"] "19" -> "32" [dir=forward tooltip="usage"] "19" -> "22" [dir=forward tooltip="usage"] "19" -> "25" [dir=forward tooltip="usage"] "19" -> "33" [dir=forward tooltip="usage"] "19" -> "34" [dir=forward tooltip="usage"] "58" -> "38" [dir=forward tooltip="usage"] "58" -> "58" [dir=forward tooltip="usage"] "58" -> "34" [dir=forward tooltip="usage"] "58" -> "59" [dir=forward tooltip="usage"] "43" -> "43" [dir=forward tooltip="usage"] "43" -> "9" [dir=forward tooltip="usage"] "6" -> "7" [dir=forward tooltip="usage"] "6" -> "6" [dir=forward tooltip="usage"] "6" -> "9" [dir=forward tooltip="usage"] "6" -> "47" [dir=forward tooltip="usage"] "9" -> "10" [dir=forward tooltip="usage"] "9" -> "13" [dir=forward tooltip="usage"] "9" -> "15" [dir=forward tooltip="usage"] "9" -> "17" [dir=forward tooltip="usage"] "9" -> "18" [dir=forward tooltip="usage"] "9" -> "19" [dir=forward tooltip="usage"] "9" -> "35" [dir=forward tooltip="usage"] "9" -> "9" [dir=forward tooltip="usage"] "9" -> "43" [dir=forward tooltip="usage"] "69" -> "70" [dir=forward tooltip="usage"] "63" -> "58" [dir=forward tooltip="usage"] "63" -> "63" [dir=forward tooltip="usage"] "63" -> "64" [dir=forward tooltip="usage"] "63" -> "38" [dir=forward tooltip="usage"] "63" -> "34" [dir=forward tooltip="usage"] "64" -> "58" [dir=forward tooltip="usage"] "50" -> "51" [dir=forward tooltip="usage"] "50" -> "62" [dir=forward tooltip="usage"] "66" -> "67" [dir=forward tooltip="public-inheritance"] "23" -> "24" [dir=forward tooltip="public-inheritance"] "8" -> "9" [dir=forward tooltip="usage"] "8" -> "14" [dir=forward tooltip="usage"] "8" -> "44" [dir=forward tooltip="usage"] "8" -> "45" [dir=forward tooltip="usage"] "8" -> "32" [dir=forward tooltip="usage"] "8" -> "46" [dir=forward tooltip="usage"] "8" -> "8" [dir=forward tooltip="usage"] "13" -> "14" [dir=forward tooltip="usage"] "54" -> "55" [dir=forward tooltip="usage"] "54" -> "57" [dir=forward tooltip="usage"] "54" -> "62" [dir=forward tooltip="usage"] "57" -> "58" [dir=forward tooltip="usage"] "57" -> "52" [dir=forward tooltip="usage"] "57" -> "60" [dir=forward tooltip="usage"] "62" -> "63" [dir=forward tooltip="usage"] "62" -> "52" [dir=forward tooltip="usage"] "62" -> "60" [dir=forward tooltip="usage"] "51" -> "3" [dir=forward tooltip="usage"] "51" -> "52" [dir=forward tooltip="usage"] "51" -> "54" [dir=forward tooltip="usage"] "51" -> "65" [dir=forward tooltip="usage"] "51" -> "6" [dir=forward tooltip="usage"] "38" -> "39" [dir=forward tooltip="usage"] "38" -> "40" [dir=forward tooltip="usage"] "35" -> "9" [dir=forward tooltip="usage"] "35" -> "25" [dir=forward tooltip="usage"] "35" -> "36" [dir=forward tooltip="usage"] "35" -> "8" [dir=forward tooltip="usage"] "35" -> "38" [dir=forward tooltip="usage"] "35" -> "41" [dir=forward tooltip="usage"] "34" -> "22" [dir=forward tooltip="public-inheritance"] "4" -> "4" [dir=forward tooltip="usage"] "4" -> "5" [dir=forward tooltip="usage"] "4" -> "48" [dir=forward tooltip="usage"] "5" -> "6" [dir=forward tooltip="usage"] "20" -> "21" [dir=forward tooltip="usage"] "20" -> "25" [dir=forward tooltip="usage"] "20" -> "27" [dir=forward tooltip="usage"] "3" -> "4" [dir=forward tooltip="usage"] "3" -> "3" [dir=forward tooltip="usage"] "3" -> "49" [dir=forward tooltip="usage"] "55" -> "56" [dir=forward tooltip="usage"] "26" -> "24" [dir=forward tooltip="public-inheritance"] }

describes a bilinear form based on a double integral

intg_domain_v intg_domain_u opu(y) aopu opker(x,y) aopv opv(x) dy dx

with opu, opv: operator on u and v aopu, aopv: algebraic operation (*,|,%,^) opker: operator on a kernel function

note: when kernel = 1 the pointer to kernel function in opker is ker_p=0 ! Be cautious with order of domain, first if for v-domain, second for u-domain

Actually, two ways to handle some integration methods: by pointer to an IntegrationMethod object, so only one integration method (old way, should disappear in futur) by an IntegrationMethods object that handles some IntegrationMethod (new way)

Public Functions

DoubleIntgBilinearForm(const DoubleIntgBilinearForm &dibf)#

copy constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const KernelOperatorOnUnknowns &kopus, const IntegrationMethod &im, SymType st)#

basic constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const KernelOperatorOnUnknowns &kopus, const IntegrationMethods &ims, SymType st)#

basic constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const KernelOperatorOnUnknowns &kopus, QuadRule qr1, number_t qo1, QuadRule qr2, number_t qo2, SymType st)#

basic constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const LcKernelOperatorOnUnknowns &lckopus, const IntegrationMethod &im, SymType st)#

basic constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const LcKernelOperatorOnUnknowns &lckopus, const IntegrationMethods &ims, SymType st)#

basic constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const LcKernelOperatorOnUnknowns &lckopus, QuadRule qr1, number_t qo1, QuadRule qr2, number_t qo2, SymType st)#

basic constructor

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aop, const OperatorOnUnknown &opv, const IntegrationMethod &im, SymType st)#

constructor from unknown operators (no kernel)

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aop, const OperatorOnUnknown &opv, const IntegrationMethods &ims, SymType st)#

constructor from unknown operators (no kernel)

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aop, const OperatorOnUnknown &opv, QuadRule qr1, number_t qo1, QuadRule qr2, number_t qo2, SymType st)#

constructor from unknown operators (no kernel)

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aopu, const Kernel &ker, AlgebraicOperator aopv, const OperatorOnUnknown &opv, const IntegrationMethod &im, SymType st)#

constructor from unknown operators and kernel

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aopu, const Kernel &ker, AlgebraicOperator aopv, const OperatorOnUnknown &opv, const IntegrationMethods &ims, SymType st)#

constructor from unknown operators and kernel

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aopu, const Kernel &ker, AlgebraicOperator aopv, const OperatorOnUnknown &opv, QuadRule qr1, number_t qo1, QuadRule qr2, number_t qo2, SymType st)#

constructor from unknown operators and kernel//accessors

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aopu, const OperatorOnKernel &opker, AlgebraicOperator aopv, const OperatorOnUnknown &opv, const IntegrationMethod &im, SymType st)#

constructor from unknown operators and operator on kernel

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aopu, const OperatorOnKernel &opker, AlgebraicOperator aopv, const OperatorOnUnknown &opv, const IntegrationMethods &ims, SymType st)#

constructor from unknown operators and operator on kernel

DoubleIntgBilinearForm(const GeomDomain &domu, const GeomDomain &domv, const OperatorOnUnknown &opu, AlgebraicOperator aopu, const OperatorOnKernel &opker, AlgebraicOperator aopv, const OperatorOnUnknown &opv, QuadRule qr1, number_t qo1, QuadRule qr2, number_t qo2, SymType st)#

constructor from unknown operators and operator on kernel

~DoubleIntgBilinearForm()#

destructor

inline AlgebraicOperator algopu() const#

return the algebraic operator on u

inline AlgebraicOperator algopv() const#

return the algebraic operator on v

virtual string_t asString() const#

interpret as string for print purpose

void checkCollinoIM(const IntegrationMethod*)#

check that CollinoIM is available for the double integral

virtual BasicBilinearForm *clone() const#

clone of the linear form

inline DomainPair domains() const#

return the pair of domain pointers

inline const GeomDomain *domainx() const#

return the pointer to the x domain, say v-domain

inline const GeomDomain *domainy() const#

return the pointer to the y domain, say u-domain

inline const IntegrationMethod *intgMethod() const#

return the pointer to the integration method

inline const KernelOperatorOnUnknowns &kopus() const#

return KernelOperatorOnUnknowns reference (const)

inline const KernelOperatorOnUnknowns *kopusp() const#

return KernelOperatorOnUnknowns pointer (const)

inline const KernelOperatorOnUnknowns &kopuv() const#

return KernelOperatorOnUnknowns reference

inline const LcKernelOperatorOnUnknowns &lckopus() const#

return KernelOperatorOnUnknowns reference (const)

inline const LcKernelOperatorOnUnknowns *lckopusp() const#

return KernelOperatorOnUnknowns pointer (const)

DoubleIntgBilinearForm &operator=(const DoubleIntgBilinearForm &dibf)#

assign operator

inline const OperatorOnKernel &opker() const#

return the pointer to the operator on kernel

inline const OperatorOnUnknown &opu() const#

return the pointer to the operator on unknown

inline const OperatorOnUnknown &opv() const#

return the pointer to the operator on unknown

inline virtual void print(PrintStream &ps) const#

print utility

virtual void print(std::ostream &os) const#

print utility

void setComputationType()#

set computation type (_IEComputation,_IEExtComputation,IEHMatrixComputation, ..)

void setHMIntegrationMethods()#

check and update quadrature pointers of IntegrationsMethods when a HMatrixIM

void setIntegrationMethod(const GeomDomain &domu, const GeomDomain &domv, const KernelOperatorOnUnknowns &kopus, QuadRule qr1, number_t qo1, QuadRule qr2, number_t qo2)#

set IntegrationMethod for quadrature product rule

void setIntegrationMethods()#

check and update quadrature pointers of IntegrationsMethods

check and set quadrature pointers of IntegrationsMethods if they are not set

if intgMethods is empty if kernel is singular (Kernel::singularType!=_notSingular) add if possible

  • a well suited singular quadrature method applied to adjacent elements (dist=0)

  • some regular quadrature products applied to non adjacent elements (one for 0<dist<=1, one for 1<dist<=2 and one for dist>2) if kernel is regular (Kernel::singularType==_notSingular) add

  • a regular quadrature products if intgMethods contains only a singular quadrature if kernel is regular stop on error if kernel is singular, check if singular quadrature is consistent if not stop on error else add some regular quadrature products applied to non adjacent elements (one for 0<dist<=1, one for 1<dist<=2 and one for dist>2) if intgMethods contains only a regular quadrature if kernel is regular check if it is consistent if kernel is singular add a well suited singular quadrature method applied to adjacent elements (dist=0) if intgMethods are more than one integration method if kernel is singular, check if there is only one consistent singular quadrature for dist=0, if not stop on error if there is no regular quadrature, add some if kernel is regular, check that all are regular quadratures

At the end of the process, produce an intgMethods vector consistent with the Kernel In a second step, update pointers of quadrature if required

virtual SymType setSymType() const#

return the value type of the bilinear form

find symmetry property (_noSymmetry , _symmetric, _skewSymmetric, _selfAdjoint) of bilinear form, used to set symmetry parameter Here only simple cases.

return symmetry property (_noSymmetry, _symmetric, _skewSymmetric, _selfAdjoint, _skewAdjoint)

In more complex cases, the user may enforce symmetry by specifying sym argument in constructors of bilinear form To be improved…

virtual void setUnknowns(const Unknown &u, const Unknown &v)#

set (change) the unknowns

inline virtual LinearFormType type() const#

return the type of the linear form

virtual ValueType valueType() const#

return the value type of the bilinear form

Public Members

IntegrationMethods intgMethods#

list of integration methods

Friends

inline friend std::ostream &operator<<(std::ostream &os, const DoubleIntgBilinearForm &dibf)#

print operator