ESYS13  Revision_
AbstractDomain.h
Go to the documentation of this file.
00001 
00002 /*******************************************************
00003 *
00004 * Copyright (c) 2003-2012 by University of Queensland
00005 * Earth Systems Science Computational Center (ESSCC)
00006 * http://www.uq.edu.au/esscc
00007 *
00008 * Primary Business: Queensland, Australia
00009 * Licensed under the Open Software License version 3.0
00010 * http://www.opensource.org/licenses/osl-3.0.php
00011 *
00012 *******************************************************/
00013 
00014 
00015 #if !defined escript_AbstractDomain_20040609_H
00016 #define escript_AbstractDomain_20040609_H
00017 
00018 #include "system_dep.h"
00019 
00020 #include <vector>
00021 #include <string>
00022 #include <map>
00023 #include <boost/python/dict.hpp>
00024 #include <boost/python/list.hpp>
00025 #include "esysUtils/Esys_MPI.h"
00026 
00027 
00028 #include "Pointers.h"
00029 
00030 namespace escript {
00031 // class forward declarations
00032 class Data;
00041 class AbstractDomain;
00042 
00043 typedef POINTER_WRAPPER_CLASS(AbstractDomain) Domain_ptr;
00044 typedef POINTER_WRAPPER_CLASS(const AbstractDomain) const_Domain_ptr;
00045 
00046 class AbstractDomain : public REFCOUNT_BASE_CLASS(AbstractDomain){
00047 
00048  public:
00049 
00056    ESCRIPT_DLL_API
00057    Domain_ptr getPtr();
00058    ESCRIPT_DLL_API
00059    const_Domain_ptr getPtr() const; 
00060 
00061    // structure holding values for X, size and normal
00062    typedef int StatusType;
00063    struct ValueBuffer
00064    {
00065        StatusType m_status;
00066        boost::shared_ptr<Data> m_data;
00067    };
00068    typedef struct ValueBuffer ValueBuffer;
00069 
00070    // 
00071    // map from function space type code to value buffer
00072    typedef std::map<int, ValueBuffer> BufferMapType;
00073 
00074 
00095   ESCRIPT_DLL_API
00096   AbstractDomain();
00097 
00105   ESCRIPT_DLL_API
00106   virtual ~AbstractDomain();
00107 
00112   ESCRIPT_DLL_API
00113   virtual int getMPISize() const;
00119   ESCRIPT_DLL_API
00120   virtual int getMPIRank() const;
00121 
00127   ESCRIPT_DLL_API
00128   virtual void MPIBarrier() const;
00134   ESCRIPT_DLL_API
00135   virtual bool onMasterProcessor() const;
00136 
00142   ESCRIPT_DLL_API
00143   virtual
00144 #ifdef ESYS_MPI
00145   MPI_Comm
00146 #else
00147   unsigned int
00148 #endif
00149   getMPIComm() const;
00150 
00156   ESCRIPT_DLL_API
00157   virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
00158 
00163   ESCRIPT_DLL_API
00164   virtual std::string getDescription() const;
00165 
00170   ESCRIPT_DLL_API
00171   virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
00172 
00179   ESCRIPT_DLL_API
00180   virtual int getDim() const;
00181 
00186   ESCRIPT_DLL_API
00187   virtual bool operator==(const AbstractDomain& other) const;
00188   ESCRIPT_DLL_API
00189   virtual bool operator!=(const AbstractDomain& other) const;
00190 
00197   ESCRIPT_DLL_API
00198   virtual void write(const std::string& filename) const;
00199 
00206   ESCRIPT_DLL_API
00207   virtual void dump(const std::string& filename) const;
00208 
00218   ESCRIPT_DLL_API
00219   virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
00220 
00227   ESCRIPT_DLL_API
00228   virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
00229 
00236   ESCRIPT_DLL_API
00237   virtual void setTagMap(const std::string& name,  int tag);
00238 
00244   ESCRIPT_DLL_API
00245   virtual int getTag(const std::string& name) const;
00246 
00252   ESCRIPT_DLL_API
00253   virtual bool isValidTagName(const std::string& name) const;
00254 
00259   ESCRIPT_DLL_API
00260   virtual std::string showTagNames() const;
00261 
00267   ESCRIPT_DLL_API
00268   virtual const int* borrowSampleReferenceIDs(int functionSpaceType) const;
00269 
00276   ESCRIPT_DLL_API
00277   virtual void setNewX(const escript::Data& arg);
00278 
00285   ESCRIPT_DLL_API
00286   virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
00287   ESCRIPT_DLL_API
00288   virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
00289 
00295   ESCRIPT_DLL_API
00296   virtual
00297   bool
00298   commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
00299 
00306   ESCRIPT_DLL_API
00307   virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
00308   ESCRIPT_DLL_API
00309   virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
00310 
00315   ESCRIPT_DLL_API
00316   virtual escript::Data getX() const;
00317 
00322   ESCRIPT_DLL_API
00323   virtual escript::Data getNormal() const;
00324 
00329   ESCRIPT_DLL_API
00330   virtual escript::Data getSize() const;
00331   
00340   ESCRIPT_DLL_API
00341   virtual void setToX(escript::Data& out) const;
00342 
00351   ESCRIPT_DLL_API
00352   virtual void setToNormal(escript::Data& out) const;
00353 
00362   ESCRIPT_DLL_API
00363   virtual void setToSize(escript::Data& out) const;
00364 
00372   ESCRIPT_DLL_API
00373   virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
00380   ESCRIPT_DLL_API
00381   virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
00382 
00390   ESCRIPT_DLL_API
00391   virtual void saveVTK(const std::string& filename,const boost::python::dict& arg, const std::string& metadata, const std::string& metadata_schema) const;
00392 
00397   ESCRIPT_DLL_API
00398   virtual bool ownSample(int fs_code, index_t id) const;
00399 
00405   ESCRIPT_DLL_API
00406   virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
00407 
00415   ESCRIPT_DLL_API
00416   virtual bool isCellOriented(int functionSpaceCode) const;
00417 
00426   ESCRIPT_DLL_API
00427   virtual StatusType getStatus() const;
00428 
00434   ESCRIPT_DLL_API
00435   void throwStandardException(const std::string& functionName) const;
00436 
00441   ESCRIPT_DLL_API
00442   virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
00443 
00444   ESCRIPT_DLL_API
00445   virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
00446 
00450   ESCRIPT_DLL_API
00451   virtual bool canTag(int functionspacecode) const;
00452 
00457    ESCRIPT_DLL_API
00458    virtual int getApproximationOrder(const int functionSpaceCode) const;
00459 
00460    ESCRIPT_DLL_API
00461    virtual bool supportsContactElements() const;
00462 
00463  protected:
00464 
00465  private:
00466 
00467    // buffer for coordinates used by function spaces
00468    BufferMapType m_x_buffer;
00469 
00470    // buffer for normal vectors used by function spaces
00471    BufferMapType m_normal_buffer;
00472 
00473    // buffer for normal element size used by function spaces
00474    BufferMapType m_size_buffer;
00475 
00476 };
00477 
00478 } // end of namespace
00479 
00480 #endif