1 #ifndef __PCPP_EXTENT_UTILS__ 2 #define __PCPP_EXTENT_UTILS__ 15 std::vector<bool> partDirection,
int partID,
17 std::vector<int> &numPartitions);
19 int Part1D(
const size_t iStart,
const size_t iEnd,
const size_t numPart,
const size_t partIndex,
20 size_t &partStart,
size_t &partEnd);
25 const std::vector<int> &cartDims,
26 const std::vector<int> &cartCoords,
28 std::ostream &messageStream);
31 const std::vector<int> &cartDims,
32 const std::vector<int> &cartCoords,
34 std::ostream &messageStream);
40 std::vector<pcpp::IndexIntervalType>
UniqueUnion(
const std::vector<pcpp::IndexIntervalType> &intervalSet);
52 template<
typename BufferDataType>
57 const size_t *sourceIndices,
58 const size_t *targetIndices,
59 const BufferDataType *sourceBuffer,
60 BufferDataType *targetBuffer)
62 for(
int iComponent = 0;iComponent <
numComponents;iComponent++){
63 size_t sourceComp = iComponent*sourceSize;
64 size_t targComp = iComponent*targetSize;
65 for(
size_t iPoint = 0;iPoint <
numPoints;iPoint++){
66 size_t sourcePoint = sourceComp + sourceIndices[iPoint];
67 size_t targPoint = targComp + targetIndices[iPoint];
68 targetBuffer[targPoint] = sourceBuffer[sourcePoint];
74 template<
typename BufferDataType>
77 const BufferDataType *sourceBuffer,
78 const std::vector<size_t> &destSizes,
80 BufferDataType *destData)
82 size_t numSourcePoints = sourceInterval.
NNodes();
83 size_t numDestPoints = destInterval.
NNodes();
85 if(numSourcePoints != numDestPoints)
94 std::vector<size_t> sourceIndices;
95 std::vector<size_t> destIndices;
100 for(
int iPoint = 0;iPoint < numSourcePoints;iPoint++)
101 destBufferInterval[destIndices[iPoint]] =
102 sourceBufferInterval[sourceIndices[iPoint]];
std::vector< pcpp::IndexIntervalType > UniqueUnion(const std::vector< pcpp::IndexIntervalType > &intervalSet)
int SimplePartitionInterval(const pcpp::IndexIntervalType &inInterval, std::vector< bool > partDirection, int partID, int numPart, pcpp::IndexIntervalType &outInterval, std::vector< int > &numPartitions)
Multi-dimensional interval partitioning (non-MPI)
void GetFlatIndices(const sizeextent &extent, ContainerType &indices) const
void const size_t * numPoints
std::deque< size_t > PrimeFactors(size_t inNumber)
int Part1D(const size_t iStart, const size_t iEnd, const size_t numPart, const size_t partIndex, size_t &partStart, size_t &partEnd)
Extract a sub-interval of a 1-dimensional integer interval.
int SubIntervalFromStream(std::istream &inStream, const pcpp::IndexIntervalType &inInterval, pcpp::IndexIntervalType &subInterval)
int PartitionCartesianExtent(const pcpp::IndexIntervalType &globalExtent, const std::vector< int > &cartDims, const std::vector< int > &cartCoords, pcpp::IndexIntervalType &partExtent, std::ostream &messageStream)
Get local sub-interval of an n-dimensional integer interval.
int PartitionCartesianInterval(const pcpp::IndexIntervalType &globalExtent, const std::vector< int > &cartDims, const std::vector< int > &cartCoords, pcpp::IndexIntervalType &partExtent, std::ostream &messageStream)
Get local sub-interval of an n-dimensional integer interval.
int CopyInterval(const std::vector< size_t > &sourceSizes, const pcpp::IndexIntervalType &sourceInterval, const BufferDataType *sourceBuffer, const std::vector< size_t > &destSizes, const pcpp::IndexIntervalType &destInterval, BufferDataType *destData)
void CollapseInterval(size_t &xSize, size_t &ySize, size_t &zSize, const pcpp::IndexIntervalType &inInterval, pcpp::IndexIntervalType &outInterval)
void TransferBufferData(size_t numPoints, int numComponents, size_t sourceSize, size_t targetSize, const size_t *sourceIndices, const size_t *targetIndices, const BufferDataType *sourceBuffer, BufferDataType *targetBuffer)
Transfer data from a sized source buffer to a (different) sized target buffer.
Simple Block Structured Mesh object.
void size_t int * numComponents
void InitSimple(const ContainerType &inSize)