PDEVectorialOperatorExpressionOrderTwo Class Reference

#include <PDEOperatorExpression.hpp>

Inheritance diagram for PDEVectorialOperatorExpressionOrderTwo:

Inheritance graph
[legend]
Collaboration diagram for PDEVectorialOperatorExpressionOrderTwo:

Collaboration graph
[legend]

List of all members.

Public Types

enum  PDEScalarOperatorType { firstOrder, secondOrder }
typedef std::map< std::string,
ReferenceCounting< PDEOperator > > 
PDEOperatorList
enum  PDEOperatorType { scalar, vectorial }
enum  Type {
  boolean, boundary, boundaryCondition, boundaryConditionList,
  domain, field, fieldlist, function,
  ifstreamexpression, integrated, integratedOperator, insideExpression,
  insideListExpression, istreamexpression, istreamExpressionList, linearExp,
  mesh, multiLinearExp, multiLinearExpSum, multiLinearForm,
  multiLinearFormSum, ofstreamexpression, option, ostreamexpression,
  ostreamExpressionList, pdeEquation, pdeOperator, pdeOperatorSum,
  pdeProblem, problem, real, scene,
  solver, solverOptions, string, subOption,
  subOptionList, testFunctionList, unknown, unknownList,
  variationalFormula, variationalBilinearOperator, variationalLinearOperator, variationalDirichlet,
  vector3
}

Public Member Functions

bool __checkBoundaryExpression () const
void add (const std::string &operatorName, ReferenceCounting< PDEVectorialOperatorExpressionOrderOne > pdeOp)
 PDEVectorialOperatorExpressionOrderTwo ()
 ~PDEVectorialOperatorExpressionOrderTwo ()
PDEVectorialOperatorExpression::PDEOperatorListpdeOperatorList ()
void execute ()
const PDEOperatorTypepdeOperatorType () const
const Expression::Typetype () const
 return the type.

Protected Member Functions

virtual std::istream & _get (std::istream &is)
 Read *this to the input is.

Static Protected Member Functions

static Expression::Type getType (ReferenceCounting< Expression > e1, ReferenceCounting< Expression > e2)

Protected Attributes

PDEOperatorList __pdeOperatorList

Private Types

typedef std::multimap< int,
ReferenceCounting
< PDEVectorialOperatorExpressionOrderOne > > 
FirstOperatorList

Private Member Functions

std::ostream & put (std::ostream &os) const
 Writes *this to the output os.
void __execute ()

Private Attributes

FirstOperatorList __firstOrderOp

Friends

std::ostream & operator<< (std::ostream &os, const Expression &e)
 this function allows to output expressions.
std::istream & operator>> (std::istream &is, Expression &e)
 this function allows to read expressions from streams


Detailed Description

Definition at line 422 of file PDEOperatorExpression.hpp.


Member Typedef Documentation

Definition at line 427 of file PDEOperatorExpression.hpp.

Definition at line 116 of file PDEOperatorExpression.hpp.


Member Enumeration Documentation

Enumerator:
firstOrder 
secondOrder 

Definition at line 109 of file PDEOperatorExpression.hpp.

00109                              {
00110     firstOrder,
00111     secondOrder
00112   };

Enumerator:
scalar 
vectorial 

Definition at line 43 of file PDEOperatorExpression.hpp.

00043                        {
00044     scalar,
00045     vectorial
00046   };

enum Expression::Type [inherited]

Enumerator:
boolean 
boundary 
boundaryCondition 
boundaryConditionList 
domain 
field 
fieldlist 
function 
ifstreamexpression 
integrated 
integratedOperator 
insideExpression 
insideListExpression 
istreamexpression 
istreamExpressionList 
linearExp 
mesh 
multiLinearExp 
multiLinearExpSum 
multiLinearForm 
multiLinearFormSum 
ofstreamexpression 
option 
ostreamexpression 
ostreamExpressionList 
pdeEquation 
pdeOperator 
pdeOperatorSum 
pdeProblem 
problem 
real 
scene 
solver 
solverOptions 
string 
subOption 
subOptionList 
testFunctionList 
unknown 
unknownList 
variationalFormula 
variationalBilinearOperator 
variationalLinearOperator 
variationalDirichlet 
vector3 

Reimplemented in IFStreamExpression, OFStreamExpression, and UnknownExpression.

Definition at line 42 of file Expression.hpp.

00042              {
00043     boolean,
00044     boundary,
00045     boundaryCondition,
00046     boundaryConditionList,
00047 
00048     domain,
00049 
00050     field,
00051     fieldlist,
00052     function,
00053 
00054     ifstreamexpression,
00055     integrated,
00056     integratedOperator,
00057     insideExpression,
00058     insideListExpression,
00059     istreamexpression,
00060     istreamExpressionList,
00061 
00062     linearExp,
00063 
00064     mesh,
00065     multiLinearExp,
00066     multiLinearExpSum,
00067     multiLinearForm,
00068     multiLinearFormSum,
00069 
00070     ofstreamexpression,
00071     option,
00072     ostreamexpression,
00073     ostreamExpressionList,
00074 
00075     pdeEquation,
00076     pdeOperator,
00077     pdeOperatorSum,
00078     pdeProblem,
00079     problem,
00080 
00081     real,
00082 
00083     scene,
00084     solver,
00085     solverOptions,
00086     string,
00087     subOption,
00088     subOptionList,
00089 
00090     testFunctionList,
00091 
00092     unknown,
00093     unknownList,
00094 
00095     variationalFormula,
00096     variationalBilinearOperator,
00097     variationalLinearOperator,
00098     variationalDirichlet,
00099     vector3
00100   };


Constructor & Destructor Documentation

PDEVectorialOperatorExpressionOrderTwo::PDEVectorialOperatorExpressionOrderTwo (  ) 

Definition at line 303 of file PDEOperatorExpression.cpp.

PDEVectorialOperatorExpressionOrderTwo::~PDEVectorialOperatorExpressionOrderTwo (  ) 

Definition at line 311 of file PDEOperatorExpression.cpp.

00312 {
00313   ;
00314 }


Member Function Documentation

std::ostream& PDEVectorialOperatorExpressionOrderTwo::put ( std::ostream &  os  )  const [inline, private, virtual]

Writes *this to the output os.

Implements Expression.

Definition at line 430 of file PDEOperatorExpression.hpp.

References __firstOrderOp.

00431   {
00432     const char x[3] = {'x', 'y', 'z'};
00433     for (FirstOperatorList::const_iterator i = __firstOrderOp.begin();
00434          i != __firstOrderOp.end(); ++i) {
00435       os << 'd' << x[(*i).first] << '(' << (*(*i).second) << ')';
00436     }
00437     return os;
00438   }

void PDEVectorialOperatorExpressionOrderTwo::__execute (  )  [private, virtual]

Implements PDEOperatorExpression.

Definition at line 225 of file PDEOperatorExpression.cpp.

References PDEVectorialOperatorExpressionOrderOne::__diff, __firstOrderOp, PDEVectorialOperatorExpression::__pdeOperatorList, PDEVectorialOperatorExpressionOrderOne::__sum, BinaryOperation::difference, Expression::function, ScalarFunctionBuilder::getBuiltFunction(), PDEScalarOperatorExpressionOrderOne::nu(), PDEVectorialOperatorExpressionOrderOne::preexec(), ScalarFunctionBuilder::setFunction(), ScalarFunctionBuilder::setUnaryMinus(), and BinaryOperation::sum.

00226 {
00227   typedef
00228     TinyMatrix<3,3,ReferenceCounting<FunctionExpression> > 
00229     FunctionMatrix;
00230 
00231   typedef
00232     std::map<std::string,FunctionMatrix > 
00233     FunctionMatrixSet;
00234   FunctionMatrixSet matrixSet;
00235   
00236   typedef
00237     PDEVectorialOperatorExpressionOrderOne::FirstOrderSum::iterator
00238     PDEVectorialOperatorIterator;
00239 
00240   for (FirstOperatorList::iterator i = __firstOrderOp.begin();
00241        i != __firstOrderOp.end(); ++i) {
00242     int I = (*i).first;
00243     PDEVectorialOperatorExpressionOrderOne& pdeOpOrderOne
00244       = (*(*i).second);
00245     pdeOpOrderOne.preexec();
00246     
00247     for (PDEVectorialOperatorIterator j = pdeOpOrderOne.__sum.begin();
00248          j != pdeOpOrderOne.__sum.end(); ++j) {
00249       PDEScalarOperatorExpressionOrderOne& operatorOrderOne = *j->second;
00250 
00251       FunctionMatrix& A = matrixSet[(*j).first];
00252 
00253       for (size_t J=0; J<3; ++J) {
00254         if (operatorOrderOne.nu(J) != 0) {
00255           if (A(I,J) == 0) {
00256             A(I,J) = operatorOrderOne.nu(J);
00257           } else {
00258             A(I,J)
00259               = new FunctionExpressionBinaryOperation(BinaryOperation::sum,A(I,J),operatorOrderOne.nu(J));
00260           }
00261         }
00262       }
00263     }
00264 
00265     for (PDEVectorialOperatorIterator j = pdeOpOrderOne.__diff.begin();
00266          j != pdeOpOrderOne.__diff.end(); ++j) {
00267       PDEScalarOperatorExpressionOrderOne& operatorOrderOne = (*(*j).second);
00268 
00269       FunctionMatrix& A = matrixSet[(*j).first];
00270 
00271       for (size_t J=0; J<3; ++J) {
00272         if (operatorOrderOne.nu(J) != 0) {
00273           if (A(I,J) == 0) {
00274             A(I,J) = new FunctionExpressionUnaryMinus(operatorOrderOne.nu(J));
00275           } else {
00276             A(I,J)
00277               = new FunctionExpressionBinaryOperation(BinaryOperation::difference, A(I,J),operatorOrderOne.nu(J));
00278           }
00279         }
00280       }
00281     }
00282   }
00283   for (FunctionMatrixSet::iterator i = matrixSet.begin();
00284        i != matrixSet.end(); ++i) {
00285     FunctionMatrix& a = (*i).second;
00286     ReferenceCounting<SecondOrderOperator::Matrix> A
00287       = new SecondOrderOperator::Matrix;
00288     for (size_t m=0; m<3; ++m)
00289       for (size_t n=0; n<3; ++n) {
00290         if (a(m,n) != 0) {
00291           ScalarFunctionBuilder functionBuilder;
00292           functionBuilder.setFunction(a(m,n)->function());
00293           functionBuilder.setUnaryMinus();
00294           (*A)(m,n) = functionBuilder.getBuiltFunction();
00295         }
00296       }
00297     SecondOrderOperator* secondOrderOp = new SecondOrderOperator(A);
00298     __pdeOperatorList.insert(std::make_pair(i->first,secondOrderOp));
00299   }
00300 }

Here is the call graph for this function:

bool PDEVectorialOperatorExpressionOrderTwo::__checkBoundaryExpression (  )  const [virtual]

Implements PDEOperatorExpression.

Definition at line 197 of file PDEOperatorExpression.cpp.

References PDEVectorialOperatorExpressionOrderOne::__checkBoundaryExpression(), and __firstOrderOp.

00198 {
00199   typedef
00200     TinyMatrix<3,3,ReferenceCounting<FunctionExpression> > 
00201     FunctionMatrix;
00202 
00203   typedef
00204     std::map<FunctionVariable*,FunctionMatrix > 
00205     FunctionMatrixSet;
00206   FunctionMatrixSet matrixSet;
00207   
00208   typedef
00209     PDEVectorialOperatorExpressionOrderOne::FirstOrderSum::const_iterator
00210     PDEVectorialOperatorIterator;
00211 
00212   for (FirstOperatorList::const_iterator i = __firstOrderOp.begin();
00213        i != __firstOrderOp.end(); ++i) {
00214     const PDEVectorialOperatorExpressionOrderOne& pdeOpOrderOne
00215       = (*(*i).second);
00216     
00217     if (pdeOpOrderOne.__checkBoundaryExpression()) {
00218       return true;
00219     }
00220   }
00221 
00222   return false;
00223 }

Here is the call graph for this function:

void PDEVectorialOperatorExpressionOrderTwo::add ( const std::string &  operatorName,
ReferenceCounting< PDEVectorialOperatorExpressionOrderOne pdeOp 
) [inline]

Definition at line 445 of file PDEOperatorExpression.hpp.

References __firstOrderOp, operatorName(), and ErrorHandler::unexpected.

00447   {
00448     size_t operatorNumber = std::numeric_limits<size_t>::max();
00449 
00450     if (operatorName == "dx") {
00451       operatorNumber = 0;
00452     }
00453     if (operatorName == "dy") {
00454       operatorNumber = 1;
00455     }
00456     if (operatorName == "dz") {
00457       operatorNumber = 2;
00458     }
00459 
00460     if (operatorNumber > 2) {
00461       throw ErrorHandler(__FILE__,__LINE__,
00462                          "unknown operator",
00463                          ErrorHandler::unexpected);
00464     }
00465 
00466     __firstOrderOp.insert(std::pair<int,
00467                                     ReferenceCounting<PDEVectorialOperatorExpressionOrderOne> >(operatorNumber,
00468                                                                                                 pdeOp));
00469   }

Here is the call graph for this function:

PDEVectorialOperatorExpression::PDEOperatorList& PDEVectorialOperatorExpression::pdeOperatorList (  )  [inline, inherited]

Definition at line 126 of file PDEOperatorExpression.hpp.

References PDEVectorialOperatorExpression::__pdeOperatorList.

Referenced by PDEOperatorSumExpression::execute().

00127   {
00128     return __pdeOperatorList;
00129   }

void PDEOperatorExpression::execute (  )  [virtual, inherited]

Executes the expression.

Implements Expression.

Definition at line 54 of file PDEOperatorExpression.cpp.

References PDEOperatorExpression::__checkBoundaryExpression(), PDEOperatorExpression::__execute(), ErrorHandler::normal, and stringify().

Referenced by PDEOperatorSumExpression::execute(), and PDEScalarOperatorExpressionOrderOne::preexec().

00055 {
00056   this->__execute();
00057   if (this->__checkBoundaryExpression()) {
00058     throw ErrorHandler(__FILE__, __LINE__,
00059                        "cannot evaluate the expression \""
00060                        +stringify(*this)+
00061                        "\" in the volume",
00062                        ErrorHandler::normal);
00063   }
00064 }

Here is the call graph for this function:

const PDEOperatorType& PDEOperatorExpression::pdeOperatorType (  )  const [inline, inherited]

Definition at line 58 of file PDEOperatorExpression.hpp.

References PDEOperatorExpression::__pdeOperatorType.

Referenced by PDEOperatorSumExpression::execute().

00059   {
00060     return __pdeOperatorType;
00061   }

static Expression::Type Expression::getType ( ReferenceCounting< Expression e1,
ReferenceCounting< Expression e2 
) [inline, static, protected, inherited]

Traits conversion of types.

Todo:
IMPLEMENT IT.

Definition at line 112 of file Expression.hpp.

References Expression::real.

00114   {
00115     return Expression::real;
00116   }

virtual std::istream& Expression::_get ( std::istream &  is  )  [inline, protected, virtual, inherited]

Read *this to the input is.

Reimplemented in IStreamExpressionList, and RealExpressionVariable.

Definition at line 122 of file Expression.hpp.

References ErrorHandler::normal.

00123   {
00124     throw ErrorHandler(__FILE__,__LINE__,
00125                        "operator >> is not supported for this expression",
00126                        ErrorHandler::normal);
00127     return is;
00128   }

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

return the type.

Reimplemented in FunctionExpression.

Definition at line 132 of file Expression.hpp.

References Expression::__type.

Referenced by MeshExpressionExtract::execute().

00133   {
00134     return __type;
00135   }


Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const Expression e 
) [friend, inherited]

this function allows to output expressions.

Definition at line 143 of file Expression.hpp.

00144   {
00145     return e.put(os);
00146   }

std::istream& operator>> ( std::istream &  is,
Expression e 
) [friend, inherited]

this function allows to read expressions from streams

Definition at line 149 of file Expression.hpp.

00150   {
00151     return e._get(is);
00152   }


Member Data Documentation

Definition at line 428 of file PDEOperatorExpression.hpp.

Referenced by __checkBoundaryExpression(), __execute(), add(), and put().


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

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