The data to be reduced, and invokables to be called whenever two reduction messages are combined and after the reduction has been completed.
More...
template<class T, class InvokeCombine, class InvokeFinal = funcl::Identity, class InvokeFinalExtraArgsIndices = std::index_sequence<>>
struct Parallel::ReductionDatum< T, InvokeCombine, InvokeFinal, InvokeFinalExtraArgsIndices >
The data to be reduced, and invokables to be called whenever two reduction messages are combined and after the reduction has been completed.
InvokeCombine
is a binary invokable that maps (T current_state, T element) -> T
, where the current_state
is the result of reductions so far. The InvokeFinal
is an n-ary that takes as its first argument a T result_of_reduction
and is invoked once after the reduction is completed. The additional arguments correspond to the resultant data of earlier ReductionDatum
template parameters in the ReductionData
, and are identified via the InvokeFinalExtraArgsIndices
, which must be a std::index_sequence
. Specifically, say you want the third ReductionDatum
's InvokeFinal
to be passed the first ReductionDatum
then std::index_sequence<0>
would be passed for InvokeFinalExtraArgsIndices
. Here is an example of computing the RMS error of the evolved variables u
and v
:
Parallel::ReductionData<Parallel::ReductionDatum<size_t, funcl::Plus<>>,
RmsRed, RmsRed>
Parallel::contribute_to_reduction<ProcessErrorNorms>(error_reduction,
my_proxy, array_proxy);
constexpr decltype(auto) square(const T &x)
Compute the square of x
Definition: ConstantExpressions.hpp:54
The data to be reduced, and invokables to be called whenever two reduction messages are combined and ...
Definition: Reduction.hpp:66
Functional for computing sqrt on an object.
Definition: Functional.hpp:273
with the receiving action:
struct ProcessErrorNorms {
template <typename ParallelComponent, typename DbTags, typename Metavariables,
typename ArrayIndex>
static void apply(db::DataBox<DbTags>& ,
const ArrayIndex& , const int points,
const double error_u, const double error_v) {
error_u,
sqrt(number_of_1d_array_elements *
square(1.0e-3) / points)));
error_v,
sqrt(number_of_1d_array_elements *
square(1.0e-4) / points)));
}
};
A Charm++ chare that caches global data once per Charm++ node.
Definition: GlobalCache.hpp:222
auto apply(F &&f, const ObservationBox< ComputeTagsList, DataBoxType > &observation_box, Args &&... args)
Apply the function object f using its nested argument_tags list of tags.
Definition: ObservationBox.hpp:238
auto sqrt(const TensorExpression< T, X, Symm, IndexList, tmpl::list< Args... > > &t)
Returns the tensor expression representing the square root of a tensor expression that evaluates to a...
Definition: SquareRoot.hpp:253
#define SPECTRE_PARALLEL_REQUIRE(expr)
A similar to Catch's REQUIRE statement, but can be used in tests that spawn several chares with possi...
Definition: TestingFramework.hpp:40
constexpr bool equal_within_roundoff(const Lhs &lhs, const Rhs &rhs, const double eps=std::numeric_limits< double >::epsilon() *100.0, const double scale=1.0)
Checks if two values lhs and rhs are equal within roundoff, by comparing abs(lhs - rhs) < (max(abs(lh...
Definition: EqualWithinRoundoff.hpp:48