00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #include "Teuchos_TestForException.hpp"
00032 #include "FEApp_QuadraticSourceFunction.hpp"
00033 #include "FEApp_CubicSourceFunction.hpp"
00034 #include "FEApp_ExponentialSourceFunction.hpp"
00035
00036 template <typename ScalarT>
00037 FEApp::SourceFunctionFactory<ScalarT>::SourceFunctionFactory(
00038 const Teuchos::RCP<Teuchos::ParameterList>& funcParams_,
00039 const Teuchos::RCP<Sacado::ScalarParameterLibrary>& paramLib_) :
00040 funcParams(funcParams_), paramLib(paramLib_)
00041 {
00042 }
00043
00044 template <typename ScalarT>
00045 Teuchos::RCP< FEApp::AbstractSourceFunction<ScalarT> >
00046 FEApp::SourceFunctionFactory<ScalarT>::create()
00047 {
00048 Teuchos::RCP< FEApp::AbstractSourceFunction<ScalarT> > strategy;
00049
00050 std::string& method = funcParams->get("Name", "Quadratic");
00051 if (method == "Quadratic") {
00052 double factor = funcParams->get("Nonlinear Factor", 1.0);
00053 strategy =
00054 Teuchos::rcp(new FEApp::QuadraticSourceFunction<ScalarT>(factor,
00055 paramLib));
00056 }
00057 else if (method == "Cubic") {
00058 double factor = funcParams->get("Nonlinear Factor", 1.0);
00059 strategy =
00060 Teuchos::rcp(new FEApp::CubicSourceFunction<ScalarT>(factor,
00061 paramLib));
00062 }
00063 else if (method == "Exponential") {
00064 double factor = funcParams->get("Nonlinear Factor", 1.0);
00065 strategy =
00066 Teuchos::rcp(new FEApp::ExponentialSourceFunction<ScalarT>(factor,
00067 paramLib));
00068 }
00069 else {
00070 TEST_FOR_EXCEPTION(true, Teuchos::Exceptions::InvalidParameter,
00071 std::endl <<
00072 "Error! Unknown source function " << method <<
00073 "!" << std::endl << "Supplied parameter list is " <<
00074 std::endl << *funcParams);
00075 }
00076
00077 return strategy;
00078 }