Go to the documentation of this file.
29 #ifndef __PASO_COUPLER_H__
30 #define __PASO_COUPLER_H__
42 template<
typename Scalar>
struct Coupler;
43 template<
typename T>
using Coupler_ptr = boost::shared_ptr<Coupler<T> >;
53 if (s->local_length != r->local_length) {
54 throw PasoException(
"Connector: local length of send and recv "
55 "SharedComponents must match.");
70 send->neighbour, send->shared, send->offsetInShared,
74 recv->neighbour, recv->shared, recv->offsetInShared,
77 new_send_shcomp = send;
78 new_recv_shcomp = recv;
80 out.reset(
new Connector(new_send_shcomp, new_recv_shcomp));
98 template<
typename Scalar>
104 void startCollect(
const Scalar* in);
116 return connector->send->numSharedComponents;
121 return connector->recv->numSharedComponents;
126 return getNumSharedComponents() * block_size;
131 return getNumOverlapComponents() * block_size;
136 return connector->send->local_length;
155 #endif // __PASO_COUPLER_H__
void gradient_order3(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:84
int MPI_Status
Definition: EsysMPI.h:47
dim_t block_size
Definition: Coupler.h:140
SharedComponents_ptr recv
Definition: Coupler.h:49
void reduction_order2(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:25
void integral_order2(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:25
#define PASO_DLL_API
Definition: paso/src/system_dep.h:29
void gradient_order2(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:25
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:52
boost::shared_ptr< const Coupler< T > > const_Coupler_ptr
Definition: Coupler.h:44
const Scalar * borrowLocalData() const
Definition: Coupler.h:110
void reduction_order10(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:234
dim_t getNumSharedValues() const
Definition: Coupler.h:124
void gradient_order6(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:268
const Scalar * borrowRemoteData() const
Definition: Coupler.h:112
void copyAll(Coupler_ptr< Scalar > target) const
Definition: Coupler.cpp:131
void requireWrite()
Ensures data is ready for write access. This means that the data will be resolved if lazy and will be...
Definition: Data.cpp:1239
boost::shared_ptr< const Connector > const_Connector_ptr
Definition: Coupler.h:40
#define INDEX4(_X1_, _X2_, _X3_, _X4_, _N1_, _N2_, _N3_)
Definition: index.h:27
void gradient_order10(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:530
dim_t getNumOverlapValues() const
Definition: Coupler.h:129
void reduction_order4(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:78
void gradient_order7(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:332
const DataTypes::real_t * getSampleDataRO(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0) const
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1991
Definition: Coupler.h:100
void integral_order6(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:142
void integral_order5(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:113
void gradient_order4(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:143
void integral_order3(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:55
const_Connector_ptr connector
Definition: Coupler.h:139
void reduction_order3(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:52
Scalar * send_buffer
Definition: Coupler.h:145
Definition: SharedComponents.h:41
Connector_ptr copy() const
creates a copy
Definition: Coupler.h:62
#define INDEX5(_X1_, _X2_, _X3_, _X4_, _X5_, _N1_, _N2_, _N3_, _N4_)
Definition: index.h:29
int getDataPointSize() const
Return the size of the data point. It is the product of the data point shape dimensions.
Definition: Data.cpp:1360
void integral_order4(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:84
escript::JMPI mpi_info
Definition: Coupler.h:149
void integral_order7(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:171
Definition: AbstractAssembler.cpp:19
void startCollect(const Scalar *in)
Definition: Coupler.cpp:66
MPI_Status * mpi_stati
Definition: Coupler.h:148
Data represents a collection of datapoints.
Definition: Data.h:64
Coupler(const_Connector_ptr, dim_t blockSize, escript::JMPI mpiInfo)
Definition: Coupler.cpp:30
#define INDEX3(_X1_, _X2_, _X3_, _N1_, _N2_)
Definition: index.h:25
index_t dim_t
Definition: DataTypes.h:66
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:74
DataTypes::real_t * getSampleDataRW(DataTypes::RealVectorType::size_type sampleNo, DataTypes::real_t dummy=0)
Return the sample data for the given sample no. Please do not use this unless you NEED to access samp...
Definition: Data.h:1956
boost::shared_ptr< Coupler< T > > Coupler_ptr
Definition: Coupler.h:43
void gradient_order8(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:397
void reduction_order7(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:156
void max(dim_t n, Scalar *x)
Scalar * finishCollect()
Definition: Coupler.cpp:114
dim_t getNumSharedComponents() const
Definition: Coupler.h:114
void integral_order8(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:200
MPI_Request * mpi_requests
Definition: Coupler.h:147
~Coupler()
Definition: Coupler.cpp:55
boost::shared_ptr< SharedComponents > SharedComponents_ptr
Definition: SharedComponents.h:36
bool in_use
Definition: Coupler.h:141
void integral_order9(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:229
Connector_ptr unroll(index_t block_size) const
Definition: Coupler.h:64
double m_dx[3]
grid spacings / cell sizes of domain
Definition: speckley/src/Brick.h:358
#define MPI_DOUBLE
Definition: EsysMPI.h:49
dim_t getNumOverlapComponents() const
Definition: Coupler.h:119
void gradient_order9(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:463
PasoException exception class.
Definition: PasoException.h:34
Scalar * recv_buffer
Definition: Coupler.h:146
void integral_order10(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:258
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:61
dim_t m_NE[3]
number of elements for this rank in each dimension including shared
Definition: speckley/src/Brick.h:364
void gradient_order5(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:205
Scalar * data
Definition: Coupler.h:144
void reduction_order5(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:104
void fillOverlap(dim_t n, Scalar *x)
Definition: Coupler.cpp:149
SharedComponents_ptr send
Definition: Coupler.h:48
void reduction_order6(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:130
int MPI_Request
Definition: EsysMPI.h:45
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:38
bool actsExpanded() const
Return true if this Data is expanded or resolves to expanded. That is, if it has a separate value for...
Definition: Data.cpp:1118
Definition: BiCGStab.cpp:25
std::complex< real_t > cplx_t
complex data type
Definition: DataTypes.h:55
Data Scalar(double value, const FunctionSpace &what, bool expanded)
A collection of factory functions for creating Data objects which contain data points of various shap...
Definition: DataFactory.cpp:49
Connector(SharedComponents_ptr s, SharedComponents_ptr r)
Definition: Coupler.h:51
void reduction_order9(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:208
dim_t getLocalLength() const
Definition: Coupler.h:134
void reduction_order8(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:182