44 #ifndef ROLTEUCHOSBATCHMANAGER_HPP 45 #define ROLTEUCHOSBATCHMANAGER_HPP 48 #include "Teuchos_RCP.hpp" 49 #include "Teuchos_Comm.hpp" 50 #include "Teuchos_CommHelpers.hpp" 54 template<
class Real,
class Ordinal>
57 const Teuchos::RCP<const Teuchos::Comm<Ordinal> >
comm_;
64 return Teuchos::rank<Ordinal>(*comm_);
68 return Teuchos::size<Ordinal>(*comm_);
72 const Elementwise::ReductionOp<Real> &r) {
74 std::vector<Real> receiveBuffer(nB);
75 Teuchos::gather<Ordinal,Real>(input,1,&receiveBuffer[0],1,0,*
comm_);
76 output[0] = r.initialValue();
77 for (
int i = 0; i < nB; i++) {
78 r.reduce(receiveBuffer[i],output[0]);
80 Teuchos::broadcast<Ordinal,Real>(*
comm_,0,1,output);
83 void minAll(Real* input, Real* output,
int dim) {
84 Teuchos::reduceAll<Ordinal,Real>(*
comm_,Teuchos::REDUCE_MIN,
88 void maxAll(Real* input, Real* output,
int dim) {
89 Teuchos::reduceAll<Ordinal,Real>(*
comm_,Teuchos::REDUCE_MAX,
93 void sumAll(Real* input, Real* output,
int dim) {
94 Teuchos::reduceAll<Ordinal,Real>(*
comm_,Teuchos::REDUCE_SUM,
99 TEUCHOS_TEST_FOR_EXCEPTION(
true, std::invalid_argument,
100 ">>> ERROR (ROL::TeuchosBatchManager): sumAll(Vector<Real> &input, Vector<Real> &output) is not implemented");
104 Teuchos::barrier<Ordinal>(*comm_);
void minAll(Real *input, Real *output, int dim)
void maxAll(Real *input, Real *output, int dim)
virtual void sumAll(Vector< Real > &input, Vector< Real > &output)
const Teuchos::RCP< const Teuchos::Comm< Ordinal > > comm_
Defines the linear algebra or vector space interface.
void reduceAll(Real *input, Real *output, const Elementwise::ReductionOp< Real > &r)
void sumAll(Real *input, Real *output, int dim)
TeuchosBatchManager(const Teuchos::RCP< const Teuchos::Comm< Ordinal > > &comm)