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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 122 - (show annotations)
Thu Jun 9 05:38:05 2005 UTC (14 years, 3 months ago) by jgs
Original Path: trunk/esys2/escript/src/Data/DataExpanded.h
File MIME type: text/plain
File size: 8802 byte(s)
Merge of development branch back to main trunk on 2005-06-09

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 protected:
264
265 private:
266
267 /**
268 \brief
269 Common initialisation called from constructors.
270
271 Description:
272 Common initialisation called from constructors.
273
274 Resizes the underlying data array to provide sufficient storage for the
275 given shape and number of data points, and creates the corresponding
276 DataArrayView of this data.
277
278 \param shape - Input - The shape of the point data.
279 \param noSamples - Input - number of samples.
280 \param noDataPointsPerSample - Input - number of data points per sample.
281 */
282 void
283 initialise(const DataArrayView::ShapeType& shape,
284 int noSamples,
285 int noDataPointsPerSample);
286
287 /**
288 \brief
289 Copy the given data point to all data points in this object.
290
291 Description:
292 Copy the given data point to all data points in this object.
293
294 \param value Input - A single data point value.
295 */
296 void
297 copy(const DataArrayView& value);
298
299 void
300 copy(const boost::python::numeric::array& value);
301
302 //
303 // The main data storage array, a 2D array of data blocks.
304 // noSamples * noDataPointsPerSample
305 DataBlocks2D m_data;
306
307 };
308
309 } // end of namespace
310
311 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26