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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 964 - (hide annotations)
Tue Feb 13 05:10:26 2007 UTC (12 years, 8 months ago) by gross
File MIME type: text/plain
File size: 9322 byte(s)
The set/getRefVal functions of Data objects have been removed (mainly to avoid later problems with MPI).
Moreover, a faster access to the reference id of samples has been introduced. I don't think that anybody will
profit form this at this stage but it will allow a faster dump of data objects.


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

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26