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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2881 - (show annotations)
Thu Jan 28 02:03:15 2010 UTC (9 years, 6 months ago) by jfenwick
File MIME type: text/plain
File size: 10475 byte(s)
Don't panic.
Updating copyright stamps

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

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26