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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2641 - (hide annotations)
Mon Aug 31 07:41:49 2009 UTC (10 years, 2 months ago) by jfenwick
File MIME type: text/plain
File size: 12344 byte(s)
Fixed some of my stupids related to MPI compile errors.

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 jfenwick 2641 virtual
143 jfenwick 2640 #ifdef PASO_MPI
144     MPI_Comm
145     #else
146     unsigned int
147     #endif
148     getMPIComm() const;
149 ksteube 1877
150 ksteube 1312 /**
151     \brief
152 jgs 82 Returns true if the given integer is a valid function space type
153     for this domain.
154     */
155 woo409 757 ESCRIPT_DLL_API
156 jgs 82 virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
157 jgs 115
158 jgs 82 /**
159     \brief
160 jgs 117 Return a description for this domain.
161 jgs 82 */
162 woo409 757 ESCRIPT_DLL_API
163 jgs 82 virtual std::string getDescription() const;
164 jgs 115
165 jgs 82 /**
166     \brief
167 jgs 117 Return a description for the given function space type code.
168 jgs 82 */
169 woo409 757 ESCRIPT_DLL_API
170 jgs 82 virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
171 jgs 115
172 jgs 82 /**
173     \brief
174 jgs 117 Returns the spatial dimension of the domain.
175 jgs 115
176 jgs 117 This has to be implemented by the actual Domain adapter.
177 jgs 82 */
178 woo409 757 ESCRIPT_DLL_API
179 jgs 82 virtual int getDim() const;
180    
181     /**
182 jgs 117 \brief
183     Return true if given domains are equal.
184 jgs 82 */
185 woo409 757 ESCRIPT_DLL_API
186 jgs 121 virtual bool operator==(const AbstractDomain& other) const;
187 woo409 757 ESCRIPT_DLL_API
188 jgs 121 virtual bool operator!=(const AbstractDomain& other) const;
189 jgs 115
190 jgs 82 /**
191     \brief
192 jgs 117 Writes the domain to an external file filename.
193    
194 jgs 115 This has to be implemented by the actual Domain adapter.
195 jgs 82 */
196 woo409 757 ESCRIPT_DLL_API
197 jgs 82 virtual void write(const std::string& filename) const;
198    
199     /**
200     \brief
201 ksteube 1312 dumps the domain to an external file filename.
202    
203     This has to be implemented by the actual Domain adapter.
204     */
205     ESCRIPT_DLL_API
206     virtual void dump(const std::string& filename) const;
207    
208     /**
209     \brief
210 jgs 82 Return the number of data points per sample, and the number of samples as a pair.
211 jgs 117
212     This has to be implemented by the actual Domain adapter.
213    
214 jgs 82 \param functionSpaceCode Input - Code for the function space type.
215     \return pair, first - number of data points per sample, second - number of samples
216     */
217 woo409 757 ESCRIPT_DLL_API
218 jgs 82 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
219    
220     /**
221     \brief
222     Return the tag key for the given sample number.
223     \param functionSpaceType Input - The function space type.
224     \param sampleNo Input - The sample number.
225     */
226 woo409 757 ESCRIPT_DLL_API
227 jgs 82 virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
228 jgs 115
229 jgs 82 /**
230     \brief
231 gross 1044 sets a map from a clear tag name to a tag key
232     \param name Input - tag name.
233     \param tag Input - tag key.
234     */
235     ESCRIPT_DLL_API
236     virtual void setTagMap(const std::string& name, int tag);
237    
238     /**
239     \brief
240     Return the tag key for tag name.
241     \param name Input - tag name
242     */
243     ESCRIPT_DLL_API
244     virtual int getTag(const std::string& name) const;
245    
246     /**
247     \brief
248     Returns True if name is a defined tag name
249     \param name Input - tag name
250     */
251     ESCRIPT_DLL_API
252     virtual bool isValidTagName(const std::string& name) const;
253    
254     /**
255     \brief
256     Returns all tag names in a single string sperated by commas
257     */
258     ESCRIPT_DLL_API
259     virtual std::string showTagNames() const;
260    
261     /**
262     \brief
263 gross 964 Return a borrowed pointer to the sample reference number id list
264 jgs 110 \param functionSpaceType Input - The function space type.
265     */
266 woo409 757 ESCRIPT_DLL_API
267 jfenwick 2487 virtual const int* borrowSampleReferenceIDs(int functionSpaceType) const;
268 jgs 115
269 jgs 110 /**
270     \brief
271 jgs 117 Assigns new location to the domain.
272    
273     This has to be implemented by the actual Domain adapter.
274 jgs 82 */
275 woo409 757 ESCRIPT_DLL_API
276 jgs 82 virtual void setNewX(const escript::Data& arg);
277    
278     /**
279     \brief
280 jgs 115 Interpolates data given on source onto target where source and target have to be given on the same domain.
281 jgs 117
282     This has to be implemented by the actual Domain adapter.
283 jgs 82 */
284 woo409 757 ESCRIPT_DLL_API
285 jgs 82 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
286 woo409 757 ESCRIPT_DLL_API
287 jgs 82 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
288 jgs 115
289 jgs 82 /**
290 jfenwick 2635 \brief given a vector of FunctionSpace type codes, pass back a code which then can all be interpolated to.
291     \note This method must be called on the domain which the FunctionSpaces point to
292     \return true is result is valid, false if not
293     */
294     ESCRIPT_DLL_API
295     virtual
296     bool
297     commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
298    
299     /**
300 jgs 82 \brief
301 jgs 115 Interpolates data given on source onto target where source and target are given on different domains.
302 jgs 117
303     This has to be implemented by the actual Domain adapter.
304 jgs 82 */
305 woo409 757 ESCRIPT_DLL_API
306 jgs 82 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
307 woo409 757 ESCRIPT_DLL_API
308 jgs 82 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
309    
310     /**
311 jgs 117 \brief
312     Returns locations in the domain. The function space is chosen appropriately.
313 jgs 102 */
314 woo409 757 ESCRIPT_DLL_API
315 jgs 102 virtual escript::Data getX() const;
316 jgs 115
317 jgs 102 /**
318 jgs 117 \brief
319     Return boundary normals. The function space is chosen appropriately.
320 jgs 102 */
321 woo409 757 ESCRIPT_DLL_API
322 jgs 102 virtual escript::Data getNormal() const;
323 jgs 115
324 jgs 102 /**
325 jgs 117 \brief
326     Returns the local size of samples. The function space is chosen appropriately.
327 jgs 102 */
328 woo409 757 ESCRIPT_DLL_API
329 jgs 102 virtual escript::Data getSize() const;
330    
331     /**
332 jgs 82 \brief
333 jgs 115 Copies the location of data points on the domain into out.
334     The actual function space to be considered
335 jgs 82 is defined by out. out has to be defined on this.
336 jgs 117
337     This has to be implemented by the actual Domain adapter.
338 jgs 82 */
339 woo409 757 ESCRIPT_DLL_API
340 jgs 82 virtual void setToX(escript::Data& out) const;
341 jgs 115
342 jgs 82 /**
343     \brief
344 jgs 115 Copies the surface normals at data points into out.
345     The actual function space to be considered
346 jgs 82 is defined by out. out has to be defined on this.
347 jgs 117
348     This has to be implemented by the actual Domain adapter.
349 jgs 82 */
350 woo409 757 ESCRIPT_DLL_API
351 jgs 82 virtual void setToNormal(escript::Data& out) const;
352 jgs 115
353 jgs 82 /**
354     \brief
355 jgs 115 Copies the size of samples into out. The actual
356     function space to be considered
357 jgs 82 is defined by out. out has to be defined on this.
358 jgs 117
359     This has to be implemented by the actual Domain adapter.
360 jgs 82 */
361 woo409 757 ESCRIPT_DLL_API
362 jgs 82 virtual void setToSize(escript::Data& out) const;
363    
364     /**
365     \brief
366 jgs 115 Copies the gradient of arg into grad. The actual function space to be considered
367 jgs 82 for the gradient is defined by grad. arg and grad have to be defined on this.
368 jgs 117
369     This has to be implemented by the actual Domain adapter.
370 jgs 82 */
371 woo409 757 ESCRIPT_DLL_API
372 jgs 82 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
373     /**
374     \brief
375 jgs 153 Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
376 jgs 117
377     This has to be implemented by the actual Domain adapter.
378 jgs 82 */
379 woo409 757 ESCRIPT_DLL_API
380 jgs 153 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
381 jgs 110
382 jgs 82 /**
383     \brief
384 gross 2421 Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier.
385     metadata is string representing some meta data to be added. metadata_schema assign schema to namespaces used in the meta data.
386 jgs 117
387     This has to be implemented by the actual Domain adapter.
388 jgs 110 */
389 woo409 757 ESCRIPT_DLL_API
390 gross 2421 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg, const std::string& metadata, const std::string& metadata_schema) const;
391 jgs 110
392     /**
393 gross 767 \brief assigns new tag newTag to all samples of functionspace with a positive
394     value of mask for any its sample point.
395    
396     */
397     ESCRIPT_DLL_API
398     virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
399    
400     /**
401 jgs 82 \brief
402     returns true if data on this domain and a function space of type functionSpaceCode has to
403     considered as cell centered data.
404 jgs 117
405     This has to be implemented by the actual Domain adapter.
406 jgs 82 */
407 woo409 757 ESCRIPT_DLL_API
408 jgs 82 virtual bool isCellOriented(int functionSpaceCode) const;
409    
410 jgs 117 /**
411     \brief
412 gross 2533 Returns a status indicator of the domain. The status identifier should be unique over
413     the live time if the object but may be updated if changes to the domain happen, e.g.
414     modifications to its geometry.
415 gross 797
416     This has to be implemented by the actual Domain adapter.
417     */
418     ESCRIPT_DLL_API
419     virtual StatusType getStatus() const;
420    
421     /**
422     \brief
423 jgs 117 Throw a standard exception. This function is called if any attempt
424     is made to use a base class function.
425     */
426 woo409 757 ESCRIPT_DLL_API
427 jgs 117 void throwStandardException(const std::string& functionName) const;
428    
429 gross 1716 /**
430     \brief
431     return the number of tags in use and a pointer to an array with the number of tags in use
432     */
433     ESCRIPT_DLL_API
434     virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
435    
436     ESCRIPT_DLL_API
437 jfenwick 2487 virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
438 gross 1716
439 jfenwick 1802 /**
440     \brief Checks if this domain allows tags for the specified functionSpaceCode.
441     */
442     ESCRIPT_DLL_API
443     virtual bool canTag(int functionspacecode) const;
444 gross 1716
445 jgs 82 protected:
446    
447     private:
448 jgs 115
449 gross 797 // buffer for coordinates used by function spaces
450 ksteube 1312 BufferMapType m_x_buffer;
451 gross 797
452     // buffer for normal vectors used by function spaces
453 ksteube 1312 BufferMapType m_normal_buffer;
454 gross 797
455     // buffer for normal element size used by function spaces
456 ksteube 1312 BufferMapType m_size_buffer;
457 gross 797
458 jgs 82 };
459    
460     } // end of namespace
461 jgs 117
462 jgs 82 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26