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_DEF_H
00033 #define PHX_FIELD_DEF_H
00034
00035 #include "Teuchos_TestForException.hpp"
00036
00037
00038 #ifdef PHX_DEBUG
00039 template<typename DataT>
00040 const std::string PHX::Field<DataT>::m_field_tag_error_msg =
00041 "Error - PHX::Field::fieldTag() - No tag has been set!";
00042 template<typename DataT>
00043 const std::string PHX::Field<DataT>::m_field_data_error_msg = "Error - PHX::Field::operator[] - No data has been set! Please call getFieldData(this) on all PHX::Field objects in providers!";
00044 #endif
00045
00046
00047 template<typename DataT>
00048 PHX::Field<DataT>::Field(const std::string& name,
00049 const Teuchos::RCP<PHX::DataLayout>& t) :
00050 m_tag(name,t)
00051 #ifdef PHX_DEBUG
00052 , m_tag_set(true),
00053 m_data_set(false)
00054 #endif
00055 { }
00056
00057
00058 template<typename DataT>
00059 PHX::Field<DataT>::Field(const PHX::Tag<DataT>& v) :
00060 m_tag(v)
00061 #ifdef PHX_DEBUG
00062 ,m_tag_set(true),
00063 m_data_set(false)
00064 #endif
00065 { }
00066
00067
00068 template<typename DataT>
00069 PHX::Field<DataT>::Field() :
00070 m_tag("???", Teuchos::null)
00071 #ifdef PHX_DEBUG
00072 ,m_tag_set(false),
00073 m_data_set(false)
00074 #endif
00075 { }
00076
00077
00078 template<typename DataT>
00079 PHX::Field<DataT>::~Field()
00080 { }
00081
00082
00083 template<typename DataT>
00084 inline
00085 const PHX::FieldTag& PHX::Field<DataT>::fieldTag() const
00086 {
00087 #ifdef PHX_DEBUG
00088 TEST_FOR_EXCEPTION(!m_tag_set, std::logic_error, m_field_tag_error_msg);
00089 #endif
00090 return m_tag;
00091 }
00092
00093
00094 template<typename DataT>
00095 inline
00096 DataT& PHX::Field<DataT>::operator[](int index)
00097 {
00098 #ifdef PHX_DEBUG
00099 TEST_FOR_EXCEPTION(!m_data_set, std::logic_error, m_field_data_error_msg);
00100 #endif
00101 return m_field_data[index];
00102 }
00103
00104
00105 template<typename DataT>
00106 inline
00107 typename Teuchos::ArrayRCP<DataT>::Ordinal PHX::Field<DataT>::size() const
00108 {
00109 #ifdef PHX_DEBUG
00110 TEST_FOR_EXCEPTION(!m_data_set, std::logic_error, m_field_data_error_msg);
00111 #endif
00112 return m_field_data.size();
00113 }
00114
00115
00116 template<typename DataT>
00117 void PHX::Field<DataT>::setFieldTag(const PHX::Tag<DataT>& v)
00118 {
00119 #ifdef PHX_DEBUG
00120 m_tag_set = true;
00121 #endif
00122 m_tag = v;
00123 }
00124
00125
00126 template<typename DataT>
00127 void PHX::Field<DataT>::setFieldData(const Teuchos::ArrayRCP<DataT>& d)
00128 {
00129 #ifdef PHX_DEBUG
00130 m_data_set = true;
00131 #endif
00132 m_field_data = d;
00133 }
00134
00135
00136 template<typename DataT>
00137 void PHX::Field<DataT>::print(std::ostream& os) const
00138 {
00139 os << "Printing Field: \n" << m_tag << std::endl;
00140 typedef typename Teuchos::ArrayRCP<DataT>::Ordinal size_type;
00141 for (size_type i = 0; i < m_field_data.size(); ++i)
00142 os << "value[" << i << "] = " << m_field_data[i] << std::endl;
00143 }
00144
00145
00146 template<typename DataT>
00147 std::ostream& PHX::operator<<(std::ostream& os, const PHX::Field<DataT>& f)
00148 {
00149 f.print(os);
00150 return os;
00151 }
00152
00153
00154
00155 #endif