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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1387 - (show annotations)
Fri Jan 11 07:45:26 2008 UTC (11 years, 7 months ago) by trankine
Original Path: temp/escript/src/DataExpanded.h
File MIME type: text/plain
File size: 11256 byte(s)
Restore the trunk that existed before the windows changes were committed to the (now moved to branches) old trunk.
1
2 /* $Id$ */
3
4 /*******************************************************
5 *
6 * Copyright 2003-2007 by ACceSS MNRF
7 * Copyright 2007 by University of Queensland
8 *
9 * http://esscc.uq.edu.au
10 * Primary Business: Queensland, Australia
11 * Licensed under the Open Software License version 3.0
12 * http://www.opensource.org/licenses/osl-3.0.php
13 *
14 *******************************************************/
15
16 #if !defined escript_DataExpanded_20040323_H
17 #define escript_DataExpanded_20040323_H
18 #include "system_dep.h"
19
20 #include "DataAbstract.h"
21 #include "DataBlocks2D.h"
22 #include "DataArrayView.h"
23
24 #include <boost/python/numeric.hpp>
25
26 namespace escript {
27
28 //
29 // Forward declarations of other Data types.
30 class DataConstant;
31 class DataTagged;
32
33 /**
34 \brief
35 Give a short description of what DataExpanded does.
36
37 Description:
38 Give a detailed description of DataExpanded.
39
40 Template Parameters:
41 For templates describe any conditions that the parameters used in the
42 template must satisfy.
43 */
44
45 class DataExpanded : public DataAbstract {
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 - A single data value.
61 \param what - Input - A description of what this data represents.
62 */
63 ESCRIPT_DLL_API
64 DataExpanded(const boost::python::numeric::array& value,
65 const FunctionSpace& what);
66
67 /**
68 \brief
69 Alternative constructor for DataExpanded.
70
71 Description:
72 Alternative Constructor for DataExpanded.
73
74 The given single data value is copied to all the data points in
75 this data object, where the number of data points is defined by
76 the given function space.
77
78 \param value - Input - A single data value.
79 \param what - Input - A description of what this data represents.
80 */
81 ESCRIPT_DLL_API
82 DataExpanded(const DataArrayView& value,
83 const FunctionSpace& what);
84
85 /**
86 \brief
87 Alternative constructor for DataExpanded that copies a slice from
88 another DataExpanded.
89
90 \param other - Input - DataExpanded object to slice from.
91 \param region - Input - region to copy.
92 */
93 ESCRIPT_DLL_API
94 DataExpanded(const DataExpanded& other,
95 const DataArrayView::RegionType& region);
96
97 /**
98 \brief
99 Alternative constructor for DataExpanded objects.
100
101 Description:
102 Alternative Constructor for DataExpanded objects.
103 \param what - Input - A description of what this data object represents.
104 \param shape - Input - the shape of each data-point.
105 \param data - the array of data values for the data-points.
106 */
107 ESCRIPT_DLL_API
108 DataExpanded(const FunctionSpace& what,
109 const DataArrayView::ShapeType &shape,
110 const DataArrayView::ValueType &data);
111
112 /**
113 \brief
114 Copy constructor for DataExpanded.
115 Performs a deep copy from another DataExpanded.
116 */
117 ESCRIPT_DLL_API
118 DataExpanded(const DataExpanded& other);
119
120 /**
121 \brief
122 Copy constructor for DataExpanded.
123 Construct a DataExpanded from a DataConstant.
124 */
125 ESCRIPT_DLL_API
126 DataExpanded(const DataConstant& other);
127
128 /**
129 \brief
130 Copy constructor for DataExpanded.
131 Construct a DataExpanded from a DataTagged.
132 */
133 ESCRIPT_DLL_API
134 DataExpanded(const DataTagged& other);
135
136 /**
137 \brief
138 Default destructor for DataExpanded.
139 */
140 ESCRIPT_DLL_API
141 virtual
142 ~DataExpanded();
143
144 /**
145 \brief
146 Return a textual representation of the data.
147 */
148 ESCRIPT_DLL_API
149 virtual
150 std::string
151 toString() const;
152 /**
153 \brief
154 dumps the object into a netCDF file
155 */
156 ESCRIPT_DLL_API
157 virtual
158 void
159 dump(const std::string fileName) const;
160
161 /**
162 \brief
163 sets all values to zero
164 */
165 ESCRIPT_DLL_API
166 virtual
167 void
168 setToZero();
169
170 /**
171 \brief
172 Return the offset for the given given data point. This returns
173 the offset in bytes for the given point into the container
174 holding the point data.
175
176 \param sampleNo - Input - sample number.
177 \param dataPointNo - Input - data point number.
178 */
179 ESCRIPT_DLL_API
180 virtual
181 DataArrayView::ValueType::size_type
182 getPointOffset(int sampleNo,
183 int dataPointNo) const;
184
185 /**
186 \brief
187 Return a view into the data array for the data point specified.
188
189 NOTE: Construction of the DataArrayView is a relatively expensive
190 operation.
191
192 \param sampleNo - Input - sample number.
193 \param dataPointNo - Input - data point number.
194 \return DataArrayView for the data point.
195 */
196 ESCRIPT_DLL_API
197 DataArrayView
198 getDataPoint(int sampleNo,
199 int dataPointNo);
200
201 /**
202 \brief
203 Return the number of doubles stored for the Data.
204 */
205 ESCRIPT_DLL_API
206 virtual
207 ValueType::size_type
208 getLength() const;
209
210 /**
211 \brief
212 Factory method that returns a newly created DataExpanded.
213 The caller is reponsible for managing the object created.
214
215 \param region - Input - Region to copy.
216 */
217 ESCRIPT_DLL_API
218 virtual
219 DataAbstract*
220 getSlice(const DataArrayView::RegionType& region) const;
221
222 /**
223 \brief
224 Copy the specified region from the given value.
225
226 \param value - Input - Data object to copy from.
227 \param region - Input - Region to copy.
228 */
229 ESCRIPT_DLL_API
230 virtual
231 void
232 setSlice(const DataAbstract* value,
233 const DataArrayView::RegionType& region);
234
235 /**
236 \brief
237 Archive the underlying data values to the file referenced
238 by ofstream. A count of the number of values expected to be written
239 is provided as a cross-check.
240
241 The return value indicates success (0) or otherwise (1).
242 */
243 ESCRIPT_DLL_API
244 int
245 archiveData(std::ofstream& archiveFile,
246 const DataArrayView::ValueType::size_type noValues) const;
247
248 /**
249 \brief
250 Extract the number of values specified by noValues from the file
251 referenced by ifstream to the underlying data structure.
252
253 The return value indicates success (0) or otherwise (1).
254 */
255 ESCRIPT_DLL_API
256 int
257 extractData(std::ifstream& archiveFile,
258 const DataArrayView::ValueType::size_type noValues);
259
260 /**
261 \brief
262 setTaggedValue
263
264 Description:
265 uses tag to set a new value
266
267 \param tagKey - Input - Integer key.
268 \param value - Input - Single DataArrayView value to be assigned to the tag.
269 */
270 ESCRIPT_DLL_API
271 virtual
272 void
273 setTaggedValue(int tagKey,
274 const DataArrayView& value);
275
276 /**
277 \brief
278 Computes a symmetric matrix (A + AT) / 2
279
280 \param ev - Output - symmetric matrix
281
282 */
283 ESCRIPT_DLL_API
284 virtual void
285 symmetric(DataAbstract* ev);
286
287 /**
288 \brief
289 Computes a nonsymmetric matrix (A - AT) / 2
290
291 \param ev - Output - nonsymmetric matrix
292
293 */
294 ESCRIPT_DLL_API
295 virtual void
296 nonsymmetric(DataAbstract* ev);
297
298 /**
299 \brief
300 Computes the trace of a matrix
301
302 \param ev - Output - trace of your matrix
303
304 */
305 ESCRIPT_DLL_API
306 virtual void
307 trace(DataAbstract* ev, int axis_offset);
308
309 /**
310 \brief
311 Transpose each data point of this Data object around the given axis.
312
313 \param ev - Output - transpose of your matrix
314
315 */
316 ESCRIPT_DLL_API
317 virtual void
318 transpose(DataAbstract* ev, int axis_offset);
319
320 /**
321 \brief
322 swaps components axis0 and axis1
323
324 \param ev - Output - swapped components
325
326 */
327 ESCRIPT_DLL_API
328 virtual void
329 swapaxes(DataAbstract* ev, int axis0, int axis1);
330
331
332 /**
333 \brief
334 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
335
336 \param ev - Output - eigenvalues in increasing order at each data point
337
338 */
339 ESCRIPT_DLL_API
340 virtual void
341 eigenvalues(DataAbstract* ev);
342
343 /**
344 \brief
345 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
346
347 \param ev - Output - eigenvalues in increasing order at each data point
348 \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
349 and the first nonzero component is positive.
350 \param tol - Input - eigenvalue with relative distance tol are treated as equal.
351
352 */
353
354 ESCRIPT_DLL_API
355 virtual void
356 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
357
358
359 protected:
360
361 private:
362
363 /**
364 \brief
365 Common initialisation called from constructors.
366
367 Description:
368 Common initialisation called from constructors.
369
370 Resizes the underlying data array to provide sufficient storage for the
371 given shape and number of data points, and creates the corresponding
372 DataArrayView of this data.
373
374 \param shape - Input - The shape of the point data.
375 \param noSamples - Input - number of samples.
376 \param noDataPointsPerSample - Input - number of data points per sample.
377 */
378 void
379 initialise(const DataArrayView::ShapeType& shape,
380 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 DataArrayView& value);
394
395 /**
396 \brief
397 Copy the given data point value given a numarray object to all data points in this object.
398
399 Description:
400 Copy the given data point value given a numarray object to all data points in this object.
401
402 \param value Input - A single data point value.
403 */
404 void
405 copy(const boost::python::numeric::array& value);
406
407 /**
408 \brief
409 Copy the numarray object to the data points in this object.
410
411 Description:
412 Copy the numarray object to the data points in this object.
413
414 \param value Input - new values for the data points
415 */
416 void
417 copyAll(const boost::python::numeric::array& value);
418
419 /**
420 \brief
421 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
422
423 Description:
424 Copy a double value to the data point dataPointNo of sample sampleNo in this object.
425
426 \param sampleNo Input - sample number
427 \param dataPointNo Input - data point of the sample
428 \param value Input - new values for the data point
429 */
430 ESCRIPT_DLL_API
431 virtual void
432 copyToDataPoint(const int sampleNo, const int dataPointNo, const double value);
433
434
435 /**
436 \brief
437 Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
438
439 Description:
440 Copy the numarray object to the data point dataPointNo of sample sampleNo in this object.
441
442 \param sampleNo Input - sample number
443 \param dataPointNo Input - data point of the sample
444 \param value Input - new values for the data point
445 */
446 void
447 copyToDataPoint(const int sampleNo, const int dataPointNo, const boost::python::numeric::array& value);
448
449 //
450 // The main data storage array, a 2D array of data blocks.
451 // noSamples * noDataPointsPerSample
452 DataBlocks2D m_data;
453
454 };
455
456 } // end of namespace
457
458 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26