Definition at line 56 of file ScalarFunctionBuilder.cpp.
| ScalarFunctionBuilder::Simplifier::Simplifier | ( | ) | [inline] |
| ScalarFunctionBuilder::Simplifier::~Simplifier | ( | ) | [inline] |
| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::__getOperatorF1F2SimplifiedFunction | ( | const ScalarFunctionConstant & | f1, | |
| const ScalarFunctionConstant & | f2 | |||
| ) | const [inline, private] |
Computes constant function resulting of two constant functions
| f1 | first constant function | |
| f2 | second constant function |
Definition at line 172 of file ScalarFunctionBuilder.cpp.
00174 { 00175 return new ScalarFunctionConstant(BinaryOperatorType::eval(f1(0), 00176 f2(0))); 00177 }
| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::__getOperatorF1F2SimplifiedFunction | ( | const ScalarFunctionConstant & | f1, | |
| const FEMFunctionBase & | f2 | |||
| ) | const [inline, private] |
Computes finite element function resulting of a constant function and a finite element function binary operation
| f1 | constant function | |
| f2 | finite element function |
Definition at line 190 of file ScalarFunctionBuilder.cpp.
References FEMFunctionBase::baseMesh(), FEMFunctionBuilder::build(), FEMFunctionBase::discretizationType(), FEMFunctionBuilder::getBuiltScalarFunction(), FEMFunctionBase::outsideValue(), Vector< T >::size(), and FEMFunctionBase::values().
00192 { 00193 Vector<real_t> femValues(f2.values().size()); 00194 00195 const real_t constantValue = f1(0); 00196 00197 const real_t outsideValue = BinaryOperatorType::eval(constantValue, 00198 f2.outsideValue()); 00199 00200 for (size_t i=0; i<femValues.size(); ++i) { 00201 femValues[i] = BinaryOperatorType::eval(constantValue,f2[i]); 00202 } 00203 00204 FEMFunctionBuilder builder; 00205 builder.build(f2.discretizationType(), 00206 f2.baseMesh(), 00207 femValues, 00208 outsideValue); 00209 return builder.getBuiltScalarFunction(); 00210 }

| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::__getOperatorF1F2SimplifiedFunction | ( | const FEMFunctionBase & | f1, | |
| const ScalarFunctionConstant & | f2 | |||
| ) | const [inline, private] |
Computes finite element function resulting of a finite element function and a constant function binary operation
| f1 | finite element function | |
| f2 | constant function |
Definition at line 223 of file ScalarFunctionBuilder.cpp.
References FEMFunctionBase::baseMesh(), FEMFunctionBase::discretizationType(), FEMFunctionBase::outsideValue(), Vector< T >::size(), and FEMFunctionBase::values().
00225 { 00226 Vector<real_t> femValues(f1.values().size()); 00227 00228 const real_t constantValue = f2(0); 00229 00230 for (size_t i=0; i<femValues.size(); ++i) { 00231 femValues[i] = BinaryOperatorType::eval(f1[i],constantValue); 00232 } 00233 00234 const real_t outsideValue = BinaryOperatorType::eval(f1.outsideValue(), 00235 constantValue); 00236 00237 FEMFunctionBuilder builder; 00238 builder.build(f1.discretizationType(), 00239 f1.baseMesh(), 00240 femValues, 00241 outsideValue); 00242 return builder.getBuiltScalarFunction(); 00243 }

| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::__getOperatorF1F2SimplifiedFunction | ( | const FEMFunctionBase & | f1, | |
| const FEMFunctionBase & | f2 | |||
| ) | const [inline, private] |
Computes finite element function resulting of two finite element function binary operation
| f1 | first finite element function | |
| f2 | second finite element function |
Definition at line 256 of file ScalarFunctionBuilder.cpp.
References ASSERT, FEMFunctionBase::baseMesh(), FEMFunctionBase::discretizationType(), FEMFunctionBase::outsideValue(), Vector< T >::size(), and FEMFunctionBase::values().
00258 { 00259 Vector<real_t> femValues(f1.values().size()); 00260 00261 ASSERT(f1.discretizationType() == f2.discretizationType()); 00262 ASSERT(f1.baseMesh() == f2.baseMesh()); 00263 00264 for (size_t i=0; i<femValues.size(); ++i) { 00265 femValues[i] = BinaryOperatorType::eval(f1[i],f2[i]); 00266 } 00267 00268 const real_t outsideValue = BinaryOperatorType::eval(f1.outsideValue(), 00269 f2.outsideValue()); 00270 00271 FEMFunctionBuilder builder; 00272 builder.build(f1.discretizationType(), 00273 f1.baseMesh(), 00274 femValues, 00275 outsideValue); 00276 return builder.getBuiltScalarFunction(); 00277 }

| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::__getOperatorF1SimplifiedFunction | ( | const FunctionType1 & | f, | |
| const ScalarFunctionBase & | f2 | |||
| ) | const [inline, private] |
Specialize the first function type of the binary operation
| f | specialized function | |
| f2 | still base function |
Definition at line 291 of file ScalarFunctionBuilder.cpp.
References ScalarFunctionBase::constant, ScalarFunctionBase::femfunction, ScalarFunctionBase::type(), and ErrorHandler::unexpected.
00293 { 00294 switch (f2.type()) { 00295 case ScalarFunctionBase::constant: { 00296 const ScalarFunctionConstant& g = static_cast<const ScalarFunctionConstant&>(f2); 00297 return this->__getOperatorF1F2SimplifiedFunction<BinaryOperatorType>(f,g); 00298 } 00299 case ScalarFunctionBase::femfunction: { 00300 const FEMFunctionBase& g = static_cast<const FEMFunctionBase&>(f2); 00301 return this->__getOperatorF1F2SimplifiedFunction<BinaryOperatorType>(f,g); 00302 } 00303 default: { 00304 throw ErrorHandler(__FILE__,__LINE__, 00305 "unexpected function type", 00306 ErrorHandler::unexpected); 00307 } 00308 } 00309 return 0; 00310 }

| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::__getOperatorSimplifiedFunction | ( | const ScalarFunctionBase & | f1, | |
| const ScalarFunctionBase & | f2 | |||
| ) | const [inline, private] |
Specialize the binary operation type
| f1 | first operand | |
| f2 | second operand |
Definition at line 322 of file ScalarFunctionBuilder.cpp.
References ScalarFunctionBase::constant, ScalarFunctionBase::femfunction, FEMFunctionBase::hasSameType(), ScalarFunctionBase::type(), and ErrorHandler::unexpected.
00324 { 00325 switch (f1.type()) { 00326 case ScalarFunctionBase::constant: { 00327 const ScalarFunctionConstant& f = static_cast<const ScalarFunctionConstant&>(f1); 00328 return this->__getOperatorF1SimplifiedFunction<BinaryOperatorType>(f,f2); 00329 } 00330 case ScalarFunctionBase::femfunction: { 00331 const FEMFunctionBase& f = static_cast<const FEMFunctionBase&>(f1); 00332 if (f2.type() == ScalarFunctionBase::femfunction) { 00333 const FEMFunctionBase& g = static_cast<const FEMFunctionBase&>(f2); 00334 if (not(f.hasSameType(g))) { 00335 return 0; 00336 } 00337 } 00338 return this->__getOperatorF1SimplifiedFunction<BinaryOperatorType>(f,f2); 00339 } 00340 default: { 00341 throw ErrorHandler(__FILE__,__LINE__, 00342 "unexpected function type", 00343 ErrorHandler::unexpected); 00344 } 00345 } 00346 return 0; 00347 }

| ConstReferenceCounting<ScalarFunctionBase> ScalarFunctionBuilder::Simplifier::simplify | ( | const BinaryOperation & | binaryOperation, | |
| const ScalarFunctionBase & | f, | |||
| const ScalarFunctionBase & | g | |||
| ) | const [inline] |
Simplifies a binary operation
| binaryOperation | given binary operation | |
| f | first function | |
| g | second function |
Definition at line 360 of file ScalarFunctionBuilder.cpp.
References BinaryOperation::and_, ScalarFunctionBase::canBeSimplified(), BinaryOperation::difference, BinaryOperation::division, BinaryOperation::eq, BinaryOperation::ge, BinaryOperation::gt, BinaryOperation::le, BinaryOperation::lt, BinaryOperation::max, BinaryOperation::min, BinaryOperation::modulo, BinaryOperation::ne, BinaryOperation::or_, BinaryOperation::power, BinaryOperation::product, BinaryOperation::sum, BinaryOperation::type(), BinaryOperation::undefined, ErrorHandler::unexpected, and BinaryOperation::xor_.
Referenced by ScalarFunctionBuilder::setBinaryOperation().
00363 { 00364 if (not(f.canBeSimplified() and g.canBeSimplified())) { 00365 return 0; 00366 } 00367 00368 switch (binaryOperation.type()) { 00369 case BinaryOperation::modulo: { 00370 return __getOperatorSimplifiedFunction<BinaryOperatorModulo>(f,g); 00371 } 00372 case BinaryOperation::sum: { 00373 return __getOperatorSimplifiedFunction<BinaryOperatorSum>(f,g); 00374 } 00375 case BinaryOperation::difference: { 00376 return __getOperatorSimplifiedFunction<BinaryOperatorDifference>(f,g); 00377 } 00378 case BinaryOperation::product: { 00379 return __getOperatorSimplifiedFunction<BinaryOperatorProduct>(f,g); 00380 } 00381 case BinaryOperation::division: { 00382 return __getOperatorSimplifiedFunction<BinaryOperatorDivision>(f,g); 00383 } 00384 case BinaryOperation::power: { 00385 return __getOperatorSimplifiedFunction<BinaryOperatorPower>(f,g); 00386 } 00387 case BinaryOperation::min: { 00388 return __getOperatorSimplifiedFunction<BinaryOperatorMin>(f,g); 00389 } 00390 case BinaryOperation::max: { 00391 return __getOperatorSimplifiedFunction<BinaryOperatorMax>(f,g); 00392 } 00393 // these functions are not treated 00394 case BinaryOperation::gt: 00395 case BinaryOperation::lt: 00396 case BinaryOperation::ge: 00397 case BinaryOperation::le: 00398 case BinaryOperation::eq: 00399 case BinaryOperation::ne: 00400 case BinaryOperation::or_: 00401 case BinaryOperation::xor_: 00402 case BinaryOperation::and_: { 00403 return 0; 00404 } 00405 case BinaryOperation::undefined: 00406 default: { 00407 throw ErrorHandler(__FILE__,__LINE__, 00408 "not implemented", 00409 ErrorHandler::unexpected); 00410 return 0; 00411 } 00412 } 00413 return 0; 00414 }

1.5.6