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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1137 - (show annotations)
Thu May 10 08:11:31 2007 UTC (12 years, 2 months ago) by gross
File MIME type: text/plain
File size: 10245 byte(s)
This version passes the tests on windows except for 

   * vtk
   * netCDF

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

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26