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
00032 #include "FEApp_BrusselatorParameters.hpp"
00033
00034 template <typename ScalarT>
00035 FEApp::BrusselatorNodeBCStrategy<ScalarT>::
00036 BrusselatorNodeBCStrategy(
00037 const ScalarT& alpha_, const ScalarT& beta_,
00038 const Teuchos::RCP<Sacado::ScalarParameterLibrary>& paramLib) :
00039 alpha(alpha_),
00040 beta(beta_),
00041 offsets(2),
00042 pl(paramLib)
00043 {
00044 offsets[0] = 0;
00045 offsets[1] = 1;
00046
00047
00048 std::string name = "Brusselator Alpha";
00049 if (!pl->isParameter(name))
00050 pl->addParameterFamily(name, true, false);
00051 if (!pl->template isParameterForType<ScalarT>(name)) {
00052 Teuchos::RCP< BrusselatorAlphaParameter<ScalarT> > tmpa =
00053 Teuchos::rcp(new BrusselatorAlphaParameter<ScalarT>(alpha));
00054 pl->template addEntry<ScalarT>(name, tmpa);
00055 }
00056
00057
00058 name = "Brusselator Beta";
00059 if (!pl->isParameter(name))
00060 pl->addParameterFamily(name, true, false);
00061 if (!pl->template isParameterForType<ScalarT>(name)) {
00062 Teuchos::RCP< BrusselatorBetaParameter<ScalarT> > tmpb =
00063 Teuchos::rcp(new BrusselatorBetaParameter<ScalarT>(beta));
00064 pl->template addEntry<ScalarT>(name, tmpb);
00065 }
00066 }
00067
00068 template <typename ScalarT>
00069 FEApp::BrusselatorNodeBCStrategy<ScalarT>::
00070 ~BrusselatorNodeBCStrategy()
00071 {
00072 }
00073
00074 template <typename ScalarT>
00075 const std::vector<unsigned int>&
00076 FEApp::BrusselatorNodeBCStrategy<ScalarT>::
00077 getOffsets() const
00078 {
00079 return offsets;
00080 }
00081
00082 template <typename ScalarT>
00083 void
00084 FEApp::BrusselatorNodeBCStrategy<ScalarT>::
00085 evaluateResidual(const std::vector<ScalarT>* dot,
00086 const std::vector<ScalarT>& solution,
00087 std::vector<ScalarT>& residual) const
00088 {
00089 alpha = pl->template getValue<ScalarT>("Brusselator Alpha");
00090 beta = pl->template getValue<ScalarT>("Brusselator Beta");
00091
00092 residual[0] = solution[0] - alpha;
00093 residual[1] = solution[1] - beta/alpha;
00094 }