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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 121 - (show annotations)
Fri May 6 04:26:16 2005 UTC (14 years, 4 months ago) by jgs
Original Path: trunk/esys2/escript/src/Data/AbstractDomain.h
File MIME type: text/plain
File size: 8501 byte(s)
Merge of development branch back to main trunk on 2005-05-06

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 <utility>
21
22 namespace escript {
23
24 //
25 // forward declarations of certain classes which will be used
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 /**
238 \brief
239 Saves data arg to an OpenDX input file.
240 considered as cell centered data.
241
242 This has to be implemented by the actual Domain adapter.
243 */
244 virtual void saveDX(const std::string& filename,const escript::Data& arg) const;
245
246 /**
247 \brief
248 saves data arg to a VTK input file.
249 considered as cell centered data.
250
251 This has to be implemented by the actual Domain adapter.
252 */
253 virtual void saveVTK(const std::string& filename,const escript::Data& arg) const;
254
255 /**
256 \brief
257 returns the function space representation of the type functionSpaceCode on this domain
258 as a vtkObject.
259
260 This has to be implemented by the actual Domain adapter.
261 */
262 //virtual vtkObject createVtkObject(int functionSpaceCode) const;
263
264 /**
265 \brief
266 returns true if data on this domain and a function space of type functionSpaceCode has to
267 considered as cell centered data.
268
269 This has to be implemented by the actual Domain adapter.
270 */
271 virtual bool isCellOriented(int functionSpaceCode) const;
272
273 /**
274 \brief
275 Throw a standard exception. This function is called if any attempt
276 is made to use a base class function.
277 */
278 void throwStandardException(const std::string& functionName) const;
279
280 protected:
281
282 private:
283
284 };
285
286 } // end of namespace
287
288 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26