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_DATA_CONTAINER_DEF_HPP
00033 #define PHX_DATA_CONTAINER_DEF_HPP
00034
00035 #include "Teuchos_TestForException.hpp"
00036 #include <iostream>
00037 #include <typeinfo>
00038 #include <sstream>
00039 #include <iterator>
00040 #include "boost/mpl/at.hpp"
00041 #include "Phalanx_FieldTag.hpp"
00042 #include "Phalanx_TypeStrings.hpp"
00043
00044
00045 template <typename DataT, typename Traits>
00046 Teuchos::ArrayRCP<DataT> PHX::DataContainer<DataT, Traits>::
00047 getFieldData(const PHX::FieldTag& t)
00048 {
00049 typename std::map< Teuchos::RCP<const PHX::FieldTag>,
00050 Teuchos::ArrayRCP<DataT>, PHX::FTComp >::iterator it;
00051 it = m_data.find(Teuchos::rcp(&t, false));
00052
00053 if (it == m_data.end()) {
00054 std::string type = PHX::typeAsString<DataT>();
00055 std::ostringstream msg;
00056 msg << "The field:\n\n" << t
00057 << "\n\ndoes not exist in DataContainer of type: "
00058 << type << std::endl;
00059 TEST_FOR_EXCEPTION(it == m_data.end(), std::logic_error, msg.str());
00060 }
00061
00062 return it->second;
00063 }
00064
00065
00066 template <typename DataT, typename Traits>
00067 void PHX::DataContainer<DataT, Traits>::
00068 allocateField(const Teuchos::RCP<PHX::FieldTag>& t,
00069 std::size_t max_num_cells,
00070 typename Traits::Allocator& a)
00071 {
00072 std::size_t num_elements = t->dataLayout().size() * max_num_cells;
00073 m_data[t] = a.template allocate<DataT>(num_elements);
00074 }
00075
00076
00077 template <typename DataT, typename Traits>
00078 const std::type_info& PHX::DataContainer<DataT, Traits>::
00079 dataTypeInfo() const
00080 {
00081 return typeid(DataT);
00082 }
00083
00084
00085 template <typename DataT, typename Traits>
00086 std::size_t PHX::DataContainer<DataT, Traits>::
00087 getSizeOfDataType() const
00088 {
00089 return sizeof(DataT);
00090 }
00091
00092
00093 template <typename DataT, typename Traits>
00094 void PHX::DataContainer<DataT, Traits>::
00095 print(std::ostream& os) const
00096 {
00097 std::string type = PHX::typeAsString<DataT>();
00098
00099 os << "********************************************" << std::endl;
00100 os << "PHX::DataContainer Output" << std::endl;
00101 os << "********************************************" << std::endl;
00102 os << " Data Type = " << type << std::endl;
00103 os << " My FieldTags:";
00104
00105 if (m_data.size() == 0)
00106 os << " None!" << std::endl;
00107 else {
00108 os << std::endl;
00109 typename std::map< Teuchos::RCP<const PHX::FieldTag>, Teuchos::ArrayRCP<DataT> >::const_iterator it = m_data.begin();
00110 for (; it != m_data.end(); ++it)
00111 os << " " << *(it->first) << std::endl;
00112 }
00113
00114 os << "********************************************" << std::endl;
00115 }
00116
00117
00118
00119 #endif