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 <string>
00021 #include <map>
00022 #include <boost/python/dict.hpp>
00023 #include <boost/python/list.hpp>
00024 #include "paso/Paso_MPI.h"
00025
00026
00027 #include "Pointers.h"
00028
00029 namespace escript {
00030
00031 class Data;
00040 class AbstractDomain;
00041
00042 typedef POINTER_WRAPPER_CLASS(AbstractDomain) Domain_ptr;
00043 typedef POINTER_WRAPPER_CLASS(const AbstractDomain) const_Domain_ptr;
00044
00045 class AbstractDomain : public REFCOUNT_BASE_CLASS(AbstractDomain){
00046
00047 public:
00048
00055 ESCRIPT_DLL_API
00056 Domain_ptr getPtr();
00057 ESCRIPT_DLL_API
00058 const_Domain_ptr getPtr() const;
00059
00060
00061 typedef int StatusType;
00062 struct ValueBuffer
00063 {
00064 StatusType m_status;
00065 boost::shared_ptr<Data> m_data;
00066 };
00067 typedef struct ValueBuffer ValueBuffer;
00068
00069
00070
00071 typedef std::map<int, ValueBuffer> BufferMapType;
00072
00073
00094 ESCRIPT_DLL_API
00095 AbstractDomain();
00096
00104 ESCRIPT_DLL_API
00105 virtual ~AbstractDomain();
00106
00111 ESCRIPT_DLL_API
00112 virtual int getMPISize() const;
00118 ESCRIPT_DLL_API
00119 virtual int getMPIRank() const;
00120
00126 ESCRIPT_DLL_API
00127 virtual void MPIBarrier() const;
00133 ESCRIPT_DLL_API
00134 virtual bool onMasterProcessor() const;
00135
00136
00137
00143 ESCRIPT_DLL_API
00144 virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
00145
00150 ESCRIPT_DLL_API
00151 virtual std::string getDescription() const;
00152
00157 ESCRIPT_DLL_API
00158 virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
00159
00166 ESCRIPT_DLL_API
00167 virtual int getDim() const;
00168
00173 ESCRIPT_DLL_API
00174 virtual bool operator==(const AbstractDomain& other) const;
00175 ESCRIPT_DLL_API
00176 virtual bool operator!=(const AbstractDomain& other) const;
00177
00184 ESCRIPT_DLL_API
00185 virtual void write(const std::string& filename) const;
00186
00193 ESCRIPT_DLL_API
00194 virtual void dump(const std::string& filename) const;
00195
00205 ESCRIPT_DLL_API
00206 virtual std::pair<int,int> getDataShape(int functionSpaceCode) const;
00207
00214 ESCRIPT_DLL_API
00215 virtual int getTagFromSampleNo(int functionSpaceType, int sampleNo) const;
00216
00223 ESCRIPT_DLL_API
00224 virtual void setTagMap(const std::string& name, int tag);
00225
00231 ESCRIPT_DLL_API
00232 virtual int getTag(const std::string& name) const;
00233
00239 ESCRIPT_DLL_API
00240 virtual bool isValidTagName(const std::string& name) const;
00241
00246 ESCRIPT_DLL_API
00247 virtual std::string showTagNames() const;
00248
00254 ESCRIPT_DLL_API
00255 virtual const int* borrowSampleReferenceIDs(int functionSpaceType) const;
00256
00263 ESCRIPT_DLL_API
00264 virtual void setNewX(const escript::Data& arg);
00265
00272 ESCRIPT_DLL_API
00273 virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
00274 ESCRIPT_DLL_API
00275 virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
00276
00283 ESCRIPT_DLL_API
00284 virtual void interpolateACross(escript::Data& target, const escript::Data& source) const;
00285 ESCRIPT_DLL_API
00286 virtual bool probeInterpolationACross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
00287
00292 ESCRIPT_DLL_API
00293 virtual escript::Data getX() const;
00294
00299 ESCRIPT_DLL_API
00300 virtual escript::Data getNormal() const;
00301
00306 ESCRIPT_DLL_API
00307 virtual escript::Data getSize() const;
00308
00317 ESCRIPT_DLL_API
00318 virtual void setToX(escript::Data& out) const;
00319
00328 ESCRIPT_DLL_API
00329 virtual void setToNormal(escript::Data& out) const;
00330
00339 ESCRIPT_DLL_API
00340 virtual void setToSize(escript::Data& out) const;
00341
00349 ESCRIPT_DLL_API
00350 virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const;
00357 ESCRIPT_DLL_API
00358 virtual void saveDX(const std::string& filename,const boost::python::dict& arg) const;
00359
00367 ESCRIPT_DLL_API
00368 virtual void saveVTK(const std::string& filename,const boost::python::dict& arg, const std::string& metadata, const std::string& metadata_schema) const;
00369
00375 ESCRIPT_DLL_API
00376 virtual void setTags(const int functionSpaceType, const int newTag, const escript::Data& mask) const;
00377
00385 ESCRIPT_DLL_API
00386 virtual bool isCellOriented(int functionSpaceCode) const;
00387
00396 ESCRIPT_DLL_API
00397 virtual StatusType getStatus() const;
00398
00404 ESCRIPT_DLL_API
00405 void throwStandardException(const std::string& functionName) const;
00406
00411 ESCRIPT_DLL_API
00412 virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
00413
00414 ESCRIPT_DLL_API
00415 virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
00416
00420 ESCRIPT_DLL_API
00421 virtual bool canTag(int functionspacecode) const;
00422
00423 protected:
00424
00425 private:
00426
00427
00428 BufferMapType m_x_buffer;
00429
00430
00431 BufferMapType m_normal_buffer;
00432
00433
00434 BufferMapType m_size_buffer;
00435
00436 };
00437
00438 }
00439
00440 #endif