Thanks Wolfgang.I am just replying to add a couple of details that were not 100% obvious to me. Maybe someone else will benefit from this when the search the post archive...
As Wolfgang stated, copying the vector that contains ghosted values (relevant dofs) into a completely distributed vector allows you to use l2_norm() on it.What I didn't realize is that the l2_norm() on a distributed vector calls the MPI_Allreduce behind the scene and thus no additional action is needed when writing your own code. On Saturday, March 2, 2019 at 10:28:03 AM UTC-6, Wolfgang Bangerth wrote: > > On 3/1/19 8:54 PM, Jean Ragusa wrote: > > > > 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? > > Yes! Create a completely distributed vector, copy your ghosted vector into > it, > and then compute the l2 norm of that completely distributed vector. That's > going to cost a bit of communication, but I suspect you're not doing it > often > enough to actually feel the difference :-) > > Cheers > W. > > -- > ------------------------------------------------------------------------ > Wolfgang Bangerth email: [email protected] > <javascript:> > www: http://www.math.colostate.edu/~bangerth/ > > -- The deal.II project is located at http://www.dealii.org/ For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en --- You received this message because you are subscribed to the Google Groups "deal.II User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
