00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #if !defined escript_DataExpanded_20040323_H
00016 #define escript_DataExpanded_20040323_H
00017 #include "system_dep.h"
00018
00019 #include "DataReady.h"
00020 #include "DataBlocks2D.h"
00021
00022 #include <boost/python/numeric.hpp>
00023
00024 namespace escript {
00025
00026
00027
00028 class DataConstant;
00029 class DataTagged;
00030
00043 class DataExpanded : public DataReady {
00044
00045 typedef DataReady parent;
00046
00047 public:
00048
00063 ESCRIPT_DLL_API
00064 DataExpanded(const WrappedArray& value,
00065 const FunctionSpace& what);
00066
00075 ESCRIPT_DLL_API
00076 DataExpanded(const DataExpanded& other,
00077 const DataTypes::RegionType& region);
00078
00091 ESCRIPT_DLL_API
00092 DataExpanded(const FunctionSpace& what,
00093 const DataTypes::ShapeType &shape,
00094 const DataTypes::ValueType &data);
00095
00101 ESCRIPT_DLL_API
00102 DataExpanded(const DataExpanded& other);
00103
00109 ESCRIPT_DLL_API
00110 DataExpanded(const DataConstant& other);
00111
00117 ESCRIPT_DLL_API
00118 DataExpanded(const DataTagged& other);
00119
00124 ESCRIPT_DLL_API
00125 virtual
00126 ~DataExpanded();
00127
00128 ESCRIPT_DLL_API
00129 bool
00130 isExpanded() const
00131 {
00132 return true;
00133 };
00134
00135 ESCRIPT_DLL_API
00136 bool
00137 actsExpanded() const
00138 {
00139 return true;
00140 }
00141
00146 ESCRIPT_DLL_API
00147 virtual
00148 std::string
00149 toString() const;
00150
00154 ESCRIPT_DLL_API
00155 virtual
00156 DataAbstract*
00157 deepCopy();
00158
00159
00164 ESCRIPT_DLL_API
00165 virtual
00166 void
00167 dump(const std::string fileName) const;
00168
00173 ESCRIPT_DLL_API
00174 virtual
00175 void
00176 setToZero();
00177
00187 ESCRIPT_DLL_API
00188 virtual
00189 DataTypes::ValueType::size_type
00190 getPointOffset(int sampleNo,
00191 int dataPointNo) const;
00192
00193 ESCRIPT_DLL_API
00194 virtual
00195 DataTypes::ValueType::size_type
00196 getPointOffset(int sampleNo,
00197 int dataPointNo);
00198
00204 ESCRIPT_DLL_API
00205 DataTypes::ValueType&
00206 getVectorRW();
00207
00208 ESCRIPT_DLL_API
00209 const DataTypes::ValueType&
00210 getVectorRO() const;
00211
00212
00213
00218 ESCRIPT_DLL_API
00219 virtual
00220 ValueType::size_type
00221 getLength() const;
00222
00230 ESCRIPT_DLL_API
00231 virtual
00232 DataAbstract*
00233 getSlice(const DataTypes::RegionType& region) const;
00234
00242 ESCRIPT_DLL_API
00243 virtual
00244 void
00245 setSlice(const DataAbstract* value,
00246 const DataTypes::RegionType& region);
00247
00260 void
00261 setTaggedValue(int tagKey,
00262 const DataTypes::ShapeType& pointshape,
00263 const DataTypes::ValueType& value,
00264 int dataOffset=0);
00265
00266
00267
00275 ESCRIPT_DLL_API
00276 virtual void
00277 symmetric(DataAbstract* ev);
00278
00286 ESCRIPT_DLL_API
00287 virtual void
00288 nonsymmetric(DataAbstract* ev);
00289
00298 ESCRIPT_DLL_API
00299 virtual void
00300 trace(DataAbstract* ev, int axis_offset);
00301
00309 ESCRIPT_DLL_API
00310 virtual void
00311 transpose(DataAbstract* ev, int axis_offset);
00312
00321 ESCRIPT_DLL_API
00322 virtual void
00323 swapaxes(DataAbstract* ev, int axis0, int axis1);
00324
00325
00333 ESCRIPT_DLL_API
00334 virtual void
00335 eigenvalues(DataAbstract* ev);
00336
00348 ESCRIPT_DLL_API
00349 virtual void
00350 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
00351
00358 ESCRIPT_DLL_API
00359 virtual void
00360 reorderByReferenceIDs(int *reference_ids);
00361
00362
00363
00364 protected:
00365
00366 private:
00367
00382 void
00383 initialise(int noSamples,
00384 int noDataPointsPerSample);
00385
00395 void
00396 copy(const DataConstant& value);
00397
00398
00399
00407 void
00408 copy(const WrappedArray& value);
00409
00410
00422 ESCRIPT_DLL_API
00423 virtual void
00424 copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
00425
00426
00435 ESCRIPT_DLL_API
00436 virtual void
00437 copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
00438
00439
00440
00441
00442 DataBlocks2D m_data;
00443
00444 };
00445
00446 }
00447
00448 #endif