VariationalProblem Class Reference

#include <VariationalProblem.hpp>

Inheritance diagram for VariationalProblem:

Inheritance graph
[legend]
Collaboration diagram for VariationalProblem:

Collaboration graph
[legend]

List of all members.

Public Types

typedef
BilinearOperatorListType::iterator 
bilinearOperatorIterator
typedef
BilinearOperatorListType::const_iterator 
bilinearOperatorConst_iterator
typedef
LinearOperatorListType::iterator 
linearOperatorIterator
typedef
LinearOperatorListType::const_iterator 
linearOperatorConst_iterator
typedef
BilinearBorderOperatorListType::iterator 
bilinearBorderOperatorIterator
typedef
BilinearBorderOperatorListType::const_iterator 
bilinearBorderOperatorConst_iterator
typedef
LinearBorderOperatorListType::iterator 
linearBorderOperatorIterator
typedef
LinearBorderOperatorListType::const_iterator 
linearBorderOperatorConst_iterator
enum  Type { pde, variational }

Public Member Functions

bilinearOperatorIterator beginBilinearOperator ()
bilinearOperatorConst_iterator beginBilinearOperator () const
bilinearOperatorConst_iterator endBilinearOperator () const
linearOperatorIterator beginLinearOperator ()
linearOperatorConst_iterator beginLinearOperator () const
linearOperatorConst_iterator endLinearOperator () const
bilinearBorderOperatorIterator beginBilinearBorderOperator ()
bilinearBorderOperatorConst_iterator beginBilinearBorderOperator () const
bilinearBorderOperatorConst_iterator endBilinearBorderOperator () const
linearBorderOperatorIterator beginLinearBorderOperator ()
linearBorderOperatorConst_iterator beginLinearBorderOperator () const
linearBorderOperatorConst_iterator endLinearBorderOperator () const
ReferenceCounting< Problemoperator* (const ConstReferenceCounting< ScalarFunctionBase > &u) const
void add (ReferenceCounting< VariationalBilinearOperator > v)
void add (ReferenceCounting< VariationalBilinearBorderOperator > v)
void add (ReferenceCounting< VariationalLinearOperator > v)
void add (ReferenceCounting< VariationalLinearBorderOperator > v)
size_t numberOfUnknown () const
const BoundaryConditionSetboundaryConditionSet (const size_t &i) const
bool hasJumpOrMean () const
 VariationalProblem (std::vector< ConstReferenceCounting< BoundaryConditionSet > > bc)
 VariationalProblem (const VariationalProblem &V, const bool &getOnlyBilinearForms=false)
 ~VariationalProblem ()
void setDomain (ReferenceCounting< Domain > omega)
const Problem::Typetype () const
std::string typeName () const
ConstReferenceCounting< Domaindomain () const

Private Types

typedef std::list
< ConstReferenceCounting
< VariationalBilinearOperator > > 
BilinearOperatorListType
typedef std::list
< ConstReferenceCounting
< VariationalLinearOperator > > 
LinearOperatorListType
typedef std::list
< ConstReferenceCounting
< VariationalBilinearBorderOperator > > 
BilinearBorderOperatorListType
typedef std::list
< ConstReferenceCounting
< VariationalLinearBorderOperator > > 
LinearBorderOperatorListType

Private Attributes

BilinearOperatorListType __bilinearOperatorList
LinearOperatorListType __linearOperatorList
BilinearBorderOperatorListType __bilinearBorderOperatorList
LinearBorderOperatorListType __linearBorderOperatorList
std::vector
< ConstReferenceCounting
< BoundaryConditionSet > > 
__bc


Detailed Description

Definition at line 45 of file VariationalProblem.hpp.


Member Typedef Documentation

Definition at line 50 of file VariationalProblem.hpp.

Definition at line 56 of file VariationalProblem.hpp.

Definition at line 63 of file VariationalProblem.hpp.

Definition at line 72 of file VariationalProblem.hpp.

typedef BilinearOperatorListType::iterator VariationalProblem::bilinearOperatorIterator

Definition at line 83 of file VariationalProblem.hpp.

typedef BilinearOperatorListType::const_iterator VariationalProblem::bilinearOperatorConst_iterator

Definition at line 84 of file VariationalProblem.hpp.

typedef LinearOperatorListType::iterator VariationalProblem::linearOperatorIterator

Definition at line 86 of file VariationalProblem.hpp.

typedef LinearOperatorListType::const_iterator VariationalProblem::linearOperatorConst_iterator

Definition at line 87 of file VariationalProblem.hpp.

typedef BilinearBorderOperatorListType::iterator VariationalProblem::bilinearBorderOperatorIterator

Definition at line 89 of file VariationalProblem.hpp.

typedef BilinearBorderOperatorListType::const_iterator VariationalProblem::bilinearBorderOperatorConst_iterator

Definition at line 90 of file VariationalProblem.hpp.

typedef LinearBorderOperatorListType::iterator VariationalProblem::linearBorderOperatorIterator

Definition at line 92 of file VariationalProblem.hpp.

typedef LinearBorderOperatorListType::const_iterator VariationalProblem::linearBorderOperatorConst_iterator

Definition at line 93 of file VariationalProblem.hpp.


Member Enumeration Documentation

enum Problem::Type [inherited]

Enumerator:
pde 
variational 

Definition at line 40 of file Problem.hpp.

00040             {
00041     pde,
00042     variational
00043   };


Constructor & Destructor Documentation

VariationalProblem::VariationalProblem ( std::vector< ConstReferenceCounting< BoundaryConditionSet > >  bc  )  [inline]

Constructor

Parameters:
bc Boundary condition sets

Definition at line 332 of file VariationalProblem.hpp.

Referenced by operator*().

00333     : Problem(Problem::variational, 0),
00334       __bc(bc)
00335   {
00336     ;
00337   }

VariationalProblem::VariationalProblem ( const VariationalProblem V,
const bool &  getOnlyBilinearForms = false 
) [inline]

Copy constructor

Parameters:
V original variational problem
getOnlyBilinearForms only gets the bilinear part of the problem. This can be useful for preconditioners only.

Definition at line 346 of file VariationalProblem.hpp.

References __linearBorderOperatorList, and __linearOperatorList.

VariationalProblem::~VariationalProblem (  )  [inline]

Destructor

Definition at line 366 of file VariationalProblem.hpp.

00367   {
00368     ;
00369   }


Member Function Documentation

bilinearOperatorIterator VariationalProblem::beginBilinearOperator (  )  [inline]

bilinearOperatorConst_iterator VariationalProblem::beginBilinearOperator (  )  const [inline]

Bilinear Operator const iterator begin

Returns:
iterator on the first bilinear operator

Definition at line 110 of file VariationalProblem.hpp.

References __bilinearOperatorList.

00111   {
00112     return __bilinearOperatorList.begin();
00113   }

bilinearOperatorConst_iterator VariationalProblem::endBilinearOperator (  )  const [inline]

linearOperatorIterator VariationalProblem::beginLinearOperator (  )  [inline]

Linear Operator iterator begin

Returns:
iterator on the first bilinear operator

Definition at line 130 of file VariationalProblem.hpp.

References __linearOperatorList.

Referenced by SpectralLegendreDiscretizer::assembleSecondMember(), FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember(), and FEMDiscretization< GivenMeshType, TypeOfDiscretization >::assembleSecondMember().

00131   {
00132     return __linearOperatorList.begin();
00133   }

linearOperatorConst_iterator VariationalProblem::beginLinearOperator (  )  const [inline]

Linear Operator iterator begin

Returns:
iterator on the first bilinear operator

Definition at line 140 of file VariationalProblem.hpp.

References __linearOperatorList.

00141   {
00142     return __linearOperatorList.begin();
00143   }

linearOperatorConst_iterator VariationalProblem::endLinearOperator (  )  const [inline]

Linear Operator iterator end

Returns:
iterator at the end of the linear opearator list

Definition at line 150 of file VariationalProblem.hpp.

References __linearOperatorList.

Referenced by SpectralLegendreDiscretizer::assembleSecondMember(), FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember(), and FEMDiscretization< GivenMeshType, TypeOfDiscretization >::assembleSecondMember().

00151   {
00152     return __linearOperatorList.end();
00153   }

bilinearBorderOperatorIterator VariationalProblem::beginBilinearBorderOperator (  )  [inline]

bilinearBorderOperatorConst_iterator VariationalProblem::beginBilinearBorderOperator (  )  const [inline]

Bilinear Border Operator const iterator begin

Returns:
iterator on the first bilinear border operator

Definition at line 170 of file VariationalProblem.hpp.

References __bilinearBorderOperatorList.

00171   {
00172     return __bilinearBorderOperatorList.begin();
00173   }

bilinearBorderOperatorConst_iterator VariationalProblem::endBilinearBorderOperator (  )  const [inline]

linearBorderOperatorIterator VariationalProblem::beginLinearBorderOperator (  )  [inline]

Linear Border Operator iterator begin

Returns:
iterator on the first bilinear border operator

Definition at line 190 of file VariationalProblem.hpp.

References __linearBorderOperatorList.

Referenced by BoundaryConditionSurfaceMeshAssociation::BoundaryConditionSurfaceMeshAssociation(), BoundaryMeshAssociation::BoundaryMeshAssociation(), and BoundaryConditionDiscretizationSpectralConform::setSecondMember().

00191   {
00192     return __linearBorderOperatorList.begin();
00193   }

linearBorderOperatorConst_iterator VariationalProblem::beginLinearBorderOperator (  )  const [inline]

Linear Border Operator iterator begin

Returns:
iterator on the first bilinear border operator

Definition at line 200 of file VariationalProblem.hpp.

References __linearBorderOperatorList.

00201   {
00202     return __linearBorderOperatorList.begin();
00203   }

linearBorderOperatorConst_iterator VariationalProblem::endLinearBorderOperator (  )  const [inline]

Linear Border Operator iterator end

Returns:
iterator at the end of the linear border opearator list

Definition at line 210 of file VariationalProblem.hpp.

References __linearBorderOperatorList.

Referenced by BoundaryConditionSurfaceMeshAssociation::BoundaryConditionSurfaceMeshAssociation(), BoundaryMeshAssociation::BoundaryMeshAssociation(), and BoundaryConditionDiscretizationSpectralConform::setSecondMember().

00211   {
00212     return __linearBorderOperatorList.end();
00213   }

ReferenceCounting<Problem> VariationalProblem::operator* ( const ConstReferenceCounting< ScalarFunctionBase > &  u  )  const [inline, virtual]

Returns the problem given by the "product" of a function u in the variational forms

Parameters:
u the given function
Returns:
the modified problem

Implements Problem.

Definition at line 224 of file VariationalProblem.hpp.

References __bilinearOperatorList, __linearOperatorList, and VariationalProblem().

00225   {
00226     VariationalProblem* newVariationalProblem = new VariationalProblem(*this);
00227 
00228     newVariationalProblem->__bilinearOperatorList.clear();
00229     for (BilinearOperatorListType::const_iterator i = __bilinearOperatorList.begin(); 
00230          i != __bilinearOperatorList.end(); ++i) {
00231       newVariationalProblem->__bilinearOperatorList.push_back((**i) * u);
00232     }
00233 
00234     newVariationalProblem->__linearOperatorList.clear();
00235     for (LinearOperatorListType::const_iterator i = __linearOperatorList.begin(); 
00236          i != __linearOperatorList.end(); ++i) {
00237       newVariationalProblem->__linearOperatorList.push_back((**i) * u);
00238     }
00239 
00240     return newVariationalProblem;
00241   }

Here is the call graph for this function:

void VariationalProblem::add ( ReferenceCounting< VariationalBilinearOperator v  )  [inline]

Adds a variational bilinear operator to its list

Parameters:
v a variational bilinear operator

Definition at line 248 of file VariationalProblem.hpp.

References __bilinearOperatorList.

Referenced by SpectralFEMPreconditioner::Internal::__solveFEM().

00249   {
00250     __bilinearOperatorList.push_back(v);
00251   }

void VariationalProblem::add ( ReferenceCounting< VariationalBilinearBorderOperator v  )  [inline]

Adds a variational "border" bilinear operator to its list

Parameters:
v a variational "border" bilinear operator

Definition at line 259 of file VariationalProblem.hpp.

References __bilinearBorderOperatorList.

00260   {
00261     __bilinearBorderOperatorList.push_back(v);
00262   }

void VariationalProblem::add ( ReferenceCounting< VariationalLinearOperator v  )  [inline]

Adds a variational linear operator to its list

Parameters:
v a variational linear operator

Definition at line 269 of file VariationalProblem.hpp.

References __linearOperatorList.

00270   {
00271     __linearOperatorList.push_back(v);
00272   }

void VariationalProblem::add ( ReferenceCounting< VariationalLinearBorderOperator v  )  [inline]

Adds a variational "border" linear operator to its list

Parameters:
v a variational "border" linear operator

Definition at line 279 of file VariationalProblem.hpp.

References __linearBorderOperatorList.

00280   {
00281     __linearBorderOperatorList.push_back(v);
00282   }

size_t VariationalProblem::numberOfUnknown (  )  const [inline, virtual]

Returns the number of unknowns

Returns:
__numberOfUnknow

Implements Problem.

Definition at line 290 of file VariationalProblem.hpp.

References __bc.

Referenced by SpectralFEMPreconditioner::Internal::__solveFEM(), and BoundaryMeshAssociation::BoundaryMeshAssociation().

00291   {
00292     return __bc.size();
00293   }

const BoundaryConditionSet& VariationalProblem::boundaryConditionSet ( const size_t &  i  )  const [inline, virtual]

Returns the boundary condition set associated to the ith unknown

Parameters:
i 
Returns:

Implements Problem.

Definition at line 302 of file VariationalProblem.hpp.

References __bc.

00303   {
00304     return *(__bc[i]);
00305   }

bool VariationalProblem::hasJumpOrMean (  )  const [inline]

Definition at line 307 of file VariationalProblem.hpp.

References __bilinearOperatorList, __linearOperatorList, and VariationalOperator::normal.

Referenced by FEMDiscretization< Structured3DMesh, TypeOfDiscretization >::assembleSecondMember(), and FEMDiscretization< GivenMeshType, TypeOfDiscretization >::assembleSecondMember().

00308   {
00309     for (BilinearOperatorListType::const_iterator i=__bilinearOperatorList.begin();
00310          i != __bilinearOperatorList.end(); ++i) {
00311       if (((*i)->testFunctionProperty() != VariationalOperator::normal) or
00312           ((*i)->unknownProperty() != VariationalOperator::normal)) {
00313         return true;
00314       }
00315     }
00316 
00317     for (LinearOperatorListType::const_iterator i=__linearOperatorList.begin();
00318          i != __linearOperatorList.end(); ++i) {
00319       if ((*i)->testFunctionProperty() != VariationalOperator::normal) {
00320         return true;
00321       }
00322     }
00323 
00324     return false;
00325   }

void Problem::setDomain ( ReferenceCounting< Domain omega  )  [inline, inherited]

Sets the domain of computation

Parameters:
omega $\Omega$

Definition at line 58 of file Problem.hpp.

References Problem::__omega.

00059   {
00060     __omega = omega;
00061   }

const Problem::Type& Problem::type (  )  const [inline, inherited]

std::string Problem::typeName (  )  const [inline, inherited]

Definition at line 74 of file Problem.hpp.

References Problem::__type, Problem::pde, ErrorHandler::unexpected, and Problem::variational.

00075   {
00076     switch(__type) {
00077     case pde: {
00078       return "PDE";
00079     }
00080     case variational: {
00081       return "Variational";
00082     }
00083     default: {
00084       throw ErrorHandler(__FILE__,__LINE__,
00085                          "Unknown problem type name",
00086                          ErrorHandler::unexpected);
00087     }
00088     }
00089     return "";
00090   }

ConstReferenceCounting<Domain> Problem::domain (  )  const [inline, inherited]

Access to the domain of computation

Returns:
__omega

Definition at line 98 of file Problem.hpp.

References Problem::__omega.

00099   {
00100     return __omega;
00101   }


Member Data Documentation

list of bilinear operators

Definition at line 53 of file VariationalProblem.hpp.

Referenced by add(), beginBilinearOperator(), endBilinearOperator(), hasJumpOrMean(), and operator*().

list of linear operators

Definition at line 59 of file VariationalProblem.hpp.

Referenced by add(), beginLinearOperator(), endLinearOperator(), hasJumpOrMean(), operator*(), and VariationalProblem().

list of bilinear border operators, ie operators living on the border for natural BC as an example

Definition at line 66 of file VariationalProblem.hpp.

Referenced by add(), beginBilinearBorderOperator(), and endBilinearBorderOperator().

list of bilinear border operators, ie operators living on the border for natural BC for example

Definition at line 75 of file VariationalProblem.hpp.

Referenced by add(), beginLinearBorderOperator(), endLinearBorderOperator(), and VariationalProblem().

list of dirichlet conditions

Definition at line 80 of file VariationalProblem.hpp.

Referenced by boundaryConditionSet(), and numberOfUnknown().


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

Generated on Wed Nov 19 00:17:43 2008 for FreeFEM3D (aka ff3d) by  doxygen 1.5.6