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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/esys2/escript/src/Data/AbstractDomain.h revision 117 by jgs, Fri Apr 1 05:48:57 2005 UTC trunk/escript/src/AbstractDomain.h revision 797 by gross, Thu Aug 3 02:03:18 2006 UTC
# Line 1  Line 1 
1  // $Id$  // $Id$
2  /*  /*
3   ******************************************************************************   ************************************************************
4   *                                                                            *   *          Copyright 2006 by ACcESS MNRF                   *
5   *       COPYRIGHT  ACcESS 2004 -  All Rights Reserved                        *   *                                                          *
6   *                                                                            *   *              http://www.access.edu.au                    *
7   * This software is the property of ACcESS. No part of this code              *   *       Primary Business: Queensland, Australia            *
8   * may be copied in any form or by any means without the expressed written    *   *  Licensed under the Open Software License version 3.0    *
9   * consent of ACcESS.  Copying, use or modification of this software          *   *     http://www.opensource.org/licenses/osl-3.0.php       *
10   * by any unauthorised person is illegal unless that person has a software    *   *                                                          *
11   * license agreement with ACcESS.                                             *   ************************************************************
12   *                                                                            *  
  ******************************************************************************  
13  */  */
14    
15  #if !defined escript_AbstractDomain_20040609_H  #if !defined escript_AbstractDomain_20040609_H
16  #define escript_AbstractDomain_20040609_H  #define escript_AbstractDomain_20040609_H
17    
18    #include "system_dep.h"
19    
20  #include <string>  #include <string>
21  #include <utility>  #include <map>
22    #include <boost/python/dict.hpp>
23    
24  namespace escript {  namespace escript {
25    // class forward declarations
 //  
 // forward declarations of certain classes which will be used  
26  class Data;  class Data;
 class AbstractSystemMatrix;  
 class FunctionSpace;  
   
27  /**  /**
28     \brief     \brief
29     Base class for all escript domains.     Base class for all escript domains.
# Line 39  class AbstractDomain { Line 36  class AbstractDomain {
36    
37   public:   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       \brief
56       Default constructor for AbstractDomain.       Default constructor for AbstractDomain.
# Line 59  class AbstractDomain { Line 71  class AbstractDomain {
71       Throws:       Throws:
72       Describe any exceptions thrown.       Describe any exceptions thrown.
73    */    */
74      ESCRIPT_DLL_API
75    AbstractDomain();    AbstractDomain();
76    
77    /**    /**
# Line 68  class AbstractDomain { Line 81  class AbstractDomain {
81       Description:       Description:
82       Destructor for AbstractDomain.       Destructor for AbstractDomain.
83    */    */
84      ESCRIPT_DLL_API
85    virtual ~AbstractDomain();    virtual ~AbstractDomain();
86    
87    /**    /**
# Line 75  class AbstractDomain { Line 89  class AbstractDomain {
89       Returns true if the given integer is a valid function space type       Returns true if the given integer is a valid function space type
90       for this domain.       for this domain.
91    */    */
92      ESCRIPT_DLL_API
93    virtual bool isValidFunctionSpaceType(int functionSpaceType) const;    virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
94    
95    /**    /**
96       \brief       \brief
97       Return a description for this domain.       Return a description for this domain.
98    */    */
99      ESCRIPT_DLL_API
100    virtual std::string getDescription() const;    virtual std::string getDescription() const;
101    
102    /**    /**
103       \brief       \brief
104       Return a description for the given function space type code.       Return a description for the given function space type code.
105    */    */
106      ESCRIPT_DLL_API
107    virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;    virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
108    
109    /**    /**
# Line 95  class AbstractDomain { Line 112  class AbstractDomain {
112    
113        This has to be implemented by the actual Domain adapter.        This has to be implemented by the actual Domain adapter.
114    */    */
115      ESCRIPT_DLL_API
116    virtual int getDim() const;    virtual int getDim() const;
117    
118    /**    /**
119       \brief       \brief
120       Return true if given domains are equal.       Return true if given domains are equal.
121    */    */
122    bool operator==(const AbstractDomain& other) const;    ESCRIPT_DLL_API
123    bool operator!=(const AbstractDomain& other) const;    virtual bool operator==(const AbstractDomain& other) const;
124      ESCRIPT_DLL_API
125      virtual bool operator!=(const AbstractDomain& other) const;
126    
127    /**    /**
128       \brief       \brief
# Line 110  class AbstractDomain { Line 130  class AbstractDomain {
130    
131       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
132    */    */
133      ESCRIPT_DLL_API
134    virtual void write(const std::string& filename) const;    virtual void write(const std::string& filename) const;
135    
136    /**    /**
137       \brief       \brief
      Sets the tagList pointer and length of tag list numTags.  
   */  
   virtual void getTagList(int functionSpaceType, int** tagList, int* numTags) const;  
   
   /**  
      \brief  
      Sets the referenceNoList pointer and length of tag list numReferenceNo.  
   */  
   virtual void getReferenceNoList(int functionSpaceType, int** referenceNoList, int* numReferenceNo) const;  
   
   /**  
      \brief  
138       Return the number of data points per sample, and the number of samples as a pair.       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.       This has to be implemented by the actual Domain adapter.
# Line 133  class AbstractDomain { Line 142  class AbstractDomain {
142       \param functionSpaceCode Input - Code for the function space type.       \param functionSpaceCode Input - Code for the function space type.
143       \return pair, first - number of data points per sample, second - number of samples       \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;    virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
147    
148    /**    /**
# Line 141  class AbstractDomain { Line 151  class AbstractDomain {
151       \param functionSpaceType Input - The function space type.       \param functionSpaceType Input - The function space type.
152       \param sampleNo Input - The sample number.       \param sampleNo Input - The sample number.
153    */    */
154      ESCRIPT_DLL_API
155    virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;    virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
156    
157    /**    /**
# Line 149  class AbstractDomain { Line 160  class AbstractDomain {
160       \param functionSpaceType Input - The function space type.       \param functionSpaceType Input - The function space type.
161       \param sampleNo Input - The sample number.       \param sampleNo Input - The sample number.
162    */    */
163      ESCRIPT_DLL_API
164    virtual int getReferenceNoFromSampleNo(int functionSpaceType, int sampleNo) const;    virtual int getReferenceNoFromSampleNo(int functionSpaceType, int sampleNo) const;
165    
166    /**    /**
# Line 157  class AbstractDomain { Line 169  class AbstractDomain {
169    
170       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
171    */    */
172      ESCRIPT_DLL_API
173    virtual void setNewX(const escript::Data& arg);    virtual void setNewX(const escript::Data& arg);
174    
175    /**    /**
# Line 165  class AbstractDomain { Line 178  class AbstractDomain {
178    
179       This has to be implemented by the actual Domain adapter.       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;    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;    virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
185    
186    /**    /**
# Line 174  class AbstractDomain { Line 189  class AbstractDomain {
189    
190       This has to be implemented by the actual Domain adapter.       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;    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;    virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
196    
197    /**    /**
198       \brief       \brief
199       Returns locations in the domain. The function space is chosen appropriately.       Returns locations in the domain. The function space is chosen appropriately.
200    */    */
201      ESCRIPT_DLL_API
202    virtual escript::Data getX() const;    virtual escript::Data getX() const;
203    
204    /**    /**
205       \brief       \brief
206       Return boundary normals. The function space is chosen appropriately.       Return boundary normals. The function space is chosen appropriately.
207    */    */
208      ESCRIPT_DLL_API
209    virtual escript::Data getNormal() const;    virtual escript::Data getNormal() const;
210    
211    /**    /**
212       \brief       \brief
213       Returns the local size of samples. The function space is chosen appropriately.       Returns the local size of samples. The function space is chosen appropriately.
214    */    */
215      ESCRIPT_DLL_API
216    virtual escript::Data getSize() const;    virtual escript::Data getSize() const;
217        
218    /**    /**
# Line 203  class AbstractDomain { Line 223  class AbstractDomain {
223    
224       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
225    */    */
226      ESCRIPT_DLL_API
227    virtual void setToX(escript::Data& out) const;    virtual void setToX(escript::Data& out) const;
228    
229    /**    /**
# Line 213  class AbstractDomain { Line 234  class AbstractDomain {
234    
235       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
236    */    */
237      ESCRIPT_DLL_API
238    virtual void setToNormal(escript::Data& out) const;    virtual void setToNormal(escript::Data& out) const;
239    
240    /**    /**
# Line 223  class AbstractDomain { Line 245  class AbstractDomain {
245    
246       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
247    */    */
248      ESCRIPT_DLL_API
249    virtual void setToSize(escript::Data& out) const;    virtual void setToSize(escript::Data& out) const;
250    
251    /**    /**
# Line 232  class AbstractDomain { Line 255  class AbstractDomain {
255    
256       This has to be implemented by the actual Domain adapter.       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;    virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
   
260    /**    /**
261       \brief       \brief
262       Saves data arg to an OpenDX input file.       Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
      considered as cell centered data.  
263    
264       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
265    */    */
266    virtual void saveDX(const std::string& filename,const escript::Data& arg) const;    ESCRIPT_DLL_API
267      virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
268    
269    /**    /**
270       \brief       \brief
271       saves data arg to a VTK input file.       Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier
      considered as cell centered data.  
272    
273       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
274    */    */
275    virtual void saveVTK(const std::string& filename,const escript::Data& arg) const;    ESCRIPT_DLL_API
276      virtual void saveVTK(const std::string& filename,const boost::python::dict& arg) const;
277    
278    /**    /**
279       \brief       \brief
# Line 262  class AbstractDomain { Line 285  class AbstractDomain {
285    //virtual vtkObject createVtkObject(int functionSpaceCode) const;    //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       \brief
297       returns true if data on this domain and a function space of type functionSpaceCode has to       returns true if data on this domain and a function space of type functionSpaceCode has to
298       considered as cell centered data.       considered as cell centered data.
299    
300       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
301    */    */
302      ESCRIPT_DLL_API
303    virtual bool isCellOriented(int functionSpaceCode) const;    virtual bool isCellOriented(int functionSpaceCode) const;
304    
305    /**    /**
306       \brief       \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       Throw a standard exception. This function is called if any attempt
317       is made to use a base class function.       is made to use a base class function.
318    */    */
319      ESCRIPT_DLL_API
320    void throwStandardException(const std::string& functionName) const;    void throwStandardException(const std::string& functionName) const;
321    
322   protected:   protected:
323    
324   private:   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  } // end of namespace

Legend:
Removed from v.117  
changed lines
  Added in v.797

  ViewVC Help
Powered by ViewVC 1.1.26