00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef PHX_FIELD_MANAGER_HPP
00033 #define PHX_FIELD_MANAGER_HPP
00034
00035 #include <cstddef>
00036 #include <iostream>
00037 #include <vector>
00038 #include <algorithm>
00039 #include "Teuchos_RCP.hpp"
00040 #include "Teuchos_ArrayRCP.hpp"
00041 #include "Phalanx_FieldTag.hpp"
00042 #include "Phalanx_Field.hpp"
00043 #include "Phalanx_MDField.hpp"
00044 #include "Phalanx_EvaluationContainer_TemplateManager.hpp"
00045
00046 namespace PHX {
00047
00048 template<typename Traits>
00049 class FieldManager {
00050
00051 public:
00052
00053 typedef typename PHX::EvaluationContainer_TemplateManager<Traits>::iterator iterator;
00054
00055 FieldManager();
00056
00057 ~FieldManager();
00058
00059 void requireFieldForAllEvaluationTypes(const PHX::FieldTag& t);
00060
00061 template<typename EvalT>
00062 void requireField(const PHX::FieldTag& t);
00063
00064 void registerEvaluatorForAllEvaluationTypes(const Teuchos::RCP< PHX::Evaluator<Traits> >& e);
00065
00066 template<typename EvalT>
00067 void registerEvaluator(const Teuchos::RCP< PHX::Evaluator<Traits> >& e);
00068
00069 void registerEvaluator(typename PHX::FieldManager<Traits>::iterator it,
00070 const Teuchos::RCP< PHX::Evaluator<Traits> >& e);
00071
00072 template<typename DataT, typename EvalT>
00073 void getFieldData(PHX::Field<DataT>& f);
00074
00075 template<typename DataT, typename EvalT, PHX::ArrayOrder Order,
00076 typename Tag0, typename Tag1, typename Tag2, typename Tag3,
00077 typename Tag4, typename Tag5, typename Tag6, typename Tag7>
00078 void getFieldData(PHX::MDField<DataT,Order,Tag0,Tag1,Tag2,Tag3,Tag4,Tag5,
00079 Tag6,Tag7>& f);
00080
00081 template<typename DataT, typename EvalT>
00082 void getFieldData(const PHX::FieldTag& t, Teuchos::ArrayRCP<DataT>& d);
00083
00084 void postRegistrationSetup(std::size_t max_num_cells);
00085
00086 template<typename EvalT>
00087 void evaluateFields(typename Traits::EvalData d);
00088
00089 template<typename EvalT>
00090 void preEvaluate(typename Traits::PreEvalData d);
00091
00092 template<typename EvalT>
00093 void postEvaluate(typename Traits::PostEvalData d);
00094
00095 std::size_t getMaxNumCells() const;
00096
00098 typename FieldManager::iterator begin();
00099
00101 typename FieldManager::iterator end();
00102
00103 void print(std::ostream& os) const;
00104
00105 private:
00106
00107 typedef PHX::EvaluationContainer_TemplateManager<Traits> SCTM;
00108
00109 std::size_t m_num_evaluation_types;
00110
00111 PHX::EvaluationContainer_TemplateManager<Traits> m_eval_containers;
00112
00113 std::size_t m_max_num_cells;
00114
00115 };
00116
00117 template<typename Traits>
00118 std::ostream& operator<<(std::ostream& os,
00119 const PHX::FieldManager<Traits>& vm);
00120
00121 }
00122
00123 #include "Phalanx_FieldManager_Def.hpp"
00124
00125 #endif