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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 797 - (show annotations)
Thu Aug 3 02:03:18 2006 UTC (12 years, 11 months ago) by gross
File MIME type: text/plain
File size: 9376 byte(s)
function added to manually free unused memory in the memory manager
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 Return the reference number of the given sample number.
160 \param functionSpaceType Input - The function space type.
161 \param sampleNo Input - The sample number.
162 */
163 ESCRIPT_DLL_API
164 virtual int getReferenceNoFromSampleNo(int functionSpaceType, int sampleNo) const;
165
166 /**
167 \brief
168 Assigns new location to the domain.
169
170 This has to be implemented by the actual Domain adapter.
171 */
172 ESCRIPT_DLL_API
173 virtual void setNewX(const escript::Data& arg);
174
175 /**
176 \brief
177 Interpolates data given on source onto target where source and target have to be given on the same domain.
178
179 This has to be implemented by the actual Domain adapter.
180 */
181 ESCRIPT_DLL_API
182 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
183 ESCRIPT_DLL_API
184 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
185
186 /**
187 \brief
188 Interpolates data given on source onto target where source and target are given on different domains.
189
190 This has to be implemented by the actual Domain adapter.
191 */
192 ESCRIPT_DLL_API
193 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
194 ESCRIPT_DLL_API
195 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
196
197 /**
198 \brief
199 Returns locations in the domain. The function space is chosen appropriately.
200 */
201 ESCRIPT_DLL_API
202 virtual escript::Data getX() const;
203
204 /**
205 \brief
206 Return boundary normals. The function space is chosen appropriately.
207 */
208 ESCRIPT_DLL_API
209 virtual escript::Data getNormal() const;
210
211 /**
212 \brief
213 Returns the local size of samples. The function space is chosen appropriately.
214 */
215 ESCRIPT_DLL_API
216 virtual escript::Data getSize() const;
217
218 /**
219 \brief
220 Copies the location of data points on the domain into out.
221 The actual function space to be considered
222 is defined by out. out has to be defined on this.
223
224 This has to be implemented by the actual Domain adapter.
225 */
226 ESCRIPT_DLL_API
227 virtual void setToX(escript::Data& out) const;
228
229 /**
230 \brief
231 Copies the surface normals at data points into out.
232 The actual function space to be considered
233 is defined by out. out has to be defined on this.
234
235 This has to be implemented by the actual Domain adapter.
236 */
237 ESCRIPT_DLL_API
238 virtual void setToNormal(escript::Data& out) const;
239
240 /**
241 \brief
242 Copies the size of samples into out. The actual
243 function space to be considered
244 is defined by out. out has to be defined on this.
245
246 This has to be implemented by the actual Domain adapter.
247 */
248 ESCRIPT_DLL_API
249 virtual void setToSize(escript::Data& out) const;
250
251 /**
252 \brief
253 Copies the gradient of arg into grad. The actual function space to be considered
254 for the gradient is defined by grad. arg and grad have to be defined on this.
255
256 This has to be implemented by the actual Domain adapter.
257 */
258 ESCRIPT_DLL_API
259 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
260 /**
261 \brief
262 Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
263
264 This has to be implemented by the actual Domain adapter.
265 */
266 ESCRIPT_DLL_API
267 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
268
269 /**
270 \brief
271 Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier
272
273 This has to be implemented by the actual Domain adapter.
274 */
275 ESCRIPT_DLL_API
276 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg) const;
277
278 /**
279 \brief
280 returns the function space representation of the type functionSpaceCode on this domain
281 as a vtkObject.
282
283 This has to be implemented by the actual Domain adapter.
284 */
285 //virtual vtkObject createVtkObject(int functionSpaceCode) const;
286
287 /**
288 \brief assigns new tag newTag to all samples of functionspace with a positive
289 value of mask for any its sample point.
290
291 */
292 ESCRIPT_DLL_API
293 virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
294
295 /**
296 \brief
297 returns true if data on this domain and a function space of type functionSpaceCode has to
298 considered as cell centered data.
299
300 This has to be implemented by the actual Domain adapter.
301 */
302 ESCRIPT_DLL_API
303 virtual bool isCellOriented(int functionSpaceCode) const;
304
305 /**
306 \brief
307 returns status of the domain.
308
309 This has to be implemented by the actual Domain adapter.
310 */
311 ESCRIPT_DLL_API
312 virtual StatusType getStatus() const;
313
314 /**
315 \brief
316 Throw a standard exception. This function is called if any attempt
317 is made to use a base class function.
318 */
319 ESCRIPT_DLL_API
320 void throwStandardException(const std::string& functionName) const;
321
322 protected:
323
324 private:
325
326 // buffer for coordinates used by function spaces
327 BufferMapType m_x_buffer;
328
329 // buffer for normal vectors used by function spaces
330 BufferMapType m_normal_buffer;
331
332 // buffer for normal element size used by function spaces
333 BufferMapType m_size_buffer;
334
335 };
336
337 } // end of namespace
338
339 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26