/[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 480 by jgs, Wed Feb 1 05:15:12 2006 UTC revision 2271 by jfenwick, Mon Feb 16 05:08:29 2009 UTC
# Line 1  Line 1 
1  // $Id$  
2  /*  /*******************************************************
3   ******************************************************************************  *
4   *                                                                            *  * Copyright (c) 2003-2008 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"  
21    
22  #include <boost/python/numeric.hpp>  #include <boost/python/numeric.hpp>
23    
# Line 41  class DataTagged; Line 40  class DataTagged;
40     template must satisfy.     template must satisfy.
41  */  */
42    
43  class DataExpanded : public DataAbstract {  class DataExpanded : public DataReady {
44    
45    typedef DataReady parent;
46    
47   public:   public:
48    
# Line 56  class DataExpanded : public DataAbstract Line 57  class DataExpanded : public DataAbstract
57       this data object, where the number of data points is defined by       this data object, where the number of data points is defined by
58       the given function space.       the given function space.
59    
60       \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.  
61       \param what - Input - A description of what this data represents.       \param what - Input - A description of what this data represents.
62    */    */
63    DataExpanded(const DataArrayView& value,    ESCRIPT_DLL_API
64      DataExpanded(const WrappedArray& value,
65                 const FunctionSpace& what);                 const FunctionSpace& what);
66    
67    /**    /**
# Line 87  class DataExpanded : public DataAbstract Line 72  class DataExpanded : public DataAbstract
72       \param other - Input - DataExpanded object to slice from.       \param other - Input - DataExpanded object to slice from.
73       \param region - Input - region to copy.       \param region - Input - region to copy.
74    */    */
75      ESCRIPT_DLL_API
76    DataExpanded(const DataExpanded& other,    DataExpanded(const DataExpanded& other,
77                 const DataArrayView::RegionType& region);                 const DataTypes::RegionType& region);
78    
79    /**    /**
80       \brief       \brief
# Line 99  class DataExpanded : public DataAbstract Line 85  class DataExpanded : public DataAbstract
85       \param what - Input - A description of what this data object represents.       \param what - Input - A description of what this data object represents.
86       \param shape - Input - the shape of each data-point.       \param shape - Input - the shape of each data-point.
87       \param data - the array of data values for the data-points.       \param data - the array of data values for the data-points.
88    
89    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.
90    */    */
91      ESCRIPT_DLL_API
92    DataExpanded(const FunctionSpace& what,    DataExpanded(const FunctionSpace& what,
93                 const DataArrayView::ShapeType &shape,                 const DataTypes::ShapeType &shape,
94                 const DataArrayView::ValueType &data);                 const DataTypes::ValueType &data);
95    
96    /**    /**
97       \brief       \brief
98       Copy constructor for DataExpanded.       Copy constructor for DataExpanded.
99       Performs a deep copy from another DataExpanded.       Performs a deep copy from another DataExpanded.
100    */    */
101      ESCRIPT_DLL_API
102    DataExpanded(const DataExpanded& other);    DataExpanded(const DataExpanded& other);
103    
104    /**    /**
# Line 116  class DataExpanded : public DataAbstract Line 106  class DataExpanded : public DataAbstract
106       Copy constructor for DataExpanded.       Copy constructor for DataExpanded.
107       Construct a DataExpanded from a DataConstant.       Construct a DataExpanded from a DataConstant.
108    */    */
109      ESCRIPT_DLL_API
110    DataExpanded(const DataConstant& other);    DataExpanded(const DataConstant& other);
111    
112    /**    /**
# Line 123  class DataExpanded : public DataAbstract Line 114  class DataExpanded : public DataAbstract
114       Copy constructor for DataExpanded.       Copy constructor for DataExpanded.
115       Construct a DataExpanded from a DataTagged.       Construct a DataExpanded from a DataTagged.
116    */    */
117      ESCRIPT_DLL_API
118    DataExpanded(const DataTagged& other);    DataExpanded(const DataTagged& other);
119    
120    /**    /**
121       \brief       \brief
122       Default destructor for DataExpanded.       Default destructor for DataExpanded.
123    */    */
124      ESCRIPT_DLL_API
125    virtual    virtual
126    ~DataExpanded();    ~DataExpanded();
127    
128      ESCRIPT_DLL_API
129      bool
130      isExpanded() const
131      {
132        return true;
133      };
134    
135      ESCRIPT_DLL_API
136      bool
137      actsExpanded() const
138      {
139        return true;
140      }
141    
142    /**    /**
143       \brief       \brief
144       Return a textual representation of the data.       Return a textual representation of the data.
145    */    */
146      ESCRIPT_DLL_API
147    virtual    virtual
148    std::string    std::string
149    toString() const;    toString() const;
150    
151    /**    /**
152         \brief Return a deep copy of the current object.
153      */
154      ESCRIPT_DLL_API
155      virtual
156      DataAbstract*
157      deepCopy();
158    
159    
160     /**
161       \brief       \brief
162       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.  
163    */    */
164      ESCRIPT_DLL_API
165      virtual
166    void    void
167    reshapeDataPoint(const DataArrayView::ShapeType& shape);    dump(const std::string fileName) const;
168    
169     /**
170         \brief
171        sets all values to zero
172      */
173      ESCRIPT_DLL_API
174      virtual
175      void
176      setToZero();
177    
178    /**    /**
179       \brief       \brief
# Line 158  class DataExpanded : public DataAbstract Line 184  class DataExpanded : public DataAbstract
184       \param sampleNo - Input - sample number.       \param sampleNo - Input - sample number.
185       \param dataPointNo - Input - data point number.       \param dataPointNo - Input - data point number.
186    */    */
187      ESCRIPT_DLL_API
188    virtual    virtual
189    DataArrayView::ValueType::size_type    DataTypes::ValueType::size_type
190    getPointOffset(int sampleNo,    getPointOffset(int sampleNo,
191                   int dataPointNo) const;                   int dataPointNo) const;
192    
193      ESCRIPT_DLL_API
194      virtual
195      DataTypes::ValueType::size_type
196      getPointOffset(int sampleNo,
197                     int dataPointNo);
198    
199    /**    /**
200       \brief       \brief
201       Return a view into the data array for the data point specified.       Return a a reference to the underlying DataVector.
202      */
203    
204      ESCRIPT_DLL_API
205      DataTypes::ValueType&
206      getVectorRW();
207    
208      ESCRIPT_DLL_API
209      const DataTypes::ValueType&
210      getVectorRO() const;
211    
      NOTE: Construction of the DataArrayView is a relatively expensive  
      operation.  
212    
      \param sampleNo - Input - sample number.  
      \param dataPointNo - Input - data point number.  
      \return DataArrayView for the data point.  
   */  
   DataArrayView  
   getDataPoint(int sampleNo,  
                int dataPointNo);  
213    
214    /**    /**
215       \brief       \brief
216       Return the number of doubles stored for the Data.       Return the number of doubles stored for the Data.
217    */    */
218      ESCRIPT_DLL_API
219    virtual    virtual
220    ValueType::size_type    ValueType::size_type
221    getLength() const;    getLength() const;
# Line 193  class DataExpanded : public DataAbstract Line 227  class DataExpanded : public DataAbstract
227    
228       \param region - Input - Region to copy.       \param region - Input - Region to copy.
229    */    */
230      ESCRIPT_DLL_API
231    virtual    virtual
232    DataAbstract*    DataAbstract*
233    getSlice(const DataArrayView::RegionType& region) const;    getSlice(const DataTypes::RegionType& region) const;
234    
235    /**    /**
236       \brief       \brief
# Line 204  class DataExpanded : public DataAbstract Line 239  class DataExpanded : public DataAbstract
239       \param value - Input - Data object to copy from.       \param value - Input - Data object to copy from.
240       \param region - Input - Region to copy.       \param region - Input - Region to copy.
241    */    */
242      ESCRIPT_DLL_API
243    virtual    virtual
244    void    void
245    setSlice(const DataAbstract* value,    setSlice(const DataAbstract* value,
246             const DataArrayView::RegionType& region);             const DataTypes::RegionType& region);
247    
248      /**
249         \brief
250         setTaggedValue
251    
252         Description:
253         uses tag to set a new value
254    
255         \param tagKey - Input - Integer key.
256         \param pointshape - Input - The shape of the value parameter
257         \param value - Input - .
258      */
259      void  
260      setTaggedValue(int tagKey,
261                 const DataTypes::ShapeType& pointshape,
262                     const DataTypes::ValueType& value,
263             int dataOffset=0);
264    
265    
266    
267    /**    /**
268       \brief       \brief
269       Assign the given value to all data-points associated with the given       Computes a symmetric matrix (A + AT) / 2
      reference number.  
270    
271       A reference number corresponds to a sample, and thus to all data-points       \param ev - Output - symmetric matrix
      in that sample.  
272    
273       If the given reference number does not correspond to any sample in this    */
274       Data object, an exception will be thrown.    ESCRIPT_DLL_API
275      virtual void
276      symmetric(DataAbstract* ev);
277    
278       If the given value is a different shape to this Data object, an exception    /**
279       will be thrown.       \brief
280         Computes a nonsymmetric matrix (A - AT) / 2
281    
282         \param ev - Output - nonsymmetric matrix
283    
      \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.  
284    */    */
285    virtual    ESCRIPT_DLL_API
286    void    virtual void
287    setRefValue(int ref,    nonsymmetric(DataAbstract* ev);
288                const DataArray& value);  
289      /**
290         \brief
291         Computes the trace of a matrix
292    
293         \param ev - Output - trace of your matrix
294    
295      */
296      ESCRIPT_DLL_API
297      virtual void
298      trace(DataAbstract* ev, int axis_offset);
299    
300    /**    /**
301       \brief       \brief
302       Return the value of the first data-point in the sample associated with       Transpose each data point of this Data object around the given axis.
      the given reference number.  
303    
304       A reference number corresponds to a sample, and thus to all data-points       \param ev - Output - transpose of your 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.  
305    
306       If the given reference number does not correspond to any sample in this    */
307       Data object, an exception will be thrown.    ESCRIPT_DLL_API
308      virtual void
309      transpose(DataAbstract* ev, int axis_offset);
310    
311       If the given value is a different shape to this Data object, an exception    /**
312       will be thrown.       \brief
313         swaps components axis0 and axis1
314    
315         \param ev - Output - swapped components
316    
      \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.  
317    */    */
318    virtual    ESCRIPT_DLL_API
319    void    virtual void
320    getRefValue(int ref,    swapaxes(DataAbstract* ev, int axis0, int axis1);
321                DataArray& value);  
322    
323    /**    /**
324      \brief       \brief
325      Archive the underlying data values to the file referenced       solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
326      by ofstream. A count of the number of values expected to be written  
327      is provided as a cross-check.       \param ev - Output - eigenvalues in increasing order at each data point
328    
     The return value indicates success (0) or otherwise (1).  
329    */    */
330    int    ESCRIPT_DLL_API
331    archiveData(std::ofstream& archiveFile,    virtual void
332                const DataArrayView::ValueType::size_type noValues) const;    eigenvalues(DataAbstract* ev);
333    
334    /**    /**
335      \brief       \brief
336      Extract the number of values specified by noValues from the file       solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
337      referenced by ifstream to the underlying data structure.  
338         \param ev - Output - eigenvalues in increasing order at each data point
339         \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
340                             and the first nonzero component is positive.
341         \param tol - Input - eigenvalue with relative distance tol are treated as equal.
342    
     The return value indicates success (0) or otherwise (1).  
343    */    */
344    int  
345    extractData(std::ifstream& archiveFile,    ESCRIPT_DLL_API
346                const DataArrayView::ValueType::size_type noValues);    virtual void
347      eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
348    
349    /**
350     *      \brief
351     *           reorders data sample ordered by reference_ids to the ordering of the functions space
352     *
353     *                \param reference_ids - Input - reference_ids used for current ordering
354     *                  */
355      ESCRIPT_DLL_API
356      virtual void
357      reorderByReferenceIDs(int *reference_ids);
358    
359    
360    
361   protected:   protected:
362    
# Line 296  class DataExpanded : public DataAbstract Line 373  class DataExpanded : public DataAbstract
373       given shape and number of data points, and creates the corresponding       given shape and number of data points, and creates the corresponding
374       DataArrayView of this data.       DataArrayView of this data.
375    
      \param shape - Input - The shape of the point data.  
376       \param noSamples - Input - number of samples.       \param noSamples - Input - number of samples.
377       \param noDataPointsPerSample - Input - number of data points per sample.       \param noDataPointsPerSample - Input - number of data points per sample.
378    */    */
379    void    void
380    initialise(const DataArrayView::ShapeType& shape,    initialise(int noSamples,
              int noSamples,  
381               int noDataPointsPerSample);               int noDataPointsPerSample);
382    
383    /**    /**
# Line 315  class DataExpanded : public DataAbstract Line 390  class DataExpanded : public DataAbstract
390       \param value Input - A single data point value.       \param value Input - A single data point value.
391    */    */
392    void    void
393    copy(const DataArrayView& value);    copy(const DataConstant& value);
394    
395    
396    
397    /**    /**
398       \brief       \brief
# Line 326  class DataExpanded : public DataAbstract Line 403  class DataExpanded : public DataAbstract
403    
404       \param value Input - A single data point value.       \param value Input - A single data point value.
405    */    */
406    
407    void    void
408    copy(const boost::python::numeric::array& value);    copy(const WrappedArray& value);
409    
410    
411    /**    /**
412       \brief       \brief
413       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.
414    
415       Description:       Description:
416       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.
417    
418       \param value Input - new values for the data points       \param sampleNo Input - sample number
419         \param dataPointNo Input - data point of the sample
420         \param value Input - new values for the data point
421    */    */
422    void    ESCRIPT_DLL_API
423    copyAll(const boost::python::numeric::array& value);    virtual void
424      copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
425    
426    
427      /**
428         \brief
429         Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
430    
431         Description:
432         Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
433    
434         \param sampleNo Input - sample number
435         \param dataPointNo Input - data point of the sample
436         \param value Input - new values for the data point
437      */
438      ESCRIPT_DLL_API
439      virtual void
440      copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
441    
442    //    //
443    // 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.480  
changed lines
  Added in v.2271

  ViewVC Help
Powered by ViewVC 1.1.26