ESYS13
Revision_
|
00001 00002 /******************************************************* 00003 * 00004 * Copyright (c) 2003-2012 by University of Queensland 00005 * Earth Systems Science Computational Center (ESSCC) 00006 * http://www.uq.edu.au/esscc 00007 * 00008 * Primary Business: Queensland, Australia 00009 * Licensed under the Open Software License version 3.0 00010 * http://www.opensource.org/licenses/osl-3.0.php 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 namespace escript { 00023 00024 // 00025 // Forward declarations of other Data types. 00026 class DataConstant; 00027 class DataTagged; 00028 00041 class DataExpanded : public DataReady { 00042 00043 typedef DataReady parent; 00044 00045 public: 00046 00061 ESCRIPT_DLL_API 00062 DataExpanded(const WrappedArray& value, 00063 const FunctionSpace& what); 00064 00073 ESCRIPT_DLL_API 00074 DataExpanded(const DataExpanded& other, 00075 const DataTypes::RegionType& region); 00076 00089 ESCRIPT_DLL_API 00090 DataExpanded(const FunctionSpace& what, 00091 const DataTypes::ShapeType &shape, 00092 const DataTypes::ValueType &data); 00093 00094 00095 ESCRIPT_DLL_API 00096 DataExpanded(const FunctionSpace& what, 00097 const DataTypes::ShapeType &shape, 00098 const double data); 00099 00105 ESCRIPT_DLL_API 00106 DataExpanded(const DataExpanded& other); 00107 00113 ESCRIPT_DLL_API 00114 DataExpanded(const DataConstant& other); 00115 00121 ESCRIPT_DLL_API 00122 DataExpanded(const DataTagged& other); 00123 00128 ESCRIPT_DLL_API 00129 virtual 00130 ~DataExpanded(); 00131 00132 ESCRIPT_DLL_API 00133 bool 00134 isExpanded() const 00135 { 00136 return true; 00137 }; 00138 00139 ESCRIPT_DLL_API 00140 bool 00141 actsExpanded() const 00142 { 00143 return true; 00144 } 00145 00149 ESCRIPT_DLL_API 00150 bool 00151 hasNaN() const; 00152 00157 ESCRIPT_DLL_API 00158 virtual 00159 std::string 00160 toString() const; 00161 00165 ESCRIPT_DLL_API 00166 virtual 00167 DataAbstract* 00168 deepCopy(); 00169 00170 00175 ESCRIPT_DLL_API 00176 virtual 00177 void 00178 dump(const std::string fileName) const; 00179 00180 00186 ESCRIPT_DLL_API 00187 virtual int 00188 matrixInverse(DataAbstract* out) const; 00189 00194 ESCRIPT_DLL_API 00195 virtual 00196 void 00197 setToZero(); 00198 00208 ESCRIPT_DLL_API 00209 virtual 00210 DataTypes::ValueType::size_type 00211 getPointOffset(int sampleNo, 00212 int dataPointNo) const; 00213 00214 ESCRIPT_DLL_API 00215 virtual 00216 DataTypes::ValueType::size_type 00217 getPointOffset(int sampleNo, 00218 int dataPointNo); 00219 00225 ESCRIPT_DLL_API 00226 DataTypes::ValueType& 00227 getVectorRW(); 00228 00229 ESCRIPT_DLL_API 00230 const DataTypes::ValueType& 00231 getVectorRO() const; 00232 00233 00234 00239 ESCRIPT_DLL_API 00240 virtual 00241 ValueType::size_type 00242 getLength() const; 00243 00251 ESCRIPT_DLL_API 00252 virtual 00253 DataAbstract* 00254 getSlice(const DataTypes::RegionType& region) const; 00255 00263 ESCRIPT_DLL_API 00264 virtual 00265 void 00266 setSlice(const DataAbstract* value, 00267 const DataTypes::RegionType& region); 00268 00281 void 00282 setTaggedValue(int tagKey, 00283 const DataTypes::ShapeType& pointshape, 00284 const DataTypes::ValueType& value, 00285 int dataOffset=0); 00286 00287 00288 00296 ESCRIPT_DLL_API 00297 virtual void 00298 symmetric(DataAbstract* ev); 00299 00307 ESCRIPT_DLL_API 00308 virtual void 00309 nonsymmetric(DataAbstract* ev); 00310 00319 ESCRIPT_DLL_API 00320 virtual void 00321 trace(DataAbstract* ev, int axis_offset); 00322 00330 ESCRIPT_DLL_API 00331 virtual void 00332 transpose(DataAbstract* ev, int axis_offset); 00333 00342 ESCRIPT_DLL_API 00343 virtual void 00344 swapaxes(DataAbstract* ev, int axis0, int axis1); 00345 00346 00354 ESCRIPT_DLL_API 00355 virtual void 00356 eigenvalues(DataAbstract* ev); 00357 00369 ESCRIPT_DLL_API 00370 virtual void 00371 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13); 00372 00379 ESCRIPT_DLL_API 00380 virtual void 00381 reorderByReferenceIDs(int *reference_ids); 00382 00388 ESCRIPT_DLL_API 00389 void randomFill(long seed); 00390 00391 protected: 00392 00393 private: 00394 00409 void 00410 initialise(int noSamples, 00411 int noDataPointsPerSample); 00412 00422 void 00423 copy(const DataConstant& value); 00424 00425 00426 00434 void 00435 copy(const WrappedArray& value); 00436 00437 00449 ESCRIPT_DLL_API 00450 virtual void 00451 copyToDataPoint(const int sampleNo, const int dataPointNo, const double value); 00452 00453 00462 ESCRIPT_DLL_API 00463 virtual void 00464 copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value); 00465 00466 // 00467 // The main data storage array, a 2D array of data blocks. 00468 // noSamples * noDataPointsPerSample 00469 DataBlocks2D m_data; 00470 00471 }; 00472 00473 } // end of namespace 00474 00475 #endif