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 "Pointers.h"
23 #include "DataTypes.h"
24 #include <esysUtils/Esys_MPI.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 
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 int getMPISize() const = 0;
71 
76  virtual int getMPIRank() const = 0;
77 
82  virtual void MPIBarrier() const = 0;
83 
88  virtual bool onMasterProcessor() const = 0;
89 
96  virtual MPI_Comm getMPIComm() const = 0;
97 
103  virtual bool isValidFunctionSpaceType(int functionSpaceType) const = 0;
104 
109  virtual std::string getDescription() const = 0;
110 
115  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const = 0;
116 
123  virtual int getDim() const = 0;
124 
129  virtual bool operator==(const AbstractDomain& other) const = 0;
130 
135  virtual bool operator!=(const AbstractDomain& other) const = 0;
136 
143  virtual void write(const std::string& filename) const = 0;
144 
151  virtual void dump(const std::string& filename) const = 0;
152 
164  virtual std::pair<int,dim_t> getDataShape(int functionSpaceCode) const = 0;
165 
172  virtual int getTagFromSampleNo(int functionSpaceType, index_t sampleNo) const = 0;
173 
180  virtual void setTagMap(const std::string& name, int tag) = 0;
181 
187  virtual int getTag(const std::string& name) const = 0;
188 
194  virtual bool isValidTagName(const std::string& name) const;
195 
200  virtual std::string showTagNames() const = 0;
201 
208  virtual const dim_t* borrowSampleReferenceIDs(int functionSpaceType) const = 0;
209 
216  virtual void setNewX(const escript::Data& arg) = 0;
217 
225  virtual void interpolateOnDomain(escript::Data& target, const escript::Data& source) const = 0;
226 
230  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,
231  int functionSpaceType_target) const = 0;
232 
242  virtual signed char preferredInterpolationOnDomain(
243  int functionSpaceType_source,
244  int functionSpaceType_target) const = 0;
245 
253  virtual bool
254  commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const = 0;
255 
262  virtual void interpolateAcross(escript::Data& target, const escript::Data& source) const = 0;
263 
264  virtual bool probeInterpolationAcross(int functionSpaceType_source,
265  const AbstractDomain& targetDomain,
266  int functionSpaceType_target) const = 0;
267 
272  virtual escript::Data getX() const = 0;
273 
278  virtual escript::Data getNormal() const = 0;
279 
284  virtual escript::Data getSize() const = 0;
285 
294  virtual void setToX(escript::Data& out) const = 0;
295 
304  virtual void setToNormal(escript::Data& out) const = 0;
305 
314  virtual void setToSize(escript::Data& out) const = 0;
315 
323  virtual void setToGradient(escript::Data& grad, const escript::Data& arg) const = 0;
324 
329  virtual bool ownSample(int fs_code, index_t id) const = 0;
330 
336  virtual void setTags(int functionSpaceType, int newTag, const escript::Data& mask) const = 0;
337 
345  virtual bool isCellOriented(int functionSpaceCode) const = 0;
346 
355  virtual StatusType getStatus() const;
356 
362  void throwStandardException(const std::string& functionName) const;
363 
369  virtual int getNumberOfTagsInUse(int functionSpaceCode) const = 0;
370 
371  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const = 0;
372 
376  virtual bool canTag(int functionspacecode) const = 0;
377 
381  virtual int getApproximationOrder(const int functionSpaceCode) const = 0;
382 
383  virtual bool supportsContactElements() const = 0;
384 
388  virtual bool supportsFilter(const boost::python::tuple& t) const;
389 
393  virtual escript::Data randomFill(const DataTypes::ShapeType& shape,
394  const FunctionSpace& what, long seed,
395  const boost::python::tuple& filter) const = 0;
396 };
397 
398 } // end of namespace
399 
400 #endif // __ESCRIPT_ABSTRACTDOMAIN_H__
401 
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:36
boost::shared_ptr< AbstractDomain > Domain_ptr
Definition: AbstractDomain.h:36
Definition: AbstractContinuousDomain.cpp:24
virtual ~AbstractDomain()
Destructor for AbstractDomain.
Definition: AbstractDomain.h:64
#define REFCOUNT_BASE_CLASS(x)
Definition: Pointers.h:29
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:38
int MPI_Comm
Definition: Esys_MPI.h:38
Typedefs and macros for reference counted storage.
int StatusType
Definition: AbstractDomain.h:48
Data represents a collection of datapoints.
Definition: Data.h:68
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 index_t
Definition: types.h:24
#define ESCRIPT_DLL_API
Definition: escriptcore/src/system_dep.h:54
index_t dim_t
Definition: types.h:27
Base class for all escript domains.
Definition: AbstractDomain.h:45
boost::shared_ptr< const AbstractDomain > const_Domain_ptr
Definition: AbstractDomain.h:39