ESYS13  Revision_
DataExpanded.h
Go to the documentation of this file.
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