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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 480 - (show annotations)
Wed Feb 1 05:15:12 2006 UTC (13 years, 10 months ago) by jgs
File MIME type: text/plain
File size: 8529 byte(s)
rationalise #includes and forward declarations

1 // $Id$
2 /*
3 ******************************************************************************
4 * *
5 * COPYRIGHT ACcESS 2004 - All Rights Reserved *
6 * *
7 * This software is the property of ACcESS. No part of this code *
8 * may be copied in any form or by any means without the expressed written *
9 * consent of ACcESS. Copying, use or modification of this software *
10 * by any unauthorised person is illegal unless that person has a software *
11 * license agreement with ACcESS. *
12 * *
13 ******************************************************************************
14 */
15
16 #if !defined escript_AbstractDomain_20040609_H
17 #define escript_AbstractDomain_20040609_H
18
19 #include <string>
20 #include <boost/python/dict.hpp>
21
22 namespace escript {
23
24 //
25 // forward declarations
26 class Data;
27 //class AbstractSystemMatrix;
28 //class FunctionSpace;
29
30 /**
31 \brief
32 Base class for all escript domains.
33
34 Description:
35 Base class for all escript domains.
36 */
37
38 class AbstractDomain {
39
40 public:
41
42 /**
43 \brief
44 Default constructor for AbstractDomain.
45
46 Description:
47 Default constructor for AbstractDomain. As the name suggests
48 this is intended to be an abstract base class but by making it
49 constructable we avoid a boost.python wrapper class. A call to
50 almost any of the base class functions will throw an exception
51 as they are not intended to be used directly, but are overridden
52 by the underlying solver package which escript is linked to.
53
54 By default, this class is overridden by the class NullDomain.
55
56 Preconditions:
57 Describe any preconditions.
58
59 Throws:
60 Describe any exceptions thrown.
61 */
62 AbstractDomain();
63
64 /**
65 \brief
66 Destructor for AbstractDomain.
67
68 Description:
69 Destructor for AbstractDomain.
70 */
71 virtual ~AbstractDomain();
72
73 /**
74 \brief
75 Returns true if the given integer is a valid function space type
76 for this domain.
77 */
78 virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
79
80 /**
81 \brief
82 Return a description for this domain.
83 */
84 virtual std::string getDescription() const;
85
86 /**
87 \brief
88 Return a description for the given function space type code.
89 */
90 virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
91
92 /**
93 \brief
94 Returns the spatial dimension of the domain.
95
96 This has to be implemented by the actual Domain adapter.
97 */
98 virtual int getDim() const;
99
100 /**
101 \brief
102 Return true if given domains are equal.
103 */
104 virtual bool operator==(const AbstractDomain& other) const;
105 virtual bool operator!=(const AbstractDomain& other) const;
106
107 /**
108 \brief
109 Writes the domain to an external file filename.
110
111 This has to be implemented by the actual Domain adapter.
112 */
113 virtual void write(const std::string& filename) const;
114
115 /**
116 \brief
117 Sets the tagList pointer and length of tag list numTags.
118 */
119 virtual void getTagList(int functionSpaceType, int** tagList, int* numTags) const;
120
121 /**
122 \brief
123 Sets the referenceNoList pointer and length of tag list numReferenceNo.
124 */
125 virtual void getReferenceNoList(int functionSpaceType, int** referenceNoList, int* numReferenceNo) const;
126
127 /**
128 \brief
129 Return the number of data points per sample, and the number of samples as a pair.
130
131 This has to be implemented by the actual Domain adapter.
132
133 \param functionSpaceCode Input - Code for the function space type.
134 \return pair, first - number of data points per sample, second - number of samples
135 */
136 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
137
138 /**
139 \brief
140 Return the tag key for the given sample number.
141 \param functionSpaceType Input - The function space type.
142 \param sampleNo Input - The sample number.
143 */
144 virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
145
146 /**
147 \brief
148 Return the reference number of the given sample number.
149 \param functionSpaceType Input - The function space type.
150 \param sampleNo Input - The sample number.
151 */
152 virtual int getReferenceNoFromSampleNo(int functionSpaceType, int sampleNo) const;
153
154 /**
155 \brief
156 Assigns new location to the domain.
157
158 This has to be implemented by the actual Domain adapter.
159 */
160 virtual void setNewX(const escript::Data& arg);
161
162 /**
163 \brief
164 Interpolates data given on source onto target where source and target have to be given on the same domain.
165
166 This has to be implemented by the actual Domain adapter.
167 */
168 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
169 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
170
171 /**
172 \brief
173 Interpolates data given on source onto target where source and target are given on different domains.
174
175 This has to be implemented by the actual Domain adapter.
176 */
177 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
178 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
179
180 /**
181 \brief
182 Returns locations in the domain. The function space is chosen appropriately.
183 */
184 virtual escript::Data getX() const;
185
186 /**
187 \brief
188 Return boundary normals. The function space is chosen appropriately.
189 */
190 virtual escript::Data getNormal() const;
191
192 /**
193 \brief
194 Returns the local size of samples. The function space is chosen appropriately.
195 */
196 virtual escript::Data getSize() const;
197
198 /**
199 \brief
200 Copies the location of data points on the domain into out.
201 The actual function space to be considered
202 is defined by out. out has to be defined on this.
203
204 This has to be implemented by the actual Domain adapter.
205 */
206 virtual void setToX(escript::Data& out) const;
207
208 /**
209 \brief
210 Copies the surface normals at data points into out.
211 The actual function space to be considered
212 is defined by out. out has to be defined on this.
213
214 This has to be implemented by the actual Domain adapter.
215 */
216 virtual void setToNormal(escript::Data& out) const;
217
218 /**
219 \brief
220 Copies the size of samples into out. The actual
221 function space to be considered
222 is defined by out. out has to be defined on this.
223
224 This has to be implemented by the actual Domain adapter.
225 */
226 virtual void setToSize(escript::Data& out) const;
227
228 /**
229 \brief
230 Copies the gradient of arg into grad. The actual function space to be considered
231 for the gradient is defined by grad. arg and grad have to be defined on this.
232
233 This has to be implemented by the actual Domain adapter.
234 */
235 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
236 /**
237 \brief
238 Saves a dictonary of Data objects to an OpenDX input file. The keywords are used as identifier
239
240 This has to be implemented by the actual Domain adapter.
241 */
242 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
243
244 /**
245 \brief
246 Saves a dictonary of Data objects to an VTK XML input file. The keywords are used as identifier
247
248 This has to be implemented by the actual Domain adapter.
249 */
250 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg) const;
251
252 /**
253 \brief
254 returns the function space representation of the type functionSpaceCode on this domain
255 as a vtkObject.
256
257 This has to be implemented by the actual Domain adapter.
258 */
259 //virtual vtkObject createVtkObject(int functionSpaceCode) const;
260
261 /**
262 \brief
263 returns true if data on this domain and a function space of type functionSpaceCode has to
264 considered as cell centered data.
265
266 This has to be implemented by the actual Domain adapter.
267 */
268 virtual bool isCellOriented(int functionSpaceCode) const;
269
270 /**
271 \brief
272 Throw a standard exception. This function is called if any attempt
273 is made to use a base class function.
274 */
275 void throwStandardException(const std::string& functionName) const;
276
277 protected:
278
279 private:
280
281 };
282
283 } // end of namespace
284
285 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26