/[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

trunk/esys2/escript/src/Data/DataExpanded.h revision 119 by jgs, Tue Apr 12 04:45:05 2005 UTC trunk/escript/src/DataExpanded.h revision 2742 by jfenwick, Thu Nov 12 06:03:37 2009 UTC
# Line 1  Line 1 
1  // $Id$  
2  /*  /*******************************************************
3   ******************************************************************************  *
4   *                                                                            *  * Copyright (c) 2003-2009 by University of Queensland
5   *       COPYRIGHT  ACcESS 2004 -  All Rights Reserved                        *  * Earth Systems Science Computational Center (ESSCC)
6   *                                                                            *  * http://www.uq.edu.au/esscc
7   * This software is the property of ACcESS. No part of this code              *  *
8   * may be copied in any form or by any means without the expressed written    *  * Primary Business: Queensland, Australia
9   * consent of ACcESS.  Copying, use or modification of this software          *  * Licensed under the Open Software License version 3.0
10   * by any unauthorised person is illegal unless that person has a software    *  * http://www.opensource.org/licenses/osl-3.0.php
11   * license agreement with ACcESS.                                             *  *
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"
18    
19  #include "DataAbstract.h"  #include "DataReady.h"
20  #include "DataBlocks2D.h"  #include "DataBlocks2D.h"
 #include "DataArrayView.h"  
   
 #include <boost/scoped_ptr.hpp>  
 #include <boost/python/numeric.hpp>  
21    
22  namespace escript {  namespace escript {
23    
24  //  //
25  // Forward declarations of other Data types.  // Forward declarations of other Data types.
 class DataEmpty;  
26  class DataConstant;  class DataConstant;
27  class DataTagged;  class DataTagged;
28    
# Line 43  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 58  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.
      \param what - Input - A description of what this data represents.  
   */  
   DataExpanded(const boost::python::numeric::array& 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.  
59       \param what - Input - A description of what this data represents.       \param what - Input - A description of what this data represents.
60    */    */
61    DataExpanded(const DataArrayView& value,    ESCRIPT_DLL_API
62      DataExpanded(const WrappedArray& value,
63                 const FunctionSpace& what);                 const FunctionSpace& what);
64    
65    /**    /**
# Line 89  class DataExpanded : public DataAbstract Line 70  class DataExpanded : public DataAbstract
70       \param other - Input - DataExpanded object to slice from.       \param other - Input - DataExpanded object to slice from.
71       \param region - Input - region to copy.       \param region - Input - region to copy.
72    */    */
73      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 100  class DataExpanded : public DataAbstract Line 82  class DataExpanded : public DataAbstract
82       Alternative Constructor for DataExpanded objects.       Alternative Constructor for DataExpanded objects.
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 data values for each data-point.       \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
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
96       Copy constructor for DataExpanded.       Copy constructor for DataExpanded.
97       Performs a deep copy from another DataExpanded.       Performs a deep copy from another DataExpanded.
98    */    */
99      ESCRIPT_DLL_API
100    DataExpanded(const DataExpanded& other);    DataExpanded(const DataExpanded& other);
101    
102    /**    /**
# Line 118  class DataExpanded : public DataAbstract Line 104  class DataExpanded : public DataAbstract
104       Copy constructor for DataExpanded.       Copy constructor for DataExpanded.
105       Construct a DataExpanded from a DataConstant.       Construct a DataExpanded from a DataConstant.
106    */    */
107      ESCRIPT_DLL_API
108    DataExpanded(const DataConstant& other);    DataExpanded(const DataConstant& other);
109    
110    /**    /**
# Line 125  class DataExpanded : public DataAbstract Line 112  class DataExpanded : public DataAbstract
112       Copy constructor for DataExpanded.       Copy constructor for DataExpanded.
113       Construct a DataExpanded from a DataTagged.       Construct a DataExpanded from a DataTagged.
114    */    */
115      ESCRIPT_DLL_API
116    DataExpanded(const DataTagged& other);    DataExpanded(const DataTagged& other);
117    
118    /**    /**
119       \brief       \brief
120       Default destructor for DataExpanded.       Default destructor for DataExpanded.
121    */    */
122      ESCRIPT_DLL_API
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       \brief
142       Return a textual representation of the data.       Return a textual representation of the data.
143    */    */
144      ESCRIPT_DLL_API
145    virtual    virtual
146    std::string    std::string
147    toString() const;    toString() const;
148    
149    /**    /**
150         \brief Return a deep copy of the current object.
151      */
152      ESCRIPT_DLL_API
153      virtual
154      DataAbstract*
155      deepCopy();
156    
157    
158     /**
159         \brief
160         dumps the object into a netCDF file
161      */
162      ESCRIPT_DLL_API
163      virtual
164      void
165      dump(const std::string fileName) const;
166    
167    
168      /**
169        \brief invert square matricies
170        \param out - Where to store the results
171      */
172      ESCRIPT_DLL_API
173      virtual void
174      matrixInverse(DataAbstract* out) const;
175    
176     /**
177       \brief       \brief
178       Reshape the data point if the data point is currently rank 0.      sets all values to zero
      The original data point value is used for all values of the new  
      data point.  
179    */    */
180      ESCRIPT_DLL_API
181      virtual
182    void    void
183    reshapeDataPoint(const DataArrayView::ShapeType& shape);    setToZero();
184    
185    /**    /**
186       \brief       \brief
# Line 160  class DataExpanded : public DataAbstract Line 191  class DataExpanded : public DataAbstract
191       \param sampleNo - Input - sample number.       \param sampleNo - Input - sample number.
192       \param dataPointNo - Input - data point number.       \param dataPointNo - Input - data point number.
193    */    */
194      ESCRIPT_DLL_API
195    virtual    virtual
196    DataArrayView::ValueType::size_type    DataTypes::ValueType::size_type
197    getPointOffset(int sampleNo,    getPointOffset(int sampleNo,
198                   int dataPointNo) const;                   int dataPointNo) const;
199    
200      ESCRIPT_DLL_API
201      virtual
202      DataTypes::ValueType::size_type
203      getPointOffset(int sampleNo,
204                     int dataPointNo);
205    
206    /**    /**
207       \brief       \brief
208       Return a view into the data array for the data point specified.       Return a a reference to the underlying DataVector.
209      */
210    
211      ESCRIPT_DLL_API
212      DataTypes::ValueType&
213      getVectorRW();
214    
215      ESCRIPT_DLL_API
216      const DataTypes::ValueType&
217      getVectorRO() const;
218    
      NOTE: Construction of the DataArrayView is a relatively expensive  
      operation.  
219    
      \param sampleNo - Input - sample number.  
      \param dataPointNo - Input - data point number.  
      \return DataArrayView for the data point.  
   */  
   DataArrayView  
   getDataPoint(int sampleNo,  
                int dataPointNo);  
220    
221    /**    /**
222       \brief       \brief
223       Return the number of doubles stored for the Data.       Return the number of doubles stored for the Data.
224    */    */
225      ESCRIPT_DLL_API
226    virtual    virtual
227    ValueType::size_type    ValueType::size_type
228    getLength() const;    getLength() const;
# Line 195  class DataExpanded : public DataAbstract Line 234  class DataExpanded : public DataAbstract
234    
235       \param region - Input - Region to copy.       \param region - Input - Region to copy.
236    */    */
237      ESCRIPT_DLL_API
238    virtual    virtual
239    DataAbstract*    DataAbstract*
240    getSlice(const DataArrayView::RegionType& region) const;    getSlice(const DataTypes::RegionType& region) const;
241    
242    /**    /**
243       \brief       \brief
# Line 206  class DataExpanded : public DataAbstract Line 246  class DataExpanded : public DataAbstract
246       \param value - Input - Data object to copy from.       \param value - Input - Data object to copy from.
247       \param region - Input - Region to copy.       \param region - Input - Region to copy.
248    */    */
249      ESCRIPT_DLL_API
250    virtual    virtual
251    void    void
252    setSlice(const DataAbstract* value,    setSlice(const DataAbstract* value,
253             const DataArrayView::RegionType& region);             const DataTypes::RegionType& region);
254    
255    /**    /**
256       \brief       \brief
257       Assign the given value to all data-points associated with the given       setTaggedValue
258       reference number.  
259         Description:
260         uses tag to set a new value
261    
262         \param tagKey - Input - Integer key.
263         \param pointshape - Input - The shape of the value parameter
264         \param value - Input -
265         \param dataOffset - Input - where in the value parameter to start reading the data point value.
266      */
267      void  
268      setTaggedValue(int tagKey,
269                 const DataTypes::ShapeType& pointshape,
270                     const DataTypes::ValueType& value,
271             int dataOffset=0);
272    
      A reference number corresponds to a sample, and thus to all data-points  
      in that sample.  
273    
      If the given reference number does not correspond to any sample in this  
      Data object, an exception will be thrown.  
274    
275       If the given value is a different shape to this Data object, an exception    /**
276       will be thrown.       \brief
277         Computes a symmetric matrix (A + AT) / 2
278    
279         \param ev - Output - symmetric matrix
280    
      \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.  
281    */    */
282    virtual    ESCRIPT_DLL_API
283    void    virtual void
284    setRefValue(int ref,    symmetric(DataAbstract* ev);
               const DataArray& value);  
285    
286    /**    /**
287       \brief       \brief
288       Return the value of the first data-point in the sample associated with       Computes a nonsymmetric matrix (A - AT) / 2
      the given reference number.  
289    
290       A reference number corresponds to a sample, and thus to all data-points       \param ev - Output - nonsymmetric matrix
      in that sample. If there is more than one data-point per sample number  
      in this Data object, the value of the first data-point will be returned.  
291    
292       If the given reference number does not correspond to any sample in this    */
293       Data object, an exception will be thrown.    ESCRIPT_DLL_API
294      virtual void
295      nonsymmetric(DataAbstract* ev);
296    
297       If the given value is a different shape to this Data object, an exception    /**
298       will be thrown.       \brief
299         Computes the trace of a matrix
300    
301         \param ev - Output - trace of your matrix
302         \param axis_offset -
303    
      \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.  
304    */    */
305    virtual    ESCRIPT_DLL_API
306    void    virtual void
307    getRefValue(int ref,    trace(DataAbstract* ev, int axis_offset);
308                DataArray& value);  
309      /**
310         \brief
311         Transpose each data point of this Data object around the given axis.
312    
313         \param ev - Output - transpose of your matrix
314         \param axis_offset -
315      */
316      ESCRIPT_DLL_API
317      virtual void
318      transpose(DataAbstract* ev, int axis_offset);
319    
320      /**
321         \brief
322         swaps components axis0 and axis1
323    
324         \param ev - Output - swapped components
325         \param axis0
326         \param axis1
327      */
328      ESCRIPT_DLL_API
329      virtual void
330      swapaxes(DataAbstract* ev, int axis0, int axis1);
331    
332    
333      /**
334         \brief
335         solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
336    
337         \param ev - Output - eigenvalues in increasing order at each data point
338    
339      */
340      ESCRIPT_DLL_API
341      virtual void
342      eigenvalues(DataAbstract* ev);
343    
344      /**
345         \brief
346         solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
347    
348         \param ev - Output - eigenvalues in increasing order at each data point
349         \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
350                             and the first nonzero component is positive.
351         \param tol - Input - eigenvalue with relative distance tol are treated as equal.
352    
353      */
354    
355      ESCRIPT_DLL_API
356      virtual void
357      eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
358    
359    /**
360     *      \brief
361     *           reorders data sample ordered by reference_ids to the ordering of the functions space
362     *
363     *                \param reference_ids - Input - reference_ids used for current ordering
364     *                  */
365      ESCRIPT_DLL_API
366      virtual void
367      reorderByReferenceIDs(int *reference_ids);
368    
369    
370    
371   protected:   protected:
372    
# Line 275  class DataExpanded : public DataAbstract Line 383  class DataExpanded : public DataAbstract
383       given shape and number of data points, and creates the corresponding       given shape and number of data points, and creates the corresponding
384       DataArrayView of this data.       DataArrayView of this data.
385    
      \param shape - Input - The shape of the point data.  
386       \param noSamples - Input - number of samples.       \param noSamples - Input - number of samples.
387       \param noDataPointsPerSample - Input - number of data points per sample.       \param noDataPointsPerSample - Input - number of data points per sample.
388    */    */
389    void    void
390    initialise(const DataArrayView::ShapeType& shape,    initialise(int noSamples,
              int noSamples,  
391               int noDataPointsPerSample);               int noDataPointsPerSample);
392    
393    /**    /**
394       \brief       \brief
395       Copy the given data point to all data points in this object.       Copy the given data point value to all data points in this object.
396    
397       Description:       Description:
398       Copy the given data point to all data points in this object.       Copy the given data point to all data points in this object.
# Line 294  class DataExpanded : public DataAbstract Line 400  class DataExpanded : public DataAbstract
400       \param value Input - A single data point value.       \param value Input - A single data point value.
401    */    */
402    void    void
403    copy(const DataArrayView& value);    copy(const DataConstant& value);
404    
405    
406    
407      /**
408         \brief
409         Copy the given data point value to all data points in this object.
410    
411         \param value Input - A single data point value.
412      */
413    
414    void    void
415    copy(const boost::python::numeric::array& value);    copy(const WrappedArray& value);
416    
417    
418      /**
419         \brief
420         Copy a double value to the data point dataPointNo of sample sampleNo in this object.
421    
422         Description:
423         Copy a double value to the data point dataPointNo of sample sampleNo in this object.
424    
425         \param sampleNo Input - sample number
426         \param dataPointNo Input - data point of the sample
427         \param value Input - new values for the data point
428      */
429      ESCRIPT_DLL_API
430      virtual void
431      copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
432    
433    
434      /**
435         \brief
436         Copy the value to the data point dataPointNo of sample sampleNo in this object.
437    
438         \param sampleNo Input - sample number
439         \param dataPointNo Input - data point of the sample
440         \param value Input - new values for the data point
441      */
442      ESCRIPT_DLL_API
443      virtual void
444      copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
445    
446    //    //
447    // 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.119  
changed lines
  Added in v.2742

  ViewVC Help
Powered by ViewVC 1.1.26