Hi,
I have a solution vector with locally owned and locally relevant dofs. I want to compute its L2-norm. Using the l2_norm() on it caused a Trilinos error (I was going to compute the squared of the L2 norm, then do an MPI Allreduce on the resulting values).
So, I decided to code it "by hand" as follows:
double norm_squared = 0.;
const unsigned int start_ = (dist_solution.local_range().first), end_ = (dist_solution.local_range().second);
for (unsigned int i = start_; i < end_; ++i)
norm_squared += std::pow(dist_solution(i),2);
double norm_global =0.;
MPI_Allreduce(&norm_squared, &norm_global, 1, MPI_DOUBLE, MPI_SUM, mpi_communicator);
norm_global = std::sqrt(norm_global);
Even though this works, I was wondering if there is a better way to do this?
Cheers,
--jean