/[escript]/trunk/escript/src/DataExpanded.h
ViewVC logotype

Diff of /trunk/escript/src/DataExpanded.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 804 by gross, Thu Aug 10 01:12:16 2006 UTC revision 2881 by jfenwick, Thu Jan 28 02:03:15 2010 UTC
# Line 1  Line 1 
1  // $Id$  
2  /*  /*******************************************************
3   ************************************************************  *
4   *          Copyright 2006 by ACcESS MNRF                   *  * Copyright (c) 2003-2010 by University of Queensland
5   *                                                          *  * Earth Systems Science Computational Center (ESSCC)
6   *              http://www.access.edu.au                    *  * http://www.uq.edu.au/esscc
7   *       Primary Business: Queensland, Australia            *  *
8   *  Licensed under the Open Software License version 3.0    *  * Primary Business: Queensland, Australia
9   *     http://www.opensource.org/licenses/osl-3.0.php       *  * Licensed under the Open Software License version 3.0
10   *                                                          *  * http://www.opensource.org/licenses/osl-3.0.php
11   ************************************************************  *
12  */  *******************************************************/
13    
14    
15  #if !defined escript_DataExpanded_20040323_H  #if !defined escript_DataExpanded_20040323_H
16  #define escript_DataExpanded_20040323_H  #define escript_DataExpanded_20040323_H
17  #include "system_dep.h"  #include "system_dep.h"
18    
19  #include "DataAbstract.h"  #include "DataReady.h"
20  #include "DataBlocks2D.h"  #include "DataBlocks2D.h"
 #include "DataArrayView.h"  
   
 #include <boost/python/numeric.hpp>  
21    
22  namespace escript {  namespace escript {
23    
# Line 40  class DataTagged; Line 38  class DataTagged;
38     template must satisfy.     template must satisfy.
39  */  */
40    
41  class DataExpanded : public DataAbstract {  class DataExpanded : public DataReady {
42    
43    typedef DataReady parent;
44    
45   public:   public:
46    
# Line 55  class DataExpanded : public DataAbstract Line 55  class DataExpanded : public DataAbstract
55       this data object, where the number of data points is defined by       this data object, where the number of data points is defined by
56       the given function space.       the given function space.
57    
58       \param value - Input - A single data value.       \param value - Input - The value of a single data point.
59       \param what - Input - A description of what this data represents.       \param what - Input - A description of what this data represents.
60    */    */
61    ESCRIPT_DLL_API    ESCRIPT_DLL_API
62    DataExpanded(const boost::python::numeric::array& value,    DataExpanded(const WrappedArray& value,
                const FunctionSpace& what);  
   
   /**  
      \brief  
      Alternative constructor for DataExpanded.  
   
      Description:  
      Alternative Constructor for DataExpanded.  
   
      The given single data value is copied to all the data points in  
      this data object, where the number of data points is defined by  
      the given function space.  
   
      \param value - Input - A single data value.  
      \param what - Input - A description of what this data represents.  
   */  
   ESCRIPT_DLL_API  
   DataExpanded(const DataArrayView& value,  
63                 const FunctionSpace& what);                 const FunctionSpace& what);
64    
65    /**    /**
# Line 90  class DataExpanded : public DataAbstract Line 72  class DataExpanded : public DataAbstract
72    */    */
73    ESCRIPT_DLL_API    ESCRIPT_DLL_API
74    DataExpanded(const DataExpanded& other,    DataExpanded(const DataExpanded& other,
75                 const DataArrayView::RegionType& region);                 const DataTypes::RegionType& region);
76    
77    /**    /**
78       \brief       \brief
# Line 101  class DataExpanded : public DataAbstract Line 83  class DataExpanded : public DataAbstract
83       \param what - Input - A description of what this data object represents.       \param what - Input - A description of what this data object represents.
84       \param shape - Input - the shape of each data-point.       \param shape - Input - the shape of each data-point.
85       \param data - the array of data values for the data-points.       \param data - the array of data values for the data-points.
86    
87    TODO Note that this constructor will also copy data to all points if it only contains enough elements to hold a single point.  ie this is the merge of two separate constructors.
88    */    */
89    ESCRIPT_DLL_API    ESCRIPT_DLL_API
90    DataExpanded(const FunctionSpace& what,    DataExpanded(const FunctionSpace& what,
91                 const DataArrayView::ShapeType &shape,                 const DataTypes::ShapeType &shape,
92                 const DataArrayView::ValueType &data);                 const DataTypes::ValueType &data);
93    
94    /**    /**
95       \brief       \brief
# Line 139  class DataExpanded : public DataAbstract Line 123  class DataExpanded : public DataAbstract
123    virtual    virtual
124    ~DataExpanded();    ~DataExpanded();
125    
126      ESCRIPT_DLL_API
127      bool
128      isExpanded() const
129      {
130        return true;
131      };
132    
133      ESCRIPT_DLL_API
134      bool
135      actsExpanded() const
136      {
137        return true;
138      }
139    
140      /**
141      \brief Return true if any value in the data contains a NaN.
142      */
143      ESCRIPT_DLL_API
144      bool
145      hasNaN() const;
146    
147    /**    /**
148       \brief       \brief
149       Return a textual representation of the data.       Return a textual representation of the data.
# Line 149  class DataExpanded : public DataAbstract Line 154  class DataExpanded : public DataAbstract
154    toString() const;    toString() const;
155    
156    /**    /**
157         \brief Return a deep copy of the current object.
158      */
159      ESCRIPT_DLL_API
160      virtual
161      DataAbstract*
162      deepCopy();
163    
164    
165     /**
166       \brief       \brief
167       Reshape the data point if the data point is currently rank 0.       dumps the object into a netCDF file
      The original data point value is used for all values of the new  
      data point.  
168    */    */
169    ESCRIPT_DLL_API    ESCRIPT_DLL_API
170      virtual
171    void    void
172    reshapeDataPoint(const DataArrayView::ShapeType& shape);    dump(const std::string fileName) const;
173    
174    
175      /**
176        \brief invert square matricies
177        \param out - Where to store the results
178        \return errorcode (0 indicates success)
179      */
180      ESCRIPT_DLL_API
181      virtual int
182      matrixInverse(DataAbstract* out) const;
183    
184     /**
185         \brief
186        sets all values to zero
187      */
188      ESCRIPT_DLL_API
189      virtual
190      void
191      setToZero();
192    
193    /**    /**
194       \brief       \brief
# Line 169  class DataExpanded : public DataAbstract Line 201  class DataExpanded : public DataAbstract
201    */    */
202    ESCRIPT_DLL_API    ESCRIPT_DLL_API
203    virtual    virtual
204    DataArrayView::ValueType::size_type    DataTypes::ValueType::size_type
205    getPointOffset(int sampleNo,    getPointOffset(int sampleNo,
206                   int dataPointNo) const;                   int dataPointNo) const;
207    
208      ESCRIPT_DLL_API
209      virtual
210      DataTypes::ValueType::size_type
211      getPointOffset(int sampleNo,
212                     int dataPointNo);
213    
214    /**    /**
215       \brief       \brief
216       Return a view into the data array for the data point specified.       Return a a reference to the underlying DataVector.
217      */
218    
219       NOTE: Construction of the DataArrayView is a relatively expensive    ESCRIPT_DLL_API
220       operation.    DataTypes::ValueType&
221      getVectorRW();
222    
      \param sampleNo - Input - sample number.  
      \param dataPointNo - Input - data point number.  
      \return DataArrayView for the data point.  
   */  
223    ESCRIPT_DLL_API    ESCRIPT_DLL_API
224    DataArrayView    const DataTypes::ValueType&
225    getDataPoint(int sampleNo,    getVectorRO() const;
226                 int dataPointNo);  
227    
228    
229    /**    /**
230       \brief       \brief
# Line 208  class DataExpanded : public DataAbstract Line 245  class DataExpanded : public DataAbstract
245    ESCRIPT_DLL_API    ESCRIPT_DLL_API
246    virtual    virtual
247    DataAbstract*    DataAbstract*
248    getSlice(const DataArrayView::RegionType& region) const;    getSlice(const DataTypes::RegionType& region) const;
249    
250    /**    /**
251       \brief       \brief
# Line 221  class DataExpanded : public DataAbstract Line 258  class DataExpanded : public DataAbstract
258    virtual    virtual
259    void    void
260    setSlice(const DataAbstract* value,    setSlice(const DataAbstract* value,
261             const DataArrayView::RegionType& region);             const DataTypes::RegionType& region);
   
   /**  
      \brief  
      Assign the given value to all data-points associated with the given  
      reference number.  
   
      A reference number corresponds to a sample, and thus to all data-points  
      in that sample.  
   
      If the given reference number does not correspond to any sample in this  
      Data object, an exception will be thrown.  
   
      If the given value is a different shape to this Data object, an exception  
      will be thrown.  
   
      \param ref - Input - reference number which determines sample numebr to  
                           assign given values to.  
      \param value - Input - Value to assign to data-point associated with  
                             the given reference number.  
   */  
   ESCRIPT_DLL_API  
   virtual  
   void  
   setRefValue(int ref,  
               const DataArray& value);  
262    
263    /**    /**
264       \brief       \brief
265       Return the value of the first data-point in the sample associated with       setTaggedValue
      the given reference number.  
266    
267       A reference number corresponds to a sample, and thus to all data-points       Description:
268       in that sample. If there is more than one data-point per sample number       uses tag to set a new value
      in this Data object, the value of the first data-point will be returned.  
   
      If the given reference number does not correspond to any sample in this  
      Data object, an exception will be thrown.  
   
      If the given value is a different shape to this Data object, an exception  
      will be thrown.  
   
      \param ref - Input - reference number which determines sample number to  
                           read from.  
      \param value - Output - Object to receive data-points associated with  
                             the given reference number.  
   */  
   ESCRIPT_DLL_API  
   virtual  
   void  
   getRefValue(int ref,  
               DataArray& value);  
   
   /**  
     \brief  
     Archive the underlying data values to the file referenced  
     by ofstream. A count of the number of values expected to be written  
     is provided as a cross-check.  
269    
270      The return value indicates success (0) or otherwise (1).       \param tagKey - Input - Integer key.
271    */       \param pointshape - Input - The shape of the value parameter
272    ESCRIPT_DLL_API       \param value - Input -
273    int       \param dataOffset - Input - where in the value parameter to start reading the data point value.
274    archiveData(std::ofstream& archiveFile,    */
275                const DataArrayView::ValueType::size_type noValues) const;    void  
276      setTaggedValue(int tagKey,
277                 const DataTypes::ShapeType& pointshape,
278                     const DataTypes::ValueType& value,
279             int dataOffset=0);
280    
   /**  
     \brief  
     Extract the number of values specified by noValues from the file  
     referenced by ifstream to the underlying data structure.  
281    
     The return value indicates success (0) or otherwise (1).  
   */  
   ESCRIPT_DLL_API  
   int  
   extractData(std::ifstream& archiveFile,  
               const DataArrayView::ValueType::size_type noValues);  
282    
283    /**    /**
284       \brief       \brief
# Line 326  class DataExpanded : public DataAbstract Line 307  class DataExpanded : public DataAbstract
307       Computes the trace of a matrix       Computes the trace of a matrix
308    
309       \param ev - Output - trace of your matrix       \param ev - Output - trace of your matrix
310         \param axis_offset -
311    
312    */    */
313    ESCRIPT_DLL_API    ESCRIPT_DLL_API
# Line 337  class DataExpanded : public DataAbstract Line 319  class DataExpanded : public DataAbstract
319       Transpose each data point of this Data object around the given axis.       Transpose each data point of this Data object around the given axis.
320    
321       \param ev - Output - transpose of your matrix       \param ev - Output - transpose of your matrix
322         \param axis_offset -
323    */    */
324    ESCRIPT_DLL_API    ESCRIPT_DLL_API
325    virtual void    virtual void
# Line 348  class DataExpanded : public DataAbstract Line 330  class DataExpanded : public DataAbstract
330       swaps components axis0 and axis1       swaps components axis0 and axis1
331    
332       \param ev - Output - swapped components       \param ev - Output - swapped components
333         \param axis0
334         \param axis1
335    */    */
336    ESCRIPT_DLL_API    ESCRIPT_DLL_API
337    virtual void    virtual void
# Line 381  class DataExpanded : public DataAbstract Line 364  class DataExpanded : public DataAbstract
364    virtual void    virtual void
365    eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);    eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
366    
367    /**
368     *      \brief
369     *           reorders data sample ordered by reference_ids to the ordering of the functions space
370     *
371     *                \param reference_ids - Input - reference_ids used for current ordering
372     *                  */
373      ESCRIPT_DLL_API
374      virtual void
375      reorderByReferenceIDs(int *reference_ids);
376    
377    
378    
379   protected:   protected:
380    
# Line 397  class DataExpanded : public DataAbstract Line 391  class DataExpanded : public DataAbstract
391       given shape and number of data points, and creates the corresponding       given shape and number of data points, and creates the corresponding
392       DataArrayView of this data.       DataArrayView of this data.
393    
      \param shape - Input - The shape of the point data.  
394       \param noSamples - Input - number of samples.       \param noSamples - Input - number of samples.
395       \param noDataPointsPerSample - Input - number of data points per sample.       \param noDataPointsPerSample - Input - number of data points per sample.
396    */    */
397    void    void
398    initialise(const DataArrayView::ShapeType& shape,    initialise(int noSamples,
              int noSamples,  
399               int noDataPointsPerSample);               int noDataPointsPerSample);
400    
401    /**    /**
# Line 416  class DataExpanded : public DataAbstract Line 408  class DataExpanded : public DataAbstract
408       \param value Input - A single data point value.       \param value Input - A single data point value.
409    */    */
410    void    void
411    copy(const DataArrayView& value);    copy(const DataConstant& value);
412    
413    
414    
415    /**    /**
416       \brief       \brief
417       Copy the given data point value given a numarray object to all data points in this object.       Copy the given data point value to all data points in this object.
   
      Description:  
      Copy the given data point value given a numarray object to all data points in this object.  
418    
419       \param value Input - A single data point value.       \param value Input - A single data point value.
420    */    */
421    
422    void    void
423    copy(const boost::python::numeric::array& value);    copy(const WrappedArray& value);
424    
425    
426    /**    /**
427       \brief       \brief
428       Copy the numarray object to the data points in this object.       Copy a double value to the data point dataPointNo of sample sampleNo in this object.
429    
430       Description:       Description:
431       Copy the numarray object to the data points in this object.       Copy a double value to the data point dataPointNo of sample sampleNo in this object.
432    
433       \param value Input - new values for the data points       \param sampleNo Input - sample number
434         \param dataPointNo Input - data point of the sample
435         \param value Input - new values for the data point
436    */    */
437    void    ESCRIPT_DLL_API
438    copyAll(const boost::python::numeric::array& value);    virtual void
439      copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
440    
441    
442      /**
443         \brief
444         Copy the value to the data point dataPointNo of sample sampleNo in this object.
445    
446         \param sampleNo Input - sample number
447         \param dataPointNo Input - data point of the sample
448         \param value Input - new values for the data point
449      */
450      ESCRIPT_DLL_API
451      virtual void
452      copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
453    
454    //    //
455    // The main data storage array, a 2D array of data blocks.    // The main data storage array, a 2D array of data blocks.

Legend:
Removed from v.804  
changed lines
  Added in v.2881

  ViewVC Help
Powered by ViewVC 1.1.26