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

Annotation of /trunk/escript/src/DataExpanded.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2458 - (hide annotations)
Wed Jun 3 06:18:21 2009 UTC (10 years, 2 months ago) by jfenwick
File MIME type: text/plain
File size: 9996 byte(s)
Various numarray erasures

1 jgs 480
2 ksteube 1312 /*******************************************************
3 ksteube 1811 *
4     * Copyright (c) 2003-2008 by University of Queensland
5     * Earth Systems Science Computational Center (ESSCC)
6     * http://www.uq.edu.au/esscc
7     *
8     * Primary Business: Queensland, Australia
9     * Licensed under the Open Software License version 3.0
10     * http://www.opensource.org/licenses/osl-3.0.php
11     *
12     *******************************************************/
13 ksteube 1312
14 ksteube 1811
15 jgs 102 #if !defined escript_DataExpanded_20040323_H
16 jgs 82 #define escript_DataExpanded_20040323_H
17 woo409 757 #include "system_dep.h"
18 jgs 82
19 jfenwick 2005 #include "DataReady.h"
20 jgs 82 #include "DataBlocks2D.h"
21    
22     #include <boost/python/numeric.hpp>
23    
24     namespace escript {
25    
26 jgs 117 //
27     // Forward declarations of other Data types.
28 jgs 102 class DataConstant;
29     class DataTagged;
30 jgs 82
31     /**
32     \brief
33     Give a short description of what DataExpanded does.
34    
35     Description:
36 jgs 117 Give a detailed description of DataExpanded.
37 jgs 82
38     Template Parameters:
39     For templates describe any conditions that the parameters used in the
40 jgs 117 template must satisfy.
41 jgs 82 */
42    
43 jfenwick 2005 class DataExpanded : public DataReady {
44 jgs 82
45 jfenwick 2005 typedef DataReady parent;
46    
47 jgs 82 public:
48    
49     /**
50     \brief
51 jgs 117 Constructor for DataExpanded.
52 jgs 82
53 jgs 117 Description:
54     Constructor for DataExpanded.
55 jgs 82
56 jgs 117 The given single data value is copied to all the data points in
57     this data object, where the number of data points is defined by
58     the given function space.
59 jgs 82
60 jfenwick 2271 \param value - Input - The value of a single data point.
61 jgs 82 \param what - Input - A description of what this data represents.
62     */
63 woo409 757 ESCRIPT_DLL_API
64 jfenwick 2271 DataExpanded(const WrappedArray& value,
65 jgs 102 const FunctionSpace& what);
66 jgs 82
67     /**
68     \brief
69     Alternative constructor for DataExpanded that copies a slice from
70     another DataExpanded.
71    
72 jgs 102 \param other - Input - DataExpanded object to slice from.
73     \param region - Input - region to copy.
74 jgs 82 */
75 woo409 757 ESCRIPT_DLL_API
76 jgs 102 DataExpanded(const DataExpanded& other,
77 jfenwick 1796 const DataTypes::RegionType& region);
78 jgs 82
79     /**
80     \brief
81 jgs 119 Alternative constructor for DataExpanded objects.
82    
83     Description:
84     Alternative Constructor for DataExpanded objects.
85     \param what - Input - A description of what this data object represents.
86     \param shape - Input - the shape of each data-point.
87 jgs 122 \param data - the array of data values for the data-points.
88 jfenwick 1796
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 jgs 119 */
91 woo409 757 ESCRIPT_DLL_API
92 jgs 119 DataExpanded(const FunctionSpace& what,
93 jfenwick 1796 const DataTypes::ShapeType &shape,
94     const DataTypes::ValueType &data);
95 jgs 119
96     /**
97     \brief
98 jgs 117 Copy constructor for DataExpanded.
99     Performs a deep copy from another DataExpanded.
100 jgs 82 */
101 woo409 757 ESCRIPT_DLL_API
102 jgs 117 DataExpanded(const DataExpanded& other);
103    
104     /**
105     \brief
106     Copy constructor for DataExpanded.
107     Construct a DataExpanded from a DataConstant.
108     */
109 woo409 757 ESCRIPT_DLL_API
110 jgs 117 DataExpanded(const DataConstant& other);
111    
112     /**
113     \brief
114     Copy constructor for DataExpanded.
115     Construct a DataExpanded from a DataTagged.
116     */
117 woo409 757 ESCRIPT_DLL_API
118 jgs 117 DataExpanded(const DataTagged& other);
119    
120     /**
121     \brief
122     Default destructor for DataExpanded.
123     */
124 woo409 757 ESCRIPT_DLL_API
125 jgs 102 virtual
126     ~DataExpanded();
127 jgs 82
128 jfenwick 2005 ESCRIPT_DLL_API
129     bool
130     isExpanded() const
131     {
132     return true;
133     };
134    
135 jfenwick 2271 ESCRIPT_DLL_API
136     bool
137     actsExpanded() const
138     {
139     return true;
140     }
141    
142 jgs 82 /**
143     \brief
144 jgs 117 Return a textual representation of the data.
145 jgs 82 */
146 woo409 757 ESCRIPT_DLL_API
147 jgs 102 virtual
148     std::string
149     toString() const;
150 jfenwick 1799
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 gross 950 /**
161     \brief
162     dumps the object into a netCDF file
163     */
164     ESCRIPT_DLL_API
165     virtual
166     void
167     dump(const std::string fileName) const;
168 jgs 82
169 gross 1118 /**
170     \brief
171     sets all values to zero
172     */
173     ESCRIPT_DLL_API
174     virtual
175     void
176     setToZero();
177    
178 jgs 82 /**
179     \brief
180 jgs 117 Return the offset for the given given data point. This returns
181     the offset in bytes for the given point into the container
182 jgs 82 holding the point data.
183 jgs 117
184     \param sampleNo - Input - sample number.
185     \param dataPointNo - Input - data point number.
186 jgs 82 */
187 woo409 757 ESCRIPT_DLL_API
188 jgs 102 virtual
189 jfenwick 1796 DataTypes::ValueType::size_type
190 jgs 102 getPointOffset(int sampleNo,
191     int dataPointNo) const;
192 jgs 82
193 jfenwick 2005 ESCRIPT_DLL_API
194     virtual
195     DataTypes::ValueType::size_type
196     getPointOffset(int sampleNo,
197     int dataPointNo);
198    
199 jfenwick 1796 /**
200     \brief
201     Return a a reference to the underlying DataVector.
202 jgs 82 */
203 jfenwick 1796
204 woo409 757 ESCRIPT_DLL_API
205 jfenwick 1796 DataTypes::ValueType&
206 jfenwick 2271 getVectorRW();
207 jgs 82
208 jfenwick 1796 ESCRIPT_DLL_API
209     const DataTypes::ValueType&
210 jfenwick 2271 getVectorRO() const;
211 jfenwick 1796
212    
213 jfenwick 2271
214 jgs 82 /**
215     \brief
216 jgs 102 Return the number of doubles stored for the Data.
217 jgs 82 */
218 woo409 757 ESCRIPT_DLL_API
219 jgs 102 virtual
220     ValueType::size_type
221     getLength() const;
222 jgs 82
223     /**
224     \brief
225     Factory method that returns a newly created DataExpanded.
226     The caller is reponsible for managing the object created.
227 jgs 117
228 jgs 82 \param region - Input - Region to copy.
229     */
230 woo409 757 ESCRIPT_DLL_API
231 jgs 102 virtual
232     DataAbstract*
233 jfenwick 1796 getSlice(const DataTypes::RegionType& region) const;
234 jgs 82
235     /**
236     \brief
237     Copy the specified region from the given value.
238 jgs 117
239     \param value - Input - Data object to copy from.
240 jgs 82 \param region - Input - Region to copy.
241     */
242 woo409 757 ESCRIPT_DLL_API
243 jgs 102 virtual
244     void
245     setSlice(const DataAbstract* value,
246 jfenwick 1796 const DataTypes::RegionType& region);
247 jgs 82
248 gross 580 /**
249     \brief
250 gross 1358 setTaggedValue
251    
252     Description:
253     uses tag to set a new value
254    
255     \param tagKey - Input - Integer key.
256 jfenwick 1796 \param pointshape - Input - The shape of the value parameter
257     \param value - Input - .
258 gross 1358 */
259 jfenwick 1796 void
260 gross 1358 setTaggedValue(int tagKey,
261 jfenwick 1796 const DataTypes::ShapeType& pointshape,
262     const DataTypes::ValueType& value,
263     int dataOffset=0);
264 gross 1358
265 jfenwick 1796
266    
267 gross 1358 /**
268     \brief
269 ksteube 775 Computes a symmetric matrix (A + AT) / 2
270    
271     \param ev - Output - symmetric matrix
272    
273     */
274 gross 800 ESCRIPT_DLL_API
275 ksteube 775 virtual void
276     symmetric(DataAbstract* ev);
277    
278     /**
279     \brief
280     Computes a nonsymmetric matrix (A - AT) / 2
281    
282     \param ev - Output - nonsymmetric matrix
283    
284     */
285 gross 800 ESCRIPT_DLL_API
286 ksteube 775 virtual void
287     nonsymmetric(DataAbstract* ev);
288    
289     /**
290     \brief
291     Computes the trace of a matrix
292    
293     \param ev - Output - trace of your matrix
294    
295     */
296 gross 800 ESCRIPT_DLL_API
297 ksteube 775 virtual void
298 gross 800 trace(DataAbstract* ev, int axis_offset);
299 ksteube 775
300     /**
301     \brief
302     Transpose each data point of this Data object around the given axis.
303    
304     \param ev - Output - transpose of your matrix
305    
306     */
307 gross 800 ESCRIPT_DLL_API
308 ksteube 775 virtual void
309     transpose(DataAbstract* ev, int axis_offset);
310    
311     /**
312     \brief
313 gross 804 swaps components axis0 and axis1
314 gross 800
315     \param ev - Output - swapped components
316    
317     */
318     ESCRIPT_DLL_API
319     virtual void
320 gross 804 swapaxes(DataAbstract* ev, int axis0, int axis1);
321 gross 800
322    
323     /**
324     \brief
325 gross 580 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
326    
327     \param ev - Output - eigenvalues in increasing order at each data point
328    
329     */
330 woo409 757 ESCRIPT_DLL_API
331 gross 580 virtual void
332     eigenvalues(DataAbstract* ev);
333    
334     /**
335     \brief
336     solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
337    
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    
343     */
344    
345 woo409 757 ESCRIPT_DLL_API
346 gross 580 virtual void
347     eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
348    
349 gross 1487 /**
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 gross 580
359 gross 1487
360    
361 jgs 82 protected:
362    
363     private:
364    
365     /**
366     \brief
367 jgs 117 Common initialisation called from constructors.
368 jgs 82
369     Description:
370 jgs 117 Common initialisation called from constructors.
371    
372     Resizes the underlying data array to provide sufficient storage for the
373     given shape and number of data points, and creates the corresponding
374     DataArrayView of this data.
375    
376 jgs 82 \param noSamples - Input - number of samples.
377 jgs 117 \param noDataPointsPerSample - Input - number of data points per sample.
378 jgs 82 */
379 jgs 102 void
380 jfenwick 1796 initialise(int noSamples,
381 jgs 102 int noDataPointsPerSample);
382 jgs 82
383     /**
384     \brief
385 jgs 126 Copy the given data point value to all data points in this object.
386 jgs 82
387     Description:
388 jgs 117 Copy the given data point to all data points in this object.
389    
390     \param value Input - A single data point value.
391 jgs 82 */
392 jgs 102 void
393 jfenwick 1796 copy(const DataConstant& value);
394 jgs 82
395 jfenwick 1796
396    
397 jgs 126 /**
398     \brief
399 jfenwick 2458 Copy the given data point value to all data points in this object.
400 jgs 126
401     \param value Input - A single data point value.
402     */
403 jfenwick 2271
404 jgs 102 void
405 jfenwick 2271 copy(const WrappedArray& value);
406 jgs 102
407 jgs 126
408 gross 921 /**
409     \brief
410 gross 922 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
411    
412     Description:
413     Copy a double value to the data point dataPointNo of sample sampleNo in this object.
414    
415     \param sampleNo Input - sample number
416     \param dataPointNo Input - data point of the sample
417     \param value Input - new values for the data point
418     */
419     ESCRIPT_DLL_API
420     virtual void
421     copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
422    
423    
424     /**
425     \brief
426 jfenwick 2458 Copy the value to the data point dataPointNo of sample sampleNo in this object.
427 gross 921
428     \param sampleNo Input - sample number
429     \param dataPointNo Input - data point of the sample
430     \param value Input - new values for the data point
431     */
432 jfenwick 2271 ESCRIPT_DLL_API
433     virtual void
434     copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
435 gross 921
436 jgs 82 //
437 jgs 117 // The main data storage array, a 2D array of data blocks.
438     // noSamples * noDataPointsPerSample
439 jgs 82 DataBlocks2D m_data;
440    
441     };
442    
443     } // end of namespace
444 jgs 102
445 jgs 100 #endif

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26