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

PHAL_CahnHillChemTerm_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 template<typename T>
00014 T Sqr(T num)
00015 {
00016     return num * num;
00017 }
00018 
00019 namespace PHAL {
00020 
00021 
00022 //**********************************************************************
00023 template<typename EvalT, typename Traits>
00024 CahnHillChemTerm<EvalT, Traits>::
00025 CahnHillChemTerm(const Teuchos::ParameterList& p) :
00026   rho        (p.get<std::string>                   ("Rho QP Variable Name"),
00027          p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") ),
00028   w          (p.get<std::string>                   ("W QP Variable Name"),
00029          p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") ),
00030   chemTerm   (p.get<std::string>                ("Chemical Energy Term"),
00031          p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") )
00032  
00033 {
00034 
00035   b = p.get<double>("b Value");
00036 
00037   Teuchos::RCP<PHX::DataLayout> vector_dl =
00038     p.get< Teuchos::RCP<PHX::DataLayout> >("QP Vector Data Layout");
00039   std::vector<PHX::DataLayout::size_type> dims;
00040   vector_dl->dimensions(dims);
00041   numQPs  = dims[1];
00042   numDims = dims[2];
00043 
00044   this->addDependentField(rho);
00045   this->addDependentField(w);
00046 
00047   this->addEvaluatedField(chemTerm);
00048 
00049   this->setName("CahnHillChemTerm"+PHX::TypeString<EvalT>::value);
00050 
00051 }
00052 
00053 //**********************************************************************
00054 template<typename EvalT, typename Traits>
00055 void CahnHillChemTerm<EvalT, Traits>::
00056 postRegistrationSetup(typename Traits::SetupData d,
00057                       PHX::FieldManager<Traits>& fm)
00058 {
00059   this->utils.setFieldData(rho,fm);
00060   this->utils.setFieldData(w,fm);
00061 
00062   this->utils.setFieldData(chemTerm,fm); 
00063 }
00064 
00065 //**********************************************************************
00066 template<typename EvalT, typename Traits>
00067 void CahnHillChemTerm<EvalT, Traits>::
00068 evaluateFields(typename Traits::EvalData workset)
00069 {
00070 
00071 // Equations 1.1 and 2.2 in Garcke, Rumpf, and Weikard
00072 // psi(rho) = 0.25 * (rho^2 - b^2)^2
00073 
00074   for (std::size_t cell=0; cell < workset.numCells; ++cell) 
00075     for (std::size_t qp=0; qp < numQPs; ++qp)
00076 
00077 //        chemTerm(cell, qp) = 0.25 * Sqr(Sqr(rho(cell, qp)) - Sqr(b)) - w(cell, qp);
00078         chemTerm(cell, qp) = ( Sqr(rho(cell, qp)) - Sqr(b) ) * rho(cell, qp) - w(cell, qp);
00079 
00080 }
00081 
00082 template<typename EvalT, typename Traits>
00083 typename CahnHillChemTerm<EvalT, Traits>::ScalarT&
00084 CahnHillChemTerm<EvalT, Traits>::getValue(const std::string &n) {
00085 
00086   if (n == "b") 
00087 
00088     return b;
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 CahnHillChemTerm::getValue()" << std::endl);
00095     return b;
00096   }
00097 
00098 }
00099 
00100 
00101 }
00102 

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