ESYS13
Revision_
|
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