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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2640 - (hide annotations)
Mon Aug 31 06:22:10 2009 UTC (13 years ago) by jfenwick
File MIME type: text/plain
File size: 12334 byte(s)
Adding getMPIComm

1 elspeth 615
2 ksteube 1312 /*******************************************************
3 ksteube 1811 *
4 jfenwick 2548 * Copyright (c) 2003-2009 by University of Queensland
5 ksteube 1811 * Earth Systems Science Computational Center (ESSCC)
6     * http://www.uq.edu.au/esscc
7     *
8     * Primary Business: Queensland, Australia
9     * Licensed under the Open Software License version 3.0
10     * http://www.opensource.org/licenses/osl-3.0.php
11     *
12     *******************************************************/
13 ksteube 1312
14 ksteube 1811
15 jgs 115 #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 jfenwick 2635 #include <vector>
21 jgs 82 #include <string>
22 gross 797 #include <map>
23 jgs 153 #include <boost/python/dict.hpp>
24 gross 1716 #include <boost/python/list.hpp>
25 ksteube 1800 #include "paso/Paso_MPI.h"
26 jgs 82
27 jfenwick 1872
28     #include "Pointers.h"
29    
30 jgs 82 namespace escript {
31 gross 797 // class forward declarations
32 jgs 117 class Data;
33 jgs 82 /**
34     \brief
35     Base class for all escript domains.
36    
37     Description:
38     Base class for all escript domains.
39     */
40 jgs 115
41 jfenwick 1872 class AbstractDomain;
42 jgs 82
43 jfenwick 1872 typedef POINTER_WRAPPER_CLASS(AbstractDomain) Domain_ptr;
44     typedef POINTER_WRAPPER_CLASS(const AbstractDomain) const_Domain_ptr;
45    
46     class AbstractDomain : public REFCOUNT_BASE_CLASS(AbstractDomain){
47    
48 jgs 82 public:
49    
50 jfenwick 1872 /**
51     \brief Returns smart pointer which is managing this object.
52     If one does not exist yet it creates one.
53 ksteube 1312
54 jfenwick 1872 Note: This is _not_ equivalent to weak_ptr::lock.
55     */
56     ESCRIPT_DLL_API
57     Domain_ptr getPtr();
58     ESCRIPT_DLL_API
59     const_Domain_ptr getPtr() const;
60    
61 gross 797 // structure holding values for X, size and normal
62     typedef int StatusType;
63 ksteube 1312 struct ValueBuffer
64     {
65     StatusType m_status;
66     boost::shared_ptr<Data> m_data;
67     };
68     typedef struct ValueBuffer ValueBuffer;
69 gross 797
70     //
71     // map from function space type code to value buffer
72 ksteube 1312 typedef std::map<int, ValueBuffer> BufferMapType;
73 gross 797
74    
75 jgs 82 /**
76     \brief
77 jgs 117 Default constructor for AbstractDomain.
78 jgs 82
79     Description:
80     Default constructor for AbstractDomain. As the name suggests
81     this is intended to be an abstract base class but by making it
82 jgs 117 constructable we avoid a boost.python wrapper class. A call to
83 jgs 82 almost any of the base class functions will throw an exception
84 jgs 115 as they are not intended to be used directly, but are overridden
85 jgs 117 by the underlying solver package which escript is linked to.
86 jgs 82
87 jgs 115 By default, this class is overridden by the class NullDomain.
88    
89 jgs 82 Preconditions:
90 jgs 117 Describe any preconditions.
91 jgs 82
92     Throws:
93 jgs 117 Describe any exceptions thrown.
94 jgs 82 */
95 woo409 757 ESCRIPT_DLL_API
96 jgs 82 AbstractDomain();
97 jgs 115
98 jgs 82 /**
99     \brief
100 jgs 117 Destructor for AbstractDomain.
101 jgs 82
102     Description:
103 jgs 117 Destructor for AbstractDomain.
104 jgs 82 */
105 woo409 757 ESCRIPT_DLL_API
106 jgs 82 virtual ~AbstractDomain();
107 jgs 115
108 jgs 82 /**
109     \brief
110 ksteube 1312 return the number of processors used for this domain
111     */
112     ESCRIPT_DLL_API
113     virtual int getMPISize() const;
114     /**
115     \brief
116     return the number MPI rank of this processor
117     */
118    
119     ESCRIPT_DLL_API
120     virtual int getMPIRank() const;
121    
122 ksteube 1877 /**
123     \brief
124     If compiled for MPI then execute an MPI_Barrier, else do nothing
125     */
126 ksteube 1312
127 ksteube 1877 ESCRIPT_DLL_API
128     virtual void MPIBarrier() const;
129     /**
130     \brief
131     Return true if on MPI master, else false
132     */
133 ksteube 1312
134 ksteube 1877 ESCRIPT_DLL_API
135     virtual bool onMasterProcessor() const;
136    
137 jfenwick 2640 /**
138     \brief get the communicator for this domain.
139     Returns 0 on non-MPI builds
140     */
141     ESCRIPT_DLL_API
142     #ifdef PASO_MPI
143     MPI_Comm
144     #else
145     unsigned int
146     #endif
147     getMPIComm() const;
148 ksteube 1877
149 ksteube 1312 /**
150     \brief
151 jgs 82 Returns true if the given integer is a valid function space type
152     for this domain.
153     */
154 woo409 757 ESCRIPT_DLL_API
155 jgs 82 virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
156 jgs 115
157 jgs 82 /**
158     \brief
159 jgs 117 Return a description for this domain.
160 jgs 82 */
161 woo409 757 ESCRIPT_DLL_API
162 jgs 82 virtual std::string getDescription() const;
163 jgs 115
164 jgs 82 /**
165     \brief
166 jgs 117 Return a description for the given function space type code.
167 jgs 82 */
168 woo409 757 ESCRIPT_DLL_API
169 jgs 82 virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
170 jgs 115
171 jgs 82 /**
172     \brief
173 jgs 117 Returns the spatial dimension of the domain.
174 jgs 115
175 jgs 117 This has to be implemented by the actual Domain adapter.
176 jgs 82 */
177 woo409 757 ESCRIPT_DLL_API
178 jgs 82 virtual int getDim() const;
179    
180     /**
181 jgs 117 \brief
182     Return true if given domains are equal.
183 jgs 82 */
184 woo409 757 ESCRIPT_DLL_API
185 jgs 121 virtual bool operator==(const AbstractDomain& other) const;
186 woo409 757 ESCRIPT_DLL_API
187 jgs 121 virtual bool operator!=(const AbstractDomain& other) const;
188 jgs 115
189 jgs 82 /**
190     \brief
191 jgs 117 Writes the domain to an external file filename.
192    
193 jgs 115 This has to be implemented by the actual Domain adapter.
194 jgs 82 */
195 woo409 757 ESCRIPT_DLL_API
196 jgs 82 virtual void write(const std::string& filename) const;
197    
198     /**
199     \brief
200 ksteube 1312 dumps the domain to an external file filename.
201    
202     This has to be implemented by the actual Domain adapter.
203     */
204     ESCRIPT_DLL_API
205     virtual void dump(const std::string& filename) const;
206    
207     /**
208     \brief
209 jgs 82 Return the number of data points per sample, and the number of samples as a pair.
210 jgs 117
211     This has to be implemented by the actual Domain adapter.
212    
213 jgs 82 \param functionSpaceCode Input - Code for the function space type.
214     \return pair, first - number of data points per sample, second - number of samples
215     */
216 woo409 757 ESCRIPT_DLL_API
217 jgs 82 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
218    
219     /**
220     \brief
221     Return the tag key for the given sample number.
222     \param functionSpaceType Input - The function space type.
223     \param sampleNo Input - The sample number.
224     */
225 woo409 757 ESCRIPT_DLL_API
226 jgs 82 virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
227 jgs 115
228 jgs 82 /**
229     \brief
230 gross 1044 sets a map from a clear tag name to a tag key
231     \param name Input - tag name.
232     \param tag Input - tag key.
233     */
234     ESCRIPT_DLL_API
235     virtual void setTagMap(const std::string& name, int tag);
236    
237     /**
238     \brief
239     Return the tag key for tag name.
240     \param name Input - tag name
241     */
242     ESCRIPT_DLL_API
243     virtual int getTag(const std::string& name) const;
244    
245     /**
246     \brief
247     Returns True if name is a defined tag name
248     \param name Input - tag name
249     */
250     ESCRIPT_DLL_API
251     virtual bool isValidTagName(const std::string& name) const;
252    
253     /**
254     \brief
255     Returns all tag names in a single string sperated by commas
256     */
257     ESCRIPT_DLL_API
258     virtual std::string showTagNames() const;
259    
260     /**
261     \brief
262 gross 964 Return a borrowed pointer to the sample reference number id list
263 jgs 110 \param functionSpaceType Input - The function space type.
264     */
265 woo409 757 ESCRIPT_DLL_API
266 jfenwick 2487 virtual const int* borrowSampleReferenceIDs(int functionSpaceType) const;
267 jgs 115
268 jgs 110 /**
269     \brief
270 jgs 117 Assigns new location to the domain.
271    
272     This has to be implemented by the actual Domain adapter.
273 jgs 82 */
274 woo409 757 ESCRIPT_DLL_API
275 jgs 82 virtual void setNewX(const escript::Data& arg);
276    
277     /**
278     \brief
279 jgs 115 Interpolates data given on source onto target where source and target have to be given on the same domain.
280 jgs 117
281     This has to be implemented by the actual Domain adapter.
282 jgs 82 */
283 woo409 757 ESCRIPT_DLL_API
284 jgs 82 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
285 woo409 757 ESCRIPT_DLL_API
286 jgs 82 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
287 jgs 115
288 jgs 82 /**
289 jfenwick 2635 \brief given a vector of FunctionSpace type codes, pass back a code which then can all be interpolated to.
290     \note This method must be called on the domain which the FunctionSpaces point to
291     \return true is result is valid, false if not
292     */
293     ESCRIPT_DLL_API
294     virtual
295     bool
296     commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
297    
298     /**
299 jgs 82 \brief
300 jgs 115 Interpolates data given on source onto target where source and target are given on different domains.
301 jgs 117
302     This has to be implemented by the actual Domain adapter.
303 jgs 82 */
304 woo409 757 ESCRIPT_DLL_API
305 jgs 82 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
306 woo409 757 ESCRIPT_DLL_API
307 jgs 82 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
308    
309     /**
310 jgs 117 \brief
311     Returns locations in the domain. The function space is chosen appropriately.
312 jgs 102 */
313 woo409 757 ESCRIPT_DLL_API
314 jgs 102 virtual escript::Data getX() const;
315 jgs 115
316 jgs 102 /**
317 jgs 117 \brief
318     Return boundary normals. The function space is chosen appropriately.
319 jgs 102 */
320 woo409 757 ESCRIPT_DLL_API
321 jgs 102 virtual escript::Data getNormal() const;
322 jgs 115
323 jgs 102 /**
324 jgs 117 \brief
325     Returns the local size of samples. The function space is chosen appropriately.
326 jgs 102 */
327 woo409 757 ESCRIPT_DLL_API
328 jgs 102 virtual escript::Data getSize() const;
329    
330     /**
331 jgs 82 \brief
332 jgs 115 Copies the location of data points on the domain into out.
333     The actual function space to be considered
334 jgs 82 is defined by out. out has to be defined on this.
335 jgs 117
336     This has to be implemented by the actual Domain adapter.
337 jgs 82 */
338 woo409 757 ESCRIPT_DLL_API
339 jgs 82 virtual void setToX(escript::Data& out) const;
340 jgs 115
341 jgs 82 /**
342     \brief
343 jgs 115 Copies the surface normals at data points into out.
344     The actual function space to be considered
345 jgs 82 is defined by out. out has to be defined on this.
346 jgs 117
347     This has to be implemented by the actual Domain adapter.
348 jgs 82 */
349 woo409 757 ESCRIPT_DLL_API
350 jgs 82 virtual void setToNormal(escript::Data& out) const;
351 jgs 115
352 jgs 82 /**
353     \brief
354 jgs 115 Copies the size of samples into out. The actual
355     function space to be considered
356 jgs 82 is defined by out. out has to be defined on this.
357 jgs 117
358     This has to be implemented by the actual Domain adapter.
359 jgs 82 */
360 woo409 757 ESCRIPT_DLL_API
361 jgs 82 virtual void setToSize(escript::Data& out) const;
362    
363     /**
364     \brief
365 jgs 115 Copies the gradient of arg into grad. The actual function space to be considered
366 jgs 82 for the gradient is defined by grad. arg and grad have to be defined on this.
367 jgs 117
368     This has to be implemented by the actual Domain adapter.
369 jgs 82 */
370 woo409 757 ESCRIPT_DLL_API
371 jgs 82 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
372     /**
373     \brief
374 jgs 153 Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
375 jgs 117
376     This has to be implemented by the actual Domain adapter.
377 jgs 82 */
378 woo409 757 ESCRIPT_DLL_API
379 jgs 153 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
380 jgs 110
381 jgs 82 /**
382     \brief
383 gross 2421 Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier.
384     metadata is string representing some meta data to be added. metadata_schema assign schema to namespaces used in the meta data.
385 jgs 117
386     This has to be implemented by the actual Domain adapter.
387 jgs 110 */
388 woo409 757 ESCRIPT_DLL_API
389 gross 2421 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg, const std::string& metadata, const std::string& metadata_schema) const;
390 jgs 110
391     /**
392 gross 767 \brief assigns new tag newTag to all samples of functionspace with a positive
393     value of mask for any its sample point.
394    
395     */
396     ESCRIPT_DLL_API
397     virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
398    
399     /**
400 jgs 82 \brief
401     returns true if data on this domain and a function space of type functionSpaceCode has to
402     considered as cell centered data.
403 jgs 117
404     This has to be implemented by the actual Domain adapter.
405 jgs 82 */
406 woo409 757 ESCRIPT_DLL_API
407 jgs 82 virtual bool isCellOriented(int functionSpaceCode) const;
408    
409 jgs 117 /**
410     \brief
411 gross 2533 Returns a status indicator of the domain. The status identifier should be unique over
412     the live time if the object but may be updated if changes to the domain happen, e.g.
413     modifications to its geometry.
414 gross 797
415     This has to be implemented by the actual Domain adapter.
416     */
417     ESCRIPT_DLL_API
418     virtual StatusType getStatus() const;
419    
420     /**
421     \brief
422 jgs 117 Throw a standard exception. This function is called if any attempt
423     is made to use a base class function.
424     */
425 woo409 757 ESCRIPT_DLL_API
426 jgs 117 void throwStandardException(const std::string& functionName) const;
427    
428 gross 1716 /**
429     \brief
430     return the number of tags in use and a pointer to an array with the number of tags in use
431     */
432     ESCRIPT_DLL_API
433     virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
434    
435     ESCRIPT_DLL_API
436 jfenwick 2487 virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
437 gross 1716
438 jfenwick 1802 /**
439     \brief Checks if this domain allows tags for the specified functionSpaceCode.
440     */
441     ESCRIPT_DLL_API
442     virtual bool canTag(int functionspacecode) const;
443 gross 1716
444 jgs 82 protected:
445    
446     private:
447 jgs 115
448 gross 797 // buffer for coordinates used by function spaces
449 ksteube 1312 BufferMapType m_x_buffer;
450 gross 797
451     // buffer for normal vectors used by function spaces
452 ksteube 1312 BufferMapType m_normal_buffer;
453 gross 797
454     // buffer for normal element size used by function spaces
455 ksteube 1312 BufferMapType m_size_buffer;
456 gross 797
457 jgs 82 };
458    
459     } // end of namespace
460 jgs 117
461 jgs 82 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26