• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

HydrideStressTerm_Def.hpp

Go to the documentation of this file.
00001 //*****************************************************************//
00002 //    Albany 2.0:  Copyright 2012 Sandia Corporation               //
00003 //    This Software is released under the BSD license detailed     //
00004 //    in the file "license.txt" in the top-level Albany directory  //
00005 //*****************************************************************//
00006 
00007 #include "Teuchos_TestForException.hpp"
00008 #include "Phalanx_DataLayout.hpp"
00009 
00010 #include "Intrepid_FunctionSpaceTools.hpp"
00011 
00012 
00013 namespace HYD {
00014 
00015 
00016 //**********************************************************************
00017 template<typename EvalT, typename Traits>
00018 HydrideStressTerm<EvalT, Traits>::
00019 HydrideStressTerm(const Teuchos::ParameterList& p) :
00020 
00021   stress       (p.get<std::string>                   ("Stress Name"),
00022                p.get<Teuchos::RCP<PHX::DataLayout> >("QP Tensor Data Layout") ),
00023   stressTerm   (p.get<std::string>                ("Stress Term"),
00024                p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") )
00025  
00026 {
00027 
00028   e = p.get<double>("e Value");
00029 
00030   // Pull out numQPs and numDims from a Layout
00031   Teuchos::RCP<PHX::DataLayout> tensor_dl =
00032     p.get< Teuchos::RCP<PHX::DataLayout> >("QP Tensor Data Layout");
00033   std::vector<PHX::DataLayout::size_type> dims;
00034   tensor_dl->dimensions(dims);
00035   numQPs  = dims[1];
00036   numDims = dims[2];
00037 
00038 
00039   this->addDependentField(stress);
00040 
00041   this->addEvaluatedField(stressTerm);
00042 
00043   this->setName("HydrideStressTerm"+PHX::TypeString<EvalT>::value);
00044 
00045 }
00046 
00047 //**********************************************************************
00048 template<typename EvalT, typename Traits>
00049 void HydrideStressTerm<EvalT, Traits>::
00050 postRegistrationSetup(typename Traits::SetupData d,
00051                       PHX::FieldManager<Traits>& fm)
00052 {
00053   this->utils.setFieldData(stress,fm);
00054 
00055   this->utils.setFieldData(stressTerm,fm); 
00056 }
00057 
00058 //**********************************************************************
00059 template<typename EvalT, typename Traits>
00060 void HydrideStressTerm<EvalT, Traits>::
00061 evaluateFields(typename Traits::EvalData workset)
00062 {
00063 
00064 // Equations 2.2 in Garcke, Rumpf, and Weikard
00065 // S:E^\prime(c)
00066 
00067 // Calculate the negative of the stress term as this will be what is added to the residual
00068 
00069   for (std::size_t cell=0; cell < workset.numCells; ++cell) 
00070     for (std::size_t qp=0; qp < numQPs; ++qp){
00071 
00072       stressTerm(cell, qp) = 0.0;
00073 
00074       for (std::size_t dim=0; dim < numDims; ++dim)
00075 
00076         stressTerm(cell, qp) -= stress(cell, qp, dim, dim) * e;
00077 
00078     }
00079 
00080 }
00081 
00082 template<typename EvalT, typename Traits>
00083 typename HydrideStressTerm<EvalT, Traits>::ScalarT&
00084 HydrideStressTerm<EvalT, Traits>::getValue(const std::string &n) {
00085 
00086   if (n == "e") 
00087 
00088     return e;
00089 
00090   else 
00091   {
00092     TEUCHOS_TEST_FOR_EXCEPTION(true, Teuchos::Exceptions::InvalidParameter, std::endl <<
00093         "Error! Logic error in getting parameter " << n <<
00094         " in HydrideStressTerm::getValue()" << std::endl);
00095     return e;
00096   }
00097 
00098 }
00099 
00100 
00101 }
00102 

Generated on Wed Mar 26 2014 18:36:39 for Albany: a Trilinos-based PDE code by  doxygen 1.7.1