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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3691 - (hide annotations)
Wed Nov 23 23:07:37 2011 UTC (7 years, 10 months ago) by caltinay
File MIME type: text/plain
File size: 3820 byte(s)
Next iteration

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_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     protected:
107     virtual dim_t getNumNodes() const { return m_N0*m_N1*m_N2; }
108     virtual dim_t getNumElements() const { return m_NE0*m_NE1*m_NE2; }
109     virtual dim_t getNumFaceElements() const;
110     virtual void assembleCoordinates(escript::Data& arg) const;
111     virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;
112    
113     private:
114     void populateSampleIds();
115    
116     /// total number of elements in each dimension
117     dim_t m_gNE0, m_gNE1, m_gNE2;
118    
119     /// side lengths of domain
120     double m_l0, m_l1, m_l2;
121    
122     /// number of spatial subdivisions
123     int m_NX, m_NY, m_NZ;
124    
125     /// number of elements for this rank in each dimension
126     dim_t m_NE0, m_NE1, m_NE2;
127    
128     /// number of nodes for this rank in each dimension
129     dim_t m_N0, m_N1, m_N2;
130    
131     /// first node on this rank is at (offset0,offset1,offset2) in global mesh
132     dim_t m_offset0, m_offset1, m_offset2;
133    
134     /// vector of sample reference identifiers
135     IndexVector m_nodeId;
136     IndexVector m_elementId;
137     IndexVector m_faceId;
138     };
139    
140     } // end of namespace ripley
141    
142     #endif // __RIPLEY_BRICK_H__
143    

  ViewVC Help
Powered by ViewVC 1.1.26