/[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 3766 by caltinay, Thu Jan 12 08:17: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 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.
89      */      */
90      RIPLEY_DLL_API      RIPLEY_DLL_API
91      virtual void setToGradient(escript::Data& out, const escript::Data& in) const;      virtual void setToNormal(escript::Data& out) const;
92    
93      /**      /**
94         \brief         \brief
95         copies the integrals of the function defined by arg into integrals.         copies the size of samples into out. The actual function space to be
96         arg has to be defined on this domain.         considered is defined by out. out has to be defined on this domain.
97      */      */
98      RIPLEY_DLL_API      RIPLEY_DLL_API
99      virtual void setToIntegrals(std::vector<double>& integrals, const escript::Data& arg) const;      virtual void setToSize(escript::Data& out) const;
   
     /**  
        \brief  
        copies the surface normals at data points into out. The actual function  
        space to be considered is defined by out. out has to be defined on this  
        domain.  
     */  
     RIPLEY_DLL_API  
     virtual void setToNormal(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 escript::Domain_ptr getCoarseMesh() const { return m_coarseMesh; }
166        virtual dim_t insertNeighbourNodes(IndexVector& index, index_t node) const;
167      virtual void assembleCoordinates(escript::Data& arg) const;      virtual void assembleCoordinates(escript::Data& arg) const;
168        virtual void assembleGradient(escript::Data& out, escript::Data& in) const;
169        virtual void assembleIntegrate(std::vector<double>& integrals, escript::Data& arg) const;
170      virtual void assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,      virtual void assemblePDESingle(Paso_SystemMatrix* mat, escript::Data& rhs,
171              const escript::Data& A, const escript::Data& B,              const escript::Data& A, const escript::Data& B,
172              const escript::Data& C, const escript::Data& D,              const escript::Data& C, const escript::Data& D,
173              const escript::Data& X, const escript::Data& Y,              const escript::Data& X, const escript::Data& Y,
174              const escript::Data& d, const escript::Data& y) const;              const escript::Data& d, const escript::Data& y) const;
175      //virtual void assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,      virtual void assemblePDESingleReduced(Paso_SystemMatrix* mat,
176      //        const escript::Data& A, const escript::Data& B,              escript::Data& rhs, const escript::Data& A, const escript::Data& B,
177      //        const escript::Data& C, const escript::Data& D,              const escript::Data& C, const escript::Data& D,
178      //        const escript::Data& X, const escript::Data& Y,              const escript::Data& X, const escript::Data& Y,
179      //        const escript::Data& d, const escript::Data& y) const;              const escript::Data& d, const escript::Data& y) const;
180        virtual void assemblePDESystem(Paso_SystemMatrix* mat, escript::Data& rhs,
181                const escript::Data& A, const escript::Data& B,
182                const escript::Data& C, const escript::Data& D,
183                const escript::Data& X, const escript::Data& Y,
184                const escript::Data& d, const escript::Data& y) const;
185        virtual void assemblePDESystemReduced(Paso_SystemMatrix* mat,
186                escript::Data& rhs, const escript::Data& A, const escript::Data& B,
187                const escript::Data& C, const escript::Data& D,
188                const escript::Data& X, const escript::Data& Y,
189                const escript::Data& d, const escript::Data& y) const;
190      virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;      virtual Paso_SystemMatrixPattern* getPattern(bool reducedRowOrder, bool reducedColOrder) const;
191      virtual void interpolateNodesOnElements(escript::Data& out,      virtual void interpolateNodesOnElements(escript::Data& out,
192                                         escript::Data& in, bool reduced) const;                                         escript::Data& in, bool reduced) const;
193      virtual void interpolateNodesOnFaces(escript::Data& out, escript::Data& in,      virtual void interpolateNodesOnFaces(escript::Data& out, escript::Data& in,
194                                           bool reduced) const;                                           bool reduced) const;
195        virtual void nodesToDOF(escript::Data& out, escript::Data& in) const;
196        virtual void dofToNodes(escript::Data& out, escript::Data& in) const;
197    
198  private:  private:
199      void populateSampleIds();      void populateSampleIds();
200      int insertNeighbours(IndexVector& index, index_t node) const;      void createPattern();
     void generateCouplePatterns(Paso_Pattern** colPattern,  
                                 Paso_Pattern** rowPattern) const;  
     void addToSystemMatrix(Paso_SystemMatrix* in, dim_t NN_Equa,  
             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;  
201    
202      /// total number of elements in each dimension      /// total number of elements in each dimension
203      dim_t m_gNE0, m_gNE1;      dim_t m_gNE0, m_gNE1;
# Line 200  private: Line 208  private:
208      /// number of spatial subdivisions      /// number of spatial subdivisions
209      int m_NX, m_NY;      int m_NX, m_NY;
210    
211      /// number of elements for this rank in each dimension      /// number of elements for this rank in each dimension including shared
212      dim_t m_NE0, m_NE1;      dim_t m_NE0, m_NE1;
213    
214        /// number of own elements for this rank in each dimension
215        dim_t m_ownNE0, m_ownNE1;
216    
217      /// number of nodes for this rank in each dimension      /// number of nodes for this rank in each dimension
218      dim_t m_N0, m_N1;      dim_t m_N0, m_N1;
219    
# Line 214  private: Line 225  private:
225      IndexVector m_faceOffset;      IndexVector m_faceOffset;
226    
227      /// vector of sample reference identifiers      /// vector of sample reference identifiers
228        IndexVector m_dofId;
229      IndexVector m_nodeId;      IndexVector m_nodeId;
230      IndexVector m_elementId;      IndexVector m_elementId;
231      IndexVector m_faceId;      IndexVector m_faceId;
232    
233      // vector with first node id on each rank      // vector with first node id on each rank
234      IndexVector m_nodeDistribution;      IndexVector m_nodeDistribution;
235    
236        // vector that maps each node to a DOF index (used for the coupler)
237        IndexVector m_dofMap;
238    
239        // Paso connector used by the system matrix and to interpolate DOF to
240        // nodes
241        Paso_Connector* m_connector;
242    
243        // the Paso System Matrix pattern
244        Paso_SystemMatrixPattern* m_pattern;
245    
246        escript::Domain_ptr m_coarseMesh;
247  };  };
248    
249  } // end of namespace ripley  } // end of namespace ripley

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

  ViewVC Help
Powered by ViewVC 1.1.26