/[escript]/trunk/finley/src/CPPAdapter/MeshAdapter.h
ViewVC logotype

Diff of /trunk/finley/src/CPPAdapter/MeshAdapter.h

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

revision 1059 by gross, Fri Mar 23 11:01:53 2007 UTC revision 2642 by jfenwick, Tue Sep 1 04:15:50 2009 UTC
# Line 1  Line 1 
1  // $Id$  
2  /*  /*******************************************************
3   ************************************************************  *
4   *          Copyright 2006 by ACcESS MNRF                   *  * Copyright (c) 2003-2009 by University of Queensland
5   *                                                          *  * Earth Systems Science Computational Center (ESSCC)
6   *              http://www.access.edu.au                    *  * http://www.uq.edu.au/esscc
7   *       Primary Business: Queensland, Australia            *  *
8   *  Licensed under the Open Software License version 3.0    *  * Primary Business: Queensland, Australia
9   *     http://www.opensource.org/licenses/osl-3.0.php       *  * Licensed under the Open Software License version 3.0
10   *                                                          *  * http://www.opensource.org/licenses/osl-3.0.php
11   ************************************************************  *
12  */  *******************************************************/
13                                                                              
14    
15  #if !defined finley_MeshAdapter_20040526_H  #if !defined finley_MeshAdapter_20040526_H
16  #define finley_MeshAdapter_20040526_H  #define finley_MeshAdapter_20040526_H
17  #include "system_dep.h"  #include "system_dep.h"
# Line 20  extern "C" { Line 21  extern "C" {
21  #include "../Finley.h"  #include "../Finley.h"
22  #include "../Assemble.h"  #include "../Assemble.h"
23  #include "paso/SystemMatrix.h"  #include "paso/SystemMatrix.h"
24    #include "paso/SolverFCT.h"
25    #include "paso/Paso_MPI.h"
26  }  }
27    
28  #include "FinleyError.h"  #include "FinleyError.h"
29  #include "FinleyAdapterException.h"  #include "FinleyAdapterException.h"
30    
31  #include "SystemMatrixAdapter.h"  #include "SystemMatrixAdapter.h"
32    #include "TransportProblemAdapter.h"
33  #include "escript/AbstractContinuousDomain.h"  #include "escript/AbstractContinuousDomain.h"
34  #include "escript/FunctionSpace.h"  #include "escript/FunctionSpace.h"
35  #include "escript/FunctionSpaceFactory.h"  #include "escript/FunctionSpaceFactory.h"
# Line 74  class MeshAdapter : public escript::Abst Line 78  class MeshAdapter : public escript::Abst
78    static const int DegreesOfFreedom;    static const int DegreesOfFreedom;
79    static const int ReducedDegreesOfFreedom;    static const int ReducedDegreesOfFreedom;
80    static const int Nodes;    static const int Nodes;
81      static const int ReducedNodes;
82    static const int Elements;    static const int Elements;
83    static const int ReducedElements;    static const int ReducedElements;
84    static const int FaceElements;    static const int FaceElements;
# Line 90  class MeshAdapter : public escript::Abst Line 95  class MeshAdapter : public escript::Abst
95    
96       Description:       Description:
97       Constructor for MeshAdapter. The pointer passed to MeshAdapter       Constructor for MeshAdapter. The pointer passed to MeshAdapter
98       is deleted using a call to Finley_Mesh_deallocate in the       is deleted using a call to Finley_Mesh_free in the
99       MeshAdapter destructor.       MeshAdapter destructor.
100    
101       Throws:       Throws:
# Line 99  class MeshAdapter : public escript::Abst Line 104  class MeshAdapter : public escript::Abst
104       \param finleyMesh Input - A pointer to the externally constructed       \param finleyMesh Input - A pointer to the externally constructed
105                                 finley mesh.The pointer passed to MeshAdapter                                 finley mesh.The pointer passed to MeshAdapter
106                                 is deleted using a call to                                 is deleted using a call to
107                                 Finley_Mesh_deallocate in the MeshAdapter                                 Finley_Mesh_free in the MeshAdapter
108                                 destructor.                                 destructor.
109    */    */
110    FINLEY_DLL_API    FINLEY_DLL_API
# Line 115  class MeshAdapter : public escript::Abst Line 120  class MeshAdapter : public escript::Abst
120    /**    /**
121       \brief       \brief
122       Destructor for MeshAdapter. As specified in the constructor       Destructor for MeshAdapter. As specified in the constructor
123       this calls Finley_Mesh_deallocate for the pointer given to the       this calls Finley_Mesh_free for the pointer given to the
124       constructor.       constructor.
125    */    */
126    FINLEY_DLL_API    FINLEY_DLL_API
# Line 123  class MeshAdapter : public escript::Abst Line 128  class MeshAdapter : public escript::Abst
128    
129    /**    /**
130       \brief       \brief
131         return the number of processors used for this domain
132      */
133      FINLEY_DLL_API
134      virtual int getMPISize() const;
135      /**
136         \brief
137         return the number MPI rank of this processor
138      */
139    
140      FINLEY_DLL_API
141      virtual int getMPIRank() const;
142    
143      /**
144         \brief
145         If compiled for MPI then execute an MPI_Barrier, else do nothing
146      */
147    
148      FINLEY_DLL_API
149      virtual void MPIBarrier() const;
150    
151      /**
152         \brief
153         Return true if on MPI processor 0, else false
154      */
155    
156      FINLEY_DLL_API
157      virtual bool onMasterProcessor() const;
158    
159      FINLEY_DLL_API
160    #ifdef PASO_MPI
161      MPI_Comm
162    #else
163      unsigned int
164    #endif
165      getMPIComm() const;
166    
167      /**
168         \brief
169       return this as an AbstractContinuousDomain.       return this as an AbstractContinuousDomain.
170    */    */
171    inline const AbstractContinuousDomain& asAbstractContinuousDomain() const    inline const AbstractContinuousDomain& asAbstractContinuousDomain() const
# Line 149  class MeshAdapter : public escript::Abst Line 192  class MeshAdapter : public escript::Abst
192    
193    /**    /**
194       \brief       \brief
195         \param full
196      */
197      FINLEY_DLL_API
198      void Print_Mesh_Info(const bool full=false) const;
199    
200      /**
201         \brief
202         dumps the mesh to a file with the given name.
203         \param fileName Input - The name of the file
204      */
205      FINLEY_DLL_API
206      void dump(const std::string& fileName) const;
207    
208      /**
209         \brief
210       return the pointer to the underlying finley mesh structure       return the pointer to the underlying finley mesh structure
211    */    */
212    FINLEY_DLL_API    FINLEY_DLL_API
# Line 169  class MeshAdapter : public escript::Abst Line 227  class MeshAdapter : public escript::Abst
227       \param functionSpaceType Input - The function space type.       \param functionSpaceType Input - The function space type.
228    */    */
229    FINLEY_DLL_API    FINLEY_DLL_API
230    int* borrowSampleReferenceIDs(int functionSpaceType) const;    const int* borrowSampleReferenceIDs(int functionSpaceType) const;
231    
232    /**    /**
233       \brief       \brief
# Line 209  class MeshAdapter : public escript::Abst Line 267  class MeshAdapter : public escript::Abst
267    
268    /**    /**
269       \brief       \brief
270         Return a continuous on reduced order nodes FunctionSpace code
271      */
272      FINLEY_DLL_API
273      virtual int getReducedContinuousFunctionCode() const;
274    
275      /**
276         \brief
277       Return a function FunctionSpace code       Return a function FunctionSpace code
278    */    */
279    FINLEY_DLL_API    FINLEY_DLL_API
# Line 298  class MeshAdapter : public escript::Abst Line 363  class MeshAdapter : public escript::Abst
363    
364    /**    /**
365       \brief       \brief
366          Returns a status indicator of the domain. The status identifier should be unique over
367          the live time if the object but may be updated if changes to the domain happen, e.g.
368          modifications to its geometry.
369    
370         This has to be implemented by the actual Domain adapter.
371      */
372      FINLEY_DLL_API
373      virtual StatusType getStatus() const;
374    
375    
376      /**
377         \brief
378         Return the number of data points summed across all MPI processes
379      */
380      FINLEY_DLL_API
381      virtual int getNumDataPointsGlobal() const;
382    
383      /**
384         \brief
385       Return the number of data points per sample, and the number of samples as a pair.       Return the number of data points per sample, and the number of samples as a pair.
386       \param functionSpaceCode Input -       \param functionSpaceCode Input -
387    */    */
# Line 357  class MeshAdapter : public escript::Abst Line 441  class MeshAdapter : public escript::Abst
441    */    */
442    FINLEY_DLL_API    FINLEY_DLL_API
443    virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;    virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
444    
445    
446    FINLEY_DLL_API    FINLEY_DLL_API
447    virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;    virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
448    
449    /**    /**
450        \brief given a vector of FunctionSpace typecodes, pass back a code which then can all be interpolated to.
451        \return true is result is valid, false if not
452      */
453      FINLEY_DLL_API
454      bool
455      commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
456    
457      /**
458       \brief       \brief
459       interpolates data given on source onto target where source and target are given on different domains.       interpolates data given on source onto target where source and target are given on different domains.
460       has to be implemented by the actual Domain adapter.       has to be implemented by the actual Domain adapter.
461    */    */
462    FINLEY_DLL_API    FINLEY_DLL_API
463    virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;    virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
464    
465      /**
466      \brief determines whether interpolation from source to target is possible.
467      Must be implemented by the actual Domain adapter
468      */
469    FINLEY_DLL_API    FINLEY_DLL_API
470    virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;    virtual bool probeInterpolationACross(int functionSpaceType_source,const escript::AbstractDomain& targetDomain, int functionSpaceType_target) const;
471    
472    /**    /**
473       \brief       \brief
# Line 404  class MeshAdapter : public escript::Abst Line 503  class MeshAdapter : public escript::Abst
503    
504    /**    /**
505       \brief       \brief
506       return the identifier of the matrix type to be used for the global stiffness matrix when a particular solver, package       return the identifier of the matrix type to be used for the global stiffness matrix when a particular solver, package, perconditioner,
507       and symmetric matrix is used.       and symmetric matrix is used.
508       \param solver       \param solver
509         \param preconditioner
510         \param package
511       \param symmetry       \param symmetry
512    */    */
513    FINLEY_DLL_API    FINLEY_DLL_API
514    virtual int getSystemMatrixTypeId(const int solver, const int package, const bool symmetry) const;    virtual int getSystemMatrixTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
515    
516      /**
517         \brief
518         return the identifier of the transport problem type to be used when a particular solver, perconditioner, package
519         and symmetric matrix is used.
520         \param solver
521         \param preconditioner
522         \param package
523         \param symmetry
524      */
525      FINLEY_DLL_API
526      virtual int getTransportTypeId(const int solver, const int preconditioner, const int package, const bool symmetry) const;
527    
528    /**    /**
529       \brief       \brief
# Line 437  class MeshAdapter : public escript::Abst Line 550  class MeshAdapter : public escript::Abst
550       This has to be implemented by the actual Domain adapter.       This has to be implemented by the actual Domain adapter.
551    */    */
552    FINLEY_DLL_API    FINLEY_DLL_API
553    virtual void saveVTK(const std::string& filename,const boost::python::dict& arg) const;    virtual void saveVTK(const std::string& filename,const boost::python::dict& arg,  const std::string& metadata, const std::string& metadata_schema) const;
554    
555      FINLEY_DLL_API
556      virtual bool ownSample(int fs_code, index_t id) const;
557    
558    /**    /**
559       \brief       \brief
# Line 457  class MeshAdapter : public escript::Abst Line 573  class MeshAdapter : public escript::Abst
573                       const escript::Data& D, const escript::Data& X, const escript::Data& Y,                       const escript::Data& D, const escript::Data& X, const escript::Data& Y,
574                       const escript::Data& d, const escript::Data& y,                       const escript::Data& d, const escript::Data& y,
575                       const escript::Data& d_contact, const escript::Data& y_contact) const;                       const escript::Data& d_contact, const escript::Data& y_contact) const;
576      /**
577         \brief
578         adds a PDE onto the lumped stiffness matrix matrix
579      */
580      FINLEY_DLL_API
581      virtual void addPDEToLumpedSystem(
582                         escript::Data& mat,
583                         const escript::Data& D,
584                         const escript::Data& d) const;
585    
586    /**    /**
587       \brief       \brief
# Line 466  class MeshAdapter : public escript::Abst Line 591  class MeshAdapter : public escript::Abst
591    virtual void addPDEToRHS(escript::Data& rhs,    virtual void addPDEToRHS(escript::Data& rhs,
592                       const escript::Data& X, const escript::Data& Y,                       const escript::Data& X, const escript::Data& Y,
593                       const escript::Data& y, const escript::Data& y_contact) const;                       const escript::Data& y, const escript::Data& y_contact) const;
594      /**
595         \brief
596         adds a PDE onto a transport problem
597      */
598    
599      FINLEY_DLL_API
600      virtual void addPDEToTransportProblem(
601                         TransportProblemAdapter& tp, escript::Data& source,
602                         const escript::Data& M,
603                         const escript::Data& A, const escript::Data& B, const escript::Data& C,const  escript::Data& D,
604                         const  escript::Data& X,const  escript::Data& Y,
605                         const escript::Data& d, const escript::Data& y,
606                         const escript::Data& d_contact,const escript::Data& y_contact) const;
607    
608    
609    /**    /**
610       \brief       \brief
611      creates a SystemMatrixAdapter stiffness matrix an initializes it with zeros:      creates a SystemMatrixAdapter stiffness matrix and initializes it with zeros:
612    */    */
613    FINLEY_DLL_API    FINLEY_DLL_API
614    SystemMatrixAdapter newSystemMatrix(    SystemMatrixAdapter newSystemMatrix(
# Line 478  class MeshAdapter : public escript::Abst Line 617  class MeshAdapter : public escript::Abst
617                        const int column_blocksize,                        const int column_blocksize,
618                        const escript::FunctionSpace& column_functionspace,                        const escript::FunctionSpace& column_functionspace,
619                        const int type) const;                        const int type) const;
620      /**
621       \brief
622        creates a TransportProblemAdapter
623    
624      */
625    
626      FINLEY_DLL_API
627      TransportProblemAdapter newTransportProblem(
628                          const double theta,
629                          const int blocksize,
630                          const escript::FunctionSpace& functionspace,
631                          const int type) const;
632    
633    /**    /**
634       \brief returns locations in the FEM nodes       \brief returns locations in the FEM nodes
# Line 501  class MeshAdapter : public escript::Abst Line 652  class MeshAdapter : public escript::Abst
652       \brief comparison operators       \brief comparison operators
653    */    */
654    FINLEY_DLL_API    FINLEY_DLL_API
655    virtual bool operator==(const AbstractDomain& other) const;    virtual bool operator==(const escript::AbstractDomain& other) const;
656    FINLEY_DLL_API    FINLEY_DLL_API
657    virtual bool operator!=(const AbstractDomain& other) const;    virtual bool operator!=(const escript::AbstractDomain& other) const;
658    
659    /**    /**
660       \brief assigns new tag newTag to all samples of functionspace with a positive       \brief assigns new tag newTag to all samples of functionspace with a positive
# Line 513  class MeshAdapter : public escript::Abst Line 664  class MeshAdapter : public escript::Abst
664    FINLEY_DLL_API    FINLEY_DLL_API
665    virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;    virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
666    
667      /**
668          \brief
669              return the number of tags in use and a pointer to an array with the number of tags in use
670      */
671      FINLEY_DLL_API
672      virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
673    
674      FINLEY_DLL_API
675      virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
676    
677    
678      /**
679         \brief Checks if this domain allows tags for the specified functionSpaceCode.
680      */
681      FINLEY_DLL_API
682      virtual
683      bool canTag(int functionSpaceCode) const;
684    
685    
686   protected:   protected:
687    
688   private:   private:
689      void extractArgsFromDict(const boost::python::dict& arg, int& numData,
690                                 char**& names, escriptDataC*& data,
691                                 escriptDataC**& dataPtr) const;
692    
693    //    //
694    // pointer to the externally created finley mesh    // pointer to the externally created finley mesh

Legend:
Removed from v.1059  
changed lines
  Added in v.2642

  ViewVC Help
Powered by ViewVC 1.1.26