/[escript]/trunk/bruce/src/Bruce/Bruce.h
ViewVC logotype

Contents of /trunk/bruce/src/Bruce/Bruce.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 151 - (show annotations)
Thu Sep 22 01:55:00 2005 UTC (15 years, 2 months ago) by jgs
Original Path: trunk/esys2/bruce/src/Bruce/Bruce.h
File MIME type: text/plain
File size: 5858 byte(s)
Merge of development branch dev-02 back to main trunk on 2005-09-22

1 // $Id$
2 /*
3 ******************************************************************************
4 * *
5 * COPYRIGHT ACcESS 2005 - 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 bruce_Bruce_20050829_H
17 #define bruce_Bruce_20050829_H
18
19 #include "escript/Data/AbstractContinuousDomain.h"
20 #include "escript/Data/FunctionSpaceFactory.h"
21 #include "escript/Data/FunctionSpace.h"
22 #include "escript/Data/Data.h"
23
24 #include <string>
25 #include <vector>
26
27 namespace bruce {
28
29 /**
30 \brief
31 Bruce implements a structured AbstractContinuousDomain.
32
33 Description:
34 Bruce implements a structured AbstractContinuousDomain.
35 */
36
37 class Bruce : public escript::AbstractContinuousDomain {
38
39 public:
40
41 //
42 // Codes for function space types supported
43 static const int ContinuousFunction;
44 static const int Function;
45
46 //
47 // Type of FunctionSpaceNamesMap
48 typedef std::map<int, std::string> FunctionSpaceNamesMapType;
49
50 //
51 // Types for the dimension vectors
52 typedef std::vector<double> DimVec;
53
54 /**
55 \brief
56 Default constructor for Bruce.
57
58 Description:
59 Default constructor for Bruce.
60 Creates a null Bruce object.
61 */
62 Bruce();
63
64 /**
65 \brief
66 Constructor for Bruce.
67
68 Description:
69 Constructor for Bruce.
70
71 The point "origin" specifies the location of the origin
72 of the domain specified by this object. The dimensionality of this
73 point determines the dimensionality of the space the domain occupies.
74
75 The vectors v0,v1,v2 specify the axis in
76 of the domain of this Bruce object. If v2 is an empty vector, this
77 object is a two dimensional domain. If v1 is also an empty vector,
78 this object is a one dimensional domain. If v0 is also an empty
79 vector, this is a point domain.
80
81 The integers n0,n1,n2 specify the dumber of data-points along each
82 axis in the domain.
83 */
84 Bruce(DimVec v0, DimVec v1, DimVec v2,
85 int n0, int n1, int n2,
86 DimVec origin);
87
88 /**
89 \brief
90 Copy constructor.
91 */
92 Bruce(const Bruce& other);
93
94 /**
95 \brief
96 Destructor for Bruce.
97 */
98 ~Bruce();
99
100 /**
101 \brief
102 Return this as an AbstractContinuousDomain.
103 */
104 inline
105 const AbstractContinuousDomain&
106 asAbstractContinuousDomain() const
107 {
108 return *(static_cast<const AbstractContinuousDomain*>(this));
109 }
110
111 /**
112 \brief
113 Return this as an AbstractDomain.
114 */
115 inline
116 const AbstractDomain&
117 asAbstractDomain() const
118 {
119 return *(static_cast<const AbstractDomain*>(this));
120 }
121
122 /**
123 \brief
124 Return a description for this domain.
125 */
126 virtual
127 inline
128 std::string
129 getDescription() const
130 {
131 return "Bruce";
132 }
133
134 /**
135 \brief
136 Returns true if the given integer is a valid function space type
137 for this domain.
138 */
139 virtual
140 bool
141 isValidFunctionSpaceType(int functionSpaceCode) const;
142
143 /**
144 \brief
145 Return a description for the given function space type code.
146 */
147 virtual
148 std::string
149 functionSpaceTypeAsString(int functionSpaceCode) const;
150
151 /**
152 \brief
153 Return a continuous FunctionSpace code.
154 */
155 virtual
156 inline
157 int
158 getContinuousFunctionCode() const
159 {
160 return ContinuousFunction;
161 }
162
163 /**
164 \brief
165 Return a function FunctionSpace code.
166 */
167 virtual
168 inline
169 int
170 getFunctionCode() const
171 {
172 return Function;
173 }
174
175 /**
176 \brief
177 Return the spatial dimension of the mesh.
178 */
179 virtual
180 inline
181 int
182 getDim() const
183 {
184 return m_origin.size();
185 }
186
187 /**
188 \brief
189 Return the number of data points per sample, and the number of samples
190 needed to represent data on parts of the mesh.
191 */
192 virtual
193 std::pair<int,int>
194 getDataShape(int functionSpaceCode) const;
195
196 /**
197 \brief
198 Returns the locations in the domain of the FEM nodes.
199 */
200 virtual
201 escript::Data
202 getX() const;
203
204 /**
205 \brief
206 Copies the location of data points on the domain into out.
207 */
208 virtual
209 void
210 setToX(escript::Data& out) const;
211
212 /**
213 \brief
214 Returns the element size.
215 */
216 virtual
217 escript::Data
218 getSize() const;
219
220 /**
221 \brief
222 Copies the size of samples into out.
223 */
224 virtual
225 void
226 setToSize(escript::Data& out) const;
227
228 /**
229 \brief
230 Comparison operators.
231 */
232 virtual bool operator==(const AbstractDomain& other) const;
233 virtual bool operator!=(const AbstractDomain& other) const;
234
235 protected:
236
237 /**
238 \brief
239 Build the table of function space type names.
240 */
241 void
242 setFunctionSpaceTypeNames();
243
244 /**
245 \brief
246 Ensure the parameters supplied to the constructor are valid.
247 */
248 bool
249 checkParameters();
250
251 /**
252 \brief
253 Check if all components of vector are zero.
254 */
255 static
256 bool
257 isZero(DimVec vec);
258
259 private:
260
261 //
262 // vectors describing axis of the domain
263 DimVec m_v0, m_v1, m_v2;
264
265 //
266 // number of data points in each axial direction of the domain
267 int m_n0, m_n1, m_n2;
268
269 //
270 // the coordinates of the origin of the domain
271 DimVec m_origin;
272
273 //
274 // map from FunctionSpace codes to names
275 static FunctionSpaceNamesMapType m_functionSpaceTypeNames;
276
277 };
278
279 } // end of namespace
280
281 #endif

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26