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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1811 - (show annotations)
Thu Sep 25 23:11:13 2008 UTC (10 years, 6 months ago) by ksteube
File MIME type: text/plain
File size: 10259 byte(s)
Copyright updated in all files

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 "DataAbstract.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 DataAbstract {
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 - A single data value.
59 \param what - Input - A description of what this data represents.
60 */
61 ESCRIPT_DLL_API
62 DataExpanded(const boost::python::numeric::array& 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 /**
127 \brief
128 Return a textual representation of the data.
129 */
130 ESCRIPT_DLL_API
131 virtual
132 std::string
133 toString() const;
134
135 /**
136 \brief Return a deep copy of the current object.
137 */
138 ESCRIPT_DLL_API
139 virtual
140 DataAbstract*
141 deepCopy();
142
143
144 /**
145 \brief
146 dumps the object into a netCDF file
147 */
148 ESCRIPT_DLL_API
149 virtual
150 void
151 dump(const std::string fileName) const;
152
153 /**
154 \brief
155 sets all values to zero
156 */
157 ESCRIPT_DLL_API
158 virtual
159 void
160 setToZero();
161
162 /**
163 \brief
164 Return the offset for the given given data point. This returns
165 the offset in bytes for the given point into the container
166 holding the point data.
167
168 \param sampleNo - Input - sample number.
169 \param dataPointNo - Input - data point number.
170 */
171 ESCRIPT_DLL_API
172 virtual
173 DataTypes::ValueType::size_type
174 getPointOffset(int sampleNo,
175 int dataPointNo) const;
176
177 /**
178 \brief
179 Return a a reference to the underlying DataVector.
180 */
181
182 ESCRIPT_DLL_API
183 DataTypes::ValueType&
184 getVector();
185
186 ESCRIPT_DLL_API
187 const DataTypes::ValueType&
188 getVector() const;
189
190
191 /**
192 \brief
193 Return the number of doubles stored for the Data.
194 */
195 ESCRIPT_DLL_API
196 virtual
197 ValueType::size_type
198 getLength() const;
199
200 /**
201 \brief
202 Factory method that returns a newly created DataExpanded.
203 The caller is reponsible for managing the object created.
204
205 \param region - Input - Region to copy.
206 */
207 ESCRIPT_DLL_API
208 virtual
209 DataAbstract*
210 getSlice(const DataTypes::RegionType& region) const;
211
212 /**
213 \brief
214 Copy the specified region from the given value.
215
216 \param value - Input - Data object to copy from.
217 \param region - Input - Region to copy.
218 */
219 ESCRIPT_DLL_API
220 virtual
221 void
222 setSlice(const DataAbstract* value,
223 const DataTypes::RegionType& region);
224
225 /**
226 \brief
227 setTaggedValue
228
229 Description:
230 uses tag to set a new value
231
232 \param tagKey - Input - Integer key.
233 \param pointshape - Input - The shape of the value parameter
234 \param value - Input - .
235 */
236 void
237 setTaggedValue(int tagKey,
238 const DataTypes::ShapeType& pointshape,
239 const DataTypes::ValueType& value,
240 int dataOffset=0);
241
242
243
244 /**
245 \brief
246 Computes a symmetric matrix (A + AT) / 2
247
248 \param ev - Output - symmetric matrix
249
250 */
251 ESCRIPT_DLL_API
252 virtual void
253 symmetric(DataAbstract* ev);
254
255 /**
256 \brief
257 Computes a nonsymmetric matrix (A - AT) / 2
258
259 \param ev - Output - nonsymmetric matrix
260
261 */
262 ESCRIPT_DLL_API
263 virtual void
264 nonsymmetric(DataAbstract* ev);
265
266 /**
267 \brief
268 Computes the trace of a matrix
269
270 \param ev - Output - trace of your matrix
271
272 */
273 ESCRIPT_DLL_API
274 virtual void
275 trace(DataAbstract* ev, int axis_offset);
276
277 /**
278 \brief
279 Transpose each data point of this Data object around the given axis.
280
281 \param ev - Output - transpose of your matrix
282
283 */
284 ESCRIPT_DLL_API
285 virtual void
286 transpose(DataAbstract* ev, int axis_offset);
287
288 /**
289 \brief
290 swaps components axis0 and axis1
291
292 \param ev - Output - swapped components
293
294 */
295 ESCRIPT_DLL_API
296 virtual void
297 swapaxes(DataAbstract* ev, int axis0, int axis1);
298
299
300 /**
301 \brief
302 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
303
304 \param ev - Output - eigenvalues in increasing order at each data point
305
306 */
307 ESCRIPT_DLL_API
308 virtual void
309 eigenvalues(DataAbstract* ev);
310
311 /**
312 \brief
313 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
314
315 \param ev - Output - eigenvalues in increasing order at each data point
316 \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
317 and the first nonzero component is positive.
318 \param tol - Input - eigenvalue with relative distance tol are treated as equal.
319
320 */
321
322 ESCRIPT_DLL_API
323 virtual void
324 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
325
326 /**
327 * \brief
328 * reorders data sample ordered by reference_ids to the ordering of the functions space
329 *
330 * \param reference_ids - Input - reference_ids used for current ordering
331 * */
332 ESCRIPT_DLL_API
333 virtual void
334 reorderByReferenceIDs(int *reference_ids);
335
336
337
338 protected:
339
340 private:
341
342 /**
343 \brief
344 Common initialisation called from constructors.
345
346 Description:
347 Common initialisation called from constructors.
348
349 Resizes the underlying data array to provide sufficient storage for the
350 given shape and number of data points, and creates the corresponding
351 DataArrayView of this data.
352
353 \param noSamples - Input - number of samples.
354 \param noDataPointsPerSample - Input - number of data points per sample.
355 */
356 void
357 initialise(int noSamples,
358 int noDataPointsPerSample);
359
360 /**
361 \brief
362 Copy the given data point value to all data points in this object.
363
364 Description:
365 Copy the given data point to all data points in this object.
366
367 \param value Input - A single data point value.
368 */
369 void
370 copy(const DataConstant& value);
371
372
373
374 /**
375 \brief
376 Copy the given data point value given a numarray object to all data points in this object.
377
378 Description:
379 Copy the given data point value given a numarray object to all data points in this object.
380
381 \param value Input - A single data point value.
382 */
383 void
384 copy(const boost::python::numeric::array& value);
385
386 /**
387 \brief
388 Copy the numarray object to the data points in this object.
389
390 Description:
391 Copy the numarray object to the data points in this object.
392
393 \param value Input - new values for the data points
394 */
395 void
396 copyAll(const boost::python::numeric::array& value);
397
398 /**
399 \brief
400 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
401
402 Description:
403 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
404
405 \param sampleNo Input - sample number
406 \param dataPointNo Input - data point of the sample
407 \param value Input - new values for the data point
408 */
409 ESCRIPT_DLL_API
410 virtual void
411 copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
412
413
414 /**
415 \brief
416 Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
417
418 Description:
419 Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
420
421 \param sampleNo Input - sample number
422 \param dataPointNo Input - data point of the sample
423 \param value Input - new values for the data point
424 */
425 void
426 copyToDataPoint(const int sampleNo, const int dataPointNo, const boost::python::numeric::array& value);
427
428 //
429 // The main data storage array, a 2D array of data blocks.
430 // noSamples * noDataPointsPerSample
431 DataBlocks2D m_data;
432
433 };
434
435 } // end of namespace
436
437 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26