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> >;
44 template<
typename T>
using const_Coupler_ptr = boost::shared_ptr<const Coupler<T> >;
54 if (s->local_length != r->local_length) {
56 "SharedComponents must match.");
78 new_send_shcomp =
send;
79 new_recv_shcomp =
recv;
81 out.reset(
new Connector(new_send_shcomp, new_recv_shcomp));
99 template<
typename Scalar>
107 void copyAll(Coupler_ptr<Scalar> target)
const;
117 return connector->send->numSharedComponents;
122 return connector->recv->numSharedComponents;
156 #endif // __PASO_COUPLER_H__
void gradient_order3(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:96
int MPI_Status
Definition: EsysMPI.h:44
dim_t block_size
Definition: Coupler.h:153
SharedComponents_ptr recv
Definition: Coupler.h:62
void reduction_order2(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:37
void integral_order2(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:37
void gradient_order2(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:37
double real_t
type of all real-valued scalars in escript
Definition: DataTypes.h:76
boost::shared_ptr< const Coupler< T > > const_Coupler_ptr
Definition: Coupler.h:56
const Scalar * borrowLocalData() const
Definition: Coupler.h:123
void reduction_order10(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:246
dim_t getNumSharedValues() const
Definition: Coupler.h:137
void gradient_order6(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:280
const Scalar * borrowRemoteData() const
Definition: Coupler.h:125
void copyAll(Coupler_ptr< Scalar > target) const
Definition: Coupler.cpp:143
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:1243
boost::shared_ptr< const Connector > const_Connector_ptr
Definition: Coupler.h:52
#define INDEX4(_X1_, _X2_, _X3_, _X4_, _N1_, _N2_, _N3_)
Definition: index.h:26
void gradient_order10(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:542
dim_t getNumOverlapValues() const
Definition: Coupler.h:142
void reduction_order4(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:90
void gradient_order7(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:344
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:1988
void integral_order6(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:154
void integral_order5(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:125
void gradient_order4(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:155
void integral_order3(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:67
const_Connector_ptr connector
Definition: Coupler.h:152
void reduction_order3(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:64
Scalar * send_buffer
Definition: Coupler.h:158
Definition: SharedComponents.h:53
Connector_ptr copy() const
creates a copy
Definition: Coupler.h:75
#define INDEX5(_X1_, _X2_, _X3_, _X4_, _X5_, _N1_, _N2_, _N3_, _N4_)
Definition: index.h:28
int getDataPointSize() const
Return the size of the data point. It is the product of the data point shape dimensions.
Definition: Data.cpp:1364
void integral_order4(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:96
escript::JMPI mpi_info
Definition: Coupler.h:162
void integral_order7(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:183
Definition: AbstractAssembler.cpp:18
void startCollect(const Scalar *in)
Definition: Coupler.cpp:78
MPI_Status * mpi_stati
Definition: Coupler.h:161
Data represents a collection of datapoints.
Definition: Data.h:63
Coupler(const_Connector_ptr, dim_t blockSize, escript::JMPI mpiInfo)
Definition: Coupler.cpp:42
#define INDEX3(_X1_, _X2_, _X3_, _N1_, _N2_)
Definition: index.h:24
index_t dim_t
Definition: DataTypes.h:90
boost::shared_ptr< JMPI_ > JMPI
Definition: EsysMPI.h:71
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:1953
boost::shared_ptr< Coupler< T > > Coupler_ptr
Definition: Coupler.h:55
void gradient_order8(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:409
void reduction_order7(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:168
void max(dim_t n, Scalar *x)
Scalar * finishCollect()
Definition: Coupler.cpp:126
dim_t getNumSharedComponents() const
Definition: Coupler.h:127
void integral_order8(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:212
MPI_Request * mpi_requests
Definition: Coupler.h:160
~Coupler()
Definition: Coupler.cpp:67
boost::shared_ptr< SharedComponents > SharedComponents_ptr
Definition: SharedComponents.h:48
bool in_use
Definition: Coupler.h:154
void integral_order9(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:241
Connector_ptr unroll(index_t block_size) const
Definition: Coupler.h:77
double m_dx[3]
grid spacings / cell sizes of domain
Definition: speckley/src/Brick.h:383
#define MPI_DOUBLE
Definition: EsysMPI.h:46
dim_t getNumOverlapComponents() const
Definition: Coupler.h:132
void gradient_order9(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:475
PasoException exception class.
Definition: PasoException.h:45
Scalar * recv_buffer
Definition: Coupler.h:159
void integral_order10(std::vector< Scalar > &, const escript::Data &) const
Definition: BrickIntegrals.cpp:270
int index_t
type for array/matrix indices used both globally and on each rank
Definition: DataTypes.h:85
dim_t m_NE[3]
number of elements for this rank in each dimension including shared
Definition: speckley/src/Brick.h:389
void gradient_order5(escript::Data &, const escript::Data &) const
Definition: BrickGradients.cpp:217
Scalar * data
Definition: Coupler.h:157
#define PASO_DLL_API
Definition: Paso.h:59
void reduction_order5(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:116
void fillOverlap(dim_t n, Scalar *x)
Definition: Coupler.cpp:161
SharedComponents_ptr send
Definition: Coupler.h:61
void reduction_order6(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:142
int MPI_Request
Definition: EsysMPI.h:42
boost::shared_ptr< Connector > Connector_ptr
Definition: Coupler.h:50
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:1122
Definition: BiCGStab.cpp:26
std::complex< real_t > cplx_t
complex data type
Definition: DataTypes.h:79
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:62
Connector(SharedComponents_ptr s, SharedComponents_ptr r)
Definition: Coupler.h:64
void reduction_order9(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:220
dim_t getLocalLength() const
Definition: Coupler.h:147
void reduction_order8(const escript::Data &, escript::Data &) const
Definition: BrickReductions.cpp:194