/[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 110 by jgs, Mon Feb 14 04:14:42 2005 UTC trunk/escript/src/DataExpanded.h revision 921 by gross, Fri Jan 5 00:54:37 2007 UTC
# Line 1  Line 1 
1  // $Id$  // $Id$
2  /*  /*
3   ******************************************************************************   ************************************************************
4   *                                                                            *   *          Copyright 2006 by ACcESS MNRF                   *
5   *       COPYRIGHT  ACcESS 2004 -  All Rights Reserved                        *   *                                                          *
6   *                                                                            *   *              http://www.access.edu.au                    *
7   * This software is the property of ACcESS. No part of this code              *   *       Primary Business: Queensland, Australia            *
8   * may be copied in any form or by any means without the expressed written    *   *  Licensed under the Open Software License version 3.0    *
9   * consent of ACcESS.  Copying, use or modification of this software          *   *     http://www.opensource.org/licenses/osl-3.0.php       *
10   * by any unauthorised person is illegal unless that person has a software    *   *                                                          *
11   * license agreement with ACcESS.                                             *   ************************************************************
  *                                                                            *  
  ******************************************************************************  
12  */  */
13                                                                              
14  #if !defined escript_DataExpanded_20040323_H  #if !defined escript_DataExpanded_20040323_H
15  #define escript_DataExpanded_20040323_H  #define escript_DataExpanded_20040323_H
16    #include "system_dep.h"
17    
18  #include "DataAbstract.h"  #include "DataAbstract.h"
19  #include "DataBlocks2D.h"  #include "DataBlocks2D.h"
20  #include "DataArrayView.h"  #include "DataArrayView.h"
21    
 #include <boost/scoped_ptr.hpp>  
22  #include <boost/python/numeric.hpp>  #include <boost/python/numeric.hpp>
23    
24  namespace escript {  namespace escript {
25    
26  class DataEmpty;  //
27    // Forward declarations of other Data types.
28  class DataConstant;  class DataConstant;
29  class DataTagged;  class DataTagged;
30    
# Line 34  class DataTagged; Line 33  class DataTagged;
33     Give a short description of what DataExpanded does.     Give a short description of what DataExpanded does.
34    
35     Description:     Description:
36     Give a detailed description of DataExpanded     Give a detailed description of DataExpanded.
37    
38     Template Parameters:     Template Parameters:
39     For templates describe any conditions that the parameters used in the     For templates describe any conditions that the parameters used in the
40     template must satisfy     template must satisfy.
41  */  */
42    
43  class DataExpanded : public DataAbstract{  class DataExpanded : public DataAbstract {
44    
45   public:   public:
46    
47    /**    /**
48       \brief       \brief
49       Copy constructor for DataExpanded. Performs a deep copy.       Constructor for DataExpanded.
   */  
   DataExpanded(const DataExpanded& other);  
   
   /**  
      \brief  
      Construct a DataExpanded from a DataConstant.  
   */  
   DataExpanded(const DataConstant& other);  
50    
51    /**       Description:
52       \brief       Constructor for DataExpanded.
      Construct a DataExpanded from a DataTagged.  
   */  
   DataExpanded(const DataTagged& other);  
53    
54    /**       The given single data value is copied to all the data points in
55       \brief       this data object, where the number of data points is defined by
56       Constructor for DataExpanded       the given function space.
57    
58       Description:       \param value - Input - A single data value.
      Constructor for DataExpanded  
      \param value - Input - Data value for a single 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
62    DataExpanded(const boost::python::numeric::array& value,    DataExpanded(const boost::python::numeric::array& value,
63                 const FunctionSpace& what);                 const FunctionSpace& what);
64    
65    /**    /**
66       \brief       \brief
67       Alternative constructor for DataExpanded       Alternative constructor for DataExpanded.
68    
69       Description:       Description:
70       Alternative Constructor for DataExpanded.       Alternative Constructor for DataExpanded.
      \param value - Input - Data value for a single point.  
      \param what - Input - A description of what this data represents.  
71    
72         The given single data value is copied to all the data points in
73         this data object, where the number of data points is defined by
74         the given function space.
75    
76         \param value - Input - A single data value.
77         \param what - Input - A description of what this data represents.
78    */    */
79      ESCRIPT_DLL_API
80    DataExpanded(const DataArrayView& value,    DataExpanded(const DataArrayView& value,
81                 const FunctionSpace& what);                 const FunctionSpace& what);
82    
# Line 96  class DataExpanded : public DataAbstract Line 88  class DataExpanded : public DataAbstract
88       \param other - Input - DataExpanded object to slice from.       \param other - Input - DataExpanded object to slice from.
89       \param region - Input - region to copy.       \param region - Input - region to copy.
90    */    */
91      ESCRIPT_DLL_API
92    DataExpanded(const DataExpanded& other,    DataExpanded(const DataExpanded& other,
93                 const DataArrayView::RegionType& region);                 const DataArrayView::RegionType& region);
94    
95    /**    /**
96       \brief       \brief
97       Destructor       Alternative constructor for DataExpanded objects.
98    
99         Description:
100         Alternative Constructor for DataExpanded objects.
101         \param what - Input - A description of what this data object represents.
102         \param shape - Input - the shape of each data-point.
103         \param data - the array of data values for the data-points.
104    */    */
105    virtual    ESCRIPT_DLL_API
106    ~DataExpanded();    DataExpanded(const FunctionSpace& what,
107                   const DataArrayView::ShapeType &shape,
108                   const DataArrayView::ValueType &data);
109    
110    /**    /**
111       \brief       \brief
112       Return a textual representation of the data       Copy constructor for DataExpanded.
113         Performs a deep copy from another DataExpanded.
114    */    */
115      ESCRIPT_DLL_API
116      DataExpanded(const DataExpanded& other);
117    
118      /**
119         \brief
120         Copy constructor for DataExpanded.
121         Construct a DataExpanded from a DataConstant.
122      */
123      ESCRIPT_DLL_API
124      DataExpanded(const DataConstant& other);
125    
126      /**
127         \brief
128         Copy constructor for DataExpanded.
129         Construct a DataExpanded from a DataTagged.
130      */
131      ESCRIPT_DLL_API
132      DataExpanded(const DataTagged& other);
133    
134      /**
135         \brief
136         Default destructor for DataExpanded.
137      */
138      ESCRIPT_DLL_API
139    virtual    virtual
140    std::string    ~DataExpanded();
   toString() const;  
141    
142    /**    /**
143       \brief       \brief
144       Reshape the data point if the data point is currently rank 0.       Return a textual representation of the data.
      The original data point value is used for all values of the new  
      data point.  
145    */    */
146    void    ESCRIPT_DLL_API
147    reshapeDataPoint(const DataArrayView::ShapeType& shape);    virtual
148      std::string
149      toString() const;
150    
151    /**    /**
152       \brief       \brief
153       Return the offset for the given sample. This is somewhat artificial notion       Return the offset for the given given data point. This returns
154       but returns the offset in bytes for the given point into the container       the offset in bytes for the given point into the container
155       holding the point data.       holding the point data.
156       \param sampleNo - Input - number of samples.  
157       \param dataPointNo - Input - Input.       \param sampleNo - Input - sample number.
158         \param dataPointNo - Input - data point number.
159    */    */
160      ESCRIPT_DLL_API
161    virtual    virtual
162    DataArrayView::ValueType::size_type    DataArrayView::ValueType::size_type
163    getPointOffset(int sampleNo,    getPointOffset(int sampleNo,
# Line 138  class DataExpanded : public DataAbstract Line 165  class DataExpanded : public DataAbstract
165    
166    /**    /**
167       \brief       \brief
168       Return a view into the data for the data point specified.       Return a view into the data array for the data point specified.
169    
170       NOTE: Construction of the DataArrayView is a relatively expensive       NOTE: Construction of the DataArrayView is a relatively expensive
171       operation.       operation.
172       \param sampleNo - Input  
173       \param dataPointNo - Input       \param sampleNo - Input - sample number.
174       \return DataArrayView of the data point.       \param dataPointNo - Input - data point number.
175         \return DataArrayView for the data point.
176    */    */
177      ESCRIPT_DLL_API
178    DataArrayView    DataArrayView
179    getDataPoint(int sampleNo,    getDataPoint(int sampleNo,
180                 int dataPointNo);                 int dataPointNo);
# Line 153  class DataExpanded : public DataAbstract Line 183  class DataExpanded : public DataAbstract
183       \brief       \brief
184       Return the number of doubles stored for the Data.       Return the number of doubles stored for the Data.
185    */    */
186      ESCRIPT_DLL_API
187    virtual    virtual
188    ValueType::size_type    ValueType::size_type
189    getLength() const;    getLength() const;
# Line 161  class DataExpanded : public DataAbstract Line 192  class DataExpanded : public DataAbstract
192       \brief       \brief
193       Factory method that returns a newly created DataExpanded.       Factory method that returns a newly created DataExpanded.
194       The caller is reponsible for managing the object created.       The caller is reponsible for managing the object created.
195    
196       \param region - Input - Region to copy.       \param region - Input - Region to copy.
197    */    */
198      ESCRIPT_DLL_API
199    virtual    virtual
200    DataAbstract*    DataAbstract*
201    getSlice(const DataArrayView::RegionType& region) const;    getSlice(const DataArrayView::RegionType& region) const;
# Line 170  class DataExpanded : public DataAbstract Line 203  class DataExpanded : public DataAbstract
203    /**    /**
204       \brief       \brief
205       Copy the specified region from the given value.       Copy the specified region from the given value.
206       \param value - Input - Data to copy from  
207         \param value - Input - Data object to copy from.
208       \param region - Input - Region to copy.       \param region - Input - Region to copy.
209    */    */
210      ESCRIPT_DLL_API
211    virtual    virtual
212    void    void
213    setSlice(const DataAbstract* value,    setSlice(const DataAbstract* value,
# Line 180  class DataExpanded : public DataAbstract Line 215  class DataExpanded : public DataAbstract
215    
216    /**    /**
217       \brief       \brief
218       Assign the given value to the data-point associated with the given       Assign the given value to all data-points associated with the given
219       reference number.       reference number.
220    
221       A reference number corresponds to a sample, and thus to all data-points       A reference number corresponds to a sample, and thus to all data-points
222       in that sample. If there is more than one data-point per sample number       in that sample.
223       in this Data object, an exception will be thrown. If the given reference  
224       number does not correspond to any sample in this Data object, an exception       If the given reference number does not correspond to any sample in this
225       will be thrown.       Data object, an exception will be thrown.
226    
227       If the given value is a different shape to this Data object, an exception       If the given value is a different shape to this Data object, an exception
228       will be thrown.       will be thrown.
229    
230       \param ref - Input - reference number which determines data-point to assign to.       \param ref - Input - reference number which determines sample numebr to
231                              assign given values to.
232       \param value - Input - Value to assign to data-point associated with       \param value - Input - Value to assign to data-point associated with
233                              the given reference number.                              the given reference number.
234    */    */
235      ESCRIPT_DLL_API
236    virtual    virtual
237    void    void
238    setRefValue(int ref,    setRefValue(int ref,
# Line 203  class DataExpanded : public DataAbstract Line 240  class DataExpanded : public DataAbstract
240    
241    /**    /**
242       \brief       \brief
243       Return the value of the data-point associated with the given       Return the value of the first data-point in the sample associated with
244       reference number.       the given reference number.
245    
246       A reference number corresponds to a sample, and thus to all data-points       A reference number corresponds to a sample, and thus to all data-points
247       in that sample. If there is more than one data-point per sample number       in that sample. If there is more than one data-point per sample number
248       in this Data object, an exception will be thrown. If the given reference       in this Data object, the value of the first data-point will be returned.
249       number does not correspond to any sample in this Data object, an exception  
250       will be thrown.       If the given reference number does not correspond to any sample in this
251         Data object, an exception will be thrown.
252    
253       If the given value is a different shape to this Data object, an exception       If the given value is a different shape to this Data object, an exception
254       will be thrown.       will be thrown.
255    
256       \param ref - Input - reference number which determines data-point to read from.       \param ref - Input - reference number which determines sample number to
257                              read from.
258       \param value - Output - Object to receive data-points associated with       \param value - Output - Object to receive data-points associated with
259                              the given reference number.                              the given reference number.
260    */    */
261      ESCRIPT_DLL_API
262    virtual    virtual
263    void    void
264    getRefValue(int ref,    getRefValue(int ref,
265                DataArray& value);                DataArray& value);
266    
267      /**
268        \brief
269        Archive the underlying data values to the file referenced
270        by ofstream. A count of the number of values expected to be written
271        is provided as a cross-check.
272    
273        The return value indicates success (0) or otherwise (1).
274      */
275      ESCRIPT_DLL_API
276      int
277      archiveData(std::ofstream& archiveFile,
278                  const DataArrayView::ValueType::size_type noValues) const;
279    
280      /**
281        \brief
282        Extract the number of values specified by noValues from the file
283        referenced by ifstream to the underlying data structure.
284    
285        The return value indicates success (0) or otherwise (1).
286      */
287      ESCRIPT_DLL_API
288      int
289      extractData(std::ifstream& archiveFile,
290                  const DataArrayView::ValueType::size_type noValues);
291    
292      /**
293         \brief
294         Computes a symmetric matrix (A + AT) / 2
295    
296         \param ev - Output - symmetric matrix
297    
298      */
299      ESCRIPT_DLL_API
300      virtual void
301      symmetric(DataAbstract* ev);
302    
303      /**
304         \brief
305         Computes a nonsymmetric matrix (A - AT) / 2
306    
307         \param ev - Output - nonsymmetric matrix
308    
309      */
310      ESCRIPT_DLL_API
311      virtual void
312      nonsymmetric(DataAbstract* ev);
313    
314      /**
315         \brief
316         Computes the trace of a matrix
317    
318         \param ev - Output - trace of your matrix
319    
320      */
321      ESCRIPT_DLL_API
322      virtual void
323      trace(DataAbstract* ev, int axis_offset);
324    
325      /**
326         \brief
327         Transpose each data point of this Data object around the given axis.
328    
329         \param ev - Output - transpose of your matrix
330    
331      */
332      ESCRIPT_DLL_API
333      virtual void
334      transpose(DataAbstract* ev, int axis_offset);
335    
336      /**
337         \brief
338         swaps components axis0 and axis1
339    
340         \param ev - Output - swapped components
341    
342      */
343      ESCRIPT_DLL_API
344      virtual void
345      swapaxes(DataAbstract* ev, int axis0, int axis1);
346    
347    
348      /**
349         \brief
350         solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
351    
352         \param ev - Output - eigenvalues in increasing order at each data point
353    
354      */
355      ESCRIPT_DLL_API
356      virtual void
357      eigenvalues(DataAbstract* ev);
358    
359      /**
360         \brief
361         solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
362    
363         \param ev - Output - eigenvalues in increasing order at each data point
364         \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
365                             and the first nonzero component is positive.
366         \param tol - Input - eigenvalue with relative distance tol are treated as equal.
367    
368      */
369    
370      ESCRIPT_DLL_API
371      virtual void
372      eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
373    
374    
375   protected:   protected:
376    
377   private:   private:
378    
379    /**    /**
380       \brief       \brief
381       Common initialisation called from constructors       Common initialisation called from constructors.
382    
383       Description:       Description:
384       Common initialisation called from constructors       Common initialisation called from constructors.
385    
386         Resizes the underlying data array to provide sufficient storage for the
387         given shape and number of data points, and creates the corresponding
388         DataArrayView of this data.
389    
390       \param shape - Input - The shape of the point data.       \param shape - Input - The shape of the point data.
391       \param noSamples - Input - number of samples.       \param noSamples - Input - number of samples.
392       \param noDataPointsPerSample - Input -       \param noDataPointsPerSample - Input - number of data points per sample.
393    */    */
394    void    void
395    initialise(const DataArrayView::ShapeType& shape,    initialise(const DataArrayView::ShapeType& shape,
# Line 245  class DataExpanded : public DataAbstract Line 398  class DataExpanded : public DataAbstract
398    
399    /**    /**
400       \brief       \brief
401       Copy the given data point to all data points.       Copy the given data point value to all data points in this object.
402    
403       Description:       Description:
404       Copy the given data point to all data points.       Copy the given data point to all data points in this object.
405       \param value Input - Value for a single data point.  
406         \param value Input - A single data point value.
407    */    */
408    void    void
409    copy(const DataArrayView& value);    copy(const DataArrayView& value);
410    
411      /**
412         \brief
413         Copy the given data point value given a numarray object to all data points in this object.
414    
415         Description:
416         Copy the given data point value given a numarray object to all data points in this object.
417    
418         \param value Input - A single data point value.
419      */
420    void    void
421    copy(const boost::python::numeric::array& value);    copy(const boost::python::numeric::array& value);
422    
423      /**
424         \brief
425         Copy the numarray object to the data points in this object.
426    
427         Description:
428         Copy the numarray object to the data points in this object.
429    
430         \param value Input - new values for the data points
431      */
432      void
433      copyAll(const boost::python::numeric::array& value);
434    
435      /**
436         \brief
437         Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
438    
439         Description:
440         Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
441    
442         \param sampleNo Input - sample number
443         \param dataPointNo Input - data point of the sample
444         \param value Input - new values for the data point
445      */
446      void
447      copyToDataPoint(const int sampleNo, const int dataPointNo, const boost::python::numeric::array& value);
448    
449    //    //
450    // The main data storage, a 2D array of data blocks.    // The main data storage array, a 2D array of data blocks.
451      // noSamples * noDataPointsPerSample
452    DataBlocks2D m_data;    DataBlocks2D m_data;
453    
454  };  };

Legend:
Removed from v.110  
changed lines
  Added in v.921

  ViewVC Help
Powered by ViewVC 1.1.26