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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3748 by caltinay, Thu Dec 15 07:36:19 2011 UTC revision 3781 by caltinay, Mon Jan 23 22:18:49 2012 UTC
# Line 1  Line 1 
1    
2  /*******************************************************  /*******************************************************
3  *  *
4  * Copyright (c) 2003-2011 by University of Queensland  * Copyright (c) 2003-2012 by University of Queensland
5  * Earth Systems Science Computational Center (ESSCC)  * Earth Systems Science Computational Center (ESSCC)
6  * http://www.uq.edu.au/esscc  * http://www.uq.edu.au/esscc
7  *  *
# Line 16  Line 16 
16    
17  #include <ripley/RipleyDomain.h>  #include <ripley/RipleyDomain.h>
18    
19  struct Paso_Pattern;  struct Paso_Connector;
20    
21  namespace ripley {  namespace ripley {
22    
# Line 30  public: Line 30  public:
30    
31      /**      /**
32         \brief creates a rectangular mesh with n0 x n1 elements over the         \brief creates a rectangular mesh with n0 x n1 elements over the
33                rectangle [0,l0] x [0,l1].                rectangle [x0,x1] x [y0,y1].
34         \param n0,n1 number of elements in each dimension         \param n0,n1 number of elements in each dimension
35         \param l0,l1 length of each side of rectangle         \param x0,y0,x1,y1 coordinates of bottom-left and top-right corners
36         \param d0,d1 number of subdivisions in each dimension         \param d0,d1 number of subdivisions in each dimension
37      */      */
38      RIPLEY_DLL_API      RIPLEY_DLL_API
39      Rectangle(int n0, int n1, double l0, double l1, int d0, int d1);      Rectangle(int n0, int n1, double x0, double y0, double x1, double y1, int d0, int d1);
40    
41      /**      /**
42         \brief         \brief
# Line 83  public: Line 83  public:
83    
84      /**      /**
85         \brief         \brief
86         copies the gradient of 'in' into 'out'. The actual function space to be         copies the surface normals at data points into out. The actual function
87         considered for the gradient is defined by 'in'. Both arguments have to         space to be considered is defined by out. out has to be defined on this
88         be defined on this domain.         domain.
     */  
     RIPLEY_DLL_API  
     virtual void setToGradient(escript::Data& out, const escript::Data& in) const;  
   
     /**  
        \brief  
        copies the integrals of the function defined by arg into integrals.  
        arg has to be defined on this domain.  
89      */      */
90      RIPLEY_DLL_API      RIPLEY_DLL_API
91      virtual void setToIntegrals(std::vector<double>& integrals, const escript::Data& arg) const;      virtual void setToNormal(escript::Data& out) const;
92    
93      /**      /**
94         \brief         \brief
95         copies the surface normals at data points into out. The actual function         copies the size of samples into out. The actual function space to be
96         space to be considered is defined by out. out has to be defined on this         considered is defined by out. out has to be defined on this domain.
        domain.  
97      */      */
98      RIPLEY_DLL_API      RIPLEY_DLL_API
99      virtual void setToNormal(escript::Data& out) const;      virtual void setToSize(escript::Data& out) const;
100    
101      /**      /**
102         \brief         \brief
# Line 153  public: Line 144  public:
144    
145      /**      /**
146         \brief         \brief
147           returns the number of spatial subdivisions in each dimension
148        */
149        RIPLEY_DLL_API
150        virtual IndexVector getNumSubdivisionsPerDim() const;
151    
152        /**
153           \brief
154         returns the first coordinate value and the node spacing along given         returns the first coordinate value and the node spacing along given
155         dimension as a pair         dimension as a pair
156      */      */
# Line 163  protected: Line 161  protected:
161      virtual dim_t getNumNodes() const { return m_N0*m_N1; }      virtual dim_t getNumNodes() const { return m_N0*m_N1; }
162      virtual dim_t getNumElements() const { return m_NE0*m_NE1; }      virtual dim_t getNumElements() const { return m_NE0*m_NE1; }
163      virtual dim_t getNumFaceElements() const;      virtual dim_t getNumFaceElements() const;
164        virtual dim_t getNumDOF() const;
165        virtual dim_t insertNeighbourNodes(IndexVector& index, index_t node) const;
166      virtual void assembleCoordinates(escript::Data& arg) const;      virtual void assembleCoordinates(escript::Data& arg) const;
167        virtual void assembleGradient(escript::Data& out, escript::Data& in) const;
168        virtual void assembleIntegrate(std::vector<double>& integrals, escript::Data& arg) const;
169      virtual void assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,      virtual void assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,
170              const escript::Data& A, const escript::Data& B,              const escript::Data& A, const escript::Data& B,
171              const escript::Data& C, const escript::Data& D,              const escript::Data& C, const escript::Data& D,
172              const escript::Data& X, const escript::Data& Y,              const escript::Data& X, const escript::Data& Y) const;
173              const escript::Data& d, const escript::Data& y) const;      virtual void assemblePDEBoundarySingle(Paso_SystemMatrix* mat,
174      //virtual void assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,              escript::Data& rhs, const escript::Data& d,
175      //        const escript::Data& A, const escript::Data& B,              const escript::Data& y) const;
176      //        const escript::Data& C, const escript::Data& D,      virtual void assemblePDESingleReduced(Paso_SystemMatrix* mat,
177      //        const escript::Data& X, const escript::Data& Y,              escript::Data& rhs, const escript::Data& A, const escript::Data& B,
178      //        const escript::Data& d, const escript::Data& y) const;              const escript::Data& C, const escript::Data& D,
179                const escript::Data& X, const escript::Data& Y) const;
180        virtual void assemblePDEBoundarySingleReduced(Paso_SystemMatrix* mat,
181                escript::Data& rhs, const escript::Data& d,
182                const escript::Data& y) const;
183        virtual void assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,
184                const escript::Data& A, const escript::Data& B,
185                const escript::Data& C, const escript::Data& D,
186                const escript::Data& X, const escript::Data& Y) const;
187        virtual void assemblePDEBoundarySystem(Paso_SystemMatrix* mat,
188                escript::Data& rhs, const escript::Data& d,
189                const escript::Data& y) const;
190        virtual void assemblePDESystemReduced(Paso_SystemMatrix* mat,
191                escript::Data& rhs, const escript::Data& A, const escript::Data& B,
192                const escript::Data& C, const escript::Data& D,
193                const escript::Data& X, const escript::Data& Y) const;
194        virtual void assemblePDEBoundarySystemReduced(Paso_SystemMatrix* mat,
195                escript::Data& rhs, const escript::Data& d,
196                const escript::Data& y) const;
197      virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;      virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;
198      virtual void interpolateNodesOnElements(escript::Data& out,      virtual void interpolateNodesOnElements(escript::Data& out,
199                                         escript::Data& in, bool reduced) const;                                         escript::Data& in, bool reduced) const;
200      virtual void interpolateNodesOnFaces(escript::Data& out, escript::Data& in,      virtual void interpolateNodesOnFaces(escript::Data& out, escript::Data& in,
201                                           bool reduced) const;                                           bool reduced) const;
202        virtual void nodesToDOF(escript::Data& out, escript::Data& in) const;
203        virtual void dofToNodes(escript::Data& out, escript::Data& in) const;
204    
205  private:  private:
206      void populateSampleIds();      void populateSampleIds();
207      int insertNeighbours(IndexVector& index, index_t node) const;      void createPattern();
208      void generateCouplePatterns(Paso_Pattern** colPattern,      void addToMatrixAndRHS(Paso_SystemMatrix* S, escript::Data& F,
209                                  Paso_Pattern** rowPattern) const;             const std::vector<double>& EM_S, const std::vector<double>& EM_F,
210      void addToSystemMatrix(Paso_SystemMatrix* in, dim_t NN_Equa,             bool addS, bool addF, index_t firstNode, dim_t nEq=1, dim_t nComp=1) const;
             const IndexVector& Nodes_Equa, dim_t num_Equa, dim_t NN_Sol,  
             const IndexVector& Nodes_Sol, dim_t num_Sol,  
             const std::vector<double>& array) const;  
211    
212      /// total number of elements in each dimension      /// total number of elements in each dimension
213      dim_t m_gNE0, m_gNE1;      dim_t m_gNE0, m_gNE1;
214    
215        /// location of domain
216        double m_x0, m_y0;
217    
218      /// side lengths of domain      /// side lengths of domain
219      double m_l0, m_l1;      double m_l0, m_l1;
220    
221      /// number of spatial subdivisions      /// number of spatial subdivisions
222      int m_NX, m_NY;      int m_NX, m_NY;
223    
224      /// number of elements for this rank in each dimension      /// number of elements for this rank in each dimension including shared
225      dim_t m_NE0, m_NE1;      dim_t m_NE0, m_NE1;
226    
227        /// number of own elements for this rank in each dimension
228        dim_t m_ownNE0, m_ownNE1;
229    
230      /// number of nodes for this rank in each dimension      /// number of nodes for this rank in each dimension
231      dim_t m_N0, m_N1;      dim_t m_N0, m_N1;
232    
# Line 214  private: Line 238  private:
238      IndexVector m_faceOffset;      IndexVector m_faceOffset;
239    
240      /// vector of sample reference identifiers      /// vector of sample reference identifiers
241        IndexVector m_dofId;
242      IndexVector m_nodeId;      IndexVector m_nodeId;
243      IndexVector m_elementId;      IndexVector m_elementId;
244      IndexVector m_faceId;      IndexVector m_faceId;
245    
246      // vector with first node id on each rank      // vector with first node id on each rank
247      IndexVector m_nodeDistribution;      IndexVector m_nodeDistribution;
248    
249        // vector that maps each node to a DOF index (used for the coupler)
250        IndexVector m_dofMap;
251    
252        // Paso connector used by the system matrix and to interpolate DOF to
253        // nodes
254        Paso_Connector* m_connector;
255    
256        // the Paso System Matrix pattern
257        Paso_SystemMatrixPattern* m_pattern;
258  };  };
259    
260  } // end of namespace ripley  } // end of namespace ripley

Legend:
Removed from v.3748  
changed lines
  Added in v.3781

  ViewVC Help
Powered by ViewVC 1.1.26