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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 123 - (show annotations)
Fri Jul 8 04:08:13 2005 UTC (14 years, 2 months ago) by jgs
Original Path: trunk/esys2/escript/src/Data/DataExpanded.h
File MIME type: text/plain
File size: 9506 byte(s)
Merge of development branch back to main trunk on 2005-07-08

1 // $Id$
2 /*
3 ******************************************************************************
4 * *
5 * COPYRIGHT ACcESS 2004 - All Rights Reserved *
6 * *
7 * This software is the property of ACcESS. No part of this code *
8 * may be copied in any form or by any means without the expressed written *
9 * consent of ACcESS. Copying, use or modification of this software *
10 * by any unauthorised person is illegal unless that person has a software *
11 * license agreement with ACcESS. *
12 * *
13 ******************************************************************************
14 */
15
16 #if !defined escript_DataExpanded_20040323_H
17 #define escript_DataExpanded_20040323_H
18
19 #include "DataAbstract.h"
20 #include "DataBlocks2D.h"
21 #include "DataArrayView.h"
22
23 #include <boost/scoped_ptr.hpp>
24 #include <boost/python/numeric.hpp>
25
26 namespace escript {
27
28 //
29 // Forward declarations of other Data types.
30 class DataEmpty;
31 class DataConstant;
32 class DataTagged;
33
34 /**
35 \brief
36 Give a short description of what DataExpanded does.
37
38 Description:
39 Give a detailed description of DataExpanded.
40
41 Template Parameters:
42 For templates describe any conditions that the parameters used in the
43 template must satisfy.
44 */
45
46 class DataExpanded : public DataAbstract {
47
48 public:
49
50 /**
51 \brief
52 Constructor for DataExpanded.
53
54 Description:
55 Constructor for DataExpanded.
56
57 The given single data value is copied to all the data points in
58 this data object, where the number of data points is defined by
59 the given function space.
60
61 \param value - Input - A single data value.
62 \param what - Input - A description of what this data represents.
63 */
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 DataExpanded(const DataArrayView& value,
82 const FunctionSpace& what);
83
84 /**
85 \brief
86 Alternative constructor for DataExpanded that copies a slice from
87 another DataExpanded.
88
89 \param other - Input - DataExpanded object to slice from.
90 \param region - Input - region to copy.
91 */
92 DataExpanded(const DataExpanded& other,
93 const DataArrayView::RegionType& region);
94
95 /**
96 \brief
97 Alternative constructor for DataExpanded objects.
98
99 Description:
100 Alternative Constructor for DataExpanded objects.
101 \param what - Input - A description of what this data object represents.
102 \param shape - Input - the shape of each data-point.
103 \param data - the array of data values for the data-points.
104 */
105 DataExpanded(const FunctionSpace& what,
106 const DataArrayView::ShapeType &shape,
107 const DataArrayView::ValueType &data);
108
109 /**
110 \brief
111 Copy constructor for DataExpanded.
112 Performs a deep copy from another DataExpanded.
113 */
114 DataExpanded(const DataExpanded& other);
115
116 /**
117 \brief
118 Copy constructor for DataExpanded.
119 Construct a DataExpanded from a DataConstant.
120 */
121 DataExpanded(const DataConstant& other);
122
123 /**
124 \brief
125 Copy constructor for DataExpanded.
126 Construct a DataExpanded from a DataTagged.
127 */
128 DataExpanded(const DataTagged& other);
129
130 /**
131 \brief
132 Default destructor for DataExpanded.
133 */
134 virtual
135 ~DataExpanded();
136
137 /**
138 \brief
139 Return a textual representation of the data.
140 */
141 virtual
142 std::string
143 toString() const;
144
145 /**
146 \brief
147 Reshape the data point if the data point is currently rank 0.
148 The original data point value is used for all values of the new
149 data point.
150 */
151 void
152 reshapeDataPoint(const DataArrayView::ShapeType& shape);
153
154 /**
155 \brief
156 Return the offset for the given given data point. This returns
157 the offset in bytes for the given point into the container
158 holding the point data.
159
160 \param sampleNo - Input - sample number.
161 \param dataPointNo - Input - data point number.
162 */
163 virtual
164 DataArrayView::ValueType::size_type
165 getPointOffset(int sampleNo,
166 int dataPointNo) const;
167
168 /**
169 \brief
170 Return a view into the data array for the data point specified.
171
172 NOTE: Construction of the DataArrayView is a relatively expensive
173 operation.
174
175 \param sampleNo - Input - sample number.
176 \param dataPointNo - Input - data point number.
177 \return DataArrayView for the data point.
178 */
179 DataArrayView
180 getDataPoint(int sampleNo,
181 int dataPointNo);
182
183 /**
184 \brief
185 Return the number of doubles stored for the Data.
186 */
187 virtual
188 ValueType::size_type
189 getLength() const;
190
191 /**
192 \brief
193 Factory method that returns a newly created DataExpanded.
194 The caller is reponsible for managing the object created.
195
196 \param region - Input - Region to copy.
197 */
198 virtual
199 DataAbstract*
200 getSlice(const DataArrayView::RegionType& region) const;
201
202 /**
203 \brief
204 Copy the specified region from the given value.
205
206 \param value - Input - Data object to copy from.
207 \param region - Input - Region to copy.
208 */
209 virtual
210 void
211 setSlice(const DataAbstract* value,
212 const DataArrayView::RegionType& region);
213
214 /**
215 \brief
216 Assign the given value to all data-points associated with the given
217 reference number.
218
219 A reference number corresponds to a sample, and thus to all data-points
220 in that sample.
221
222 If the given reference number does not correspond to any sample in this
223 Data object, an exception will be thrown.
224
225 If the given value is a different shape to this Data object, an exception
226 will be thrown.
227
228 \param ref - Input - reference number which determines sample numebr to
229 assign given values to.
230 \param value - Input - Value to assign to data-point associated with
231 the given reference number.
232 */
233 virtual
234 void
235 setRefValue(int ref,
236 const DataArray& value);
237
238 /**
239 \brief
240 Return the value of the first data-point in the sample associated with
241 the given reference number.
242
243 A reference number corresponds to a sample, and thus to all data-points
244 in that sample. If there is more than one data-point per sample number
245 in this Data object, the value of the first data-point will be returned.
246
247 If the given reference number does not correspond to any sample in this
248 Data object, an exception will be thrown.
249
250 If the given value is a different shape to this Data object, an exception
251 will be thrown.
252
253 \param ref - Input - reference number which determines sample number to
254 read from.
255 \param value - Output - Object to receive data-points associated with
256 the given reference number.
257 */
258 virtual
259 void
260 getRefValue(int ref,
261 DataArray& value);
262
263 /**
264 \brief
265 Archive the underlying data values to the file referenced
266 by ofstream. A count of the number of values expected to be written
267 is provided as a cross-check.
268
269 The return value indicates success (0) or otherwise (1).
270 */
271 int
272 archiveData(std::ofstream& archiveFile,
273 const DataArrayView::ValueType::size_type noValues) const;
274
275 /**
276 \brief
277 Extract the number of values specified by noValues from the file
278 referenced by ifstream to the underlying data structure.
279
280 The return value indicates success (0) or otherwise (1).
281 */
282 int
283 extractData(std::ifstream& archiveFile,
284 const DataArrayView::ValueType::size_type noValues);
285
286 protected:
287
288 private:
289
290 /**
291 \brief
292 Common initialisation called from constructors.
293
294 Description:
295 Common initialisation called from constructors.
296
297 Resizes the underlying data array to provide sufficient storage for the
298 given shape and number of data points, and creates the corresponding
299 DataArrayView of this data.
300
301 \param shape - Input - The shape of the point data.
302 \param noSamples - Input - number of samples.
303 \param noDataPointsPerSample - Input - number of data points per sample.
304 */
305 void
306 initialise(const DataArrayView::ShapeType& shape,
307 int noSamples,
308 int noDataPointsPerSample);
309
310 /**
311 \brief
312 Copy the given data point to all data points in this object.
313
314 Description:
315 Copy the given data point to all data points in this object.
316
317 \param value Input - A single data point value.
318 */
319 void
320 copy(const DataArrayView& value);
321
322 void
323 copy(const boost::python::numeric::array& value);
324
325 //
326 // The main data storage array, a 2D array of data blocks.
327 // noSamples * noDataPointsPerSample
328 DataBlocks2D m_data;
329
330 };
331
332 } // end of namespace
333
334 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26