/[escript]/branches/arrexp_2137_win_merge/escript/src/DataExpanded.h
ViewVC logotype

Contents of /branches/arrexp_2137_win_merge/escript/src/DataExpanded.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2213 - (show annotations)
Wed Jan 14 00:23:39 2009 UTC (10 years, 7 months ago) by jfenwick
File MIME type: text/plain
File size: 10327 byte(s)
In preparation for merging to trunk

1
2 /*******************************************************
3 *
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
14
15 #if !defined escript_DataExpanded_20040323_H
16 #define escript_DataExpanded_20040323_H
17 #include "system_dep.h"
18
19 #include "DataReady.h"
20 #include "DataBlocks2D.h"
21
22 #include <boost/python/numeric.hpp>
23
24 namespace escript {
25
26 //
27 // Forward declarations of other Data types.
28 class DataConstant;
29 class DataTagged;
30
31 /**
32 \brief
33 Give a short description of what DataExpanded does.
34
35 Description:
36 Give a detailed description of DataExpanded.
37
38 Template Parameters:
39 For templates describe any conditions that the parameters used in the
40 template must satisfy.
41 */
42
43 class DataExpanded : public DataReady {
44
45 typedef DataReady parent;
46
47 public:
48
49 /**
50 \brief
51 Constructor for DataExpanded.
52
53 Description:
54 Constructor for DataExpanded.
55
56 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
60 \param value - Input - The value of a single data point.
61 \param what - Input - A description of what this data represents.
62 */
63 ESCRIPT_DLL_API
64 DataExpanded(const WrappedArray& value,
65 const FunctionSpace& what);
66
67 /**
68 \brief
69 Alternative constructor for DataExpanded that copies a slice from
70 another DataExpanded.
71
72 \param other - Input - DataExpanded object to slice from.
73 \param region - Input - region to copy.
74 */
75 ESCRIPT_DLL_API
76 DataExpanded(const DataExpanded& other,
77 const DataTypes::RegionType& region);
78
79 /**
80 \brief
81 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 \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,
93 const DataTypes::ShapeType &shape,
94 const DataTypes::ValueType &data);
95
96 /**
97 \brief
98 Copy constructor for DataExpanded.
99 Performs a deep copy from another DataExpanded.
100 */
101 ESCRIPT_DLL_API
102 DataExpanded(const DataExpanded& other);
103
104 /**
105 \brief
106 Copy constructor for DataExpanded.
107 Construct a DataExpanded from a DataConstant.
108 */
109 ESCRIPT_DLL_API
110 DataExpanded(const DataConstant& other);
111
112 /**
113 \brief
114 Copy constructor for DataExpanded.
115 Construct a DataExpanded from a DataTagged.
116 */
117 ESCRIPT_DLL_API
118 DataExpanded(const DataTagged& other);
119
120 /**
121 \brief
122 Default destructor for DataExpanded.
123 */
124 ESCRIPT_DLL_API
125 virtual
126 ~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
144 Return a textual representation of the data.
145 */
146 ESCRIPT_DLL_API
147 virtual
148 std::string
149 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
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
169 /**
170 \brief
171 sets all values to zero
172 */
173 ESCRIPT_DLL_API
174 virtual
175 void
176 setToZero();
177
178 /**
179 \brief
180 Return the offset for the given given data point. This returns
181 the offset in bytes for the given point into the container
182 holding the point data.
183
184 \param sampleNo - Input - sample number.
185 \param dataPointNo - Input - data point number.
186 */
187 ESCRIPT_DLL_API
188 virtual
189 DataTypes::ValueType::size_type
190 getPointOffset(int sampleNo,
191 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
201 Return a a reference to the underlying DataVector.
202 */
203
204 ESCRIPT_DLL_API
205 DataTypes::ValueType&
206 getVector();
207
208 ESCRIPT_DLL_API
209 const DataTypes::ValueType&
210 getVector() const;
211
212 ESCRIPT_DLL_API
213 const DataTypes::ValueType&
214 getVectorRO() const;
215
216
217
218 /**
219 \brief
220 Return the number of doubles stored for the Data.
221 */
222 ESCRIPT_DLL_API
223 virtual
224 ValueType::size_type
225 getLength() const;
226
227 /**
228 \brief
229 Factory method that returns a newly created DataExpanded.
230 The caller is reponsible for managing the object created.
231
232 \param region - Input - Region to copy.
233 */
234 ESCRIPT_DLL_API
235 virtual
236 DataAbstract*
237 getSlice(const DataTypes::RegionType& region) const;
238
239 /**
240 \brief
241 Copy the specified region from the given value.
242
243 \param value - Input - Data object to copy from.
244 \param region - Input - Region to copy.
245 */
246 ESCRIPT_DLL_API
247 virtual
248 void
249 setSlice(const DataAbstract* value,
250 const DataTypes::RegionType& region);
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 pointshape - Input - The shape of the value parameter
261 \param value - Input - .
262 */
263 void
264 setTaggedValue(int tagKey,
265 const DataTypes::ShapeType& pointshape,
266 const DataTypes::ValueType& value,
267 int dataOffset=0);
268
269
270
271 /**
272 \brief
273 Computes a symmetric matrix (A + AT) / 2
274
275 \param ev - Output - symmetric matrix
276
277 */
278 ESCRIPT_DLL_API
279 virtual void
280 symmetric(DataAbstract* ev);
281
282 /**
283 \brief
284 Computes a nonsymmetric matrix (A - AT) / 2
285
286 \param ev - Output - nonsymmetric matrix
287
288 */
289 ESCRIPT_DLL_API
290 virtual void
291 nonsymmetric(DataAbstract* ev);
292
293 /**
294 \brief
295 Computes the trace of a matrix
296
297 \param ev - Output - trace of your matrix
298
299 */
300 ESCRIPT_DLL_API
301 virtual void
302 trace(DataAbstract* ev, int axis_offset);
303
304 /**
305 \brief
306 Transpose each data point of this Data object around the given axis.
307
308 \param ev - Output - transpose of your matrix
309
310 */
311 ESCRIPT_DLL_API
312 virtual void
313 transpose(DataAbstract* ev, int axis_offset);
314
315 /**
316 \brief
317 swaps components axis0 and axis1
318
319 \param ev - Output - swapped components
320
321 */
322 ESCRIPT_DLL_API
323 virtual void
324 swapaxes(DataAbstract* ev, int axis0, int axis1);
325
326
327 /**
328 \brief
329 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
330
331 \param ev - Output - eigenvalues in increasing order at each data point
332
333 */
334 ESCRIPT_DLL_API
335 virtual void
336 eigenvalues(DataAbstract* ev);
337
338 /**
339 \brief
340 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
341
342 \param ev - Output - eigenvalues in increasing order at each data point
343 \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
344 and the first nonzero component is positive.
345 \param tol - Input - eigenvalue with relative distance tol are treated as equal.
346
347 */
348
349 ESCRIPT_DLL_API
350 virtual void
351 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
352
353 /**
354 * \brief
355 * reorders data sample ordered by reference_ids to the ordering of the functions space
356 *
357 * \param reference_ids - Input - reference_ids used for current ordering
358 * */
359 ESCRIPT_DLL_API
360 virtual void
361 reorderByReferenceIDs(int *reference_ids);
362
363
364
365 protected:
366
367 private:
368
369 /**
370 \brief
371 Common initialisation called from constructors.
372
373 Description:
374 Common initialisation called from constructors.
375
376 Resizes the underlying data array to provide sufficient storage for the
377 given shape and number of data points, and creates the corresponding
378 DataArrayView of this data.
379
380 \param noSamples - Input - number of samples.
381 \param noDataPointsPerSample - Input - number of data points per sample.
382 */
383 void
384 initialise(int noSamples,
385 int noDataPointsPerSample);
386
387 /**
388 \brief
389 Copy the given data point value to all data points in this object.
390
391 Description:
392 Copy the given data point to all data points in this object.
393
394 \param value Input - A single data point value.
395 */
396 void
397 copy(const DataConstant& value);
398
399
400
401 /**
402 \brief
403 Copy the given data point value given a numarray object to all data points in this object.
404
405 Description:
406 Copy the given data point value given a numarray object to all data points in this object.
407
408 \param value Input - A single data point value.
409 */
410
411 void
412 copy(const WrappedArray& value);
413
414
415 /**
416 \brief
417 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
418
419 Description:
420 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
421
422 \param sampleNo Input - sample number
423 \param dataPointNo Input - data point of the sample
424 \param value Input - new values for the data point
425 */
426 ESCRIPT_DLL_API
427 virtual void
428 copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
429
430
431 /**
432 \brief
433 Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
434
435 Description:
436 Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
437
438 \param sampleNo Input - sample number
439 \param dataPointNo Input - data point of the sample
440 \param value Input - new values for the data point
441 */
442 ESCRIPT_DLL_API
443 virtual void
444 copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
445
446 //
447 // The main data storage array, a 2D array of data blocks.
448 // noSamples * noDataPointsPerSample
449 DataBlocks2D m_data;
450
451 };
452
453 } // end of namespace
454
455 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26