escript  Revision_
TestDomain.h
Go to the documentation of this file.
1 
2 /*****************************************************************************
3 *
4 * Copyright (c) 2003-2020 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-2017 by Centre for Geoscience Computing (GeoComp)
14 * Development from 2019 by School of Earth and Environmental Sciences
15 **
16 *****************************************************************************/
17 
18 #ifndef __ESCRIPT_TESTDOMAIN_H__
19 #define __ESCRIPT_TESTDOMAIN_H__
20 
21 #include "system_dep.h"
22 #include "NullDomain.h"
23 #include <vector>
24 
25 namespace escript {
26 
43 {
44 public:
45  TestDomain(int pointspersample, int numsamples, int dpsize=1);
46 
47  virtual ~TestDomain();
48 
49  virtual int getMPISize() const;
50  virtual int getMPIRank() const;
51  virtual void MPIBarrier() const;
52  virtual bool onMasterProcessor() const;
53 
54  virtual escript::JMPI getMPI() const;
55 
56  virtual bool isValidFunctionSpaceType(int functionSpaceType) const;
57 
58  virtual std::string getDescription() const;
59 
60  virtual std::string functionSpaceTypeAsString(int functionSpaceType) const;
61 
62  virtual void interpolateOnDomain(escript::Data& target,const escript::Data& source) const;
63 
64  virtual bool probeInterpolationOnDomain(int functionSpaceType_source,int functionSpaceType_target) const;
65 
66  bool commonFunctionSpace(const std::vector<int>& fs, int& resultcode) const;
67 
68  virtual escript::Data getX() const;
69 
70  virtual void interpolateAcross(escript::Data& target, const escript::Data& source) const;
71 
72  virtual bool probeInterpolationAcross(int functionSpaceType_source,const AbstractDomain& targetDomain, int functionSpaceType_target) const;
73 
74  virtual int getDefaultCode() const;
75  virtual int getContinuousFunctionCode() const;
76  virtual int getFunctionCode() const;
77  virtual int getFunctionOnBoundaryCode() const;
78  virtual int getFunctionOnContactZeroCode() const;
79  virtual int getFunctionOnContactOneCode() const;
80  virtual int getSolutionCode() const;
81  virtual int getReducedSolutionCode() const;
82  virtual int getDiracDeltaFunctionsCode() const;
83 
84  virtual std::pair<int,DataTypes::dim_t> getDataShape(int functionSpaceCode) const;
85 
86  virtual int getTagFromSampleNo(int functionSpaceType, DataTypes::index_t sampleNo) const;
87 
88  virtual const DataTypes::dim_t* borrowSampleReferenceIDs(int functionSpaceType) const;
89 
90  virtual int getDim() const;
91 
92  virtual bool operator==(const AbstractDomain& other) const;
93 
94  virtual bool operator!=(const AbstractDomain& other) const;
95 
96  virtual bool canTag(int functionSpaceCode) const;
97 
98  virtual int getNumberOfTagsInUse(int functionSpaceCode) const;
99 
100  virtual const int* borrowListOfTagsInUse(int functionSpaceCode) const;
101 
102  virtual escript::Data randomFill(const DataTypes::ShapeType& shape,
103  const FunctionSpace& what, long seed,
104  const boost::python::tuple& filter) const;
105 
106  void addUsedTag(int t);
107  void clearUsedTags();
108  void assignTags(std::vector<int> t);
109  void resetTagAssignments();
110 
111 private:
112  DataTypes::dim_t m_totalsamples; // samples in all worlds
113  DataTypes::dim_t m_samples; // number of samples
116 
117 
118  int m_dpps; // data points per sample
119  int m_dpsize; // how big are the datapoints?
120  DataTypes::dim_t* m_samplerefids; // sample reference ids
121 
122  std::vector<int> mytags;
123  std::vector<int> tag_assignment; // which tag is assigned to each sample
124  // to make testing easier, the tags in use list is
125  // controlled separately
127 };
128 
130 FunctionSpace getTestDomainFunctionSpace(int dpps, DataTypes::dim_t samples, int dpsize);
131 
132 } // end of namespace
133 
134 #endif // __ESCRIPT_TESTDOMAIN_H__
135 
Base class for all escript domains.
Definition: AbstractDomain.h:51
Data represents a collection of datapoints.
Definition: Data.h:64
Definition: FunctionSpace.h:36
NullDomain provides a null value for domain. Needed for the construction of a default FunctionSpace.
Definition: NullDomain.h:41
(Testing use only) Provides a domain to wrap a collection of values.
Definition: TestDomain.h:43
std::vector< int > tag_assignment
Definition: TestDomain.h:123
int m_dpps
Definition: TestDomain.h:118
int m_dpsize
Definition: TestDomain.h:119
DataTypes::dim_t * m_samplerefids
Definition: TestDomain.h:120
escript::JMPI myworld
Definition: TestDomain.h:126
DataTypes::dim_t m_endsample
Definition: TestDomain.h:115
DataTypes::dim_t m_samples
Definition: TestDomain.h:113
DataTypes::dim_t m_totalsamples
Definition: TestDomain.h:112
std::vector< int > mytags
Definition: TestDomain.h:122
DataTypes::dim_t m_originsample
Definition: TestDomain.h:114
#define ESCRIPT_DLL_API
Definition: escriptcore/src/system_dep.h:30
std::vector< int > ShapeType
The shape of a single datapoint.
Definition: DataTypes.h:44
index_t dim_t
Definition: DataTypes.h:66
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
Definition: AbstractContinuousDomain.cpp:23
FunctionSpace getTestDomainFunctionSpace(int dpps, DataTypes::dim_t samples, int dpsize)
Definition: TestDomain.cpp:338
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
bool probeInterpolationAcross(int fsType_source, const escript::AbstractDomain &domain, int fsType_target, int dim)
Definition: CrossDomainCoupler.cpp:32