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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1044 - (show annotations)
Mon Mar 19 07:29:31 2007 UTC (12 years, 6 months ago) by gross
File MIME type: text/plain
File size: 10048 byte(s)
clear name tagging is supported now.
1 // $Id$
2 /*
3 ************************************************************
4 * Copyright 2006 by ACcESS MNRF *
5 * *
6 * http://www.access.edu.au *
7 * Primary Business: Queensland, Australia *
8 * Licensed under the Open Software License version 3.0 *
9 * http://www.opensource.org/licenses/osl-3.0.php *
10 * *
11 ************************************************************
12
13 */
14
15 #if !defined escript_AbstractDomain_20040609_H
16 #define escript_AbstractDomain_20040609_H
17
18 #include "system_dep.h"
19
20 #include <string>
21 #include <map>
22 #include <boost/python/dict.hpp>
23
24 namespace escript {
25 // class forward declarations
26 class Data;
27 /**
28 \brief
29 Base class for all escript domains.
30
31 Description:
32 Base class for all escript domains.
33 */
34
35 class AbstractDomain {
36
37 public:
38
39
40 // structure holding values for X, size and normal
41 typedef int StatusType;
42 struct ValueBuffer
43 {
44 StatusType m_status;
45 boost::shared_ptr<Data> m_data;
46 };
47 typedef struct ValueBuffer ValueBuffer;
48
49 //
50 // map from function space type code to value buffer
51 typedef std::map<int, ValueBuffer> BufferMapType;
52
53
54 /**
55 \brief
56 Default constructor for AbstractDomain.
57
58 Description:
59 Default constructor for AbstractDomain. As the name suggests
60 this is intended to be an abstract base class but by making it
61 constructable we avoid a boost.python wrapper class. A call to
62 almost any of the base class functions will throw an exception
63 as they are not intended to be used directly, but are overridden
64 by the underlying solver package which escript is linked to.
65
66 By default, this class is overridden by the class NullDomain.
67
68 Preconditions:
69 Describe any preconditions.
70
71 Throws:
72 Describe any exceptions thrown.
73 */
74 ESCRIPT_DLL_API
75 AbstractDomain();
76
77 /**
78 \brief
79 Destructor for AbstractDomain.
80
81 Description:
82 Destructor for AbstractDomain.
83 */
84 ESCRIPT_DLL_API
85 virtual ~AbstractDomain();
86
87 /**
88 \brief
89 Returns true if the given integer is a valid function space type
90 for this domain.
91 */
92 ESCRIPT_DLL_API
93 virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
94
95 /**
96 \brief
97 Return a description for this domain.
98 */
99 ESCRIPT_DLL_API
100 virtual std::string getDescription() const;
101
102 /**
103 \brief
104 Return a description for the given function space type code.
105 */
106 ESCRIPT_DLL_API
107 virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
108
109 /**
110 \brief
111 Returns the spatial dimension of the domain.
112
113 This has to be implemented by the actual Domain adapter.
114 */
115 ESCRIPT_DLL_API
116 virtual int getDim() const;
117
118 /**
119 \brief
120 Return true if given domains are equal.
121 */
122 ESCRIPT_DLL_API
123 virtual bool operator==(const AbstractDomain& other) const;
124 ESCRIPT_DLL_API
125 virtual bool operator!=(const AbstractDomain& other) const;
126
127 /**
128 \brief
129 Writes the domain to an external file filename.
130
131 This has to be implemented by the actual Domain adapter.
132 */
133 ESCRIPT_DLL_API
134 virtual void write(const std::string& filename) const;
135
136 /**
137 \brief
138 Return the number of data points per sample, and the number of samples as a pair.
139
140 This has to be implemented by the actual Domain adapter.
141
142 \param functionSpaceCode Input - Code for the function space type.
143 \return pair, first - number of data points per sample, second - number of samples
144 */
145 ESCRIPT_DLL_API
146 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
147
148 /**
149 \brief
150 Return the tag key for the given sample number.
151 \param functionSpaceType Input - The function space type.
152 \param sampleNo Input - The sample number.
153 */
154 ESCRIPT_DLL_API
155 virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
156
157 /**
158 \brief
159 sets a map from a clear tag name to a tag key
160 \param name Input - tag name.
161 \param tag Input - tag key.
162 */
163 ESCRIPT_DLL_API
164 virtual void setTagMap(const std::string& name, int tag);
165
166 /**
167 \brief
168 Return the tag key for tag name.
169 \param name Input - tag name
170 */
171 ESCRIPT_DLL_API
172 virtual int getTag(const std::string& name) const;
173
174 /**
175 \brief
176 Returns True if name is a defined tag name
177 \param name Input - tag name
178 */
179 ESCRIPT_DLL_API
180 virtual bool isValidTagName(const std::string& name) const;
181
182 /**
183 \brief
184 Returns all tag names in a single string sperated by commas
185 */
186 ESCRIPT_DLL_API
187 virtual std::string showTagNames() const;
188
189 /**
190 \brief
191 Return a borrowed pointer to the sample reference number id list
192 \param functionSpaceType Input - The function space type.
193 */
194 ESCRIPT_DLL_API
195 virtual int* borrowSampleReferenceIDs(int functionSpaceType) const;
196
197 /**
198 \brief
199 Assigns new location to the domain.
200
201 This has to be implemented by the actual Domain adapter.
202 */
203 ESCRIPT_DLL_API
204 virtual void setNewX(const escript::Data& arg);
205
206 /**
207 \brief
208 Interpolates data given on source onto target where source and target have to be given on the same domain.
209
210 This has to be implemented by the actual Domain adapter.
211 */
212 ESCRIPT_DLL_API
213 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
214 ESCRIPT_DLL_API
215 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
216
217 /**
218 \brief
219 Interpolates data given on source onto target where source and target are given on different domains.
220
221 This has to be implemented by the actual Domain adapter.
222 */
223 ESCRIPT_DLL_API
224 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
225 ESCRIPT_DLL_API
226 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
227
228 /**
229 \brief
230 Returns locations in the domain. The function space is chosen appropriately.
231 */
232 ESCRIPT_DLL_API
233 virtual escript::Data getX() const;
234
235 /**
236 \brief
237 Return boundary normals. The function space is chosen appropriately.
238 */
239 ESCRIPT_DLL_API
240 virtual escript::Data getNormal() const;
241
242 /**
243 \brief
244 Returns the local size of samples. The function space is chosen appropriately.
245 */
246 ESCRIPT_DLL_API
247 virtual escript::Data getSize() const;
248
249 /**
250 \brief
251 Copies the location of data points on the domain into out.
252 The actual function space to be considered
253 is defined by out. out has to be defined on this.
254
255 This has to be implemented by the actual Domain adapter.
256 */
257 ESCRIPT_DLL_API
258 virtual void setToX(escript::Data& out) const;
259
260 /**
261 \brief
262 Copies the surface normals at data points into out.
263 The actual function space to be considered
264 is defined by out. out has to be defined on this.
265
266 This has to be implemented by the actual Domain adapter.
267 */
268 ESCRIPT_DLL_API
269 virtual void setToNormal(escript::Data& out) const;
270
271 /**
272 \brief
273 Copies the size of samples into out. The actual
274 function space to be considered
275 is defined by out. out has to be defined on this.
276
277 This has to be implemented by the actual Domain adapter.
278 */
279 ESCRIPT_DLL_API
280 virtual void setToSize(escript::Data& out) const;
281
282 /**
283 \brief
284 Copies the gradient of arg into grad. The actual function space to be considered
285 for the gradient is defined by grad. arg and grad have to be defined on this.
286
287 This has to be implemented by the actual Domain adapter.
288 */
289 ESCRIPT_DLL_API
290 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
291 /**
292 \brief
293 Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
294
295 This has to be implemented by the actual Domain adapter.
296 */
297 ESCRIPT_DLL_API
298 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
299
300 /**
301 \brief
302 Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier
303
304 This has to be implemented by the actual Domain adapter.
305 */
306 ESCRIPT_DLL_API
307 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg) const;
308
309 /**
310 \brief
311 returns the function space representation of the type functionSpaceCode on this domain
312 as a vtkObject.
313
314 This has to be implemented by the actual Domain adapter.
315 */
316 //virtual vtkObject createVtkObject(int functionSpaceCode) const;
317
318 /**
319 \brief assigns new tag newTag to all samples of functionspace with a positive
320 value of mask for any its sample point.
321
322 */
323 ESCRIPT_DLL_API
324 virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
325
326 /**
327 \brief
328 returns true if data on this domain and a function space of type functionSpaceCode has to
329 considered as cell centered data.
330
331 This has to be implemented by the actual Domain adapter.
332 */
333 ESCRIPT_DLL_API
334 virtual bool isCellOriented(int functionSpaceCode) const;
335
336 /**
337 \brief
338 returns status of the domain.
339
340 This has to be implemented by the actual Domain adapter.
341 */
342 ESCRIPT_DLL_API
343 virtual StatusType getStatus() const;
344
345 /**
346 \brief
347 Throw a standard exception. This function is called if any attempt
348 is made to use a base class function.
349 */
350 ESCRIPT_DLL_API
351 void throwStandardException(const std::string& functionName) const;
352
353 protected:
354
355 private:
356
357 // buffer for coordinates used by function spaces
358 BufferMapType m_x_buffer;
359
360 // buffer for normal vectors used by function spaces
361 BufferMapType m_normal_buffer;
362
363 // buffer for normal element size used by function spaces
364 BufferMapType m_size_buffer;
365
366 };
367
368 } // end of namespace
369
370 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26