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_SCALAR_CONTAINER_DEF_HPP
00033 #define PHX_SCALAR_CONTAINER_DEF_HPP
00034
00035 #include "Phalanx_Evaluator.hpp"
00036 #include "Phalanx_TypeStrings.hpp"
00037
00038
00039 template <typename EvalT, typename Traits>
00040 PHX::EvaluationContainer<EvalT, Traits>::EvaluationContainer()
00041 {
00042 this->vp_manager_.setEvaluationTypeName( PHX::typeAsString<EvalT>() );
00043 this->data_container_template_manager_.buildObjects();
00044 }
00045
00046
00047 template <typename EvalT, typename Traits>
00048 PHX::EvaluationContainer<EvalT, Traits>::~EvaluationContainer()
00049 {
00050
00051 }
00052
00053
00054 template <typename EvalT, typename Traits>
00055 void PHX::EvaluationContainer<EvalT, Traits>::
00056 requireField(const PHX::FieldTag& f)
00057 {
00058 this->vp_manager_.requireField(f);
00059 }
00060
00061
00062 template <typename EvalT, typename Traits>
00063 void PHX::EvaluationContainer<EvalT, Traits>::
00064 registerEvaluator(const Teuchos::RCP<PHX::Evaluator<Traits> >& p)
00065 {
00066 this->vp_manager_.registerEvaluator(p);
00067 }
00068
00069
00070 template <typename EvalT, typename Traits>
00071 void PHX::EvaluationContainer<EvalT, Traits>::
00072 postRegistrationSetup(std::size_t max_num_cells,
00073 PHX::FieldManager<Traits>& fm)
00074 {
00075
00076 if ( !(this->vp_manager_.sortingCalled()) )
00077 this->vp_manager_.sortAndOrderEvaluators();
00078
00079
00080 allocator_.reset();
00081
00082 const std::vector< Teuchos::RCP<PHX::FieldTag> >& var_list =
00083 this->vp_manager_.getFieldTags();
00084
00085 std::vector< Teuchos::RCP<PHX::FieldTag> >::const_iterator var =
00086 var_list.begin();
00087 for (; var != var_list.end(); ++var) {
00088
00089 typename DCTM::iterator it = data_container_template_manager_.begin();
00090 for (; it != data_container_template_manager_.end(); ++it) {
00091
00092 if ((*var)->dataTypeInfo() == it->dataTypeInfo()) {
00093 std::size_t size_of_data_type = it->getSizeOfDataType();
00094 int num_elements = max_num_cells * (*var)->dataLayout().size();
00095 allocator_.addRequiredChunk(size_of_data_type, num_elements);
00096 }
00097 }
00098 }
00099
00100 allocator_.setup();
00101
00102
00103
00104 for (var = var_list.begin(); var != var_list.end(); ++var) {
00105
00106 typename DCTM::iterator it = data_container_template_manager_.begin();
00107 for (; it != data_container_template_manager_.end(); ++it) {
00108
00109 if ((*var)->dataTypeInfo() == it->dataTypeInfo()) {
00110 it->allocateField(*var, max_num_cells, allocator_);
00111 }
00112 }
00113 }
00114
00115
00116 this->vp_manager_.postRegistrationSetup(fm);
00117 }
00118
00119
00120 template <typename EvalT, typename Traits>
00121 void PHX::EvaluationContainer<EvalT, Traits>::
00122 evaluateFields(typename Traits::EvalData d)
00123 {
00124 this->vp_manager_.evaluateFields(d);
00125 }
00126
00127
00128 template <typename EvalT, typename Traits>
00129 void PHX::EvaluationContainer<EvalT, Traits>::
00130 preEvaluate(typename Traits::PreEvalData d)
00131 {
00132 this->vp_manager_.preEvaluate(d);
00133 }
00134
00135
00136 template <typename EvalT, typename Traits>
00137 void PHX::EvaluationContainer<EvalT, Traits>::
00138 postEvaluate(typename Traits::PostEvalData d)
00139 {
00140 this->vp_manager_.postEvaluate(d);
00141 }
00142
00143
00144 template <typename EvalT, typename Traits> template <typename DataT>
00145 Teuchos::ArrayRCP<DataT>
00146 PHX::EvaluationContainer<EvalT, Traits>::getFieldData(const PHX::FieldTag& f)
00147 {
00148 Teuchos::ArrayRCP<DataT> r =
00149 data_container_template_manager_.template getAsObject<DataT>()->
00150 getFieldData(f);
00151 return r;
00152 }
00153
00154
00155
00156 template <typename EvalT, typename Traits>
00157 void PHX::EvaluationContainer<EvalT, Traits>::print(std::ostream& os) const
00158 {
00159 std::string type = PHX::typeAsString<EvalT>();
00160
00161 os << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << std::endl;
00162 os << "Starting PHX::EvaluationContainer Output" << std::endl;
00163 os << "Evaluation Type = " << type << std::endl;
00164 os << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << std::endl;
00165 os << this->vp_manager_ << std::endl;
00166 typename DCTM::const_iterator it = data_container_template_manager_.begin();
00167 for (; it != data_container_template_manager_.end(); ++it)
00168 os << *it << std::endl;
00169 os << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << std::endl;
00170 os << "Finished PHX::EvaluationContainer Output" << std::endl;
00171 os << "Evaluation Type = " << type << std::endl;
00172 os << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << std::endl;
00173 os << std::endl;
00174 }
00175
00176
00177
00178 #endif