00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #if !defined escript_DataConstant_20040323_H
00016 #define escript_DataConstant_20040323_H
00017 #include "system_dep.h"
00018
00019 #include "DataReady.h"
00020 #include "WrappedArray.h"
00021
00022 #include <boost/python/numeric.hpp>
00023
00024 namespace escript {
00025
00035 class DataConstant : public DataReady {
00036 typedef DataReady parent;
00037 public:
00038
00049 ESCRIPT_DLL_API
00050 DataConstant(const WrappedArray& value,
00051 const FunctionSpace& what);
00052
00053
00058 ESCRIPT_DLL_API
00059 DataConstant(const DataConstant& other);
00060
00061
00071 ESCRIPT_DLL_API
00072 DataConstant(const DataConstant& other,
00073 const DataTypes::RegionType& region);
00074
00085 ESCRIPT_DLL_API
00086 DataConstant(const FunctionSpace& what,
00087 const DataTypes::ShapeType &shape,
00088 const DataTypes::ValueType &data);
00089
00090
00091 ESCRIPT_DLL_API
00092 bool
00093 isConstant() const
00094 {
00095 return true;
00096 };
00097
00098
00103 ESCRIPT_DLL_API
00104 std::string
00105 toString() const;
00106
00110 ESCRIPT_DLL_API
00111 virtual
00112 DataAbstract*
00113 deepCopy();
00114
00115
00120 ESCRIPT_DLL_API
00121 virtual
00122 void
00123 dump(const std::string fileName) const;
00124
00129 ESCRIPT_DLL_API
00130 virtual
00131 void
00132 setToZero();
00133
00143 ESCRIPT_DLL_API
00144 virtual
00145 DataTypes::ValueType::size_type
00146 getPointOffset(int sampleNo,
00147 int dataPointNo) const;
00148
00149 ESCRIPT_DLL_API
00150 virtual
00151 DataTypes::ValueType::size_type
00152 getPointOffset(int sampleNo,
00153 int dataPointNo);
00154
00159 ESCRIPT_DLL_API
00160 virtual
00161 DataTypes::ValueType::size_type
00162 getLength() const;
00163
00171 ESCRIPT_DLL_API
00172 virtual
00173 DataAbstract*
00174 getSlice(const DataTypes::RegionType& region) const;
00175
00182 ESCRIPT_DLL_API
00183 virtual
00184 void
00185 setSlice(const DataAbstract* value,
00186 const DataTypes::RegionType& region);
00187
00188
00196 ESCRIPT_DLL_API
00197 virtual void
00198 symmetric(DataAbstract* ev);
00199
00207 ESCRIPT_DLL_API
00208 virtual void
00209 nonsymmetric(DataAbstract* ev);
00210
00219 ESCRIPT_DLL_API
00220 virtual void
00221 trace(DataAbstract* ev, int axis_offset);
00222
00230 ESCRIPT_DLL_API
00231 virtual void
00232 transpose(DataAbstract* ev, int axis_offset);
00233
00242 ESCRIPT_DLL_API
00243 virtual void
00244 swapaxes(DataAbstract* ev, int axis0, int axis1);
00245
00246
00254 ESCRIPT_DLL_API
00255 virtual void
00256 eigenvalues(DataAbstract* ev);
00257
00269 ESCRIPT_DLL_API
00270 virtual void
00271 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
00272
00273
00278 ESCRIPT_DLL_API
00279 DataTypes::ValueType&
00280 getVectorRW();
00281
00282
00283 ESCRIPT_DLL_API
00284 const DataTypes::ValueType&
00285 getVectorRO() const;
00286
00287 protected:
00288
00289 private:
00290
00291
00292 DataTypes::ValueType m_data;
00293
00294 };
00295
00296 }
00297 #endif