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

LameStress.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 LAMESTRESS_HPP
00008 #define LAMESTRESS_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 #include "PHAL_Dimension.hpp"
00015 #include "lame/LameUtils.hpp"
00016 
00017 namespace LCM {
00021 // Base class 
00022 // (1) Implements constructor and postRegistrationSetup for all inherited
00023 // and specialized cases below. Implements a dummy evaluateFields that
00024 // just throw's a Not Implemented
00025 // (2) Implements private functions with calls to Lame with doubles.
00026 //
00027 template<typename EvalT, typename Traits>
00028 class LameStressBase : public PHX::EvaluatorWithBaseImpl<Traits>,
00029              public PHX::EvaluatorDerived<EvalT, Traits>  {
00030 
00031 public:
00032 
00033   LameStressBase(Teuchos::ParameterList& p);
00034 
00035   void postRegistrationSetup(typename Traits::SetupData d,
00036                       PHX::FieldManager<Traits>& vm);
00037 
00038   virtual void evaluateFields(typename Traits::EvalData d);
00039 
00040 protected:
00041 
00042   typedef typename EvalT::ScalarT ScalarT;
00043   typedef typename EvalT::MeshScalarT MeshScalarT;
00044 
00045   // Protected function for stress calc, only for RealType 
00046   void calcStressRealType(PHX::MDField<RealType,Cell,QuadPoint,Dim,Dim>& stressFieldRef,
00047                           PHX::MDField<RealType,Cell,QuadPoint,Dim,Dim>& defGradFieldRef,
00048                           typename Traits::EvalData workset,
00049                           Teuchos::RCP<LameMatParams>& matp);
00050 
00051   // Allocate material parameter arrays -- always doubles
00052   void setMatP(Teuchos::RCP<LameMatParams>& matp,
00053                typename Traits::EvalData workset);
00054 
00055   // Free material pointer arrays -- always doubles
00056   void freeMatP(Teuchos::RCP<LameMatParams>& matp);
00057 
00058 
00059   // Input:
00060   PHX::MDField<ScalarT,Cell,QuadPoint,Dim,Dim> defGradField;
00061 
00062   std::string defGradName, stressName;
00063   unsigned int numQPs;
00064   unsigned int numDims;
00065   Teuchos::RCP<PHX::DataLayout> tensor_dl;
00066 
00067   // Output:
00068   PHX::MDField<ScalarT,Cell,QuadPoint,Dim,Dim> stressField;
00069 
00070   // The LAME material model
00071   Teuchos::RCP<LameMaterial> lameMaterialModel;
00072 
00073   // The LAME material model name
00074   std::string lameMaterialModelName;
00075 
00076   // Vector of the state variable names for the LAME material model
00077   std::vector<std::string> lameMaterialModelStateVariableNames;
00078 
00079   // Vector of the fields corresponding to the LAME material model state variables
00080   std::vector< PHX::MDField<ScalarT,Cell,QuadPoint,Dim,Dim> > lameMaterialModelStateVariableFields;
00081 };
00082 
00083 // Inherted classes 
00084 template<typename EvalT, typename Traits> class LameStress;
00085 
00086 // For all cases except those specialized below, just fall through to base class.
00087 // The base class throws "Not Implemented" for evaluate fields.
00088 template<typename EvalT, typename Traits>
00089 class LameStress : public LameStressBase<EvalT, Traits> {
00090 public:
00091   LameStress(Teuchos::ParameterList& p) : LameStressBase<EvalT, Traits>(p) {};
00092 };
00093 
00094 
00095 // Template Specialization: Residual Eval calls Lame with doubles.
00096 template<typename Traits>
00097 class LameStress<PHAL::AlbanyTraits::Residual, Traits> : public LameStressBase<PHAL::AlbanyTraits::Residual, Traits> {
00098 public:
00099   LameStress(Teuchos::ParameterList& p) : LameStressBase<PHAL::AlbanyTraits::Residual,Traits>(p) {};
00100   void evaluateFields(typename Traits::EvalData d);
00101 };
00102 
00103 // Template Specialization: Jacobian Eval does finite difference of Lame with doubles.
00104 template<typename Traits>
00105 class LameStress<PHAL::AlbanyTraits::Jacobian, Traits> : public LameStressBase<PHAL::AlbanyTraits::Jacobian, Traits> {
00106 public:
00107   LameStress(Teuchos::ParameterList& p) : LameStressBase<PHAL::AlbanyTraits::Jacobian,Traits>(p) {};
00108   void evaluateFields(typename Traits::EvalData d);
00109 };
00110 
00111 // Template Specialization: Tangent Eval does finite difference of Lame with doubles.
00112 template<typename Traits>
00113 class LameStress<PHAL::AlbanyTraits::Tangent, Traits> : public LameStressBase<PHAL::AlbanyTraits::Tangent, Traits> {
00114 public:
00115   LameStress(Teuchos::ParameterList& p) : LameStressBase<PHAL::AlbanyTraits::Tangent,Traits>(p) {};
00116   void evaluateFields(typename Traits::EvalData d);
00117 };
00118 
00119 }
00120 
00121 #endif

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