FEApp_ConstantNodeBCStrategyImpl.hpp

Go to the documentation of this file.
00001 // $Id$ 
00002 // $Source$ 
00003 // @HEADER
00004 // ***********************************************************************
00005 // 
00006 //                           Sacado Package
00007 //                 Copyright (2006) Sandia Corporation
00008 // 
00009 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00010 // the U.S. Government retains certain rights in this software.
00011 // 
00012 // This library is free software; you can redistribute it and/or modify
00013 // it under the terms of the GNU Lesser General Public License as
00014 // published by the Free Software Foundation; either version 2.1 of the
00015 // License, or (at your option) any later version.
00016 //  
00017 // This library is distributed in the hope that it will be useful, but
00018 // WITHOUT ANY WARRANTY; without even the implied warranty of
00019 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00020 // Lesser General Public License for more details.
00021 //  
00022 // You should have received a copy of the GNU Lesser General Public
00023 // License along with this library; if not, write to the Free Software
00024 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
00025 // USA
00026 // Questions? Contact David M. Gay (dmgay@sandia.gov) or Eric T. Phipps
00027 // (etphipp@sandia.gov).
00028 // 
00029 // ***********************************************************************
00030 // @HEADER
00031 
00032 #include <sstream>
00033 
00034 template <typename EvalT>
00035 FEApp::ConstantNodeBCStrategy<EvalT>::
00036 ConstantNodeBCStrategy(
00037                unsigned int solution_index, 
00038                unsigned int residual_index,
00039                const ScalarT& value,
00040                unsigned int bc_id,
00041                const Teuchos::RCP<ParamLib>& paramLib) :
00042   sol_index(solution_index),
00043   res_index(residual_index),
00044   val(value),
00045   offsets(1)
00046 {
00047   offsets[0] = residual_index;
00048   
00049   // Add BC to parameter library
00050   std::stringstream ss; 
00051   ss << "Constant Node BC " << bc_id;
00052   std::string name = ss.str();
00053   if (!paramLib->isParameter(name))
00054     paramLib->addParameterFamily(name, true, false);
00055   if (!paramLib->template isParameterForType<EvalT>(name)) {
00056     Teuchos::RCP< ConstantNodeBCParameter<EvalT> > tmp = 
00057       Teuchos::rcp(new ConstantNodeBCParameter<EvalT>(Teuchos::rcp(this,false)));
00058     paramLib->template addEntry<EvalT>(name, tmp);
00059   }
00060 }
00061 
00062 template <typename EvalT>
00063 FEApp::ConstantNodeBCStrategy<EvalT>::
00064 ~ConstantNodeBCStrategy()
00065 {
00066 }
00067 
00068 template <typename EvalT>
00069 const std::vector<unsigned int>&
00070 FEApp::ConstantNodeBCStrategy<EvalT>::
00071 getOffsets() const
00072 {
00073   return offsets;
00074 }
00075 
00076 template <typename EvalT>
00077 void
00078 FEApp::ConstantNodeBCStrategy<EvalT>::
00079 evaluateResidual(const std::vector<ScalarT>* dot,
00080                  const std::vector<ScalarT>& solution,
00081                  std::vector<ScalarT>& residual) const
00082 {
00083   residual[res_index] = solution[sol_index] - val;
00084 }
00085 
00086 template <typename EvalT>
00087 void
00088 FEApp::ConstantNodeBCStrategy<EvalT>::
00089 setValue(const ScalarT& value, bool mark_constant)
00090 {
00091   val = value;
00092   if (mark_constant)
00093     Sacado::MarkConstant<ScalarT>::eval(val);
00094 }

Generated on Wed May 12 21:39:32 2010 for Sacado Package Browser (Single Doxygen Collection) by  doxygen 1.4.7