/[escript]/trunk/ripley/src/Rectangle.h
ViewVC logotype

Annotation of /trunk/ripley/src/Rectangle.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3981 - (hide annotations)
Fri Sep 21 02:47:54 2012 UTC (6 years, 11 months ago) by jfenwick
File MIME type: text/plain
File size: 8761 byte(s)
First pass of updating copyright notices
1 caltinay 3691
2 jfenwick 3981 /*****************************************************************************
3 caltinay 3691 *
4 caltinay 3764 * Copyright (c) 2003-2012 by University of Queensland
5 jfenwick 3981 * http://www.uq.edu.au
6 caltinay 3691 *
7     * Primary Business: Queensland, Australia
8     * Licensed under the Open Software License version 3.0
9     * http://www.opensource.org/licenses/osl-3.0.php
10     *
11 jfenwick 3981 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12     * Development since 2012 by School of Earth Sciences
13     *
14     *****************************************************************************/
15 caltinay 3691
16     #ifndef __RIPLEY_RECTANGLE_H__
17     #define __RIPLEY_RECTANGLE_H__
18    
19     #include <ripley/RipleyDomain.h>
20    
21 caltinay 3756 struct Paso_Connector;
22    
23 caltinay 3691 namespace ripley {
24    
25     /**
26     \brief
27     Rectangle is the 2-dimensional implementation of a RipleyDomain.
28     */
29 caltinay 3915 class RIPLEY_DLL_API Rectangle: public RipleyDomain
30 caltinay 3691 {
31     public:
32    
33     /**
34     \brief creates a rectangular mesh with n0 x n1 elements over the
35 caltinay 3781 rectangle [x0,x1] x [y0,y1].
36 caltinay 3691 \param n0,n1 number of elements in each dimension
37 caltinay 3781 \param x0,y0,x1,y1 coordinates of bottom-left and top-right corners
38 caltinay 3691 \param d0,d1 number of subdivisions in each dimension
39     */
40 caltinay 3943 Rectangle(int n0, int n1, double x0, double y0, double x1, double y1,
41     int d0=-1, int d1=-1);
42 caltinay 3691
43     /**
44     \brief
45     Destructor.
46     */
47     ~Rectangle();
48    
49     /**
50     \brief
51     returns a description for this domain
52     */
53     virtual std::string getDescription() const;
54    
55     /**
56     \brief equality operator
57     */
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     void dump(const std::string& filename) const;
66    
67     /**
68 caltinay 3971 */
69     virtual void readBinaryGrid(escript::Data& out, std::string filename,
70     const std::vector<int>& first,
71     const std::vector<int>& numValues) const;
72    
73     /**
74 caltinay 3691 \brief
75     returns the array of reference numbers for a function space type
76     \param fsType The function space type
77     */
78     const int* borrowSampleReferenceIDs(int fsType) const;
79    
80     /**
81     \brief
82     returns true if this rank owns the sample id.
83     */
84     virtual bool ownSample(int fs_code, index_t id) const;
85    
86     /**
87     \brief
88 caltinay 3722 copies the surface normals at data points into out. The actual function
89     space to be considered is defined by out. out has to be defined on this
90     domain.
91     */
92     virtual void setToNormal(escript::Data& out) const;
93    
94     /**
95     \brief
96 caltinay 3760 copies the size of samples into out. The actual function space to be
97     considered is defined by out. out has to be defined on this domain.
98     */
99     virtual void setToSize(escript::Data& out) const;
100    
101     /**
102     \brief
103 caltinay 3691 returns the number of data points summed across all MPI processes
104     */
105     virtual int getNumDataPointsGlobal() const { return (m_gNE0+1)*(m_gNE1+1); }
106    
107     /**
108     \brief
109     writes information about the mesh to standard output
110     \param full whether to print additional data
111     */
112     virtual void Print_Mesh_Info(const bool full=false) const;
113    
114 caltinay 3697 /**
115     \brief
116     returns the number of nodes per MPI rank in each dimension
117     */
118     virtual IndexVector getNumNodesPerDim() const;
119    
120     /**
121     \brief
122     returns the number of elements per MPI rank in each dimension
123     */
124     virtual IndexVector getNumElementsPerDim() const;
125    
126     /**
127     \brief
128     returns the number of face elements in the order
129     (left,right,bottom,top,[front,back]) on current MPI rank
130     */
131     virtual IndexVector getNumFacesPerBoundary() const;
132    
133     /**
134     \brief
135     returns the node distribution vector
136     */
137     virtual IndexVector getNodeDistribution() const { return m_nodeDistribution; }
138    
139     /**
140     \brief
141 caltinay 3766 returns the number of spatial subdivisions in each dimension
142     */
143     virtual IndexVector getNumSubdivisionsPerDim() const;
144    
145     /**
146     \brief
147 caltinay 3697 returns the first coordinate value and the node spacing along given
148     dimension as a pair
149     */
150     virtual std::pair<double,double> getFirstCoordAndSpacing(dim_t dim) const;
151    
152 caltinay 3691 protected:
153     virtual dim_t getNumNodes() const { return m_N0*m_N1; }
154     virtual dim_t getNumElements() const { return m_NE0*m_NE1; }
155 caltinay 3756 virtual dim_t getNumFaceElements() const;
156 caltinay 3750 virtual dim_t getNumDOF() const;
157 caltinay 3756 virtual dim_t insertNeighbourNodes(IndexVector& index, index_t node) const;
158 caltinay 3691 virtual void assembleCoordinates(escript::Data& arg) const;
159 caltinay 3764 virtual void assembleGradient(escript::Data& out, escript::Data& in) const;
160     virtual void assembleIntegrate(std::vector<double>& integrals, escript::Data& arg) const;
161 caltinay 3748 virtual void assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,
162     const escript::Data& A, const escript::Data& B,
163     const escript::Data& C, const escript::Data& D,
164 caltinay 3769 const escript::Data& X, const escript::Data& Y) const;
165     virtual void assemblePDEBoundarySingle(Paso_SystemMatrix* mat,
166 caltinay 3776 escript::Data& rhs, const escript::Data& d,
167     const escript::Data& y) const;
168 caltinay 3762 virtual void assemblePDESingleReduced(Paso_SystemMatrix* mat,
169     escript::Data& rhs, const escript::Data& A, const escript::Data& B,
170     const escript::Data& C, const escript::Data& D,
171 caltinay 3769 const escript::Data& X, const escript::Data& Y) const;
172     virtual void assemblePDEBoundarySingleReduced(Paso_SystemMatrix* mat,
173 caltinay 3776 escript::Data& rhs, const escript::Data& d,
174     const escript::Data& y) const;
175 caltinay 3760 virtual void assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,
176     const escript::Data& A, const escript::Data& B,
177     const escript::Data& C, const escript::Data& D,
178 caltinay 3769 const escript::Data& X, const escript::Data& Y) const;
179     virtual void assemblePDEBoundarySystem(Paso_SystemMatrix* mat,
180 caltinay 3776 escript::Data& rhs, const escript::Data& d,
181     const escript::Data& y) const;
182 caltinay 3762 virtual void assemblePDESystemReduced(Paso_SystemMatrix* mat,
183     escript::Data& rhs, const escript::Data& A, const escript::Data& B,
184     const escript::Data& C, const escript::Data& D,
185 caltinay 3769 const escript::Data& X, const escript::Data& Y) const;
186     virtual void assemblePDEBoundarySystemReduced(Paso_SystemMatrix* mat,
187 caltinay 3776 escript::Data& rhs, const escript::Data& d,
188     const escript::Data& y) const;
189 caltinay 3691 virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;
190 caltinay 3711 virtual void interpolateNodesOnElements(escript::Data& out,
191     escript::Data& in, bool reduced) const;
192     virtual void interpolateNodesOnFaces(escript::Data& out, escript::Data& in,
193     bool reduced) const;
194 caltinay 3750 virtual void nodesToDOF(escript::Data& out, escript::Data& in) const;
195 caltinay 3755 virtual void dofToNodes(escript::Data& out, escript::Data& in) const;
196 caltinay 3691
197     private:
198     void populateSampleIds();
199 caltinay 3756 void createPattern();
200 caltinay 3776 void addToMatrixAndRHS(Paso_SystemMatrix* S, escript::Data& F,
201     const std::vector<double>& EM_S, const std::vector<double>& EM_F,
202     bool addS, bool addF, index_t firstNode, dim_t nEq=1, dim_t nComp=1) const;
203 caltinay 3691
204     /// total number of elements in each dimension
205     dim_t m_gNE0, m_gNE1;
206    
207 caltinay 3781 /// location of domain
208     double m_x0, m_y0;
209    
210 caltinay 3691 /// side lengths of domain
211     double m_l0, m_l1;
212    
213     /// number of spatial subdivisions
214     int m_NX, m_NY;
215    
216 caltinay 3764 /// number of elements for this rank in each dimension including shared
217 caltinay 3691 dim_t m_NE0, m_NE1;
218    
219 caltinay 3764 /// number of own elements for this rank in each dimension
220     dim_t m_ownNE0, m_ownNE1;
221    
222 caltinay 3691 /// number of nodes for this rank in each dimension
223     dim_t m_N0, m_N1;
224    
225     /// first node on this rank is at (offset0,offset1) in global mesh
226     dim_t m_offset0, m_offset1;
227    
228 caltinay 3704 /// faceOffset[i]=-1 if face i is not an external face, otherwise it is
229     /// the index of that face (where i: 0=left, 1=right, 2=bottom, 3=top)
230     IndexVector m_faceOffset;
231    
232 caltinay 3691 /// vector of sample reference identifiers
233 caltinay 3750 IndexVector m_dofId;
234 caltinay 3691 IndexVector m_nodeId;
235     IndexVector m_elementId;
236     IndexVector m_faceId;
237 caltinay 3697
238     // vector with first node id on each rank
239     IndexVector m_nodeDistribution;
240 caltinay 3752
241 caltinay 3756 // vector that maps each node to a DOF index (used for the coupler)
242     IndexVector m_dofMap;
243    
244     // Paso connector used by the system matrix and to interpolate DOF to
245     // nodes
246     Paso_Connector* m_connector;
247    
248     // the Paso System Matrix pattern
249     Paso_SystemMatrixPattern* m_pattern;
250 caltinay 3691 };
251    
252     } // end of namespace ripley
253    
254     #endif // __RIPLEY_RECTANGLE_H__
255    

  ViewVC Help
Powered by ViewVC 1.1.26