28 void add(
double value )
48 if( sorted.empty() )
return 0.0;
49 if( sorted.size() == 1 )
return *sorted.begin();
53 for(
double val : sorted )
61 if( sorted.empty() )
return 0.0;
62 if( sorted.size() == 1 )
return *sorted.begin();
67 for(
double val : sorted )
74 const typename moab::TempestOnlineMap::WeightColVector& x,
75 typename moab::TempestOnlineMap::WeightRowVector& result )
77 constexpr
bool useKahanSum =
false;
78 constexpr
bool usePairwiseSum =
false;
83 for(
int row = 0; row < A.outerSize(); ++row )
85 std::set< double > accumulators;
86 for(
typename moab::TempestOnlineMap::WeightMatrix::InnerIterator it( A, row ); it; ++it )
89 accumulators.insert( it.value() * x( it.col() ) );
91 if( usePairwiseSum ) result( row ) =
pairwiseSum( accumulators );
94 if( !usePairwiseSum && !useKahanSum )
97 for(
double val : accumulators )
107 const typename moab::TempestOnlineMap::WeightColVector& x,
108 typename moab::TempestOnlineMap::WeightRowVector& result )
113 for(
int row = 0; row < A.outerSize(); ++row )
116 for(
typename moab::TempestOnlineMap::WeightMatrix::InnerIterator it( A, row ); it; ++it )
118 double product = it.value() * x( it.col() );
122 result( row ) = kahan.
result();
128 const typename moab::TempestOnlineMap::WeightColVector& x,
129 typename moab::TempestOnlineMap::WeightRowVector& result )
134 for(
int row = 0; row < A.outerSize(); ++row )
136 for(
typename moab::TempestOnlineMap::WeightMatrix::InnerIterator it( A, row ); it; ++it )
138 const double product = it.value() * x( it.col() );
145 const typename moab::TempestOnlineMap::WeightColVector& x,
146 typename moab::TempestOnlineMap::WeightRowVector& result )
153 const typename moab::TempestOnlineMap::WeightRowVector& x,
154 typename moab::TempestOnlineMap::WeightColVector& result )
159 std::vector< std::set< double > > accumulators( A.cols() );
162 for(
int row = 0; row < A.outerSize(); ++row )
164 for(
typename moab::TempestOnlineMap::WeightMatrix::InnerIterator it( A, row ); it; ++it )
166 accumulators[it.col()].insert( it.value() * x( row ) );
171 for(
int col = 0; col < A.cols(); ++col )
180 const typename moab::TempestOnlineMap::WeightRowVector& x,
181 typename moab::TempestOnlineMap::WeightColVector& result )
186 for(
int row = 0; row < A.outerSize(); ++row )
188 for(
typename moab::TempestOnlineMap::WeightMatrix::InnerIterator it( A, row ); it; ++it )
190 const double product = it.value() * x( row );
198 const typename moab::TempestOnlineMap::WeightRowVector& x,
199 typename moab::TempestOnlineMap::WeightColVector& result )
201 result = A.adjoint() * x;
206 std::vector< double >& tgtVals,
210 m_rowVector.setZero();
211 m_colVector.setZero();
214 std::stringstream sstr;
215 static int callId = 0;
217 sstr <<
"projection_id_" << callId <<
"_s_" <<
size <<
"_rk_" <<
rank <<
".txt";
218 std::ofstream output_file( sstr.str() );
226 for(
unsigned i = 0; i < srcVals.size(); ++i )
238 for(
unsigned i = 0; i < tgtVals.size(); ++i )
247 output_file <<
"ColVector: " << m_colVector.size() <<
", SrcVals: " << srcVals.size()
250 for(
unsigned i = 0; i < srcVals.size(); ++i )
267 output_file <<
"RowVector: " << m_rowVector.size() <<
", TgtVals:" << tgtVals.size()
270 for(
unsigned i = 0; i < tgtVals.size(); ++i )