Go to the documentation of this file.00001
00002
00003
00004
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
00028
00029
00030
00031
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
00153 double time;
00154 double timeOld;
00155 };
00156
00157 }
00158 #endif