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_MD_FIELD_H
00033 #define PHX_MD_FIELD_H
00034
00035 #include <iostream>
00036 #include <string>
00037 #include "Teuchos_ArrayRCP.hpp"
00038 #include "Phalanx_Array.hpp"
00039 #include "Phalanx_FieldTag_Tag.hpp"
00040
00041 namespace PHX {
00042
00043 template<typename DataT, PHX::ArrayOrder Order,
00044 typename Tag0 = void, typename Tag1 = void, typename Tag2 = void,
00045 typename Tag3 = void, typename Tag4 = void, typename Tag5 = void,
00046 typename Tag6 = void, typename Tag7 = void>
00047 class MDField {
00048
00049 public:
00050
00051 typedef DataT value_type;
00052
00053 typedef typename PHX::Array<DataT,Order,Tag0,Tag1,Tag2,Tag3,Tag4,Tag5,Tag6,Tag7> array_type;
00054
00055 typedef typename array_type::size_type size_type;
00056
00057 MDField(const std::string& name, const Teuchos::RCP<PHX::DataLayout>& t);
00058
00059 MDField(const PHX::Tag<DataT>& v);
00060
00061 MDField();
00062
00063 ~MDField();
00064
00065 const PHX::FieldTag& fieldTag() const;
00066
00067 DataT& operator()(size_type index1, size_type index2, size_type index3,
00068 size_type index4, size_type index5, size_type index6,
00069 size_type index7, size_type index8);
00070
00071 DataT& operator()(size_type index1, size_type index2, size_type index3,
00072 size_type index4, size_type index5, size_type index6,
00073 size_type index7);
00074
00075 DataT& operator()(size_type index1, size_type index2, size_type index3,
00076 size_type index4, size_type index5, size_type index6);
00077
00078 DataT& operator()(size_type index1, size_type index2, size_type index3,
00079 size_type index4, size_type index5);
00080
00081 DataT& operator()(size_type index1, size_type index2, size_type index3,
00082 size_type index4);
00083
00084 DataT& operator()(size_type index1, size_type index2, size_type index3);
00085
00086 DataT& operator()(size_type index1, size_type index2);
00087
00088 DataT& operator()(size_type index1);
00089
00090 DataT& operator[](size_type index);
00091
00092 size_type dimension(size_type ord) const;
00093
00094 void dimensions(std::vector<size_type>& dims);
00095
00096 size_type size() const;
00097
00098 void setFieldTag(const PHX::Tag<DataT>& t);
00099
00100 void setFieldData(const Teuchos::ArrayRCP<DataT>& d);
00101
00102 void print(std::ostream& os, bool printValues = false) const;
00103
00104 private:
00105
00106 PHX::Tag<DataT> m_tag;
00107
00108 array_type m_field_data;
00109
00110 Teuchos::ArrayRCP<DataT> m_array_rcp;
00111
00112 #ifdef PHX_DEBUG
00113 bool m_tag_set;
00114 bool m_data_set;
00115 static const std::string m_field_tag_error_msg;
00116 static const std::string m_field_data_error_msg;
00117 #endif
00118
00119 };
00120
00121 template<typename DataT, PHX::ArrayOrder Order,
00122 typename Tag0, typename Tag1, typename Tag2, typename Tag3,
00123 typename Tag4, typename Tag5, typename Tag6, typename Tag7>
00124 std::ostream& operator<<(std::ostream& os,
00125 const PHX::MDField<DataT, Order, Tag0, Tag1,
00126 Tag2, Tag3, Tag4, Tag5, Tag6, Tag7>& h);
00127
00128 }
00129
00130 #include "Phalanx_MDField_Def.hpp"
00131
00132 #endif