1#ifndef UTIL_MPI_LOADER_H
2#define UTIL_MPI_LOADER_H
11#include <util/containers/DArray.h>
12#include <util/containers/FArray.h>
13#include <util/containers/DMatrix.h>
14#include <util/mpi/MpiFileIo.h>
15#include <util/mpi/MpiTraits.h>
42 template <
class IArchive>
61 template <
typename Data>
62 void load(Data &value);
70 template <
typename Data>
71 void load(Data *value,
int n);
79 template <
typename Data>
87 template <
typename Data,
int N>
100 template <
typename Data>
void
101 load(Data* value,
int m,
int n,
int np);
110 template <
typename Data>
119 IArchive* archivePtr_;
126 template <
typename IArchive>
128 : mpiFileIoPtr_(&mpiFileIo),
129 archivePtr_(&archive)
135 template <
typename IArchive>
136 template <
typename Data>
139 if (mpiFileIoPtr_->isIoProcessor()) {
140 *archivePtr_ >> value;
143 if (mpiFileIoPtr_->hasIoCommunicator()) {
144 bcast<Data>(mpiFileIoPtr_->ioCommunicator(), value, 0);
152 template <
typename IArchive>
153 template <
typename Data>
156 if (mpiFileIoPtr_->isIoProcessor()) {
157 for (
int i = 0; i < n; ++i) {
158 *archivePtr_ >> value[i];
162 if (mpiFileIoPtr_->hasIoCommunicator()) {
163 bcast<Data>(mpiFileIoPtr_->ioCommunicator(), value, n, 0);
171 template <
typename IArchive>
172 template <
typename Data>
176 if (mpiFileIoPtr_->isIoProcessor()) {
177 *archivePtr_ >> array;
178 if (array.capacity() < n) {
183 if (mpiFileIoPtr_->hasIoCommunicator()) {
184 bcast<Data>(mpiFileIoPtr_->ioCommunicator(), array, n, 0);
192 template <
typename IArchive>
193 template <
typename Data,
int N>
196 if (mpiFileIoPtr_->isIoProcessor()) {
197 for (
int i = 0; i < N; ++i) {
198 *archivePtr_ >> array[i];
202 if (mpiFileIoPtr_->hasIoCommunicator()) {
203 bcast<Data>(mpiFileIoPtr_->ioCommunicator(), &(array[0]), N, 0);
211 template <
typename IArchive>
212 template <
typename Data>
216 if (mpiFileIoPtr_->isIoProcessor()) {
218 for (i = 0; i < m; ++i) {
219 for (j = 0; j < n; ++j) {
220 *archivePtr_ >> array[i*np + j];
225 if (mpiFileIoPtr_->hasIoCommunicator()) {
227 bcast<Data>(mpiFileIoPtr_->ioCommunicator(), &(array[0]), m*np, 0);
235 template <
typename IArchive>
236 template <
typename Data>
239 if (mpiFileIoPtr_->isIoProcessor()) {
240 *archivePtr_ >> matrix;
243 if (mpiFileIoPtr_->hasIoCommunicator()) {
244 bcast<Data>(mpiFileIoPtr_->ioCommunicator(), matrix, m, n, 0);
This file contains templates for global functions send<T>, recv<T> and bcast<T>.
Dynamically allocatable contiguous array template.
Dynamically allocated Matrix.
A fixed size (static) contiguous array template.
Identifies whether this processor may do file I/O.
Provides methods for MPI-aware loading of data from input archive.
void load(Data &value)
Load and broadcast a single Data value.
MpiLoader(MpiFileIo &mpiFileIo, IArchive &archive)
Constructor.
File containing preprocessor macros for error handling.
#define UTIL_THROW(msg)
Macro for throwing an Exception, reporting function, file and line number.
Utility classes for scientific computation.