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

Legend:
Removed from v.100  
changed lines
  Added in v.1796

  ViewVC Help
Powered by ViewVC 1.1.26