/[escript]/branches/ripleygmg_from_3668/ripley/src/Brick.h
ViewVC logotype

Contents of /branches/ripleygmg_from_3668/ripley/src/Brick.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3698 - (show annotations)
Tue Nov 29 00:47:29 2011 UTC (7 years, 10 months ago) by caltinay
File MIME type: text/plain
File size: 4872 byte(s)
[x] Rectangle...
[x] Brick node id's and weipa compatibility


1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2011 by University of Queensland
5 * 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
14 #ifndef __RIPLEY_BRICK_H__
15 #define __RIPLEY_BRICK_H__
16
17 #include <ripley/RipleyDomain.h>
18
19 namespace ripley {
20
21 /**
22 \brief
23 Brick is the 3-dimensional implementation of a RipleyDomain.
24 */
25 class Brick: public RipleyDomain
26 {
27 public:
28
29 /**
30 \brief creates a hexagonal mesh with n0 x n1 x n2 elements over the
31 brick [0,l0] x [0,l1] x [0,l2].
32 \param n0,n1,n2 number of elements in each dimension
33 \param l0,l1,l2 length of each side of brick
34 \param d0,d1,d2 number of subdivisions in each dimension
35 */
36 RIPLEY_DLL_API
37 Brick(int n0, int n1, int n2, double l0, double l1, double l2, int d0,
38 int d1, int d2);
39
40 /**
41 \brief
42 Destructor.
43 */
44 RIPLEY_DLL_API
45 ~Brick();
46
47 /**
48 \brief
49 returns a description for this domain
50 */
51 RIPLEY_DLL_API
52 virtual std::string getDescription() const;
53
54 /**
55 \brief equality operator
56 */
57 RIPLEY_DLL_API
58 virtual bool operator==(const escript::AbstractDomain& other) const;
59
60 /**
61 \brief
62 dumps the mesh to a file with the given name
63 \param filename The name of the output file
64 */
65 RIPLEY_DLL_API
66 void dump(const std::string& filename) const;
67
68 /**
69 \brief
70 returns the reference number of the given sample number
71 \param fsType The function space type
72 */
73 RIPLEY_DLL_API
74 const int* borrowSampleReferenceIDs(int fsType) const;
75
76 /**
77 \brief
78 returns true if this rank owns the sample id.
79 */
80 RIPLEY_DLL_API
81 virtual bool ownSample(int fs_code, index_t id) const;
82
83 /**
84 \brief
85 returns the number of data points summed across all MPI processes
86 */
87 RIPLEY_DLL_API
88 virtual int getNumDataPointsGlobal() const { return (m_gNE0+1)*(m_gNE1+1)*(m_gNE2+1); }
89
90 /**
91 \brief
92 interpolates data given on source onto target where source and target
93 have to be given on the same domain
94 */
95 RIPLEY_DLL_API
96 virtual void interpolateOnDomain(escript::Data& target, const escript::Data& source) const;
97
98 /**
99 \brief
100 writes information about the mesh to standard output
101 \param full whether to print additional data
102 */
103 RIPLEY_DLL_API
104 virtual void Print_Mesh_Info(const bool full=false) const;
105
106 /**
107 \brief
108 returns the number of nodes per MPI rank in each dimension
109 */
110 RIPLEY_DLL_API
111 virtual IndexVector getNumNodesPerDim() const;
112
113 /**
114 \brief
115 returns the number of elements per MPI rank in each dimension
116 */
117 RIPLEY_DLL_API
118 virtual IndexVector getNumElementsPerDim() const;
119
120 /**
121 \brief
122 returns the number of face elements in the order
123 (left,right,bottom,top,[front,back]) on current MPI rank
124 */
125 RIPLEY_DLL_API
126 virtual IndexVector getNumFacesPerBoundary() const;
127
128 /**
129 \brief
130 returns the node distribution vector
131 */
132 RIPLEY_DLL_API
133 virtual IndexVector getNodeDistribution() const { return m_nodeDistribution; }
134
135 /**
136 \brief
137 returns the first coordinate value and the node spacing along given
138 dimension as a pair
139 */
140 RIPLEY_DLL_API
141 virtual std::pair<double,double> getFirstCoordAndSpacing(dim_t dim) const;
142
143 protected:
144 virtual dim_t getNumNodes() const { return m_N0*m_N1*m_N2; }
145 virtual dim_t getNumElements() const { return m_NE0*m_NE1*m_NE2; }
146 virtual dim_t getNumFaceElements() const;
147 virtual void assembleCoordinates(escript::Data& arg) const;
148 virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;
149
150 private:
151 void populateSampleIds();
152
153 /// total number of elements in each dimension
154 dim_t m_gNE0, m_gNE1, m_gNE2;
155
156 /// side lengths of domain
157 double m_l0, m_l1, m_l2;
158
159 /// number of spatial subdivisions
160 int m_NX, m_NY, m_NZ;
161
162 /// number of elements for this rank in each dimension
163 dim_t m_NE0, m_NE1, m_NE2;
164
165 /// number of nodes for this rank in each dimension
166 dim_t m_N0, m_N1, m_N2;
167
168 /// first node on this rank is at (offset0,offset1,offset2) in global mesh
169 dim_t m_offset0, m_offset1, m_offset2;
170
171 /// vector of sample reference identifiers
172 IndexVector m_nodeId;
173 IndexVector m_elementId;
174 IndexVector m_faceId;
175
176 // vector with first node id on each rank
177 IndexVector m_nodeDistribution;
178 };
179
180 } // end of namespace ripley
181
182 #endif // __RIPLEY_BRICK_H__
183

  ViewVC Help
Powered by ViewVC 1.1.26