escript  Revision_
AbstractDomain.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2016 by The University of Queensland
5 * http://www.uq.edu.au
6 *
7 * Primary Business: Queensland, Australia
8 * Licensed under the Apache License, version 2.0
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
12 * Development 2012-2013 by School of Earth Sciences
13 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
14 *
15 *****************************************************************************/
16 
17 
18 #ifndef __ESCRIPT_ABSTRACTDOMAIN_H__
19 #define __ESCRIPT_ABSTRACTDOMAIN_H__
20 
21 #include "system_dep.h"
22 #include "DataTypes.h"
23 #include "EsysMPI.h"
24 #include "Pointers.h"
25 
26 #include <boost/python/tuple.hpp>
27 
28 #include <vector>
29 #include <string>
30 
31 namespace escript {
32 
33 // class forward declarations
34 class Data;
35 class FunctionSpace;
37 
40 
45 class ESCRIPT_DLL_API AbstractDomain: public REFCOUNT_BASE_CLASS(AbstractDomain)
46 {
47 public:
48  typedef int StatusType;
49 
56  Domain_ptr getPtr();
57 
58  const_Domain_ptr getPtr() const;
59 
64  virtual ~AbstractDomain() {}
65 
70  virtual JMPI getMPI() const = 0;
71 
76  virtual int getMPISize() const = 0;
77 
82  virtual int getMPIRank() const = 0;
83 
88  virtual void MPIBarrier() const = 0;
89 
94  virtual bool onMasterProcessor() const = 0;
95 
102  virtual MPI_Comm getMPIComm() const = 0;
103 
109  virtual bool isValidFunctionSpaceType(int functionSpaceType) const = 0;
110 
115  virtual std::string getDescription() const = 0;
116 
121  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const = 0;
122 
129  virtual int getDim() const = 0;
130 
135  virtual bool operator==(const AbstractDomain& other) const = 0;
136 
141  virtual bool operator!=(const AbstractDomain& other) const = 0;
142 
149  virtual void write(const std::string& filename) const = 0;
150 
157  virtual void dump(const std::string& filename) const = 0;
158 
170  virtual std::pair<int,DataTypes::dim_t> getDataShape(int functionSpaceCode) const = 0;
171 
178  virtual int getTagFromSampleNo(int functionSpaceType, DataTypes::index_t sampleNo) const = 0;
179 
186  virtual void setTagMap(const std::string& name, int tag) = 0;
187 
193  virtual int getTag(const std::string& name) const = 0;
194 
200  virtual bool isValidTagName(const std::string& name) const;
201 
206  virtual std::string showTagNames() const = 0;
207 
214  virtual const DataTypes::dim_t* borrowSampleReferenceIDs(int functionSpaceType) const = 0;
215 
222  virtual void setNewX(const escript::Data& arg) = 0;
223 
231  virtual void interpolateOnDomain(escript::Data& target, const escript::Data& source) const = 0;
232 
236  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,
237  int functionSpaceType_target) const = 0;
238 
248  virtual signed char preferredInterpolationOnDomain(
249  int functionSpaceType_source,
250  int functionSpaceType_target) const = 0;
251 
259  virtual bool
260  commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const = 0;
261 
268  virtual void interpolateAcross(escript::Data& target, const escript::Data& source) const = 0;
269 
270  virtual bool probeInterpolationAcross(int functionSpaceType_source,
271  const AbstractDomain& targetDomain,
272  int functionSpaceType_target) const = 0;
273 
278  virtual escript::Data getX() const = 0;
279 
284  virtual escript::Data getNormal() const = 0;
285 
290  virtual escript::Data getSize() const = 0;
291 
300  virtual void setToX(escript::Data& out) const = 0;
301 
310  virtual void setToNormal(escript::Data& out) const = 0;
311 
320  virtual void setToSize(escript::Data& out) const = 0;
321 
329  virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const = 0;
330 
335  virtual bool ownSample(int fs_code, DataTypes::index_t id) const = 0;
336 
342  virtual void setTags(int functionSpaceType, int newTag, const escript::Data& mask) const = 0;
343 
351  virtual bool isCellOriented(int functionSpaceCode) const = 0;
352 
361  virtual StatusType getStatus() const;
362 
368  void throwStandardException(const std::string& functionName) const;
369 
375  virtual int getNumberOfTagsInUse(int functionSpaceCode) const = 0;
376 
377  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const = 0;
378 
382  virtual bool canTag(int functionspacecode) const = 0;
383 
387  virtual int getApproximationOrder(const int functionSpaceCode) const = 0;
388 
389  virtual bool supportsContactElements() const = 0;
390 
394  virtual bool supportsFilter(const boost::python::tuple& t) const;
395 
399  virtual escript::Data randomFill(const DataTypes::ShapeType& shape,
400  const FunctionSpace& what, long seed,
401  const boost::python::tuple& filter) const = 0;
402 };
403 
404 } // end of namespace
405 
406 #endif // __ESCRIPT_ABSTRACTDOMAIN_H__
407 
Definition: FunctionSpace.h:34
#define POINTER_WRAPPER_CLASS(x)
Definition: Pointers.h:32
bool probeInterpolationAcross(int fsType_source, const escript::AbstractDomain &domain, int fsType_target, int dim)
Definition: CrossDomainCoupler.cpp:31
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:36
Definition: AbstractContinuousDomain.cpp:22
virtual ~AbstractDomain()
Destructor for AbstractDomain.
Definition: AbstractDomain.h:64
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
#define REFCOUNT_BASE_CLASS(x)
Definition: Pointers.h:30
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:42
Typedefs and macros for reference counted storage.
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:59
int StatusType
Definition: AbstractDomain.h:48
Data represents a collection of datapoints.
Definition: Data.h:63
int getTag(unsigned char sourcex, unsigned char sourcey, unsigned char sourcez, unsigned char targetx, unsigned char targety, unsigned char targetz)
Definition: blocktools.cpp:412
int MPI_Comm
Definition: EsysMPI.h:41
#define ESCRIPT_DLL_API
Definition: escriptcore/src/system_dep.h:29
Base class for all escript domains.
Definition: AbstractDomain.h:45
boost::shared_ptr< const AbstractDomain > const_Domain_ptr
Definition: AbstractDomain.h:39
index_t dim_t
Definition: DataTypes.h:64