#include <PDEOperatorExpression.hpp>


Definition at line 422 of file PDEOperatorExpression.hpp.
typedef std::multimap<int, ReferenceCounting<PDEVectorialOperatorExpressionOrderOne> > PDEVectorialOperatorExpressionOrderTwo::FirstOperatorList [private] |
Definition at line 427 of file PDEOperatorExpression.hpp.
typedef std::map<std::string, ReferenceCounting<PDEOperator> > PDEVectorialOperatorExpression::PDEOperatorList [inherited] |
Definition at line 116 of file PDEOperatorExpression.hpp.
enum PDEVectorialOperatorExpression::PDEScalarOperatorType [inherited] |
Definition at line 109 of file PDEOperatorExpression.hpp.
00109 { 00110 firstOrder, 00111 secondOrder 00112 };
enum PDEOperatorExpression::PDEOperatorType [inherited] |
enum Expression::Type [inherited] |
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 };
| PDEVectorialOperatorExpressionOrderTwo::PDEVectorialOperatorExpressionOrderTwo | ( | ) |
Definition at line 303 of file PDEOperatorExpression.cpp.
00304 : PDEVectorialOperatorExpression(PDEVectorialOperatorExpression:: 00305 secondOrder) 00306 { 00307 ; 00308 }
| PDEVectorialOperatorExpressionOrderTwo::~PDEVectorialOperatorExpressionOrderTwo | ( | ) |
| 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 }

| 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 }

| 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 }

| 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 }

| 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.
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 }
| 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 }
Definition at line 428 of file PDEOperatorExpression.hpp.
Referenced by __checkBoundaryExpression(), __execute(), add(), and put().
PDEOperatorList PDEVectorialOperatorExpression::__pdeOperatorList [protected, inherited] |
Definition at line 119 of file PDEOperatorExpression.hpp.
Referenced by __execute(), and PDEVectorialOperatorExpression::pdeOperatorList().
1.5.6