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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2548 - (show annotations)
Mon Jul 20 06:20:06 2009 UTC (10 years, 1 month ago) by jfenwick
File MIME type: text/plain
File size: 10184 byte(s)
Updating copyright notices
1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2009 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 \param dataOffset - Input - where in the value parameter to start reading the data point value.
259 */
260 void
261 setTaggedValue(int tagKey,
262 const DataTypes::ShapeType& pointshape,
263 const DataTypes::ValueType& value,
264 int dataOffset=0);
265
266
267
268 /**
269 \brief
270 Computes a symmetric matrix (A + AT) / 2
271
272 \param ev - Output - symmetric matrix
273
274 */
275 ESCRIPT_DLL_API
276 virtual void
277 symmetric(DataAbstract* ev);
278
279 /**
280 \brief
281 Computes a nonsymmetric matrix (A - AT) / 2
282
283 \param ev - Output - nonsymmetric matrix
284
285 */
286 ESCRIPT_DLL_API
287 virtual void
288 nonsymmetric(DataAbstract* ev);
289
290 /**
291 \brief
292 Computes the trace of a matrix
293
294 \param ev - Output - trace of your matrix
295 \param axis_offset -
296
297 */
298 ESCRIPT_DLL_API
299 virtual void
300 trace(DataAbstract* ev, int axis_offset);
301
302 /**
303 \brief
304 Transpose each data point of this Data object around the given axis.
305
306 \param ev - Output - transpose of your matrix
307 \param axis_offset -
308 */
309 ESCRIPT_DLL_API
310 virtual void
311 transpose(DataAbstract* ev, int axis_offset);
312
313 /**
314 \brief
315 swaps components axis0 and axis1
316
317 \param ev - Output - swapped components
318 \param axis0
319 \param axis1
320 */
321 ESCRIPT_DLL_API
322 virtual void
323 swapaxes(DataAbstract* ev, int axis0, int axis1);
324
325
326 /**
327 \brief
328 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
329
330 \param ev - Output - eigenvalues in increasing order at each data point
331
332 */
333 ESCRIPT_DLL_API
334 virtual void
335 eigenvalues(DataAbstract* ev);
336
337 /**
338 \brief
339 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
340
341 \param ev - Output - eigenvalues in increasing order at each data point
342 \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
343 and the first nonzero component is positive.
344 \param tol - Input - eigenvalue with relative distance tol are treated as equal.
345
346 */
347
348 ESCRIPT_DLL_API
349 virtual void
350 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
351
352 /**
353 * \brief
354 * reorders data sample ordered by reference_ids to the ordering of the functions space
355 *
356 * \param reference_ids - Input - reference_ids used for current ordering
357 * */
358 ESCRIPT_DLL_API
359 virtual void
360 reorderByReferenceIDs(int *reference_ids);
361
362
363
364 protected:
365
366 private:
367
368 /**
369 \brief
370 Common initialisation called from constructors.
371
372 Description:
373 Common initialisation called from constructors.
374
375 Resizes the underlying data array to provide sufficient storage for the
376 given shape and number of data points, and creates the corresponding
377 DataArrayView of this data.
378
379 \param noSamples - Input - number of samples.
380 \param noDataPointsPerSample - Input - number of data points per sample.
381 */
382 void
383 initialise(int noSamples,
384 int noDataPointsPerSample);
385
386 /**
387 \brief
388 Copy the given data point value to all data points in this object.
389
390 Description:
391 Copy the given data point to all data points in this object.
392
393 \param value Input - A single data point value.
394 */
395 void
396 copy(const DataConstant& value);
397
398
399
400 /**
401 \brief
402 Copy the given data point value to all data points in this object.
403
404 \param value Input - A single data point value.
405 */
406
407 void
408 copy(const WrappedArray& value);
409
410
411 /**
412 \brief
413 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
414
415 Description:
416 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
417
418 \param sampleNo Input - sample number
419 \param dataPointNo Input - data point of the sample
420 \param value Input - new values for the data point
421 */
422 ESCRIPT_DLL_API
423 virtual void
424 copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
425
426
427 /**
428 \brief
429 Copy the value to the data point dataPointNo of sample sampleNo in this object.
430
431 \param sampleNo Input - sample number
432 \param dataPointNo Input - data point of the sample
433 \param value Input - new values for the data point
434 */
435 ESCRIPT_DLL_API
436 virtual void
437 copyToDataPoint(const int sampleNo, const int dataPointNo, const WrappedArray& value);
438
439 //
440 // The main data storage array, a 2D array of data blocks.
441 // noSamples * noDataPointsPerSample
442 DataBlocks2D m_data;
443
444 };
445
446 } // end of namespace
447
448 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26