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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3911 - (show annotations)
Thu Jun 14 01:01:03 2012 UTC (7 years, 4 months ago) by jfenwick
File MIME type: text/plain
File size: 6983 byte(s)
Copyright changes
1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2012 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_DataConstant_20040323_H
16 #define escript_DataConstant_20040323_H
17 #include "system_dep.h"
18
19 #include "DataReady.h"
20 #include "WrappedArray.h"
21
22
23 namespace escript {
24
25 /**
26 \brief
27 DataConstant stores a single data point which represents the entire
28 function space.
29
30 Description:
31 DataConstant stores a single data point which represents the entire
32 function space.
33 */
34 class DataConstant : public DataReady {
35 typedef DataReady parent;
36 public:
37
38 /**
39 \brief
40 Constructor for DataConstant objects.
41
42 Description:
43 Constructor for DataConstant objects.
44
45 \param value - Input - Data value for a single point.
46 \param what - Input - A description of what this data object represents.
47 */
48 ESCRIPT_DLL_API
49 DataConstant(const WrappedArray& value,
50 const FunctionSpace& what);
51
52
53 /**
54 \brief
55 Copy constructor. Performs a deep copy.
56 */
57 ESCRIPT_DLL_API
58 DataConstant(const DataConstant& other);
59
60
61 /**
62 \brief
63 Alternative constructor for DataConstant objects.
64
65 Description:
66 Alternative Constructor for DataConstant objects.
67 \param other - Input - Data object to copy from.
68 \param region - Input - region to copy.
69 */
70 ESCRIPT_DLL_API
71 DataConstant(const DataConstant& other,
72 const DataTypes::RegionType& region);
73
74 /**
75 \brief
76 Alternative constructor for DataConstant objects.
77
78 Description:
79 Alternative Constructor for DataConstant objects.
80 \param what - Input - A description of what this data object represents.
81 \param shape - Input - the shape of each data-point.
82 \param data - the data values for each data-point.
83 */
84 ESCRIPT_DLL_API
85 DataConstant(const FunctionSpace& what,
86 const DataTypes::ShapeType &shape,
87 const DataTypes::ValueType &data);
88
89 ESCRIPT_DLL_API
90 DataConstant(const FunctionSpace& what,
91 const DataTypes::ShapeType &shape,
92 const double v);
93
94
95 ESCRIPT_DLL_API
96 bool
97 isConstant() const
98 {
99 return true;
100 };
101
102 /**
103 \brief Return true if the value contains a NaN.
104 */
105 ESCRIPT_DLL_API
106 bool
107 hasNaN() const;
108
109 /**
110 \brief
111 Write the data as a string.
112 */
113 ESCRIPT_DLL_API
114 std::string
115 toString() const;
116
117 /**
118 \brief Return a deep copy of the current object.
119 */
120 ESCRIPT_DLL_API
121 virtual
122 DataAbstract*
123 deepCopy();
124
125
126 /**
127 \brief
128 dumps the object into a netCDF file
129 */
130 ESCRIPT_DLL_API
131 virtual
132 void
133 dump(const std::string fileName) const;
134
135 /**
136 \brief
137 sets all values to zero
138 */
139 ESCRIPT_DLL_API
140 virtual
141 void
142 setToZero();
143
144 /**
145 \brief
146 Return the offset for the given sample. This is a somewhat artificial notion
147 but returns the offset in bytes for the given point into the container
148 holding the point data. Only really necessary to avoid many DataArrayView
149 objects.
150 \param sampleNo - Input - sample number.
151 \param dataPointNo - Input - data point number for the sample.
152 */
153 ESCRIPT_DLL_API
154 virtual
155 DataTypes::ValueType::size_type
156 getPointOffset(int sampleNo,
157 int dataPointNo) const;
158
159 ESCRIPT_DLL_API
160 virtual
161 DataTypes::ValueType::size_type
162 getPointOffset(int sampleNo,
163 int dataPointNo);
164
165 /**
166 \brief
167 Return the number of doubles stored for the Data object.
168 */
169 ESCRIPT_DLL_API
170 virtual
171 DataTypes::ValueType::size_type
172 getLength() const;
173
174 /**
175 \brief
176 Factory method that returns a newly created DataConstant object
177 sliced from the specified region of this object.
178 The caller is reponsible for managing the object created.
179 \param region - Input - region to slice from this object.
180 */
181 ESCRIPT_DLL_API
182 virtual
183 DataAbstract*
184 getSlice(const DataTypes::RegionType& region) const;
185
186 /**
187 \brief
188 Copy the specified region from the given value.
189 \param value - Input - Data object to copy from.
190 \param region - Input - Region to copy.
191 */
192 ESCRIPT_DLL_API
193 virtual
194 void
195 setSlice(const DataAbstract* value,
196 const DataTypes::RegionType& region);
197
198
199 /**
200 \brief
201 Computes a symmetric matrix (A + AT) / 2
202
203 \param ev - Output - symmetric matrix
204
205 */
206 ESCRIPT_DLL_API
207 virtual void
208 symmetric(DataAbstract* ev);
209
210 /**
211 \brief
212 Computes a nonsymmetric matrix (A - AT) / 2
213
214 \param ev - Output - nonsymmetric matrix
215
216 */
217 ESCRIPT_DLL_API
218 virtual void
219 nonsymmetric(DataAbstract* ev);
220
221 /**
222 \brief
223 Computes the trace of a matrix
224
225 \param ev - Output - trace of matrix
226 \param axis_offset
227
228 */
229 ESCRIPT_DLL_API
230 virtual void
231 trace(DataAbstract* ev, int axis_offset);
232
233 /**
234 \brief
235 Transpose each data point of this Data object around the given axis.
236
237 \param ev - Output - transpose of matrix
238 \param axis_offset
239 */
240 ESCRIPT_DLL_API
241 virtual void
242 transpose(DataAbstract* ev, int axis_offset);
243
244 /**
245 \brief
246 swaps components axis0 and axis1
247
248 \param ev - Output - swapped components
249 \param axis0
250 \param axis1
251 */
252 ESCRIPT_DLL_API
253 virtual void
254 swapaxes(DataAbstract* ev, int axis0, int axis1);
255
256
257 /**
258 \brief
259 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev
260
261 \param ev - Output - eigenvalues in increasing order at each data point
262
263 */
264 ESCRIPT_DLL_API
265 virtual void
266 eigenvalues(DataAbstract* ev);
267
268 /**
269 \brief
270 solves the eigenvalue problem this*V=ev*V for the eigenvalues ev and eigenvectors V
271
272 \param ev - Output - eigenvalues in increasing order at each data point
273 \param V - Output - corresponding eigenvectors. They are normalized such that their length is one
274 and the first nonzero component is positive.
275 \param tol - Input - eigenvalue with relative distance tol are treated as equal.
276
277 */
278
279 ESCRIPT_DLL_API
280 virtual void
281 eigenvalues_and_eigenvectors(DataAbstract* ev,DataAbstract* V,const double tol=1.e-13);
282
283
284 /**
285 \brief invert square matricies
286 \param out - Where to store the results
287 \return errorcode (0 indicates success)
288 */
289 ESCRIPT_DLL_API
290 virtual int
291 matrixInverse(DataAbstract* out) const;
292
293 /**
294 \brief
295 Return a reference to the underlying DataVector.
296 */
297 ESCRIPT_DLL_API
298 DataTypes::ValueType&
299 getVectorRW();
300
301
302 ESCRIPT_DLL_API
303 const DataTypes::ValueType&
304 getVectorRO() const;
305
306 protected:
307
308 private:
309 //
310 // the actual data
311 DataTypes::ValueType m_data;
312
313 };
314
315 } // end of namespace
316 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26