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

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

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

revision 615 by elspeth, Wed Mar 22 02:12:00 2006 UTC revision 1388 by trankine, Fri Jan 11 07:45:58 2008 UTC
# Line 1  Line 1 
1  // $Id$  /* $Id$ */
 /*  
  ************************************************************  
  *          Copyright 2006 by ACcESS MNRF                   *  
  *                                                          *  
  *              http://www.access.edu.au                    *  
  *       Primary Business: Queensland, Australia            *  
  *  Licensed under the Open Software License version 3.0    *  
  *     http://www.opensource.org/licenses/osl-3.0.php       *  
  *                                                          *  
  ************************************************************  
2    
3  */  /*******************************************************
4     *
5     *           Copyright 2003-2007 by ACceSS MNRF
6     *       Copyright 2007 by University of Queensland
7     *
8     *                http://esscc.uq.edu.au
9     *        Primary Business: Queensland, Australia
10     *  Licensed under the Open Software License version 3.0
11     *     http://www.opensource.org/licenses/osl-3.0.php
12     *
13     *******************************************************/
14    
15  #if !defined escript_DataAbstract_20040315_H  #if !defined escript_DataAbstract_20040315_H
16  #define escript_DataAbstract_20040315_H  #define escript_DataAbstract_20040315_H
17    #include "system_dep.h"
18    
19  #include "DataArrayView.h"  #include "DataArrayView.h"
 #include "DataArray.h"  
20  #include "FunctionSpace.h"  #include "FunctionSpace.h"
21    
22  #include <boost/scoped_ptr.hpp>  #include <boost/scoped_ptr.hpp>
# Line 30  namespace escript { Line 30  namespace escript {
30  /**  /**
31     \brief     \brief
32     DataAbstract provides an abstract interface for the class of containers     DataAbstract provides an abstract interface for the class of containers
33     which hold ESyS data.     which hold ESyS data.
34    
35     Description:     Description:
36     DataAbstract provides an abstract interface for the class of containers     DataAbstract provides an abstract interface for the class of containers
# Line 57  class DataAbstract { Line 57  class DataAbstract {
57    
58       \param what - Input - A description of what this data represents.       \param what - Input - A description of what this data represents.
59    */    */
60      ESCRIPT_DLL_API
61    DataAbstract(const FunctionSpace& what);    DataAbstract(const FunctionSpace& what);
62    
63    /**    /**
64      \brief      \brief
65      Destructor for DataAbstract.      Destructor for DataAbstract.
66    */    */
67      ESCRIPT_DLL_API
68    virtual    virtual
69    ~DataAbstract();    ~DataAbstract();
70    
# Line 70  class DataAbstract { Line 72  class DataAbstract {
72       \brief       \brief
73       Write the data as a string.       Write the data as a string.
74    */    */
75      ESCRIPT_DLL_API
76    virtual    virtual
77    std::string    std::string
78    toString() const = 0;    toString() const = 0;
79    
80     /**
81         \brief
82         dumps the object into a netCDF file
83      */
84      ESCRIPT_DLL_API
85      virtual
86      void
87      dump(const std::string fileName) const;
88    
89    /**    /**
90       \brief       \brief
91       Return the number of data points per sample.       Return the number of data points per sample.
92    */    */
93      ESCRIPT_DLL_API
94    int    int
95    getNumDPPSample() const;    getNumDPPSample() const;
96    
# Line 85  class DataAbstract { Line 98  class DataAbstract {
98       \brief       \brief
99       Return the number of samples.       Return the number of samples.
100    */    */
101      ESCRIPT_DLL_API
102    int    int
103    getNumSamples() const;    getNumSamples() const;
104    
105    /**    /**
106       \brief       \brief
107       Return the DataArrayView of the point data. This essentially contains       Return the DataArrayView of the point data. This essentially contains
108       the shape information for each data point although it also may be used       the shape information for each data point although it also may be used
109       to manipulate the point data.       to manipulate the point data.
110    */    */
111      ESCRIPT_DLL_API
112    DataArrayView&    DataArrayView&
113    getPointDataView();    getPointDataView();
114    
115      ESCRIPT_DLL_API
116    const DataArrayView&    const DataArrayView&
117    getPointDataView() const;    getPointDataView() const;
118    
# Line 109  class DataAbstract { Line 125  class DataAbstract {
125       \param sampleNo - Input - sample number.       \param sampleNo - Input - sample number.
126       \param dataPointNo - Input - data point number.       \param dataPointNo - Input - data point number.
127     */     */
128      ESCRIPT_DLL_API
129    virtual    virtual
130    ValueType::size_type    ValueType::size_type
131    getPointOffset(int sampleNo,    getPointOffset(int sampleNo,
# Line 118  class DataAbstract { Line 135  class DataAbstract {
135       \brief       \brief
136       Return the sample data for the given sample number.       Return the sample data for the given sample number.
137    */    */
138      ESCRIPT_DLL_API
139    double*    double*
140    getSampleData(ValueType::size_type sampleNo);    getSampleData(ValueType::size_type sampleNo);
141    
# Line 125  class DataAbstract { Line 143  class DataAbstract {
143       \brief       \brief
144       Return the number of doubles stored for this Data object.       Return the number of doubles stored for this Data object.
145    */    */
146      ESCRIPT_DLL_API
147    virtual    virtual
148    ValueType::size_type    ValueType::size_type
149    getLength() const = 0;    getLength() const = 0;
# Line 134  class DataAbstract { Line 153  class DataAbstract {
153       Return the sample data for the given tag key.       Return the sample data for the given tag key.
154       NB: If the data isn't tagged an exception will be thrown.       NB: If the data isn't tagged an exception will be thrown.
155    */    */
156      ESCRIPT_DLL_API
157    virtual    virtual
158    double*    double*
159    getSampleDataByTag(int tag);    getSampleDataByTag(int tag);
160    
   /**  
      \brief  
      Assign the given value to the data-points(s) referenced by the given  
      reference number.  
   
      If this Data object cannot be accessed by reference numbers an  
      exception will be thrown.  
   
      \param ref - Input - reference number.  
      \param value - Input - value to assign to data-points associated with  
                             the given reference number.  
   */  
   virtual  
   void  
   setRefValue(int ref,  
               const DataArray& value);  
   
   /**  
      \brief  
      Return the values associated with the data-point(s) referenced by the given  
      reference number.  
   
      If this Data object cannot be accessed by reference numbers an  
      exception will be thrown.  
   
      \param ref - Input - reference number.  
      \param value - Output - object to receive data-points associated with  
                              the given reference number.  
   */  
   virtual  
   void  
   getRefValue(int ref,  
               DataArray& value);  
161    
162    /**    /**
163       \brief       \brief
# Line 179  class DataAbstract { Line 166  class DataAbstract {
166    
167       \param right - Input - The right hand side.       \param right - Input - The right hand side.
168    */    */
169      ESCRIPT_DLL_API
170    void    void
171    operandCheck(const DataAbstract& right) const;    operandCheck(const DataAbstract& right) const;
172    
# Line 186  class DataAbstract { Line 174  class DataAbstract {
174       \brief       \brief
175       Return true if a valid sample point number.       Return true if a valid sample point number.
176    */    */
177      ESCRIPT_DLL_API
178    bool    bool
179    validSamplePointNo(int samplePointNo) const;    validSamplePointNo(int samplePointNo) const;
180    
# Line 193  class DataAbstract { Line 182  class DataAbstract {
182       \brief       \brief
183       Return true if a valid sample number.       Return true if a valid sample number.
184    */    */
185      ESCRIPT_DLL_API
186    bool    bool
187    validSampleNo(int sampleNo) const;    validSampleNo(int sampleNo) const;
188    
189    /**    /**
190       \brief       \brief
191       Return a view into the data for the data point specified.       Return a view into the data for the data point specified.
192       NOTE: Construction of the DataArrayView is a relatively expensive       NOTE: Construction of the DataArrayView is a relatively expensive
193       operation.       operation.
194    
195       \param sampleNo - Input - the sample number.       \param sampleNo - Input - the sample number.
196       \param dataPointNo - Input - the data point number.       \param dataPointNo - Input - the data point number.
197    */    */
198      ESCRIPT_DLL_API
199    virtual    virtual
200    DataArrayView    DataArrayView
201    getDataPoint(int sampleNo,    getDataPoint(int sampleNo,
# Line 214  class DataAbstract { Line 205  class DataAbstract {
205       \brief       \brief
206       Return the function space associated with this Data object.       Return the function space associated with this Data object.
207    */    */
208      ESCRIPT_DLL_API
209    const    const
210    FunctionSpace&    FunctionSpace&
211    getFunctionSpace() const;    getFunctionSpace() const;
# Line 224  class DataAbstract { Line 216  class DataAbstract {
216    
217       NB: The caller is responsible for managing the object created.       NB: The caller is responsible for managing the object created.
218    */    */
219      ESCRIPT_DLL_API
220    virtual    virtual
221    DataAbstract*    DataAbstract*
222    getSlice(const DataArrayView::RegionType& region) const = 0;    getSlice(const DataArrayView::RegionType& region) const = 0;
# Line 235  class DataAbstract { Line 228  class DataAbstract {
228       \param value - Input - Data to copy from       \param value - Input - Data to copy from
229       \param region - Input - Region to copy.       \param region - Input - Region to copy.
230    */    */
231      ESCRIPT_DLL_API
232    virtual    virtual
233    void    void
234    setSlice(const DataAbstract* value,    setSlice(const DataAbstract* value,
235             const DataArrayView::RegionType& region) = 0;             const DataArrayView::RegionType& region) = 0;
236    
   /**  
      \brief  
      Reshape the data points if they are currently rank 0.  
      Will throw an exception if the data points are not rank 0.  
      The original data point value is used for all values of the new  
      data point.  
   */  
   virtual  
   void  
   reshapeDataPoint(const ShapeType& shape) = 0;  
237    
238    /**    /**
239       \brief       \brief
240       setTaggedValue       setTaggedValue
241                                                                                                                                      
242       Description:       Description:
243       Assign the given value to the given tag.       Assign the given value to the given tag.
244    
# Line 263  class DataAbstract { Line 247  class DataAbstract {
247       \param tagKey - Input - Integer key.       \param tagKey - Input - Integer key.
248       \param value - Input - Single DataArrayView value to be assigned to the tag.       \param value - Input - Single DataArrayView value to be assigned to the tag.
249    */    */
250      ESCRIPT_DLL_API
251    virtual    virtual
252    void    void
253    setTaggedValue(int tagKey,    setTaggedValue(int tagKey,
# Line 276  class DataAbstract { Line 261  class DataAbstract {
261    
262      The return value indicates success (0) or otherwise (1).      The return value indicates success (0) or otherwise (1).
263    */    */
264      ESCRIPT_DLL_API
265    virtual    virtual
266    int    int
267    archiveData(std::ofstream& archiveFile,    archiveData(std::ofstream& archiveFile,
# Line 288  class DataAbstract { Line 274  class DataAbstract {
274    
275      The return value indicates success (0) or otherwise (1).      The return value indicates success (0) or otherwise (1).
276    */    */
277      ESCRIPT_DLL_API
278    virtual    virtual
279    int    int
280    extractData(std::ifstream& archiveFile,    extractData(std::ifstream& archiveFile,
# Line 302  class DataAbstract { Line 289  class DataAbstract {
289    
290       \param value Input - new values for the data points       \param value Input - new values for the data points
291    */    */
292      ESCRIPT_DLL_API
293    virtual void    virtual void
294    copyAll(const boost::python::numeric::array& value);    copyAll(const boost::python::numeric::array& value);
295    
296    /**    /**
297       \brief       \brief
298         Copy a double value to the data point dataPointNo of sample sampleNo in this object.
299    
300         Description:
301         Copy a double value to the data point dataPointNo of sample sampleNo in this object.
302    
303         \param sampleNo Input - sample number
304         \param dataPointNo Input - data point of the sample
305         \param value Input - new values for the data point
306      */
307      ESCRIPT_DLL_API
308      virtual void
309      copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
310    
311      /**
312         \brief
313         Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
314    
315         Description:
316         Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
317    
318         \param sampleNo Input - sample number
319         \param dataPointNo Input - data point of the sample
320         \param value Input - new values for the data point
321      */
322      ESCRIPT_DLL_API
323      virtual void
324      copyToDataPoint(const int sampleNo, const int dataPointNo, const boost::python::numeric::array& value);
325    
326    
327      /**
328         \brief
329       Return the tag number associated with the given data-point number.       Return the tag number associated with the given data-point number.
330    
331       If the object cannot be referenced by tag numbers, an exception       If the object cannot be referenced by tag numbers, an exception
332       will be thrown.       will be thrown.
333    */    */
334      ESCRIPT_DLL_API
335    virtual    virtual
336    int    int
337    getTagNumber(int dpno);    getTagNumber(int dpno);
338    
339    /**    /**
340       \brief       \brief
341         Computes a symmetric matrix (A + AT) / 2
342    
343         \param ev - Output - a symmetric matrix
344    
345      */
346      ESCRIPT_DLL_API
347      virtual void
348      symmetric(DataAbstract* ev);
349    
350      /**
351         \brief
352         Computes a nonsymmetric matrix (A - AT) / 2
353    
354         \param ev - Output - a nonsymmetric matrix
355    
356      */
357      ESCRIPT_DLL_API
358      virtual void
359      nonsymmetric(DataAbstract* ev);
360    
361      /**
362         \brief
363         Computes the trace of a matrix
364    
365         \param ev - Output - the trace of a matrix
366    
367      */
368      ESCRIPT_DLL_API
369      virtual void
370      trace(DataAbstract* ev, int axis_offset);
371    
372      /**
373         \brief
374         Transpose each data point of this Data object around the given axis.
375    
376         \param ev - Output - the transpose of a matrix
377    
378      */
379      ESCRIPT_DLL_API
380      virtual void
381      transpose(DataAbstract* ev, int axis_offset);
382    
383      /**
384         \brief
385         swaps components axis0 and axis1
386    
387         \param ev - Output - swapped components
388    
389      */
390      ESCRIPT_DLL_API
391      virtual void
392      swapaxes(DataAbstract* ev, int axis0, int axis1);
393      /**
394         \brief
395       solves the eigenvalue problem this*V=ev*V for the eigenvalues ev       solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
396    
397       \param ev - Output - eigenvalues in increasing order at each data point       \param ev - Output - eigenvalues in increasing order at each data point
398    
399    */    */
400      ESCRIPT_DLL_API
401    virtual void    virtual void
402    eigenvalues(DataAbstract* ev);    eigenvalues(DataAbstract* ev);
403    
404    /**    /**
405       \brief       \brief
406         sets values to zero
407    
408      */
409      ESCRIPT_DLL_API
410      virtual void
411      setToZero();
412    
413      /**
414         \brief
415       solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V       solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
416    
417       \param ev - Output - eigenvalues in increasing order at each data point       \param ev - Output - eigenvalues in increasing order at each data point
# Line 337  class DataAbstract { Line 421  class DataAbstract {
421    
422    */    */
423    
424      ESCRIPT_DLL_API
425    virtual void    virtual void
426    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);
427    
# Line 349  class DataAbstract { Line 434  class DataAbstract {
434       \param input - Input - The point data view. DataAbstract takes ownership       \param input - Input - The point data view. DataAbstract takes ownership
435       of the DataArrayView provided. It will delete it when it is destructed.       of the DataArrayView provided. It will delete it when it is destructed.
436    */    */
437      ESCRIPT_DLL_API
438    void    void
439    setPointDataView(const DataArrayView& input);    setPointDataView(const DataArrayView& input);
440    
441      ESCRIPT_DLL_API
442    void    void
443    resetPointDataView();    resetPointDataView();
444    
# Line 382  class DataAbstract { Line 469  class DataAbstract {
469    
470  inline  inline
471  bool  bool
472  DataAbstract::validSamplePointNo(int samplePointNo) const  DataAbstract::validSamplePointNo(int samplePointNo) const
473  {  {
474    return ((0 <= samplePointNo) && (samplePointNo < m_noDataPointsPerSample));    return ((0 <= samplePointNo) && (samplePointNo < m_noDataPointsPerSample));
475  }  }
# Line 403  DataAbstract::getSampleData(ValueType::s Line 490  DataAbstract::getSampleData(ValueType::s
490    
491  inline  inline
492  int  int
493  DataAbstract::getNumDPPSample() const  DataAbstract::getNumDPPSample() const
494  {  {
495    return m_noDataPointsPerSample;    return m_noDataPointsPerSample;
496  }  }

Legend:
Removed from v.615  
changed lines
  Added in v.1388

  ViewVC Help
Powered by ViewVC 1.1.26