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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2458 - (show 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
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 getVectorRW();
207
208 ESCRIPT_DLL_API
209 const DataTypes::ValueType&
210 getVectorRO() const;
211
212
213
214 /**
215 \brief
216 Return the number of doubles stored for the Data.
217 */
218 ESCRIPT_DLL_API
219 virtual
220 ValueType::size_type
221 getLength() const;
222
223 /**
224 \brief
225 Factory method that returns a newly created DataExpanded.
226 The caller is reponsible for managing the object created.
227
228 \param region - Input - Region to copy.
229 */
230 ESCRIPT_DLL_API
231 virtual
232 DataAbstract*
233 getSlice(const DataTypes::RegionType& region) const;
234
235 /**
236 \brief
237 Copy the specified region from the given value.
238
239 \param value - Input - Data object to copy from.
240 \param region - Input - Region to copy.
241 */
242 ESCRIPT_DLL_API
243 virtual
244 void
245 setSlice(const DataAbstract* value,
246 const DataTypes::RegionType& region);
247
248 /**
249 \brief
250 setTaggedValue
251
252 Description:
253 uses tag to set a new value
254
255 \param tagKey - Input - Integer key.
256 \param pointshape - Input - The shape of the value parameter
257 \param value - Input - .
258 */
259 void
260 setTaggedValue(int tagKey,
261 const DataTypes::ShapeType& pointshape,
262 const DataTypes::ValueType& value,
263 int dataOffset=0);
264
265
266
267 /**
268 \brief
269 Computes a symmetric matrix (A + AT) / 2
270
271 \param ev - Output - symmetric matrix
272
273 */
274 ESCRIPT_DLL_API
275 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 ESCRIPT_DLL_API
286 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 ESCRIPT_DLL_API
297 virtual void
298 trace(DataAbstract* ev, int axis_offset);
299
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 ESCRIPT_DLL_API
308 virtual void
309 transpose(DataAbstract* ev, int axis_offset);
310
311 /**
312 \brief
313 swaps components axis0 and axis1
314
315 \param ev - Output - swapped components
316
317 */
318 ESCRIPT_DLL_API
319 virtual void
320 swapaxes(DataAbstract* ev, int axis0, int axis1);
321
322
323 /**
324 \brief
325 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 ESCRIPT_DLL_API
331 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 ESCRIPT_DLL_API
346 virtual void
347 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
348
349 /**
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
359
360
361 protected:
362
363 private:
364
365 /**
366 \brief
367 Common initialisation called from constructors.
368
369 Description:
370 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 \param noSamples - Input - number of samples.
377 \param noDataPointsPerSample - Input - number of data points per sample.
378 */
379 void
380 initialise(int noSamples,
381 int noDataPointsPerSample);
382
383 /**
384 \brief
385 Copy the given data point value to all data points in this object.
386
387 Description:
388 Copy the given data point to all data points in this object.
389
390 \param value Input - A single data point value.
391 */
392 void
393 copy(const DataConstant& value);
394
395
396
397 /**
398 \brief
399 Copy the given data point value to all data points in this object.
400
401 \param value Input - A single data point value.
402 */
403
404 void
405 copy(const WrappedArray& value);
406
407
408 /**
409 \brief
410 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 Copy the value to the data point dataPointNo of sample sampleNo in this object.
427
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 ESCRIPT_DLL_API
433 virtual void
434 copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
435
436 //
437 // The main data storage array, a 2D array of data blocks.
438 // noSamples * noDataPointsPerSample
439 DataBlocks2D m_data;
440
441 };
442
443 } // end of namespace
444
445 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26