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

PHAL_ScatterScalarResponse.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 #ifndef PHAL_SCATTER_SCALAR_RESPONSE_HPP
00008 #define PHAL_SCATTER_SCALAR_RESPONSE_HPP
00009 
00010 #include "Phalanx_ConfigDefs.hpp"
00011 #include "Phalanx_Evaluator_WithBaseImpl.hpp"
00012 #include "Phalanx_Evaluator_Derived.hpp"
00013 #include "Phalanx_MDField.hpp"
00014 
00015 #include "Teuchos_ParameterList.hpp"
00016 #include "Albany_ProblemUtils.hpp"
00017 
00018 namespace PHAL {
00019 
00025 template<typename EvalT, typename Traits> 
00026 class ScatterScalarResponseBase
00027   : public virtual PHX::EvaluatorWithBaseImpl<Traits>,
00028     public virtual PHX::EvaluatorDerived<EvalT, Traits>  {
00029   
00030 public:
00031   
00032   ScatterScalarResponseBase(const Teuchos::ParameterList& p,
00033           const Teuchos::RCP<Albany::Layouts>& dl);
00034   
00035   void postRegistrationSetup(typename Traits::SetupData d,
00036            PHX::FieldManager<Traits>& vm);
00037   
00038   void evaluateFields(typename Traits::EvalData d) {}
00039 
00041   Teuchos::RCP<const PHX::FieldTag>
00042   getResponseFieldTag() const {
00043     return global_response.fieldTag().clone();
00044   }
00045 
00047   Teuchos::RCP<const PHX::FieldTag>
00048   getEvaluatedFieldTag() const {
00049     return scatter_operation;
00050   }
00051   
00052 protected:
00053 
00054   // Default constructor for child classes
00055   ScatterScalarResponseBase() {}
00056 
00057   // Child classes should call setup once p is filled out
00058   void setup(const Teuchos::ParameterList& p,
00059        const Teuchos::RCP<Albany::Layouts>& dl);
00060 
00061   Teuchos::RCP<const Teuchos::ParameterList> getValidResponseParameters() const;
00062 
00063 protected:
00064 
00065   typedef typename EvalT::ScalarT ScalarT;
00066   PHX::MDField<ScalarT> global_response;
00067   Teuchos::RCP<PHX::FieldTag> scatter_operation;
00068 };
00069 
00070 template<typename EvalT, typename Traits> class ScatterScalarResponse {};
00071 
00072 // **************************************************************
00073 // **************************************************************
00074 // * Specializations
00075 // **************************************************************
00076 // **************************************************************
00077 
00078 
00079 // **************************************************************
00080 // Residual 
00081 // **************************************************************
00082 template<typename Traits>
00083 class ScatterScalarResponse<PHAL::AlbanyTraits::Residual,Traits>
00084   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::Residual, Traits>  {
00085 public:
00086   ScatterScalarResponse(const Teuchos::ParameterList& p,
00087       const Teuchos::RCP<Albany::Layouts>& dl);
00088   void postEvaluate(typename Traits::PostEvalData d);
00089 protected:
00090   typedef PHAL::AlbanyTraits::Residual EvalT;
00091   ScatterScalarResponse() {}
00092   void setup(const Teuchos::ParameterList& p,
00093        const Teuchos::RCP<Albany::Layouts>& dl) {
00094     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00095   }
00096 private:
00097   typedef typename PHAL::AlbanyTraits::Residual::ScalarT ScalarT;
00098 };
00099 
00100 // **************************************************************
00101 // Jacobian -- No implementation can be provided
00102 // **************************************************************
00103 
00104 // **************************************************************
00105 // Tangent
00106 // **************************************************************
00107 template<typename Traits>
00108 class ScatterScalarResponse<PHAL::AlbanyTraits::Tangent,Traits>
00109   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::Tangent, Traits>  {
00110 public:
00111   ScatterScalarResponse(const Teuchos::ParameterList& p,
00112       const Teuchos::RCP<Albany::Layouts>& dl);
00113   void postEvaluate(typename Traits::PostEvalData d);
00114 protected:
00115   typedef PHAL::AlbanyTraits::Tangent EvalT;
00116   ScatterScalarResponse() {}
00117   void setup(const Teuchos::ParameterList& p,
00118        const Teuchos::RCP<Albany::Layouts>& dl) {
00119     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00120   }
00121 private:
00122   typedef typename PHAL::AlbanyTraits::Tangent::ScalarT ScalarT;
00123 };
00124 
00125 // **************************************************************
00126 // Stochastic Galerkin Residual 
00127 // **************************************************************
00128 #ifdef ALBANY_SG_MP
00129 template<typename Traits>
00130 class ScatterScalarResponse<PHAL::AlbanyTraits::SGResidual,Traits>
00131   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::SGResidual, Traits>  {
00132 public:
00133   ScatterScalarResponse(const Teuchos::ParameterList& p,
00134       const Teuchos::RCP<Albany::Layouts>& dl);
00135   void postEvaluate(typename Traits::PostEvalData d);
00136 protected:
00137   typedef PHAL::AlbanyTraits::SGResidual EvalT;
00138   ScatterScalarResponse() {}
00139   void setup(const Teuchos::ParameterList& p,
00140        const Teuchos::RCP<Albany::Layouts>& dl) {
00141     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00142   }
00143 private:
00144   typedef typename PHAL::AlbanyTraits::SGResidual::ScalarT ScalarT;
00145 };
00146 
00147 // **************************************************************
00148 // Stochastic Galerkin Jacobian -- no implementation can be provided
00149 // **************************************************************
00150 
00151 // **************************************************************
00152 // Stochastic Galerkin Tangent
00153 // **************************************************************
00154 template<typename Traits>
00155 class ScatterScalarResponse<PHAL::AlbanyTraits::SGTangent,Traits>
00156   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::SGTangent, Traits>  {
00157 public:
00158   ScatterScalarResponse(const Teuchos::ParameterList& p,
00159       const Teuchos::RCP<Albany::Layouts>& dl);
00160   void postEvaluate(typename Traits::PostEvalData d);
00161 protected:
00162   typedef PHAL::AlbanyTraits::SGTangent EvalT;
00163   ScatterScalarResponse() {}
00164   void setup(const Teuchos::ParameterList& p,
00165        const Teuchos::RCP<Albany::Layouts>& dl) {
00166     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00167   }
00168 private:
00169   typedef typename PHAL::AlbanyTraits::SGTangent::ScalarT ScalarT;
00170 };
00171 
00172 // **************************************************************
00173 // Multi-point Residual 
00174 // **************************************************************
00175 template<typename Traits>
00176 class ScatterScalarResponse<PHAL::AlbanyTraits::MPResidual,Traits>
00177   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::MPResidual, Traits>  {
00178 public:
00179   ScatterScalarResponse(const Teuchos::ParameterList& p,
00180       const Teuchos::RCP<Albany::Layouts>& dl);
00181   void postEvaluate(typename Traits::PostEvalData d);
00182 protected:
00183   typedef PHAL::AlbanyTraits::MPResidual EvalT;
00184   ScatterScalarResponse() {}
00185   void setup(const Teuchos::ParameterList& p,
00186        const Teuchos::RCP<Albany::Layouts>& dl) {
00187     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00188   }
00189 private:
00190   typedef typename PHAL::AlbanyTraits::MPResidual::ScalarT ScalarT;
00191 };
00192 
00193 // **************************************************************
00194 // Multi-point Jacobian -- No implementation can be provided
00195 // **************************************************************
00196 
00197 // **************************************************************
00198 // Multi-point Tangent
00199 // **************************************************************
00200 template<typename Traits>
00201 class ScatterScalarResponse<PHAL::AlbanyTraits::MPTangent,Traits>
00202   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::MPTangent, Traits>  {
00203 public:
00204   ScatterScalarResponse(const Teuchos::ParameterList& p,
00205       const Teuchos::RCP<Albany::Layouts>& dl);
00206   void postEvaluate(typename Traits::PostEvalData d);
00207 protected:
00208   typedef PHAL::AlbanyTraits::MPTangent EvalT;
00209   ScatterScalarResponse() {}
00210   void setup(const Teuchos::ParameterList& p,
00211        const Teuchos::RCP<Albany::Layouts>& dl) {
00212     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00213   }
00214 private:
00215   typedef typename PHAL::AlbanyTraits::MPTangent::ScalarT ScalarT;
00216 };
00217 #endif //ALBANY_SG_MP
00218 
00219 // **************************************************************
00220 }
00221 
00222 #endif

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