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

Albany_StateManager.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 ALBANY_STATEMANAGER
00008 #define ALBANY_STATEMANAGER
00009 
00010 #include <string>
00011 #include <map>
00012 #include <vector>
00013 #include "Epetra_Vector.h"
00014 #include "Teuchos_RCP.hpp"
00015 #include "Phalanx_DataLayout.hpp"
00016 #include "Intrepid_FieldContainer.hpp"
00017 #include "Albany_DataTypes.hpp"
00018 #include "Teuchos_ParameterList.hpp"
00019 #include "Albany_AbstractDiscretization.hpp"
00020 #include "Albany_StateInfoStruct.hpp"
00021 #include "Albany_EigendataInfoStruct.hpp"
00022 #include "Adapt_NodalDataBlock.hpp"
00023 
00024 namespace Albany {
00025 
00027 /* \brief The usage is to register state variables that will be saved
00028  * during problem construction, where they are described by a string
00029  * and a DataLayout. One time, the allocate method is called, which 
00030  * creates the memory for a vector of worksets of these states, which
00031  * are stored as MDFields.
00032 */
00033 
00034 class StateManager {
00035 public:
00036 
00037   enum SAType {ELEM, NODE};
00038 
00039   StateManager ();
00040 
00041   ~StateManager () { };
00042 
00043   typedef std::map<std::string, Teuchos::RCP<PHX::DataLayout> >  RegisteredStates;
00044 
00046   void registerStateVariable(const std::string &stateName, 
00047            const Teuchos::RCP<PHX::DataLayout> &dl,
00048                              const std::string &ebName,
00049            const std::string &init_type="scalar",
00050            const double init_val=0.0,
00051            const bool registerOldState=false,
00052            const bool outputToExodus=true,
00053            const std::string &responseIDtoRequire="");
00054 
00057   Teuchos::RCP<Teuchos::ParameterList>
00058   registerStateVariable(const std::string &name, const Teuchos::RCP<PHX::DataLayout> &dl, 
00059                         const Teuchos::RCP<PHX::DataLayout> &dummy,
00060                         const std::string &ebName,
00061                         const std::string &init_type="scalar",
00062                         const double init_val=0.0,
00063                         const bool registerOldState=false);
00064 
00066   Teuchos::RCP<Teuchos::ParameterList>
00067   registerStateVariable(const std::string &stateName, const Teuchos::RCP<PHX::DataLayout> &dl, 
00068       const Teuchos::RCP<PHX::DataLayout> &dummy,
00069                         const std::string &ebName,
00070       const std::string &init_type,
00071                         const double init_val,
00072                         const bool registerOldState,
00073       const std::string &fieldName);
00074 
00076   Teuchos::RCP<Teuchos::ParameterList>
00077   registerStateVariable(const std::string &stateName, const Teuchos::RCP<PHX::DataLayout> &dl, 
00078       const Teuchos::RCP<PHX::DataLayout> &dummy,
00079                         const std::string &ebName,
00080       const std::string &init_type,
00081                         const double init_val,
00082                         const bool registerOldState,
00083       const bool outputToExodus);
00084 
00086   void
00087   registerStateVariable(const std::string &stateName, const Teuchos::RCP<PHX::DataLayout> &dl, 
00088       const std::string &init_type);
00089 
00090 
00092   void importStateData(Albany::StateArrays& statesToCopyFrom);
00093 
00095   std::map<std::string, RegisteredStates>& getRegisteredStates(){return statesToStore;}
00096 
00099   std::vector<std::string> getResidResponseIDsToRequire(std::string & elementBlockName);
00100 
00102   void updateStates();
00103 
00105   Teuchos::RCP<Albany::StateInfoStruct> getStateInfoStruct();
00106 
00108   void setStateArrays(const Teuchos::RCP<Albany::AbstractDiscretization>& discObj);
00109 
00111   Teuchos::RCP<Albany::AbstractDiscretization> getDiscretization();
00112 
00114   Albany::StateArray& getStateArray(SAType type, int ws) const;
00116   Albany::StateArrays& getStateArrays() const;
00117 
00118   Teuchos::RCP<Adapt::NodalDataBlock> getNodalDataBlock(){ return stateInfo->createNodalDataBlock(); }
00119   
00121   Teuchos::RCP<Albany::EigendataStruct> getEigenData();
00122   void setEigenData(const Teuchos::RCP<Albany::EigendataStruct>& eigdata);
00123 
00125   Teuchos::RCP<Epetra_MultiVector> getAuxData();
00126   void setAuxData(const Teuchos::RCP<Epetra_MultiVector>& aux_data);
00127 
00128 
00129 private:
00131   StateManager(const StateManager&);
00132 
00134   StateManager& operator=(const StateManager&);
00135 
00136 private:
00137 
00139   bool stateVarsAreAllocated;
00140 
00142   std::map<std::string, RegisteredStates> statesToStore;
00143 
00145   Teuchos::RCP<Albany::AbstractDiscretization> disc;
00146 
00148   Teuchos::RCP<StateInfoStruct> stateInfo;
00149   Teuchos::RCP<EigendataStruct> eigenData;
00150   Teuchos::RCP<Epetra_MultiVector> auxData;
00151 
00152   // Experiment in dealing with Time
00153   double time;
00154   double timeOld;
00155 };
00156 
00157 }
00158 #endif

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