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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3750 - (hide annotations)
Fri Dec 23 01:20:34 2011 UTC (7 years, 8 months ago) by caltinay
Original Path: branches/ripleygmg_from_3668/ripley/src/Rectangle.h
File MIME type: text/plain
File size: 6922 byte(s)
Checkpoint - reinstated DOF FS and tried to fix couple blocks...

1 caltinay 3691
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_RECTANGLE_H__
15     #define __RIPLEY_RECTANGLE_H__
16    
17     #include <ripley/RipleyDomain.h>
18    
19     namespace ripley {
20    
21     /**
22     \brief
23     Rectangle is the 2-dimensional implementation of a RipleyDomain.
24     */
25     class Rectangle: public RipleyDomain
26     {
27     public:
28    
29     /**
30     \brief creates a rectangular mesh with n0 x n1 elements over the
31     rectangle [0,l0] x [0,l1].
32     \param n0,n1 number of elements in each dimension
33     \param l0,l1 length of each side of rectangle
34     \param d0,d1 number of subdivisions in each dimension
35     */
36     RIPLEY_DLL_API
37     Rectangle(int n0, int n1, double l0, double l1, int d0, int d1);
38    
39     /**
40     \brief
41     Destructor.
42     */
43     RIPLEY_DLL_API
44     ~Rectangle();
45    
46     /**
47     \brief
48     returns a description for this domain
49     */
50     RIPLEY_DLL_API
51     virtual std::string getDescription() const;
52    
53     /**
54     \brief equality operator
55     */
56     RIPLEY_DLL_API
57     virtual bool operator==(const escript::AbstractDomain& other) const;
58    
59     /**
60     \brief
61     dumps the mesh to a file with the given name
62     \param filename The name of the output file
63     */
64     RIPLEY_DLL_API
65     void dump(const std::string& filename) const;
66    
67     /**
68     \brief
69     returns the array of reference numbers for a function space type
70     \param fsType The function space type
71     */
72     RIPLEY_DLL_API
73     const int* borrowSampleReferenceIDs(int fsType) const;
74    
75     /**
76     \brief
77     returns true if this rank owns the sample id.
78     */
79     RIPLEY_DLL_API
80     virtual bool ownSample(int fs_code, index_t id) const;
81    
82     /**
83     \brief
84 caltinay 3702 copies the gradient of 'in' into 'out'. The actual function space to be
85     considered for the gradient is defined by 'in'. Both arguments have to
86     be defined on this domain.
87     */
88     RIPLEY_DLL_API
89     virtual void setToGradient(escript::Data& out, const escript::Data& in) const;
90    
91     /**
92     \brief
93 caltinay 3713 copies the integrals of the function defined by arg into integrals.
94     arg has to be defined on this domain.
95     */
96     RIPLEY_DLL_API
97     virtual void setToIntegrals(std::vector<double>& integrals, const escript::Data& arg) const;
98    
99     /**
100     \brief
101 caltinay 3722 copies the surface normals at data points into out. The actual function
102     space to be considered is defined by out. out has to be defined on this
103     domain.
104     */
105     RIPLEY_DLL_API
106     virtual void setToNormal(escript::Data& out) const;
107    
108     /**
109     \brief
110 caltinay 3691 returns the number of data points summed across all MPI processes
111     */
112     RIPLEY_DLL_API
113     virtual int getNumDataPointsGlobal() const { return (m_gNE0+1)*(m_gNE1+1); }
114    
115     /**
116     \brief
117     writes information about the mesh to standard output
118     \param full whether to print additional data
119     */
120     RIPLEY_DLL_API
121     virtual void Print_Mesh_Info(const bool full=false) const;
122    
123 caltinay 3697 /**
124     \brief
125     returns the number of nodes per MPI rank in each dimension
126     */
127     RIPLEY_DLL_API
128     virtual IndexVector getNumNodesPerDim() const;
129    
130     /**
131     \brief
132     returns the number of elements per MPI rank in each dimension
133     */
134     RIPLEY_DLL_API
135     virtual IndexVector getNumElementsPerDim() const;
136    
137     /**
138     \brief
139     returns the number of face elements in the order
140     (left,right,bottom,top,[front,back]) on current MPI rank
141     */
142     RIPLEY_DLL_API
143     virtual IndexVector getNumFacesPerBoundary() const;
144    
145     /**
146     \brief
147     returns the node distribution vector
148     */
149     RIPLEY_DLL_API
150     virtual IndexVector getNodeDistribution() const { return m_nodeDistribution; }
151    
152     /**
153     \brief
154     returns the first coordinate value and the node spacing along given
155     dimension as a pair
156     */
157     RIPLEY_DLL_API
158     virtual std::pair<double,double> getFirstCoordAndSpacing(dim_t dim) const;
159    
160 caltinay 3691 protected:
161     virtual dim_t getNumNodes() const { return m_N0*m_N1; }
162     virtual dim_t getNumElements() const { return m_NE0*m_NE1; }
163 caltinay 3750 virtual dim_t getNumDOF() const;
164 caltinay 3691 virtual dim_t getNumFaceElements() const;
165     virtual void assembleCoordinates(escript::Data& arg) const;
166 caltinay 3748 virtual void assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,
167     const escript::Data& A, const escript::Data& B,
168     const escript::Data& C, const escript::Data& D,
169     const escript::Data& X, const escript::Data& Y,
170     const escript::Data& d, const escript::Data& y) const;
171     //virtual void assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,
172     // const escript::Data& A, const escript::Data& B,
173     // const escript::Data& C, const escript::Data& D,
174     // const escript::Data& X, const escript::Data& Y,
175     // const escript::Data& d, const escript::Data& y) const;
176    
177 caltinay 3691 virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;
178 caltinay 3711 virtual void interpolateNodesOnElements(escript::Data& out,
179     escript::Data& in, bool reduced) const;
180     virtual void interpolateNodesOnFaces(escript::Data& out, escript::Data& in,
181     bool reduced) const;
182 caltinay 3750 virtual void nodesToDOF(escript::Data& out, escript::Data& in) const;
183 caltinay 3691
184     private:
185     void populateSampleIds();
186 caltinay 3699 int insertNeighbours(IndexVector& index, index_t node) const;
187 caltinay 3750 void addToSystemMatrix(Paso_SystemMatrix* in, const IndexVector& nodes_Eq,
188     dim_t num_Eq, const IndexVector& nodes_Sol, dim_t num_Sol,
189 caltinay 3748 const std::vector<double>& array) const;
190 caltinay 3691
191     /// total number of elements in each dimension
192     dim_t m_gNE0, m_gNE1;
193    
194     /// side lengths of domain
195     double m_l0, m_l1;
196    
197     /// number of spatial subdivisions
198     int m_NX, m_NY;
199    
200     /// number of elements for this rank in each dimension
201     dim_t m_NE0, m_NE1;
202    
203     /// number of nodes for this rank in each dimension
204     dim_t m_N0, m_N1;
205    
206     /// first node on this rank is at (offset0,offset1) in global mesh
207     dim_t m_offset0, m_offset1;
208    
209 caltinay 3704 /// faceOffset[i]=-1 if face i is not an external face, otherwise it is
210     /// the index of that face (where i: 0=left, 1=right, 2=bottom, 3=top)
211     IndexVector m_faceOffset;
212    
213 caltinay 3691 /// vector of sample reference identifiers
214 caltinay 3750 IndexVector m_dofId;
215 caltinay 3691 IndexVector m_nodeId;
216     IndexVector m_elementId;
217     IndexVector m_faceId;
218 caltinay 3697
219     // vector with first node id on each rank
220     IndexVector m_nodeDistribution;
221 caltinay 3691 };
222    
223     } // end of namespace ripley
224    
225     #endif // __RIPLEY_RECTANGLE_H__
226    

  ViewVC Help
Powered by ViewVC 1.1.26