Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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
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
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
00468 BufferMapType m_x_buffer;
00469
00470
00471 BufferMapType m_normal_buffer;
00472
00473
00474 BufferMapType m_size_buffer;
00475
00476 };
00477
00478 }
00479
00480 #endif