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

PHAL_SeparableScatterScalarResponse.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_SEPARABLE_SCATTER_SCALAR_RESPONSE_HPP
00008 #define PHAL_SEPARABLE_SCATTER_SCALAR_RESPONSE_HPP
00009 
00010 #include "PHAL_ScatterScalarResponse.hpp"
00011 
00012 namespace PHAL {
00013 
00019 template<typename EvalT, typename Traits> 
00020 class SeparableScatterScalarResponseBase
00021   : public virtual PHX::EvaluatorWithBaseImpl<Traits>,
00022     public virtual PHX::EvaluatorDerived<EvalT, Traits>  {
00023   
00024 public:
00025   
00026   SeparableScatterScalarResponseBase(const Teuchos::ParameterList& p,
00027              const Teuchos::RCP<Albany::Layouts>& dl);
00028   
00029   void postRegistrationSetup(typename Traits::SetupData d,
00030            PHX::FieldManager<Traits>& vm);
00031 
00032   void evaluateFields(typename Traits::EvalData d) {}
00033   
00034 protected:
00035 
00036   // Default constructor for child classes
00037   SeparableScatterScalarResponseBase() {}
00038 
00039   // Child classes should call setup once p is filled out
00040   void setup(const Teuchos::ParameterList& p,
00041        const Teuchos::RCP<Albany::Layouts>& dl);
00042 
00043 protected:
00044 
00045   typedef typename EvalT::ScalarT ScalarT;
00046   PHX::MDField<ScalarT> local_response;
00047 };
00048   
00055 template <typename EvalT, typename Traits> 
00056 class SeparableScatterScalarResponse : 
00057     public ScatterScalarResponse<EvalT, Traits>,
00058     public SeparableScatterScalarResponseBase<EvalT,Traits> {
00059 public:
00060   SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00061          const Teuchos::RCP<Albany::Layouts>& dl) :
00062     ScatterScalarResponse<EvalT,Traits>(p,dl) {}
00063 
00064   void postRegistrationSetup(typename Traits::SetupData d,
00065            PHX::FieldManager<Traits>& vm) {
00066     ScatterScalarResponse<EvalT, Traits>::postRegistrationSetup(d,vm);
00067     SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00068   }
00069 
00070   void evaluateFields(typename Traits::EvalData d) {}
00071     
00072 protected:
00073   SeparableScatterScalarResponse() {}
00074   void setup(const Teuchos::ParameterList& p,
00075        const Teuchos::RCP<Albany::Layouts>& dl) {
00076     ScatterScalarResponse<EvalT,Traits>::setup(p,dl);
00077     SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00078   }
00079 };
00080 
00081 // **************************************************************
00082 // **************************************************************
00083 // * Specializations
00084 // **************************************************************
00085 // **************************************************************
00086 
00087 // **************************************************************
00088 // Jacobian
00089 // **************************************************************
00090 template<typename Traits>
00091 class SeparableScatterScalarResponse<PHAL::AlbanyTraits::Jacobian,Traits>
00092   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::Jacobian, Traits>,
00093     public SeparableScatterScalarResponseBase<PHAL::AlbanyTraits::Jacobian, Traits> {
00094 public:
00095   SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00096          const Teuchos::RCP<Albany::Layouts>& dl);
00097   void postRegistrationSetup(typename Traits::SetupData d,
00098            PHX::FieldManager<Traits>& vm) {
00099     ScatterScalarResponseBase<EvalT, Traits>::postRegistrationSetup(d,vm);
00100     SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00101   }
00102   void preEvaluate(typename Traits::PreEvalData d);
00103   void evaluateFields(typename Traits::EvalData d);
00104   void postEvaluate(typename Traits::PostEvalData d);
00105 protected:
00106   typedef PHAL::AlbanyTraits::Jacobian EvalT;
00107   SeparableScatterScalarResponse() {}
00108   void setup(const Teuchos::ParameterList& p,
00109        const Teuchos::RCP<Albany::Layouts>& dl) {
00110     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00111     SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00112     numNodes = dl->node_scalar->dimension(1);
00113   }
00114 private:
00115   typedef typename PHAL::AlbanyTraits::Jacobian::ScalarT ScalarT;
00116   int numNodes;
00117 };
00118 
00119 // **************************************************************
00120 // Stochastic Galerkin Jacobian
00121 // **************************************************************
00122 #ifdef ALBANY_SG_MP
00123 template<typename Traits>
00124 class SeparableScatterScalarResponse<PHAL::AlbanyTraits::SGJacobian,Traits>
00125   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::SGJacobian, Traits>,
00126     public SeparableScatterScalarResponseBase<PHAL::AlbanyTraits::SGJacobian, Traits>{
00127 public:
00128   SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00129          const Teuchos::RCP<Albany::Layouts>& dl);
00130   void postRegistrationSetup(typename Traits::SetupData d,
00131            PHX::FieldManager<Traits>& vm) {
00132     ScatterScalarResponseBase<EvalT, Traits>::postRegistrationSetup(d,vm);
00133     SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00134   }
00135   void preEvaluate(typename Traits::PreEvalData d);
00136   void evaluateFields(typename Traits::EvalData d);
00137   void postEvaluate(typename Traits::PostEvalData d);
00138 protected:
00139   typedef PHAL::AlbanyTraits::SGJacobian EvalT;
00140   SeparableScatterScalarResponse() {}
00141   void setup(const Teuchos::ParameterList& p,
00142        const Teuchos::RCP<Albany::Layouts>& dl) {
00143     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00144     SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00145     numNodes = dl->node_scalar->dimension(1);
00146   }
00147 private:
00148   typedef typename PHAL::AlbanyTraits::SGJacobian::ScalarT ScalarT;
00149   int numNodes;
00150 };
00151 
00152 // **************************************************************
00153 // Multi-point Jacobian
00154 // **************************************************************
00155 template<typename Traits>
00156 class SeparableScatterScalarResponse<PHAL::AlbanyTraits::MPJacobian,Traits>
00157   : public ScatterScalarResponseBase<PHAL::AlbanyTraits::MPJacobian, Traits>,
00158     public SeparableScatterScalarResponseBase<PHAL::AlbanyTraits::MPJacobian, Traits>{
00159 public:
00160   SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00161          const Teuchos::RCP<Albany::Layouts>& dl);
00162   void postRegistrationSetup(typename Traits::SetupData d,
00163            PHX::FieldManager<Traits>& vm) {
00164     ScatterScalarResponseBase<EvalT, Traits>::postRegistrationSetup(d,vm);
00165     SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00166   }
00167   void preEvaluate(typename Traits::PreEvalData d);
00168   void evaluateFields(typename Traits::EvalData d);
00169   void postEvaluate(typename Traits::PostEvalData d);
00170 protected:
00171   typedef PHAL::AlbanyTraits::MPJacobian EvalT;
00172   SeparableScatterScalarResponse() {}
00173   void setup(const Teuchos::ParameterList& p,
00174        const Teuchos::RCP<Albany::Layouts>& dl) {
00175     ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00176     SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00177     numNodes = dl->node_scalar->dimension(1);
00178   }
00179 private:
00180   typedef typename PHAL::AlbanyTraits::MPJacobian::ScalarT ScalarT;
00181   int numNodes;
00182 };
00183 #endif //ALBANY_SG_MP
00184 
00185 // **************************************************************
00186 }
00187 
00188 #endif

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