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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2644 - (show annotations)
Wed Sep 2 04:14:03 2009 UTC (10 years, 5 months ago) by jfenwick
File MIME type: text/plain
File size: 7122 byte(s)
Add unit tests for saveDataCSV which should be ready for use now.
Keyword args are now output in sorted order.

Removed some unneeded functions.
1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2009 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_FunctionSpace_20040323_H
16 #define escript_FunctionSpace_20040323_H
17 #include "system_dep.h"
18
19 #include "AbstractDomain.h"
20 #include "NullDomain.h"
21
22 #include <string>
23 #include <list>
24
25 namespace escript {
26
27 //
28 // Forward declaration for class Data.
29 class Data;
30
31 /**
32 \brief
33 Give a short description of what FunctionSpace does.
34
35 Description:
36 Give a detailed description of FunctionSpace.
37
38 Template Parameters:
39 For templates describe any conditions that the parameters used in the
40 template must satisfy.
41 */
42
43 class FunctionSpace
44 {
45 public:
46 /**
47 \brief
48 Default constructor for FunctionSpace.
49
50 Description:
51 Default constructor for FunctionSpace
52 Generates a function space with a null domain.
53
54 Preconditions:
55 Describe any preconditions.
56
57 Throws:
58 Describe any exceptions thrown.
59 */
60 ESCRIPT_DLL_API
61 FunctionSpace();
62
63 /**
64 \brief
65 Constructor for FunctionSpace.
66
67 Description:
68 Constructor for FunctionSpace.
69 */
70 ESCRIPT_DLL_API
71 FunctionSpace(const_Domain_ptr domain,
72 int functionSpaceType);
73
74
75 ESCRIPT_DLL_API
76 FunctionSpace(const FunctionSpace& other);
77
78 /**
79 \brief
80 Return the function space type code.
81
82 Note: The meaning of the code depends on the domain object the FunctionSpace is built on.
83 */
84 ESCRIPT_DLL_API
85 int
86 getTypeCode() const;
87
88 /**
89 \brief
90 Return the function space domain.
91 */
92 ESCRIPT_DLL_API
93 // const
94 // AbstractDomain&
95 const_Domain_ptr
96 getDomain() const;
97
98 /**
99 \brief
100 Return the function space domain.
101 Internal use only! This gets around some python difficulties by
102 casting away the const. Do not use this in c++.
103 */
104 ESCRIPT_DLL_API
105 // const
106 // AbstractDomain&
107 Domain_ptr
108 getDomainPython() const;
109
110
111
112 /**
113 \brief Checks if this functionspace support tags
114 */
115 ESCRIPT_DLL_API
116 bool
117 canTag() const;
118
119
120 /**
121 \brief assigns new tag newTag to all samples with a positive
122 value of mask for any its sample point.
123
124 */
125 ESCRIPT_DLL_API
126 void setTags(const int newTag, const escript::Data& mask) const;
127
128
129 /**
130 \brief
131 Return the shape of the data needed to represent the function space.
132 */
133 ESCRIPT_DLL_API
134 std::pair<int,int>
135 getDataShape() const;
136
137 /**
138 \brief
139 Comparison operator.
140 Return true if function spaces are equal.
141 ie: Same domain and same function space type.
142 */
143 ESCRIPT_DLL_API
144 bool
145 operator==(const FunctionSpace& other) const;
146
147 ESCRIPT_DLL_API
148 bool
149 operator!=(const FunctionSpace& other) const;
150
151 /**
152 \brief
153 Return a text description of the function space.
154 */
155 ESCRIPT_DLL_API
156 std::string
157 toString() const;
158
159 //#define DEBUG_PY_STRINGS
160
161 #ifdef DEBUG_PY_STRINGS
162 /**
163 \brief
164 Return a text description of the function space
165 as a python string.
166 NOTE: This code was used to debug a conversion of
167 std::string to python string problem on windows.
168 An alternative approach was sought.
169 */
170 ESCRIPT_DLL_API
171 PyObject *
172 toPyString() const;
173 #endif
174
175 /**
176 \brief
177 Return the tag associated with the given sample number.
178 */
179 ESCRIPT_DLL_API
180 int
181 getTagFromSampleNo(int sampleNo) const;
182
183 /**
184 \brief
185 Return the tag associated with the given data-point number.
186 */
187 ESCRIPT_DLL_API
188 int
189 getTagFromDataPointNo(int dataPointNo) const;
190
191 /**
192 \brief
193 Return the reference number associated with the given data-point number.
194 */
195 ESCRIPT_DLL_API
196 int getReferenceIDFromDataPointNo(int dataPointNo) const;
197
198 /**
199 \brief
200 Return the reference number associated with the given sample number.
201 This function is not efficient. It is better to first call
202 borrowSampleReferenceIDs and then when iterating over sampleNo to use sampleNo as an offset.
203 */
204 ESCRIPT_DLL_API
205 inline
206 int
207 getReferenceIDOfSample(int sampleNo) const
208 {
209 return borrowSampleReferenceIDs()[sampleNo];
210 }
211
212 /**
213 \brief Does this process own the sample?
214 For non-MPI builds will always return true
215 */
216 ESCRIPT_DLL_API
217 inline
218 bool
219 ownSample(int sampleNo) const
220 {
221 return m_domain->ownSample(m_functionSpaceType, sampleNo);
222 }
223
224 /**
225 \brief
226 Return a borrowed reference to the list of sample reference IDs
227 */
228 ESCRIPT_DLL_API
229 const int*
230 borrowSampleReferenceIDs() const;
231
232 /**
233 \brief
234 Return the spatial locations of the data points.
235 */
236 ESCRIPT_DLL_API
237 escript::Data
238 getX() const;
239
240 /**
241 \brief
242 Return the surface normal field.
243 */
244 ESCRIPT_DLL_API
245 escript::Data
246 getNormal() const;
247
248 /**
249 \brief
250 Return the sample size (e.g. the diameter of elements, radius of particles).
251 */
252 ESCRIPT_DLL_API
253 escript::Data
254 getSize() const;
255
256 /**
257 \brief
258 Return the number of samples.
259 */
260 ESCRIPT_DLL_API
261 inline
262 int
263 getNumSamples() const {
264 return getDataShape().second;
265 }
266
267 /**
268 \brief
269 Return the number of data points per sample.
270 */
271 ESCRIPT_DLL_API
272 inline
273 int
274 getNumDPPSample() const {
275 return getNumDataPointsPerSample();
276 }
277
278 ESCRIPT_DLL_API
279 inline
280 int
281 getNumDataPointsPerSample() const {
282 return getDataShape().first;
283 }
284
285 /**
286 \brief
287 Return the spatial dimension of the underlying domain.
288 */
289 ESCRIPT_DLL_API
290 inline
291 int
292 getDim() const {
293 return getDomain()->getDim();
294 }
295 /**
296 \brief
297 Returns a list of the tags used in this function space
298 */
299 ESCRIPT_DLL_API
300 boost::python::list
301 getListOfTags() const;
302 /**
303 \brief
304 Returns an stl::list of the tags used in this function space
305 */
306 ESCRIPT_DLL_API
307 std::list<int>
308 getListOfTagsSTL() const;
309
310 /**
311 \brief
312 return the number of tags in use and a pointer to an array with the number of tags in use
313 */
314 ESCRIPT_DLL_API
315 int getNumberOfTagsInUse() const;
316
317 ESCRIPT_DLL_API
318 const int* borrowListOfTagsInUse() const;
319
320 ESCRIPT_DLL_API
321 bool
322 probeInterpolation(const FunctionSpace& other) const
323 {
324 if (*this==other) {
325 return true;
326 } else {
327 const_Domain_ptr domain=getDomain();
328 if (*domain==*other.getDomain()) {
329 return domain->probeInterpolationOnDomain(getTypeCode(),other.getTypeCode());
330 } else {
331 return domain->probeInterpolationACross(getTypeCode(),*(other.getDomain()),other.getTypeCode());
332 }
333 }
334 }
335
336
337 protected:
338
339 private:
340 /**
341 \brief
342 Assignment operator.
343 This method is only defined (private) to prevent people from using it.
344 */
345 ESCRIPT_DLL_API
346 FunctionSpace&
347 operator=(const FunctionSpace& other);
348
349 //
350 // function space domain
351
352 // const AbstractDomain* m_domain;
353 const_Domain_ptr m_domain;
354
355
356 //
357 // function space type code.
358 int m_functionSpaceType;
359
360 };
361
362 } // end of namespace
363
364 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26