# VecNorm#

Computes the vector norm.

## Synopsis#

```
#include "petscvec.h"
PetscErrorCode VecNorm(Vec x, NormType type, PetscReal *val)
```

Collective on Vec

## Input Parameters#

the vector**x -**the type of the norm requested**type -**

## Output Parameter#

the norm**val -**

## Values of NormType#

sum_i |x_i|**NORM_1 -**sqrt(sum_i |x_i|^2)**NORM_2 -**max_i |x_i|**NORM_INFINITY -**computes efficiently both NORM_1 and NORM_2 and stores them each in an output array**NORM_1_AND_2 -**

## Notes#

For complex numbers NORM_1 will return the traditional 1 norm of the 2 norm of the complex numbers; that is the 1 norm of the absolute values of the complex entries. In PETSc 3.6 and earlier releases it returned the 1 norm of the 1 norm of the complex entries (what is returned by the BLAS routine asum()). Both are valid norms but most people expect the former.

This routine stashes the computed norm value, repeated calls before the vector entries are changed are then rapid since the precomputed value is immediately available. Certain vector operations such as VecSet() store the norms so the value is immediately available and does not need to be explicitly computed. VecScale() updates any stashed norm values, thus calls after VecScale() do not need to explicitly recompute the norm.

## Performance Issues#

processor memory bandwidth - limits the speed of the computation of local portion of the norm**per-**limits the accumulation of the result across ranks, .i.e. MPI_Allreduce() time**interprocessor latency -**the time for the result will grow with the log base 2 of the number of ranks sharing the vector**number of ranks -**the rank with the largest number of vector entries will limit the speed up**work load imbalance -**

## See Also#

`VecDot()`

, `VecTDot()`

, `VecNorm()`

, `VecDotBegin()`

, `VecDotEnd()`

, `VecNormAvailable()`

,
`VecNormBegin()`

, `VecNormEnd()`

, `NormType()`

## Level#

intermediate

## Location#

## Examples#

src/vec/vec/tutorials/ex11.c.html

src/vec/vec/tutorials/ex11f90.F90.html

src/vec/vec/tutorials/ex11f.F90.html

src/vec/vec/tutorials/ex1.c.html

src/vec/vec/tutorials/ex1f90.F90.html

src/vec/vec/tutorials/ex1f.F90.html

src/vec/vec/tutorials/ex20f90.F90.html

src/vec/vec/tutorials/performance.c.html

src/mat/tutorials/ex2.c.html

src/mat/tutorials/ex3.c.html

src/mat/tutorials/ex9.c.html

## Implementations#

VecNorm_MPIKokkos in src/vec/vec/impls/mpi/kokkos/mpikok.kokkos.cxx

{
VecNorm_MPICUDA in src/vec/vec/impls/mpi/mpicuda/mpicuda.cu

{
VecNorm_MPIHIP in src/vec/vec/impls/mpi/mpihip/mpihip.hip.c

{
VecNorm_MPIViennaCL in src/vec/vec/impls/mpi/mpiviennacl/mpiviennacl.cxx

{
VecNorm_MPI in src/vec/vec/impls/mpi/pvec2.c

{
VecNorm_Nest in src/vec/vec/impls/nest/vecnest.c

{
VecNorm_Seq in src/vec/vec/impls/seq/bvec2.c

{
VecNorm_SeqKokkos in src/vec/vec/impls/seq/kokkos/veckok.kokkos.cxx

{
VecNorm_SeqCUDA in src/vec/vec/impls/seq/seqcuda/veccuda2.cu

{
VecNorm_SeqHIP in src/vec/vec/impls/seq/seqhip/vechip2.hip.c

{
VecNorm_SeqViennaCL in src/vec/vec/impls/seq/seqviennacl/vecviennacl.cxx

{

Index of all Vec routines

Table of Contents for all manual pages

Index of all manual pages