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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 797 - (hide annotations)
Thu Aug 3 02:03:18 2006 UTC (13 years, 4 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 jgs 102 // $Id$
2 jgs 82 /*
3 elspeth 615 ************************************************************
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 jgs 82 */
14 jgs 115
15     #if !defined escript_AbstractDomain_20040609_H
16 jgs 82 #define escript_AbstractDomain_20040609_H
17 jgs 115
18 woo409 757 #include "system_dep.h"
19    
20 jgs 82 #include <string>
21 gross 797 #include <map>
22 jgs 153 #include <boost/python/dict.hpp>
23 jgs 82
24     namespace escript {
25 gross 797 // class forward declarations
26 jgs 117 class Data;
27 jgs 82 /**
28     \brief
29     Base class for all escript domains.
30    
31     Description:
32     Base class for all escript domains.
33     */
34 jgs 115
35 jgs 82 class AbstractDomain {
36    
37     public:
38    
39 gross 797
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 jgs 82 /**
55     \brief
56 jgs 117 Default constructor for AbstractDomain.
57 jgs 82
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 jgs 117 constructable we avoid a boost.python wrapper class. A call to
62 jgs 82 almost any of the base class functions will throw an exception
63 jgs 115 as they are not intended to be used directly, but are overridden
64 jgs 117 by the underlying solver package which escript is linked to.
65 jgs 82
66 jgs 115 By default, this class is overridden by the class NullDomain.
67    
68 jgs 82 Preconditions:
69 jgs 117 Describe any preconditions.
70 jgs 82
71     Throws:
72 jgs 117 Describe any exceptions thrown.
73 jgs 82 */
74 woo409 757 ESCRIPT_DLL_API
75 jgs 82 AbstractDomain();
76 jgs 115
77 jgs 82 /**
78     \brief
79 jgs 117 Destructor for AbstractDomain.
80 jgs 82
81     Description:
82 jgs 117 Destructor for AbstractDomain.
83 jgs 82 */
84 woo409 757 ESCRIPT_DLL_API
85 jgs 82 virtual ~AbstractDomain();
86 jgs 115
87 jgs 82 /**
88     \brief
89     Returns true if the given integer is a valid function space type
90     for this domain.
91     */
92 woo409 757 ESCRIPT_DLL_API
93 jgs 82 virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
94 jgs 115
95 jgs 82 /**
96     \brief
97 jgs 117 Return a description for this domain.
98 jgs 82 */
99 woo409 757 ESCRIPT_DLL_API
100 jgs 82 virtual std::string getDescription() const;
101 jgs 115
102 jgs 82 /**
103     \brief
104 jgs 117 Return a description for the given function space type code.
105 jgs 82 */
106 woo409 757 ESCRIPT_DLL_API
107 jgs 82 virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
108 jgs 115
109 jgs 82 /**
110     \brief
111 jgs 117 Returns the spatial dimension of the domain.
112 jgs 115
113 jgs 117 This has to be implemented by the actual Domain adapter.
114 jgs 82 */
115 woo409 757 ESCRIPT_DLL_API
116 jgs 82 virtual int getDim() const;
117    
118     /**
119 jgs 117 \brief
120     Return true if given domains are equal.
121 jgs 82 */
122 woo409 757 ESCRIPT_DLL_API
123 jgs 121 virtual bool operator==(const AbstractDomain& other) const;
124 woo409 757 ESCRIPT_DLL_API
125 jgs 121 virtual bool operator!=(const AbstractDomain& other) const;
126 jgs 115
127 jgs 82 /**
128     \brief
129 jgs 117 Writes the domain to an external file filename.
130    
131 jgs 115 This has to be implemented by the actual Domain adapter.
132 jgs 82 */
133 woo409 757 ESCRIPT_DLL_API
134 jgs 82 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 jgs 117
140     This has to be implemented by the actual Domain adapter.
141    
142 jgs 82 \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 woo409 757 ESCRIPT_DLL_API
146 jgs 82 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 woo409 757 ESCRIPT_DLL_API
155 jgs 82 virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
156 jgs 115
157 jgs 82 /**
158     \brief
159 jgs 115 Return the reference number of the given sample number.
160 jgs 110 \param functionSpaceType Input - The function space type.
161     \param sampleNo Input - The sample number.
162     */
163 woo409 757 ESCRIPT_DLL_API
164 jgs 110 virtual int getReferenceNoFromSampleNo(int functionSpaceType, int sampleNo) const;
165 jgs 115
166 jgs 110 /**
167     \brief
168 jgs 117 Assigns new location to the domain.
169    
170     This has to be implemented by the actual Domain adapter.
171 jgs 82 */
172 woo409 757 ESCRIPT_DLL_API
173 jgs 82 virtual void setNewX(const escript::Data& arg);
174    
175     /**
176     \brief
177 jgs 115 Interpolates data given on source onto target where source and target have to be given on the same domain.
178 jgs 117
179     This has to be implemented by the actual Domain adapter.
180 jgs 82 */
181 woo409 757 ESCRIPT_DLL_API
182 jgs 82 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
183 woo409 757 ESCRIPT_DLL_API
184 jgs 82 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
185 jgs 115
186 jgs 82 /**
187     \brief
188 jgs 115 Interpolates data given on source onto target where source and target are given on different domains.
189 jgs 117
190     This has to be implemented by the actual Domain adapter.
191 jgs 82 */
192 woo409 757 ESCRIPT_DLL_API
193 jgs 82 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
194 woo409 757 ESCRIPT_DLL_API
195 jgs 82 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
196    
197     /**
198 jgs 117 \brief
199     Returns locations in the domain. The function space is chosen appropriately.
200 jgs 102 */
201 woo409 757 ESCRIPT_DLL_API
202 jgs 102 virtual escript::Data getX() const;
203 jgs 115
204 jgs 102 /**
205 jgs 117 \brief
206     Return boundary normals. The function space is chosen appropriately.
207 jgs 102 */
208 woo409 757 ESCRIPT_DLL_API
209 jgs 102 virtual escript::Data getNormal() const;
210 jgs 115
211 jgs 102 /**
212 jgs 117 \brief
213     Returns the local size of samples. The function space is chosen appropriately.
214 jgs 102 */
215 woo409 757 ESCRIPT_DLL_API
216 jgs 102 virtual escript::Data getSize() const;
217    
218     /**
219 jgs 82 \brief
220 jgs 115 Copies the location of data points on the domain into out.
221     The actual function space to be considered
222 jgs 82 is defined by out. out has to be defined on this.
223 jgs 117
224     This has to be implemented by the actual Domain adapter.
225 jgs 82 */
226 woo409 757 ESCRIPT_DLL_API
227 jgs 82 virtual void setToX(escript::Data& out) const;
228 jgs 115
229 jgs 82 /**
230     \brief
231 jgs 115 Copies the surface normals at data points into out.
232     The actual function space to be considered
233 jgs 82 is defined by out. out has to be defined on this.
234 jgs 117
235     This has to be implemented by the actual Domain adapter.
236 jgs 82 */
237 woo409 757 ESCRIPT_DLL_API
238 jgs 82 virtual void setToNormal(escript::Data& out) const;
239 jgs 115
240 jgs 82 /**
241     \brief
242 jgs 115 Copies the size of samples into out. The actual
243     function space to be considered
244 jgs 82 is defined by out. out has to be defined on this.
245 jgs 117
246     This has to be implemented by the actual Domain adapter.
247 jgs 82 */
248 woo409 757 ESCRIPT_DLL_API
249 jgs 82 virtual void setToSize(escript::Data& out) const;
250    
251     /**
252     \brief
253 jgs 115 Copies the gradient of arg into grad. The actual function space to be considered
254 jgs 82 for the gradient is defined by grad. arg and grad have to be defined on this.
255 jgs 117
256     This has to be implemented by the actual Domain adapter.
257 jgs 82 */
258 woo409 757 ESCRIPT_DLL_API
259 jgs 82 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
260     /**
261     \brief
262 jgs 153 Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
263 jgs 117
264     This has to be implemented by the actual Domain adapter.
265 jgs 82 */
266 woo409 757 ESCRIPT_DLL_API
267 jgs 153 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
268 jgs 110
269 jgs 82 /**
270     \brief
271 jgs 153 Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier
272 jgs 117
273     This has to be implemented by the actual Domain adapter.
274 jgs 110 */
275 woo409 757 ESCRIPT_DLL_API
276 jgs 153 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg) const;
277 jgs 110
278     /**
279     \brief
280 jgs 82 returns the function space representation of the type functionSpaceCode on this domain
281     as a vtkObject.
282 jgs 117
283     This has to be implemented by the actual Domain adapter.
284 jgs 82 */
285     //virtual vtkObject createVtkObject(int functionSpaceCode) const;
286    
287 jgs 115 /**
288 gross 767 \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 jgs 82 \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 jgs 117
300     This has to be implemented by the actual Domain adapter.
301 jgs 82 */
302 woo409 757 ESCRIPT_DLL_API
303 jgs 82 virtual bool isCellOriented(int functionSpaceCode) const;
304    
305 jgs 117 /**
306     \brief
307 gross 797 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 jgs 117 Throw a standard exception. This function is called if any attempt
317     is made to use a base class function.
318     */
319 woo409 757 ESCRIPT_DLL_API
320 jgs 117 void throwStandardException(const std::string& functionName) const;
321    
322 jgs 82 protected:
323    
324     private:
325 jgs 115
326 gross 797 // 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 jgs 82 };
336    
337     } // end of namespace
338 jgs 117
339 jgs 82 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26